summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Berry <[email protected]>2011-08-25 13:27:57 -0700
committerPaul Berry <[email protected]>2011-09-06 11:05:25 -0700
commit54a62f8806df29d79f1e630bae6d1f45fb15c69f (patch)
treefe3804fbe0243c915c8f4020c397fae0b633df1e
parent620f06b12600d509406543738ed8bff27715df2c (diff)
i965: clip: Add a function to determine whether a vert_result is in use.
Previously we would examine the offset[] array (since an offset of 0 meant "not in use"). This paves the way for removing the offset[] array. Reviewed-by: Eric Anholt <[email protected]>
-rw-r--r--src/mesa/drivers/dri/i965/brw_clip.h9
-rw-r--r--src/mesa/drivers/dri/i965/brw_clip_unfilled.c14
-rw-r--r--src/mesa/drivers/dri/i965/brw_clip_util.c8
3 files changed, 22 insertions, 9 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_clip.h b/src/mesa/drivers/dri/i965/brw_clip.h
index 0324feac84f..109a0b62d0a 100644
--- a/src/mesa/drivers/dri/i965/brw_clip.h
+++ b/src/mesa/drivers/dri/i965/brw_clip.h
@@ -126,6 +126,15 @@ struct brw_clip_compile {
#define ATTR_SIZE (4*4)
+/**
+ * True if the given vert_result is one of the outputs of the vertex shader.
+ */
+static inline bool brw_clip_have_vert_result(struct brw_clip_compile *c,
+ GLuint vert_result)
+{
+ return (c->key.attrs & BITFIELD64_BIT(vert_result)) ? 1 : 0;
+}
+
/* Points are only culled, so no need for a clip routine, however it
* works out easier to have a dummy one.
*/
diff --git a/src/mesa/drivers/dri/i965/brw_clip_unfilled.c b/src/mesa/drivers/dri/i965/brw_clip_unfilled.c
index da587960cdf..53345f15076 100644
--- a/src/mesa/drivers/dri/i965/brw_clip_unfilled.c
+++ b/src/mesa/drivers/dri/i965/brw_clip_unfilled.c
@@ -130,8 +130,10 @@ static void copy_bfc( struct brw_clip_compile *c )
/* Do we have any colors to copy?
*/
- if (!(c->offset[VERT_RESULT_COL0] && c->offset[VERT_RESULT_BFC0]) &&
- !(c->offset[VERT_RESULT_COL1] && c->offset[VERT_RESULT_BFC1]))
+ if (!(brw_clip_have_vert_result(c, VERT_RESULT_COL0) &&
+ brw_clip_have_vert_result(c, VERT_RESULT_BFC0)) &&
+ !(brw_clip_have_vert_result(c, VERT_RESULT_COL1) &&
+ brw_clip_have_vert_result(c, VERT_RESULT_BFC1)))
return;
/* In some wierd degnerate cases we can end up testing the
@@ -154,12 +156,14 @@ static void copy_bfc( struct brw_clip_compile *c )
GLuint i;
for (i = 0; i < 3; i++) {
- if (c->offset[VERT_RESULT_COL0] && c->offset[VERT_RESULT_BFC0])
+ if (brw_clip_have_vert_result(c, VERT_RESULT_COL0) &&
+ brw_clip_have_vert_result(c, VERT_RESULT_BFC0))
brw_MOV(p,
byte_offset(c->reg.vertex[i], c->offset[VERT_RESULT_COL0]),
byte_offset(c->reg.vertex[i], c->offset[VERT_RESULT_BFC0]));
- if (c->offset[VERT_RESULT_COL1] && c->offset[VERT_RESULT_BFC1])
+ if (brw_clip_have_vert_result(c, VERT_RESULT_COL1) &&
+ brw_clip_have_vert_result(c, VERT_RESULT_BFC1))
brw_MOV(p,
byte_offset(c->reg.vertex[i], c->offset[VERT_RESULT_COL1]),
byte_offset(c->reg.vertex[i], c->offset[VERT_RESULT_BFC1]));
@@ -449,7 +453,7 @@ void brw_emit_unfilled_clip( struct brw_clip_compile *c )
brw_clip_tri_init_vertices(c);
brw_clip_init_ff_sync(c);
- assert(c->offset[VERT_RESULT_EDGE]);
+ assert(brw_clip_have_vert_result(c, VERT_RESULT_EDGE));
if (c->key.fill_ccw == CLIP_CULL &&
c->key.fill_cw == CLIP_CULL) {
diff --git a/src/mesa/drivers/dri/i965/brw_clip_util.c b/src/mesa/drivers/dri/i965/brw_clip_util.c
index e90f14687c0..cfbb497f9d0 100644
--- a/src/mesa/drivers/dri/i965/brw_clip_util.c
+++ b/src/mesa/drivers/dri/i965/brw_clip_util.c
@@ -290,22 +290,22 @@ void brw_clip_copy_colors( struct brw_clip_compile *c,
{
struct brw_compile *p = &c->func;
- if (c->offset[VERT_RESULT_COL0])
+ if (brw_clip_have_vert_result(c, VERT_RESULT_COL0))
brw_MOV(p,
byte_offset(c->reg.vertex[to], c->offset[VERT_RESULT_COL0]),
byte_offset(c->reg.vertex[from], c->offset[VERT_RESULT_COL0]));
- if (c->offset[VERT_RESULT_COL1])
+ if (brw_clip_have_vert_result(c, VERT_RESULT_COL1))
brw_MOV(p,
byte_offset(c->reg.vertex[to], c->offset[VERT_RESULT_COL1]),
byte_offset(c->reg.vertex[from], c->offset[VERT_RESULT_COL1]));
- if (c->offset[VERT_RESULT_BFC0])
+ if (brw_clip_have_vert_result(c, VERT_RESULT_BFC0))
brw_MOV(p,
byte_offset(c->reg.vertex[to], c->offset[VERT_RESULT_BFC0]),
byte_offset(c->reg.vertex[from], c->offset[VERT_RESULT_BFC0]));
- if (c->offset[VERT_RESULT_BFC1])
+ if (brw_clip_have_vert_result(c, VERT_RESULT_BFC1))
brw_MOV(p,
byte_offset(c->reg.vertex[to], c->offset[VERT_RESULT_BFC1]),
byte_offset(c->reg.vertex[from], c->offset[VERT_RESULT_BFC1]));