blob: 857a193e3c92534e3698fc867955c5403619fdb1 [file] [log] [blame]
// 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 = "*"
)