summaryrefslogtreecommitdiffstats
path: root/src/mesa
diff options
context:
space:
mode:
authorKenneth Graunke <[email protected]>2013-02-02 12:33:21 -0800
committerKenneth Graunke <[email protected]>2013-02-03 13:40:31 -0800
commitb3efc5bea85a84493a4b81eea0d3c3acfe42813f (patch)
tree63a93e8ad0c9d0656cf57e93d470d74570ae4529 /src/mesa
parent488ddb247c0f188d3f918e5869a8e529766d13ba (diff)
i965: Refactor Gen6+ SF attribute override code.
The next patch will benefit from easy access to the source attribute number and whether or not we're swizzling. It doesn't want the final attr_override DWord form, however. NOTE: This is a candidate for all stable branches. Reviewed-by: Paul Berry <[email protected]> Tested-by: Martin Steigerwald <[email protected]> Signed-off-by: Kenneth Graunke <[email protected]>
Diffstat (limited to 'src/mesa')
-rw-r--r--src/mesa/drivers/dri/i965/gen6_sf_state.c25
1 files changed, 13 insertions, 12 deletions
diff --git a/src/mesa/drivers/dri/i965/gen6_sf_state.c b/src/mesa/drivers/dri/i965/gen6_sf_state.c
index c1bc252cb0f..bd7d4610d46 100644
--- a/src/mesa/drivers/dri/i965/gen6_sf_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_sf_state.c
@@ -56,7 +56,6 @@ uint32_t
get_attr_override(struct brw_vue_map *vue_map, int urb_entry_read_offset,
int fs_attr, bool two_side_color)
{
- int attr_override, slot;
int vs_attr = _mesa_frag_attrib_to_vert_result(fs_attr);
if (vs_attr < 0 || vs_attr == VERT_RESULT_HPOS) {
/* These attributes will be overwritten by the fragment shader's
@@ -67,7 +66,7 @@ get_attr_override(struct brw_vue_map *vue_map, int urb_entry_read_offset,
}
/* Find the VUE slot for this attribute. */
- slot = vue_map->vert_result_to_slot[vs_attr];
+ int slot = vue_map->vert_result_to_slot[vs_attr];
/* If there was only a back color written but not front, use back
* as the color instead of undefined
@@ -89,23 +88,25 @@ get_attr_override(struct brw_vue_map *vue_map, int urb_entry_read_offset,
* Each increment of urb_entry_read_offset represents a 256-bit value, so
* it counts for two 128-bit VUE slots.
*/
- attr_override = slot - 2 * urb_entry_read_offset;
- assert (attr_override >= 0 && attr_override < 32);
+ int source_attr = slot - 2 * urb_entry_read_offset;
+ assert(source_attr >= 0 && source_attr < 32);
/* If we are doing two-sided color, and the VUE slot following this one
* represents a back-facing color, then we need to instruct the SF unit to
* do back-facing swizzling.
*/
- if (two_side_color) {
- if (vue_map->slot_to_vert_result[slot] == VERT_RESULT_COL0 &&
- vue_map->slot_to_vert_result[slot+1] == VERT_RESULT_BFC0)
- attr_override |= (ATTRIBUTE_SWIZZLE_INPUTATTR_FACING << ATTRIBUTE_SWIZZLE_SHIFT);
- else if (vue_map->slot_to_vert_result[slot] == VERT_RESULT_COL1 &&
- vue_map->slot_to_vert_result[slot+1] == VERT_RESULT_BFC1)
- attr_override |= (ATTRIBUTE_SWIZZLE_INPUTATTR_FACING << ATTRIBUTE_SWIZZLE_SHIFT);
+ bool swizzling = two_side_color &&
+ ((vue_map->slot_to_vert_result[slot] == VERT_RESULT_COL0 &&
+ vue_map->slot_to_vert_result[slot+1] == VERT_RESULT_BFC0) ||
+ (vue_map->slot_to_vert_result[slot] == VERT_RESULT_COL1 &&
+ vue_map->slot_to_vert_result[slot+1] == VERT_RESULT_BFC1));
+
+ if (swizzling) {
+ return source_attr |
+ (ATTRIBUTE_SWIZZLE_INPUTATTR_FACING << ATTRIBUTE_SWIZZLE_SHIFT);
}
- return attr_override;
+ return source_attr;
}
static void