From 75d65d36608cf4653490f0a04a17d1ee057b47a6 Mon Sep 17 00:00:00 2001 From: Yong He Date: Mon, 18 Nov 2024 15:21:13 -0800 Subject: [PATCH] Remove "GL_EXT_samplerless_texture_functions" from combined sampler functions. (#5585) --- source/slang/hlsl.meta.slang | 41 +++++++++++++++++++++------------- tests/glsl/sampler-fetch.slang | 20 +++++++++++++++++ 2 files changed, 46 insertions(+), 15 deletions(-) create mode 100644 tests/glsl/sampler-fetch.slang diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang index 90b2a17b93..babb1ae20e 100644 --- a/source/slang/hlsl.meta.slang +++ b/source/slang/hlsl.meta.slang @@ -3029,7 +3029,6 @@ extension _Texture static const int isMS = 0; static const int access = $(kCoreModule_ResourceAccessReadOnly); //@public: - __glsl_extension(GL_EXT_samplerless_texture_functions) [__readNone] [require(glsl, texture_sm_4_1_samplerless)] T __glsl_load(vector location) @@ -3037,7 +3036,6 @@ extension _Texture __intrinsic_asm "$ctexelFetch($0, ($1), 0)$z"; } - __glsl_extension(GL_EXT_samplerless_texture_functions) [__readNone] [ForceInline] [require(cpp_glsl_hlsl_metal_spirv_wgsl, texture_sm_4_1_samplerless)] @@ -3110,6 +3108,8 @@ extension _Texture static_assert(false, "Unsupported 'Load' of 'texture' for 'metal' target"); __intrinsic_asm ""; case glsl: + if (isCombined == 0) + __requireGLSLExtension("GL_EXT_samplerless_texture_functions"); __intrinsic_asm "$ctexelFetch($0, ($1).$w1b, ($1).$w1e)$z"; case spirv: const int lodLoc = Shape.dimensions+isArray; @@ -3161,7 +3161,6 @@ extension _Texture } } - __glsl_extension(GL_EXT_samplerless_texture_functions) [__readNone] [ForceInline] [require(cpp_glsl_hlsl_spirv, texture_sm_4_1_samplerless)] @@ -3171,9 +3170,11 @@ extension _Texture { case cpp: case hlsl: - __intrinsic_asm ".Load"; + __intrinsic_asm ".Load"; case glsl: - __intrinsic_asm "$ctexelFetchOffset($0, ($1).$w1b, ($1).$w1e, ($2))$z"; + if (isCombined == 0) + __requireGLSLExtension("GL_EXT_samplerless_texture_functions"); + __intrinsic_asm "$ctexelFetchOffset($0, ($1).$w1b, ($1).$w1e, ($2))$z"; case spirv: const int lodLoc = Shape.dimensions+isArray; let coord = __vectorReshape(location); @@ -3214,7 +3215,6 @@ extension _Texture __subscript(vector location) -> T { - __glsl_extension(GL_EXT_samplerless_texture_functions) [__readNone] [ForceInline] [require(cpp_glsl_hlsl_metal_spirv_wgsl, texture_sm_4_1_samplerless)] @@ -3228,6 +3228,8 @@ extension _Texture case metal: return Load(__makeVector(location, 0)); case glsl: + if (isCombined == 0) + __requireGLSLExtension("GL_EXT_samplerless_texture_functions"); return __glsl_load(location); case spirv: if (isCombined != 0) @@ -3263,7 +3265,6 @@ extension _Texture static const int access = $(kCoreModule_ResourceAccessReadOnly); static const int isMS = 1; //@public: - __glsl_extension(GL_EXT_samplerless_texture_functions) [__readNone] [ForceInline] [require(cpp_glsl_hlsl_metal_spirv_wgsl, texture_sm_4_1_samplerless)] @@ -3303,6 +3304,8 @@ extension _Texture // TODO: This needs to be handled by the capability system __intrinsic_asm ""; case glsl: + if (isCombined == 0) + __requireGLSLExtension("GL_EXT_samplerless_texture_functions"); __intrinsic_asm "$ctexelFetch($0, $1, ($2))$z"; case spirv: if (isCombined != 0) @@ -3340,7 +3343,6 @@ extension _Texture return Load(__vectorReshape(locationAndSampleIndex), locationAndSampleIndex[Shape.dimensions + isArray]); } - __glsl_extension(GL_EXT_samplerless_texture_functions) [__readNone] [ForceInline] [require(cpp_glsl_hlsl_spirv, texture_sm_4_1_samplerless)] @@ -3352,6 +3354,8 @@ extension _Texture case hlsl: __intrinsic_asm ".Load"; case glsl: + if (isCombined == 0) + __requireGLSLExtension("GL_EXT_samplerless_texture_functions"); __intrinsic_asm "$ctexelFetchOffset($0, $1, ($2), ($3))$z"; case spirv: if (isCombined != 0) @@ -3390,7 +3394,6 @@ extension _Texture __subscript(vector location) -> T { - __glsl_extension(GL_EXT_samplerless_texture_functions) [__readNone] [ForceInline] [require(cpp_glsl_hlsl_metal_spirv_wgsl, texture_sm_4_1_samplerless)] @@ -3402,16 +3405,18 @@ extension _Texture case hlsl: __intrinsic_asm "($0).sample[$1]"; case metal: - case glsl: case spirv: case wgsl: return Load(location, 0); + case glsl: + if (isCombined == 0) + __requireGLSLExtension("GL_EXT_samplerless_texture_functions"); + return Load(location, 0); } } } __subscript(vector location, int sampleIndex) -> T { - __glsl_extension(GL_EXT_samplerless_texture_functions) [__readNone] [ForceInline] [require(cpp_glsl_hlsl_metal_spirv_wgsl, texture_sm_4_1_samplerless)] @@ -3423,10 +3428,13 @@ extension _Texture case hlsl: __intrinsic_asm "($0).sample[$2][$1]"; case metal: - case glsl: case spirv: case wgsl: return Load(location, sampleIndex); + case glsl: + if (isCombined == 0) + __requireGLSLExtension("GL_EXT_samplerless_texture_functions"); + return Load(location, sampleIndex); } } } @@ -15027,7 +15035,9 @@ extension _Texture __target_switch { case hlsl: __intrinsic_asm ".GetDimensions"; - case glsl: __intrinsic_asm "($1 = $(glslTextureSizeFunc)($0))"; + case glsl: + __requireGLSLExtension("GL_EXT_samplerless_texture_functions"); + __intrinsic_asm "($1 = $(glslTextureSizeFunc)($0))"; case metal: __intrinsic_asm "(*($1) = $0.get_width())"; case spirv: dim = spirv_asm { @@ -15037,7 +15047,6 @@ extension _Texture } } - __glsl_extension(GL_EXT_samplerless_texture_functions) $(isReadOnly?"[__readNone] ":"") $(requireToSet) T Load(int location) @@ -15046,7 +15055,9 @@ extension _Texture { case hlsl: __intrinsic_asm ".Load"; case metal: __intrinsic_asm "$c$0.read(uint($1))$z"; - case glsl: __intrinsic_asm "$(glslLoadFuncName)($0, $1)$z"; + case glsl: + __requireGLSLExtension("GL_EXT_samplerless_texture_functions"); + __intrinsic_asm "$(glslLoadFuncName)($0, $1)$z"; case spirv: return spirv_asm { %sampled:__sampledType(T) = $(spvLoadInstName) $this $location; __truncate $$T result __sampledType(T) %sampled; diff --git a/tests/glsl/sampler-fetch.slang b/tests/glsl/sampler-fetch.slang new file mode 100644 index 0000000000..6d6f98cd72 --- /dev/null +++ b/tests/glsl/sampler-fetch.slang @@ -0,0 +1,20 @@ +//TEST:SIMPLE(filecheck=CHECK): -target glsl -stage compute -entry testMain +//TEST:SIMPLE(filecheck=SPV): -target spirv -stage compute -entry testMain -emit-spirv-via-glsl + +// We shouldn't be using GL_EXT_samplerless_texture_functions extension. +// CHECK-NOT: GL_EXT_samplerless_texture_functions + +// SPV: OpImageFetch + +Sampler2D sampler; + +RWStructuredBuffer outputBuffer; + +[NumThreads(1,1,1)] +void testMain() +{ + uint w, h, l; + sampler.GetDimensions(0, w, h, l); + var result = sampler.Load(int3(1,1,1), int2(1,2)); + outputBuffer[0] = result + float(w); +} \ No newline at end of file