| // Copyright (C) 2019 Google Inc. | |
| // | |
| // Licensed under the Apache License, Version 2.0 (the "License"); | |
| // you may not use this file except in compliance with the License. | |
| // You may obtain a copy of the License at | |
| // | |
| // http://www.apache.org/licenses/LICENSE-2.0 | |
| // | |
| // Unless required by applicable law or agreed to in writing, software | |
| // distributed under the License is distributed on an "AS IS" BASIS, | |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| // See the License for the specific language governing permissions and | |
| // limitations under the License. | |
| // Package grammar holds the JSON type definitions for the SPIR-V grammar schema. | |
| // | |
| // See https://www.khronos.org/registry/spir-v/specs/unified1/MachineReadableGrammar.html | |
| // for more information. | |
| package grammar | |
| // Root is the top-level structure of the JSON grammar. | |
| type Root struct { | |
| MagicNumber string `json:"magic_number"` | |
| MajorVersion int `json:"major_version"` | |
| MinorVersion int `json:"minor_version"` | |
| Revision int `json:"revision"` | |
| Instructions []Instruction `json:"instructions"` | |
| OperandKinds []OperandKind `json:"operand_kinds"` | |
| } | |
| // Instruction holds information about a specific SPIR-V instruction. | |
| type Instruction struct { | |
| Opname string `json:"opname"` | |
| Class string `json:"class"` | |
| Opcode int `json:"opcode"` | |
| Operands []Operand `json:"operands"` | |
| } | |
| // Operand contains information about a logical operand for an instruction. | |
| type Operand struct { | |
| Kind string `json:"kind"` | |
| Name string `json:"name"` | |
| Quantifier Quantifier `json:"quantifier"` | |
| } | |
| // OperandKind contains information about a specific operand kind. | |
| type OperandKind struct { | |
| Category string `json:"category"` | |
| Kind string `json:"kind"` | |
| Enumerants []Enumerant `json:"enumerants"` | |
| Bases []string `json:"bases"` | |
| } | |
| // Enumerant contains information about an enumerant in an enum. | |
| type Enumerant struct { | |
| Enumerant string `json:"enumerant"` | |
| Value interface{} `json:"value"` | |
| Capabilities []string `json:"capabilities"` | |
| Parameters []Parameter `json:"parameters"` | |
| Version string `json:"version"` | |
| } | |
| // Parameter contains information about a logical parameter for an enumerant. | |
| type Parameter struct { | |
| Kind string `json:"kind"` | |
| Name string `json:"name"` | |
| } | |
| // Quantifier indicates the number of times the quantified term may appear. | |
| type Quantifier string | |
| const ( | |
| // Once indicates the quantified term may appear exactly once. | |
| Once Quantifier = "" | |
| // ZeroOrOnce indicates the quantified term may appear zero or one | |
| // time; an optional term. | |
| ZeroOrOnce Quantifier = "?" | |
| // ZeroOrMany indicates the quantified term may appear any number of | |
| // times. | |
| ZeroOrMany Quantifier = "*" | |
| ) |