summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKenneth Graunke <kenneth@whitecape.org>2013-02-02 12:33:21 -0800
committerAndreas Boll <andreas.boll.dev@gmail.com>2013-02-13 21:48:37 +0100
commitd47020b6d4d810ac3f20c1e47c90d9de3fb8a53a (patch)
tree3b0a07d1fa713e40f999b46471d34b3a48b944e0
parent52c711e5b20967a90cda431b188f1071eec73558 (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. Reviewed-by: Paul Berry <stereotype441@gmail.com> Tested-by: Martin Steigerwald <martin@lichtvoll.de> Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> (cherry picked from commit b3efc5bea85a84493a4b81eea0d3c3acfe42813f)
-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 c1bc252cb0..bd7d4610d4 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