summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/softpipe/sp_fs_sse.c
diff options
context:
space:
mode:
authorKeith Whitwell <keithw@vmware.com>2009-07-30 11:59:32 +0100
committerKeith Whitwell <keithw@vmware.com>2009-07-30 11:59:32 +0100
commit95f7ed4638d4e379783abdd5b250e203b6b1b435 (patch)
tree69092cec75e80b5825b68189379c683149dc9ad9 /src/gallium/drivers/softpipe/sp_fs_sse.c
parent1295cf423e21dad04a947960782ffa8db2739709 (diff)
softpipe: setup quad outputs from with fs->run
Diffstat (limited to 'src/gallium/drivers/softpipe/sp_fs_sse.c')
-rw-r--r--src/gallium/drivers/softpipe/sp_fs_sse.c35
1 files changed, 34 insertions, 1 deletions
diff --git a/src/gallium/drivers/softpipe/sp_fs_sse.c b/src/gallium/drivers/softpipe/sp_fs_sse.c
index f4fa0905d7..364bb94a5f 100644
--- a/src/gallium/drivers/softpipe/sp_fs_sse.c
+++ b/src/gallium/drivers/softpipe/sp_fs_sse.c
@@ -104,7 +104,40 @@ fs_sse_run( const struct sp_fragment_shader *base,
// , &machine->QuadPos
);
- return ~(machine->Temps[TGSI_EXEC_TEMP_KILMASK_I].xyzw[TGSI_EXEC_TEMP_KILMASK_C].u[0]);
+ quad->inout.mask &= ~(machine->Temps[TGSI_EXEC_TEMP_KILMASK_I].xyzw[TGSI_EXEC_TEMP_KILMASK_C].u[0]);
+ if (quad->inout.mask == 0)
+ return FALSE;
+
+
+ /* store outputs */
+ {
+ const ubyte *sem_name = shader->base.info.output_semantic_name;
+ const ubyte *sem_index = shader->base.info.output_semantic_index;
+ const uint n = shader->base.info.num_outputs;
+ uint i;
+ for (i = 0; i < n; i++) {
+ switch (sem_name[i]) {
+ case TGSI_SEMANTIC_COLOR:
+ {
+ uint cbuf = sem_index[i];
+ memcpy(quad->output.color[cbuf],
+ &machine->Outputs[i].xyzw[0].f[0],
+ sizeof(quad->output.color[0]) );
+ }
+ break;
+ case TGSI_SEMANTIC_POSITION:
+ {
+ uint j;
+ for (j = 0; j < 4; j++) {
+ quad->output.depth[j] = machine->Outputs[0].xyzw[2].f[j];
+ }
+ }
+ break;
+ }
+ }
+ }
+
+ return TRUE;
}