summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPankaj Mistry <63069047+pmistryNV@users.noreply.github.com>2023-12-16 12:48:27 -0800
committerGitHub <noreply@github.com>2023-12-16 12:48:27 -0800
commitb6da04424aff71ddba9629c94401a9a897b152a0 (patch)
treef22199a0ddab9f82166ea4763f1903d5ae2b6498
parenteb89ccb177881f10a4ac3f88fcbe033703d9ecd5 (diff)
Fix nonuniform decoration on direct-to-spirv backend path. (#3338) (#3417)
-rw-r--r--source/slang/hlsl.meta.slang23
-rw-r--r--tests/cross-compile/vk-texture-indexing.slang2
2 files changed, 20 insertions, 5 deletions
diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang
index 945dfa862..2c5f384a3 100644
--- a/source/slang/hlsl.meta.slang
+++ b/source/slang/hlsl.meta.slang
@@ -5963,6 +5963,18 @@ __generic<let N : int> float noise(vector<float, N> x)
/// to this function as necessary in output code, rather than make this
/// the user's responsibility, so that the default behavior of the language
/// is more semantically "correct."
+[ForceInline]
+T __copyObject<T>(T v)
+{
+ __target_switch {
+ case spirv:
+ return spirv_asm {
+ result:$$T = OpCopyObject $v;
+ };
+ }
+}
+
+
__glsl_extension(GL_EXT_nonuniform_qualifier)
[__readNone]
[ForceInline]
@@ -5975,12 +5987,13 @@ uint NonUniformResourceIndex(uint index)
case glsl:
__intrinsic_asm "nonuniformEXT";
case spirv:
+ var indexCopy = __copyObject(index);
spirv_asm
{
OpCapability ShaderNonUniform;
- OpDecorate $index NonUniform;
+ OpDecorate $indexCopy NonUniform;
};
- return index;
+ return indexCopy;
default:
return index;
}
@@ -5988,6 +6001,7 @@ uint NonUniformResourceIndex(uint index)
__glsl_extension(GL_EXT_nonuniform_qualifier)
[__readNone]
+[ForceInline]
int NonUniformResourceIndex(int index)
{
__target_switch
@@ -5997,12 +6011,13 @@ int NonUniformResourceIndex(int index)
case glsl:
__intrinsic_asm "nonuniformEXT";
case spirv:
+ var indexCopy = __copyObject(index);
spirv_asm
{
OpCapability ShaderNonUniform;
- OpDecorate $index NonUniform;
+ OpDecorate $indexCopy NonUniform;
};
- return index;
+ return indexCopy;
default:
return index;
}
diff --git a/tests/cross-compile/vk-texture-indexing.slang b/tests/cross-compile/vk-texture-indexing.slang
index ace0befd5..4629e3b98 100644
--- a/tests/cross-compile/vk-texture-indexing.slang
+++ b/tests/cross-compile/vk-texture-indexing.slang
@@ -1,7 +1,7 @@
// vk-texture-indexing.slang
//TEST:SIMPLE(filecheck=CHECK):-target spirv -entry main -stage fragment
-//TEST_DISABLED:SIMPLE(filecheck=CHECK):-target spirv -entry main -stage fragment -emit-spirv-directly
+//TEST:SIMPLE(filecheck=CHECK):-target spirv -entry main -stage fragment -emit-spirv-directly
struct Params
{