diff options
| -rw-r--r-- | source/slang/hlsl.meta.slang | 20 | ||||
| -rw-r--r-- | tests/bugs/gh-4200.slang | 17 |
2 files changed, 37 insertions, 0 deletions
diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang index 11470212a..e1dc8a59a 100644 --- a/source/slang/hlsl.meta.slang +++ b/source/slang/hlsl.meta.slang @@ -2564,6 +2564,26 @@ extension __TextureImpl<T,Shape,isArray,1,sampleCount,0,isShadow,isCombined,form } } + __subscript(vector<uint, Shape.dimensions+isArray> location) -> T + { + __glsl_extension(GL_EXT_samplerless_texture_functions) + [__readNone] + [ForceInline] + [require(cpp_glsl_hlsl_metal_spirv, texture_sm_4_1_samplerless)] + get + { + __target_switch + { + case cpp: + case hlsl: + __intrinsic_asm "($0).sample[$1]"; + case metal: + case glsl: + case spirv: + return Load(location, 0); + } + } + } __subscript(vector<uint, Shape.dimensions+isArray> location, int sampleIndex) -> T { __glsl_extension(GL_EXT_samplerless_texture_functions) diff --git a/tests/bugs/gh-4200.slang b/tests/bugs/gh-4200.slang new file mode 100644 index 000000000..e9ea1d34d --- /dev/null +++ b/tests/bugs/gh-4200.slang @@ -0,0 +1,17 @@ +//TEST:SIMPLE(filecheck=CHECK_SPV): -target spirv -emit-spirv-directly -entry computeMain -stage compute +//TEST:SIMPLE(filecheck=CHECK_HLSL): -target hlsl -entry computeMain -stage compute + +//CHECK_SPV: OpEntryPoint +//CHECK_HLSL: computeMain + +Texture2DMS<uint4> Src : register(t1); +RWBuffer<uint4> Dst : register(u2); + +[shader("compute")] +[numthreads(1, 1, 1)] +void computeMain() +{ +// CHECK_SPV: Sample %int_0 +// CHECK_HLSL: [{{.*}}1{{.*}}] + Dst[0] = Src[int2(1)]; +}
\ No newline at end of file |
