diff options
| author | Darren Wihandi <65404740+fairywreath@users.noreply.github.com> | 2025-05-16 13:42:59 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-05-16 10:42:59 -0700 |
| commit | 8683b85c0494db99feb08b6efcdc26dfe006729f (patch) | |
| tree | 6822d8fabc336409b286c854617fd525bd90fcf2 /tests | |
| parent | 9dfd5244ad2953753535e82acd05e72e5ab2bc5f (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.slang | 2 | ||||
| -rw-r--r-- | tests/compute/byte-address-buffer-aligned.slang | 40 | ||||
| -rw-r--r-- | tests/compute/byte-address-buffer-array.slang | 20 | ||||
| -rw-r--r-- | tests/compute/byte-address-buffer.slang | 17 | ||||
| -rw-r--r-- | tests/metal/byte-address-buffer.slang | 8 | ||||
| -rw-r--r-- | tests/metal/system-val-conversion.slang | 2 |
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) |
