diff --git a/Test/baseResults/spv.precisionNonESSamp.frag.out b/Test/baseResults/spv.precisionNonESSamp.frag.out new file mode 100755 index 00000000..068db588 --- /dev/null +++ b/Test/baseResults/spv.precisionNonESSamp.frag.out @@ -0,0 +1,45 @@ +spv.precisionNonESSamp.frag +// Module Version 10000 +// Generated by (magic number): 80002 +// Id's are bound by 20 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 9 17 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + Name 4 "main" + Name 9 "color" + Name 13 "s" + Name 17 "v" + Decorate 9(color) RelaxedPrecision + Decorate 9(color) Location 0 + Decorate 13(s) RelaxedPrecision + Decorate 13(s) DescriptorSet 0 + Decorate 14 RelaxedPrecision + Decorate 17(v) RelaxedPrecision + Decorate 17(v) Location 0 + Decorate 18 RelaxedPrecision + Decorate 19 RelaxedPrecision + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Output 7(fvec4) + 9(color): 8(ptr) Variable Output + 10: TypeImage 6(float) 2D sampled format:Unknown + 11: TypeSampledImage 10 + 12: TypePointer UniformConstant 11 + 13(s): 12(ptr) Variable UniformConstant + 15: TypeVector 6(float) 2 + 16: TypePointer Input 15(fvec2) + 17(v): 16(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 14: 11 Load 13(s) + 18: 15(fvec2) Load 17(v) + 19: 7(fvec4) ImageSampleImplicitLod 14 18 + Store 9(color) 19 + Return + FunctionEnd diff --git a/Test/spv.precisionNonESSamp.frag b/Test/spv.precisionNonESSamp.frag new file mode 100644 index 00000000..42a942fe --- /dev/null +++ b/Test/spv.precisionNonESSamp.frag @@ -0,0 +1,16 @@ +#version 450 + +precision lowp sampler2D; +precision lowp int; +precision lowp float; + +uniform lowp sampler2D s; + +layout(location = 0) in lowp vec2 v; + +layout(location = 0) out lowp vec4 color; + +void main() +{ + color = texture(s, v); +} diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 48eff239..65a72cb4 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -126,11 +126,6 @@ void TParseContext::setPrecisionDefaults() sampler.set(EbtFloat, Esd2D); sampler.external = true; defaultSamplerPrecision[computeSamplerTypeIndex(sampler)] = EpqLow; - } else { - // Non-ES profile - // All default to highp. - for (int type = 0; type < maxSamplerIndex; ++type) - defaultSamplerPrecision[type] = EpqHigh; } // If we are parsing built-in computational variables/functions, it is meaningful to record @@ -146,6 +141,13 @@ void TParseContext::setPrecisionDefaults() defaultPrecision[EbtUint] = EpqHigh; defaultPrecision[EbtFloat] = EpqHigh; } + + if (profile != EEsProfile) { + // Non-ES profile + // All sampler precisions default to highp. + for (int type = 0; type < maxSamplerIndex; ++type) + defaultSamplerPrecision[type] = EpqHigh; + } } defaultPrecision[EbtSampler] = EpqLow; diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index 63992f19..9e1f068a 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -277,6 +277,7 @@ INSTANTIATE_TEST_CASE_P( "spv.Operations.frag", "spv.paramMemory.frag", "spv.precision.frag", + "spv.precisionNonESSamp.frag", "spv.prepost.frag", "spv.qualifiers.vert", "spv.sampleMaskOverrideCoverage.frag",