summaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers
diff options
context:
space:
mode:
authorPaul Berry <[email protected]>2011-08-30 11:46:29 -0700
committerPaul Berry <[email protected]>2011-09-06 11:02:32 -0700
commit6489a1d5bab75589569658d374257bf23cb67a23 (patch)
treecb028482b9f8a83b1b147645c42133bea7d49e36 /src/mesa/drivers
parentafaf024f57bebc112599a4a4571776d94f3df289 (diff)
Refactor code that converts between gl_vert_result and gl_frag_attrib.
Previously, this conversion was duplicated in several places in the i965 driver. This patch moves it to a common location in mtypes.h, near the declaration of gl_vert_result and gl_frag_attrib. I've also added comments to remind us that we may need to revisit the conversion code when adding elements to gl_vert_result and gl_frag_attrib. Reviewed-by: Eric Anholt <[email protected]>
Diffstat (limited to 'src/mesa/drivers')
-rw-r--r--src/mesa/drivers/dri/i965/brw_fs.cpp16
-rw-r--r--src/mesa/drivers/dri/i965/brw_vs_constval.c8
-rw-r--r--src/mesa/drivers/dri/i965/brw_wm_pass2.c9
-rw-r--r--src/mesa/drivers/dri/i965/gen6_sf_state.c15
4 files changed, 9 insertions, 39 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp
index 8b85f3bc1ed..93323739a25 100644
--- a/src/mesa/drivers/dri/i965/brw_fs.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
@@ -672,14 +672,7 @@ fs_visitor::calculate_urb_setup()
/* FINISHME: The sf doesn't map VS->FS inputs for us very well. */
for (unsigned int i = 0; i < VERT_RESULT_MAX; i++) {
if (c->key.vp_outputs_written & BITFIELD64_BIT(i)) {
- int fp_index;
-
- if (i >= VERT_RESULT_VAR0)
- fp_index = i - (VERT_RESULT_VAR0 - FRAG_ATTRIB_VAR0);
- else if (i <= VERT_RESULT_TEX7)
- fp_index = i;
- else
- fp_index = -1;
+ int fp_index = vert_result_to_frag_attrib(i);
if (fp_index >= 0)
urb_setup[fp_index] = urb_next++;
@@ -1828,17 +1821,12 @@ brw_fs_precompile(struct gl_context *ctx, struct gl_shader_program *prog)
key.vp_outputs_written |= BITFIELD64_BIT(FRAG_ATTRIB_WPOS);
for (int i = 0; i < FRAG_ATTRIB_MAX; i++) {
- int vp_index = -1;
-
if (!(fp->Base.InputsRead & BITFIELD64_BIT(i)))
continue;
key.proj_attrib_mask |= 1 << i;
- if (i <= FRAG_ATTRIB_TEX7)
- vp_index = i;
- else if (i >= FRAG_ATTRIB_VAR0)
- vp_index = i - FRAG_ATTRIB_VAR0 + VERT_RESULT_VAR0;
+ int vp_index = vert_result_to_frag_attrib(i);
if (vp_index >= 0)
key.vp_outputs_written |= BITFIELD64_BIT(vp_index);
diff --git a/src/mesa/drivers/dri/i965/brw_vs_constval.c b/src/mesa/drivers/dri/i965/brw_vs_constval.c
index 47cc0a7da7a..4d9d4b714e8 100644
--- a/src/mesa/drivers/dri/i965/brw_vs_constval.c
+++ b/src/mesa/drivers/dri/i965/brw_vs_constval.c
@@ -144,14 +144,10 @@ static void calc_sizes( struct tracker *t )
* which describes the fragment program input sizes.
*/
for (vertRes = VERT_RESULT_TEX0; vertRes < VERT_RESULT_MAX; vertRes++) {
- GLint fragAttrib;
/* map vertex program output index to fragment program input index */
- if (vertRes <= VERT_RESULT_TEX7)
- fragAttrib = FRAG_ATTRIB_TEX0 + vertRes - VERT_RESULT_TEX0;
- else if (vertRes >= VERT_RESULT_VAR0)
- fragAttrib = FRAG_ATTRIB_VAR0 + vertRes - VERT_RESULT_VAR0;
- else
+ GLint fragAttrib = vert_result_to_frag_attrib(vertRes);
+ if (fragAttrib < 0)
continue;
assert(fragAttrib >= FRAG_ATTRIB_TEX0);
assert(fragAttrib <= FRAG_ATTRIB_MAX);
diff --git a/src/mesa/drivers/dri/i965/brw_wm_pass2.c b/src/mesa/drivers/dri/i965/brw_wm_pass2.c
index 8c2b9e7020b..f1d70f79a77 100644
--- a/src/mesa/drivers/dri/i965/brw_wm_pass2.c
+++ b/src/mesa/drivers/dri/i965/brw_wm_pass2.c
@@ -94,14 +94,7 @@ static void init_registers( struct brw_wm_compile *c )
} else {
for (j = 0; j < VERT_RESULT_MAX; j++) {
if (c->key.vp_outputs_written & BITFIELD64_BIT(j)) {
- int fp_index;
-
- if (j >= VERT_RESULT_VAR0)
- fp_index = j - (VERT_RESULT_VAR0 - FRAG_ATTRIB_VAR0);
- else if (j <= VERT_RESULT_TEX7)
- fp_index = j;
- else
- fp_index = -1;
+ int fp_index = vert_result_to_frag_attrib(j);
nr_interp_regs++;
if (fp_index >= 0)
diff --git a/src/mesa/drivers/dri/i965/gen6_sf_state.c b/src/mesa/drivers/dri/i965/gen6_sf_state.c
index 5bb731dc8fd..714914aa6bb 100644
--- a/src/mesa/drivers/dri/i965/gen6_sf_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_sf_state.c
@@ -35,19 +35,12 @@
uint32_t
get_attr_override(struct brw_context *brw, int fs_attr, int two_side_color)
{
- int attr_index = 0, i, vs_attr;
+ int attr_index = 0, i;
int bfc = 0;
+ int vs_attr = frag_attrib_to_vert_result(fs_attr);
- if (fs_attr <= FRAG_ATTRIB_TEX7)
- vs_attr = fs_attr;
- else if (fs_attr == FRAG_ATTRIB_FACE)
- vs_attr = 0; /* XXX */
- else if (fs_attr == FRAG_ATTRIB_PNTC)
- vs_attr = 0; /* XXX */
- else {
- assert(fs_attr >= FRAG_ATTRIB_VAR0);
- vs_attr = fs_attr - FRAG_ATTRIB_VAR0 + VERT_RESULT_VAR0;
- }
+ if (vs_attr < 0)
+ vs_attr = 0;
/* Find the source index (0 = first attribute after the 4D position)
* for this output attribute. attr is currently a VERT_RESULT_* but should