On Tue, Dec 5, 2017 at 8:02 AM, Ilia Mirkin <imir...@alum.mit.edu> wrote: > On Tue, Dec 5, 2017 at 7:54 AM, Rob Clark <robdcl...@gmail.com> wrote: >> This is a bit sad/annoying. But with current GPU firmware (at least on >> a5xx) we can support both draw-indirect and base-instance. But we can't >> support draw-indirect with a non-zero base-instance specified. So add a > > That means you should only expose one of those features, probably the > draw-indirect one. If someone desperately wants that functionality, > they can force it with MESA_EXTENSION_OVERRIDE. ARB_base_instance has > a specc'd interaction with ARB_indirect_draw... >
In that case, we should have driconf to force override extension (ie. not rely on user to remember magic MESA_EXTENSION_OVERRIDE incantations) for any games that might use base-instance but not draw-indirect.. BR, -R > -ilia > >> driconf option to hide the extension from games that are known to use >> both. >> >> Signed-off-by: Rob Clark <robdcl...@gmail.com> >> --- >> Tbh, I'm also not really sure what to do when/if we got updated firmware >> which handled draw-indirect with base-instance, since we'd need to make >> this option conditional on fw version. For STK that probably isn't a >> big deal since it doesn't use draw-indirect in a particularly useful way >> (the indirect buffer is generated on CPU). >> >> 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/drirc | 10 ++++++++++ >> src/util/xmlpool/t_options.h | 5 +++++ >> 6 files changed, 22 insertions(+) >> >> diff --git a/src/gallium/auxiliary/pipe-loader/driinfo_gallium.h >> b/src/gallium/auxiliary/pipe-loader/driinfo_gallium.h >> index 003a3d7089e..9c1705bd9a8 100644 >> --- a/src/gallium/auxiliary/pipe-loader/driinfo_gallium.h >> +++ b/src/gallium/auxiliary/pipe-loader/driinfo_gallium.h >> @@ -32,4 +32,5 @@ DRI_CONF_SECTION_END >> DRI_CONF_SECTION_MISCELLANEOUS >> DRI_CONF_ALWAYS_HAVE_DEPTH_BUFFER("false") >> DRI_CONF_GLSL_ZERO_INIT("false") >> + DRI_CONF_DISABLE_DRAW_INDIRECT("false") >> DRI_CONF_SECTION_END >> diff --git a/src/gallium/include/state_tracker/st_api.h >> b/src/gallium/include/state_tracker/st_api.h >> index 44d6b474f8f..20a7843992a 100644 >> --- a/src/gallium/include/state_tracker/st_api.h >> +++ b/src/gallium/include/state_tracker/st_api.h >> @@ -217,6 +217,7 @@ struct st_config_options >> boolean disable_blend_func_extended; >> boolean disable_glsl_line_continuations; >> boolean disable_shader_bit_encoding; >> + boolean disable_draw_indirect; >> boolean force_glsl_extensions_warn; >> unsigned force_glsl_version; >> boolean allow_glsl_extension_directive_midshader; >> diff --git a/src/gallium/state_trackers/dri/dri_screen.c >> b/src/gallium/state_trackers/dri/dri_screen.c >> index 1ca511612ad..035406a771e 100644 >> --- a/src/gallium/state_trackers/dri/dri_screen.c >> +++ b/src/gallium/state_trackers/dri/dri_screen.c >> @@ -68,6 +68,8 @@ dri_fill_st_options(struct dri_screen *screen) >> driQueryOptionb(optionCache, "disable_glsl_line_continuations"); >> options->disable_shader_bit_encoding = >> driQueryOptionb(optionCache, "disable_shader_bit_encoding"); >> + options->disable_draw_indirect = >> + driQueryOptionb(optionCache, "disable_draw_indirect"); >> options->force_glsl_extensions_warn = >> driQueryOptionb(optionCache, "force_glsl_extensions_warn"); >> options->force_glsl_version = >> diff --git a/src/mesa/state_tracker/st_extensions.c >> b/src/mesa/state_tracker/st_extensions.c >> index 9ef0df1e926..0c7e7e3abf1 100644 >> --- a/src/mesa/state_tracker/st_extensions.c >> +++ b/src/mesa/state_tracker/st_extensions.c >> @@ -909,6 +909,9 @@ void st_init_extensions(struct pipe_screen *screen, >> } >> } >> >> + if (options->disable_draw_indirect) >> + extensions->ARB_draw_indirect = GL_FALSE; >> + >> /* Expose the extensions which directly correspond to gallium formats. */ >> init_format_extensions(screen, extensions, rendertarget_mapping, >> ARRAY_SIZE(rendertarget_mapping), PIPE_TEXTURE_2D, >> diff --git a/src/util/drirc b/src/util/drirc >> index 9d27330036e..cea80ecc3d6 100644 >> --- a/src/util/drirc >> +++ b/src/util/drirc >> @@ -275,4 +275,14 @@ TODO: document the other workarounds. >> <option name="radeonsi_clear_db_cache_before_clear" >> value="true" /> >> </application> >> </device> >> + <device driver="msm"> >> + <!-- >> + hw supports both GL_ARB_base_instance and GL_ARB_draw_indirect, >> + but current firmware does not support both at the same time, so >> + we need to blacklist apps that are known to depend on both. >> + --> >> + <application name="SuperTuxKart" executable="supertuxkart"> >> + <option name="disable_draw_indirect" value="true"/> >> + </application> >> + </device> >> </driconf> >> diff --git a/src/util/xmlpool/t_options.h b/src/util/xmlpool/t_options.h >> index bd553085c86..0d1c597a830 100644 >> --- a/src/util/xmlpool/t_options.h >> +++ b/src/util/xmlpool/t_options.h >> @@ -379,6 +379,11 @@ DRI_CONF_OPT_BEGIN_B(glsl_zero_init, def) \ >> DRI_CONF_DESC(en,gettext("Force uninitialized variables to default >> to zero")) \ >> DRI_CONF_OPT_END >> >> +#define DRI_CONF_DISABLE_DRAW_INDIRECT(def) \ >> +DRI_CONF_OPT_BEGIN_B(disable_draw_indirect, def) \ >> + DRI_CONF_DESC(en, gettext("Disable the GL_ARB_draw_indirect extension")) >> \ >> +DRI_CONF_OPT_END >> + >> /** >> * \brief Initialization configuration options >> */ >> -- >> 2.13.6 >> >> _______________________________________________ >> mesa-dev mailing list >> mesa-dev@lists.freedesktop.org >> https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev