[Mesa-dev] [PATCH 2/2] st/mesa, gallium: add a workaround for No Mans Sky

Marek Olšák maraeo at gmail.com
Wed Aug 29 22:15:28 UTC 2018


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

Marek

On Wed, Aug 29, 2018 at 1:48 AM, Timothy Arceri <tarceri at itsqueeze.com> wrote:
> 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.
> ---
>  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 b8f0fe64098..5f4305d91d7 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 8d386a82a63..61152e35468 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 3e4de59a433..027e85024f0 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 8483f7a2a72..29a32513085 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 ad59efba50b..eb78b75e9b8 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 ecf495a2f29..33bc3a79b93 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
>   */
> --
> 2.17.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list