summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorDarren Wihandi <65404740+fairywreath@users.noreply.github.com>2025-05-16 13:42:59 -0400
committerGitHub <noreply@github.com>2025-05-16 10:42:59 -0700
commit8683b85c0494db99feb08b6efcdc26dfe006729f (patch)
tree6822d8fabc336409b286c854617fd525bd90fcf2 /tests
parent9dfd5244ad2953753535e82acd05e72e5ab2bc5f (diff)
Fix HLSL ByteAddressBuffer Load* parameter integer type (#7117)
* Fix HLSL ByteAddressBuffer Load* parameter integer type * Fix tests * Fix load with alignment function signature clash * Fix LoadAligned tests
Diffstat (limited to 'tests')
-rw-r--r--tests/compute/byte-address-buffer-align-error.slang2
-rw-r--r--tests/compute/byte-address-buffer-aligned.slang40
-rw-r--r--tests/compute/byte-address-buffer-array.slang20
-rw-r--r--tests/compute/byte-address-buffer.slang17
-rw-r--r--tests/metal/byte-address-buffer.slang8
-rw-r--r--tests/metal/system-val-conversion.slang2
6 files changed, 48 insertions, 41 deletions
diff --git a/tests/compute/byte-address-buffer-align-error.slang b/tests/compute/byte-address-buffer-align-error.slang
index 34300d7c3..11efa561c 100644
--- a/tests/compute/byte-address-buffer-align-error.slang
+++ b/tests/compute/byte-address-buffer-align-error.slang
@@ -17,7 +17,7 @@ void computeMain(uint3 threadId : SV_DispatchThreadID)
{
// CHECK: error 41300: invalid alignment `{{.*}}` specified for the byte address buffer resource with the element size of `{{.*}}`
// CHECK: error 41300: invalid alignment `{{.*}}` specified for the byte address buffer resource with the element size of `{{.*}}`
- buffer.Store<Block>(0, buffer.Load<Block>(1, 5));
+ buffer.Store<Block>(0, buffer.LoadAligned<Block>(1, 5));
buffer.Store<Block>(1, buffer.Load<Block>(0), 3);
}
diff --git a/tests/compute/byte-address-buffer-aligned.slang b/tests/compute/byte-address-buffer-aligned.slang
index 0e848b75c..a65444ec2 100644
--- a/tests/compute/byte-address-buffer-aligned.slang
+++ b/tests/compute/byte-address-buffer-aligned.slang
@@ -33,26 +33,26 @@ void computeMain(uint3 threadId : SV_DispatchThreadID)
// CHECK1: float {{.*}} = buffer0_{{.*}}.{{.*}} = {{.*}};
// CHECK1: float {{.*}} = buffer0_{{.*}}.{{.*}} = {{.*}};
- // CHECK2: float4 {{.*}} = (buffer0_0).Load<float4 >(int(32));
- // CHECK2: buffer0_0.Store(int(32),{{.*}});
- // CHECK2: float {{.*}} = (buffer0_0).Load<float >(int(8));
- // CHECK2: float {{.*}} = (buffer0_0).Load<float >(int(12));
- // CHECK2: float {{.*}} = (buffer0_0).Load<float >(int(16));
- // CHECK2: float {{.*}} = (buffer0_0).Load<float >(int(20));
- // CHECK2: buffer0_0.Store(int(32),float4({{.*}}, {{.*}}, {{.*}}, {{.*}}));
- // CHECK2: float4 {{.*}} = (buffer0_0).Load<float4 >(int(32));
- // CHECK2: buffer0_0.Store(int(8),{{.*}}[int(0)]);
- // CHECK2: buffer0_0.Store(int(12),{{.*}}[int(1)]);
- // CHECK2: buffer0_0.Store(int(16),{{.*}}[int(2)]);
- // CHECK2: buffer0_0.Store(int(20),{{.*}}[int(3)]);
- // CHECK2: float {{.*}} = (buffer0_0).Load<float >(int(8));
- // CHECK2: float {{.*}} = (buffer0_0).Load<float >(int(12));
- // CHECK2: float {{.*}} = (buffer0_0).Load<float >(int(16));
- // CHECK2: float {{.*}} = (buffer0_0).Load<float >(int(20));
- // CHECK2: buffer0_0.Store(int(8),{{.*}});
- // CHECK2: buffer0_0.Store(int(12),{{.*}});
- // CHECK2: buffer0_0.Store(int(16),{{.*}});
- // CHECK2: buffer0_0.Store(int(20),{{.*}});
+ // CHECK2: float4 {{.*}} = (buffer0_0).Load<float4 >(32U);
+ // CHECK2: buffer0_0.Store(32U,{{.*}});
+ // CHECK2: float {{.*}} = (buffer0_0).Load<float >(8U);
+ // CHECK2: float {{.*}} = (buffer0_0).Load<float >(12U);
+ // CHECK2: float {{.*}} = (buffer0_0).Load<float >(16U);
+ // CHECK2: float {{.*}} = (buffer0_0).Load<float >(20U);
+ // CHECK2: buffer0_0.Store(32U,float4({{.*}}, {{.*}}, {{.*}}, {{.*}}));
+ // CHECK2: float4 {{.*}} = (buffer0_0).Load<float4 >(32U);
+ // CHECK2: buffer0_0.Store(8U,{{.*}}[int(0)]);
+ // CHECK2: buffer0_0.Store(12U,{{.*}}[int(1)]);
+ // CHECK2: buffer0_0.Store(16U,{{.*}}[int(2)]);
+ // CHECK2: buffer0_0.Store(20U,{{.*}}[int(3)]);
+ // CHECK2: float {{.*}} = (buffer0_0).Load<float >(8U);
+ // CHECK2: float {{.*}} = (buffer0_0).Load<float >(12U);
+ // CHECK2: float {{.*}} = (buffer0_0).Load<float >(16U);
+ // CHECK2: float {{.*}} = (buffer0_0).Load<float >(20U);
+ // CHECK2: buffer0_0.Store(8U,{{.*}});
+ // CHECK2: buffer0_0.Store(12U,{{.*}});
+ // CHECK2: buffer0_0.Store(16U,{{.*}});
+ // CHECK2: buffer0_0.Store(20U,{{.*}});
// CHECK3-DAG: %[[v4f:[a-zA-Z0-9_]+]] = OpTypeVector %float 4
// CHECK3-DAG: %[[SBv4f:[a-zA-Z0-9_]+]] = OpTypePointer StorageBuffer %[[v4f]]
diff --git a/tests/compute/byte-address-buffer-array.slang b/tests/compute/byte-address-buffer-array.slang
index 429d24072..0231919e5 100644
--- a/tests/compute/byte-address-buffer-array.slang
+++ b/tests/compute/byte-address-buffer-array.slang
@@ -19,21 +19,21 @@ void computeMain(uint3 threadId : SV_DispatchThreadID)
{
// CHECK-NOT: warning
- // CHECK2: float4 {{.*}}[int(2)] = (buffer_0).Load<float4 [int(2)] >(int(0));
- // CHECK2: buffer_0.Store(int(0),{{.*}});
- // CHECK2: float {{.*}} = (buffer_0).Load<float >(int(4));
- // CHECK2: float {{.*}} = (buffer_0).Load<float >(int(8));
- // CHECK2: float {{.*}} = (buffer_0).Load<float >(int(12));
- // CHECK2: float {{.*}} = (buffer_0).Load<float >(int(16));
+ // CHECK2: float4 {{.*}}[int(2)] = (buffer_0).Load<float4 [int(2)] >(0U);
+ // CHECK2: buffer_0.Store(0U,{{.*}});
+ // CHECK2: float {{.*}} = (buffer_0).Load<float >(4U);
+ // CHECK2: float {{.*}} = (buffer_0).Load<float >(8U);
+ // CHECK2: float {{.*}} = (buffer_0).Load<float >(12U);
+ // CHECK2: float {{.*}} = (buffer_0).Load<float >(16U);
// CHECK2: float4 {{.*}} = float4({{.*}}, {{.*}}, {{.*}}, {{.*}});
- // CHECK2: float4 {{.*}} = (buffer_0).Load<float4 >(int(20));
- // CHECK2: buffer_0.Store(int(16),{{.*}});
- // CHECK2: buffer_0.Store(int(32),{{.*}});
+ // CHECK2: float4 {{.*}} = (buffer_0).Load<float4 >(20U);
+ // CHECK2: buffer_0.Store(16U,{{.*}});
+ // CHECK2: buffer_0.Store(32U,{{.*}});
// CHECK3: OpAccessChain
// CHECK3: OpLoad %v4float
// CHECK3: OpStore
buffer.Store(0, buffer.LoadAligned<Block>(0));
- buffer.StoreAligned(16, buffer.Load<Block>(4, 16));
+ buffer.StoreAligned(16, buffer.LoadAligned<Block>(4, 16));
}
diff --git a/tests/compute/byte-address-buffer.slang b/tests/compute/byte-address-buffer.slang
index 65356ec22..3bf811945 100644
--- a/tests/compute/byte-address-buffer.slang
+++ b/tests/compute/byte-address-buffer.slang
@@ -5,6 +5,8 @@
//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj
//TEST(compute):COMPARE_COMPUTE_EX:-d3d12 -compute -shaderobj
+//TEST:SIMPLE(filecheck=SPV):-target spirv -entry computeMain -stage compute -emit-spirv-directly
+
// Confirm cross-compilation of `(RW)ByteAddressBuffer`
//
// TODO: I'm only using `RWByteAddressBuffer` for now because I don't
@@ -16,26 +18,31 @@ RWByteAddressBuffer inputBuffer;
//TEST_INPUT:ubuffer(data=[0 0 0 0]):out,name=outputBuffer
RWByteAddressBuffer outputBuffer;
-void test(int val)
+// Make sure arithmetic ops are properly performed on unsigned types.
+// SPV-NOT: OpSDiv
+// SPV: OpUDiv
+
+void test(uint val)
{
uint tmp = val;
- tmp = inputBuffer.Load(int(tmp * 4));
+ tmp = inputBuffer.Load(uint(tmp * 4));
- uint2 pair = inputBuffer.Load2(int(tmp * 4));
+ uint2 pair = inputBuffer.Load2(uint(tmp * 4));
tmp = (pair.x + pair.y) & 0xF;
- uint4 quad = inputBuffer.Load4(int(tmp * 4));
+ uint4 quad = inputBuffer.Load4(uint(tmp * 4));
tmp = (quad.x + quad.y + quad.z + quad.w) & 0xF;
outputBuffer.Store(val*4, tmp);
}
[numthreads(4, 1, 1)]
+[shader("compute")]
void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID)
{
uint tid = dispatchThreadID.x;
- int val = int(tid);
+ uint val = uint(tid);
test(val);
}
diff --git a/tests/metal/byte-address-buffer.slang b/tests/metal/byte-address-buffer.slang
index cf704f170..53c0e0ac5 100644
--- a/tests/metal/byte-address-buffer.slang
+++ b/tests/metal/byte-address-buffer.slang
@@ -19,12 +19,12 @@ struct TestStruct
[numthreads(1,1,1)]
void main_kernel(uint3 tid: SV_DispatchThreadID)
{
- // CHECK: uint [[WORD0:[a-zA-Z0-9_]+]] = as_type<uint>({{.*}}[(int(0))>>2]);
+ // CHECK: uint [[WORD0:[a-zA-Z0-9_]+]] = as_type<uint>({{.*}}[(0U)>>2]);
// CHECK: uint8_t [[A:[a-zA-Z0-9_]+]] = uint8_t(([[WORD0]] >> 0U) & 255U);
- // CHECK: uint [[WORD1:[a-zA-Z0-9_]+]] = as_type<uint>({{.*}}[(int(0))>>2]);
+ // CHECK: uint [[WORD1:[a-zA-Z0-9_]+]] = as_type<uint>({{.*}}[(0U)>>2]);
// CHECK: half [[H:[a-zA-Z0-9_]+]] = as_type<half>(ushort(([[WORD1]] >> 16U) & 65535U));
- // CHECK: {{.*}}[(int(128))>>2] = as_type<uint32_t>(({{.*}} & 4294967040U) | (uint([[A]]) << 0U));
- // CHECK: {{.*}}[(int(128))>>2] = as_type<uint32_t>(({{.*}} & 65535U) | (uint(as_type<ushort>([[H]])) << 16U));
+ // CHECK: {{.*}}[(128U)>>2] = as_type<uint32_t>(({{.*}} & 4294967040U) | (uint([[A]]) << 0U));
+ // CHECK: {{.*}}[(128U)>>2] = as_type<uint32_t>(({{.*}} & 65535U) | (uint(as_type<ushort>([[H]])) << 16U));
buffer.Store(128, buffer.Load<TestStruct>(0));
}
diff --git a/tests/metal/system-val-conversion.slang b/tests/metal/system-val-conversion.slang
index 5a208086d..dd8e103ae 100644
--- a/tests/metal/system-val-conversion.slang
+++ b/tests/metal/system-val-conversion.slang
@@ -20,7 +20,7 @@ struct TestStruct
}
// CHECK: void main_kernel(uint3 tid{{.*}}
-// CHECK: int tid{{.*}} = int(tid{{.*}}.x);
+// CHECK: uint(int(tid{{.*}}.x))
[numthreads(1,1,1)]
void main_kernel(int tid: SV_DispatchThreadID)