summaryrefslogtreecommitdiffstats
path: root/source/slang
diff options
context:
space:
mode:
authorArielG-NV <159081215+ArielG-NV@users.noreply.github.com>2024-06-14 12:56:59 -0400
committerGitHub <noreply@github.com>2024-06-14 09:56:59 -0700
commitfdef653ab5b38ac78d355d2f0148c6d77e784a8c (patch)
tree5319d02e0678b39321868fd93befbfa7062d7726 /source/slang
parent33e81a03115dad223b244ca689e2abdbf26641f7 (diff)
Improve Direct SPIRV Backend Test Coverage (#4396)
'raytracing' and 'texture-footprint' tests fixed texture-footprint bug changed when we emit raytracing/rayquery extensions with glsl backend (to reduce incorrect extension emitting)
Diffstat (limited to 'source/slang')
-rw-r--r--source/slang/hlsl.meta.slang21
-rw-r--r--source/slang/slang-emit-glsl.cpp5
-rw-r--r--source/slang/slang-emit-spirv.cpp4
-rw-r--r--source/slang/slang-profile.cpp16
-rw-r--r--source/slang/slang-profile.h2
5 files changed, 31 insertions, 17 deletions
diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang
index 10d183da2..c85b9c0ce 100644
--- a/source/slang/hlsl.meta.slang
+++ b/source/slang/hlsl.meta.slang
@@ -19209,8 +19209,7 @@ ${
return spirv_asm {
OpCapability ImageFootprintNV;
OpExtension "SPV_NV_shader_image_footprint";
- %sampledImage:__sampledImageType(this) = OpSampledImage $this $sampler;
- %resultVal:$$__FootprintData = OpImageSampleFootprintNV %sampledImage $coords $granularity $useCoarseLevel;
+ %resultVal:$$__FootprintData = OpImageSampleFootprintNV &this $coords $granularity $useCoarseLevel;
OpStore &footprint %resultVal;
result:$$bool = OpCompositeExtract %resultVal 0;
};
@@ -19237,8 +19236,7 @@ ${
return spirv_asm {
OpCapability ImageFootprintNV;
OpExtension "SPV_NV_shader_image_footprint";
- %sampledImage:__sampledImageType(this) = OpSampledImage $this $sampler;
- %resultVal:$$__FootprintData = OpImageSampleFootprintNV %sampledImage $coords $granularity $useCoarseLevel Bias $bias;
+ %resultVal:$$__FootprintData = OpImageSampleFootprintNV &this $coords $granularity $useCoarseLevel Bias $bias;
OpStore &footprint %resultVal;
result:$$bool = OpCompositeExtract %resultVal 0;
};
@@ -19267,8 +19265,7 @@ ${
OpCapability ImageFootprintNV;
OpCapability MinLod;
OpExtension "SPV_NV_shader_image_footprint";
- %sampledImage:__sampledImageType(this) = OpSampledImage $this $sampler;
- %resultVal:$$__FootprintData = OpImageSampleFootprintNV %sampledImage $coords $granularity $useCoarseLevel MinLod $lodClamp;
+ %resultVal:$$__FootprintData = OpImageSampleFootprintNV &this $coords $granularity $useCoarseLevel MinLod $lodClamp;
OpStore &footprint %resultVal;
result:$$bool = OpCompositeExtract %resultVal 0;
};
@@ -19298,8 +19295,7 @@ ${
OpCapability ImageFootprintNV;
OpCapability MinLod;
OpExtension "SPV_NV_shader_image_footprint";
- %sampledImage:__sampledImageType(this) = OpSampledImage $this $sampler;
- %resultVal:$$__FootprintData = OpImageSampleFootprintNV %sampledImage $coords $granularity $useCoarseLevel Bias|MinLod $bias $lodClamp;
+ %resultVal:$$__FootprintData = OpImageSampleFootprintNV &this $coords $granularity $useCoarseLevel Bias|MinLod $bias $lodClamp;
OpStore &footprint %resultVal;
result:$$bool = OpCompositeExtract %resultVal 0;
};
@@ -19327,8 +19323,7 @@ ${
return spirv_asm {
OpCapability ImageFootprintNV;
OpExtension "SPV_NV_shader_image_footprint";
- %sampledImage:__sampledImageType(this) = OpSampledImage $this $sampler;
- %resultVal:$$__FootprintData = OpImageSampleFootprintNV %sampledImage $coords $granularity $useCoarseLevel Lod $lod;
+ %resultVal:$$__FootprintData = OpImageSampleFootprintNV &this $coords $granularity $useCoarseLevel Lod $lod;
OpStore &footprint %resultVal;
result:$$bool = OpCompositeExtract %resultVal 0;
};
@@ -19361,8 +19356,7 @@ ${{{
return spirv_asm {
OpCapability ImageFootprintNV;
OpExtension "SPV_NV_shader_image_footprint";
- %sampledImage:__sampledImageType(this) = OpSampledImage $this $sampler;
- %resultVal:$$__FootprintData = OpImageSampleFootprintNV %sampledImage $coords $granularity $useCoarseLevel Grad $dx $dy;
+ %resultVal:$$__FootprintData = OpImageSampleFootprintNV &this $coords $granularity $useCoarseLevel Grad $dx $dy;
OpStore &footprint %resultVal;
result:$$bool = OpCompositeExtract %resultVal 0;
};
@@ -19393,8 +19387,7 @@ ${{{
OpCapability ImageFootprintNV;
OpCapability MinLod;
OpExtension "SPV_NV_shader_image_footprint";
- %sampledImage:__sampledImageType(this) = OpSampledImage $this $sampler;
- %resultVal:$$__FootprintData = OpImageSampleFootprintNV %sampledImage $coords $granularity $useCoarseLevel Grad|MinLod $dx $dy $lodClamp;
+ %resultVal:$$__FootprintData = OpImageSampleFootprintNV &this $coords $granularity $useCoarseLevel Grad|MinLod $dx $dy $lodClamp;
OpStore &footprint %resultVal;
result:$$bool = OpCompositeExtract %resultVal 0;
};
diff --git a/source/slang/slang-emit-glsl.cpp b/source/slang/slang-emit-glsl.cpp
index c788d9cbf..2a7f22905 100644
--- a/source/slang/slang-emit-glsl.cpp
+++ b/source/slang/slang-emit-glsl.cpp
@@ -2591,7 +2591,10 @@ void GLSLSourceEmitter::emitSimpleTypeImpl(IRType* type)
{
case kIROp_RaytracingAccelerationStructureType:
{
- _requireRayQuery();
+ if (!isRaytracingStage(m_entryPointStage))
+ _requireRayQuery();
+ else
+ _requireRayTracing();
m_writer->emit("accelerationStructureEXT");
break;
}
diff --git a/source/slang/slang-emit-spirv.cpp b/source/slang/slang-emit-spirv.cpp
index df60feecf..3ee0d9241 100644
--- a/source/slang/slang-emit-spirv.cpp
+++ b/source/slang/slang-emit-spirv.cpp
@@ -3590,8 +3590,8 @@ struct SPIRVEmitContext
case kIROp_VulkanRayPayloadDecoration:
case kIROp_VulkanRayPayloadInDecoration:
// needed since GLSL will not set optypes accordingly, but will keep the decoration
- ensureExtensionDeclaration(UnownedStringSlice("SPV_KHR_ray_query"));
- requireSPIRVCapability(SpvCapabilityRayQueryKHR);
+ ensureExtensionDeclaration(UnownedStringSlice("SPV_KHR_ray_tracing"));
+ requireSPIRVCapability(SpvCapabilityRayTracingKHR);
isRayTracingObject = true;
break;
case kIROp_InterpolationModeDecoration:
diff --git a/source/slang/slang-profile.cpp b/source/slang/slang-profile.cpp
index e5ce6fde3..9b7112b1f 100644
--- a/source/slang/slang-profile.cpp
+++ b/source/slang/slang-profile.cpp
@@ -14,6 +14,22 @@ ProfileFamily getProfileFamily(ProfileVersion version)
}
}
+bool isRaytracingStage(Stage inStage)
+{
+ switch (inStage)
+ {
+ case Stage::RayGeneration:
+ case Stage::Miss:
+ case Stage::Intersection:
+ case Stage::ClosestHit:
+ case Stage::Callable:
+ case Stage::AnyHit:
+ return true;
+ default:
+ return false;
+ }
+}
+
const char* getStageName(Stage stage)
{
switch(stage)
diff --git a/source/slang/slang-profile.h b/source/slang/slang-profile.h
index 9a164805b..55855b91d 100644
--- a/source/slang/slang-profile.h
+++ b/source/slang/slang-profile.h
@@ -56,6 +56,8 @@ namespace Slang
};
+ bool isRaytracingStage(Stage inStage);
+
const char* getStageName(Stage stage);
void printDiagnosticArg(StringBuilder& sb, Stage val);