nir/spirv: Update to SPIR-V version 1.0
authorJason Ekstrand <jason.ekstrand@intel.com>
Fri, 4 Dec 2015 02:07:58 +0000 (18:07 -0800)
committerJason Ekstrand <jason.ekstrand@intel.com>
Fri, 4 Dec 2015 02:28:10 +0000 (18:28 -0800)
src/glsl/nir/spirv.h
src/glsl/nir/spirv_glsl450_to_nir.c
src/glsl/nir/spirv_to_nir.c

index e9e5397380120baeb9ac1aa8f4b248ccf923debe..63bcb2f88ddc09909802690f466715457f3ad0fd 100644 (file)
@@ -30,7 +30,6 @@
 */
 
 /*
-** Specification revision 33.
 ** Enumeration tokens for SPIR-V, in various styles:
 **   C, C++, C++11, JSON, Lua, Python
 ** 
 
 typedef unsigned int SpvId;
 
+#define SPV_VERSION 0x10000
+#define SPV_REVISION 2
+
 static const unsigned int SpvMagicNumber = 0x07230203;
-static const unsigned int SpvVersion = 99;
-static const unsigned int SpvRevision = 33;
+static const unsigned int SpvVersion = 0x00010000;
+static const unsigned int SpvRevision = 2;
 static const unsigned int SpvOpCodeMask = 0xffff;
 static const unsigned int SpvWordCountShift = 16;
 
@@ -61,7 +63,8 @@ typedef enum SpvSourceLanguage_ {
     SpvSourceLanguageUnknown = 0,
     SpvSourceLanguageESSL = 1,
     SpvSourceLanguageGLSL = 2,
-    SpvSourceLanguageOpenCL = 3,
+    SpvSourceLanguageOpenCL_C = 3,
+    SpvSourceLanguageOpenCL_CPP = 4,
 } SpvSourceLanguage;
 
 typedef enum SpvExecutionModel_ {
@@ -108,17 +111,16 @@ typedef enum SpvExecutionMode_ {
     SpvExecutionModeInputPoints = 19,
     SpvExecutionModeInputLines = 20,
     SpvExecutionModeInputLinesAdjacency = 21,
-    SpvExecutionModeInputTriangles = 22,
+    SpvExecutionModeTriangles = 22,
     SpvExecutionModeInputTrianglesAdjacency = 23,
-    SpvExecutionModeInputQuads = 24,
-    SpvExecutionModeInputIsolines = 25,
+    SpvExecutionModeQuads = 24,
+    SpvExecutionModeIsolines = 25,
     SpvExecutionModeOutputVertices = 26,
     SpvExecutionModeOutputPoints = 27,
     SpvExecutionModeOutputLineStrip = 28,
     SpvExecutionModeOutputTriangleStrip = 29,
     SpvExecutionModeVecTypeHint = 30,
     SpvExecutionModeContractionOff = 31,
-    SpvExecutionModeIndependentForwardProgress = 32,
 } SpvExecutionMode;
 
 typedef enum SpvStorageClass_ {
@@ -126,9 +128,9 @@ typedef enum SpvStorageClass_ {
     SpvStorageClassInput = 1,
     SpvStorageClassUniform = 2,
     SpvStorageClassOutput = 3,
-    SpvStorageClassWorkgroupLocal = 4,
-    SpvStorageClassWorkgroupGlobal = 5,
-    SpvStorageClassPrivateGlobal = 6,
+    SpvStorageClassWorkgroup = 4,
+    SpvStorageClassCrossWorkgroup = 5,
+    SpvStorageClassPrivate = 6,
     SpvStorageClassFunction = 7,
     SpvStorageClassGeneric = 8,
     SpvStorageClassPushConstant = 9,
@@ -143,7 +145,7 @@ typedef enum SpvDim_ {
     SpvDimCube = 3,
     SpvDimRect = 4,
     SpvDimBuffer = 5,
-    SpvDimInputTarget = 6,
+    SpvDimSubpassData = 6,
 } SpvDim;
 
 typedef enum SpvSamplerAddressingMode_ {
@@ -241,6 +243,7 @@ typedef enum SpvImageChannelDataType_ {
     SpvImageChannelDataTypeHalfFloat = 13,
     SpvImageChannelDataTypeFloat = 14,
     SpvImageChannelDataTypeUnormInt24 = 15,
+    SpvImageChannelDataTypeUnormInt101010_2 = 16,
 } SpvImageChannelDataType;
 
 typedef enum SpvImageOperandsShift_ {
@@ -325,7 +328,6 @@ typedef enum SpvDecoration_ {
     SpvDecorationGLSLPacked = 9,
     SpvDecorationCPacked = 10,
     SpvDecorationBuiltIn = 11,
-    SpvDecorationSmooth = 12,
     SpvDecorationNoPerspective = 13,
     SpvDecorationFlat = 14,
     SpvDecorationPatch = 15,
@@ -355,7 +357,7 @@ typedef enum SpvDecoration_ {
     SpvDecorationFPFastMathMode = 40,
     SpvDecorationLinkageAttributes = 41,
     SpvDecorationNoContraction = 42,
-    SpvDecorationInputTargetIndex = 43,
+    SpvDecorationInputAttachmentIndex = 43,
     SpvDecorationAlignment = 44,
 } SpvDecoration;
 
@@ -380,7 +382,6 @@ typedef enum SpvBuiltIn_ {
     SpvBuiltInSampleId = 18,
     SpvBuiltInSamplePosition = 19,
     SpvBuiltInSampleMask = 20,
-    SpvBuiltInFragColor = 21,
     SpvBuiltInFragDepth = 22,
     SpvBuiltInHelperInvocation = 23,
     SpvBuiltInNumWorkgroups = 24,
@@ -394,7 +395,6 @@ typedef enum SpvBuiltIn_ {
     SpvBuiltInEnqueuedWorkgroupSize = 32,
     SpvBuiltInGlobalOffset = 33,
     SpvBuiltInGlobalLinearId = 34,
-    SpvBuiltInWorkgroupLinearId = 35,
     SpvBuiltInSubgroupSize = 36,
     SpvBuiltInSubgroupMaxSize = 37,
     SpvBuiltInNumSubgroups = 38,
@@ -449,8 +449,8 @@ typedef enum SpvMemorySemanticsShift_ {
     SpvMemorySemanticsSequentiallyConsistentShift = 4,
     SpvMemorySemanticsUniformMemoryShift = 6,
     SpvMemorySemanticsSubgroupMemoryShift = 7,
-    SpvMemorySemanticsWorkgroupLocalMemoryShift = 8,
-    SpvMemorySemanticsWorkgroupGlobalMemoryShift = 9,
+    SpvMemorySemanticsWorkgroupMemoryShift = 8,
+    SpvMemorySemanticsCrossWorkgroupMemoryShift = 9,
     SpvMemorySemanticsAtomicCounterMemoryShift = 10,
     SpvMemorySemanticsImageMemoryShift = 11,
 } SpvMemorySemanticsShift;
@@ -463,8 +463,8 @@ typedef enum SpvMemorySemanticsMask_ {
     SpvMemorySemanticsSequentiallyConsistentMask = 0x00000010,
     SpvMemorySemanticsUniformMemoryMask = 0x00000040,
     SpvMemorySemanticsSubgroupMemoryMask = 0x00000080,
-    SpvMemorySemanticsWorkgroupLocalMemoryMask = 0x00000100,
-    SpvMemorySemanticsWorkgroupGlobalMemoryMask = 0x00000200,
+    SpvMemorySemanticsWorkgroupMemoryMask = 0x00000100,
+    SpvMemorySemanticsCrossWorkgroupMemoryMask = 0x00000200,
     SpvMemorySemanticsAtomicCounterMemoryMask = 0x00000400,
     SpvMemorySemanticsImageMemoryMask = 0x00000800,
 } SpvMemorySemanticsMask;
@@ -528,7 +528,6 @@ typedef enum SpvCapability_ {
     SpvCapabilityImageBasic = 13,
     SpvCapabilityImageReadWrite = 14,
     SpvCapabilityImageMipmap = 15,
-    SpvCapabilityImageSRGBWrite = 16,
     SpvCapabilityPipes = 17,
     SpvCapabilityGroups = 18,
     SpvCapabilityDeviceEnqueue = 19,
@@ -538,7 +537,6 @@ typedef enum SpvCapability_ {
     SpvCapabilityTessellationPointSize = 23,
     SpvCapabilityGeometryPointSize = 24,
     SpvCapabilityImageGatherExtended = 25,
-    SpvCapabilityStorageImageExtendedFormats = 26,
     SpvCapabilityStorageImageMultisample = 27,
     SpvCapabilityUniformBufferArrayDynamicIndexing = 28,
     SpvCapabilitySampledImageArrayDynamicIndexing = 29,
@@ -552,7 +550,7 @@ typedef enum SpvCapability_ {
     SpvCapabilitySampledRect = 37,
     SpvCapabilityGenericPointer = 38,
     SpvCapabilityInt8 = 39,
-    SpvCapabilityInputTarget = 40,
+    SpvCapabilityInputAttachment = 40,
     SpvCapabilitySparseResidency = 41,
     SpvCapabilityMinLod = 42,
     SpvCapabilitySampled1D = 43,
@@ -561,11 +559,15 @@ typedef enum SpvCapability_ {
     SpvCapabilitySampledBuffer = 46,
     SpvCapabilityImageBuffer = 47,
     SpvCapabilityImageMSArray = 48,
-    SpvCapabilityAdvancedFormats = 49,
+    SpvCapabilityStorageImageExtendedFormats = 49,
     SpvCapabilityImageQuery = 50,
     SpvCapabilityDerivativeControl = 51,
     SpvCapabilityInterpolationFunction = 52,
     SpvCapabilityTransformFeedback = 53,
+    SpvCapabilityGeometryStreams = 54,
+    SpvCapabilityStorageImageReadWithoutFormat = 55,
+    SpvCapabilityStorageImageWriteWithoutFormat = 56,
+    SpvCapabilityMultiViewport = 57,
 } SpvCapability;
 
 typedef enum SpvOp_ {
@@ -660,6 +662,7 @@ typedef enum SpvOp_ {
     SpvOpImageDrefGather = 97,
     SpvOpImageRead = 98,
     SpvOpImageWrite = 99,
+    SpvOpImage = 100,
     SpvOpImageQueryFormat = 101,
     SpvOpImageQueryOrder = 102,
     SpvOpImageQuerySizeLod = 103,
@@ -804,8 +807,8 @@ typedef enum SpvOp_ {
     SpvOpUnreachable = 255,
     SpvOpLifetimeStart = 256,
     SpvOpLifetimeStop = 257,
-    SpvOpAsyncGroupCopy = 259,
-    SpvOpWaitGroupEvents = 260,
+    SpvOpGroupAsyncCopy = 259,
+    SpvOpGroupWaitEvents = 260,
     SpvOpGroupAll = 261,
     SpvOpGroupAny = 262,
     SpvOpGroupBroadcast = 263,
index 1056c0f1ddf434b73068542d1cb93a8324258d03..ee1fca34c3147f132459bfe1c16825b662def0b8 100644 (file)
@@ -85,7 +85,11 @@ handle_glsl450_alu(struct vtn_builder *b, enum GLSLstd450 entrypoint,
 
    case GLSLstd450Modf:        op = nir_op_fmod;       break;
    case GLSLstd450FMin:        op = nir_op_fmin;       break;
+   case GLSLstd450UMin:        op = nir_op_umin;       break;
+   case GLSLstd450SMin:        op = nir_op_imin;       break;
    case GLSLstd450FMax:        op = nir_op_fmax;       break;
+   case GLSLstd450UMax:        op = nir_op_umax;       break;
+   case GLSLstd450SMax:        op = nir_op_imax;       break;
    case GLSLstd450FMix:        op = nir_op_flrp;       break;
    case GLSLstd450Step:
       val->ssa->def = nir_sge(&b->nb, src[1], src[0]);
index 86282d25e0a0070d35f69c518a5a05a373a3e4df..d014f3cd811217f16629ec4df61f9308f48685ce 100644 (file)
@@ -343,9 +343,6 @@ struct_member_decoration_cb(struct vtn_builder *b,
    switch (dec->decoration) {
    case SpvDecorationRelaxedPrecision:
       break; /* FIXME: Do nothing with this for now. */
