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

@@ -39,8 +39,6 @@
#include "shader/prog_instruction.h"
#include "shader/prog_parameter.h"

#define TGSI_DEBUG 0


/*
* Map mesa register file to TGSI register file.
@@ -56,8 +54,8 @@ map_register_file(
return TGSI_FILE_NULL;
case PROGRAM_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
* where constants, immediates and state variables are all
@@ -230,21 +228,27 @@ compile_instruction(
outputMapping,
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 {
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