],
"magic_number" : "0x07230203",
"major_version" : 1,
- "minor_version" : 3,
+ "minor_version" : 4,
"revision" : 1,
"instructions" : [
{
"operands" : [
{ "kind" : "IdRef", "name" : "'Target'" },
{ "kind" : "IdRef", "name" : "'Source'" },
+ { "kind" : "MemoryAccess", "quantifier" : "?" },
{ "kind" : "MemoryAccess", "quantifier" : "?" }
]
},
{ "kind" : "IdRef", "name" : "'Target'" },
{ "kind" : "IdRef", "name" : "'Source'" },
{ "kind" : "IdRef", "name" : "'Size'" },
+ { "kind" : "MemoryAccess", "quantifier" : "?" },
{ "kind" : "MemoryAccess", "quantifier" : "?" }
],
"capabilities" : [ "Addresses" ]
{ "kind" : "IdRef", "name" : "'Value'" },
{ "kind" : "IdRef", "name" : "'Comparator'" }
],
- "capabilities" : [ "Kernel" ]
+ "capabilities" : [ "Kernel" ],
+ "lastVersion" : "1.3"
},
{
"opname" : "OpAtomicIIncrement",
"version" : "1.3"
},
{
+ "opname" : "OpCopyLogical",
+ "opcode" : 400,
+ "operands" : [
+ { "kind" : "IdResultType" },
+ { "kind" : "IdResult" },
+ { "kind" : "IdRef", "name" : "'Operand'" }
+ ],
+ "version" : "1.4"
+ },
+ {
+ "opname" : "OpPtrEqual",
+ "opcode" : 401,
+ "operands" : [
+ { "kind" : "IdResultType" },
+ { "kind" : "IdResult" },
+ { "kind" : "IdRef", "name" : "'Operand 1'" },
+ { "kind" : "IdRef", "name" : "'Operand 2'" }
+ ],
+ "version" : "1.4"
+ },
+ {
+ "opname" : "OpPtrNotEqual",
+ "opcode" : 402,
+ "operands" : [
+ { "kind" : "IdResultType" },
+ { "kind" : "IdResult" },
+ { "kind" : "IdRef", "name" : "'Operand 1'" },
+ { "kind" : "IdRef", "name" : "'Operand 2'" }
+ ],
+ "version" : "1.4"
+ },
+ {
+ "opname" : "OpPtrDiff",
+ "opcode" : 403,
+ "operands" : [
+ { "kind" : "IdResultType" },
+ { "kind" : "IdResult" },
+ { "kind" : "IdRef", "name" : "'Operand 1'" },
+ { "kind" : "IdRef", "name" : "'Operand 2'" }
+ ],
+ "capabilities" : [ "Addresses", "VariablePointers", "VariablePointersStorageBuffer" ],
+ "version" : "1.4"
+ },
+ {
"opname" : "OpSubgroupBallotKHR",
"opcode" : 4421,
"operands" : [
"version" : "None"
},
{
+ "opname" : "OpDecorateString",
+ "opcode" : 5632,
+ "operands" : [
+ { "kind" : "IdRef", "name" : "'Target'" },
+ { "kind" : "Decoration" }
+ ],
+ "extensions" : [ "SPV_GOOGLE_decorate_string", "SPV_GOOGLE_hlsl_functionality1" ],
+ "version" : "1.4"
+ },
+ {
"opname" : "OpDecorateStringGOOGLE",
"opcode" : 5632,
"operands" : [
{ "kind" : "Decoration" }
],
"extensions" : [ "SPV_GOOGLE_decorate_string", "SPV_GOOGLE_hlsl_functionality1" ],
- "version" : "None"
+ "version" : "1.4"
+ },
+ {
+ "opname" : "OpMemberDecorateString",
+ "opcode" : 5633,
+ "operands" : [
+ { "kind" : "IdRef", "name" : "'Struct Type'" },
+ { "kind" : "LiteralInteger", "name" : "'Member'" },
+ { "kind" : "Decoration" }
+ ],
+ "extensions" : [ "SPV_GOOGLE_decorate_string", "SPV_GOOGLE_hlsl_functionality1" ],
+ "version" : "1.4"
},
{
"opname" : "OpMemberDecorateStringGOOGLE",
{ "kind" : "Decoration" }
],
"extensions" : [ "SPV_GOOGLE_decorate_string", "SPV_GOOGLE_hlsl_functionality1" ],
- "version" : "None"
+ "version" : "1.4"
},
{
"opname" : "OpVmeImageINTEL",
"enumerant" : "VolatileTexelKHR",
"value" : "0x0800",
"capabilities" : [ "VulkanMemoryModelKHR" ]
+ },
+ {
+ "enumerant" : "SignExtend",
+ "value" : "0x1000",
+ "version" : "1.4"
+ },
+ {
+ "enumerant" : "ZeroExtend",
+ "value" : "0x2000",
+ "version" : "1.4"
}
]
},
{ "kind" : "LiteralInteger" }
],
"version" : "1.1"
+ },
+ {
+ "enumerant" : "MinIterations",
+ "value" : "0x0010",
+ "parameters" : [
+ { "kind" : "LiteralInteger" }
+ ],
+ "version" : "1.4"
+ },
+ {
+ "enumerant" : "MaxIterations",
+ "value" : "0x0020",
+ "parameters" : [
+ { "kind" : "LiteralInteger" }
+ ],
+ "version" : "1.4"
+ },
+ {
+ "enumerant" : "IterationMultiple",
+ "value" : "0x0040",
+ "parameters" : [
+ { "kind" : "LiteralInteger" }
+ ],
+ "version" : "1.4"
+ },
+ {
+ "enumerant" : "PeelCount",
+ "value" : "0x0080",
+ "parameters" : [
+ { "kind" : "LiteralInteger" }
+ ],
+ "version" : "1.4"
+ },
+ {
+ "enumerant" : "PartialCount",
+ "value" : "0x0100",
+ "parameters" : [
+ { "kind" : "LiteralInteger" }
+ ],
+ "version" : "1.4"
}
]
},
"extensions" : [ "SPV_KHR_post_depth_coverage" ],
"version" : "None"
},
-{
+ {
"enumerant" : "DenormPreserve",
"value" : 4459,
"capabilities" : [ "DenormPreserve" ],
"parameters" : [
{ "kind" : "LiteralInteger", "name" : "'Target Width'" }
],
- "version" : "None"
+ "version" : "1.4"
},
{
"enumerant" : "DenormFlushToZero",
"parameters" : [
{ "kind" : "LiteralInteger", "name" : "'Target Width'" }
],
- "version" : "None"
+ "version" : "1.4"
},
{
"enumerant" : "SignedZeroInfNanPreserve",
"parameters" : [
{ "kind" : "LiteralInteger", "name" : "'Target Width'" }
],
- "version" : "None"
+ "version" : "1.4"
},
{
"enumerant" : "RoundingModeRTE",
"parameters" : [
{ "kind" : "LiteralInteger", "name" : "'Target Width'" }
],
- "version" : "None"
+ "version" : "1.4"
},
{
"enumerant" : "RoundingModeRTZ",
"parameters" : [
{ "kind" : "LiteralInteger", "name" : "'Target Width'" }
],
- "version" : "None"
+ "version" : "1.4"
},
{
"enumerant" : "StencilRefReplacingEXT",
{
"enumerant" : "BufferBlock",
"value" : 3,
- "capabilities" : [ "Shader" ]
+ "capabilities" : [ "Shader" ],
+ "lastVersion" : "1.3"
},
{
"enumerant" : "RowMajor",
"capabilities" : [ "Shader" ]
},
{
+ "enumerant" : "UniformId",
+ "value" : 27,
+ "capabilities" : [ "Shader" ],
+ "parameters" : [
+ { "kind" : "IdScope", "name" : "'Execution'" }
+ ],
+ "version" : "1.4"
+ },
+ {
"enumerant" : "SaturatedConversion",
"value" : 28,
"capabilities" : [ "Kernel" ]
"enumerant" : "NoSignedWrap",
"value" : 4469,
"extensions" : [ "SPV_KHR_no_integer_wrap_decoration" ],
- "version" : "None"
+ "version" : "1.4"
},
{
"enumerant" : "NoUnsignedWrap",
"value" : 4470,
"extensions" : [ "SPV_KHR_no_integer_wrap_decoration" ],
- "version" : "None"
+ "version" : "1.4"
},
{
"enumerant" : "ExplicitInterpAMD",
"extensions" : [ "SPV_NV_mesh_shader" ],
"version" : "None"
},
- {
+ {
"enumerant" : "PerVertexNV",
"value" : 5285,
"capabilities" : [ "FragmentBarycentricNV" ],
"capabilities" : [ "ShaderNonUniformEXT" ]
},
{
+ "enumerant" : "CounterBuffer",
+ "value" : 5634,
+ "parameters" : [
+ { "kind" : "IdRef", "name" : "'Counter Buffer'" }
+ ],
+ "version" : "1.4"
+ },
+ {
"enumerant" : "HlslCounterBufferGOOGLE",
"value" : 5634,
"parameters" : [
"version" : "None"
},
{
+ "enumerant" : "UserSemantic",
+ "value" : 5635,
+ "parameters" : [
+ { "kind" : "LiteralString", "name" : "'Semantic'" }
+ ],
+ "version" : "1.4"
+ },
+ {
"enumerant" : "HlslSemanticGOOGLE",
"value" : 5635,
"parameters" : [
"enumerant" : "DenormPreserve",
"value" : 4464,
"extensions" : [ "SPV_KHR_float_controls" ],
- "version" : "None"
+ "version" : "1.4"
},
{
"enumerant" : "DenormFlushToZero",
"value" : 4465,
"extensions" : [ "SPV_KHR_float_controls" ],
- "version" : "None"
+ "version" : "1.4"
},
{
"enumerant" : "SignedZeroInfNanPreserve",
"value" : 4466,
"extensions" : [ "SPV_KHR_float_controls" ],
- "version" : "None"
+ "version" : "1.4"
},
{
"enumerant" : "RoundingModeRTE",
"value" : 4467,
"extensions" : [ "SPV_KHR_float_controls" ],
- "version" : "None"
+ "version" : "1.4"
},
{
"enumerant" : "RoundingModeRTZ",
"value" : 4468,
"extensions" : [ "SPV_KHR_float_controls" ],
- "version" : "None"
+ "version" : "1.4"
},
{
"enumerant" : "Float16ImageAMD",
public static class Specification
{
public const uint MagicNumber = 0x07230203;
- public const uint Version = 0x00010300;
- public const uint Revision = 7;
+ public const uint Version = 0x00010400;
+ public const uint Revision = 1;
public const uint OpCodeMask = 0xffff;
public const uint WordCountShift = 16;
MakeTexelVisibleKHR = 9,
NonPrivateTexelKHR = 10,
VolatileTexelKHR = 11,
+ SignExtend = 12,
+ ZeroExtend = 13,
}
public enum ImageOperandsMask
MakeTexelVisibleKHR = 0x00000200,
NonPrivateTexelKHR = 0x00000400,
VolatileTexelKHR = 0x00000800,
+ SignExtend = 0x00001000,
+ ZeroExtend = 0x00002000,
}
public enum FPFastMathModeShift
NonWritable = 24,
NonReadable = 25,
Uniform = 26,
+ UniformId = 27,
SaturatedConversion = 28,
Stream = 29,
Location = 30,
NonUniformEXT = 5300,
RestrictPointerEXT = 5355,
AliasedPointerEXT = 5356,
+ CounterBuffer = 5634,
HlslCounterBufferGOOGLE = 5634,
HlslSemanticGOOGLE = 5635,
+ UserSemantic = 5635,
}
public enum BuiltIn
DontUnroll = 1,
DependencyInfinite = 2,
DependencyLength = 3,
+ MinIterations = 4,
+ MaxIterations = 5,
+ IterationMultiple = 6,
+ PeelCount = 7,
+ PartialCount = 8,
}
public enum LoopControlMask
DontUnroll = 0x00000002,
DependencyInfinite = 0x00000004,
DependencyLength = 0x00000008,
+ MinIterations = 0x00000010,
+ MaxIterations = 0x00000020,
+ IterationMultiple = 0x00000040,
+ PeelCount = 0x00000080,
+ PartialCount = 0x00000100,
}
public enum FunctionControlShift
OpGroupNonUniformLogicalXor = 364,
OpGroupNonUniformQuadBroadcast = 365,
OpGroupNonUniformQuadSwap = 366,
+ OpCopyLogical = 400,
+ OpPtrEqual = 401,
+ OpPtrNotEqual = 402,
+ OpPtrDiff = 403,
OpSubgroupBallotKHR = 4421,
OpSubgroupFirstInvocationKHR = 4422,
OpSubgroupAllKHR = 4428,
OpSubgroupImageBlockWriteINTEL = 5578,
OpSubgroupImageMediaBlockReadINTEL = 5580,
OpSubgroupImageMediaBlockWriteINTEL = 5581,
+ OpDecorateString = 5632,
OpDecorateStringGOOGLE = 5632,
+ OpMemberDecorateString = 5633,
OpMemberDecorateStringGOOGLE = 5633,
OpVmeImageINTEL = 5699,
OpTypeVmeImageINTEL = 5700,
typedef unsigned int SpvId;
-#define SPV_VERSION 0x10300
-#define SPV_REVISION 7
+#define SPV_VERSION 0x10400
+#define SPV_REVISION 1
static const unsigned int SpvMagicNumber = 0x07230203;
-static const unsigned int SpvVersion = 0x00010300;
-static const unsigned int SpvRevision = 7;
+static const unsigned int SpvVersion = 0x00010400;
+static const unsigned int SpvRevision = 1;
static const unsigned int SpvOpCodeMask = 0xffff;
static const unsigned int SpvWordCountShift = 16;
SpvImageOperandsMakeTexelVisibleKHRShift = 9,
SpvImageOperandsNonPrivateTexelKHRShift = 10,
SpvImageOperandsVolatileTexelKHRShift = 11,
+ SpvImageOperandsSignExtendShift = 12,
+ SpvImageOperandsZeroExtendShift = 13,
SpvImageOperandsMax = 0x7fffffff,
} SpvImageOperandsShift;
SpvImageOperandsMakeTexelVisibleKHRMask = 0x00000200,
SpvImageOperandsNonPrivateTexelKHRMask = 0x00000400,
SpvImageOperandsVolatileTexelKHRMask = 0x00000800,
+ SpvImageOperandsSignExtendMask = 0x00001000,
+ SpvImageOperandsZeroExtendMask = 0x00002000,
} SpvImageOperandsMask;
typedef enum SpvFPFastMathModeShift_ {
SpvDecorationNonWritable = 24,
SpvDecorationNonReadable = 25,
SpvDecorationUniform = 26,
+ SpvDecorationUniformId = 27,
SpvDecorationSaturatedConversion = 28,
SpvDecorationStream = 29,
SpvDecorationLocation = 30,
SpvDecorationNonUniformEXT = 5300,
SpvDecorationRestrictPointerEXT = 5355,
SpvDecorationAliasedPointerEXT = 5356,
+ SpvDecorationCounterBuffer = 5634,
SpvDecorationHlslCounterBufferGOOGLE = 5634,
SpvDecorationHlslSemanticGOOGLE = 5635,
+ SpvDecorationUserSemantic = 5635,
SpvDecorationMax = 0x7fffffff,
} SpvDecoration;
SpvLoopControlDontUnrollShift = 1,
SpvLoopControlDependencyInfiniteShift = 2,
SpvLoopControlDependencyLengthShift = 3,
+ SpvLoopControlMinIterationsShift = 4,
+ SpvLoopControlMaxIterationsShift = 5,
+ SpvLoopControlIterationMultipleShift = 6,
+ SpvLoopControlPeelCountShift = 7,
+ SpvLoopControlPartialCountShift = 8,
SpvLoopControlMax = 0x7fffffff,
} SpvLoopControlShift;
SpvLoopControlDontUnrollMask = 0x00000002,
SpvLoopControlDependencyInfiniteMask = 0x00000004,
SpvLoopControlDependencyLengthMask = 0x00000008,
+ SpvLoopControlMinIterationsMask = 0x00000010,
+ SpvLoopControlMaxIterationsMask = 0x00000020,
+ SpvLoopControlIterationMultipleMask = 0x00000040,
+ SpvLoopControlPeelCountMask = 0x00000080,
+ SpvLoopControlPartialCountMask = 0x00000100,
} SpvLoopControlMask;
typedef enum SpvFunctionControlShift_ {
SpvOpGroupNonUniformLogicalXor = 364,
SpvOpGroupNonUniformQuadBroadcast = 365,
SpvOpGroupNonUniformQuadSwap = 366,
+ SpvOpCopyLogical = 400,
+ SpvOpPtrEqual = 401,
+ SpvOpPtrNotEqual = 402,
+ SpvOpPtrDiff = 403,
SpvOpSubgroupBallotKHR = 4421,
SpvOpSubgroupFirstInvocationKHR = 4422,
SpvOpSubgroupAllKHR = 4428,
SpvOpSubgroupImageBlockWriteINTEL = 5578,
SpvOpSubgroupImageMediaBlockReadINTEL = 5580,
SpvOpSubgroupImageMediaBlockWriteINTEL = 5581,
+ SpvOpDecorateString = 5632,
SpvOpDecorateStringGOOGLE = 5632,
+ SpvOpMemberDecorateString = 5633,
SpvOpMemberDecorateStringGOOGLE = 5633,
SpvOpVmeImageINTEL = 5699,
SpvOpTypeVmeImageINTEL = 5700,
case SpvOpGroupNonUniformLogicalXor: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupNonUniformQuadBroadcast: *hasResult = true; *hasResultType = true; break;
case SpvOpGroupNonUniformQuadSwap: *hasResult = true; *hasResultType = true; break;
+ case SpvOpCopyLogical: *hasResult = true; *hasResultType = true; break;
+ case SpvOpPtrEqual: *hasResult = true; *hasResultType = true; break;
+ case SpvOpPtrNotEqual: *hasResult = true; *hasResultType = true; break;
+ case SpvOpPtrDiff: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupBallotKHR: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupFirstInvocationKHR: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAllKHR: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupImageBlockWriteINTEL: *hasResult = false; *hasResultType = false; break;
case SpvOpSubgroupImageMediaBlockReadINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupImageMediaBlockWriteINTEL: *hasResult = false; *hasResultType = false; break;
+ case SpvOpDecorateString: *hasResult = false; *hasResultType = false; break;
case SpvOpDecorateStringGOOGLE: *hasResult = false; *hasResultType = false; break;
+ case SpvOpMemberDecorateString: *hasResult = false; *hasResultType = false; break;
case SpvOpMemberDecorateStringGOOGLE: *hasResult = false; *hasResultType = false; break;
case SpvOpVmeImageINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpTypeVmeImageINTEL: *hasResult = true; *hasResultType = false; break;
typedef unsigned int Id;
-#define SPV_VERSION 0x10300
-#define SPV_REVISION 7
+#define SPV_VERSION 0x10400
+#define SPV_REVISION 1
static const unsigned int MagicNumber = 0x07230203;
-static const unsigned int Version = 0x00010300;
-static const unsigned int Revision = 7;
+static const unsigned int Version = 0x00010400;
+static const unsigned int Revision = 1;
static const unsigned int OpCodeMask = 0xffff;
static const unsigned int WordCountShift = 16;
ImageOperandsMakeTexelVisibleKHRShift = 9,
ImageOperandsNonPrivateTexelKHRShift = 10,
ImageOperandsVolatileTexelKHRShift = 11,
+ ImageOperandsSignExtendShift = 12,
+ ImageOperandsZeroExtendShift = 13,
ImageOperandsMax = 0x7fffffff,
};
ImageOperandsMakeTexelVisibleKHRMask = 0x00000200,
ImageOperandsNonPrivateTexelKHRMask = 0x00000400,
ImageOperandsVolatileTexelKHRMask = 0x00000800,
+ ImageOperandsSignExtendMask = 0x00001000,
+ ImageOperandsZeroExtendMask = 0x00002000,
};
enum FPFastMathModeShift {
DecorationNonWritable = 24,
DecorationNonReadable = 25,
DecorationUniform = 26,
+ DecorationUniformId = 27,
DecorationSaturatedConversion = 28,
DecorationStream = 29,
DecorationLocation = 30,
DecorationNonUniformEXT = 5300,
DecorationRestrictPointerEXT = 5355,
DecorationAliasedPointerEXT = 5356,
+ DecorationCounterBuffer = 5634,
DecorationHlslCounterBufferGOOGLE = 5634,
DecorationHlslSemanticGOOGLE = 5635,
+ DecorationUserSemantic = 5635,
DecorationMax = 0x7fffffff,
};
LoopControlDontUnrollShift = 1,
LoopControlDependencyInfiniteShift = 2,
LoopControlDependencyLengthShift = 3,
+ LoopControlMinIterationsShift = 4,
+ LoopControlMaxIterationsShift = 5,
+ LoopControlIterationMultipleShift = 6,
+ LoopControlPeelCountShift = 7,
+ LoopControlPartialCountShift = 8,
LoopControlMax = 0x7fffffff,
};
LoopControlDontUnrollMask = 0x00000002,
LoopControlDependencyInfiniteMask = 0x00000004,
LoopControlDependencyLengthMask = 0x00000008,
+ LoopControlMinIterationsMask = 0x00000010,
+ LoopControlMaxIterationsMask = 0x00000020,
+ LoopControlIterationMultipleMask = 0x00000040,
+ LoopControlPeelCountMask = 0x00000080,
+ LoopControlPartialCountMask = 0x00000100,
};
enum FunctionControlShift {
OpGroupNonUniformLogicalXor = 364,
OpGroupNonUniformQuadBroadcast = 365,
OpGroupNonUniformQuadSwap = 366,
+ OpCopyLogical = 400,
+ OpPtrEqual = 401,
+ OpPtrNotEqual = 402,
+ OpPtrDiff = 403,
OpSubgroupBallotKHR = 4421,
OpSubgroupFirstInvocationKHR = 4422,
OpSubgroupAllKHR = 4428,
OpSubgroupImageBlockWriteINTEL = 5578,
OpSubgroupImageMediaBlockReadINTEL = 5580,
OpSubgroupImageMediaBlockWriteINTEL = 5581,
+ OpDecorateString = 5632,
OpDecorateStringGOOGLE = 5632,
+ OpMemberDecorateString = 5633,
OpMemberDecorateStringGOOGLE = 5633,
OpVmeImageINTEL = 5699,
OpTypeVmeImageINTEL = 5700,
case OpGroupNonUniformLogicalXor: *hasResult = true; *hasResultType = true; break;
case OpGroupNonUniformQuadBroadcast: *hasResult = true; *hasResultType = true; break;
case OpGroupNonUniformQuadSwap: *hasResult = true; *hasResultType = true; break;
+ case OpCopyLogical: *hasResult = true; *hasResultType = true; break;
+ case OpPtrEqual: *hasResult = true; *hasResultType = true; break;
+ case OpPtrNotEqual: *hasResult = true; *hasResultType = true; break;
+ case OpPtrDiff: *hasResult = true; *hasResultType = true; break;
case OpSubgroupBallotKHR: *hasResult = true; *hasResultType = true; break;
case OpSubgroupFirstInvocationKHR: *hasResult = true; *hasResultType = true; break;
case OpSubgroupAllKHR: *hasResult = true; *hasResultType = true; break;
case OpSubgroupImageBlockWriteINTEL: *hasResult = false; *hasResultType = false; break;
case OpSubgroupImageMediaBlockReadINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupImageMediaBlockWriteINTEL: *hasResult = false; *hasResultType = false; break;
+ case OpDecorateString: *hasResult = false; *hasResultType = false; break;
case OpDecorateStringGOOGLE: *hasResult = false; *hasResultType = false; break;
+ case OpMemberDecorateString: *hasResult = false; *hasResultType = false; break;
case OpMemberDecorateStringGOOGLE: *hasResult = false; *hasResultType = false; break;
case OpVmeImageINTEL: *hasResult = true; *hasResultType = true; break;
case OpTypeVmeImageINTEL: *hasResult = true; *hasResultType = false; break;
typedef unsigned int Id;
-#define SPV_VERSION 0x10300
-#define SPV_REVISION 7
+#define SPV_VERSION 0x10400
+#define SPV_REVISION 1
static const unsigned int MagicNumber = 0x07230203;
-static const unsigned int Version = 0x00010300;
-static const unsigned int Revision = 7;
+static const unsigned int Version = 0x00010400;
+static const unsigned int Revision = 1;
static const unsigned int OpCodeMask = 0xffff;
static const unsigned int WordCountShift = 16;
MakeTexelVisibleKHR = 9,
NonPrivateTexelKHR = 10,
VolatileTexelKHR = 11,
+ SignExtend = 12,
+ ZeroExtend = 13,
Max = 0x7fffffff,
};
MakeTexelVisibleKHR = 0x00000200,
NonPrivateTexelKHR = 0x00000400,
VolatileTexelKHR = 0x00000800,
+ SignExtend = 0x00001000,
+ ZeroExtend = 0x00002000,
};
enum class FPFastMathModeShift : unsigned {
NonWritable = 24,
NonReadable = 25,
Uniform = 26,
+ UniformId = 27,
SaturatedConversion = 28,
Stream = 29,
Location = 30,
NonUniformEXT = 5300,
RestrictPointerEXT = 5355,
AliasedPointerEXT = 5356,
+ CounterBuffer = 5634,
HlslCounterBufferGOOGLE = 5634,
HlslSemanticGOOGLE = 5635,
+ UserSemantic = 5635,
Max = 0x7fffffff,
};
DontUnroll = 1,
DependencyInfinite = 2,
DependencyLength = 3,
+ MinIterations = 4,
+ MaxIterations = 5,
+ IterationMultiple = 6,
+ PeelCount = 7,
+ PartialCount = 8,
Max = 0x7fffffff,
};
DontUnroll = 0x00000002,
DependencyInfinite = 0x00000004,
DependencyLength = 0x00000008,
+ MinIterations = 0x00000010,
+ MaxIterations = 0x00000020,
+ IterationMultiple = 0x00000040,
+ PeelCount = 0x00000080,
+ PartialCount = 0x00000100,
};
enum class FunctionControlShift : unsigned {
OpGroupNonUniformLogicalXor = 364,
OpGroupNonUniformQuadBroadcast = 365,
OpGroupNonUniformQuadSwap = 366,
+ OpCopyLogical = 400,
+ OpPtrEqual = 401,
+ OpPtrNotEqual = 402,
+ OpPtrDiff = 403,
OpSubgroupBallotKHR = 4421,
OpSubgroupFirstInvocationKHR = 4422,
OpSubgroupAllKHR = 4428,
OpSubgroupImageBlockWriteINTEL = 5578,
OpSubgroupImageMediaBlockReadINTEL = 5580,
OpSubgroupImageMediaBlockWriteINTEL = 5581,
+ OpDecorateString = 5632,
OpDecorateStringGOOGLE = 5632,
+ OpMemberDecorateString = 5633,
OpMemberDecorateStringGOOGLE = 5633,
OpVmeImageINTEL = 5699,
OpTypeVmeImageINTEL = 5700,
case Op::OpGroupNonUniformLogicalXor: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupNonUniformQuadBroadcast: *hasResult = true; *hasResultType = true; break;
case Op::OpGroupNonUniformQuadSwap: *hasResult = true; *hasResultType = true; break;
+ case Op::OpCopyLogical: *hasResult = true; *hasResultType = true; break;
+ case Op::OpPtrEqual: *hasResult = true; *hasResultType = true; break;
+ case Op::OpPtrNotEqual: *hasResult = true; *hasResultType = true; break;
+ case Op::OpPtrDiff: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupBallotKHR: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupFirstInvocationKHR: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupAllKHR: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupImageBlockWriteINTEL: *hasResult = false; *hasResultType = false; break;
case Op::OpSubgroupImageMediaBlockReadINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpSubgroupImageMediaBlockWriteINTEL: *hasResult = false; *hasResultType = false; break;
+ case Op::OpDecorateString: *hasResult = false; *hasResultType = false; break;
case Op::OpDecorateStringGOOGLE: *hasResult = false; *hasResultType = false; break;
+ case Op::OpMemberDecorateString: *hasResult = false; *hasResultType = false; break;
case Op::OpMemberDecorateStringGOOGLE: *hasResult = false; *hasResultType = false; break;
case Op::OpVmeImageINTEL: *hasResult = true; *hasResultType = true; break;
case Op::OpTypeVmeImageINTEL: *hasResult = true; *hasResultType = false; break;
]
],
"MagicNumber": 119734787,
- "Version": 66304,
- "Revision": 7,
+ "Version": 66560,
+ "Revision": 1,
"OpCodeMask": 65535,
"WordCountShift": 16
},
"MakeTexelAvailableKHR": 8,
"MakeTexelVisibleKHR": 9,
"NonPrivateTexelKHR": 10,
- "VolatileTexelKHR": 11
+ "VolatileTexelKHR": 11,
+ "SignExtend": 12,
+ "ZeroExtend": 13
}
},
{
"NonWritable": 24,
"NonReadable": 25,
"Uniform": 26,
+ "UniformId": 27,
"SaturatedConversion": 28,
"Stream": 29,
"Location": 30,
"NonUniformEXT": 5300,
"RestrictPointerEXT": 5355,
"AliasedPointerEXT": 5356,
+ "CounterBuffer": 5634,
"HlslCounterBufferGOOGLE": 5634,
"HlslSemanticGOOGLE": 5635
+ "UserSemantic": 5635
}
},
{
"Unroll": 0,
"DontUnroll": 1,
"DependencyInfinite": 2,
- "DependencyLength": 3
+ "DependencyLength": 3,
+ "MinIterations": 4,
+ "MaxIterations": 5,
+ "IterationMultiple": 6,
+ "PeelCount": 7,
+ "PartialCount": 8
}
},
{
"OpGroupNonUniformLogicalXor": 364,
"OpGroupNonUniformQuadBroadcast": 365,
"OpGroupNonUniformQuadSwap": 366,
+ "OpCopyLogical": 400,
+ "OpPtrEqual": 401,
+ "OpPtrNotEqual": 402,
+ "OpPtrDiff": 403,
"OpSubgroupBallotKHR": 4421,
"OpSubgroupFirstInvocationKHR": 4422,
"OpSubgroupAllKHR": 4428,
"OpSubgroupImageBlockWriteINTEL": 5578,
"OpSubgroupImageMediaBlockReadINTEL": 5580,
"OpSubgroupImageMediaBlockWriteINTEL": 5581,
+ "OpDecorateString": 5632,
"OpDecorateStringGOOGLE": 5632,
+ "OpMemberDecorateString": 5633,
"OpMemberDecorateStringGOOGLE": 5633,
"OpVmeImageINTEL": 5699,
"OpTypeVmeImageINTEL": 5700,
spv = {
MagicNumber = 0x07230203,
- Version = 0x00010300,
- Revision = 7,
+ Version = 0x00010400,
+ Revision = 1,
OpCodeMask = 0xffff,
WordCountShift = 16,
MakeTexelVisibleKHR = 9,
NonPrivateTexelKHR = 10,
VolatileTexelKHR = 11,
+ SignExtend = 12,
+ ZeroExtend = 13,
},
ImageOperandsMask = {
MakeTexelVisibleKHR = 0x00000200,
NonPrivateTexelKHR = 0x00000400,
VolatileTexelKHR = 0x00000800,
+ SignExtend = 0x00001000,
+ ZeroExtend = 0x00002000,
},
FPFastMathModeShift = {
NonWritable = 24,
NonReadable = 25,
Uniform = 26,
+ UniformId = 27,
SaturatedConversion = 28,
Stream = 29,
Location = 30,
NonUniformEXT = 5300,
RestrictPointerEXT = 5355,
AliasedPointerEXT = 5356,
+ CounterBuffer = 5634,
HlslCounterBufferGOOGLE = 5634,
HlslSemanticGOOGLE = 5635,
+ UserSemantic = 5635,
},
BuiltIn = {
DontUnroll = 1,
DependencyInfinite = 2,
DependencyLength = 3,
+ MinIterations = 4,
+ MaxIterations = 5,
+ IterationMultiple = 6,
+ PeelCount = 7,
+ PartialCount = 8,
},
LoopControlMask = {
DontUnroll = 0x00000002,
DependencyInfinite = 0x00000004,
DependencyLength = 0x00000008,
+ MinIterations = 0x00000010,
+ MaxIterations = 0x00000020,
+ IterationMultiple = 0x00000040,
+ PeelCount = 0x00000080,
+ PartialCount = 0x00000100,
},
FunctionControlShift = {
OpGroupNonUniformLogicalXor = 364,
OpGroupNonUniformQuadBroadcast = 365,
OpGroupNonUniformQuadSwap = 366,
+ OpCopyLogical = 400,
+ OpPtrEqual = 401,
+ OpPtrNotEqual = 402,
+ OpPtrDiff = 403,
OpSubgroupBallotKHR = 4421,
OpSubgroupFirstInvocationKHR = 4422,
OpSubgroupAllKHR = 4428,
OpSubgroupImageBlockWriteINTEL = 5578,
OpSubgroupImageMediaBlockReadINTEL = 5580,
OpSubgroupImageMediaBlockWriteINTEL = 5581,
+ OpDecorateString = 5632,
OpDecorateStringGOOGLE = 5632,
+ OpMemberDecorateString = 5633,
OpMemberDecorateStringGOOGLE = 5633,
OpVmeImageINTEL = 5699,
OpTypeVmeImageINTEL = 5700,
spv = {
'MagicNumber' : 0x07230203,
- 'Version' : 0x00010300,
- 'Revision' : 7,
+ 'Version' : 0x00010400,
+ 'Revision' : 1,
'OpCodeMask' : 0xffff,
'WordCountShift' : 16,
'MakeTexelVisibleKHR' : 9,
'NonPrivateTexelKHR' : 10,
'VolatileTexelKHR' : 11,
+ 'SignExtend' : 12,
+ 'ZeroExtend' : 13,
},
'ImageOperandsMask' : {
'MakeTexelVisibleKHR' : 0x00000200,
'NonPrivateTexelKHR' : 0x00000400,
'VolatileTexelKHR' : 0x00000800,
+ 'SignExtend' : 0x00001000,
+ 'ZeroExtend' : 0x00002000,
},
'FPFastMathModeShift' : {
'NonWritable' : 24,
'NonReadable' : 25,
'Uniform' : 26,
+ 'UniformId' : 27,
'SaturatedConversion' : 28,
'Stream' : 29,
'Location' : 30,
'NonUniformEXT' : 5300,
'RestrictPointerEXT' : 5355,
'AliasedPointerEXT' : 5356,
+ 'CounterBuffer' : 5634,
'HlslCounterBufferGOOGLE' : 5634,
'HlslSemanticGOOGLE' : 5635,
+ 'UserSemantic' : 5635,
},
'BuiltIn' : {
'DontUnroll' : 1,
'DependencyInfinite' : 2,
'DependencyLength' : 3,
+ 'MinIterations' : 4,
+ 'MaxIterations' : 5,
+ 'IterationMultiple' : 6,
+ 'PeelCount' : 7,
+ 'PartialCount' : 8,
},
'LoopControlMask' : {
'DontUnroll' : 0x00000002,
'DependencyInfinite' : 0x00000004,
'DependencyLength' : 0x00000008,
+ 'MinIterations' : 0x00000010,
+ 'MaxIterations' : 0x00000020,
+ 'IterationMultiple' : 0x00000040,
+ 'PeelCount' : 0x00000080,
+ 'PartialCount' : 0x00000100,
},
'FunctionControlShift' : {
'OpGroupNonUniformLogicalXor' : 364,
'OpGroupNonUniformQuadBroadcast' : 365,
'OpGroupNonUniformQuadSwap' : 366,
+ 'OpCopyLogical' : 400,
+ 'OpPtrEqual' : 401,
+ 'OpPtrNotEqual' : 402,
+ 'OpPtrDiff' : 403,
'OpSubgroupBallotKHR' : 4421,
'OpSubgroupFirstInvocationKHR' : 4422,
'OpSubgroupAllKHR' : 4428,
'OpSubgroupImageBlockWriteINTEL' : 5578,
'OpSubgroupImageMediaBlockReadINTEL' : 5580,
'OpSubgroupImageMediaBlockWriteINTEL' : 5581,
+ 'OpDecorateString' : 5632,
'OpDecorateStringGOOGLE' : 5632,
+ 'OpMemberDecorateString' : 5633,
'OpMemberDecorateStringGOOGLE' : 5633,
'OpVmeImageINTEL' : 5699,
'OpTypeVmeImageINTEL' : 5700,
module spv;
enum uint MagicNumber = 0x07230203;
-enum uint Version = 0x00010300;
-enum uint Revision = 7;
+enum uint Version = 0x00010400;
+enum uint Revision = 1;
enum uint OpCodeMask = 0xffff;
enum uint WordCountShift = 16;
MakeTexelVisibleKHR = 9,
NonPrivateTexelKHR = 10,
VolatileTexelKHR = 11,
+ SignExtend = 12,
+ ZeroExtend = 13,
}
enum ImageOperandsMask : uint
MakeTexelVisibleKHR = 0x00000200,
NonPrivateTexelKHR = 0x00000400,
VolatileTexelKHR = 0x00000800,
+ SignExtend = 0x00001000,
+ ZeroExtend = 0x00002000,
}
enum FPFastMathModeShift : uint
NonWritable = 24,
NonReadable = 25,
Uniform = 26,
+ UniformId = 27,
SaturatedConversion = 28,
Stream = 29,
Location = 30,
NonUniformEXT = 5300,
RestrictPointerEXT = 5355,
AliasedPointerEXT = 5356,
+ CounterBuffer = 5634,
HlslCounterBufferGOOGLE = 5634,
HlslSemanticGOOGLE = 5635,
+ UserSemantic = 5635,
}
enum BuiltIn : uint
DontUnroll = 1,
DependencyInfinite = 2,
DependencyLength = 3,
+ MinIterations = 4,
+ MaxIterations = 5,
+ IterationMultiple = 6,
+ PeelCount = 7,
+ PartialCount = 8,
}
enum LoopControlMask : uint
DontUnroll = 0x00000002,
DependencyInfinite = 0x00000004,
DependencyLength = 0x00000008,
+ MinIterations = 0x00000010,
+ MaxIterations = 0x00000020,
+ IterationMultiple = 0x00000040,
+ PeelCount = 0x00000080,
+ PartialCount = 0x00000100,
}
enum FunctionControlShift : uint
OpGroupNonUniformLogicalXor = 364,
OpGroupNonUniformQuadBroadcast = 365,
OpGroupNonUniformQuadSwap = 366,
+ OpCopyLogical = 400,
+ OpPtrEqual = 401,
+ OpPtrNotEqual = 402,
+ OpPtrDiff = 403,
OpSubgroupBallotKHR = 4421,
OpSubgroupFirstInvocationKHR = 4422,
OpSubgroupAllKHR = 4428,
OpSubgroupImageBlockWriteINTEL = 5578,
OpSubgroupImageMediaBlockReadINTEL = 5580,
OpSubgroupImageMediaBlockWriteINTEL = 5581,
+ OpDecorateString = 5632,
OpDecorateStringGOOGLE = 5632,
+ OpMemberDecorateString = 5633,
OpMemberDecorateStringGOOGLE = 5633,
OpVmeImageINTEL = 5699,
OpTypeVmeImageINTEL = 5700,
TPrinter();
static const int DocMagicNumber = 0x07230203;
- static const int DocVersion = 0x00010300;
- static const int DocRevision = 7;
- #define DocRevisionString "7"
+ static const int DocVersion = 0x00010400;
+ static const int DocRevision = 1;
+ #define DocRevisionString "1"
static const std::string DocCopyright;
static const std::string DocComment1;
static const std::string DocComment2;
else if (quantifier == "?")
return {OperandLiteralString, true};
else {
- assert(0 && "this case should not exist");
- return {OperandNone, false};
+ return {OperandOptionalLiteralStrings, false};
}
} else if (operandKind == "PairLiteralIntegerIdRef") {
// Used by OpSwitch in the grammar
} else if (operandKind == "FunctionControl") {
type = OperandFunction;
} else if (operandKind == "MemoryAccess") {
- type = OperandMemoryAccess;
+ type = OperandMemoryOperands;
}
if (type == OperandNone) {
const std::string name = inst["opname"].asString();
EnumCaps caps = getCaps(inst);
std::string version = inst["version"].asString();
+ std::string lastVersion = inst["lastVersion"].asString();
Extensions exts = getExts(inst);
OperandParameters operands;
bool defResultId = false;
}
InstructionDesc.emplace_back(
std::move(EnumValue(opcode, name,
- std::move(caps), std::move(version), std::move(exts),
+ std::move(caps), std::move(version), std::move(lastVersion), std::move(exts),
std::move(operands))),
defTypeId, defResultId);
}
continue;
EnumCaps caps(getCaps(enumerant));
std::string version = enumerant["version"].asString();
+ std::string lastVersion = enumerant["lastVersion"].asString();
Extensions exts(getExts(enumerant));
OperandParameters params;
const Json::Value& paramsJson = enumerant["parameters"];
}
dest->emplace_back(
value, enumerant["enumerant"].asString(),
- std::move(caps), std::move(version), std::move(exts), std::move(params));
+ std::move(caps), std::move(version), std::move(lastVersion), std::move(exts), std::move(params));
}
};
} else if (enumName == "Dim") {
establishOperandClass(enumName, OperandDimensionality, &DimensionalityParams, operandEnum, category);
} else if (enumName == "MemoryAccess") {
- establishOperandClass(enumName, OperandMemoryAccess, &MemoryAccessParams, operandEnum, category);
+ establishOperandClass(enumName, OperandMemoryOperands, &MemoryAccessParams, operandEnum, category);
} else if (enumName == "Scope") {
establishOperandClass(enumName, OperandScope, &ScopeParams, operandEnum, category);
} else if (enumName == "GroupOperation") {
OperandVariableIds,
OperandOptionalLiteral,
OperandOptionalLiteralString,
+ OperandOptionalLiteralStrings,
OperandVariableLiterals,
OperandVariableIdLiteral,
OperandVariableLiteralId,
OperandLoop,
OperandFunction,
OperandMemorySemantics,
- OperandMemoryAccess,
+ OperandMemoryOperands,
OperandScope,
OperandGroupOperation,
OperandKernelEnqueueFlags,
assert((where != end()) && "Could not find enum in the enum list");
return *where;
}
+ // gets *all* entries for the value, including the first one
+ void gatherAliases(unsigned value, std::vector<EValue*>& aliases) {
+ std::for_each(begin(), end(), [&](EValue& e) {
+ if (value == e.value)
+ aliases.push_back(&e);});
+ }
// Returns the EValue with the given name. We assume uniqueness
// by name.
EValue& at(std::string name) {
class EnumValue {
public:
EnumValue() : value(0), desc(nullptr) {}
- EnumValue(unsigned int the_value, const std::string& the_name, EnumCaps&& the_caps, const std::string& the_version,
- Extensions&& the_extensions, OperandParameters&& the_operands) :
- value(the_value), name(the_name), capabilities(std::move(the_caps)), version(std::move(the_version)),
+ EnumValue(unsigned int the_value, const std::string& the_name, EnumCaps&& the_caps,
+ const std::string& the_firstVersion, const std::string& the_lastVersion,
+ Extensions&& the_extensions, OperandParameters&& the_operands) :
+ value(the_value), name(the_name), capabilities(std::move(the_caps)),
+ firstVersion(std::move(the_firstVersion)), lastVersion(std::move(the_lastVersion)),
extensions(std::move(the_extensions)), operands(std::move(the_operands)), desc(nullptr) { }
// For ValueEnum, the value from the JSON file.
unsigned value;
std::string name;
EnumCaps capabilities;
- std::string version;
+ std::string firstVersion;
+ std::string lastVersion;
// A feature only be enabled by certain extensions.
// An empty list means the feature does not require an extension.
// Normally, only Capability enums are enabled by extension. In turn,
opDesc("TBD"),
opClass(0),
typePresent(has_type),
- resultPresent(has_result) {}
+ resultPresent(has_result),
+ alias(this) { }
+ InstructionValue(const InstructionValue& v)
+ {
+ *this = v;
+ alias = this;
+ }
bool hasResult() const { return resultPresent != 0; }
bool hasType() const { return typePresent != 0; }
+ void setAlias(const InstructionValue& a) { alias = &a; }
+ const InstructionValue& getAlias() const { return *alias; }
+ bool isAlias() const { return alias != this; }
const char* opDesc;
int opClass;
protected:
int typePresent : 1;
int resultPresent : 1;
+ const InstructionValue* alias; // correct only after discovering the aliases; otherwise points to this
};
using InstructionValues = EnumValuesContainer<InstructionValue>;