-   case SpvDecorationSmooth:
-      ctx->fields[member].interpolation = INTERP_QUALIFIER_SMOOTH;
-      break;
    case SpvDecorationNoPerspective:
       ctx->fields[member].interpolation = INTERP_QUALIFIER_NOPERSPECTIVE;
       break;
@@ -815,11 +812,6 @@ vtn_get_builtin_location(struct vtn_builder *b,
       *location = SYSTEM_VALUE_SAMPLE_MASK_IN; /* XXX out? */
       set_mode_system_value(mode);
       break;
-   case SpvBuiltInFragColor:
-      *location = FRAG_RESULT_COLOR;
-      assert(b->shader->stage == MESA_SHADER_FRAGMENT);
-      assert(*mode == nir_var_shader_out);
-      break;
    case SpvBuiltInFragDepth:
       *location = FRAG_RESULT_DEPTH;
       assert(b->shader->stage == MESA_SHADER_FRAGMENT);
@@ -860,9 +852,6 @@ var_decoration_cb(struct vtn_builder *b, struct vtn_value *val, int member,
    switch (dec->decoration) {
    case SpvDecorationRelaxedPrecision:
       break; /* FIXME: Do nothing with this for now. */
-   case SpvDecorationSmooth:
-      var->data.interpolation = INTERP_QUALIFIER_SMOOTH;
-      break;
    case SpvDecorationNoPerspective:
       var->data.interpolation = INTERP_QUALIFIER_NOPERSPECTIVE;
       break;
@@ -1565,14 +1554,14 @@ vtn_handle_variables(struct vtn_builder *b, SpvOp opcode,
       case SpvStorageClassOutput:
          var->data.mode = nir_var_shader_out;
          break;
-      case SpvStorageClassPrivateGlobal:
+      case SpvStorageClassPrivate:
          var->data.mode = nir_var_global;
          break;
       case SpvStorageClassFunction:
          var->data.mode = nir_var_local;
          break;
-      case SpvStorageClassWorkgroupLocal:
-      case SpvStorageClassWorkgroupGlobal:
+      case SpvStorageClassWorkgroup:
+      case SpvStorageClassCrossWorkgroup:
       case SpvStorageClassGeneric:
       case SpvStorageClassAtomicCounter:
       default:
@@ -3001,13 +2990,13 @@ gl_primitive_from_spv_execution_mode(SpvExecutionMode mode)
       return 1; /* GL_LINES */
    case SpvExecutionModeInputLinesAdjacency:
       return 0x000A; /* GL_LINE_STRIP_ADJACENCY_ARB */
-   case SpvExecutionModeInputTriangles:
+   case SpvExecutionModeTriangles:
       return 4; /* GL_TRIANGLES */
    case SpvExecutionModeInputTrianglesAdjacency:
       return 0x000C; /* GL_TRIANGLES_ADJACENCY_ARB */
-   case SpvExecutionModeInputQuads:
+   case SpvExecutionModeQuads:
       return 7; /* GL_QUADS */
-   case SpvExecutionModeInputIsolines:
+   case SpvExecutionModeIsolines:
       return 0x8E7A; /* GL_ISOLINES */
    case SpvExecutionModeOutputLineStrip:
       return 3; /* GL_LINE_STRIP */
@@ -3029,7 +3018,7 @@ vertices_in_from_spv_execution_mode(SpvExecutionMode mode)
       return 2;
    case SpvExecutionModeInputLinesAdjacency:
       return 4;
-   case SpvExecutionModeInputTriangles:
+   case SpvExecutionModeTriangles:
       return 3;
    case SpvExecutionModeInputTrianglesAdjacency:
       return 6;
@@ -3133,10 +3122,10 @@ vtn_handle_preamble_instruction(struct vtn_builder *b, SpvOp opcode,
       case SpvExecutionModeInputPoints:
       case SpvExecutionModeInputLines:
       case SpvExecutionModeInputLinesAdjacency:
-      case SpvExecutionModeInputTriangles:
+      case SpvExecutionModeTriangles:
       case SpvExecutionModeInputTrianglesAdjacency:
-      case SpvExecutionModeInputQuads:
-      case SpvExecutionModeInputIsolines:
+      case SpvExecutionModeQuads:
+      case SpvExecutionModeIsolines:
          if (b->shader->stage == MESA_SHADER_GEOMETRY) {
             b->shader->info.gs.vertices_in =
                vertices_in_from_spv_execution_mode(mode);
@@ -3169,7 +3158,6 @@ vtn_handle_preamble_instruction(struct vtn_builder *b, SpvOp opcode,
 
       case SpvExecutionModeVecTypeHint:
       case SpvExecutionModeContractionOff:
-      case SpvExecutionModeIndependentForwardProgress:
          break; /* OpenCL */
       }
       break;
@@ -3746,7 +3734,7 @@ spirv_to_nir(const uint32_t *words, size_t word_count,
    assert(word_count > 5);
 
    assert(words[0] == SpvMagicNumber);
-   assert(words[1] == 99);
+   assert(words[1] >= 0x10000);
    /* words[2] == generator magic */
    unsigned value_id_bound = words[3];
    assert(words[4] == 0);