summaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers
diff options
context:
space:
mode:
authorCourtney Goeltzenleuchter <courtney@LunarG.com>2013-11-13 14:02:12 -0700
committerIan Romanick <ian.d.romanick@intel.com>2014-01-20 11:29:42 -0800
commita9c73fb778a41b422a811c67b4aba806d4dfb7c8 (patch)
tree1ee48d66f17021d2c33030a0e1d93caa10b89e87 /src/mesa/drivers
parent1f59e963b40a260d3087f83799de0a6fb0941d07 (diff)
downloadexternal_mesa3d-a9c73fb778a41b422a811c67b4aba806d4dfb7c8.zip
external_mesa3d-a9c73fb778a41b422a811c67b4aba806d4dfb7c8.tar.gz
external_mesa3d-a9c73fb778a41b422a811c67b4aba806d4dfb7c8.tar.bz2
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.c2
-rw-r--r--src/mesa/drivers/common/meta.c6
-rw-r--r--src/mesa/drivers/dri/i915/i830_state.c24
-rw-r--r--src/mesa/drivers/dri/i915/i915_state.c24
-rw-r--r--src/mesa/drivers/dri/i915/intel_fbo.c2
-rw-r--r--src/mesa/drivers/dri/i965/brw_clear.c12
-rw-r--r--src/mesa/drivers/dri/i965/brw_sf_state.c2
-rw-r--r--src/mesa/drivers/dri/i965/gen6_sf_state.c2
-rw-r--r--src/mesa/drivers/dri/i965/gen7_sf_state.c2
-rw-r--r--src/mesa/drivers/dri/i965/intel_fbo.c2
-rw-r--r--src/mesa/drivers/dri/radeon/radeon_common.c6
11 files changed, 46 insertions, 38 deletions
diff --git a/src/mesa/drivers/common/driverfuncs.c b/src/mesa/drivers/common/driverfuncs.c
index e8dcb24..6d56838 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 1294514..173b45c 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 7fe20bf..bae9204 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 55b5ae2..94be237 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 9272fca..64262a1 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 84e321c..72950cb 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 02c181d..db3a34d 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 ed0b429..ec14be4 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 8d86280..7fe1435 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 f094718..6f5070a 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 2df4388..e900bc5 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);