summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKeith Whitwell <keith@tungstengraphics.com>2008-04-15 14:44:39 +0100
committerKeith Whitwell <keith@tungstengraphics.com>2008-04-15 14:44:39 +0100
commit7eb6f130a1dfb8179ff371eb4e75b47d6ee45d2a (patch)
tree22b41600da19b67a64473ba7916358018c7eecd5 /src
parent59f68f36c4ad37496e3ed5d7d3142e3ae35dd351 (diff)
draw: fix first glitch in vertex emit
Diffstat (limited to 'src')
-rw-r--r--src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline.c b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline.c
index 557cd43f5b..889cab700c 100644
--- a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline.c
+++ b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline.c
@@ -92,6 +92,16 @@ static void emit_R32G32B32A32_FLOAT( const float *attrib,
out[3] = attrib[3];
}
+static void
+emit_B8G8R8A8_UNORM( const float *attrib, void *ptr)
+{
+ ubyte *out = (ubyte *)ptr;
+ out[2] = float_to_ubyte(attrib[0]);
+ out[1] = float_to_ubyte(attrib[1]);
+ out[0] = float_to_ubyte(attrib[2]);
+ out[3] = float_to_ubyte(attrib[3]);
+}
+
static void fetch_pipeline_prepare( struct draw_pt_middle_end *middle,
unsigned prim )
{
@@ -150,6 +160,9 @@ static void fetch_pipeline_prepare( struct draw_pt_middle_end *middle,
src_buffer = 1;
src_offset = 0;
break;
+ case EMIT_4UB:
+ fpme->translate[i].emit = emit_B8G8R8A8_UNORM;
+ emit_sz = 4 * sizeof(ubyte);
default:
assert(0);
fpme->translate[i].emit = emit_NULL;
@@ -232,10 +245,10 @@ static void fetch_pipeline_run( struct draw_pt_middle_end *middle,
for (j = 0; j < fpme->nr_translate; j++) {
- const float *attrib = (const float *)( (*fpme->translate[i].input_buf) +
- fpme->translate[i].input_offset );
+ const float *attrib = (const float *)( (*fpme->translate[j].input_buf) +
+ fpme->translate[j].input_offset );
- char *dest = out_buf + fpme->translate[i].output_offset;
+ char *dest = out_buf + fpme->translate[j].output_offset;
/*debug_printf("emiting [%f, %f, %f, %f]\n",
attrib[0], attrib[1],