diff options
| author | Harsh Aggarwal (NVIDIA) <haaggarwal@nvidia.com> | 2025-08-01 14:48:53 +0530 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-08-01 09:18:53 +0000 |
| commit | bdda8a90cdd44ca822b21233ac988f92d1f20826 (patch) | |
| tree | 4f628776a047b2719aee676287b3adc9d4f68f7a /tests/cross-compile | |
| parent | 7a133445ef82232a6961c25d09b79f45cd92e709 (diff) | |
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
Diffstat (limited to 'tests/cross-compile')
| -rw-r--r-- | tests/cross-compile/cpp-resource-reflection.slang.32.expected | 40 | ||||
| -rw-r--r-- | tests/cross-compile/cpp-resource-reflection.slang.64.expected | 40 |
2 files changed, 40 insertions, 40 deletions
diff --git a/tests/cross-compile/cpp-resource-reflection.slang.32.expected b/tests/cross-compile/cpp-resource-reflection.slang.32.expected index 58deecf89..f889df6f9 100644 --- a/tests/cross-compile/cpp-resource-reflection.slang.32.expected +++ b/tests/cross-compile/cpp-resource-reflection.slang.32.expected @@ -6,7 +6,7 @@ standard output = { "parameters": [ { "name": "thing3", - "binding": {"kind": "uniform", "offset": 0, "size": 4}, + "binding": {"kind": "uniform", "offset": 0, "size": 4, "elementStride": 0}, "type": { "kind": "constantBuffer", "elementType": { @@ -19,7 +19,7 @@ standard output = { "kind": "scalar", "scalarType": "int32" }, - "binding": {"kind": "uniform", "offset": 0, "size": 4} + "binding": {"kind": "uniform", "offset": 0, "size": 4, "elementStride": 0} }, { "name": "b", @@ -27,7 +27,7 @@ standard output = { "kind": "scalar", "scalarType": "float32" }, - "binding": {"kind": "uniform", "offset": 4, "size": 4} + "binding": {"kind": "uniform", "offset": 4, "size": 4, "elementStride": 0} }, { "name": "c", @@ -35,12 +35,12 @@ standard output = { "kind": "scalar", "scalarType": "float32" }, - "binding": {"kind": "uniform", "offset": 8, "size": 4} + "binding": {"kind": "uniform", "offset": 8, "size": 4, "elementStride": 0} } ] }, "containerVarLayout": { - "binding": {"kind": "uniform", "offset": 0, "size": 4} + "binding": {"kind": "uniform", "offset": 0, "size": 4, "elementStride": 0} }, "elementVarLayout": { "type": { @@ -53,7 +53,7 @@ standard output = { "kind": "scalar", "scalarType": "int32" }, - "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": "float32" }, - "binding": {"kind": "uniform", "offset": 4, "size": 4} + "binding": {"kind": "uniform", "offset": 4, "size": 4, "elementStride": 0} }, { "name": "c", @@ -69,17 +69,17 @@ standard output = { "kind": "scalar", "scalarType": "float32" }, - "binding": {"kind": "uniform", "offset": 8, "size": 4} + "binding": {"kind": "uniform", "offset": 8, "size": 4, "elementStride": 0} } ] }, - "binding": {"kind": "uniform", "offset": 0, "size": 12} + "binding": {"kind": "uniform", "offset": 0, "size": 12, "elementStride": 0} } } }, { "name": "outputBuffer", - "binding": {"kind": "uniform", "offset": 4, "size": 8}, + "binding": {"kind": "uniform", "offset": 4, "size": 8, "elementStride": 0}, "type": { "kind": "resource", "baseShape": "structuredBuffer", @@ -92,7 +92,7 @@ standard output = { }, { "name": "tex", - "binding": {"kind": "uniform", "offset": 12, "size": 4}, + "binding": {"kind": "uniform", "offset": 12, "size": 4, "elementStride": 0}, "type": { "kind": "resource", "baseShape": "texture2D" @@ -100,7 +100,7 @@ standard output = { }, { "name": "sampler", - "binding": {"kind": "uniform", "offset": 16, "size": 4}, + "binding": {"kind": "uniform", "offset": 16, "size": 4, "elementStride": 0}, "type": { "kind": "samplerState" } @@ -125,7 +125,7 @@ standard output = { }, { "name": "thing", - "binding": {"kind": "uniform", "offset": 0, "size": 12}, + "binding": {"kind": "uniform", "offset": 0, "size": 12, "elementStride": 0}, "type": { "kind": "struct", "name": "Thing", @@ -136,7 +136,7 @@ standard output = { "kind": "scalar", "scalarType": "int32" }, - "binding": {"kind": "uniform", "offset": 0, "size": 4} + "binding": {"kind": "uniform", "offset": 0, "size": 4, "elementStride": 0} }, { "name": "b", @@ -144,7 +144,7 @@ standard output = { "kind": "scalar", "scalarType": "float32" }, - "binding": {"kind": "uniform", "offset": 4, "size": 4} + "binding": {"kind": "uniform", "offset": 4, "size": 4, "elementStride": 0} }, { "name": "c", @@ -152,14 +152,14 @@ standard output = { "kind": "scalar", "scalarType": "float32" }, - "binding": {"kind": "uniform", "offset": 8, "size": 4} + "binding": {"kind": "uniform", "offset": 8, "size": 4, "elementStride": 0} } ] } }, { "name": "thing2", - "binding": {"kind": "uniform", "offset": 12, "size": 12}, + "binding": {"kind": "uniform", "offset": 12, "size": 12, "elementStride": 0}, "type": { "kind": "struct", "name": "Thing", @@ -170,7 +170,7 @@ standard output = { "kind": "scalar", "scalarType": "int32" }, - "binding": {"kind": "uniform", "offset": 0, "size": 4} + "binding": {"kind": "uniform", "offset": 0, "size": 4, "elementStride": 0} }, { "name": "b", @@ -178,7 +178,7 @@ standard output = { "kind": "scalar", "scalarType": "float32" }, - "binding": {"kind": "uniform", "offset": 4, "size": 4} + "binding": {"kind": "uniform", "offset": 4, "size": 4, "elementStride": 0} }, { "name": "c", @@ -186,7 +186,7 @@ standard output = { "kind": "scalar", "scalarType": "float32" }, - "binding": {"kind": "uniform", "offset": 8, "size": 4} + "binding": {"kind": "uniform", "offset": 8, "size": 4, "elementStride": 0} } ] } diff --git a/tests/cross-compile/cpp-resource-reflection.slang.64.expected b/tests/cross-compile/cpp-resource-reflection.slang.64.expected index 4ded43e3e..7499756d2 100644 --- a/tests/cross-compile/cpp-resource-reflection.slang.64.expected +++ b/tests/cross-compile/cpp-resource-reflection.slang.64.expected @@ -6,7 +6,7 @@ standard output = { "parameters": [ { "name": "thing3", - "binding": {"kind": "uniform", "offset": 0, "size": 8}, + "binding": {"kind": "uniform", "offset": 0, "size": 8, "elementStride": 0}, "type": { "kind": "constantBuffer", "elementType": { @@ -19,7 +19,7 @@ standard output = { "kind": "scalar", "scalarType": "int32" }, - "binding": {"kind": "uniform", "offset": 0, "size": 4} + "binding": {"kind": "uniform", "offset": 0, "size": 4, "elementStride": 0} }, { "name": "b", @@ -27,7 +27,7 @@ standard output = { "kind": "scalar", "scalarType": "float32" }, - "binding": {"kind": "uniform", "offset": 4, "size": 4} + "binding": {"kind": "uniform", "offset": 4, "size": 4, "elementStride": 0} }, { "name": "c", @@ -35,12 +35,12 @@ standard output = { "kind": "scalar", "scalarType": "float32" }, - "binding": {"kind": "uniform", "offset": 8, "size": 4} + "binding": {"kind": "uniform", "offset": 8, "size": 4, "elementStride": 0} } ] }, "containerVarLayout": { - "binding": {"kind": "uniform", "offset": 0, "size": 8} + "binding": {"kind": "uniform", "offset": 0, "size": 8, "elementStride": 0} }, "elementVarLayout": { "type": { @@ -53,7 +53,7 @@ standard output = { "kind": "scalar", "scalarType": "int32" }, - "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": "float32" }, - "binding": {"kind": "uniform", "offset": 4, "size": 4} + "binding": {"kind": "uniform", "offset": 4, "size": 4, "elementStride": 0} }, { "name": "c", @@ -69,17 +69,17 @@ standard output = { "kind": "scalar", "scalarType": "float32" }, - "binding": {"kind": "uniform", "offset": 8, "size": 4} + "binding": {"kind": "uniform", "offset": 8, "size": 4, "elementStride": 0} } ] }, - "binding": {"kind": "uniform", "offset": 0, "size": 12} + "binding": {"kind": "uniform", "offset": 0, "size": 12, "elementStride": 0} } } }, { "name": "outputBuffer", - "binding": {"kind": "uniform", "offset": 8, "size": 16}, + "binding": {"kind": "uniform", "offset": 8, "size": 16, "elementStride": 0}, "type": { "kind": "resource", "baseShape": "structuredBuffer", @@ -92,7 +92,7 @@ standard output = { }, { "name": "tex", - "binding": {"kind": "uniform", "offset": 24, "size": 8}, + "binding": {"kind": "uniform", "offset": 24, "size": 8, "elementStride": 0}, "type": { "kind": "resource", "baseShape": "texture2D", @@ -104,7 +104,7 @@ standard output = { }, { "name": "sampler", - "binding": {"kind": "uniform", "offset": 32, "size": 8}, + "binding": {"kind": "uniform", "offset": 32, "size": 8, "elementStride": 0}, "type": { "kind": "samplerState" } @@ -129,7 +129,7 @@ standard output = { }, { "name": "thing", - "binding": {"kind": "uniform", "offset": 0, "size": 12}, + "binding": {"kind": "uniform", "offset": 0, "size": 12, "elementStride": 0}, "type": { "kind": "struct", "name": "Thing", @@ -140,7 +140,7 @@ standard output = { "kind": "scalar", "scalarType": "int32" }, - "binding": {"kind": "uniform", "offset": 0, "size": 4} + "binding": {"kind": "uniform", "offset": 0, "size": 4, "elementStride": 0} }, { "name": "b", @@ -148,7 +148,7 @@ standard output = { "kind": "scalar", "scalarType": "float32" }, - "binding": {"kind": "uniform", "offset": 4, "size": 4} + "binding": {"kind": "uniform", "offset": 4, "size": 4, "elementStride": 0} }, { "name": "c", @@ -156,14 +156,14 @@ standard output = { "kind": "scalar", "scalarType": "float32" }, - "binding": {"kind": "uniform", "offset": 8, "size": 4} + "binding": {"kind": "uniform", "offset": 8, "size": 4, "elementStride": 0} } ] } }, { "name": "thing2", - "binding": {"kind": "uniform", "offset": 12, "size": 12}, + "binding": {"kind": "uniform", "offset": 12, "size": 12, "elementStride": 0}, "type": { "kind": "struct", "name": "Thing", @@ -174,7 +174,7 @@ standard output = { "kind": "scalar", "scalarType": "int32" }, - "binding": {"kind": "uniform", "offset": 0, "size": 4} + "binding": {"kind": "uniform", "offset": 0, "size": 4, "elementStride": 0} }, { "name": "b", @@ -182,7 +182,7 @@ standard output = { "kind": "scalar", "scalarType": "float32" }, - "binding": {"kind": "uniform", "offset": 4, "size": 4} + "binding": {"kind": "uniform", "offset": 4, "size": 4, "elementStride": 0} }, { "name": "c", @@ -190,7 +190,7 @@ standard output = { "kind": "scalar", "scalarType": "float32" }, - "binding": {"kind": "uniform", "offset": 8, "size": 4} + "binding": {"kind": "uniform", "offset": 8, "size": 4, "elementStride": 0} } ] } |
