Browse Source

gallium: fix translation of extended swizzles, per-component negation

tags/mesa_20090313
Brian Paul 17 years ago
parent
commit
93f553ed4d
1 changed files with 21 additions and 17 deletions
  1. 21
    17
      src/mesa/state_tracker/st_mesa_to_tgsi.c

+ 21
- 17
src/mesa/state_tracker/st_mesa_to_tgsi.c View File

#include "shader/prog_instruction.h" #include "shader/prog_instruction.h"
#include "shader/prog_parameter.h" #include "shader/prog_parameter.h"


#define TGSI_DEBUG 0



/* /*
* Map mesa register file to TGSI register file. * Map mesa register file to TGSI register file.
return TGSI_FILE_NULL; return TGSI_FILE_NULL;
case PROGRAM_TEMPORARY: case PROGRAM_TEMPORARY:
return TGSI_FILE_TEMPORARY; return TGSI_FILE_TEMPORARY;
//case PROGRAM_LOCAL_PARAM:
//case PROGRAM_ENV_PARAM:
/*case PROGRAM_LOCAL_PARAM:*/
/*case PROGRAM_ENV_PARAM:*/


/* Because of the longstanding problem with mesa arb shaders /* Because of the longstanding problem with mesa arb shaders
* where constants, immediates and state variables are all * where constants, immediates and state variables are all
outputMapping, outputMapping,
immediateMapping); immediateMapping);


for( j = 0; j < 4; j++ ) {
GLuint swz;

swz = GET_SWZ( inst->SrcReg[i].Swizzle, j );
if( swz > SWIZZLE_W ) {
tgsi_util_set_src_register_extswizzle(
&fullsrc->SrcRegisterExtSwz,
swz,
j );
/* swizzle (ext swizzle also depends on negation) */
{
GLuint swz[4];
GLboolean extended = (inst->SrcReg[i].NegateBase != NEGATE_NONE &&
inst->SrcReg[i].NegateBase != NEGATE_XYZW);
for( j = 0; j < 4; j++ ) {
swz[j] = GET_SWZ( inst->SrcReg[i].Swizzle, j );
if (swz[j] > SWIZZLE_W)
extended = GL_TRUE;
}
if (extended) {
for (j = 0; j < 4; j++) {
tgsi_util_set_src_register_extswizzle(&fullsrc->SrcRegisterExtSwz,
swz[j], j);
}
} }
else { else {
tgsi_util_set_src_register_swizzle(
&fullsrc->SrcRegister,
swz,
j );
for (j = 0; j < 4; j++) {
tgsi_util_set_src_register_swizzle(&fullsrc->SrcRegister,
swz[j], j);
}
} }
} }



Loading…
Cancel
Save