summaryrefslogtreecommitdiffstats
path: root/src/gallium/auxiliary
diff options
context:
space:
mode:
authorBrian Paul <[email protected]>2009-08-20 10:34:45 -0600
committerBrian Paul <[email protected]>2009-08-20 10:34:45 -0600
commitce723d8d8b011f2efaea6588c42b6d11ee2e7115 (patch)
treec24d2002dfdc253e0867dad672272c006626c389 /src/gallium/auxiliary
parent4c7c294ffff2a66f4585faa41ea9810527ea1e92 (diff)
tgsi: check for SOA dependencies in SSE and PPC code generators
Fall back to interpreter for now. This doesn't happen very often.
Diffstat (limited to 'src/gallium/auxiliary')
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_ppc.c4
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_sse2.c4
2 files changed, 8 insertions, 0 deletions
diff --git a/src/gallium/auxiliary/tgsi/tgsi_ppc.c b/src/gallium/auxiliary/tgsi/tgsi_ppc.c
index 2f8b0c4df0f..8466d9bc229 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_ppc.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_ppc.c
@@ -1112,6 +1112,10 @@ emit_instruction(struct gen_context *gen,
if (inst->Instruction.Saturate != TGSI_SAT_NONE)
return 0;
+ /* need to use extra temps to fix SOA dependencies : */
+ if (tgsi_check_soa_dependencies(inst))
+ return FALSE;
+
switch (inst->Instruction.Opcode) {
case TGSI_OPCODE_MOV:
case TGSI_OPCODE_SWZ:
diff --git a/src/gallium/auxiliary/tgsi/tgsi_sse2.c b/src/gallium/auxiliary/tgsi/tgsi_sse2.c
index 571f98ae35e..a13368c80c8 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_sse2.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_sse2.c
@@ -1506,6 +1506,10 @@ emit_instruction(
if (inst->Instruction.Saturate != TGSI_SAT_NONE)
return FALSE;
+ /* need to use extra temps to fix SOA dependencies : */
+ if (tgsi_check_soa_dependencies(inst))
+ return FALSE;
+
switch (inst->Instruction.Opcode) {
case TGSI_OPCODE_ARL:
FOR_EACH_DST0_ENABLED_CHANNEL( *inst, chan_index ) {