From bdda8a90cdd44ca822b21233ac988f92d1f20826 Mon Sep 17 00:00:00 2001 From: "Harsh Aggarwal (NVIDIA)" Date: Fri, 1 Aug 2025 14:48:53 +0530 Subject: Fix 7441: CUDA boolean vector layout to use 1-byte elements (#7862) * Fix 7441: CUDA boolean vector layout to use 1-byte elements Boolean vectors (bool1, bool2, bool3, bool4) were incorrectly implemented as integer-based types using 4 bytes per element instead of actual 1-byte boolean elements on CUDA targets. Changes: - Update CUDA prelude to define boolean vectors as structs with bool fields instead of typedef aliases to integer vectors - Implement CUDALayoutRulesImpl::GetVectorLayout to use 1-byte alignment for boolean vectors, matching actual CUDA memory layout behavior - Update make_bool functions to populate struct fields correctly This ensures boolean vectors have the same memory layout as bool[4] arrays: - bool1: 1 byte (was 4 bytes) - bool2: 2 bytes (was 8 bytes) - bool3: 3 bytes (was 12 bytes) - bool4: 4 bytes (was 16 bytes) Fixes memory layout mismatch between Slang reflection API and actual CUDA compilation, achieving 75% memory savings for boolean vector usage. * Fix CI issues - Add and update associated functions and operators * Make boolX same as uchar * Use align construct on struct for boolX * Improve Test case for robust alignment checks * Formatting * Disable selected slangpy tests * add metal check which is slightly different than cuda * Test-1 * Test-2 * Test-3 * Test-4 * ReflectionChange * cleanup and update * _slang_select with plain bool is needed for reverse-loop-checkpoint-test --- tests/bindings/hlsl-to-vulkan-array.hlsl.expected | 8 ++++---- tests/bindings/hlsl-to-vulkan-global.hlsl.expected | 8 ++++---- tests/bindings/hlsl-to-vulkan-shift-implicit.hlsl.expected | 14 +++++++------- tests/bindings/hlsl-to-vulkan-shift.hlsl.expected | 14 +++++++------- 4 files changed, 22 insertions(+), 22 deletions(-) (limited to 'tests/bindings') diff --git a/tests/bindings/hlsl-to-vulkan-array.hlsl.expected b/tests/bindings/hlsl-to-vulkan-array.hlsl.expected index b8deb1314..5edf11293 100644 --- a/tests/bindings/hlsl-to-vulkan-array.hlsl.expected +++ b/tests/bindings/hlsl-to-vulkan-array.hlsl.expected @@ -7,7 +7,7 @@ standard output = { { "name": "g_data", "bindings": [ - {"kind": "uniform", "offset": 0, "size": 32}, + {"kind": "uniform", "offset": 0, "size": 32, "elementStride": 16}, {"kind": "shaderResource", "index": 10}, {"kind": "unorderedAccess", "index": 100} ], @@ -53,7 +53,7 @@ standard output = { "kind": "scalar", "scalarType": "float32" }, - "binding": {"kind": "uniform", "offset": 0, "size": 4} + "binding": {"kind": "uniform", "offset": 0, "size": 4, "elementStride": 0} }, { "name": "b", @@ -61,7 +61,7 @@ standard output = { "kind": "scalar", "scalarType": "int32" }, - "binding": {"kind": "uniform", "offset": 4, "size": 4} + "binding": {"kind": "uniform", "offset": 4, "size": 4, "elementStride": 0} } ] }, @@ -90,7 +90,7 @@ standard output = { { "name": "g_data", "bindings": [ - {"kind": "uniform", "offset": 0, "size": 32}, + {"kind": "uniform", "offset": 0, "size": 32, "elementStride": 16}, {"kind": "shaderResource", "index": 10, "used": 0}, {"kind": "unorderedAccess", "index": 100, "used": 0} ] diff --git a/tests/bindings/hlsl-to-vulkan-global.hlsl.expected b/tests/bindings/hlsl-to-vulkan-global.hlsl.expected index 8d3a19458..c8ed668ba 100644 --- a/tests/bindings/hlsl-to-vulkan-global.hlsl.expected +++ b/tests/bindings/hlsl-to-vulkan-global.hlsl.expected @@ -6,7 +6,7 @@ standard output = { "parameters": [ { "name": "a", - "binding": {"kind": "uniform", "offset": 0, "size": 4}, + "binding": {"kind": "uniform", "offset": 0, "size": 4, "elementStride": 0}, "type": { "kind": "scalar", "scalarType": "int32" @@ -14,7 +14,7 @@ standard output = { }, { "name": "b", - "binding": {"kind": "uniform", "offset": 4, "size": 4}, + "binding": {"kind": "uniform", "offset": 4, "size": 4, "elementStride": 0}, "type": { "kind": "scalar", "scalarType": "float32" @@ -64,11 +64,11 @@ standard output = { "bindings": [ { "name": "a", - "binding": {"kind": "uniform", "offset": 0, "size": 4} + "binding": {"kind": "uniform", "offset": 0, "size": 4, "elementStride": 0} }, { "name": "b", - "binding": {"kind": "uniform", "offset": 4, "size": 4} + "binding": {"kind": "uniform", "offset": 4, "size": 4, "elementStride": 0} }, { "name": "t", diff --git a/tests/bindings/hlsl-to-vulkan-shift-implicit.hlsl.expected b/tests/bindings/hlsl-to-vulkan-shift-implicit.hlsl.expected index 85d13552a..477f086fc 100644 --- a/tests/bindings/hlsl-to-vulkan-shift-implicit.hlsl.expected +++ b/tests/bindings/hlsl-to-vulkan-shift-implicit.hlsl.expected @@ -42,7 +42,7 @@ standard output = { "kind": "scalar", "scalarType": "float32" }, - "binding": {"kind": "uniform", "offset": 0, "size": 4} + "binding": {"kind": "uniform", "offset": 0, "size": 4, "elementStride": 0} }, { "name": "b", @@ -50,7 +50,7 @@ standard output = { "kind": "scalar", "scalarType": "int32" }, - "binding": {"kind": "uniform", "offset": 4, "size": 4} + "binding": {"kind": "uniform", "offset": 4, "size": 4, "elementStride": 0} } ] }, @@ -68,7 +68,7 @@ standard output = { "kind": "scalar", "scalarType": "float32" }, - "binding": {"kind": "uniform", "offset": 0, "size": 4} + "binding": {"kind": "uniform", "offset": 0, "size": 4, "elementStride": 0} }, { "name": "b", @@ -76,11 +76,11 @@ standard output = { "kind": "scalar", "scalarType": "int32" }, - "binding": {"kind": "uniform", "offset": 4, "size": 4} + "binding": {"kind": "uniform", "offset": 4, "size": 4, "elementStride": 0} } ] }, - "binding": {"kind": "uniform", "offset": 0, "size": 16} + "binding": {"kind": "uniform", "offset": 0, "size": 16, "elementStride": 0} } } }, @@ -117,7 +117,7 @@ standard output = { "kind": "scalar", "scalarType": "float32" }, - "binding": {"kind": "uniform", "offset": 0, "size": 4} + "binding": {"kind": "uniform", "offset": 0, "size": 4, "elementStride": 0} }, { "name": "b", @@ -125,7 +125,7 @@ standard output = { "kind": "scalar", "scalarType": "int32" }, - "binding": {"kind": "uniform", "offset": 4, "size": 4} + "binding": {"kind": "uniform", "offset": 4, "size": 4, "elementStride": 0} } ] } diff --git a/tests/bindings/hlsl-to-vulkan-shift.hlsl.expected b/tests/bindings/hlsl-to-vulkan-shift.hlsl.expected index fd54b9692..b41087d5b 100644 --- a/tests/bindings/hlsl-to-vulkan-shift.hlsl.expected +++ b/tests/bindings/hlsl-to-vulkan-shift.hlsl.expected @@ -42,7 +42,7 @@ standard output = { "kind": "scalar", "scalarType": "float32" }, - "binding": {"kind": "uniform", "offset": 0, "size": 4} + "binding": {"kind": "uniform", "offset": 0, "size": 4, "elementStride": 0} }, { "name": "b", @@ -50,7 +50,7 @@ standard output = { "kind": "scalar", "scalarType": "int32" }, - "binding": {"kind": "uniform", "offset": 4, "size": 4} + "binding": {"kind": "uniform", "offset": 4, "size": 4, "elementStride": 0} } ] }, @@ -68,7 +68,7 @@ standard output = { "kind": "scalar", "scalarType": "float32" }, - "binding": {"kind": "uniform", "offset": 0, "size": 4} + "binding": {"kind": "uniform", "offset": 0, "size": 4, "elementStride": 0} }, { "name": "b", @@ -76,11 +76,11 @@ standard output = { "kind": "scalar", "scalarType": "int32" }, - "binding": {"kind": "uniform", "offset": 4, "size": 4} + "binding": {"kind": "uniform", "offset": 4, "size": 4, "elementStride": 0} } ] }, - "binding": {"kind": "uniform", "offset": 0, "size": 16} + "binding": {"kind": "uniform", "offset": 0, "size": 16, "elementStride": 0} } } }, @@ -117,7 +117,7 @@ standard output = { "kind": "scalar", "scalarType": "float32" }, - "binding": {"kind": "uniform", "offset": 0, "size": 4} + "binding": {"kind": "uniform", "offset": 0, "size": 4, "elementStride": 0} }, { "name": "b", @@ -125,7 +125,7 @@ standard output = { "kind": "scalar", "scalarType": "int32" }, - "binding": {"kind": "uniform", "offset": 4, "size": 4} + "binding": {"kind": "uniform", "offset": 4, "size": 4, "elementStride": 0} } ] } -- cgit v1.2.3