浏览代码

[SPIRV]Updates to final RayTracing semantics (#3279)

1. Add OpTraceRayKHR
2. Remove "provisional" in files
3. Update the SPIRV Headers/Tools to latest version
JiaoluAMD 4 年之前
父节点
当前提交
4ced9bdf05
共有 28 个文件被更改,包括 107 次插入87 次删除
  1. 3 3
      docs/SPIR-V.rst
  2. 1 1
      external/SPIRV-Headers
  3. 1 1
      external/SPIRV-Tools
  4. 3 3
      tools/clang/include/clang/SPIRV/SpirvContext.h
  5. 5 5
      tools/clang/include/clang/SPIRV/SpirvType.h
  6. 6 6
      tools/clang/lib/SPIRV/CapabilityVisitor.cpp
  7. 3 3
      tools/clang/lib/SPIRV/EmitVisitor.cpp
  8. 1 1
      tools/clang/lib/SPIRV/LowerTypeVisitor.cpp
  9. 2 2
      tools/clang/lib/SPIRV/SpirvContext.cpp
  10. 23 12
      tools/clang/lib/SPIRV/SpirvEmitter.cpp
  11. 1 1
      tools/clang/test/CodeGenSPIRV/rayquery_assign.cs.hlsl
  12. 2 2
      tools/clang/test/CodeGenSPIRV/rayquery_equal.cs.hlsl
  13. 2 2
      tools/clang/test/CodeGenSPIRV/rayquery_init_ds.hlsl
  14. 2 2
      tools/clang/test/CodeGenSPIRV/rayquery_init_gs.hlsl
  15. 6 6
      tools/clang/test/CodeGenSPIRV/rayquery_init_hs.hlsl
  16. 2 2
      tools/clang/test/CodeGenSPIRV/rayquery_init_ps.hlsl
  17. 3 3
      tools/clang/test/CodeGenSPIRV/rayquery_init_rahit.hlsl
  18. 3 3
      tools/clang/test/CodeGenSPIRV/rayquery_init_rcall.hlsl
  19. 3 3
      tools/clang/test/CodeGenSPIRV/rayquery_init_rchit.hlsl
  20. 3 3
      tools/clang/test/CodeGenSPIRV/rayquery_init_rgen.hlsl
  21. 3 3
      tools/clang/test/CodeGenSPIRV/rayquery_init_rint.hlsl
  22. 3 3
      tools/clang/test/CodeGenSPIRV/rayquery_init_rmiss.hlsl
  23. 6 6
      tools/clang/test/CodeGenSPIRV/rayquery_init_vs.hlsl
  24. 3 3
      tools/clang/test/CodeGenSPIRV/rayquery_tryAllOps.cs.hlsl
  25. 1 1
      tools/clang/test/CodeGenSPIRV/raytracing.acceleration-structure.hlsl
  26. 11 2
      tools/clang/test/CodeGenSPIRV/raytracing.khr.closesthit.hlsl
  27. 4 4
      tools/clang/test/CodeGenSPIRV/raytracing.nv.library.hlsl
  28. 1 1
      tools/clang/test/CodeGenSPIRV/raytracing.nv.raygen.hlsl

+ 3 - 3
docs/SPIR-V.rst

@@ -3392,14 +3392,14 @@ Example:
   void main() {
     RayQuery<RAY_FLAG_CULL_NON_OPAQUE | RAY_FLAG_ACCEPT_FIRST_HIT_AND_END_SEARCH> q;
     q.TraceRayInline(myAccelerationStructure, 0 , 0xff, myRay);
-  
+
     // Proceed() is AccelerationStructure traversal loop take places
     while(q.Proceed()) {
       switch(q.CandidateType()) {
         // retrieve intersection information/Do the shadering
       }
     }
-  
+
     // AccelerationStructure traversal end
     // Get the Committed status
     switch(q.CommittedStatus()) {
@@ -3423,7 +3423,7 @@ RayQuery represents the state of an inline ray tracing call into an acceleration
 ============ ================================
  HLSL Type            SPIR-V Opcode
 ------------ --------------------------------
-``RayQuery`` ``OpTypeRayQueryProvisionalKHR``
+``RayQuery`` ``OpTypeRayQueryKHR``
 ============ ================================
 
 RayQuery Mapping to SPIR-V

+ 1 - 1
external/SPIRV-Headers

@@ -1 +1 @@
-Subproject commit 05836bdba63e7debce9fa9feaed42f20cd43af9d
+Subproject commit 104ecc356c1bea4476320faca64440cd1df655a3

+ 1 - 1
external/SPIRV-Tools

@@ -1 +1 @@
-Subproject commit 82b378d671836b51343b010ca9ec32db14485147
+Subproject commit cd590fa3341284cd6d1ee82366155786cfd44c96

+ 3 - 3
tools/clang/include/clang/SPIRV/SpirvContext.h

@@ -263,8 +263,8 @@ public:
     return accelerationStructureTypeNV;
   }
 
-  const RayQueryProvisionalTypeKHR *getRayQueryProvisionalTypeKHR() const {
-    return rayQueryProvisionalTypeKHR;
+  const RayQueryTypeKHR *getRayQueryTypeKHR() const {
+    return rayQueryTypeKHR;
   }
 
   /// --- Hybrid type getter functions ---
@@ -406,7 +406,7 @@ private:
   llvm::SmallVector<const HybridPointerType *, 8> hybridPointerTypes;
   llvm::DenseSet<FunctionType *, FunctionTypeMapInfo> functionTypes;
   const AccelerationStructureTypeNV *accelerationStructureTypeNV;
-  const RayQueryProvisionalTypeKHR *rayQueryProvisionalTypeKHR;
+  const RayQueryTypeKHR *rayQueryTypeKHR;
 
   // Current ShaderModelKind for entry point.
   ShaderModelKind curShaderModelKind;

+ 5 - 5
tools/clang/include/clang/SPIRV/SpirvType.h

@@ -48,7 +48,7 @@ public:
     TK_Pointer,
     TK_Function,
     TK_AccelerationStructureNV,
-    TK_RayQueryProvisionalKHR,
+    TK_RayQueryKHR,
     // Order matters: all the following are hybrid types
     TK_HybridStruct,
     TK_HybridPointer,
@@ -402,13 +402,13 @@ public:
   }
 };
 
-class RayQueryProvisionalTypeKHR : public SpirvType {
+class RayQueryTypeKHR : public SpirvType {
 public:
-  RayQueryProvisionalTypeKHR()
-      : SpirvType(TK_RayQueryProvisionalKHR, "rayQueryProvisionalKHR") {}
+  RayQueryTypeKHR()
+      : SpirvType(TK_RayQueryKHR, "rayQueryKHR") {}
 
   static bool classof(const SpirvType *t) {
-    return t->getKind() == TK_RayQueryProvisionalKHR;
+    return t->getKind() == TK_RayQueryKHR;
   }
 };
 

+ 6 - 6
tools/clang/lib/SPIRV/CapabilityVisitor.cpp

@@ -203,13 +203,13 @@ void CapabilityVisitor::addCapabilityForType(const SpirvType *type,
     } else {
       // KHR_ray_tracing extension requires SPIR-V 1.4/Vulkan 1.2
       featureManager.requestTargetEnv(SPV_ENV_VULKAN_1_2, "Raytracing", {});
-      addCapability(spv::Capability::RayTracingProvisionalKHR);
+      addCapability(spv::Capability::RayTracingKHR);
       addExtension(Extension::KHR_ray_tracing, "SPV_KHR_ray_tracing", {});
     }
   }
-  // RayQueryProvisionalTypeKHR type
-  else if (isa<RayQueryProvisionalTypeKHR>(type)) {
-    addCapability(spv::Capability::RayQueryProvisionalKHR);
+  // RayQueryTypeKHR type
+  else if (isa<RayQueryTypeKHR>(type)) {
+    addCapability(spv::Capability::RayQueryKHR);
     addExtension(Extension::KHR_ray_query, "SPV_KHR_ray_query", {});
   }
 }
@@ -500,7 +500,7 @@ bool CapabilityVisitor::visitInstruction(SpirvInstruction *instr) {
     auto rayQueryInst = dyn_cast<SpirvRayQueryOpKHR>(instr);
     if (rayQueryInst->hasCullFlags()) {
       addCapability(
-          spv::Capability::RayTraversalPrimitiveCullingProvisionalKHR);
+          spv::Capability::RayTraversalPrimitiveCullingKHR);
     }
 
     break;
@@ -540,7 +540,7 @@ bool CapabilityVisitor::visit(SpirvEntryPoint *entryPoint) {
     } else {
       // KHR_ray_tracing extension requires SPIR-V 1.4/Vulkan 1.2
       featureManager.requestTargetEnv(SPV_ENV_VULKAN_1_2, "Raytracing", {});
-      addCapability(spv::Capability::RayTracingProvisionalKHR);
+      addCapability(spv::Capability::RayTracingKHR);
       addExtension(Extension::KHR_ray_tracing, "SPV_KHR_ray_tracing", {});
     }
     break;

+ 3 - 3
tools/clang/lib/SPIRV/EmitVisitor.cpp

@@ -2158,10 +2158,10 @@ uint32_t EmitTypeHandler::emitType(const SpirvType *type) {
     curTypeInst.push_back(id);
     finalizeTypeInstruction();
   }
-  // RayQueryProvisionalType KHR type
+  // RayQueryType KHR type
   else if (const auto *rayQueryType =
-               dyn_cast<RayQueryProvisionalTypeKHR>(type)) {
-    initTypeInstruction(spv::Op::OpTypeRayQueryProvisionalKHR);
+               dyn_cast<RayQueryTypeKHR>(type)) {
+    initTypeInstruction(spv::Op::OpTypeRayQueryKHR);
     curTypeInst.push_back(id);
     finalizeTypeInstruction();
   }

+ 1 - 1
tools/clang/lib/SPIRV/LowerTypeVisitor.cpp

@@ -544,7 +544,7 @@ const SpirvType *LowerTypeVisitor::lowerResourceType(QualType type,
   }
 
   if (name == "RayQuery")
-    return spvContext.getRayQueryProvisionalTypeKHR();
+    return spvContext.getRayQueryTypeKHR();
 
   if (name == "StructuredBuffer" || name == "RWStructuredBuffer" ||
       name == "AppendStructuredBuffer" || name == "ConsumeStructuredBuffer") {

+ 2 - 2
tools/clang/lib/SPIRV/SpirvContext.cpp

@@ -25,7 +25,7 @@ SpirvContext::SpirvContext()
   boolType = new (this) BoolType;
   samplerType = new (this) SamplerType;
   accelerationStructureTypeNV = new (this) AccelerationStructureTypeNV;
-  rayQueryProvisionalTypeKHR = new (this) RayQueryProvisionalTypeKHR;
+  rayQueryTypeKHR = new (this) RayQueryTypeKHR;
 }
 
 SpirvContext::~SpirvContext() {
@@ -33,7 +33,7 @@ SpirvContext::~SpirvContext() {
   boolType->~BoolType();
   samplerType->~SamplerType();
   accelerationStructureTypeNV->~AccelerationStructureTypeNV();
-  rayQueryProvisionalTypeKHR->~RayQueryProvisionalTypeKHR();
+  rayQueryTypeKHR->~RayQueryTypeKHR();
 
   for (auto *sintType : sintTypes)
     if (sintType) // sintTypes may contain nullptr

+ 23 - 12
tools/clang/lib/SPIRV/SpirvEmitter.cpp

@@ -9883,6 +9883,8 @@ SpirvInstruction *SpirvEmitter::processReportHit(const CallExpr *callExpr) {
 }
 
 void SpirvEmitter::processCallShader(const CallExpr *callExpr) {
+  bool nvRayTracing =
+      featureManager.isExtensionEnabled(Extension::NV_ray_tracing);
   SpirvInstruction *callDataLocInst = nullptr;
   SpirvInstruction *callDataStageVar = nullptr;
   const VarDecl *callDataArg = nullptr;
@@ -9937,10 +9939,16 @@ void SpirvEmitter::processCallShader(const CallExpr *callExpr) {
   // Id)
   llvm::SmallVector<SpirvInstruction *, 2> callShaderArgs;
   callShaderArgs.push_back(doExpr(args[0]));
-  callShaderArgs.push_back(callDataLocInst);
 
-  spvBuilder.createRayTracingOpsNV(spv::Op::OpExecuteCallableNV, QualType(),
-                                   callShaderArgs, callExpr->getExprLoc());
+  if (nvRayTracing) {
+    callShaderArgs.push_back(callDataLocInst);
+    spvBuilder.createRayTracingOpsNV(spv::Op::OpExecuteCallableNV, QualType(),
+                                     callShaderArgs, callExpr->getExprLoc());
+  } else {
+    callShaderArgs.push_back(callDataStageVar);
+    spvBuilder.createRayTracingOpsNV(spv::Op::OpExecuteCallableKHR, QualType(),
+                                     callShaderArgs, callExpr->getExprLoc());
+  }
 
   // Copy data back to argument
   tempLoad = spvBuilder.createLoad(callDataArg->getType(), callDataStageVar,
@@ -9950,6 +9958,9 @@ void SpirvEmitter::processCallShader(const CallExpr *callExpr) {
 }
 
 void SpirvEmitter::processTraceRay(const CallExpr *callExpr) {
+  bool nvRayTracing =
+      featureManager.isExtensionEnabled(Extension::NV_ray_tracing);
+
   SpirvInstruction *rayPayloadLocInst = nullptr;
   SpirvInstruction *rayPayloadStageVar = nullptr;
   const VarDecl *rayPayloadArg = nullptr;
@@ -10047,10 +10058,16 @@ void SpirvEmitter::processTraceRay(const CallExpr *callExpr) {
   traceArgs.push_back(tMin);
   traceArgs.push_back(direction);
   traceArgs.push_back(tMax);
-  traceArgs.push_back(rayPayloadLocInst);
 
-  spvBuilder.createRayTracingOpsNV(spv::Op::OpTraceNV, QualType(), traceArgs,
-                                   callExpr->getExprLoc());
+  if (nvRayTracing) {
+    traceArgs.push_back(rayPayloadLocInst);
+    spvBuilder.createRayTracingOpsNV(spv::Op::OpTraceNV, QualType(), traceArgs,
+                                     callExpr->getExprLoc());
+  } else {
+    traceArgs.push_back(rayPayloadStageVar);
+    spvBuilder.createRayTracingOpsNV(spv::Op::OpTraceRayKHR, QualType(),
+                                     traceArgs, callExpr->getExprLoc());
+  }
 
   // Copy arguments back to stage variable
   tempLoad = spvBuilder.createLoad(rayPayloadArg->getType(), rayPayloadStageVar,
@@ -11626,9 +11643,6 @@ void SpirvEmitter::addFunctionToWorkQueue(hlsl::DXIL::ShaderKind shaderKind,
 
 SpirvInstruction *
 SpirvEmitter::processTraceRayInline(const CXXMemberCallExpr *expr) {
-  emitWarning("SPV_KHR_ray_query is currently a provisional extension and "
-              "might change in ways that are not backwards compatible",
-              expr->getExprLoc());
   const auto object = expr->getImplicitObjectArgument();
   uint32_t templateFlags = hlsl::GetHLSLResourceTemplateUInt(object->getType());
   const auto constFlags = spvBuilder.getConstantInt(
@@ -11709,9 +11723,6 @@ SpirvEmitter::processTraceRayInline(const CXXMemberCallExpr *expr) {
 SpirvInstruction *
 SpirvEmitter::processRayQueryIntrinsics(const CXXMemberCallExpr *expr,
                                         hlsl::IntrinsicOp opcode) {
-  emitWarning("SPV_KHR_ray_query is currently a provisional extension and "
-              "might change in ways that are not backwards compatible",
-              expr->getExprLoc());
   const auto object = expr->getImplicitObjectArgument();
   SpirvInstruction *rayqueryObj = loadIfAliasVarRef(object);
 

+ 1 - 1
tools/clang/test/CodeGenSPIRV/rayquery_assign.cs.hlsl

@@ -1,4 +1,4 @@
-// Run: %dxc -T cs_6_5 -E CS
+// Run: %dxc -T cs_6_5 -E CS -fspv-target-env=vulkan1.2
 // CHECK:  error: store value of type 'RayQuery<RAY_FLAG_FORCE_OPAQUE | RAY_FLAG_ACCEPT_FIRST_HIT_AND_END_SEARCH>' is unsupported
 
 [numThreads(1,1,1)]

+ 2 - 2
tools/clang/test/CodeGenSPIRV/rayquery_equal.cs.hlsl

@@ -1,4 +1,4 @@
-// Run: %dxc -T cs_6_5 -E main
+// Run: %dxc -T cs_6_5 -E main -fspv-target-env=vulkan1.2
 RaytracingAccelerationStructure g_topLevel : register(t0, space0);
 RWTexture2D<float4> g_output : register(u1, space0);
 
@@ -17,7 +17,7 @@ void main(uint2 launchIndex: SV_DispatchThreadID)
     RayQuery<RAY_FLAG_FORCE_OPAQUE> q;
 
     q.TraceRayInline(g_topLevel, 0, 0xff, ray);
-// CHECK:  [[rayquery:%\d+]] = OpVariable %_ptr_Function_rayQueryProvisionalKHR Function
+// CHECK:  [[rayquery:%\d+]] = OpVariable %_ptr_Function_rayQueryKHR Function
     q.Proceed();
 // CHECK:  OpRayQueryProceedKHR %bool [[rayquery]]
     if(q.CommittedStatus() == COMMITTED_TRIANGLE_HIT)

+ 2 - 2
tools/clang/test/CodeGenSPIRV/rayquery_init_ds.hlsl

@@ -1,5 +1,5 @@
-// RUN: %dxc -T ds_6_5 -E main
-// CHECK:  OpCapability RayQueryProvisionalKHR
+// RUN: %dxc -T ds_6_5 -E main -fspv-target-env=vulkan1.2
+// CHECK:  OpCapability RayQueryKHR
 // CHECK:  OpExtension "SPV_KHR_ray_query"
 
 struct VSSceneIn {

+ 2 - 2
tools/clang/test/CodeGenSPIRV/rayquery_init_gs.hlsl

@@ -1,5 +1,5 @@
-// RUN: %dxc -T gs_6_5 -E main
-// CHECK:  OpCapability RayQueryProvisionalKHR
+// RUN: %dxc -T gs_6_5 -E main -fspv-target-env=vulkan1.2
+// CHECK:  OpCapability RayQueryKHR
 // CHECK:  OpExtension "SPV_KHR_ray_query
 
 struct Out

+ 6 - 6
tools/clang/test/CodeGenSPIRV/rayquery_init_hs.hlsl

@@ -1,6 +1,6 @@
-// Run: %dxc -T hs_6_5 -E main
-// CHECK:  OpCapability RayQueryProvisionalKHR
-// CHECK:  OpCapability RayTraversalPrimitiveCullingProvisionalKHR
+// Run: %dxc -T hs_6_5 -E main -fspv-target-env=vulkan1.2
+// CHECK:  OpCapability RayQueryKHR
+// CHECK:  OpCapability RayTraversalPrimitiveCullingKHR
 // CHECK:  OpExtension "SPV_KHR_ray_query"
 
 #define MAX_POINTS 3
@@ -59,9 +59,9 @@ void doInitialize(RayQuery<RAY_FLAG_FORCE_OPAQUE|RAY_FLAG_SKIP_TRIANGLES> query,
 [outputcontrolpoints(MAX_POINTS)]
 [patchconstantfunc("mainConstant")]
 CONTROL_POINT main(InputPatch<VS_CONTROL_POINT_OUTPUT, MAX_POINTS> ip, uint cpid : SV_OutputControlPointID) {
-// CHECK:  %rayQueryProvisionalKHR = OpTypeRayQueryProvisionalKHR
-// CHECK:  %_ptr_Function_rayQueryProvisionalKHR = OpTypePointer Function %rayQueryProvisionalKHR
-// CHECK:  [[rayquery:%\d+]] = OpVariable %_ptr_Function_rayQueryProvisionalKHR Function
+// CHECK:  %rayQueryKHR = OpTypeRayQueryKHR
+// CHECK:  %_ptr_Function_rayQueryKHR = OpTypePointer Function %rayQueryKHR
+// CHECK:  [[rayquery:%\d+]] = OpVariable %_ptr_Function_rayQueryKHR Function
     RayQuery<RAY_FLAG_FORCE_OPAQUE|RAY_FLAG_SKIP_TRIANGLES> q;
     RayDesc ray = MakeRayDesc();
 // CHECK:  [[accel:%\d+]] = OpLoad %accelerationStructureNV %AccelerationStructure

+ 2 - 2
tools/clang/test/CodeGenSPIRV/rayquery_init_ps.hlsl

@@ -1,7 +1,7 @@
-// RUN: %dxc -E main -T ps_6_5
+// RUN: %dxc -E main -T ps_6_5 -fspv-target-env=vulkan1.2
 
 // RUN: %dxc -T gs_6_5 -E main
-// CHECK:  OpCapability RayQueryProvisionalKHR
+// CHECK:  OpCapability RayQueryKHR
 // CHECK:  OpExtension "SPV_KHR_ray_query
 
 RaytracingAccelerationStructure AccelerationStructure : register(t0);

+ 3 - 3
tools/clang/test/CodeGenSPIRV/rayquery_init_rahit.hlsl

@@ -1,6 +1,6 @@
-// Run: %dxc -T lib_6_3
-// CHECK:  OpCapability RayTracingProvisionalKHR
-// CHECK:  OpCapability RayQueryProvisionalKHR
+// Run: %dxc -T lib_6_3 -fspv-target-env=vulkan1.2
+// CHECK:  OpCapability RayTracingKHR
+// CHECK:  OpCapability RayQueryKHR
 // CHECK:  OpExtension "SPV_KHR_ray_tracing"
 // CHECK:  OpExtension "SPV_KHR_ray_query"
 

+ 3 - 3
tools/clang/test/CodeGenSPIRV/rayquery_init_rcall.hlsl

@@ -1,6 +1,6 @@
-// Run: %dxc -T lib_6_3
-// CHECK:  OpCapability RayTracingProvisionalKHR
-// CHECK:  OpCapability RayQueryProvisionalKHR
+// Run: %dxc -T lib_6_3 -fspv-target-env=vulkan1.2
+// CHECK:  OpCapability RayTracingKHR
+// CHECK:  OpCapability RayQueryKHR
 // CHECK:  OpExtension "SPV_KHR_ray_tracing"
 // CHECK:  OpExtension "SPV_KHR_ray_query"
 

+ 3 - 3
tools/clang/test/CodeGenSPIRV/rayquery_init_rchit.hlsl

@@ -1,6 +1,6 @@
-// Run: %dxc -T lib_6_3
-// CHECK:  OpCapability RayTracingProvisionalKHR
-// CHECK:  OpCapability RayQueryProvisionalKHR
+// Run: %dxc -T lib_6_3 -fspv-target-env=vulkan1.2
+// CHECK:  OpCapability RayTracingKHR
+// CHECK:  OpCapability RayQueryKHR
 // CHECK:  OpExtension "SPV_KHR_ray_tracing"
 // CHECK:  OpExtension "SPV_KHR_ray_query"
 

+ 3 - 3
tools/clang/test/CodeGenSPIRV/rayquery_init_rgen.hlsl

@@ -1,6 +1,6 @@
-// Run: %dxc -T lib_6_3
-// CHECK:  OpCapability RayTracingProvisionalKHR
-// CHECK:  OpCapability RayQueryProvisionalKHR
+// Run: %dxc -T lib_6_3 -fspv-target-env=vulkan1.2
+// CHECK:  OpCapability RayTracingKHR
+// CHECK:  OpCapability RayQueryKHR
 // CHECK:  OpExtension "SPV_KHR_ray_tracing"
 // CHECK:  OpExtension "SPV_KHR_ray_query"
 

+ 3 - 3
tools/clang/test/CodeGenSPIRV/rayquery_init_rint.hlsl

@@ -1,6 +1,6 @@
-// Run: %dxc -T lib_6_3
-// CHECK:  OpCapability RayTracingProvisionalKHR
-// CHECK:  OpCapability RayQueryProvisionalKHR
+// Run: %dxc -T lib_6_3 -fspv-target-env=vulkan1.2
+// CHECK:  OpCapability RayTracingKHR
+// CHECK:  OpCapability RayQueryKHR
 // CHECK:  OpExtension "SPV_KHR_ray_tracing"
 // CHECK:  OpExtension "SPV_KHR_ray_query"
 

+ 3 - 3
tools/clang/test/CodeGenSPIRV/rayquery_init_rmiss.hlsl

@@ -1,6 +1,6 @@
-// Run: %dxc -T lib_6_3
-// CHECK:  OpCapability RayTracingProvisionalKHR
-// CHECK:  OpCapability RayQueryProvisionalKHR
+// Run: %dxc -T lib_6_3 -fspv-target-env=vulkan1.2
+// CHECK:  OpCapability RayTracingKHR
+// CHECK:  OpCapability RayQueryKHR
 // CHECK:  OpExtension "SPV_KHR_ray_tracing"
 // CHECK:  OpExtension "SPV_KHR_ray_query"
 

+ 6 - 6
tools/clang/test/CodeGenSPIRV/rayquery_init_vs.hlsl

@@ -1,6 +1,6 @@
-// Run: %dxc -T vs_6_5 -E main
-// CHECK:  OpCapability RayQueryProvisionalKHR
-// CHECK:  OpCapability RayTraversalPrimitiveCullingProvisionalKHR
+// Run: %dxc -T vs_6_5 -E main -fspv-target-env=vulkan1.2
+// CHECK:  OpCapability RayQueryKHR
+// CHECK:  OpCapability RayTraversalPrimitiveCullingKHR
 // CHECK:  OpExtension "SPV_KHR_ray_query"
 
 
@@ -31,9 +31,9 @@ void doInitialize(RayQuery<RAY_FLAG_FORCE_OPAQUE|RAY_FLAG_ACCEPT_FIRST_HIT_AND_E
 
 void main()
 {
-// CHECK:  %rayQueryProvisionalKHR = OpTypeRayQueryProvisionalKHR
-// CHECK:  %_ptr_Function_rayQueryProvisionalKHR = OpTypePointer Function %rayQueryProvisionalKHR
-// CHECK:  [[rayquery:%\d+]] = OpVariable %_ptr_Function_rayQueryProvisionalKHR Function
+// CHECK:  %rayQueryKHR = OpTypeRayQueryKHR
+// CHECK:  %_ptr_Function_rayQueryKHR = OpTypePointer Function %rayQueryKHR
+// CHECK:  [[rayquery:%\d+]] = OpVariable %_ptr_Function_rayQueryKHR Function
     RayQuery<RAY_FLAG_FORCE_OPAQUE|RAY_FLAG_ACCEPT_FIRST_HIT_AND_END_SEARCH> q;
     RayDesc ray = MakeRayDesc();
 // CHECK:  [[accel:%\d+]] = OpLoad %accelerationStructureNV %AccelerationStructure

+ 3 - 3
tools/clang/test/CodeGenSPIRV/rayquery_tryAllOps.cs.hlsl

@@ -1,5 +1,5 @@
-// Run: dxc -T cs_6_5 -E CS
-// CHECK:  OpCapability RayQueryProvisionalKHR
+// Run: dxc -T cs_6_5 -E CS -fspv-target-env=vulkan1.2
+// CHECK:  OpCapability RayQueryKHR
 // CHECK:  OpExtension "SPV_KHR_ray_query"
 
 RaytracingAccelerationStructure AccelerationStructure : register(t0);
@@ -28,7 +28,7 @@ void CS()
     q.TraceRayInline(AccelerationStructure,RAY_FLAG_NONE,0xFF,ray);
     float4x3 mat4x3;
     float3x4 mat3x4;
-// CHECK:  [[rayquery:%\d+]] = OpVariable %_ptr_Function_rayQueryProvisionalKHR Function
+// CHECK:  [[rayquery:%\d+]] = OpVariable %_ptr_Function_rayQueryKHR Function
 // CHECK:  OpRayQueryProceedKHR %bool [[rayquery]]
     while(q.Proceed())
     {

+ 1 - 1
tools/clang/test/CodeGenSPIRV/raytracing.acceleration-structure.hlsl

@@ -1,6 +1,6 @@
 // Run: %dxc -E main -T cs_6_4 -fspv-target-env=vulkan1.2
 
-// CHECK: OpCapability RayTracingProvisionalKHR
+// CHECK: OpCapability RayTracingKHR
 
 // CHECK: %accelerationStructureNV = OpTypeAccelerationStructureKHR
 

+ 11 - 2
tools/clang/test/CodeGenSPIRV/raytracing.khr.closesthit.hlsl

@@ -1,5 +1,5 @@
 // Run: %dxc -T lib_6_3 -fspv-target-env=vulkan1.2
-// CHECK:  OpCapability RayTracingProvisionalKHR
+// CHECK:  OpCapability RayTracingKHR
 // CHECK:  OpExtension "SPV_KHR_ray_tracing"
 // CHECK:  OpDecorate [[a:%\d+]] BuiltIn LaunchIdNV
 // CHECK:  OpDecorate [[b:%\d+]] BuiltIn LaunchSizeNV
@@ -22,6 +22,11 @@ struct Payload
 {
   float4 color;
 };
+
+struct CallData
+{
+  float4 data;
+};
 // CHECK:  OpTypePointer HitAttributeNV %Attribute
 struct Attribute
 {
@@ -72,11 +77,15 @@ void main(inout Payload MyPayload, in Attribute MyAttr) {
   uint _17 = GeometryIndex();
 
   Payload myPayload = { float4(0.0f,0.0f,0.0f,0.0f) };
+  CallData myCallData = { float4(0.0f,0.0f,0.0f,0.0f) };
+// CHECK:  OpStore %myPayload {{%\d+}}
   RayDesc rayDesc;
   rayDesc.Origin = float3(0.0f, 0.0f, 0.0f);
   rayDesc.Direction = float3(0.0f, 0.0f, -1.0f);
   rayDesc.TMin = 0.0f;
   rayDesc.TMax = 1000.0f;
-// CHECK: OpTraceNV {{%\d+}} %uint_0 %uint_255 %uint_0 %uint_1 %uint_0 {{%\d+}} {{%\d+}} {{%\d+}} {{%\d+}} %uint_0
+// CHECK: OpTraceRayKHR {{%\d+}} %uint_0 %uint_255 %uint_0 %uint_1 %uint_0 {{%\d+}} {{%\d+}} {{%\d+}} {{%\d+}} %myPayload
   TraceRay(rs, 0x0, 0xff, 0, 1, 0, rayDesc, myPayload);
+// CHECK: OpExecuteCallableKHR %uint_0 %myCallData
+  CallShader(0, myCallData);
 }

+ 4 - 4
tools/clang/test/CodeGenSPIRV/raytracing.nv.library.hlsl

@@ -65,7 +65,7 @@ void MyRayGenMain() {
   rayDesc.TMax = 1000.0f;
 // CHECK: OpTraceNV {{%\d+}} %uint_0 %uint_255 %uint_0 %uint_1 %uint_0 {{%\d+}} {{%\d+}} {{%\d+}} {{%\d+}} %uint_0
   TraceRay(rs, 0x0, 0xff, 0, 1, 0, rayDesc, myPayload);
-// CHECK: OpExecuteCallableKHR %uint_0 %uint_0
+// CHECK: OpExecuteCallableNV %uint_0 %uint_0
   CallShader(0, myCallData);
 }
 
@@ -180,17 +180,17 @@ void MyAHitMain(inout Payload MyPayload, in Attribute MyAttr) {
   uint _16 = HitKind();
 
   if (_16 == 1U) {
-// CHECK:  OpIgnoreIntersectionKHR
+// CHECK:  OpIgnoreIntersectionNV
     IgnoreHit();
   } else {
-// CHECK:  OpTerminateRayKHR
+// CHECK:  OpTerminateRayNV
     AcceptHitAndEndSearch();
   }
 }
 
 [shader("anyhit")]
 void MyAHitMain2(inout Payload MyPayload, in Attribute MyAttr) {
-// CHECK:  OpTerminateRayKHR
+// CHECK:  OpTerminateRayNV
     AcceptHitAndEndSearch();
 }
 

+ 1 - 1
tools/clang/test/CodeGenSPIRV/raytracing.nv.raygen.hlsl

@@ -33,6 +33,6 @@ void main() {
   rayDesc.TMax = 1000.0f;
   // CHECK: OpTraceNV {{%\d+}} %uint_0 %uint_255 %uint_0 %uint_1 %uint_0 {{%\d+}} {{%\d+}} {{%\d+}} {{%\d+}} %uint_0
   TraceRay(rs, 0x0, 0xff, 0, 1, 0, rayDesc, myPayload);
-  // CHECK: OpExecuteCallableKHR %uint_0 %uint_0
+  // CHECK: OpExecuteCallableNV %uint_0 %uint_0
   CallShader(0, myCallData);
 }