drirc: Add glsl_zero_init workaround for GpuTest
authorDanylo Piliaiev <danylo.piliaiev@globallogic.com>
Fri, 22 Nov 2019 16:05:14 +0000 (18:05 +0200)
committerDanylo Piliaiev <danylo.piliaiev@globallogic.com>
Mon, 25 Nov 2019 10:22:37 +0000 (12:22 +0200)
GiMark benchmark from GpuTest has such code in VS:

 out vec4 lightDir0;
 out vec4 lightDir1;

 ...

 lightDir0.xyz = lp0 - vVertex.xyz;
 lightDir1.xyz = lp1 - vVertex.xyz;

In FS:

 float distSqr = dot(lightDir0, lightDir0);

So due to the usage of uninitialized .w channel in the dot product,
distSqr may become undefined which results in many black dots
in the test on Iris.

In https://www.geeks3d.com/forums/index.php/topic,6242.0.html
developer stated that this benchmark most likely won't be updated.

Closes: https://gitlab.freedesktop.org/mesa/mesa/issues/1919
Signed-off-by: Danylo Piliaiev <danylo.piliaiev@globallogic.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/util/00-mesa-defaults.conf

index ba343ec5ffb4ae7499fd115954efb57c9144147d..734161650b7d2a6782dba545f2d8713812bd3459 100644 (file)
@@ -243,6 +243,13 @@ TODO: document the other workarounds.
             <option name="force_compat_profile" value="true" />
         </application>
 
+        <application name="GpuTest" executable="GpuTest">
+            <!-- GiMark benchmark from GpuTest does not initialize .w channel of
+                 lightDir0 and lightDir1 varyings in the vertex shader while
+                 uses it in the fragment shader. -->
+            <option name="glsl_zero_init" value="true"/>
+        </application>
+
         <!-- The GL thread whitelist is below, workarounds are above.
              Keep it that way. -->