diff --git a/Test/150.frag b/Test/150.frag index f27b8eb1..c8c4cf04 100644 --- a/Test/150.frag +++ b/Test/150.frag @@ -99,3 +99,58 @@ void packingFail() { uint u19 = packSnorm2x16(v2a); // Error, extension GL_ARB_shading_language_packing is disabled } + +// Testing extension GL_ARB_texture_query_lod +uniform sampler1D samp1D; +uniform sampler2DShadow samp2Ds; + +void qlodFail() +{ + vec2 lod; + float pf; + vec2 pf2; + vec3 pf3; + + lod = textureQueryLod(samp1D, pf); // ERROR, extension GL_ARB_texture_query_lod needed + lod = textureQueryLod(samp2Ds, pf2); // ERROR, extension GL_ARB_texture_query_lod needed +} + +#extension GL_ARB_texture_query_lod : enable + +uniform isampler2D isamp2D; +uniform usampler3D usamp3D; +uniform samplerCube sampCube; +uniform isampler1DArray isamp1DA; +uniform usampler2DArray usamp2DA; + +uniform sampler1DShadow samp1Ds; +uniform samplerCubeShadow sampCubes; +uniform sampler1DArrayShadow samp1DAs; +uniform sampler2DArrayShadow samp2DAs; + +uniform samplerBuffer sampBuf; +uniform sampler2DRect sampRect; + +void qlodPass() +{ + vec2 lod; + float pf; + vec2 pf2; + vec3 pf3; + + lod = textureQueryLod(samp1D, pf); + lod = textureQueryLod(isamp2D, pf2); + lod = textureQueryLod(usamp3D, pf3); + lod = textureQueryLod(sampCube, pf3); + lod = textureQueryLod(isamp1DA, pf); + lod = textureQueryLod(usamp2DA, pf2); + + lod = textureQueryLod(samp1Ds, pf); + lod = textureQueryLod(samp2Ds, pf2); + lod = textureQueryLod(sampCubes, pf3); + lod = textureQueryLod(samp1DAs, pf); + lod = textureQueryLod(samp2DAs, pf2); + + lod = textureQueryLod(sampBuf, pf); // ERROR + lod = textureQueryLod(sampRect, pf2); // ERROR +} diff --git a/Test/330.frag b/Test/330.frag index b37d8de8..364fc0af 100644 --- a/Test/330.frag +++ b/Test/330.frag @@ -126,29 +126,15 @@ layout(location=27, index=0) in vec4 indexIn; // ERROR, not on in layout(location=0, index=0) in; // ERROR, not just on in layout(location=0, index=0) out; // ERROR, need a variable layout(location=26, index=0) out indexBlock { int a; } indexBlockI; // ERROR, not on a block - -uniform sampler1D samp1D; -uniform sampler2DShadow samp2Ds; - -void qlod() -{ - vec2 lod; - float pf; - vec2 pf2; - vec3 pf3; - - lod = textureQueryLod(samp1D, pf); // ERROR, not until 400 - lod = textureQueryLod(samp2Ds, pf2); // ERROR, not until 400 -} - -int precise; // okay, not a keyword yet -struct SKeyMem { int precise; } KeyMem; // okay, not a keyword yet - -void fooKeyMem() -{ - KeyMem.precise; -} - + +int precise; // okay, not a keyword yet +struct SKeyMem { int precise; } KeyMem; // okay, not a keyword yet + +void fooKeyMem() +{ + KeyMem.precise; +} + layout(location=28, index=2) out vec4 outIndex2; // ERROR index out of range layout(location=4) uniform vec4 ucolor0; // ERROR: extension is not enabled diff --git a/Test/baseResults/150.frag.out b/Test/baseResults/150.frag.out index 900b3a93..52e7c328 100644 --- a/Test/baseResults/150.frag.out +++ b/Test/baseResults/150.frag.out @@ -11,13 +11,20 @@ ERROR: 0:53: 'double' : must be qualified as flat in ERROR: 0:57: '=' : cannot convert from ' global double' to ' global int' ERROR: 0:80: 'floatBitsToInt' : required extension not requested: GL_ARB_shader_bit_encoding ERROR: 0:100: 'packSnorm2x16' : required extension not requested: GL_ARB_shading_language_packing -ERROR: 12 compilation errors. No code generated. +ERROR: 0:114: 'textureQueryLod' : required extension not requested: GL_ARB_texture_query_lod +ERROR: 0:115: 'textureQueryLod' : required extension not requested: GL_ARB_texture_query_lod +ERROR: 0:154: 'textureQueryLod' : no matching overloaded function found +ERROR: 0:154: 'assign' : cannot convert from ' const float' to ' temp 2-component vector of float' +ERROR: 0:155: 'textureQueryLod' : no matching overloaded function found +ERROR: 0:155: 'assign' : cannot convert from ' const float' to ' temp 2-component vector of float' +ERROR: 18 compilation errors. No code generated. Shader version: 150 Requested GL_ARB_gpu_shader_fp64 Requested GL_ARB_shader_bit_encoding Requested GL_ARB_shading_language_packing +Requested GL_ARB_texture_query_lod gl_FragCoord pixel center is integer gl_FragCoord origin is upper left ERROR: node is still EOpNull! @@ -210,6 +217,79 @@ ERROR: node is still EOpNull! 0:100 'u19' ( temp uint) 0:100 packSnorm2x16 ( global uint) 0:100 'v2a' ( global 2-component vector of float) +0:107 Function Definition: qlodFail( ( global void) +0:107 Function Parameters: +0:? Sequence +0:114 move second child to first child ( temp 2-component vector of float) +0:114 'lod' ( temp 2-component vector of float) +0:114 textureQueryLod ( global 2-component vector of float) +0:114 'samp1D' ( uniform sampler1D) +0:114 'pf' ( temp float) +0:115 move second child to first child ( temp 2-component vector of float) +0:115 'lod' ( temp 2-component vector of float) +0:115 textureQueryLod ( global 2-component vector of float) +0:115 'samp2Ds' ( uniform sampler2DShadow) +0:115 'pf2' ( temp 2-component vector of float) +0:134 Function Definition: qlodPass( ( global void) +0:134 Function Parameters: +0:? Sequence +0:141 move second child to first child ( temp 2-component vector of float) +0:141 'lod' ( temp 2-component vector of float) +0:141 textureQueryLod ( global 2-component vector of float) +0:141 'samp1D' ( uniform sampler1D) +0:141 'pf' ( temp float) +0:142 move second child to first child ( temp 2-component vector of float) +0:142 'lod' ( temp 2-component vector of float) +0:142 textureQueryLod ( global 2-component vector of float) +0:142 'isamp2D' ( uniform isampler2D) +0:142 'pf2' ( temp 2-component vector of float) +0:143 move second child to first child ( temp 2-component vector of float) +0:143 'lod' ( temp 2-component vector of float) +0:143 textureQueryLod ( global 2-component vector of float) +0:143 'usamp3D' ( uniform usampler3D) +0:143 'pf3' ( temp 3-component vector of float) +0:144 move second child to first child ( temp 2-component vector of float) +0:144 'lod' ( temp 2-component vector of float) +0:144 textureQueryLod ( global 2-component vector of float) +0:144 'sampCube' ( uniform samplerCube) +0:144 'pf3' ( temp 3-component vector of float) +0:145 move second child to first child ( temp 2-component vector of float) +0:145 'lod' ( temp 2-component vector of float) +0:145 textureQueryLod ( global 2-component vector of float) +0:145 'isamp1DA' ( uniform isampler1DArray) +0:145 'pf' ( temp float) +0:146 move second child to first child ( temp 2-component vector of float) +0:146 'lod' ( temp 2-component vector of float) +0:146 textureQueryLod ( global 2-component vector of float) +0:146 'usamp2DA' ( uniform usampler2DArray) +0:146 'pf2' ( temp 2-component vector of float) +0:148 move second child to first child ( temp 2-component vector of float) +0:148 'lod' ( temp 2-component vector of float) +0:148 textureQueryLod ( global 2-component vector of float) +0:148 'samp1Ds' ( uniform sampler1DShadow) +0:148 'pf' ( temp float) +0:149 move second child to first child ( temp 2-component vector of float) +0:149 'lod' ( temp 2-component vector of float) +0:149 textureQueryLod ( global 2-component vector of float) +0:149 'samp2Ds' ( uniform sampler2DShadow) +0:149 'pf2' ( temp 2-component vector of float) +0:150 move second child to first child ( temp 2-component vector of float) +0:150 'lod' ( temp 2-component vector of float) +0:150 textureQueryLod ( global 2-component vector of float) +0:150 'sampCubes' ( uniform samplerCubeShadow) +0:150 'pf3' ( temp 3-component vector of float) +0:151 move second child to first child ( temp 2-component vector of float) +0:151 'lod' ( temp 2-component vector of float) +0:151 textureQueryLod ( global 2-component vector of float) +0:151 'samp1DAs' ( uniform sampler1DArrayShadow) +0:151 'pf' ( temp float) +0:152 move second child to first child ( temp 2-component vector of float) +0:152 'lod' ( temp 2-component vector of float) +0:152 textureQueryLod ( global 2-component vector of float) +0:152 'samp2DAs' ( uniform sampler2DArrayShadow) +0:152 'pf2' ( temp 2-component vector of float) +0:154 'lod' ( temp 2-component vector of float) +0:155 'lod' ( temp 2-component vector of float) 0:? Linker Objects 0:? 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) 0:? 'foo' ( smooth in 4-component vector of float) @@ -237,6 +317,19 @@ ERROR: node is still EOpNull! 0:? 'uv2c' ( global 2-component vector of uint) 0:? 'v2a' ( global 2-component vector of float) 0:? 'uy' ( global uint) +0:? 'samp1D' ( uniform sampler1D) +0:? 'samp2Ds' ( uniform sampler2DShadow) +0:? 'isamp2D' ( uniform isampler2D) +0:? 'usamp3D' ( uniform usampler3D) +0:? 'sampCube' ( uniform samplerCube) +0:? 'isamp1DA' ( uniform isampler1DArray) +0:? 'usamp2DA' ( uniform usampler2DArray) +0:? 'samp1Ds' ( uniform sampler1DShadow) +0:? 'sampCubes' ( uniform samplerCubeShadow) +0:? 'samp1DAs' ( uniform sampler1DArrayShadow) +0:? 'samp2DAs' ( uniform sampler2DArrayShadow) +0:? 'sampBuf' ( uniform samplerBuffer) +0:? 'sampRect' ( uniform sampler2DRect) Linked fragment stage: @@ -246,6 +339,7 @@ Shader version: 150 Requested GL_ARB_gpu_shader_fp64 Requested GL_ARB_shader_bit_encoding Requested GL_ARB_shading_language_packing +Requested GL_ARB_texture_query_lod gl_FragCoord pixel center is integer gl_FragCoord origin is upper left ERROR: node is still EOpNull! @@ -308,4 +402,17 @@ ERROR: node is still EOpNull! 0:? 'uv2c' ( global 2-component vector of uint) 0:? 'v2a' ( global 2-component vector of float) 0:? 'uy' ( global uint) +0:? 'samp1D' ( uniform sampler1D) +0:? 'samp2Ds' ( uniform sampler2DShadow) +0:? 'isamp2D' ( uniform isampler2D) +0:? 'usamp3D' ( uniform usampler3D) +0:? 'sampCube' ( uniform samplerCube) +0:? 'isamp1DA' ( uniform isampler1DArray) +0:? 'usamp2DA' ( uniform usampler2DArray) +0:? 'samp1Ds' ( uniform sampler1DShadow) +0:? 'sampCubes' ( uniform samplerCubeShadow) +0:? 'samp1DAs' ( uniform sampler1DArrayShadow) +0:? 'samp2DAs' ( uniform sampler2DArrayShadow) +0:? 'sampBuf' ( uniform samplerBuffer) +0:? 'sampRect' ( uniform sampler2DRect) diff --git a/Test/baseResults/330.frag.out b/Test/baseResults/330.frag.out index bb2770f5..e919b5b9 100644 --- a/Test/baseResults/330.frag.out +++ b/Test/baseResults/330.frag.out @@ -35,14 +35,10 @@ ERROR: 0:126: 'index' : can only be used on an output ERROR: 0:126: 'location/component/index' : cannot declare a default, use a full declaration ERROR: 0:127: 'location/component/index' : cannot declare a default, use a full declaration ERROR: 0:128: 'output block' : not supported in this stage: fragment -ERROR: 0:140: 'textureQueryLod' : no matching overloaded function found -ERROR: 0:140: 'assign' : cannot convert from ' const float' to ' temp 2-component vector of float' -ERROR: 0:141: 'textureQueryLod' : no matching overloaded function found -ERROR: 0:141: 'assign' : cannot convert from ' const float' to ' temp 2-component vector of float' -ERROR: 0:152: 'index' : value must be 0 or 1 -ERROR: 0:154: 'location qualifier on uniform or buffer' : not supported for this version or the enabled extensions -ERROR: 0:160: 'location' : cannot apply to uniform or buffer block -ERROR: 43 compilation errors. No code generated. +ERROR: 0:138: 'index' : value must be 0 or 1 +ERROR: 0:140: 'location qualifier on uniform or buffer' : not supported for this version or the enabled extensions +ERROR: 0:146: 'location' : cannot apply to uniform or buffer block +ERROR: 39 compilation errors. No code generated. Shader version: 330 @@ -80,18 +76,13 @@ ERROR: node is still EOpNull! 0:24 move second child to first child ( temp 4-component vector of float) 0:24 'outVar' (layout( location=0 index=0) out 4-component vector of float) 0:24 'inVar' ( smooth in 4-component vector of float) -0:133 Function Definition: qlod( ( global void) +0:133 Function Definition: fooKeyMem( ( global void) 0:133 Function Parameters: -0:? Sequence -0:140 'lod' ( temp 2-component vector of float) -0:141 'lod' ( temp 2-component vector of float) -0:147 Function Definition: fooKeyMem( ( global void) -0:147 Function Parameters: -0:149 Sequence -0:149 precise: direct index for structure ( global int) -0:149 'KeyMem' ( global structure{ global int precise}) -0:149 Constant: -0:149 0 (const int) +0:135 Sequence +0:135 precise: direct index for structure ( global int) +0:135 'KeyMem' ( global structure{ global int precise}) +0:135 Constant: +0:135 0 (const int) 0:? Linker Objects 0:? 'inVar' ( smooth in 4-component vector of float) 0:? 'outVar' (layout( location=0 index=0) out 4-component vector of float) @@ -124,8 +115,6 @@ ERROR: node is still EOpNull! 0:? 'outVar4' (layout( location=0 index=1) out 4-component vector of float) 0:? 'indexIn' (layout( location=27 index=0) smooth in 4-component vector of float) 0:? 'indexBlockI' (layout( location=26 index=0) out block{ out int a}) -0:? 'samp1D' ( uniform sampler1D) -0:? 'samp2Ds' ( uniform sampler2DShadow) 0:? 'precise' ( global int) 0:? 'KeyMem' ( global structure{ global int precise}) 0:? 'outIndex2' (layout( location=28 index=0) out 4-component vector of float) @@ -193,8 +182,6 @@ ERROR: node is still EOpNull! 0:? 'outVar4' (layout( location=0 index=1) out 4-component vector of float) 0:? 'indexIn' (layout( location=27 index=0) smooth in 4-component vector of float) 0:? 'indexBlockI' (layout( location=26 index=0) out block{ out int a}) -0:? 'samp1D' ( uniform sampler1D) -0:? 'samp2Ds' ( uniform sampler2DShadow) 0:? 'precise' ( global int) 0:? 'KeyMem' ( global structure{ global int precise}) 0:? 'outIndex2' (layout( location=28 index=0) out 4-component vector of float) diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index 74c07cb0..c76c287f 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -5843,9 +5843,9 @@ void TBuiltIns::addQueryFunctions(TSampler sampler, const TString& typeName, int // // textureQueryLod(), fragment stage only - // + // Also enabled with extension GL_ARB_texture_query_lod - if (profile != EEsProfile && version >= 400 && sampler.isCombined() && sampler.dim != EsdRect && + if (profile != EEsProfile && version >= 150 && sampler.isCombined() && sampler.dim != EsdRect && ! sampler.isMultiSample() && ! sampler.isBuffer()) { for (int f16TexAddr = 0; f16TexAddr < 2; ++f16TexAddr) { if (f16TexAddr && sampler.type != EbtFloat16) @@ -7549,6 +7549,10 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion BuiltInVariable("gl_FragStencilRefARB", EbvFragStencilRef, symbolTable); } + if (profile != EEsProfile && version < 400) { + symbolTable.setFunctionExtensions("textureQueryLod", 1, &E_GL_ARB_texture_query_lod); + } + if (profile != EEsProfile && version >= 460) { symbolTable.setFunctionExtensions("rayQueryInitializeEXT", 1, &E_GL_EXT_ray_query); symbolTable.setFunctionExtensions("rayQueryTerminateEXT", 1, &E_GL_EXT_ray_query); @@ -8065,6 +8069,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setFunctionExtensions("groupMemoryBarrier", 1, &E_GL_ARB_compute_shader); } + symbolTable.setFunctionExtensions("controlBarrier", 1, &E_GL_KHR_memory_scope_semantics); symbolTable.setFunctionExtensions("debugPrintfEXT", 1, &E_GL_EXT_debug_printf); diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp index f9ff2f1d..f98f2b6e 100644 --- a/glslang/MachineIndependent/Versions.cpp +++ b/glslang/MachineIndependent/Versions.cpp @@ -201,6 +201,7 @@ void TParseVersions::initializeExtensionBehavior() extensionBehavior[E_GL_ARB_shader_image_size] = EBhDisable; extensionBehavior[E_GL_ARB_shader_storage_buffer_object] = EBhDisable; extensionBehavior[E_GL_ARB_shading_language_packing] = EBhDisable; + extensionBehavior[E_GL_ARB_texture_query_lod] = EBhDisable; extensionBehavior[E_GL_KHR_shader_subgroup_basic] = EBhDisable; extensionBehavior[E_GL_KHR_shader_subgroup_vote] = EBhDisable; @@ -417,6 +418,7 @@ void TParseVersions::getPreamble(std::string& preamble) "#define GL_ARB_uniform_buffer_object 1\n" "#define GL_ARB_shader_bit_encoding 1\n" "#define GL_ARB_shader_storage_buffer_object 1\n" + "#define GL_ARB_texture_query_lod 1\n" "#define GL_EXT_shader_non_constant_global_initializers 1\n" "#define GL_EXT_shader_image_load_formatted 1\n" "#define GL_EXT_post_depth_coverage 1\n" diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h index 2a496298..98a88e1d 100644 --- a/glslang/MachineIndependent/Versions.h +++ b/glslang/MachineIndependent/Versions.h @@ -156,6 +156,7 @@ const char* const E_GL_ARB_shader_bit_encoding = "GL_ARB_shader_bit_enc const char* const E_GL_ARB_shader_image_size = "GL_ARB_shader_image_size"; const char* const E_GL_ARB_shader_storage_buffer_object = "GL_ARB_shader_storage_buffer_object"; const char* const E_GL_ARB_shading_language_packing = "GL_ARB_shading_language_packing"; +const char* const E_GL_ARB_texture_query_lod = "GL_ARB_texture_query_lod"; const char* const E_GL_KHR_shader_subgroup_basic = "GL_KHR_shader_subgroup_basic"; const char* const E_GL_KHR_shader_subgroup_vote = "GL_KHR_shader_subgroup_vote";