Mesa (master): st/mesa, gallium: add a workaround for No Mans Sky

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Aug 29 23:54:54 UTC 2018


Module: Mesa
Branch: master
Commit: 9c47c39687a320bedcc0d674ab963c38390ab5c5
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=9c47c39687a320bedcc0d674ab963c38390ab5c5

Author: Timothy Arceri <tarceri at itsqueeze.com>
Date:   Wed Aug 29 15:48:47 2018 +1000

st/mesa, gallium: add a workaround for No Mans Sky

The spec seems clear this is not allowed but the Nvidia binary
forces apps to add layout qualifiers so this works around the
issue for No Mans Sky until the CTS can be sorted out.

Reviewed-by: Marek Olšák <marek.olsak at amd.com>

---

 src/gallium/auxiliary/pipe-loader/driinfo_gallium.h | 1 +
 src/gallium/include/state_tracker/st_api.h          | 1 +
 src/gallium/state_trackers/dri/dri_screen.c         | 2 ++
 src/mesa/state_tracker/st_extensions.c              | 3 +++
 src/util/00-mesa-defaults.conf                      | 1 +
 src/util/xmlpool/t_options.h                        | 5 +++++
 6 files changed, 13 insertions(+)

diff --git a/src/gallium/auxiliary/pipe-loader/driinfo_gallium.h b/src/gallium/auxiliary/pipe-loader/driinfo_gallium.h
index b8f0fe6409..5f4305d91d 100644
--- a/src/gallium/auxiliary/pipe-loader/driinfo_gallium.h
+++ b/src/gallium/auxiliary/pipe-loader/driinfo_gallium.h
@@ -29,6 +29,7 @@ DRI_CONF_SECTION_DEBUG
    DRI_CONF_ALLOW_HIGHER_COMPAT_VERSION("false")
    DRI_CONF_FORCE_GLSL_ABS_SQRT("false")
    DRI_CONF_GLSL_CORRECT_DERIVATIVES_AFTER_DISCARD("false")
+   DRI_CONF_ALLOW_GLSL_LAYOUT_QUALIFIER_ON_FUNCTION_PARAMETERS("false")
 DRI_CONF_SECTION_END
 
 DRI_CONF_SECTION_MISCELLANEOUS
diff --git a/src/gallium/include/state_tracker/st_api.h b/src/gallium/include/state_tracker/st_api.h
index 8d386a82a6..61152e3546 100644
--- a/src/gallium/include/state_tracker/st_api.h
+++ b/src/gallium/include/state_tracker/st_api.h
@@ -228,6 +228,7 @@ struct st_config_options
    boolean glsl_zero_init;
    boolean force_glsl_abs_sqrt;
    boolean allow_glsl_cross_stage_interpolation_mismatch;
+   boolean allow_glsl_layout_qualifier_on_function_parameters;
    unsigned char config_options_sha1[20];
 };
 
diff --git a/src/gallium/state_trackers/dri/dri_screen.c b/src/gallium/state_trackers/dri/dri_screen.c
index 3e4de59a43..027e85024f 100644
--- a/src/gallium/state_trackers/dri/dri_screen.c
+++ b/src/gallium/state_trackers/dri/dri_screen.c
@@ -85,6 +85,8 @@ dri_fill_st_options(struct dri_screen *screen)
       driQueryOptionb(optionCache, "force_glsl_abs_sqrt");
    options->allow_glsl_cross_stage_interpolation_mismatch =
       driQueryOptionb(optionCache, "allow_glsl_cross_stage_interpolation_mismatch");
+   options->allow_glsl_layout_qualifier_on_function_parameters =
+      driQueryOptionb(optionCache, "allow_glsl_layout_qualifier_on_function_parameters");
 
    driComputeOptionsSha1(optionCache, options->config_options_sha1);
 }
diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c
index 8483f7a2a7..29a3251308 100644
--- a/src/mesa/state_tracker/st_extensions.c
+++ b/src/mesa/state_tracker/st_extensions.c
@@ -1255,6 +1255,9 @@ void st_init_extensions(struct pipe_screen *screen,
    if (options->allow_glsl_relaxed_es)
       consts->AllowGLSLRelaxedES = GL_TRUE;
 
+   if (options->allow_glsl_layout_qualifier_on_function_parameters)
+      consts->AllowLayoutQualifiersOnFunctionParameters = GL_TRUE;
+
    consts->MinMapBufferAlignment =
       screen->get_param(screen, PIPE_CAP_MIN_MAP_BUFFER_ALIGNMENT);
 
diff --git a/src/util/00-mesa-defaults.conf b/src/util/00-mesa-defaults.conf
index 5d15b3819f..a68bc03027 100644
--- a/src/util/00-mesa-defaults.conf
+++ b/src/util/00-mesa-defaults.conf
@@ -195,6 +195,7 @@ TODO: document the other workarounds.
 
         <application name="No Mans Sky" executable="NMS.exe">
             <option name="force_glsl_extensions_warn" value="true" />
+            <option name="allow_glsl_layout_qualifier_on_function_parameters" value="true" />
         </application>
 
         <!-- The GL thread whitelist is below, workarounds are above.
diff --git a/src/util/xmlpool/t_options.h b/src/util/xmlpool/t_options.h
index 945d0e60f9..b6f7eed80b 100644
--- a/src/util/xmlpool/t_options.h
+++ b/src/util/xmlpool/t_options.h
@@ -135,6 +135,11 @@ DRI_CONF_OPT_BEGIN_B(allow_glsl_cross_stage_interpolation_mismatch, def) \
         DRI_CONF_DESC(en,gettext("Allow interpolation qualifier mismatch across shader stages")) \
 DRI_CONF_OPT_END
 
+#define DRI_CONF_ALLOW_GLSL_LAYOUT_QUALIFIER_ON_FUNCTION_PARAMETERS(def) \
+DRI_CONF_OPT_BEGIN_B(allow_glsl_layout_qualifier_on_function_parameters, def) \
+        DRI_CONF_DESC(en,gettext("Allow layout qualifiers on function parameters.")) \
+DRI_CONF_OPT_END
+
 /**
  * \brief Image quality-related options
  */




More information about the mesa-commit mailing list