Просмотр исходного кода

Change DispatchRays dimension to 3d.

Xiang Li 7 лет назад
Родитель
Сommit
c7e6398634

+ 10 - 10
lib/HLSL/DxilValidation.cpp

@@ -609,7 +609,7 @@ static bool ValidateOpcodeInProfile(DXIL::OpCode opcode,
     return (pSM->IsGS());
   // Instructions: PrimitiveID=108
   if (op == 108)
-    return (pSM->IsGS() || pSM->IsDS() || pSM->IsHS() || pSM->IsPS());
+    return (pSM->IsGS() || pSM->IsDS() || pSM->IsHS() || pSM->IsPS() || pSM->IsLib() || pSM->GetKind() == DXIL::ShaderKind::Intersection || pSM->GetKind() == DXIL::ShaderKind::AnyHit || pSM->GetKind() == DXIL::ShaderKind::ClosestHit);
   // Instructions: StorePatchConstant=106, OutputControlPointID=107
   if (106 <= op && op <= 107)
     return (pSM->IsHS());
@@ -631,14 +631,9 @@ static bool ValidateOpcodeInProfile(DXIL::OpCode opcode,
   // Instructions: RawBufferLoad=139, RawBufferStore=140
   if (139 <= op && op <= 140)
     return (pSM->GetMajor() > 6 || (pSM->GetMajor() == 6 && pSM->GetMinor() >= 2));
-  // Instructions: HitKind=143
-  if (op == 143)
-    return (pSM->GetMajor() > 6 || (pSM->GetMajor() == 6 && pSM->GetMinor() >= 3))
-        && (pSM->GetKind() == DXIL::ShaderKind::Intersection || pSM->GetKind() == DXIL::ShaderKind::AnyHit || pSM->GetKind() == DXIL::ShaderKind::ClosestHit);
   // Instructions: CreateHandleFromResourceStructForLib=160
   if (op == 160)
-    return (pSM->GetMajor() > 6 || (pSM->GetMajor() == 6 && pSM->GetMinor() >= 3))
-        && (pSM->IsLib());
+    return (pSM->GetMajor() > 6 || (pSM->GetMajor() == 6 && pSM->GetMinor() >= 3));
   // Instructions: IgnoreHit=155, AcceptHitAndEndSearch=156
   if (155 <= op && op <= 156)
     return (pSM->GetMajor() > 6 || (pSM->GetMajor() == 6 && pSM->GetMinor() >= 3))
@@ -651,9 +646,10 @@ static bool ValidateOpcodeInProfile(DXIL::OpCode opcode,
   if (op == 158)
     return (pSM->GetMajor() > 6 || (pSM->GetMajor() == 6 && pSM->GetMinor() >= 3))
         && (pSM->IsLib() || pSM->GetKind() == DXIL::ShaderKind::Intersection);
-  // Instructions: InstanceID=141, InstanceIndex=142, ObjectRayOrigin=149,
-  // ObjectRayDirection=150, ObjectToWorld=151, WorldToObject=152
-  if (141 <= op && op <= 142 || 149 <= op && op <= 152)
+  // Instructions: InstanceID=141, InstanceIndex=142, HitKind=143,
+  // ObjectRayOrigin=149, ObjectRayDirection=150, ObjectToWorld=151,
+  // WorldToObject=152
+  if (141 <= op && op <= 143 || 149 <= op && op <= 152)
     return (pSM->GetMajor() > 6 || (pSM->GetMajor() == 6 && pSM->GetMinor() >= 3))
         && (pSM->IsLib() || pSM->GetKind() == DXIL::ShaderKind::Intersection || pSM->GetKind() == DXIL::ShaderKind::AnyHit || pSM->GetKind() == DXIL::ShaderKind::ClosestHit);
   // Instructions: RayFlags=144, WorldRayOrigin=147, WorldRayDirection=148,
@@ -2075,6 +2071,10 @@ static void ValidateDxilOperationCallInProfile(CallInst *CI,
       ValCtx.EmitFormatError(ValidationRule::SmOpcodeInInvalidFunction,
                              {"QuadReadLaneAt", "Pixel Shader"});
     break;
+  case DXIL::OpCode::CreateHandleFromResourceStructForLib:
+    ValCtx.EmitFormatError(ValidationRule::SmOpcodeInInvalidFunction,
+                           {"CreateHandleFromResourceStructForLib", "Library"});
+    break;
   default:
     // Skip opcodes don't need special check.
     break;

+ 2 - 2
tools/clang/lib/Sema/gen_intrin_main_tables_15.h

@@ -70,12 +70,12 @@ static const HLSL_INTRINSIC_ARGUMENT g_Intrinsics_Args8[] =
 
 static const HLSL_INTRINSIC_ARGUMENT g_Intrinsics_Args9[] =
 {
-    {"DispatchRaysDimensions", AR_QUAL_OUT, 0, LITEMPLATE_VECTOR, 0, LICOMPTYPE_UINT, 1, 2},
+    {"DispatchRaysDimensions", AR_QUAL_OUT, 0, LITEMPLATE_VECTOR, 0, LICOMPTYPE_UINT, 1, 3},
 };
 
 static const HLSL_INTRINSIC_ARGUMENT g_Intrinsics_Args10[] =
 {
-    {"DispatchRaysIndex", AR_QUAL_OUT, 0, LITEMPLATE_VECTOR, 0, LICOMPTYPE_UINT, 1, 2},
+    {"DispatchRaysIndex", AR_QUAL_OUT, 0, LITEMPLATE_VECTOR, 0, LICOMPTYPE_UINT, 1, 3},
 };
 
 static const HLSL_INTRINSIC_ARGUMENT g_Intrinsics_Args11[] =

+ 2 - 2
utils/hct/gen_intrin_main.txt

@@ -274,8 +274,8 @@ bool [[]]  ReportHit(in float THit, in uint HitKind, in udt Attributes);
 void [[]]  CallShader(in uint ShaderIndex, inout udt Parameter);
 void [[]]  IgnoreHit();
 void [[]]  AcceptHitAndEndSearch();
-uint<2> [[rn]] DispatchRaysIndex();
-uint<2> [[rn]] DispatchRaysDimensions();
+uint<3> [[rn]] DispatchRaysIndex();
+uint<3> [[rn]] DispatchRaysDimensions();
 // group: Ray Vectors
 float<3> [[rn]] WorldRayOrigin();
 float<3> [[rn]] WorldRayDirection();

+ 6 - 4
utils/hct/hctdb.py

@@ -289,9 +289,12 @@ class db_dxil(object):
         for i in "DomainLocation".split(","):
             self.name_idx[i].category = "Domain shader"
             self.name_idx[i].shader_stages = ("domain",)
-        for i in "StorePatchConstant,OutputControlPointID,PrimitiveID".split(","):
+        for i in "StorePatchConstant,OutputControlPointID".split(","):
             self.name_idx[i].category = "Hull shader"
-            self.name_idx[i].shader_stages = ("geometry", "domain", "hull", "pixel") if i == "PrimitiveID" else ("hull",)
+            self.name_idx[i].shader_stages = ("hull",)
+        for i in "PrimitiveID".split(","):
+            self.name_idx[i].category = "Hull shader"
+            self.name_idx[i].shader_stages = ("geometry", "domain", "hull", "pixel","library","intersection","anyhit","closesthit")		
         for i in "ViewID".split(","):
             self.name_idx[i].category = "Graphics shader"
             self.name_idx[i].shader_stages = ("vertex", "hull", "domain", "geometry", "pixel")
@@ -322,7 +325,7 @@ class db_dxil(object):
         for i in "HitKind".split(","):
             self.name_idx[i].category = "Raytracing hit uint System Values"
             self.name_idx[i].shader_model = 6,3
-            self.name_idx[i].shader_stages = ("intersection","anyhit","closesthit",)
+            self.name_idx[i].shader_stages = ("library","intersection","anyhit","closesthit",)
         for i in "RayFlags".split(","):
             self.name_idx[i].category = "Raytracing uint System Values"
             self.name_idx[i].shader_model = 6,3
@@ -362,7 +365,6 @@ class db_dxil(object):
         for i in "CreateHandleFromResourceStructForLib".split(","):
             self.name_idx[i].category = "Library create handle from resource struct (like HL intrinsic)"
             self.name_idx[i].shader_model = 6,3
-            self.name_idx[i].shader_stages = ("library",)
 
     def populate_llvm_instructions(self):
         # Add instructions that map to LLVM instructions.