Mesa (lp-binning): llvmpipe: implement scissor test in triangle setup
Brian Paul
brianp at kemper.freedesktop.org
Fri Jan 15 19:06:47 UTC 2010
Module: Mesa
Branch: lp-binning
Commit: fdfe06ad804ea13e6e436d66c1bcafe0bde2f545
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=fdfe06ad804ea13e6e436d66c1bcafe0bde2f545
Author: Brian Paul <brianp at vmware.com>
Date: Fri Jan 15 12:06:00 2010 -0700
llvmpipe: implement scissor test in triangle setup
---
src/gallium/drivers/llvmpipe/lp_setup.c | 4 +++-
src/gallium/drivers/llvmpipe/lp_setup.h | 3 ++-
src/gallium/drivers/llvmpipe/lp_setup_context.h | 1 +
src/gallium/drivers/llvmpipe/lp_setup_tri.c | 7 +++++++
src/gallium/drivers/llvmpipe/lp_state_rasterizer.c | 3 ++-
5 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/src/gallium/drivers/llvmpipe/lp_setup.c b/src/gallium/drivers/llvmpipe/lp_setup.c
index 355c051..f52dce6 100644
--- a/src/gallium/drivers/llvmpipe/lp_setup.c
+++ b/src/gallium/drivers/llvmpipe/lp_setup.c
@@ -339,13 +339,15 @@ lp_setup_fence( struct setup_context *setup )
void
lp_setup_set_triangle_state( struct setup_context *setup,
unsigned cull_mode,
- boolean ccw_is_frontface)
+ boolean ccw_is_frontface,
+ boolean scissor )
{
LP_DBG(DEBUG_SETUP, "%s\n", __FUNCTION__);
setup->ccw_is_frontface = ccw_is_frontface;
setup->cullmode = cull_mode;
setup->triangle = first_triangle;
+ setup->scissor_test = scissor;
}
diff --git a/src/gallium/drivers/llvmpipe/lp_setup.h b/src/gallium/drivers/llvmpipe/lp_setup.h
index 407f752..5081da2 100644
--- a/src/gallium/drivers/llvmpipe/lp_setup.h
+++ b/src/gallium/drivers/llvmpipe/lp_setup.h
@@ -88,7 +88,8 @@ lp_setup_bind_framebuffer( struct setup_context *setup,
void
lp_setup_set_triangle_state( struct setup_context *setup,
unsigned cullmode,
- boolean front_is_ccw );
+ boolean front_is_ccw,
+ boolean scissor );
void
lp_setup_set_fs_inputs( struct setup_context *setup,
diff --git a/src/gallium/drivers/llvmpipe/lp_setup_context.h b/src/gallium/drivers/llvmpipe/lp_setup_context.h
index fc0aef1..a5fc34e 100644
--- a/src/gallium/drivers/llvmpipe/lp_setup_context.h
+++ b/src/gallium/drivers/llvmpipe/lp_setup_context.h
@@ -87,6 +87,7 @@ struct setup_context
boolean flatshade_first;
boolean ccw_is_frontface;
+ boolean scissor_test;
unsigned cullmode;
struct pipe_framebuffer_state fb;
diff --git a/src/gallium/drivers/llvmpipe/lp_setup_tri.c b/src/gallium/drivers/llvmpipe/lp_setup_tri.c
index ae354b3..018d254 100644
--- a/src/gallium/drivers/llvmpipe/lp_setup_tri.c
+++ b/src/gallium/drivers/llvmpipe/lp_setup_tri.c
@@ -293,6 +293,13 @@ do_triangle_ccw(struct setup_context *setup,
miny = (MIN3(y1, y2, y3) + (FIXED_ONE-1)) >> FIXED_ORDER;
maxy = (MAX3(y1, y2, y3) + (FIXED_ONE-1)) >> FIXED_ORDER;
+ if (setup->scissor_test) {
+ minx = MAX2(minx, setup->scissor.current.minx);
+ maxx = MIN2(maxx, setup->scissor.current.maxx);
+ miny = MAX2(miny, setup->scissor.current.miny);
+ maxy = MIN2(maxy, setup->scissor.current.maxy);
+ }
+
if (miny == maxy ||
minx == maxx) {
lp_scene_putback_data( scene, sizeof *tri );
diff --git a/src/gallium/drivers/llvmpipe/lp_state_rasterizer.c b/src/gallium/drivers/llvmpipe/lp_state_rasterizer.c
index 7d4c310..feb0128 100644
--- a/src/gallium/drivers/llvmpipe/lp_state_rasterizer.c
+++ b/src/gallium/drivers/llvmpipe/lp_state_rasterizer.c
@@ -61,7 +61,8 @@ void llvmpipe_bind_rasterizer_state(struct pipe_context *pipe,
if (llvmpipe->rasterizer) {
lp_setup_set_triangle_state( llvmpipe->setup,
llvmpipe->rasterizer->cull_mode,
- llvmpipe->rasterizer->front_winding == PIPE_WINDING_CCW );
+ llvmpipe->rasterizer->front_winding == PIPE_WINDING_CCW,
+ llvmpipe->rasterizer->scissor);
}
llvmpipe->dirty |= LP_NEW_RASTERIZER;
More information about the mesa-commit
mailing list