From b0e150511a6a536c8ad9e74910b30ae179a10ec9 Mon Sep 17 00:00:00 2001 From: Mukund Keshava Date: Wed, 30 Apr 2025 16:07:02 +0530 Subject: Add subscript operator support in cuda (#6830) * cuda: Add support for subscript operator This CL adds support for the subscript operator for Read Only textures in cuda. Also adds a test for this. Fixes #6781 * format code * fix review comments * format code --------- Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com> Co-authored-by: Ellie Hermaszewska --- source/slang/hlsl.meta.slang | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) (limited to 'source') diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang index 44b9a8860..a6e1196e3 100644 --- a/source/slang/hlsl.meta.slang +++ b/source/slang/hlsl.meta.slang @@ -3610,7 +3610,7 @@ extension _Texture //@public: [__readNone] [ForceInline] - [require(cpp_glsl_hlsl_metal_spirv_wgsl, texture_sm_4_1_samplerless)] + [require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, texture_sm_4_1_samplerless)] T Load(vector location) { __target_switch @@ -3618,6 +3618,34 @@ extension _Texture case cpp: case hlsl: __intrinsic_asm ".Load"; + case cuda: + if (isArray != 0) + { + static_assert(Shape.flavor == $(SLANG_TEXTURE_2D) || Shape.flavor == $(SLANG_TEXTURE_3D), + "Integer coordinates are supported for texture reads only for 2D and 3D textures and 2D array textures."); + + if (Shape.flavor == $(SLANG_TEXTURE_2D)) + { + __intrinsic_asm "tex2DArrayfetch_int<$T0>($0, ($1).x, ($1).y, ($1).z)"; + } + else + { + __intrinsic_asm ""; + } + } + else + { + switch(Shape.flavor) + { + case $(SLANG_TEXTURE_2D): + __intrinsic_asm "tex2Dfetch_int<$T0>($0, ($1).x, ($1).y)"; + case $(SLANG_TEXTURE_3D): + __intrinsic_asm "tex3Dfetch_int<$T0>($0, ($1).x, ($1).y, ($1).z)"; + case $(SLANG_TEXTURE_CUBE): + default: + __intrinsic_asm ""; + } + } case metal: switch (Shape.flavor) { @@ -3824,7 +3852,7 @@ extension _Texture { [__readNone] [ForceInline] - [require(cpp_glsl_hlsl_metal_spirv_wgsl, texture_sm_4_1_samplerless)] + [require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, texture_sm_4_1_samplerless)] get { __target_switch @@ -3833,6 +3861,7 @@ extension _Texture case hlsl: __intrinsic_asm ".operator[]"; case metal: + case cuda: return Load(__makeVector(location, 0)); case glsl: if (isCombined == 0) -- cgit v1.2.3