From 80ddf40274fdca93f2ae95a247ff3af122aec6ac Mon Sep 17 00:00:00 2001 From: "James Helferty (NVIDIA)" Date: Wed, 27 Aug 2025 20:08:54 -0700 Subject: Add SPIRV OpCapability for 8/16bit use in storage (#8194) Emits the appropriate OpCapability for 8- and 16-bit type usage: - UniformAndStorageBuffer8BitAccess: for 16-bit types in SpvStorageClassUniform and SpvStorageClassStorageBuffer - UniformAndStorageBuffer16BitAccess: for 16-bit types in SpvStorageClassUniform and SpvStorageClassStorageBuffer - StoragePushConstant8: for 8-bit types in SpvStorageClassPushConstant - StoragePushConstant16: for 16-bit types in SpvStorageClassPushConstant - StorageInputOutput16: for 16-bit types in SpvStorageClassInput and SpvStorageClassOutput Generated with Claude Code, with revisions. Fixes #7879. --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: James Helferty (NVIDIA) Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com> --- tests/spirv/capability-storage-push-constant.slang | 35 ++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 tests/spirv/capability-storage-push-constant.slang (limited to 'tests/spirv/capability-storage-push-constant.slang') diff --git a/tests/spirv/capability-storage-push-constant.slang b/tests/spirv/capability-storage-push-constant.slang new file mode 100644 index 000000000..6cb540da9 --- /dev/null +++ b/tests/spirv/capability-storage-push-constant.slang @@ -0,0 +1,35 @@ +//TEST:SIMPLE(filecheck=CHECK8): -target spirv -profile spirv_1_3 -DCONST_UINT8 +//TEST:SIMPLE(filecheck=CHECK16): -target spirv -profile spirv_1_3 -DCONST_UINT16 +//TEST:SIMPLE(filecheck=CHECK16): -target spirv -profile spirv_1_3 -DCONST_HALF +//TEST:SIMPLE(filecheck=CHECKBOTH): -target spirv -profile spirv_1_3 -DCONST_UINT8 -DCONST_HALF +//TEST:SIMPLE(filecheck=CHECK): -target spirv -profile spirv_1_3 + +//CHECK8: OpCapability StoragePushConstant8 +//CHECK16: OpCapability StoragePushConstant16 +//CHECKBOTH-DAG: OpCapability StoragePushConstant8 +//CHECKBOTH-DAG: OpCapability StoragePushConstant16 +//CHECK-NOT: OpCapability StoragePushConstant16 + +struct PushConstants { +#if defined(CONST_HALF) + half4 color; +#else + float4 color; +#endif +#if defined(CONST_UINT8) + int8_t index; +#elif defined(CONST_UINT16) + int16_t index; +#else + int32_t index; +#endif +}; + +[[vk::push_constant]] +PushConstants pushConstants; + +[shader("vertex")] +float4 vertexMain() : SV_POSITION +{ + return float4(pushConstants.color); +} -- cgit v1.2.3