From 54a62f8806df29d79f1e630bae6d1f45fb15c69f Mon Sep 17 00:00:00 2001 From: Paul Berry Date: Thu, 25 Aug 2011 13:27:57 -0700 Subject: [PATCH] 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 --- src/mesa/drivers/dri/i965/brw_clip.h | 9 +++++++++ src/mesa/drivers/dri/i965/brw_clip_unfilled.c | 14 +++++++++----- src/mesa/drivers/dri/i965/brw_clip_util.c | 8 ++++---- 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])); -- 2.30.2