diff options
author | Courtney Goeltzenleuchter <courtney@LunarG.com> | 2013-11-13 14:02:12 -0700 |
---|---|---|
committer | Ian Romanick <ian.d.romanick@intel.com> | 2014-01-20 11:29:42 -0800 |
commit | a9c73fb778a41b422a811c67b4aba806d4dfb7c8 (patch) | |
tree | 1ee48d66f17021d2c33030a0e1d93caa10b89e87 /src/mesa/drivers | |
parent | 1f59e963b40a260d3087f83799de0a6fb0941d07 (diff) |
mesa: Update gl_scissor_attrib to support ARB_viewport_array
Update Mesa and drivers to access updated gl_scissor_attrib.
Now have an enable bitfield and array of gl_scissor_rects.
Drivers have been updated to the new scissor enable state
attribute (gl_context.scissor.EnableFlags) but still treat it
as a single boolean which is okay as mesa will only use
bit 0 when communicating with a driver that does not support
ARB_viewport_array.
v2 (idr): Rebase fixes.
v3 (idr): Small code formatting fix suggsted by Ken.
Signed-off-by: Courtney Goeltzenleuchter <courtney@LunarG.com>
Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Diffstat (limited to 'src/mesa/drivers')
-rw-r--r-- | src/mesa/drivers/common/driverfuncs.c | 2 | ||||
-rw-r--r-- | src/mesa/drivers/common/meta.c | 6 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i915/i830_state.c | 24 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i915/i915_state.c | 24 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i915/intel_fbo.c | 2 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_clear.c | 12 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_sf_state.c | 2 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/gen6_sf_state.c | 2 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/gen7_sf_state.c | 2 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/intel_fbo.c | 2 | ||||
-rw-r--r-- | src/mesa/drivers/dri/radeon/radeon_common.c | 6 |
11 files changed, 46 insertions, 38 deletions
diff --git a/src/mesa/drivers/common/driverfuncs.c b/src/mesa/drivers/common/driverfuncs.c index e8dcb2476f0..6d56838cd3c 100644 --- a/src/mesa/drivers/common/driverfuncs.c +++ b/src/mesa/drivers/common/driverfuncs.c @@ -274,7 +274,7 @@ _mesa_init_driver_state(struct gl_context *ctx) ctx->Driver.Enable(ctx, GL_LIGHTING, ctx->Light.Enabled); ctx->Driver.Enable(ctx, GL_LINE_SMOOTH, ctx->Line.SmoothFlag); ctx->Driver.Enable(ctx, GL_POLYGON_STIPPLE, ctx->Polygon.StippleFlag); - ctx->Driver.Enable(ctx, GL_SCISSOR_TEST, ctx->Scissor.Enabled); + ctx->Driver.Enable(ctx, GL_SCISSOR_TEST, ctx->Scissor.EnableFlags); ctx->Driver.Enable(ctx, GL_STENCIL_TEST, ctx->Stencil._Enabled); ctx->Driver.Enable(ctx, GL_TEXTURE_1D, GL_FALSE); ctx->Driver.Enable(ctx, GL_TEXTURE_2D, GL_FALSE); diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c index 129451471d5..173b45cea0a 100644 --- a/src/mesa/drivers/common/meta.c +++ b/src/mesa/drivers/common/meta.c @@ -933,9 +933,9 @@ _mesa_meta_end(struct gl_context *ctx) } if (state & MESA_META_SCISSOR) { - _mesa_set_enable(ctx, GL_SCISSOR_TEST, save->Scissor.Enabled); - _mesa_Scissor(save->Scissor.X, save->Scissor.Y, - save->Scissor.Width, save->Scissor.Height); + _mesa_set_enable(ctx, GL_SCISSOR_TEST, save->Scissor.EnableFlags); + _mesa_Scissor(save->Scissor.ScissorArray[0].X, save->Scissor.ScissorArray[0].Y, + save->Scissor.ScissorArray[0].Width, save->Scissor.ScissorArray[0].Height); } if (state & MESA_META_SHADER) { diff --git a/src/mesa/drivers/dri/i915/i830_state.c b/src/mesa/drivers/dri/i915/i830_state.c index 7fe20bf70bd..bae9204834a 100644 --- a/src/mesa/drivers/dri/i915/i830_state.c +++ b/src/mesa/drivers/dri/i915/i830_state.c @@ -536,23 +536,27 @@ i830Scissor(struct gl_context * ctx) return; DBG("%s %d,%d %dx%d\n", __FUNCTION__, - ctx->Scissor.X, ctx->Scissor.Y, - ctx->Scissor.Width, ctx->Scissor.Height); + ctx->Scissor.ScissorArray[0].X, ctx->Scissor.ScissorArray[0].Y, + ctx->Scissor.ScissorArray[0].Width, ctx->Scissor.ScissorArray[0].Height); if (_mesa_is_winsys_fbo(ctx->DrawBuffer)) { - x1 = ctx->Scissor.X; - y1 = ctx->DrawBuffer->Height - (ctx->Scissor.Y + ctx->Scissor.Height); - x2 = ctx->Scissor.X + ctx->Scissor.Width - 1; - y2 = y1 + ctx->Scissor.Height - 1; + x1 = ctx->Scissor.ScissorArray[0].X; + y1 = ctx->DrawBuffer->Height - (ctx->Scissor.ScissorArray[0].Y + + ctx->Scissor.ScissorArray[0].Height); + x2 = ctx->Scissor.ScissorArray[0].X + + ctx->Scissor.ScissorArray[0].Width - 1; + y2 = y1 + ctx->Scissor.ScissorArray[0].Height - 1; DBG("%s %d..%d,%d..%d (inverted)\n", __FUNCTION__, x1, x2, y1, y2); } else { /* FBO - not inverted */ - x1 = ctx->Scissor.X; - y1 = ctx->Scissor.Y; - x2 = ctx->Scissor.X + ctx->Scissor.Width - 1; - y2 = ctx->Scissor.Y + ctx->Scissor.Height - 1; + x1 = ctx->Scissor.ScissorArray[0].X; + y1 = ctx->Scissor.ScissorArray[0].Y; + x2 = ctx->Scissor.ScissorArray[0].X + + ctx->Scissor.ScissorArray[0].Width - 1; + y2 = ctx->Scissor.ScissorArray[0].Y + + ctx->Scissor.ScissorArray[0].Height - 1; DBG("%s %d..%d,%d..%d (not inverted)\n", __FUNCTION__, x1, x2, y1, y2); } diff --git a/src/mesa/drivers/dri/i915/i915_state.c b/src/mesa/drivers/dri/i915/i915_state.c index 55b5ae22862..94be2379854 100644 --- a/src/mesa/drivers/dri/i915/i915_state.c +++ b/src/mesa/drivers/dri/i915/i915_state.c @@ -510,23 +510,27 @@ i915Scissor(struct gl_context * ctx) return; DBG("%s %d,%d %dx%d\n", __FUNCTION__, - ctx->Scissor.X, ctx->Scissor.Y, - ctx->Scissor.Width, ctx->Scissor.Height); + ctx->Scissor.ScissorArray[0].X, ctx->Scissor.ScissorArray[0].Y, + ctx->Scissor.ScissorArray[0].Width, ctx->Scissor.ScissorArray[0].Height); if (_mesa_is_winsys_fbo(ctx->DrawBuffer)) { - x1 = ctx->Scissor.X; - y1 = ctx->DrawBuffer->Height - (ctx->Scissor.Y + ctx->Scissor.Height); - x2 = ctx->Scissor.X + ctx->Scissor.Width - 1; - y2 = y1 + ctx->Scissor.Height - 1; + x1 = ctx->Scissor.ScissorArray[0].X; + y1 = ctx->DrawBuffer->Height - (ctx->Scissor.ScissorArray[0].Y + + ctx->Scissor.ScissorArray[0].Height); + x2 = ctx->Scissor.ScissorArray[0].X + + ctx->Scissor.ScissorArray[0].Width - 1; + y2 = y1 + ctx->Scissor.ScissorArray[0].Height - 1; DBG("%s %d..%d,%d..%d (inverted)\n", __FUNCTION__, x1, x2, y1, y2); } else { /* FBO - not inverted */ - x1 = ctx->Scissor.X; - y1 = ctx->Scissor.Y; - x2 = ctx->Scissor.X + ctx->Scissor.Width - 1; - y2 = ctx->Scissor.Y + ctx->Scissor.Height - 1; + x1 = ctx->Scissor.ScissorArray[0].X; + y1 = ctx->Scissor.ScissorArray[0].Y; + x2 = ctx->Scissor.ScissorArray[0].X + + ctx->Scissor.ScissorArray[0].Width - 1; + y2 = ctx->Scissor.ScissorArray[0].Y + + ctx->Scissor.ScissorArray[0].Height - 1; DBG("%s %d..%d,%d..%d (not inverted)\n", __FUNCTION__, x1, x2, y1, y2); } diff --git a/src/mesa/drivers/dri/i915/intel_fbo.c b/src/mesa/drivers/dri/i915/intel_fbo.c index 9272fca51ca..64262a1ca38 100644 --- a/src/mesa/drivers/dri/i915/intel_fbo.c +++ b/src/mesa/drivers/dri/i915/intel_fbo.c @@ -658,7 +658,7 @@ intel_blit_framebuffer_with_blitter(struct gl_context *ctx, srcY0 >= 0 && srcY1 <= readFb->Height && dstX0 >= 0 && dstX1 <= drawFb->Width && dstY0 >= 0 && dstY1 <= drawFb->Height && - !ctx->Scissor.Enabled)) { + !ctx->Scissor.EnableFlags)) { perf_debug("glBlitFramebuffer(): non-1:1 blit. " "Falling back to software rendering.\n"); return mask; diff --git a/src/mesa/drivers/dri/i965/brw_clear.c b/src/mesa/drivers/dri/i965/brw_clear.c index 84e321c0731..72950cb518b 100644 --- a/src/mesa/drivers/dri/i965/brw_clear.c +++ b/src/mesa/drivers/dri/i965/brw_clear.c @@ -83,10 +83,10 @@ debug_mask(const char *name, GLbitfield mask) static bool noop_scissor(struct gl_context *ctx, struct gl_framebuffer *fb) { - return ctx->Scissor.X <= 0 && - ctx->Scissor.Y <= 0 && - ctx->Scissor.Width >= fb->Width && - ctx->Scissor.Height >= fb->Height; + return ctx->Scissor.ScissorArray[0].X <= 0 && + ctx->Scissor.ScissorArray[0].Y <= 0 && + ctx->Scissor.ScissorArray[0].Width >= fb->Width && + ctx->Scissor.ScissorArray[0].Height >= fb->Height; } /** @@ -121,7 +121,7 @@ brw_fast_clear_depth(struct gl_context *ctx) * a previous clear had happened at a different clear value and resolve it * first. */ - if (ctx->Scissor.Enabled && !noop_scissor(ctx, fb)) { + if (ctx->Scissor.EnableFlags && !noop_scissor(ctx, fb)) { perf_debug("Failed to fast clear depth due to scissor being enabled. " "Possible 5%% performance win if avoided.\n"); return false; @@ -218,7 +218,7 @@ brw_clear(struct gl_context *ctx, GLbitfield mask) { struct brw_context *brw = brw_context(ctx); struct gl_framebuffer *fb = ctx->DrawBuffer; - bool partial_clear = ctx->Scissor.Enabled && !noop_scissor(ctx, fb); + bool partial_clear = ctx->Scissor.EnableFlags && !noop_scissor(ctx, fb); if (!_mesa_check_conditional_render(ctx)) return; diff --git a/src/mesa/drivers/dri/i965/brw_sf_state.c b/src/mesa/drivers/dri/i965/brw_sf_state.c index 02c181de65d..db3a34d3e0e 100644 --- a/src/mesa/drivers/dri/i965/brw_sf_state.c +++ b/src/mesa/drivers/dri/i965/brw_sf_state.c @@ -179,7 +179,7 @@ static void upload_sf_unit( struct brw_context *brw ) sf->sf5.viewport_transform = 1; /* _NEW_SCISSOR */ - if (ctx->Scissor.Enabled) + if (ctx->Scissor.EnableFlags) sf->sf6.scissor = 1; /* _NEW_POLYGON */ diff --git a/src/mesa/drivers/dri/i965/gen6_sf_state.c b/src/mesa/drivers/dri/i965/gen6_sf_state.c index ed0b4294caf..ec14be46a70 100644 --- a/src/mesa/drivers/dri/i965/gen6_sf_state.c +++ b/src/mesa/drivers/dri/i965/gen6_sf_state.c @@ -298,7 +298,7 @@ upload_sf_state(struct brw_context *brw) } /* _NEW_SCISSOR */ - if (ctx->Scissor.Enabled) + if (ctx->Scissor.EnableFlags) dw3 |= GEN6_SF_SCISSOR_ENABLE; /* _NEW_POLYGON */ diff --git a/src/mesa/drivers/dri/i965/gen7_sf_state.c b/src/mesa/drivers/dri/i965/gen7_sf_state.c index 8d86280d75e..7fe1435b2b7 100644 --- a/src/mesa/drivers/dri/i965/gen7_sf_state.c +++ b/src/mesa/drivers/dri/i965/gen7_sf_state.c @@ -186,7 +186,7 @@ upload_sf_state(struct brw_context *brw) } /* _NEW_SCISSOR */ - if (ctx->Scissor.Enabled) + if (ctx->Scissor.EnableFlags) dw2 |= GEN6_SF_SCISSOR_ENABLE; /* _NEW_LINE */ diff --git a/src/mesa/drivers/dri/i965/intel_fbo.c b/src/mesa/drivers/dri/i965/intel_fbo.c index f094718c849..6f5070a7956 100644 --- a/src/mesa/drivers/dri/i965/intel_fbo.c +++ b/src/mesa/drivers/dri/i965/intel_fbo.c @@ -715,7 +715,7 @@ intel_blit_framebuffer_with_blitter(struct gl_context *ctx, srcY0 >= 0 && srcY1 <= readFb->Height && dstX0 >= 0 && dstX1 <= drawFb->Width && dstY0 >= 0 && dstY1 <= drawFb->Height && - !ctx->Scissor.Enabled)) { + !(ctx->Scissor.EnableFlags))) { perf_debug("glBlitFramebuffer(): non-1:1 blit. " "Falling back to software rendering.\n"); return mask; diff --git a/src/mesa/drivers/dri/radeon/radeon_common.c b/src/mesa/drivers/dri/radeon/radeon_common.c index 2df4388c0ad..e900bc59bd0 100644 --- a/src/mesa/drivers/dri/radeon/radeon_common.c +++ b/src/mesa/drivers/dri/radeon/radeon_common.c @@ -105,8 +105,8 @@ void radeonSetCliprects(radeonContextPtr radeon) void radeonUpdateScissor( struct gl_context *ctx ) { radeonContextPtr rmesa = RADEON_CONTEXT(ctx); - GLint x = ctx->Scissor.X, y = ctx->Scissor.Y; - GLsizei w = ctx->Scissor.Width, h = ctx->Scissor.Height; + GLint x = ctx->Scissor.ScissorArray[0].X, y = ctx->Scissor.ScissorArray[0].Y; + GLsizei w = ctx->Scissor.ScissorArray[0].Width, h = ctx->Scissor.ScissorArray[0].Height; int x1, y1, x2, y2; int min_x, min_y, max_x, max_y; @@ -145,7 +145,7 @@ void radeonUpdateScissor( struct gl_context *ctx ) void radeonScissor(struct gl_context *ctx) { radeonContextPtr radeon = RADEON_CONTEXT(ctx); - if (ctx->Scissor.Enabled) { + if (ctx->Scissor.EnableFlags) { /* We don't pipeline cliprect changes */ radeon_firevertices(radeon); radeonUpdateScissor(ctx); |