st/dri: add a drirc workaround for Rocket League
authorMarek Olšák <marek.olsak@amd.com>
Tue, 20 Jun 2017 20:44:53 +0000 (22:44 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Fri, 23 Jun 2017 17:50:20 +0000 (19:50 +0200)
This needs to be passed to gallium drivers.

No game fix is planned at this time.

The addition of glsl_correct_derivatives_after_discard is
generally a good thing for mesa compatibility with the broader GL
driver ecosystem.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=100070

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
src/gallium/include/pipe/p_defines.h
src/gallium/state_trackers/dri/dri_screen.c
src/mesa/drivers/dri/common/drirc
src/mesa/drivers/dri/common/xmlpool/t_options.h

index b195af44399dc313fc4b7e5576a53769af33e40c..2ccdf44bfe288b60810e7b5bbd935b5ea0e5128e 100644 (file)
@@ -390,6 +390,12 @@ enum pipe_flush_flags
  */
 #define PIPE_CONTEXT_PREFER_THREADED   (1 << 3)
 
+/**
+ * Implicit and explicit derivatives after KILL behave as if KILL didn't
+ * happen.
+ */
+#define PIPE_SCREEN_ENABLE_CORRECT_TGSI_DERIVATIVES_AFTER_KILL (1 << 0)
+
 
 /**
  * Flags for pipe_context::memory_barrier.
index 1b414b28d1adc3f335b2216304cacd04149899af..aa215b09a2d02d98aa71534758fb4de58025f3aa 100644 (file)
@@ -80,6 +80,7 @@ const __DRIconfigOptionsExtension gallium_config_options = {
          DRI_CONF_ALLOW_GLSL_BUILTIN_VARIABLE_REDECLARATION("false")
          DRI_CONF_ALLOW_HIGHER_COMPAT_VERSION("false")
          DRI_CONF_FORCE_GLSL_ABS_SQRT("false")
+         DRI_CONF_GLSL_CORRECT_DERIVATIVES_AFTER_DISCARD("false")
       DRI_CONF_SECTION_END
 
       DRI_CONF_SECTION_MISCELLANEOUS
@@ -473,6 +474,10 @@ dri_init_options_get_screen_flags(struct dri_screen *screen,
                        driver_name);
    dri_fill_st_options(screen);
 
+   if (driQueryOptionb(&screen->optionCache,
+                       "glsl_correct_derivatives_after_discard"))
+      flags |= PIPE_SCREEN_ENABLE_CORRECT_TGSI_DERIVATIVES_AFTER_KILL;
+
    return flags;
 }
 
index 5152b207ebe85bd4c87621885e76ad8daf317fd6..7d73b1218b5a1566bcd077e0384650ff2b9ddb96 100644 (file)
@@ -151,6 +151,10 @@ TODO: document the other workarounds.
         <application name="Kerbal Space Program (64-bit)" executable="KSP.x86_64">
             <option name="glsl_zero_init" value="true"/>
         </application>
+
+        <application name="Rocket League" executable="RocketLeague">
+            <option name="glsl_correct_derivatives_after_discard" value="true"/>
+        </application>
     </device>
     <!-- vmwgfx doesn't like full buffer swaps and can't sync to vertical retraces.-->
     <device driver="vmwgfx">
index 8a7d04f00ff2e3add3aa7dfb82be2962498a9634..9aa1798b9d9c658933705e7bdcf233830c39b11e 100644 (file)
@@ -130,6 +130,10 @@ DRI_CONF_OPT_BEGIN_B(force_glsl_abs_sqrt, def) \
         DRI_CONF_DESC(en,gettext("Force computing the absolute value for sqrt() and inversesqrt()")) \
 DRI_CONF_OPT_END
 
+#define DRI_CONF_GLSL_CORRECT_DERIVATIVES_AFTER_DISCARD(def) \
+DRI_CONF_OPT_BEGIN_B(glsl_correct_derivatives_after_discard, def) \
+        DRI_CONF_DESC(en,gettext("Implicit and explicit derivatives after a discard behave as if the discard didn't happen")) \
+DRI_CONF_OPT_END
 
 
 /**