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/reflection/multi-file.hlsl.expected | 54 +++++++++++++++---------------- 1 file changed, 27 insertions(+), 27 deletions(-) (limited to 'tests/reflection/multi-file.hlsl.expected') diff --git a/tests/reflection/multi-file.hlsl.expected b/tests/reflection/multi-file.hlsl.expected index 804e5874f..2b916d5a2 100644 --- a/tests/reflection/multi-file.hlsl.expected +++ b/tests/reflection/multi-file.hlsl.expected @@ -45,7 +45,7 @@ standard output = { "scalarType": "float32" } }, - "binding": {"kind": "uniform", "offset": 0, "size": 12} + "binding": {"kind": "uniform", "offset": 0, "size": 12, "elementStride": 4} }, { "name": "vertexCB", @@ -53,7 +53,7 @@ standard output = { "kind": "scalar", "scalarType": "float32" }, - "binding": {"kind": "uniform", "offset": 12, "size": 4} + "binding": {"kind": "uniform", "offset": 12, "size": 4, "elementStride": 0} }, { "name": "vertexCC", @@ -65,7 +65,7 @@ standard output = { "scalarType": "float32" } }, - "binding": {"kind": "uniform", "offset": 16, "size": 12} + "binding": {"kind": "uniform", "offset": 16, "size": 12, "elementStride": 4} }, { "name": "vertexCD", @@ -77,7 +77,7 @@ standard output = { "scalarType": "float32" } }, - "binding": {"kind": "uniform", "offset": 32, "size": 8} + "binding": {"kind": "uniform", "offset": 32, "size": 8, "elementStride": 4} } ] }, @@ -98,7 +98,7 @@ standard output = { "scalarType": "float32" } }, - "binding": {"kind": "uniform", "offset": 0, "size": 12} + "binding": {"kind": "uniform", "offset": 0, "size": 12, "elementStride": 4} }, { "name": "vertexCB", @@ -106,7 +106,7 @@ standard output = { "kind": "scalar", "scalarType": "float32" }, - "binding": {"kind": "uniform", "offset": 12, "size": 4} + "binding": {"kind": "uniform", "offset": 12, "size": 4, "elementStride": 0} }, { "name": "vertexCC", @@ -118,7 +118,7 @@ standard output = { "scalarType": "float32" } }, - "binding": {"kind": "uniform", "offset": 16, "size": 12} + "binding": {"kind": "uniform", "offset": 16, "size": 12, "elementStride": 4} }, { "name": "vertexCD", @@ -130,11 +130,11 @@ standard output = { "scalarType": "float32" } }, - "binding": {"kind": "uniform", "offset": 32, "size": 8} + "binding": {"kind": "uniform", "offset": 32, "size": 8, "elementStride": 4} } ] }, - "binding": {"kind": "uniform", "offset": 0, "size": 40} + "binding": {"kind": "uniform", "offset": 0, "size": 40, "elementStride": 0} } } }, @@ -179,7 +179,7 @@ standard output = { "scalarType": "float32" } }, - "binding": {"kind": "uniform", "offset": 0, "size": 12} + "binding": {"kind": "uniform", "offset": 0, "size": 12, "elementStride": 4} }, { "name": "fragmentCB", @@ -187,7 +187,7 @@ standard output = { "kind": "scalar", "scalarType": "float32" }, - "binding": {"kind": "uniform", "offset": 12, "size": 4} + "binding": {"kind": "uniform", "offset": 12, "size": 4, "elementStride": 0} }, { "name": "fragmentCC", @@ -199,7 +199,7 @@ standard output = { "scalarType": "float32" } }, - "binding": {"kind": "uniform", "offset": 16, "size": 12} + "binding": {"kind": "uniform", "offset": 16, "size": 12, "elementStride": 4} }, { "name": "fragmentCD", @@ -211,7 +211,7 @@ standard output = { "scalarType": "float32" } }, - "binding": {"kind": "uniform", "offset": 32, "size": 8} + "binding": {"kind": "uniform", "offset": 32, "size": 8, "elementStride": 4} } ] }, @@ -232,7 +232,7 @@ standard output = { "scalarType": "float32" } }, - "binding": {"kind": "uniform", "offset": 0, "size": 12} + "binding": {"kind": "uniform", "offset": 0, "size": 12, "elementStride": 4} }, { "name": "fragmentCB", @@ -240,7 +240,7 @@ standard output = { "kind": "scalar", "scalarType": "float32" }, - "binding": {"kind": "uniform", "offset": 12, "size": 4} + "binding": {"kind": "uniform", "offset": 12, "size": 4, "elementStride": 0} }, { "name": "fragmentCC", @@ -252,7 +252,7 @@ standard output = { "scalarType": "float32" } }, - "binding": {"kind": "uniform", "offset": 16, "size": 12} + "binding": {"kind": "uniform", "offset": 16, "size": 12, "elementStride": 4} }, { "name": "fragmentCD", @@ -264,11 +264,11 @@ standard output = { "scalarType": "float32" } }, - "binding": {"kind": "uniform", "offset": 32, "size": 8} + "binding": {"kind": "uniform", "offset": 32, "size": 8, "elementStride": 4} } ] }, - "binding": {"kind": "uniform", "offset": 0, "size": 40} + "binding": {"kind": "uniform", "offset": 0, "size": 40, "elementStride": 0} } } }, @@ -313,7 +313,7 @@ standard output = { "scalarType": "float32" } }, - "binding": {"kind": "uniform", "offset": 0, "size": 12} + "binding": {"kind": "uniform", "offset": 0, "size": 12, "elementStride": 4} }, { "name": "sharedCB", @@ -321,7 +321,7 @@ standard output = { "kind": "scalar", "scalarType": "float32" }, - "binding": {"kind": "uniform", "offset": 12, "size": 4} + "binding": {"kind": "uniform", "offset": 12, "size": 4, "elementStride": 0} }, { "name": "sharedCC", @@ -333,7 +333,7 @@ standard output = { "scalarType": "float32" } }, - "binding": {"kind": "uniform", "offset": 16, "size": 12} + "binding": {"kind": "uniform", "offset": 16, "size": 12, "elementStride": 4} }, { "name": "sharedCD", @@ -345,7 +345,7 @@ standard output = { "scalarType": "float32" } }, - "binding": {"kind": "uniform", "offset": 32, "size": 8} + "binding": {"kind": "uniform", "offset": 32, "size": 8, "elementStride": 4} } ] }, @@ -366,7 +366,7 @@ standard output = { "scalarType": "float32" } }, - "binding": {"kind": "uniform", "offset": 0, "size": 12} + "binding": {"kind": "uniform", "offset": 0, "size": 12, "elementStride": 4} }, { "name": "sharedCB", @@ -374,7 +374,7 @@ standard output = { "kind": "scalar", "scalarType": "float32" }, - "binding": {"kind": "uniform", "offset": 12, "size": 4} + "binding": {"kind": "uniform", "offset": 12, "size": 4, "elementStride": 0} }, { "name": "sharedCC", @@ -386,7 +386,7 @@ standard output = { "scalarType": "float32" } }, - "binding": {"kind": "uniform", "offset": 16, "size": 12} + "binding": {"kind": "uniform", "offset": 16, "size": 12, "elementStride": 4} }, { "name": "sharedCD", @@ -398,11 +398,11 @@ standard output = { "scalarType": "float32" } }, - "binding": {"kind": "uniform", "offset": 32, "size": 8} + "binding": {"kind": "uniform", "offset": 32, "size": 8, "elementStride": 4} } ] }, - "binding": {"kind": "uniform", "offset": 0, "size": 40} + "binding": {"kind": "uniform", "offset": 0, "size": 40, "elementStride": 0} } } }, -- cgit v1.2.3