parent
3787b6947f
commit
ffefbcd9f3
@ -0,0 +1,6 @@
|
|||||||
|
spv.ext.texture_shadow_lod.error.frag
|
||||||
|
ERROR: 0:11: 'textureLod' : required extension not requested: GL_EXT_texture_shadow_lod
|
||||||
|
ERROR: 1 compilation errors. No code generated.
|
||||||
|
|
||||||
|
|
||||||
|
SPIR-V is not generated for failed compile or link
|
94
Test/baseResults/spv.ext.texture_shadow_lod.frag.out
Normal file
94
Test/baseResults/spv.ext.texture_shadow_lod.frag.out
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
spv.ext.texture_shadow_lod.frag
|
||||||
|
// Module Version 10000
|
||||||
|
// Generated by (magic number): 8000b
|
||||||
|
// Id's are bound by 59
|
||||||
|
|
||||||
|
Capability Shader
|
||||||
|
Capability SampledCubeArray
|
||||||
|
1: ExtInstImport "GLSL.std.450"
|
||||||
|
MemoryModel Logical GLSL450
|
||||||
|
EntryPoint Fragment 4 "main" 8 16
|
||||||
|
ExecutionMode 4 OriginUpperLeft
|
||||||
|
Source GLSL 450
|
||||||
|
SourceExtension "GL_EXT_texture_shadow_lod"
|
||||||
|
Name 4 "main"
|
||||||
|
Name 8 "c"
|
||||||
|
Name 12 "s2da"
|
||||||
|
Name 16 "tc"
|
||||||
|
Name 24 "sca"
|
||||||
|
Name 47 "sc"
|
||||||
|
Decorate 8(c) Location 0
|
||||||
|
Decorate 12(s2da) DescriptorSet 0
|
||||||
|
Decorate 12(s2da) Binding 0
|
||||||
|
Decorate 16(tc) Location 0
|
||||||
|
Decorate 24(sca) DescriptorSet 0
|
||||||
|
Decorate 24(sca) Binding 1
|
||||||
|
Decorate 47(sc) DescriptorSet 0
|
||||||
|
Decorate 47(sc) Binding 2
|
||||||
|
2: TypeVoid
|
||||||
|
3: TypeFunction 2
|
||||||
|
6: TypeFloat 32
|
||||||
|
7: TypePointer Output 6(float)
|
||||||
|
8(c): 7(ptr) Variable Output
|
||||||
|
9: TypeImage 6(float) 2D depth array sampled format:Unknown
|
||||||
|
10: TypeSampledImage 9
|
||||||
|
11: TypePointer UniformConstant 10
|
||||||
|
12(s2da): 11(ptr) Variable UniformConstant
|
||||||
|
14: TypeVector 6(float) 4
|
||||||
|
15: TypePointer Input 14(fvec4)
|
||||||
|
16(tc): 15(ptr) Variable Input
|
||||||
|
18: 6(float) Constant 0
|
||||||
|
21: TypeImage 6(float) Cube depth array sampled format:Unknown
|
||||||
|
22: TypeSampledImage 21
|
||||||
|
23: TypePointer UniformConstant 22
|
||||||
|
24(sca): 23(ptr) Variable UniformConstant
|
||||||
|
30: TypeInt 32 1
|
||||||
|
31: TypeVector 30(int) 2
|
||||||
|
32: 30(int) Constant 0
|
||||||
|
33: 31(ivec2) ConstantComposite 32 32
|
||||||
|
44: TypeImage 6(float) Cube depth sampled format:Unknown
|
||||||
|
45: TypeSampledImage 44
|
||||||
|
46: TypePointer UniformConstant 45
|
||||||
|
47(sc): 46(ptr) Variable UniformConstant
|
||||||
|
4(main): 2 Function None 3
|
||||||
|
5: Label
|
||||||
|
13: 10 Load 12(s2da)
|
||||||
|
17: 14(fvec4) Load 16(tc)
|
||||||
|
19: 6(float) CompositeExtract 17 3
|
||||||
|
20: 6(float) ImageSampleDrefImplicitLod 13 17 19 Bias 18
|
||||||
|
Store 8(c) 20
|
||||||
|
25: 22 Load 24(sca)
|
||||||
|
26: 14(fvec4) Load 16(tc)
|
||||||
|
27: 6(float) ImageSampleDrefImplicitLod 25 26 18
|
||||||
|
Store 8(c) 27
|
||||||
|
28: 10 Load 12(s2da)
|
||||||
|
29: 14(fvec4) Load 16(tc)
|
||||||
|
34: 6(float) CompositeExtract 29 3
|
||||||
|
35: 6(float) ImageSampleDrefImplicitLod 28 29 34 ConstOffset 33
|
||||||
|
Store 8(c) 35
|
||||||
|
36: 10 Load 12(s2da)
|
||||||
|
37: 14(fvec4) Load 16(tc)
|
||||||
|
38: 6(float) CompositeExtract 37 3
|
||||||
|
39: 6(float) ImageSampleDrefImplicitLod 36 37 38 Bias ConstOffset 18 33
|
||||||
|
Store 8(c) 39
|
||||||
|
40: 10 Load 12(s2da)
|
||||||
|
41: 14(fvec4) Load 16(tc)
|
||||||
|
42: 6(float) CompositeExtract 41 3
|
||||||
|
43: 6(float) ImageSampleDrefExplicitLod 40 41 42 Lod 18
|
||||||
|
Store 8(c) 43
|
||||||
|
48: 45 Load 47(sc)
|
||||||
|
49: 14(fvec4) Load 16(tc)
|
||||||
|
50: 6(float) CompositeExtract 49 3
|
||||||
|
51: 6(float) ImageSampleDrefExplicitLod 48 49 50 Lod 18
|
||||||
|
Store 8(c) 51
|
||||||
|
52: 22 Load 24(sca)
|
||||||
|
53: 14(fvec4) Load 16(tc)
|
||||||
|
54: 6(float) ImageSampleDrefExplicitLod 52 53 18 Lod 18
|
||||||
|
Store 8(c) 54
|
||||||
|
55: 10 Load 12(s2da)
|
||||||
|
56: 14(fvec4) Load 16(tc)
|
||||||
|
57: 6(float) CompositeExtract 56 3
|
||||||
|
58: 6(float) ImageSampleDrefExplicitLod 55 56 57 Lod ConstOffset 18 33
|
||||||
|
Store 8(c) 58
|
||||||
|
Return
|
||||||
|
FunctionEnd
|
13
Test/spv.ext.texture_shadow_lod.error.frag
Normal file
13
Test/spv.ext.texture_shadow_lod.error.frag
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
#version 450
|
||||||
|
|
||||||
|
layout(binding = 0) uniform sampler2DArrayShadow s2da;
|
||||||
|
|
||||||
|
layout(location = 0) out vec4 c_out;
|
||||||
|
|
||||||
|
layout(location = 0) in vec4 tc;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
float c = textureLod(s2da, tc, 0);
|
||||||
|
c_out = vec4(c);
|
||||||
|
}
|
21
Test/spv.ext.texture_shadow_lod.frag
Normal file
21
Test/spv.ext.texture_shadow_lod.frag
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
#version 450
|
||||||
|
#extension GL_EXT_texture_shadow_lod : enable
|
||||||
|
|
||||||
|
layout(binding = 0) uniform sampler2DArrayShadow s2da;
|
||||||
|
layout(binding = 1) uniform samplerCubeArrayShadow sca;
|
||||||
|
layout(binding = 2) uniform samplerCubeShadow sc;
|
||||||
|
|
||||||
|
layout(location = 0) out float c;
|
||||||
|
|
||||||
|
layout(location = 0) in vec4 tc;
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
c = texture(s2da, tc, 0.0);
|
||||||
|
c = texture(sca, tc, 0.0, 0.0);
|
||||||
|
c = textureOffset(s2da, tc, ivec2(0.0));
|
||||||
|
c = textureOffset(s2da, tc, ivec2(0.0), 0.0);
|
||||||
|
c = textureLod(s2da, tc, 0.0);
|
||||||
|
c = textureLod(sc, tc, 0.0);
|
||||||
|
c = textureLod(sca, tc, 0.0, 0.0);
|
||||||
|
c = textureLodOffset(s2da, tc, 0.0, ivec2(0.0));
|
||||||
|
}
|
@ -4820,6 +4820,33 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|||||||
"\n");
|
"\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GL_EXT_texture_shadow_lod overloads
|
||||||
|
if (profile == EEsProfile) { // ES
|
||||||
|
if (version >= 300) {
|
||||||
|
commonBuiltins.append("float texture(sampler2DArrayShadow, vec4, float);"
|
||||||
|
"float textureOffset(sampler2DArrayShadow, vec4, ivec2, float);"
|
||||||
|
"float textureLod(sampler2DArrayShadow, vec4, float);"
|
||||||
|
"float textureLodOffset(sampler2DArrayShadow, vec4, float, ivec2);"
|
||||||
|
"\n");
|
||||||
|
}
|
||||||
|
if (version >= 320) {
|
||||||
|
commonBuiltins.append("float texture(samplerCubeArrayShadow, vec4, float, float);"
|
||||||
|
"float textureLod(samplerCubeShadow, vec4, float);"
|
||||||
|
"float textureLod(samplerCubeArrayShadow, vec4, float, float);"
|
||||||
|
"\n");
|
||||||
|
}
|
||||||
|
} else if (version >= 130) { // Desktop
|
||||||
|
commonBuiltins.append("float texture(sampler2DArrayShadow, vec4, float);"
|
||||||
|
"float texture(samplerCubeArrayShadow, vec4, float, float);"
|
||||||
|
"float textureOffset(sampler2DArrayShadow, vec4, ivec2);"
|
||||||
|
"float textureOffset(sampler2DArrayShadow, vec4, ivec2, float);"
|
||||||
|
"float textureLod(sampler2DArrayShadow, vec4, float);"
|
||||||
|
"float textureLod(samplerCubeShadow, vec4, float);"
|
||||||
|
"float textureLod(samplerCubeArrayShadow, vec4, float, float);"
|
||||||
|
"float textureLodOffset(sampler2DArrayShadow, vec4, float, ivec2);"
|
||||||
|
"\n");
|
||||||
|
}
|
||||||
|
|
||||||
//============================================================================
|
//============================================================================
|
||||||
//
|
//
|
||||||
// Standard Uniforms
|
// Standard Uniforms
|
||||||
@ -8741,6 +8768,36 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
|
|||||||
symbolTable.setFunctionExtensions("textureBlockMatchSADQCOM", 1, &E_GL_QCOM_image_processing);
|
symbolTable.setFunctionExtensions("textureBlockMatchSADQCOM", 1, &E_GL_QCOM_image_processing);
|
||||||
symbolTable.setFunctionExtensions("textureBlockMatchSSDQCOM", 1, &E_GL_QCOM_image_processing);
|
symbolTable.setFunctionExtensions("textureBlockMatchSSDQCOM", 1, &E_GL_QCOM_image_processing);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GL_EXT_texture_shadow_lod
|
||||||
|
// NOTE: These are the mangled names of individual overloads, since this extension adds overloads for
|
||||||
|
// existing built-in functions.
|
||||||
|
if (profile == EEsProfile) {
|
||||||
|
if (version >= 300) {
|
||||||
|
symbolTable.setSingleFunctionExtensions("texture(sAS21;vf4;f1;", 1, &E_GL_EXT_texture_shadow_lod);
|
||||||
|
symbolTable.setSingleFunctionExtensions("textureOffset(sAS21;vf4;vi2;f1;", 1,
|
||||||
|
&E_GL_EXT_texture_shadow_lod);
|
||||||
|
symbolTable.setSingleFunctionExtensions("textureLod(sAS21;vf4;f1;", 1, &E_GL_EXT_texture_shadow_lod);
|
||||||
|
symbolTable.setSingleFunctionExtensions("textureLodOffset(sAS21;vf4;f1;vi2;", 1,
|
||||||
|
&E_GL_EXT_texture_shadow_lod);
|
||||||
|
}
|
||||||
|
if (version >= 320) {
|
||||||
|
symbolTable.setSingleFunctionExtensions("texture(sASC1;vf4;f1;", 1, &E_GL_EXT_texture_shadow_lod);
|
||||||
|
symbolTable.setSingleFunctionExtensions("texture(sASC1;vf4;f1;f1;", 1, &E_GL_EXT_texture_shadow_lod);
|
||||||
|
symbolTable.setSingleFunctionExtensions("textureLod(sASC1;vf4;f1;f1;", 1, &E_GL_EXT_texture_shadow_lod);
|
||||||
|
symbolTable.setSingleFunctionExtensions("textureLod(sSC1;vf4;f1;", 1, &E_GL_EXT_texture_shadow_lod);
|
||||||
|
}
|
||||||
|
} else if (version >= 130) {
|
||||||
|
symbolTable.setSingleFunctionExtensions("texture(sAS21;vf4;f1;", 1, &E_GL_EXT_texture_shadow_lod);
|
||||||
|
symbolTable.setSingleFunctionExtensions("texture(sASC1;vf4;f1;f1;", 1, &E_GL_EXT_texture_shadow_lod);
|
||||||
|
symbolTable.setSingleFunctionExtensions("textureOffset(sAS21;vf4;vi2;", 1, &E_GL_EXT_texture_shadow_lod);
|
||||||
|
symbolTable.setSingleFunctionExtensions("textureOffset(sAS21;vf4;vi2;f1;", 1, &E_GL_EXT_texture_shadow_lod);
|
||||||
|
symbolTable.setSingleFunctionExtensions("textureLod(sAS21;vf4;f1;", 1, &E_GL_EXT_texture_shadow_lod);
|
||||||
|
symbolTable.setSingleFunctionExtensions("textureLod(sASC1;vf4;f1;f1;", 1, &E_GL_EXT_texture_shadow_lod);
|
||||||
|
symbolTable.setSingleFunctionExtensions("textureLod(sSC1;vf4;f1;", 1, &E_GL_EXT_texture_shadow_lod);
|
||||||
|
symbolTable.setSingleFunctionExtensions("textureLodOffset(sAS21;vf4;f1;vi2;", 1,
|
||||||
|
&E_GL_EXT_texture_shadow_lod);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EShLangCompute:
|
case EShLangCompute:
|
||||||
|
@ -318,6 +318,16 @@ void TSymbolTableLevel::setFunctionExtensions(const char* name, int num, const c
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Make a single function require an extension(s). i.e., this will only set the extensions for the symbol that matches 'name' exactly.
|
||||||
|
// This is different from setFunctionExtensions, which uses std::map::lower_bound to effectively set all symbols that start with 'name'.
|
||||||
|
// Should only be used for a version/profile that actually needs the extension(s).
|
||||||
|
void TSymbolTableLevel::setSingleFunctionExtensions(const char* name, int num, const char* const extensions[])
|
||||||
|
{
|
||||||
|
if (auto candidate = level.find(name); candidate != level.end()) {
|
||||||
|
candidate->second->setExtensions(num, extensions);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Make all symbols in this table level read only.
|
// Make all symbols in this table level read only.
|
||||||
//
|
//
|
||||||
|
@ -571,6 +571,7 @@ public:
|
|||||||
|
|
||||||
void relateToOperator(const char* name, TOperator op);
|
void relateToOperator(const char* name, TOperator op);
|
||||||
void setFunctionExtensions(const char* name, int num, const char* const extensions[]);
|
void setFunctionExtensions(const char* name, int num, const char* const extensions[]);
|
||||||
|
void setSingleFunctionExtensions(const char* name, int num, const char* const extensions[]);
|
||||||
void dump(TInfoSink& infoSink, bool complete = false) const;
|
void dump(TInfoSink& infoSink, bool complete = false) const;
|
||||||
TSymbolTableLevel* clone() const;
|
TSymbolTableLevel* clone() const;
|
||||||
void readOnly();
|
void readOnly();
|
||||||
@ -872,6 +873,12 @@ public:
|
|||||||
table[level]->setFunctionExtensions(name, num, extensions);
|
table[level]->setFunctionExtensions(name, num, extensions);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setSingleFunctionExtensions(const char* name, int num, const char* const extensions[])
|
||||||
|
{
|
||||||
|
for (unsigned int level = 0; level < table.size(); ++level)
|
||||||
|
table[level]->setSingleFunctionExtensions(name, num, extensions);
|
||||||
|
}
|
||||||
|
|
||||||
void setVariableExtensions(const char* name, int numExts, const char* const extensions[])
|
void setVariableExtensions(const char* name, int numExts, const char* const extensions[])
|
||||||
{
|
{
|
||||||
TSymbol* symbol = find(TString(name));
|
TSymbol* symbol = find(TString(name));
|
||||||
|
@ -359,6 +359,7 @@ void TParseVersions::initializeExtensionBehavior()
|
|||||||
extensionBehavior[E_GL_EXT_opacity_micromap] = EBhDisable;
|
extensionBehavior[E_GL_EXT_opacity_micromap] = EBhDisable;
|
||||||
extensionBehavior[E_GL_EXT_ray_tracing_position_fetch] = EBhDisable;
|
extensionBehavior[E_GL_EXT_ray_tracing_position_fetch] = EBhDisable;
|
||||||
extensionBehavior[E_GL_EXT_shader_tile_image] = EBhDisable;
|
extensionBehavior[E_GL_EXT_shader_tile_image] = EBhDisable;
|
||||||
|
extensionBehavior[E_GL_EXT_texture_shadow_lod] = EBhDisable;
|
||||||
|
|
||||||
// OVR extensions
|
// OVR extensions
|
||||||
extensionBehavior[E_GL_OVR_multiview] = EBhDisable;
|
extensionBehavior[E_GL_OVR_multiview] = EBhDisable;
|
||||||
|
@ -333,6 +333,8 @@ const char* const E_GL_EXT_shader_atomic_float2 = "GL_EXT_shader_atomic_float2";
|
|||||||
|
|
||||||
const char* const E_GL_EXT_shader_tile_image = "GL_EXT_shader_tile_image";
|
const char* const E_GL_EXT_shader_tile_image = "GL_EXT_shader_tile_image";
|
||||||
|
|
||||||
|
const char* const E_GL_EXT_texture_shadow_lod = "GL_EXT_texture_shadow_lod";
|
||||||
|
|
||||||
// Arrays of extensions for the above AEP duplications
|
// Arrays of extensions for the above AEP duplications
|
||||||
|
|
||||||
const char* const AEP_geometry_shader[] = { E_GL_EXT_geometry_shader, E_GL_OES_geometry_shader };
|
const char* const AEP_geometry_shader[] = { E_GL_EXT_geometry_shader, E_GL_OES_geometry_shader };
|
||||||
|
@ -526,6 +526,8 @@ INSTANTIATE_TEST_SUITE_P(
|
|||||||
"spv.atomicAdd.bufferReference.comp",
|
"spv.atomicAdd.bufferReference.comp",
|
||||||
"spv.fragmentShaderBarycentric3.frag",
|
"spv.fragmentShaderBarycentric3.frag",
|
||||||
"spv.fragmentShaderBarycentric4.frag",
|
"spv.fragmentShaderBarycentric4.frag",
|
||||||
|
"spv.ext.texture_shadow_lod.frag",
|
||||||
|
"spv.ext.texture_shadow_lod.error.frag",
|
||||||
})),
|
})),
|
||||||
FileNameAsCustomTestSuffix
|
FileNameAsCustomTestSuffix
|
||||||
);
|
);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user