Have non-ES profiles always use EpqNone (no precision qualifier) rather than using...
authorJohn Kessenich <cepheus@frii.com>
Tue, 29 Jan 2013 17:24:14 +0000 (17:24 +0000)
committerJohn Kessenich <cepheus@frii.com>
Tue, 29 Jan 2013 17:24:14 +0000 (17:24 +0000)
git-svn-id: https://cvs.khronos.org/svn/repos/ogl/trunk/ecosystem/public/sdk/tools/glslang@20364 e7fa87d3-cd2b-0410-9028-fcbf551c1848

glslang/MachineIndependent/Intermediate.cpp
glslang/MachineIndependent/ParseHelper.cpp
glslang/MachineIndependent/glslang.l
glslang/MachineIndependent/glslang.y

index 389d4a9b743efa0a6e3525404695bda8fb1e0c7f..091158bf2d3fd0c3fd8a4a1ff500ac64877788dd 100644 (file)
@@ -836,8 +836,10 @@ bool TIntermBinary::promote(TInfoSink& infoSink)
     // Fix precision qualifiers
     if (right->getQualifier().precision > getQualifier().precision)
         getQualifier().precision = right->getQualifier().precision;
-    left->propagatePrecision(getQualifier().precision);
-    right->propagatePrecision(getQualifier().precision);
+    if (getQualifier().precision != EpqNone) {
+        left->propagatePrecision(getQualifier().precision);
+        right->propagatePrecision(getQualifier().precision);
+    }
 
     //
     // Array operations.
@@ -1125,7 +1127,8 @@ void TIntermTyped::propagatePrecision(TPrecisionQualifier newPrecision)
     //    comma operator:  just through the last operand
     //    ":?" and ",": where is this triggered?
     //    built-in function calls: how much to propagate to arguments?
-    //    performance: don't do this for desktop profiles
+    //    length()?
+    //    indexing?
 }
 
 bool CompareStructure(const TType& leftNodeType, constUnion* rightUnionArray, constUnion* leftUnionArray)
index 13b3bc3d0beed8b6299f3f968df887f8a5793624..5c748019454b89e5c650005fbd79e29a7650a280 100644 (file)
@@ -55,11 +55,7 @@ TParseContext::TParseContext(TSymbolTable& symt, TIntermediate& interm, EShLangu
     // Default precisions for version 110, to be overridden for 
     // other versions/profiles/stage combinations
     for (int type = 0; type < EbtNumTypes; ++type)
-        defaultPrecision[type] = EpqHigh;
-    
-    defaultPrecision[EbtVoid]   = EpqNone;
-    defaultPrecision[EbtDouble] = EpqNone;
-    defaultPrecision[EbtBool]   = EpqNone;
+        defaultPrecision[type] = EpqNone;
 }
 
 //
index 86bac745605b37866e63f3c24cb9662e6968ad47..cb9a035617fba76c7a473fc00fc7cdbccd4e756c 100644 (file)
@@ -734,9 +734,6 @@ void SetVersion(int version)
     parseContext.version = version;\r
 \r
        if (version == 100 || version == 300) {\r
-           for (int type = 0; type < EbtNumTypes; ++type)\r
-                   parseContext.defaultPrecision[type] = EpqNone;\r
-\r
            if (parseContext.language == EShLangVertex) {\r
                        parseContext.defaultPrecision[EbtInt] = EpqHigh;\r
                        parseContext.defaultPrecision[EbtFloat] = EpqHigh;\r
index 626354296fbfd5d976a792d18b1ac19846c0557c..f10d0c7be25c301484e887d0292dfb6218d307a5 100644 (file)
@@ -2442,17 +2442,20 @@ precision_qualifier
     : HIGH_PRECISION {\r
         parseContext.profileRequires($1.line, ENoProfile, 130, 0, "highp precision qualifier");\r
         $$.init($1.line);\r
-               $$.qualifier.precision = EpqHigh;\r
+        if (parseContext.profile == EEsProfile)\r
+                   $$.qualifier.precision = EpqHigh;\r
     }\r
     | MEDIUM_PRECISION {\r
         parseContext.profileRequires($1.line, ENoProfile, 130, 0, "mediump precision qualifier");\r
         $$.init($1.line);\r
-               $$.qualifier.precision = EpqMedium;\r
+        if (parseContext.profile == EEsProfile)\r
+               $$.qualifier.precision = EpqMedium;\r
     }\r
     | LOW_PRECISION {\r
         parseContext.profileRequires($1.line, ENoProfile, 130, 0, "lowp precision qualifier");\r
         $$.init($1.line);\r
-               $$.qualifier.precision = EpqLow;\r
+        if (parseContext.profile == EEsProfile)\r
+               $$.qualifier.precision = EpqLow;\r
     }\r
     ;\r
 \r