From 4bb8661b1ba69a223eb4d186ed9528525c3269f3 Mon Sep 17 00:00:00 2001 From: Paul Berry Date: Thu, 13 Dec 2012 12:45:54 -0800 Subject: [PATCH] gallium: Disable varying packing on hardware with <=8 texture indirections. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit In practice this will disable varying packing on R300, R400, i915g, and nv30. Reviewed-by: Marek Olšák --- src/mesa/state_tracker/st_extensions.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c index 726d86846a9..f3f01ebd5e4 100644 --- a/src/mesa/state_tracker/st_extensions.c +++ b/src/mesa/state_tracker/st_extensions.c @@ -663,4 +663,18 @@ void st_init_extensions(struct st_context *st) } if (screen->get_param(screen, PIPE_CAP_TEXTURE_BUFFER_OBJECTS)) ctx->Extensions.ARB_texture_buffer_object = GL_TRUE; + + /* Unpacking a varying in the fragment shader costs 1 texture indirection. + * If the number of available texture indirections is very limited, then we + * prefer to disable varying packing rather than run the risk of varying + * packing preventing a shader from running. + */ + if (screen->get_shader_param(screen, PIPE_SHADER_FRAGMENT, + PIPE_SHADER_CAP_MAX_TEX_INDIRECTIONS) <= 8) { + /* We can't disable varying packing if transform feedback is available, + * because transform feedback code assumes a packed varying layout. + */ + if (!ctx->Extensions.EXT_transform_feedback) + ctx->Const.DisableVaryingPacking = GL_TRUE; + } } -- 2.30.2