mirror of
https://github.com/KhronosGroup/glslang
synced 2024-11-09 20:10:06 +00:00
Support the textureQueryLOD at #extension GL_ARB_texture_query_lod.
Signed-off-by: ZhiqianXia <xzq0528@outlook.com>
This commit is contained in:
parent
0db0010d3c
commit
78de10954e
@ -111,8 +111,8 @@ void qlodFail()
|
|||||||
vec2 pf2;
|
vec2 pf2;
|
||||||
vec3 pf3;
|
vec3 pf3;
|
||||||
|
|
||||||
lod = textureQueryLod(samp1D, pf); // ERROR, extension GL_ARB_texture_query_lod needed
|
lod = textureQueryLOD(samp1D, pf); // ERROR, extension GL_ARB_texture_query_lod needed
|
||||||
lod = textureQueryLod(samp2Ds, pf2); // 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
|
#extension GL_ARB_texture_query_lod : enable
|
||||||
@ -138,21 +138,21 @@ void qlodPass()
|
|||||||
vec2 pf2;
|
vec2 pf2;
|
||||||
vec3 pf3;
|
vec3 pf3;
|
||||||
|
|
||||||
lod = textureQueryLod(samp1D, pf);
|
lod = textureQueryLOD(samp1D, pf);
|
||||||
lod = textureQueryLod(isamp2D, pf2);
|
lod = textureQueryLOD(isamp2D, pf2);
|
||||||
lod = textureQueryLod(usamp3D, pf3);
|
lod = textureQueryLOD(usamp3D, pf3);
|
||||||
lod = textureQueryLod(sampCube, pf3);
|
lod = textureQueryLOD(sampCube, pf3);
|
||||||
lod = textureQueryLod(isamp1DA, pf);
|
lod = textureQueryLOD(isamp1DA, pf);
|
||||||
lod = textureQueryLod(usamp2DA, pf2);
|
lod = textureQueryLOD(usamp2DA, pf2);
|
||||||
|
|
||||||
lod = textureQueryLod(samp1Ds, pf);
|
lod = textureQueryLOD(samp1Ds, pf);
|
||||||
lod = textureQueryLod(samp2Ds, pf2);
|
lod = textureQueryLOD(samp2Ds, pf2);
|
||||||
lod = textureQueryLod(sampCubes, pf3);
|
lod = textureQueryLOD(sampCubes, pf3);
|
||||||
lod = textureQueryLod(samp1DAs, pf);
|
lod = textureQueryLOD(samp1DAs, pf);
|
||||||
lod = textureQueryLod(samp2DAs, pf2);
|
lod = textureQueryLOD(samp2DAs, pf2);
|
||||||
|
|
||||||
lod = textureQueryLod(sampBuf, pf); // ERROR
|
lod = textureQueryLOD(sampBuf, pf); // ERROR
|
||||||
lod = textureQueryLod(sampRect, pf2); // ERROR
|
lod = textureQueryLOD(sampRect, pf2); // ERROR
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test extension GL_EXT_shader_integer_mix
|
// Test extension GL_EXT_shader_integer_mix
|
||||||
|
@ -10,11 +10,11 @@ ERROR: 0:53: 'double' : must be qualified as flat in
|
|||||||
ERROR: 0:57: '=' : cannot convert from ' global double' to ' global int'
|
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: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: 0:100: 'packSnorm2x16' : required extension not requested: GL_ARB_shading_language_packing
|
||||||
ERROR: 0:114: 'textureQueryLod' : required extension not requested: GL_ARB_texture_query_lod
|
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:115: 'textureQueryLOD' : required extension not requested: GL_ARB_texture_query_lod
|
||||||
ERROR: 0:154: 'textureQueryLod' : no matching overloaded function found
|
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: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: 'textureQueryLOD' : no matching overloaded function found
|
||||||
ERROR: 0:155: 'assign' : cannot convert from ' const float' to ' temp 2-component vector of float'
|
ERROR: 0:155: 'assign' : cannot convert from ' const float' to ' temp 2-component vector of float'
|
||||||
ERROR: 0:183: 'mix' : required extension not requested: GL_EXT_shader_integer_mix
|
ERROR: 0:183: 'mix' : required extension not requested: GL_EXT_shader_integer_mix
|
||||||
ERROR: 18 compilation errors. No code generated.
|
ERROR: 18 compilation errors. No code generated.
|
||||||
|
115
Test/baseResults/textureQueryLOD.frag.out
Normal file
115
Test/baseResults/textureQueryLOD.frag.out
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
textureQueryLOD.frag
|
||||||
|
WARNING: 0:7: '#extension' : extension is only partially supported: GL_ARB_gpu_shader5
|
||||||
|
|
||||||
|
Shader version: 150
|
||||||
|
Requested GL_ARB_gpu_shader5
|
||||||
|
Requested GL_ARB_texture_query_lod
|
||||||
|
0:? Sequence
|
||||||
|
0:24 Function Definition: main( ( global void)
|
||||||
|
0:24 Function Parameters:
|
||||||
|
0:26 Sequence
|
||||||
|
0:26 switch
|
||||||
|
0:26 condition
|
||||||
|
0:26 'funct' ( uniform int)
|
||||||
|
0:26 body
|
||||||
|
0:26 Sequence
|
||||||
|
0:28 case: with expression
|
||||||
|
0:28 Constant:
|
||||||
|
0:28 0 (const int)
|
||||||
|
0:? Sequence
|
||||||
|
0:29 Sequence
|
||||||
|
0:29 move second child to first child ( temp 2-component vector of int)
|
||||||
|
0:29 'iv2' ( temp 2-component vector of int)
|
||||||
|
0:29 textureSize ( global 2-component vector of int)
|
||||||
|
0:29 'sampler' ( uniform sampler2DShadow)
|
||||||
|
0:29 Constant:
|
||||||
|
0:29 0 (const int)
|
||||||
|
0:31 Sequence
|
||||||
|
0:31 move second child to first child ( temp 2-component vector of float)
|
||||||
|
0:31 'fv2' ( temp 2-component vector of float)
|
||||||
|
0:31 textureQueryLod ( global 2-component vector of float)
|
||||||
|
0:31 'sampler' ( uniform sampler2DShadow)
|
||||||
|
0:31 Constant:
|
||||||
|
0:31 0.000000
|
||||||
|
0:31 0.000000
|
||||||
|
0:33 move second child to first child ( temp 4-component vector of float)
|
||||||
|
0:33 'color' ( out 4-component vector of float)
|
||||||
|
0:33 Construct vec4 ( temp 4-component vector of float)
|
||||||
|
0:33 Convert int to float ( temp 2-component vector of float)
|
||||||
|
0:33 'iv2' ( temp 2-component vector of int)
|
||||||
|
0:33 'fv2' ( temp 2-component vector of float)
|
||||||
|
0:34 Branch: Break
|
||||||
|
0:35 default:
|
||||||
|
0:? Sequence
|
||||||
|
0:36 move second child to first child ( temp 4-component vector of float)
|
||||||
|
0:36 'color' ( out 4-component vector of float)
|
||||||
|
0:36 Constant:
|
||||||
|
0:36 1.000000
|
||||||
|
0:36 1.000000
|
||||||
|
0:36 1.000000
|
||||||
|
0:36 1.000000
|
||||||
|
0:37 Branch: Break
|
||||||
|
0:? Linker Objects
|
||||||
|
0:? 'vUV' ( smooth in 2-component vector of float)
|
||||||
|
0:? 'color' ( out 4-component vector of float)
|
||||||
|
0:? 'sampler' ( uniform sampler2DShadow)
|
||||||
|
0:? 'funct' ( uniform int)
|
||||||
|
|
||||||
|
|
||||||
|
Linked fragment stage:
|
||||||
|
|
||||||
|
|
||||||
|
Shader version: 150
|
||||||
|
Requested GL_ARB_gpu_shader5
|
||||||
|
Requested GL_ARB_texture_query_lod
|
||||||
|
0:? Sequence
|
||||||
|
0:24 Function Definition: main( ( global void)
|
||||||
|
0:24 Function Parameters:
|
||||||
|
0:26 Sequence
|
||||||
|
0:26 switch
|
||||||
|
0:26 condition
|
||||||
|
0:26 'funct' ( uniform int)
|
||||||
|
0:26 body
|
||||||
|
0:26 Sequence
|
||||||
|
0:28 case: with expression
|
||||||
|
0:28 Constant:
|
||||||
|
0:28 0 (const int)
|
||||||
|
0:? Sequence
|
||||||
|
0:29 Sequence
|
||||||
|
0:29 move second child to first child ( temp 2-component vector of int)
|
||||||
|
0:29 'iv2' ( temp 2-component vector of int)
|
||||||
|
0:29 textureSize ( global 2-component vector of int)
|
||||||
|
0:29 'sampler' ( uniform sampler2DShadow)
|
||||||
|
0:29 Constant:
|
||||||
|
0:29 0 (const int)
|
||||||
|
0:31 Sequence
|
||||||
|
0:31 move second child to first child ( temp 2-component vector of float)
|
||||||
|
0:31 'fv2' ( temp 2-component vector of float)
|
||||||
|
0:31 textureQueryLod ( global 2-component vector of float)
|
||||||
|
0:31 'sampler' ( uniform sampler2DShadow)
|
||||||
|
0:31 Constant:
|
||||||
|
0:31 0.000000
|
||||||
|
0:31 0.000000
|
||||||
|
0:33 move second child to first child ( temp 4-component vector of float)
|
||||||
|
0:33 'color' ( out 4-component vector of float)
|
||||||
|
0:33 Construct vec4 ( temp 4-component vector of float)
|
||||||
|
0:33 Convert int to float ( temp 2-component vector of float)
|
||||||
|
0:33 'iv2' ( temp 2-component vector of int)
|
||||||
|
0:33 'fv2' ( temp 2-component vector of float)
|
||||||
|
0:34 Branch: Break
|
||||||
|
0:35 default:
|
||||||
|
0:? Sequence
|
||||||
|
0:36 move second child to first child ( temp 4-component vector of float)
|
||||||
|
0:36 'color' ( out 4-component vector of float)
|
||||||
|
0:36 Constant:
|
||||||
|
0:36 1.000000
|
||||||
|
0:36 1.000000
|
||||||
|
0:36 1.000000
|
||||||
|
0:36 1.000000
|
||||||
|
0:37 Branch: Break
|
||||||
|
0:? Linker Objects
|
||||||
|
0:? 'vUV' ( smooth in 2-component vector of float)
|
||||||
|
0:? 'color' ( out 4-component vector of float)
|
||||||
|
0:? 'sampler' ( uniform sampler2DShadow)
|
||||||
|
0:? 'funct' ( uniform int)
|
||||||
|
|
39
Test/textureQueryLOD.frag
Normal file
39
Test/textureQueryLOD.frag
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
#version 150
|
||||||
|
|
||||||
|
#ifdef GL_ARB_texture_query_lod
|
||||||
|
#extension GL_ARB_texture_query_lod : enable
|
||||||
|
#endif
|
||||||
|
#ifdef GL_ARB_gpu_shader5
|
||||||
|
#extension GL_ARB_gpu_shader5 : enable
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef GL_ES
|
||||||
|
precision highp float;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
in vec2 vUV; // vert->frag
|
||||||
|
out vec4 color; // frag->fb
|
||||||
|
#define UV vUV
|
||||||
|
|
||||||
|
#define bias 1.5
|
||||||
|
#define TEX 128.0
|
||||||
|
#define offset ivec2(1,1)
|
||||||
|
uniform highp sampler2DShadow sampler;
|
||||||
|
uniform int funct;
|
||||||
|
|
||||||
|
void main (void)
|
||||||
|
{
|
||||||
|
switch (funct)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
ivec2 iv2 = textureSize(sampler, 0);
|
||||||
|
#ifdef GL_ARB_texture_query_lod
|
||||||
|
vec2 fv2 = textureQueryLOD(sampler, vec2(0.0, 0.0));
|
||||||
|
#endif
|
||||||
|
color = vec4(iv2,fv2);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
color = vec4(1.0, 1.0, 1.0, 1.0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
@ -316,6 +316,7 @@ const CustomFunction CustomFunctions[] = {
|
|||||||
|
|
||||||
{ EOpTextureQuerySize, "textureSize", nullptr },
|
{ EOpTextureQuerySize, "textureSize", nullptr },
|
||||||
{ EOpTextureQueryLod, "textureQueryLod", nullptr },
|
{ EOpTextureQueryLod, "textureQueryLod", nullptr },
|
||||||
|
{ EOpTextureQueryLod, "textureQueryLOD", nullptr }, // extension GL_ARB_texture_query_lod
|
||||||
{ EOpTextureQueryLevels, "textureQueryLevels", nullptr },
|
{ EOpTextureQueryLevels, "textureQueryLevels", nullptr },
|
||||||
{ EOpTextureQuerySamples, "textureSamples", nullptr },
|
{ EOpTextureQuerySamples, "textureSamples", nullptr },
|
||||||
{ EOpTexture, "texture", nullptr },
|
{ EOpTexture, "texture", nullptr },
|
||||||
@ -6307,13 +6308,18 @@ void TBuiltIns::addQueryFunctions(TSampler sampler, const TString& typeName, int
|
|||||||
//
|
//
|
||||||
// textureQueryLod(), fragment stage only
|
// textureQueryLod(), fragment stage only
|
||||||
// Also enabled with extension GL_ARB_texture_query_lod
|
// Also enabled with extension GL_ARB_texture_query_lod
|
||||||
|
// Extension GL_ARB_texture_query_lod says that textureQueryLOD() also exist at extension.
|
||||||
|
|
||||||
if (profile != EEsProfile && version >= 150 && sampler.isCombined() && sampler.dim != EsdRect &&
|
if (profile != EEsProfile && version >= 150 && sampler.isCombined() && sampler.dim != EsdRect &&
|
||||||
! sampler.isMultiSample() && ! sampler.isBuffer()) {
|
! sampler.isMultiSample() && ! sampler.isBuffer()) {
|
||||||
|
|
||||||
|
const TString funcName[2] = {"vec2 textureQueryLod(", "vec2 textureQueryLOD("};
|
||||||
|
|
||||||
|
for (int i = 0; i < 2; ++i){
|
||||||
for (int f16TexAddr = 0; f16TexAddr < 2; ++f16TexAddr) {
|
for (int f16TexAddr = 0; f16TexAddr < 2; ++f16TexAddr) {
|
||||||
if (f16TexAddr && sampler.type != EbtFloat16)
|
if (f16TexAddr && sampler.type != EbtFloat16)
|
||||||
continue;
|
continue;
|
||||||
stageBuiltins[EShLangFragment].append("vec2 textureQueryLod(");
|
stageBuiltins[EShLangFragment].append(funcName[i]);
|
||||||
stageBuiltins[EShLangFragment].append(typeName);
|
stageBuiltins[EShLangFragment].append(typeName);
|
||||||
if (dimMap[sampler.dim] == 1)
|
if (dimMap[sampler.dim] == 1)
|
||||||
if (f16TexAddr)
|
if (f16TexAddr)
|
||||||
@ -6330,7 +6336,7 @@ void TBuiltIns::addQueryFunctions(TSampler sampler, const TString& typeName, int
|
|||||||
stageBuiltins[EShLangFragment].append(");\n");
|
stageBuiltins[EShLangFragment].append(");\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
stageBuiltins[EShLangCompute].append("vec2 textureQueryLod(");
|
stageBuiltins[EShLangCompute].append(funcName[i]);
|
||||||
stageBuiltins[EShLangCompute].append(typeName);
|
stageBuiltins[EShLangCompute].append(typeName);
|
||||||
if (dimMap[sampler.dim] == 1)
|
if (dimMap[sampler.dim] == 1)
|
||||||
stageBuiltins[EShLangCompute].append(", float");
|
stageBuiltins[EShLangCompute].append(", float");
|
||||||
@ -6340,6 +6346,7 @@ void TBuiltIns::addQueryFunctions(TSampler sampler, const TString& typeName, int
|
|||||||
}
|
}
|
||||||
stageBuiltins[EShLangCompute].append(");\n");
|
stageBuiltins[EShLangCompute].append(");\n");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// textureQueryLevels()
|
// textureQueryLevels()
|
||||||
@ -8118,7 +8125,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (profile != EEsProfile && version < 400) {
|
if (profile != EEsProfile && version < 400) {
|
||||||
symbolTable.setFunctionExtensions("textureQueryLod", 1, &E_GL_ARB_texture_query_lod);
|
symbolTable.setFunctionExtensions("textureQueryLOD", 1, &E_GL_ARB_texture_query_lod);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (profile != EEsProfile && version >= 460) {
|
if (profile != EEsProfile && version >= 460) {
|
||||||
|
@ -284,6 +284,7 @@ INSTANTIATE_TEST_SUITE_P(
|
|||||||
"textureoffset_sampler2darrayshadow.vert",
|
"textureoffset_sampler2darrayshadow.vert",
|
||||||
"atomicAdd.comp",
|
"atomicAdd.comp",
|
||||||
"GL_ARB_gpu_shader5.u2i.vert",
|
"GL_ARB_gpu_shader5.u2i.vert",
|
||||||
|
"textureQueryLOD.frag",
|
||||||
})),
|
})),
|
||||||
FileNameAsCustomTestSuffix
|
FileNameAsCustomTestSuffix
|
||||||
);
|
);
|
||||||
|
Loading…
Reference in New Issue
Block a user