From 9540337091a20641ada2e5f92cb4e530ec8276ef Mon Sep 17 00:00:00 2001 From: Joshua Batista Date: Fri, 20 Jun 2025 17:55:02 -0700 Subject: [PATCH 01/16] add distance tests --- test/Feature/HLSLLib/distance.32.test | 82 ++++++++++++++++++++++++ test/Feature/HLSLLib/distance.fp16.test | 84 +++++++++++++++++++++++++ 2 files changed, 166 insertions(+) create mode 100644 test/Feature/HLSLLib/distance.32.test create mode 100644 test/Feature/HLSLLib/distance.fp16.test diff --git a/test/Feature/HLSLLib/distance.32.test b/test/Feature/HLSLLib/distance.32.test new file mode 100644 index 00000000..77fcfcb3 --- /dev/null +++ b/test/Feature/HLSLLib/distance.32.test @@ -0,0 +1,82 @@ +#--- source.hlsl + +StructuredBuffer X : register(t0); +StructuredBuffer Y : register(t1); + +RWStructuredBuffer Result : register(u2); + +[numthreads(1,1,1)] +void main() { + // distance ({0.0}, {3.0}) = 3.0 + float R0 = distance(X[0].x, Y[0].x); + Result[0] = R0; + // distance({0.0, 0.0}, {3.0, 4.0}) = 5.0 + float R1 = distance(X[0].xy, Y[0].xy); + Result[1] = R1; + // distance({0.0, 0.0, 0.0}, {3.0, 4.0, 12.0}) = 13.0 + float R2 = distance(X[0].xyz, Y[0].xyz); + Result[2] = R2; + // distance({0.0, 0.0, 0.0, 0.0}, {3.0, 4.0, 12.0, 84.0}) = 85.0 + float R3 = distance(X[0].xyzw, Y[0].xyzw); + Result[3] = R3; +} + +//--- pipeline.yaml + +--- +Shaders: + - Stage: Compute + Entry: main + DispatchSize: [1, 1, 1] +Buffers: + - Name: X + Format: Float32 + Stride: 16 + Data: [ 0.0, 0.0, 0.0, 0.0 ] + - Name: Y + Format: Float32 + Stride: 16 + Data: [ 3.0, 4.0, 12.0, 84.0 ] + - Name: Result + Format: Float32 + Stride: 4 + ZeroInitSize: 16 + - Name: ExpectedResult + Format: Float32 + Stride: 4 + Data: [ 3.0, 5.0, 13.0, 85.0 ] +Results: + - Result: CheckResult + Rule: BufferExact + Actual: Result + Expected: ExpectedResult +DescriptorSets: + - Resources: + - Name: X + Kind: StructuredBuffer + DirectXBinding: + Register: 0 + Space: 0 + VulkanBinding: + Binding: 0 + - Name: Y + Kind: StructuredBuffer + DirectXBinding: + Register: 1 + Space: 0 + VulkanBinding: + Binding: 1 + - Name: Result + Kind: RWStructuredBuffer + DirectXBinding: + Register: 2 + Space: 0 + VulkanBinding: + Binding: 2 +... +#--- end + +# UNSUPPORTED: Clang-Vulkan +# RUN: split-file %s %t +# RUN: %dxc_target -T cs_6_5 -Fo %t.o %t/source.hlsl +# RUN: %offloader %t/pipeline.yaml %t.o diff --git a/test/Feature/HLSLLib/distance.fp16.test b/test/Feature/HLSLLib/distance.fp16.test new file mode 100644 index 00000000..b7136a81 --- /dev/null +++ b/test/Feature/HLSLLib/distance.fp16.test @@ -0,0 +1,84 @@ +#--- source.hlsl + +StructuredBuffer X : register(t0); +StructuredBuffer Y : register(t1); + +RWStructuredBuffer Result : register(u2); + +[numthreads(1,1,1)] +void main() { + // distance ({0.0}, {3.0}) = 3.0 + half R0 = distance(X[0].x, Y[0].x); + Result[0] = R0; + // distance({0.0, 0.0}, {3.0, 4.0}) = 5.0 + half R1 = distance(X[0].xy, Y[0].xy); + Result[1] = R1; + // distance({0.0, 0.0, 0.0}, {3.0, 4.0, 12.0}) = 13.0 + half R2 = distance(X[0].xyz, Y[0].xyz); + Result[2] = R2; + // distance({0.0, 0.0, 0.0, 0.0}, {3.0, 4.0, 12.0, 84.0}) = 85.0 + half R3 = distance(X[0].xyzw, Y[0].xyzw); + Result[3] = R3; +} + +//--- pipeline.yaml + +--- +Shaders: + - Stage: Compute + Entry: main + DispatchSize: [1, 1, 1] +Buffers: + - Name: X + Format: Float16 + Stride: 8 + Data: [ 0x0000, 0x0000, 0x0000, 0x0000 ] + - Name: Y + Format: Float16 + Stride: 8 + Data: [ 0x4200, 0x4400, 0x4a00, 0x5540 ] + - Name: Result + Format: Float16 + Stride: 2 + ZeroInitSize: 8 + - Name: ExpectedResult + Format: Float16 + Stride: 2 + Data: [ 0x4200, 0x4500, 0x4a80, 0x5550 ] +Results: + - Result: CheckResult + Rule: BufferFloatEpsilon + Epsilon: 0.1 + Actual: Result + Expected: ExpectedResult +DescriptorSets: + - Resources: + - Name: X + Kind: StructuredBuffer + DirectXBinding: + Register: 0 + Space: 0 + VulkanBinding: + Binding: 0 + - Name: Y + Kind: StructuredBuffer + DirectXBinding: + Register: 1 + Space: 0 + VulkanBinding: + Binding: 1 + - Name: Result + Kind: RWStructuredBuffer + DirectXBinding: + Register: 2 + Space: 0 + VulkanBinding: + Binding: 2 +... +#--- end + +# UNSUPPORTED: Clang-Vulkan +# REQUIRES: Half +# RUN: split-file %s %t +# RUN: %dxc_target -enable-16bit-types -T cs_6_5 -Fo %t.o %t/source.hlsl +# RUN: %offloader %t/pipeline.yaml %t.o From 9e0aab230a32eb6fd24aaf45f17079fc9c6853df Mon Sep 17 00:00:00 2001 From: Joshua Batista Date: Mon, 23 Jun 2025 10:50:21 -0700 Subject: [PATCH 02/16] add denormal test cases --- test/Feature/HLSLLib/distance.32.test | 23 +++++++++++++++----- test/Feature/HLSLLib/distance.fp16.test | 28 +++++++++++++++++++------ 2 files changed, 40 insertions(+), 11 deletions(-) diff --git a/test/Feature/HLSLLib/distance.32.test b/test/Feature/HLSLLib/distance.32.test index 77fcfcb3..6698648f 100644 --- a/test/Feature/HLSLLib/distance.32.test +++ b/test/Feature/HLSLLib/distance.32.test @@ -19,6 +19,18 @@ void main() { // distance({0.0, 0.0, 0.0, 0.0}, {3.0, 4.0, 12.0, 84.0}) = 85.0 float R3 = distance(X[0].xyzw, Y[0].xyzw); Result[3] = R3; + + // test denormal cases + // distance(inf, 1.0) = inf + Result[4] = distance(X[1].x, Y[1].x); + // distance(NaN, 1.0) = NaN + Result[5] = distance(X[1].y, Y[1].y); + // distance(-inf, 1.0) = inf + Result[6] = distance(X[1].z, Y[1].z); + // distance(inf, NaN) = NaN + Result[7] = distance(X[1].w, Y[1].w); + // distance({inf, NaN, -inf, inf}, {1.0, 1.0, 1.0, NaN}) = NaN + Result[8] = distance(X[1].xyzw, Y[1].xyzw); } //--- pipeline.yaml @@ -32,22 +44,23 @@ Buffers: - Name: X Format: Float32 Stride: 16 - Data: [ 0.0, 0.0, 0.0, 0.0 ] + Data: [ 0.0, 0.0, 0.0, 0.0, inf, NaN, -inf, inf ] - Name: Y Format: Float32 Stride: 16 - Data: [ 3.0, 4.0, 12.0, 84.0 ] + Data: [ 3.0, 4.0, 12.0, 84.0, 1.0, 1.0, 1.0, NaN ] - Name: Result Format: Float32 Stride: 4 - ZeroInitSize: 16 + ZeroInitSize: 36 - Name: ExpectedResult Format: Float32 Stride: 4 - Data: [ 3.0, 5.0, 13.0, 85.0 ] + Data: [ 3.0, 5.0, 13.0, 85.0, inf, NaN, inf, NaN, NaN ] Results: - Result: CheckResult - Rule: BufferExact + Rule: BufferFloatULP + ULPT: 1 Actual: Result Expected: ExpectedResult DescriptorSets: diff --git a/test/Feature/HLSLLib/distance.fp16.test b/test/Feature/HLSLLib/distance.fp16.test index b7136a81..24c43701 100644 --- a/test/Feature/HLSLLib/distance.fp16.test +++ b/test/Feature/HLSLLib/distance.fp16.test @@ -19,6 +19,22 @@ void main() { // distance({0.0, 0.0, 0.0, 0.0}, {3.0, 4.0, 12.0, 84.0}) = 85.0 half R3 = distance(X[0].xyzw, Y[0].xyzw); Result[3] = R3; + + // test denormal cases + // distance(inf, 1.0) = inf + Result[4] = distance(X[1].x, Y[1].x); + + // distance(NaN, 1.0) = NaN + Result[5] = distance(X[1].y, Y[1].y); + + // distance(-inf, 1.0) = inf + Result[6] = distance(X[1].z, Y[1].z); + + // distance(inf, NaN) = NaN + Result[7] = distance(X[1].w, Y[1].w); + + // distance({inf, NaN, -inf, inf}, {1.0, 1.0, 1.0, NaN}) = NaN + Result[8] = distance(X[1].xyzw, Y[1].xyzw); } //--- pipeline.yaml @@ -32,23 +48,23 @@ Buffers: - Name: X Format: Float16 Stride: 8 - Data: [ 0x0000, 0x0000, 0x0000, 0x0000 ] + Data: [ 0x0000, 0x0000, 0x0000, 0x0000, 0x7C00, 0x7E00, 0xFC00, 0x7C00 ] - Name: Y Format: Float16 Stride: 8 - Data: [ 0x4200, 0x4400, 0x4a00, 0x5540 ] + Data: [ 0x4200, 0x4400, 0x4a00, 0x5540, 0x003C, 0x003C, 0x003C, 0x7FFF ] - Name: Result Format: Float16 Stride: 2 - ZeroInitSize: 8 + ZeroInitSize: 24 - Name: ExpectedResult Format: Float16 Stride: 2 - Data: [ 0x4200, 0x4500, 0x4a80, 0x5550 ] + Data: [ 0x4200, 0x4500, 0x4a80, 0x5550, 0x7C00, 0x7FFF, 0x7C00, 0x7FFF, 0x7FFF, 0x0, 0x0, 0x0 ] Results: - Result: CheckResult - Rule: BufferFloatEpsilon - Epsilon: 0.1 + Rule: BufferFloatULP + ULPT: 1 Actual: Result Expected: ExpectedResult DescriptorSets: From 339f9f7acf5ee837c76ef51b0844a369a07ba69d Mon Sep 17 00:00:00 2001 From: Joshua Batista Date: Mon, 23 Jun 2025 12:23:38 -0700 Subject: [PATCH 03/16] use different representation for NaN float16s --- test/Feature/HLSLLib/distance.fp16.test | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/Feature/HLSLLib/distance.fp16.test b/test/Feature/HLSLLib/distance.fp16.test index 24c43701..bb7dc18a 100644 --- a/test/Feature/HLSLLib/distance.fp16.test +++ b/test/Feature/HLSLLib/distance.fp16.test @@ -52,7 +52,7 @@ Buffers: - Name: Y Format: Float16 Stride: 8 - Data: [ 0x4200, 0x4400, 0x4a00, 0x5540, 0x003C, 0x003C, 0x003C, 0x7FFF ] + Data: [ 0x4200, 0x4400, 0x4a00, 0x5540, 0x003C, 0x003C, 0x003C, 0x7E00 ] - Name: Result Format: Float16 Stride: 2 @@ -60,7 +60,7 @@ Buffers: - Name: ExpectedResult Format: Float16 Stride: 2 - Data: [ 0x4200, 0x4500, 0x4a80, 0x5550, 0x7C00, 0x7FFF, 0x7C00, 0x7FFF, 0x7FFF, 0x0, 0x0, 0x0 ] + Data: [ 0x4200, 0x4500, 0x4a80, 0x5550, 0x7C00, 0x7E00, 0x7C00, 0x7E00, 0x7E00, 0x0, 0x0, 0x0 ] Results: - Result: CheckResult Rule: BufferFloatULP From 71ae4117cc6376e85de63d1548e230b27b15ee02 Mon Sep 17 00:00:00 2001 From: Joshua Batista Date: Mon, 23 Jun 2025 16:24:29 -0700 Subject: [PATCH 04/16] split out non-normal values, add denorm values --- .../Feature/HLSLLib/distance.fp16.denorm.test | 93 +++++++++++++++++++ test/Feature/HLSLLib/distance.fp16.test | 26 +----- 2 files changed, 98 insertions(+), 21 deletions(-) create mode 100644 test/Feature/HLSLLib/distance.fp16.denorm.test diff --git a/test/Feature/HLSLLib/distance.fp16.denorm.test b/test/Feature/HLSLLib/distance.fp16.denorm.test new file mode 100644 index 00000000..113f2ff4 --- /dev/null +++ b/test/Feature/HLSLLib/distance.fp16.denorm.test @@ -0,0 +1,93 @@ +#--- source.hlsl + +StructuredBuffer X : register(t0); +StructuredBuffer Y : register(t1); + +RWStructuredBuffer Result : register(u2); + +[numthreads(1,1,1)] +void main() { + // test denormal cases + // distance(inf, 1.0) = inf + Result[0] = distance(X[0].x, Y[0].x); + + // distance(NaN, 1.0) = NaN + Result[1] = distance(X[0].y, Y[0].x); + + // distance(-inf, 1.0) = inf + Result[2] = distance(X[0].z, Y[0].x); + + // distance(inf, NaN) = NaN + Result[3] = distance(X[0].w, Y[0].w); + + // distance({inf, NaN, -inf, inf}, {1.0, 1.0, 1.0, NaN}) = NaN + Result[4] = distance(X[0].xyzw, Y[0].xyzw); + + // distance({denorm}, {1.0}) = denorm + Result[5] = distance(Y[0].z, Y[0].x); + + // distance({-denorm}, {1.0}) = denorm + Result[6] = distance(Y[0].y, Y[0].x); +} + +//--- pipeline.yaml + +--- +Shaders: + - Stage: Compute + Entry: main + DispatchSize: [1, 1, 1] +Buffers: + - Name: X + Format: Float16 + Stride: 8 + Data: [ 0x7C00, 0x7E00, 0xFC00, 0x7C00 ] + - Name: Y + Format: Float16 + Stride: 8 + Data: [ 0x003C, 0x8001, 0x0001, 0x7E00 ] + - Name: Result + Format: Float16 + Stride: 2 + ZeroInitSize: 16 + - Name: ExpectedResult + Format: Float16 + Stride: 2 + Data: [ 0x7C00, 0x7E00, 0x7C00, 0x7E00, 0x7E00, 0x3B, 0x3D, 0x0 ] +Results: + - Result: CheckResult + Rule: BufferFloatULP + ULPT: 1 + Actual: Result + Expected: ExpectedResult +DescriptorSets: + - Resources: + - Name: X + Kind: StructuredBuffer + DirectXBinding: + Register: 0 + Space: 0 + VulkanBinding: + Binding: 0 + - Name: Y + Kind: StructuredBuffer + DirectXBinding: + Register: 1 + Space: 0 + VulkanBinding: + Binding: 1 + - Name: Result + Kind: RWStructuredBuffer + DirectXBinding: + Register: 2 + Space: 0 + VulkanBinding: + Binding: 2 +... +#--- end + +# UNSUPPORTED: Clang-Vulkan +# REQUIRES: Half +# RUN: split-file %s %t +# RUN: %dxc_target -enable-16bit-types -T cs_6_5 -Fo %t.o %t/source.hlsl +# RUN: %offloader %t/pipeline.yaml %t.o diff --git a/test/Feature/HLSLLib/distance.fp16.test b/test/Feature/HLSLLib/distance.fp16.test index bb7dc18a..a184bca1 100644 --- a/test/Feature/HLSLLib/distance.fp16.test +++ b/test/Feature/HLSLLib/distance.fp16.test @@ -18,23 +18,7 @@ void main() { Result[2] = R2; // distance({0.0, 0.0, 0.0, 0.0}, {3.0, 4.0, 12.0, 84.0}) = 85.0 half R3 = distance(X[0].xyzw, Y[0].xyzw); - Result[3] = R3; - - // test denormal cases - // distance(inf, 1.0) = inf - Result[4] = distance(X[1].x, Y[1].x); - - // distance(NaN, 1.0) = NaN - Result[5] = distance(X[1].y, Y[1].y); - - // distance(-inf, 1.0) = inf - Result[6] = distance(X[1].z, Y[1].z); - - // distance(inf, NaN) = NaN - Result[7] = distance(X[1].w, Y[1].w); - - // distance({inf, NaN, -inf, inf}, {1.0, 1.0, 1.0, NaN}) = NaN - Result[8] = distance(X[1].xyzw, Y[1].xyzw); + Result[3] = R3; } //--- pipeline.yaml @@ -48,19 +32,19 @@ Buffers: - Name: X Format: Float16 Stride: 8 - Data: [ 0x0000, 0x0000, 0x0000, 0x0000, 0x7C00, 0x7E00, 0xFC00, 0x7C00 ] + Data: [ 0x0000, 0x0000, 0x0000, 0x0000 ] - Name: Y Format: Float16 Stride: 8 - Data: [ 0x4200, 0x4400, 0x4a00, 0x5540, 0x003C, 0x003C, 0x003C, 0x7E00 ] + Data: [ 0x4200, 0x4400, 0x4a00, 0x5540 ] - Name: Result Format: Float16 Stride: 2 - ZeroInitSize: 24 + ZeroInitSize: 8 - Name: ExpectedResult Format: Float16 Stride: 2 - Data: [ 0x4200, 0x4500, 0x4a80, 0x5550, 0x7C00, 0x7E00, 0x7C00, 0x7E00, 0x7E00, 0x0, 0x0, 0x0 ] + Data: [ 0x4200, 0x4500, 0x4a80, 0x5550 ] Results: - Result: CheckResult Rule: BufferFloatULP From 8cc532b726a5d211d667871d493c4a7fd32b8a71 Mon Sep 17 00:00:00 2001 From: Joshua Batista Date: Mon, 23 Jun 2025 16:42:04 -0700 Subject: [PATCH 05/16] split out 32 bit special value tests as well --- .../Feature/HLSLLib/distance.32.denormal.test | 92 +++++++++++++++++++ test/Feature/HLSLLib/distance.32.test | 22 +---- .../Feature/HLSLLib/distance.fp16.denorm.test | 2 +- 3 files changed, 98 insertions(+), 18 deletions(-) create mode 100644 test/Feature/HLSLLib/distance.32.denormal.test diff --git a/test/Feature/HLSLLib/distance.32.denormal.test b/test/Feature/HLSLLib/distance.32.denormal.test new file mode 100644 index 00000000..fb8a0980 --- /dev/null +++ b/test/Feature/HLSLLib/distance.32.denormal.test @@ -0,0 +1,92 @@ +#--- source.hlsl + +StructuredBuffer X : register(t0); +StructuredBuffer Y : register(t1); + +RWStructuredBuffer Result : register(u2); + +[numthreads(1,1,1)] +void main() { + // test special cases + // distance(inf, 1.0) = inf + Result[0] = distance(X[0].x, Y[0].x); + + // distance(NaN, 1.0) = NaN + Result[1] = distance(X[0].y, Y[0].x); + + // distance(-inf, 1.0) = inf + Result[2] = distance(X[0].z, Y[0].x); + + // distance(inf, NaN) = NaN + Result[3] = distance(X[0].w, Y[0].w); + + // distance({inf, NaN, -inf, inf}, {1.0, 1.0, 1.0, NaN}) = NaN + Result[4] = distance(X[0].xyzw, Y[0].xyzw); + + // distance({denorm}, {1.0}) = denorm + Result[5] = distance(Y[0].z, Y[0].x); + + // distance({-denorm}, {1.0}) = denorm + Result[6] = distance(Y[0].y, Y[0].x); +} + +//--- pipeline.yaml + +--- +Shaders: + - Stage: Compute + Entry: main + DispatchSize: [1, 1, 1] +Buffers: + - Name: X + Format: Float32 + Stride: 16 + Data: [ inf, NaN, -inf, inf ] + - Name: Y + Format: Float32 + Stride: 16 + Data: [ 1.0, -0x1.e7d42cp-127, 0x1.e7d42cp-127, NaN ] + - Name: Result + Format: Float32 + Stride: 4 + ZeroInitSize: 32 + - Name: ExpectedResult + Format: Float32 + Stride: 4 + Data: [ inf, NaN, inf, NaN, NaN, 1, 1, 0x0 ] +Results: + - Result: CheckResult + Rule: BufferFloatULP + ULPT: 1 + Actual: Result + Expected: ExpectedResult +DescriptorSets: + - Resources: + - Name: X + Kind: StructuredBuffer + DirectXBinding: + Register: 0 + Space: 0 + VulkanBinding: + Binding: 0 + - Name: Y + Kind: StructuredBuffer + DirectXBinding: + Register: 1 + Space: 0 + VulkanBinding: + Binding: 1 + - Name: Result + Kind: RWStructuredBuffer + DirectXBinding: + Register: 2 + Space: 0 + VulkanBinding: + Binding: 2 +... +#--- end + +# UNSUPPORTED: Clang-Vulkan +# RUN: split-file %s %t +# RUN: %dxc_target -T cs_6_5 -Fo %t.o %t/source.hlsl +# RUN: %offloader %t/pipeline.yaml %t.o diff --git a/test/Feature/HLSLLib/distance.32.test b/test/Feature/HLSLLib/distance.32.test index 6698648f..ab61eaac 100644 --- a/test/Feature/HLSLLib/distance.32.test +++ b/test/Feature/HLSLLib/distance.32.test @@ -18,19 +18,7 @@ void main() { Result[2] = R2; // distance({0.0, 0.0, 0.0, 0.0}, {3.0, 4.0, 12.0, 84.0}) = 85.0 float R3 = distance(X[0].xyzw, Y[0].xyzw); - Result[3] = R3; - - // test denormal cases - // distance(inf, 1.0) = inf - Result[4] = distance(X[1].x, Y[1].x); - // distance(NaN, 1.0) = NaN - Result[5] = distance(X[1].y, Y[1].y); - // distance(-inf, 1.0) = inf - Result[6] = distance(X[1].z, Y[1].z); - // distance(inf, NaN) = NaN - Result[7] = distance(X[1].w, Y[1].w); - // distance({inf, NaN, -inf, inf}, {1.0, 1.0, 1.0, NaN}) = NaN - Result[8] = distance(X[1].xyzw, Y[1].xyzw); + Result[3] = R3; } //--- pipeline.yaml @@ -44,19 +32,19 @@ Buffers: - Name: X Format: Float32 Stride: 16 - Data: [ 0.0, 0.0, 0.0, 0.0, inf, NaN, -inf, inf ] + Data: [ 0.0, 0.0, 0.0, 0.0 ] - Name: Y Format: Float32 Stride: 16 - Data: [ 3.0, 4.0, 12.0, 84.0, 1.0, 1.0, 1.0, NaN ] + Data: [ 3.0, 4.0, 12.0, 84.0 ] - Name: Result Format: Float32 Stride: 4 - ZeroInitSize: 36 + ZeroInitSize: 16 - Name: ExpectedResult Format: Float32 Stride: 4 - Data: [ 3.0, 5.0, 13.0, 85.0, inf, NaN, inf, NaN, NaN ] + Data: [ 3.0, 5.0, 13.0, 85.0] Results: - Result: CheckResult Rule: BufferFloatULP diff --git a/test/Feature/HLSLLib/distance.fp16.denorm.test b/test/Feature/HLSLLib/distance.fp16.denorm.test index 113f2ff4..b111c1d1 100644 --- a/test/Feature/HLSLLib/distance.fp16.denorm.test +++ b/test/Feature/HLSLLib/distance.fp16.denorm.test @@ -7,7 +7,7 @@ RWStructuredBuffer Result : register(u2); [numthreads(1,1,1)] void main() { - // test denormal cases + // test special cases // distance(inf, 1.0) = inf Result[0] = distance(X[0].x, Y[0].x); From f626d651f60ce1f5aaf3aaa786cf2a93c9e8e6d8 Mon Sep 17 00:00:00 2001 From: Joshua Batista Date: Wed, 2 Jul 2025 17:52:43 -0700 Subject: [PATCH 06/16] add -Gis --- test/Feature/HLSLLib/distance.fp16.denorm.test | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Feature/HLSLLib/distance.fp16.denorm.test b/test/Feature/HLSLLib/distance.fp16.denorm.test index b111c1d1..c2b08606 100644 --- a/test/Feature/HLSLLib/distance.fp16.denorm.test +++ b/test/Feature/HLSLLib/distance.fp16.denorm.test @@ -89,5 +89,5 @@ DescriptorSets: # UNSUPPORTED: Clang-Vulkan # REQUIRES: Half # RUN: split-file %s %t -# RUN: %dxc_target -enable-16bit-types -T cs_6_5 -Fo %t.o %t/source.hlsl +# RUN: %dxc_target -enable-16bit-types -Gis -T cs_6_5 -Fo %t.o %t/source.hlsl # RUN: %offloader %t/pipeline.yaml %t.o From 8b75db90a70fb1ce6261cb3ddf811fb6b0acc435 Mon Sep 17 00:00:00 2001 From: Joshua Batista Date: Mon, 7 Jul 2025 16:32:11 -0700 Subject: [PATCH 07/16] try again on a succeeding windows intel machine --- test/Feature/HLSLLib/distance.fp16.denorm.test | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/Feature/HLSLLib/distance.fp16.denorm.test b/test/Feature/HLSLLib/distance.fp16.denorm.test index c2b08606..1b1f6b59 100644 --- a/test/Feature/HLSLLib/distance.fp16.denorm.test +++ b/test/Feature/HLSLLib/distance.fp16.denorm.test @@ -23,10 +23,10 @@ void main() { // distance({inf, NaN, -inf, inf}, {1.0, 1.0, 1.0, NaN}) = NaN Result[4] = distance(X[0].xyzw, Y[0].xyzw); - // distance({denorm}, {1.0}) = denorm + // distance({denorm}, {1.0}) = 1.0 Result[5] = distance(Y[0].z, Y[0].x); - // distance({-denorm}, {1.0}) = denorm + // distance({-denorm}, {1.0}) = 1.0 Result[6] = distance(Y[0].y, Y[0].x); } @@ -45,7 +45,7 @@ Buffers: - Name: Y Format: Float16 Stride: 8 - Data: [ 0x003C, 0x8001, 0x0001, 0x7E00 ] + Data: [ 0x3C00, 0x8001, 0x0001, 0x7E00 ] - Name: Result Format: Float16 Stride: 2 @@ -53,7 +53,7 @@ Buffers: - Name: ExpectedResult Format: Float16 Stride: 2 - Data: [ 0x7C00, 0x7E00, 0x7C00, 0x7E00, 0x7E00, 0x3B, 0x3D, 0x0 ] + Data: [ 0x7C00, 0x7E00, 0x7C00, 0xFE00, 0xFE00, 0x3C00, 0x3C00, 0x0 ] Results: - Result: CheckResult Rule: BufferFloatULP From 26e7437c9d4ab6eb3d9c2ea7f5e6af77b7cff769 Mon Sep 17 00:00:00 2001 From: Joshua Batista Date: Tue, 8 Jul 2025 11:39:26 -0700 Subject: [PATCH 08/16] delete fp16 special values test --- .../Feature/HLSLLib/distance.fp16.denorm.test | 93 ------------------- 1 file changed, 93 deletions(-) delete mode 100644 test/Feature/HLSLLib/distance.fp16.denorm.test diff --git a/test/Feature/HLSLLib/distance.fp16.denorm.test b/test/Feature/HLSLLib/distance.fp16.denorm.test deleted file mode 100644 index 1b1f6b59..00000000 --- a/test/Feature/HLSLLib/distance.fp16.denorm.test +++ /dev/null @@ -1,93 +0,0 @@ -#--- source.hlsl - -StructuredBuffer X : register(t0); -StructuredBuffer Y : register(t1); - -RWStructuredBuffer Result : register(u2); - -[numthreads(1,1,1)] -void main() { - // test special cases - // distance(inf, 1.0) = inf - Result[0] = distance(X[0].x, Y[0].x); - - // distance(NaN, 1.0) = NaN - Result[1] = distance(X[0].y, Y[0].x); - - // distance(-inf, 1.0) = inf - Result[2] = distance(X[0].z, Y[0].x); - - // distance(inf, NaN) = NaN - Result[3] = distance(X[0].w, Y[0].w); - - // distance({inf, NaN, -inf, inf}, {1.0, 1.0, 1.0, NaN}) = NaN - Result[4] = distance(X[0].xyzw, Y[0].xyzw); - - // distance({denorm}, {1.0}) = 1.0 - Result[5] = distance(Y[0].z, Y[0].x); - - // distance({-denorm}, {1.0}) = 1.0 - Result[6] = distance(Y[0].y, Y[0].x); -} - -//--- pipeline.yaml - ---- -Shaders: - - Stage: Compute - Entry: main - DispatchSize: [1, 1, 1] -Buffers: - - Name: X - Format: Float16 - Stride: 8 - Data: [ 0x7C00, 0x7E00, 0xFC00, 0x7C00 ] - - Name: Y - Format: Float16 - Stride: 8 - Data: [ 0x3C00, 0x8001, 0x0001, 0x7E00 ] - - Name: Result - Format: Float16 - Stride: 2 - ZeroInitSize: 16 - - Name: ExpectedResult - Format: Float16 - Stride: 2 - Data: [ 0x7C00, 0x7E00, 0x7C00, 0xFE00, 0xFE00, 0x3C00, 0x3C00, 0x0 ] -Results: - - Result: CheckResult - Rule: BufferFloatULP - ULPT: 1 - Actual: Result - Expected: ExpectedResult -DescriptorSets: - - Resources: - - Name: X - Kind: StructuredBuffer - DirectXBinding: - Register: 0 - Space: 0 - VulkanBinding: - Binding: 0 - - Name: Y - Kind: StructuredBuffer - DirectXBinding: - Register: 1 - Space: 0 - VulkanBinding: - Binding: 1 - - Name: Result - Kind: RWStructuredBuffer - DirectXBinding: - Register: 2 - Space: 0 - VulkanBinding: - Binding: 2 -... -#--- end - -# UNSUPPORTED: Clang-Vulkan -# REQUIRES: Half -# RUN: split-file %s %t -# RUN: %dxc_target -enable-16bit-types -Gis -T cs_6_5 -Fo %t.o %t/source.hlsl -# RUN: %offloader %t/pipeline.yaml %t.o From 977c5fab40eeb5d293939178eda5bb3628f0231b Mon Sep 17 00:00:00 2001 From: Joshua Batista Date: Wed, 9 Jul 2025 13:32:26 -0700 Subject: [PATCH 09/16] address scalar comparisons and remove vulkan disallow --- .../Feature/HLSLLib/distance.32.denormal.test | 31 +++++++++---------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/test/Feature/HLSLLib/distance.32.denormal.test b/test/Feature/HLSLLib/distance.32.denormal.test index fb8a0980..230090b8 100644 --- a/test/Feature/HLSLLib/distance.32.denormal.test +++ b/test/Feature/HLSLLib/distance.32.denormal.test @@ -8,26 +8,26 @@ RWStructuredBuffer Result : register(u2); [numthreads(1,1,1)] void main() { // test special cases - // distance(inf, 1.0) = inf - Result[0] = distance(X[0].x, Y[0].x); + // distance({inf, 0.0}, {0.0, 1.0}) = inf + Result[0] = distance(X[0].xw, Y[0].wx); - // distance(NaN, 1.0) = NaN - Result[1] = distance(X[0].y, Y[0].x); + // distance({NaN, 0.0}, {1.0, 0.0}) = NaN + Result[1] = distance(X[0].yw, Y[0].xw); - // distance(-inf, 1.0) = inf - Result[2] = distance(X[0].z, Y[0].x); + // distance({-inf, 0.0}, {0.0, 1.0}) = inf + Result[2] = distance(X[0].zw, Y[0].wx); - // distance(inf, NaN) = NaN - Result[3] = distance(X[0].w, Y[0].w); + // distance({inf, 0.0}, {0.0, NaN}) = NaN + Result[3] = distance(X[0].xw, X[0].wy); - // distance({inf, NaN, -inf, inf}, {1.0, 1.0, 1.0, NaN}) = NaN + // distance({inf, NaN, -inf, 0}, {1.0, -denorm, denorm, 0}) = NaN Result[4] = distance(X[0].xyzw, Y[0].xyzw); - // distance({denorm}, {1.0}) = denorm - Result[5] = distance(Y[0].z, Y[0].x); + // distance({denorm, denorm}, {1.0, 0.0}) = 1.0 + Result[5] = distance(Y[0].zz, Y[0].xw); - // distance({-denorm}, {1.0}) = denorm - Result[6] = distance(Y[0].y, Y[0].x); + // distance({-denorm, -denorm}, {0.0, 1.0}) = 1.0 + Result[6] = distance(Y[0].yy, Y[0].wx); } //--- pipeline.yaml @@ -41,11 +41,11 @@ Buffers: - Name: X Format: Float32 Stride: 16 - Data: [ inf, NaN, -inf, inf ] + Data: [ inf, NaN, -inf, 0 ] - Name: Y Format: Float32 Stride: 16 - Data: [ 1.0, -0x1.e7d42cp-127, 0x1.e7d42cp-127, NaN ] + Data: [ 1.0, -0x1.e7d42cp-127, 0x1.e7d42cp-127, 0 ] - Name: Result Format: Float32 Stride: 4 @@ -86,7 +86,6 @@ DescriptorSets: ... #--- end -# UNSUPPORTED: Clang-Vulkan # RUN: split-file %s %t # RUN: %dxc_target -T cs_6_5 -Fo %t.o %t/source.hlsl # RUN: %offloader %t/pipeline.yaml %t.o From c5c78c5f4039b7b334fd13ef4a263c7d90bb567a Mon Sep 17 00:00:00 2001 From: Joshua Batista Date: Thu, 10 Jul 2025 10:22:43 -0700 Subject: [PATCH 10/16] add note on why clang-vulkan is unsupported --- test/Feature/HLSLLib/distance.32.test | 2 ++ test/Feature/HLSLLib/distance.fp16.test | 2 ++ 2 files changed, 4 insertions(+) diff --git a/test/Feature/HLSLLib/distance.32.test b/test/Feature/HLSLLib/distance.32.test index ab61eaac..22f76ea1 100644 --- a/test/Feature/HLSLLib/distance.32.test +++ b/test/Feature/HLSLLib/distance.32.test @@ -78,6 +78,8 @@ DescriptorSets: #--- end # UNSUPPORTED: Clang-Vulkan +# Clang-Vulkan is unsupported because of two validation errors +# This issue tracks its resolution: https://github.com/llvm/offload-test-suite/issues/285 # RUN: split-file %s %t # RUN: %dxc_target -T cs_6_5 -Fo %t.o %t/source.hlsl # RUN: %offloader %t/pipeline.yaml %t.o diff --git a/test/Feature/HLSLLib/distance.fp16.test b/test/Feature/HLSLLib/distance.fp16.test index a184bca1..974db3e3 100644 --- a/test/Feature/HLSLLib/distance.fp16.test +++ b/test/Feature/HLSLLib/distance.fp16.test @@ -78,6 +78,8 @@ DescriptorSets: #--- end # UNSUPPORTED: Clang-Vulkan +# Clang-Vulkan is unsupported because of two validation errors +# This issue tracks its resolution: https://github.com/llvm/offload-test-suite/issues/285 # REQUIRES: Half # RUN: split-file %s %t # RUN: %dxc_target -enable-16bit-types -T cs_6_5 -Fo %t.o %t/source.hlsl From 414704e185bc3032c189b04837e4ac99f46e7afa Mon Sep 17 00:00:00 2001 From: Joshua Batista Date: Mon, 14 Jul 2025 11:21:17 -0700 Subject: [PATCH 11/16] add -0.0 --- test/Feature/HLSLLib/distance.32.denormal.test | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/test/Feature/HLSLLib/distance.32.denormal.test b/test/Feature/HLSLLib/distance.32.denormal.test index 230090b8..0f9a1e01 100644 --- a/test/Feature/HLSLLib/distance.32.denormal.test +++ b/test/Feature/HLSLLib/distance.32.denormal.test @@ -8,25 +8,25 @@ RWStructuredBuffer Result : register(u2); [numthreads(1,1,1)] void main() { // test special cases - // distance({inf, 0.0}, {0.0, 1.0}) = inf + // distance({inf, 0.0}, {-0.0, 1.0}) = inf Result[0] = distance(X[0].xw, Y[0].wx); - // distance({NaN, 0.0}, {1.0, 0.0}) = NaN + // distance({NaN, 0.0}, {1.0, -0.0}) = NaN Result[1] = distance(X[0].yw, Y[0].xw); - // distance({-inf, 0.0}, {0.0, 1.0}) = inf + // distance({-inf, 0.0}, {-0.0, 1.0}) = inf Result[2] = distance(X[0].zw, Y[0].wx); // distance({inf, 0.0}, {0.0, NaN}) = NaN Result[3] = distance(X[0].xw, X[0].wy); - // distance({inf, NaN, -inf, 0}, {1.0, -denorm, denorm, 0}) = NaN + // distance({inf, NaN, -inf, 0}, {1.0, -denorm, denorm, -0.0}) = NaN Result[4] = distance(X[0].xyzw, Y[0].xyzw); - // distance({denorm, denorm}, {1.0, 0.0}) = 1.0 + // distance({denorm, denorm}, {1.0, -0.0}) = 1.0 Result[5] = distance(Y[0].zz, Y[0].xw); - // distance({-denorm, -denorm}, {0.0, 1.0}) = 1.0 + // distance({-denorm, -denorm}, {-0.0, 1.0}) = 1.0 Result[6] = distance(Y[0].yy, Y[0].wx); } @@ -45,7 +45,7 @@ Buffers: - Name: Y Format: Float32 Stride: 16 - Data: [ 1.0, -0x1.e7d42cp-127, 0x1.e7d42cp-127, 0 ] + Data: [ 1.0, -0x1.e7d42cp-127, 0x1.e7d42cp-127, -0 ] - Name: Result Format: Float32 Stride: 4 From ed7e7f7720b92a073bd95163cd6f0853eb15a85a Mon Sep 17 00:00:00 2001 From: Joshua Batista Date: Wed, 16 Jul 2025 15:18:47 -0700 Subject: [PATCH 12/16] incraese ULP, use constant folding tests, use more diverse inputs --- .../Feature/HLSLLib/distance.32.denormal.test | 91 ------------------- test/Feature/HLSLLib/distance.32.test | 39 +++++--- test/Feature/HLSLLib/distance.fp16.test | 35 ++++--- 3 files changed, 48 insertions(+), 117 deletions(-) delete mode 100644 test/Feature/HLSLLib/distance.32.denormal.test diff --git a/test/Feature/HLSLLib/distance.32.denormal.test b/test/Feature/HLSLLib/distance.32.denormal.test deleted file mode 100644 index 0f9a1e01..00000000 --- a/test/Feature/HLSLLib/distance.32.denormal.test +++ /dev/null @@ -1,91 +0,0 @@ -#--- source.hlsl - -StructuredBuffer X : register(t0); -StructuredBuffer Y : register(t1); - -RWStructuredBuffer Result : register(u2); - -[numthreads(1,1,1)] -void main() { - // test special cases - // distance({inf, 0.0}, {-0.0, 1.0}) = inf - Result[0] = distance(X[0].xw, Y[0].wx); - - // distance({NaN, 0.0}, {1.0, -0.0}) = NaN - Result[1] = distance(X[0].yw, Y[0].xw); - - // distance({-inf, 0.0}, {-0.0, 1.0}) = inf - Result[2] = distance(X[0].zw, Y[0].wx); - - // distance({inf, 0.0}, {0.0, NaN}) = NaN - Result[3] = distance(X[0].xw, X[0].wy); - - // distance({inf, NaN, -inf, 0}, {1.0, -denorm, denorm, -0.0}) = NaN - Result[4] = distance(X[0].xyzw, Y[0].xyzw); - - // distance({denorm, denorm}, {1.0, -0.0}) = 1.0 - Result[5] = distance(Y[0].zz, Y[0].xw); - - // distance({-denorm, -denorm}, {-0.0, 1.0}) = 1.0 - Result[6] = distance(Y[0].yy, Y[0].wx); -} - -//--- pipeline.yaml - ---- -Shaders: - - Stage: Compute - Entry: main - DispatchSize: [1, 1, 1] -Buffers: - - Name: X - Format: Float32 - Stride: 16 - Data: [ inf, NaN, -inf, 0 ] - - Name: Y - Format: Float32 - Stride: 16 - Data: [ 1.0, -0x1.e7d42cp-127, 0x1.e7d42cp-127, -0 ] - - Name: Result - Format: Float32 - Stride: 4 - ZeroInitSize: 32 - - Name: ExpectedResult - Format: Float32 - Stride: 4 - Data: [ inf, NaN, inf, NaN, NaN, 1, 1, 0x0 ] -Results: - - Result: CheckResult - Rule: BufferFloatULP - ULPT: 1 - Actual: Result - Expected: ExpectedResult -DescriptorSets: - - Resources: - - Name: X - Kind: StructuredBuffer - DirectXBinding: - Register: 0 - Space: 0 - VulkanBinding: - Binding: 0 - - Name: Y - Kind: StructuredBuffer - DirectXBinding: - Register: 1 - Space: 0 - VulkanBinding: - Binding: 1 - - Name: Result - Kind: RWStructuredBuffer - DirectXBinding: - Register: 2 - Space: 0 - VulkanBinding: - Binding: 2 -... -#--- end - -# RUN: split-file %s %t -# RUN: %dxc_target -T cs_6_5 -Fo %t.o %t/source.hlsl -# RUN: %offloader %t/pipeline.yaml %t.o diff --git a/test/Feature/HLSLLib/distance.32.test b/test/Feature/HLSLLib/distance.32.test index 22f76ea1..f9383c26 100644 --- a/test/Feature/HLSLLib/distance.32.test +++ b/test/Feature/HLSLLib/distance.32.test @@ -7,18 +7,29 @@ RWStructuredBuffer Result : register(u2); [numthreads(1,1,1)] void main() { - // distance ({0.0}, {3.0}) = 3.0 + // distance ({1.125}, {2.375}) = 1.25 float R0 = distance(X[0].x, Y[0].x); Result[0] = R0; - // distance({0.0, 0.0}, {3.0, 4.0}) = 5.0 + float R0_constant = distance(1.125, 2.375); + Result[1] = R0_constant; + + // distance({1.125, 2.5}, {2.375, 5.25}) = 3.02076 float R1 = distance(X[0].xy, Y[0].xy); - Result[1] = R1; - // distance({0.0, 0.0, 0.0}, {3.0, 4.0, 12.0}) = 13.0 - float R2 = distance(X[0].xyz, Y[0].xyz); - Result[2] = R2; - // distance({0.0, 0.0, 0.0, 0.0}, {3.0, 4.0, 12.0, 84.0}) = 85.0 + Result[2] = R1; + float R1_constant = distance(float2(1.125, 2.5), float2(2.375, 5.25)); + Result[3] = R1_constant; + + // distance({1.125, 2.5, 4.75}, {2.375, 5.25, 8.375}) = 4.71865 + float R2 = distance(float3(1.125, 2.5, 4.75), float3(2.375, 5.25, 8.375)); + Result[4] = R2; + float R2_constant = distance(X[0].xyz, Y[0].xyz); + Result[5] = R2_constant; + + // distance({1.125, 2.5, 4.75, 6.625}, {2.375, 5.25, 8.375, 5.30}) = 4.90115 float R3 = distance(X[0].xyzw, Y[0].xyzw); - Result[3] = R3; + Result[6] = R3; + float R3_constant = distance(float4(1.125, 2.5, 4.75, 6.625), float4(1.125, 2.5, 4.75, 6.625)); + Result[7] = R3; } //--- pipeline.yaml @@ -32,23 +43,23 @@ Buffers: - Name: X Format: Float32 Stride: 16 - Data: [ 0.0, 0.0, 0.0, 0.0 ] + Data: [ 1.125, 2.5, 4.75, 6.625 ] - Name: Y Format: Float32 Stride: 16 - Data: [ 3.0, 4.0, 12.0, 84.0 ] + Data: [ 2.375, 5.25, 8.375, 5.30 ] - Name: Result Format: Float32 Stride: 4 - ZeroInitSize: 16 + ZeroInitSize: 32 - Name: ExpectedResult Format: Float32 Stride: 4 - Data: [ 3.0, 5.0, 13.0, 85.0] + Data: [ 1.25, 1.25, 3.02076, 3.02076, 4.71865, 4.71865, 4.90115, 4.90115 ] Results: - Result: CheckResult - Rule: BufferFloatULP - ULPT: 1 + Rule: BufferFloatEpsilon + Epsilon: .0008 Actual: Result Expected: ExpectedResult DescriptorSets: diff --git a/test/Feature/HLSLLib/distance.fp16.test b/test/Feature/HLSLLib/distance.fp16.test index 974db3e3..4cdbce23 100644 --- a/test/Feature/HLSLLib/distance.fp16.test +++ b/test/Feature/HLSLLib/distance.fp16.test @@ -7,18 +7,29 @@ RWStructuredBuffer Result : register(u2); [numthreads(1,1,1)] void main() { - // distance ({0.0}, {3.0}) = 3.0 + // distance ({1.125}, {2.375}) = 1.25 half R0 = distance(X[0].x, Y[0].x); Result[0] = R0; - // distance({0.0, 0.0}, {3.0, 4.0}) = 5.0 + half R0_constant = distance(half(1.125), half(2.375)); + Result[1] = R0_constant; + + // distance({1.125, 2.5}, {2.375, 5.25}) = 3.02076 half R1 = distance(X[0].xy, Y[0].xy); - Result[1] = R1; - // distance({0.0, 0.0, 0.0}, {3.0, 4.0, 12.0}) = 13.0 + Result[2] = R1; + half R1_constant = distance(half2(1.125, 2.5), half2(2.375, 5.25)); + Result[3] = R1_constant; + + // distance({1.125, 2.5, 4.75}, {2.375, 5.25, 8.375}) = 4.71865 half R2 = distance(X[0].xyz, Y[0].xyz); - Result[2] = R2; - // distance({0.0, 0.0, 0.0, 0.0}, {3.0, 4.0, 12.0, 84.0}) = 85.0 + Result[4] = R2; + half R2_constant = distance(half3(1.125, 2.5, 4.75), half3(2.375, 5.25, 8.375)); + Result[5] = R2_constant; + + // distance({1.125, 2.5, 4.75, 6.625}, {2.375, 5.25, 8.375, 5.30}) = 4.90115 half R3 = distance(X[0].xyzw, Y[0].xyzw); - Result[3] = R3; + Result[6] = R3; + half R3_constant = distance(half4(1.125, 2.5, 4.75, 6.625), half4(2.375, 5.25, 8.375, 5.30)); + Result[7] = R3_constant; } //--- pipeline.yaml @@ -32,23 +43,23 @@ Buffers: - Name: X Format: Float16 Stride: 8 - Data: [ 0x0000, 0x0000, 0x0000, 0x0000 ] + Data: [ 0x3c80, 0x4100, 0x44c0, 0x46a0 ] - Name: Y Format: Float16 Stride: 8 - Data: [ 0x4200, 0x4400, 0x4a00, 0x5540 ] + Data: [ 0x40c0, 0x4540, 0x4830, 0x454d ] - Name: Result Format: Float16 Stride: 2 - ZeroInitSize: 8 + ZeroInitSize: 16 - Name: ExpectedResult Format: Float16 Stride: 2 - Data: [ 0x4200, 0x4500, 0x4a80, 0x5550 ] + Data: [ 0x3d00, 0x3d00, 0x420b, 0x420b, 0x44b8, 0x44b8, 0x44e7, 0x44e7 ] Results: - Result: CheckResult Rule: BufferFloatULP - ULPT: 1 + ULPT: 5 Actual: Result Expected: ExpectedResult DescriptorSets: From f081c5d159f2551bb5cab0d3eb41c5def7990e85 Mon Sep 17 00:00:00 2001 From: Joshua Batista Date: Wed, 16 Jul 2025 15:54:23 -0700 Subject: [PATCH 13/16] address Kaitlin --- test/Feature/HLSLLib/distance.32.test | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/Feature/HLSLLib/distance.32.test b/test/Feature/HLSLLib/distance.32.test index f9383c26..a03ea00d 100644 --- a/test/Feature/HLSLLib/distance.32.test +++ b/test/Feature/HLSLLib/distance.32.test @@ -20,16 +20,16 @@ void main() { Result[3] = R1_constant; // distance({1.125, 2.5, 4.75}, {2.375, 5.25, 8.375}) = 4.71865 - float R2 = distance(float3(1.125, 2.5, 4.75), float3(2.375, 5.25, 8.375)); + float R2 = distance(X[0].xyz, Y[0].xyz); Result[4] = R2; - float R2_constant = distance(X[0].xyz, Y[0].xyz); + float R2_constant = distance(float3(1.125, 2.5, 4.75), float3(2.375, 5.25, 8.375)); Result[5] = R2_constant; // distance({1.125, 2.5, 4.75, 6.625}, {2.375, 5.25, 8.375, 5.30}) = 4.90115 float R3 = distance(X[0].xyzw, Y[0].xyzw); Result[6] = R3; float R3_constant = distance(float4(1.125, 2.5, 4.75, 6.625), float4(1.125, 2.5, 4.75, 6.625)); - Result[7] = R3; + Result[7] = R3_constant; } //--- pipeline.yaml From 36cf096668662c231485c601ad8677d73c66ef4a Mon Sep 17 00:00:00 2001 From: Joshua Batista Date: Wed, 16 Jul 2025 17:13:48 -0700 Subject: [PATCH 14/16] fix a copy paste mistake --- test/Feature/HLSLLib/distance.32.test | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Feature/HLSLLib/distance.32.test b/test/Feature/HLSLLib/distance.32.test index a03ea00d..7c8eced0 100644 --- a/test/Feature/HLSLLib/distance.32.test +++ b/test/Feature/HLSLLib/distance.32.test @@ -28,7 +28,7 @@ void main() { // distance({1.125, 2.5, 4.75, 6.625}, {2.375, 5.25, 8.375, 5.30}) = 4.90115 float R3 = distance(X[0].xyzw, Y[0].xyzw); Result[6] = R3; - float R3_constant = distance(float4(1.125, 2.5, 4.75, 6.625), float4(1.125, 2.5, 4.75, 6.625)); + float R3_constant = distance(float4(1.125, 2.5, 4.75, 6.625), float4(2.375, 5.25, 8.375, 5.30)); Result[7] = R3_constant; } From e5b53c48a77c0f1e175d57e0d3f439d898bdd954 Mon Sep 17 00:00:00 2001 From: Joshua Batista Date: Thu, 17 Jul 2025 11:55:01 -0700 Subject: [PATCH 15/16] add top level test comment --- test/Feature/HLSLLib/distance.32.test | 3 +++ test/Feature/HLSLLib/distance.fp16.test | 3 +++ 2 files changed, 6 insertions(+) diff --git a/test/Feature/HLSLLib/distance.32.test b/test/Feature/HLSLLib/distance.32.test index 7c8eced0..48b4f94a 100644 --- a/test/Feature/HLSLLib/distance.32.test +++ b/test/Feature/HLSLLib/distance.32.test @@ -1,5 +1,8 @@ #--- source.hlsl +// This test tests four different distance scenarios +// One in 1D, 2D, 3D, and 4D + StructuredBuffer X : register(t0); StructuredBuffer Y : register(t1); diff --git a/test/Feature/HLSLLib/distance.fp16.test b/test/Feature/HLSLLib/distance.fp16.test index 4cdbce23..d7dbf7cc 100644 --- a/test/Feature/HLSLLib/distance.fp16.test +++ b/test/Feature/HLSLLib/distance.fp16.test @@ -1,5 +1,8 @@ #--- source.hlsl +// This test tests four different distance scenarios +// One in 1D, 2D, 3D, and 4D + StructuredBuffer X : register(t0); StructuredBuffer Y : register(t1); From d056bd1acb13f401d74ee9de8affa8fd09f63e11 Mon Sep 17 00:00:00 2001 From: Joshua Batista Date: Fri, 18 Jul 2025 16:16:44 -0700 Subject: [PATCH 16/16] address Kaitlin --- .../{distance.fp16.test => distance.16.test} | 37 +++++++++++++++--- test/Feature/HLSLLib/distance.32.test | 38 +++++++++++++++---- 2 files changed, 63 insertions(+), 12 deletions(-) rename test/Feature/HLSLLib/{distance.fp16.test => distance.16.test} (60%) diff --git a/test/Feature/HLSLLib/distance.fp16.test b/test/Feature/HLSLLib/distance.16.test similarity index 60% rename from test/Feature/HLSLLib/distance.fp16.test rename to test/Feature/HLSLLib/distance.16.test index d7dbf7cc..2b9414dc 100644 --- a/test/Feature/HLSLLib/distance.fp16.test +++ b/test/Feature/HLSLLib/distance.16.test @@ -29,10 +29,34 @@ void main() { Result[5] = R2_constant; // distance({1.125, 2.5, 4.75, 6.625}, {2.375, 5.25, 8.375, 5.30}) = 4.90115 - half R3 = distance(X[0].xyzw, Y[0].xyzw); + half R3 = distance(X[0], Y[0]); Result[6] = R3; half R3_constant = distance(half4(1.125, 2.5, 4.75, 6.625), half4(2.375, 5.25, 8.375, 5.30)); Result[7] = R3_constant; + + // distance ({-7.29}, {-12.29}) = 5.0 + half R4 = distance(X[1].x, Y[1].x); + Result[8] = R4; + half R4_constant = distance(half(-7.29), half(-12.29)); + Result[9] = R4_constant; + + // distance({-7.29, 137.14}, {-12.29, -4.0}) = 141.2303 + half R5 = distance(X[1].xy, Y[1].xy); + Result[10] = R5; + half R5_constant = distance(half2(-7.29, 137.14), half2(-12.29, -4.0)); + Result[11] = R5_constant; + + // distance({-7.29, 137.14, 1.1}, {-12.29, -4.0, -2.1}) = 141.2406 + half R6 = distance(X[1].xyz, Y[1].xyz); + Result[12] = R6; + half R6_constant = distance(half3(-7.29, 137.14, 1.1), half3(-12.29, -4.0, -2.1)); + Result[13] = R6_constant; + + // distance({-7.29, 137.14, 1.1, -3.5}, {-12.29, -4.0, -2.1, -2.5}) = 141.2445 + half R7 = distance(X[1], Y[1]); + Result[14] = R7; + half R7_constant = distance(half4(-7.29, 137.14, 11.1, -30.5), half4(-12.29, -4.0, -2.1, -2.5)); + Result[15] = R7_constant; } //--- pipeline.yaml @@ -46,19 +70,22 @@ Buffers: - Name: X Format: Float16 Stride: 8 - Data: [ 0x3c80, 0x4100, 0x44c0, 0x46a0 ] + Data: [ 0x3c80, 0x4100, 0x44c0, 0x46a0, 0xc74a, 0x5849, 0x498d, 0xcfa0 ] + # 1.125, 2.5, 4.75, 6.625, -7.29, 137.14, 11.1, -30.5 - Name: Y Format: Float16 Stride: 8 - Data: [ 0x40c0, 0x4540, 0x4830, 0x454d ] + Data: [ 0x40c0, 0x4540, 0x4830, 0x454d, 0xca25, 0xc400, 0xc033, 0xc100 ] + # 2.375, 5.25, 8.375, 5.30, -12.29, -4.0, -2.1, -2.5 - Name: Result Format: Float16 Stride: 2 - ZeroInitSize: 16 + ZeroInitSize: 32 - Name: ExpectedResult Format: Float16 Stride: 2 - Data: [ 0x3d00, 0x3d00, 0x420b, 0x420b, 0x44b8, 0x44b8, 0x44e7, 0x44e7 ] + Data: [ 0x3d00, 0x3d00, 0x420b, 0x420b, 0x44b8, 0x44b8, 0x44e7, 0x44e7, 0x4500, 0x4500, 0x586a, 0x586a, 0x586f, 0x586f, 0x5885, 0x5885 ] + # 1.25, 1.25, 3.02076, 3.02076, 4.71865, 4.71865, 4.90115, 4.90115, 5.0, 5.0, 141.229, 141.229, 141.844, 141.844, 144.581, 144.581 Results: - Result: CheckResult Rule: BufferFloatULP diff --git a/test/Feature/HLSLLib/distance.32.test b/test/Feature/HLSLLib/distance.32.test index 48b4f94a..318ffd6e 100644 --- a/test/Feature/HLSLLib/distance.32.test +++ b/test/Feature/HLSLLib/distance.32.test @@ -1,7 +1,7 @@ #--- source.hlsl -// This test tests four different distance scenarios -// One in 1D, 2D, 3D, and 4D +// This test tests eight different distance scenarios +// Two in 1D, 2D, 3D, and 4D StructuredBuffer X : register(t0); StructuredBuffer Y : register(t1); @@ -29,10 +29,34 @@ void main() { Result[5] = R2_constant; // distance({1.125, 2.5, 4.75, 6.625}, {2.375, 5.25, 8.375, 5.30}) = 4.90115 - float R3 = distance(X[0].xyzw, Y[0].xyzw); + float R3 = distance(X[0], Y[0]); Result[6] = R3; float R3_constant = distance(float4(1.125, 2.5, 4.75, 6.625), float4(2.375, 5.25, 8.375, 5.30)); Result[7] = R3_constant; + + // distance ({-7.29}, {-12.29}) = 5.0 + float R4 = distance(X[1].x, Y[1].x); + Result[8] = R4; + float R4_constant = distance(-7.29, -12.29); + Result[9] = R4_constant; + + // distance({-7.29, 137.14}, {-12.29, -4.0}) = 141.2303 + float R5 = distance(X[1].xy, Y[1].xy); + Result[10] = R5; + float R5_constant = distance(float2(-7.29, 137.14), float2(-12.29, -4.0)); + Result[11] = R5_constant; + + // distance({-7.29, 137.14, 11.1}, {-12.29, -4.0, -2.1}) = 141.745 + float R6 = distance(X[1].xyz, Y[1].xyz); + Result[12] = R6; + float R6_constant = distance(float3(-7.29, 137.14, 11.1), float3(-12.29, -4.0, -2.1)); + Result[13] = R6_constant; + + // distance({-7.29, 137.14, 11.1, -30.5}, {-12.29, -4.0, -2.1, -2.5}) = 141.2445 + float R7 = distance(X[1], Y[1]); + Result[14] = R7; + float R7_constant = distance(float4(-7.29, 137.14, 11.1, -30.5), float4(-12.29, -4.0, -2.1, -2.5)); + Result[15] = R7_constant; } //--- pipeline.yaml @@ -46,19 +70,19 @@ Buffers: - Name: X Format: Float32 Stride: 16 - Data: [ 1.125, 2.5, 4.75, 6.625 ] + Data: [ 1.125, 2.5, 4.75, 6.625, -7.29, 137.14, 11.1, -30.5 ] - Name: Y Format: Float32 Stride: 16 - Data: [ 2.375, 5.25, 8.375, 5.30 ] + Data: [ 2.375, 5.25, 8.375, 5.30, -12.29, -4.0, -2.1, -2.5 ] - Name: Result Format: Float32 Stride: 4 - ZeroInitSize: 32 + ZeroInitSize: 64 - Name: ExpectedResult Format: Float32 Stride: 4 - Data: [ 1.25, 1.25, 3.02076, 3.02076, 4.71865, 4.71865, 4.90115, 4.90115 ] + Data: [ 1.25, 1.25, 3.02076, 3.02076, 4.71865, 4.71865, 4.90115, 4.90115, 5.0, 5.0, 141.229, 141.229, 141.844, 141.844, 144.581, 144.581 ] Results: - Result: CheckResult Rule: BufferFloatEpsilon