gallium: Disable varying packing on hardware with <=8 texture indirections.
In practice this will disable varying packing on R300, R400, i915g, and nv30. Reviewed-by: Marek Olšák <maraeo@gmail.com>
This commit is contained in:
@@ -663,4 +663,18 @@ void st_init_extensions(struct st_context *st)
|
|||||||
}
|
}
|
||||||
if (screen->get_param(screen, PIPE_CAP_TEXTURE_BUFFER_OBJECTS))
|
if (screen->get_param(screen, PIPE_CAP_TEXTURE_BUFFER_OBJECTS))
|
||||||
ctx->Extensions.ARB_texture_buffer_object = GL_TRUE;
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user