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.
diff --git a/Test/baseResults/spv.precisionNonESSamp.frag.out b/Test/baseResults/spv.precisionNonESSamp.frag.out
new file mode 100755
index 0000000..068db58
--- /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 0000000..42a942f
--- /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 48eff23..65a72cb 100644
--- a/glslang/MachineIndependent/ParseHelper.cpp
+++ b/glslang/MachineIndependent/ParseHelper.cpp
@@ -126,11 +126,6 @@
             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 @@
                 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 63992f1..9e1f068 100644
--- a/gtests/Spv.FromFile.cpp
+++ b/gtests/Spv.FromFile.cpp
@@ -277,6 +277,7 @@
         "spv.Operations.frag",
         "spv.paramMemory.frag",
         "spv.precision.frag",
+        "spv.precisionNonESSamp.frag",
         "spv.prepost.frag",
         "spv.qualifiers.vert",
         "spv.sampleMaskOverrideCoverage.frag",