GL_EXT_opacity_micromap
authorEric Werness <ewerness@nvidia.com>
Tue, 23 Aug 2022 22:42:32 +0000 (15:42 -0700)
committerEric Werness <ewerness@nvidia.com>
Thu, 29 Sep 2022 17:21:01 +0000 (10:21 -0700)
Test/baseResults/spv.ext.RayGenShader.rgen.out
Test/spv.ext.RayGenShader.rgen
glslang/MachineIndependent/Initialize.cpp
glslang/MachineIndependent/Versions.cpp
glslang/MachineIndependent/Versions.h

index 46f920a..5a34fc7 100644 (file)
@@ -10,6 +10,7 @@ spv.ext.RayGenShader.rgen
                               MemoryModel Logical GLSL450
                               EntryPoint RayGenerationKHR 4  "main" 11 21 29 40 53 54 57
                               Source GLSL 460
+                              SourceExtension  "GL_EXT_opacity_micromap"
                               SourceExtension  "GL_EXT_ray_flags_primitive_culling"
                               SourceExtension  "GL_EXT_ray_tracing"
                               Name 4  "main"
@@ -52,7 +53,7 @@ spv.ext.RayGenShader.rgen
               27:             TypeAccelerationStructureKHR
               28:             TypePointer UniformConstant 27
      29(accEXT0):     28(ptr) Variable UniformConstant
-              35:      6(int) Constant 768
+              35:      6(int) Constant 1792
               36:             TypeFloat 32
               37:             TypeVector 36(float) 3
        38(block):             TypeStruct 37(fvec3) 37(fvec3)
index e9eb2cb..d342d86 100644 (file)
@@ -1,6 +1,7 @@
 #version 460
 #extension GL_EXT_ray_tracing : enable
 #extension GL_EXT_ray_flags_primitive_culling : enable
+#extension GL_EXT_opacity_micromap : enable
 layout(binding = 0) uniform accelerationStructureEXT accEXT0;
 layout(binding = 1, set = 0) uniform accelerationStructureEXT accEXT1; // Unused
 layout(binding = 2, r32ui) shadercallcoherent uniform uimage2D imageu;
@@ -18,5 +19,5 @@ void main()
     uint ly = gl_LaunchIDEXT.y;
     uint sx = gl_LaunchSizeEXT.x;
     uint sy = gl_LaunchSizeEXT.y;
-    traceRayEXT(accEXT0, lx, ly, sx, sy, gl_RayFlagsSkipTrianglesEXT | gl_RayFlagsSkipAABBEXT, origin, 0.5f, dir, 0.75f, 1);
+    traceRayEXT(accEXT0, lx, ly, sx, sy, gl_RayFlagsSkipTrianglesEXT | gl_RayFlagsSkipAABBEXT | gl_RayFlagsForceOpacityMicromap2StateEXT, origin, 0.5f, dir, 0.75f, 1);
 }
index 31b448a..0cbb9e7 100644 (file)
@@ -5850,6 +5850,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             "const uint gl_RayFlagsCullNoOpaqueEXT = 128U;"
             "const uint gl_RayFlagsSkipTrianglesEXT = 256U;"
             "const uint gl_RayFlagsSkipAABBEXT = 512U;"
+            "const uint gl_RayFlagsForceOpacityMicromap2StateEXT = 1024U;"
             "const uint gl_HitKindFrontFacingTriangleEXT = 254U;"
             "const uint gl_HitKindBackFacingTriangleEXT = 255U;"
             "\n";
@@ -8167,6 +8168,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
             symbolTable.setFunctionExtensions("rayQueryGetWorldRayDirectionEXT",                                  1, &E_GL_EXT_ray_query);
             symbolTable.setVariableExtensions("gl_RayFlagsSkipAABBEXT",                         1, &E_GL_EXT_ray_flags_primitive_culling);
             symbolTable.setVariableExtensions("gl_RayFlagsSkipTrianglesEXT",                    1, &E_GL_EXT_ray_flags_primitive_culling);
+            symbolTable.setVariableExtensions("gl_RayFlagsForceOpacityMicromap2StateEXT",                  1, &E_GL_EXT_opacity_micromap);
         }
 
         if ((profile != EEsProfile && version >= 130) ||
index 226e946..a5fd107 100644 (file)
@@ -342,11 +342,12 @@ void TParseVersions::initializeExtensionBehavior()
     extensionBehavior[E_GL_EXT_blend_func_extended]         = EBhDisable;
     extensionBehavior[E_GL_EXT_shader_implicit_conversions] = EBhDisable;
     extensionBehavior[E_GL_EXT_fragment_shading_rate]       = EBhDisable;
-    extensionBehavior[E_GL_EXT_shader_image_int64]   = EBhDisable;
+    extensionBehavior[E_GL_EXT_shader_image_int64]          = EBhDisable;
     extensionBehavior[E_GL_EXT_terminate_invocation]        = EBhDisable;
     extensionBehavior[E_GL_EXT_shared_memory_block]         = EBhDisable;
     extensionBehavior[E_GL_EXT_spirv_intrinsics]            = EBhDisable;
     extensionBehavior[E_GL_EXT_mesh_shader]                 = EBhDisable;
+    extensionBehavior[E_GL_EXT_opacity_micromap]            = EBhDisable;
 
     // OVR extensions
     extensionBehavior[E_GL_OVR_multiview]                = EBhDisable;
index 6ab3788..f06abdd 100644 (file)
@@ -212,6 +212,7 @@ const char* const E_GL_EXT_subgroup_uniform_control_flow    = "GL_EXT_subgroup_u
 const char* const E_GL_EXT_spirv_intrinsics                 = "GL_EXT_spirv_intrinsics";
 const char* const E_GL_EXT_fragment_shader_barycentric      = "GL_EXT_fragment_shader_barycentric";
 const char* const E_GL_EXT_mesh_shader                      = "GL_EXT_mesh_shader";
+const char* const E_GL_EXT_opacity_micromap                 = "GL_EXT_opacity_micromap";
 
 // Arrays of extensions for the above viewportEXTs duplications