From b297b14d30ef98582f3511b46c161bc62115684d Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Thu, 3 Jun 2010 09:01:25 -0600 Subject: tgsi: we don't support indirect input/output registers in SSE codegen yet Extend the check for indirect addressing of temp regs to include input/output regs. Fixes failure with piglit glsl-texcoord-array.shader_test test when using SSE codegen. --- src/gallium/auxiliary/tgsi/tgsi_sse2.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'src/gallium/auxiliary/tgsi/tgsi_sse2.c') diff --git a/src/gallium/auxiliary/tgsi/tgsi_sse2.c b/src/gallium/auxiliary/tgsi/tgsi_sse2.c index 6f9049a61ef..785a9fb0356 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_sse2.c +++ b/src/gallium/auxiliary/tgsi/tgsi_sse2.c @@ -1705,22 +1705,26 @@ emit_cmp( /** - * Check if inst src/dest regs use indirect addressing into temporary - * register file. + * Check if inst src/dest regs use indirect addressing into temporary, + * input or output register files. */ static boolean -indirect_temp_reference(const struct tgsi_full_instruction *inst) +indirect_reg_reference(const struct tgsi_full_instruction *inst) { uint i; for (i = 0; i < inst->Instruction.NumSrcRegs; i++) { const struct tgsi_full_src_register *reg = &inst->Src[i]; - if (reg->Register.File == TGSI_FILE_TEMPORARY && + if ((reg->Register.File == TGSI_FILE_TEMPORARY || + reg->Register.File == TGSI_FILE_INPUT || + reg->Register.File == TGSI_FILE_OUTPUT) && reg->Register.Indirect) return TRUE; } for (i = 0; i < inst->Instruction.NumDstRegs; i++) { const struct tgsi_full_dst_register *reg = &inst->Dst[i]; - if (reg->Register.File == TGSI_FILE_TEMPORARY && + if ((reg->Register.File == TGSI_FILE_TEMPORARY || + reg->Register.File == TGSI_FILE_INPUT || + reg->Register.File == TGSI_FILE_OUTPUT) && reg->Register.Indirect) return TRUE; } @@ -1736,7 +1740,7 @@ emit_instruction( unsigned chan_index; /* we can't handle indirect addressing into temp register file yet */ - if (indirect_temp_reference(inst)) + if (indirect_reg_reference(inst)) return FALSE; switch (inst->Instruction.Opcode) { -- cgit v1.2.3