GLSL: Make sampling operations have agnostic precision qualifiers for desktop.

Desktop defaults to highp for samplers, but this should not apply to the built-in
functions, so make it appy only to user declarations.
This commit is contained in:
John Kessenich 2017-10-19 00:26:39 -06:00
parent 3112b5686d
commit f0e35bf0ef
4 changed files with 69 additions and 5 deletions

View File

@ -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

View File

@ -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);
}

View File

@ -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;

View File

@ -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",