mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 03:08:05 +02:00
i965: Disable the swrast context setup on GL 3.1 core.
I've reviewed the code, and the swrast callsites remaining are all in drawpixels/copypixels/bitmap/accum, or _swrast_BlitFramebuffer that shouldn't be hit. A piglit run with the context setup disabled on legacy GL and GLES2 showed regressions only in the copypixels and drawpixels tests. If the context type is forced, this reduces the shader_runner maximum heap size for glsl-algebraic-add-add-1.shader_test from 15,137,496b to 4,165,376b. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Chad Versace <chad.versace@linux.intel.com>
This commit is contained in:
parent
993c52d0be
commit
67e9ae8563
3 changed files with 34 additions and 15 deletions
|
|
@ -140,7 +140,9 @@ brwCreateContext(int api,
|
|||
/* Initialize swrast, tnl driver tables: */
|
||||
intelInitSpanFuncs(ctx);
|
||||
|
||||
TNL_CONTEXT(ctx)->Driver.RunPipeline = _tnl_run_pipeline;
|
||||
TNLcontext *tnl = TNL_CONTEXT(ctx);
|
||||
if (tnl)
|
||||
tnl->Driver.RunPipeline = _tnl_run_pipeline;
|
||||
|
||||
ctx->Const.MaxDualSourceDrawBuffers = 1;
|
||||
ctx->Const.MaxDrawBuffers = BRW_MAX_DRAW_BUFFERS;
|
||||
|
|
|
|||
|
|
@ -500,7 +500,8 @@ intelInvalidateState(struct gl_context * ctx, GLuint new_state)
|
|||
{
|
||||
struct intel_context *intel = intel_context(ctx);
|
||||
|
||||
_swrast_InvalidateState(ctx, new_state);
|
||||
if (ctx->swrast_context)
|
||||
_swrast_InvalidateState(ctx, new_state);
|
||||
_vbo_InvalidateState(ctx, new_state);
|
||||
|
||||
intel->NewGLState |= new_state;
|
||||
|
|
@ -696,15 +697,25 @@ intelInitContext(struct intel_context *intel,
|
|||
ctx->Const.MaxRenderbufferSize = 2048;
|
||||
}
|
||||
|
||||
/* Initialize the software rasterizer and helper modules. */
|
||||
_swrast_CreateContext(ctx);
|
||||
/* Initialize the software rasterizer and helper modules.
|
||||
*
|
||||
* As of GL 3.1 core, the gen4+ driver doesn't need the swrast context for
|
||||
* software fallbacks (which we have to support on legacy GL to do weird
|
||||
* glDrawPixels(), glBitmap(), and other functions).
|
||||
*/
|
||||
if (intel->gen <= 3 || api != API_OPENGL_CORE) {
|
||||
_swrast_CreateContext(ctx);
|
||||
}
|
||||
|
||||
_vbo_CreateContext(ctx);
|
||||
_tnl_CreateContext(ctx);
|
||||
_swsetup_CreateContext(ctx);
|
||||
|
||||
/* Configure swrast to match hardware characteristics: */
|
||||
_swrast_allow_pixel_fog(ctx, false);
|
||||
_swrast_allow_vertex_fog(ctx, true);
|
||||
if (ctx->swrast_context) {
|
||||
_tnl_CreateContext(ctx);
|
||||
_swsetup_CreateContext(ctx);
|
||||
|
||||
/* Configure swrast to match hardware characteristics: */
|
||||
_swrast_allow_pixel_fog(ctx, false);
|
||||
_swrast_allow_vertex_fog(ctx, true);
|
||||
}
|
||||
|
||||
_mesa_meta_init(ctx);
|
||||
|
||||
|
|
@ -782,6 +793,7 @@ intelDestroyContext(__DRIcontext * driContextPriv)
|
|||
{
|
||||
struct intel_context *intel =
|
||||
(struct intel_context *) driContextPriv->driverPrivate;
|
||||
struct gl_context *ctx = &intel->ctx;
|
||||
|
||||
assert(intel); /* should never be null */
|
||||
if (intel) {
|
||||
|
|
@ -797,11 +809,14 @@ intelDestroyContext(__DRIcontext * driContextPriv)
|
|||
|
||||
intel->vtbl.destroy(intel);
|
||||
|
||||
_swsetup_DestroyContext(&intel->ctx);
|
||||
_tnl_DestroyContext(&intel->ctx);
|
||||
if (ctx->swrast_context) {
|
||||
_swsetup_DestroyContext(&intel->ctx);
|
||||
_tnl_DestroyContext(&intel->ctx);
|
||||
}
|
||||
_vbo_DestroyContext(&intel->ctx);
|
||||
|
||||
_swrast_DestroyContext(&intel->ctx);
|
||||
if (ctx->swrast_context)
|
||||
_swrast_DestroyContext(&intel->ctx);
|
||||
intel->Fallback = 0x0; /* don't call _swrast_Flush later */
|
||||
|
||||
intel_batchbuffer_free(intel);
|
||||
|
|
|
|||
|
|
@ -169,8 +169,10 @@ void
|
|||
intelInitSpanFuncs(struct gl_context * ctx)
|
||||
{
|
||||
struct swrast_device_driver *swdd = _swrast_GetDeviceDriverReference(ctx);
|
||||
swdd->SpanRenderStart = intelSpanRenderStart;
|
||||
swdd->SpanRenderFinish = intelSpanRenderFinish;
|
||||
if (swdd) {
|
||||
swdd->SpanRenderStart = intelSpanRenderStart;
|
||||
swdd->SpanRenderFinish = intelSpanRenderFinish;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue