summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorArielG-NV <159081215+ArielG-NV@users.noreply.github.com>2024-04-26 01:27:30 -0400
committerGitHub <noreply@github.com>2024-04-26 01:27:30 -0400
commite91bd3b0bdc50f66bfd302ff079c65fba5126474 (patch)
tree73c1ce23a93b895216031e0071e954fa4ff641ea /tests
parentbc7231bbcf32819bed37012db3f01b34b5dd856a (diff)
WIP: Force Inline If RefType (#4005)
* Force Inline if reftype Fixes #3997. If we are using a refType, we now ForceInline. remarks: 1. Modifications were made in slang-ir-glsl-legalize to change how we translate GlobalParam proxy's into GlobalParam. a. We now handle the senario where a globalParam is used in multiple disjoint blocks (like 2 different functions). * try to figure out why CI fails but local works try to inline DispatchMesh, works locally, may fail on CI(?) * try another fix * add task tests + don't allow semi-early task-shader inline Task shader uses DispatchMesh which is a very big 'hack' where we check for the function name and modify the callees in very large ways. This function does inline, but it cannot inline early due to future mangling that this operation requires todo. This is reflected with the `[noRefInline]` modifier. It is a modifier so users may stop mandatory inlines with `__ref` parameter.
Diffstat (limited to 'tests')
-rw-r--r--tests/bugs/gh-3997.slang23
-rw-r--r--tests/language-feature/non-copyable-return.slang4
-rw-r--r--tests/pipeline/rasterization/mesh/task-simple.slang5
3 files changed, 30 insertions, 2 deletions
diff --git a/tests/bugs/gh-3997.slang b/tests/bugs/gh-3997.slang
new file mode 100644
index 000000000..8c75da426
--- /dev/null
+++ b/tests/bugs/gh-3997.slang
@@ -0,0 +1,23 @@
+//TEST:SIMPLE(filecheck=CHECK): -target spirv -emit-spirv-directly -O0 -g
+
+//CHECK: OpEntryPoint
+
+float atomicAdd(__ref float value, float amount)
+{
+ __target_switch
+ {
+ case cpp:
+ __requirePrelude("#include <atomic>");
+ __intrinsic_asm "std::atomic_ref(*$0).fetch_add($1)";
+ case spirv:
+ return __atomicAdd(value, amount);
+ }
+}
+
+RWStructuredBuffer<float> outputBuffer;
+
+[numthreads(4, 1, 1)]
+[shader("compute")]
+void computeMain(int3 dispatchThreadID : SV_DispatchThreadID) {
+ atomicAdd(outputBuffer[0], 1);
+} \ No newline at end of file
diff --git a/tests/language-feature/non-copyable-return.slang b/tests/language-feature/non-copyable-return.slang
index 20330c5f9..9b280b982 100644
--- a/tests/language-feature/non-copyable-return.slang
+++ b/tests/language-feature/non-copyable-return.slang
@@ -31,7 +31,7 @@ void computeMain(int3 dispatchThreadID: SV_DispatchThreadID)
{
let f = myFunc0(2.0);
// CHECK: 4.0
- // GLSL: void myFunc1_0(float y{{.*}}, spirv_by_reference MyType_0 {{.*}})
- // GLSL: void myFunc0_0(float x{{.*}}, spirv_by_reference MyType_0 {{.*}})
+ // GLSL: main(
+ // GLSL-NOT: MyType {{.*}} =
outputBuffer[0] = f.x;
}
diff --git a/tests/pipeline/rasterization/mesh/task-simple.slang b/tests/pipeline/rasterization/mesh/task-simple.slang
index dc3de82c0..2b2f3d186 100644
--- a/tests/pipeline/rasterization/mesh/task-simple.slang
+++ b/tests/pipeline/rasterization/mesh/task-simple.slang
@@ -1,6 +1,11 @@
//TEST(compute):COMPARE_COMPUTE_EX(filecheck-buffer=CHECK): -task -output-using-type -dx12 -use-dxil -profile sm_6_6 -render-features mesh-shader
//TEST(compute):COMPARE_COMPUTE_EX(filecheck-buffer=CHECK): -task -output-using-type -vk -profile glsl_450+spirv_1_4 -render-features mesh-shader
//TEST:SIMPLE(filecheck=HLSL):-target hlsl -entry meshMain -stage mesh
+//TEST:SIMPLE(filecheck=CHECK_SPV):-target spirv -entry taskMain -stage amplification
+
+// CHECK_SPV: OpEntryPoint
+// CHECK_SPV: TaskPayloadWorkgroupEXT
+
// To test a simple mesh shader, we'll generate 4 triangles, the vertices of
// each one will hold the triangle index and a value (the square). The fragment