gallium: use the TGSI_TEXTURE_SHADOW1D/2D/RECT texture types for TEX instructions

These texture types were defined but never put to use.
For the time being though, the Mesa->TGSI translater isn't emitting these
targets.  See the XXX comment in map_texture_target().
This commit is contained in:
Brian Paul 2009-02-20 14:06:25 -07:00
parent e0d9073081
commit 776971218e
3 changed files with 44 additions and 9 deletions

View File

@ -1614,6 +1614,7 @@ exec_tex(struct tgsi_exec_machine *mach,
switch (inst->InstructionExtTexture.Texture) {
case TGSI_TEXTURE_1D:
case TGSI_TEXTURE_SHADOW1D:
FETCH(&r[0], 0, CHAN_X);
@ -1636,6 +1637,8 @@ exec_tex(struct tgsi_exec_machine *mach,
case TGSI_TEXTURE_2D:
case TGSI_TEXTURE_RECT:
case TGSI_TEXTURE_SHADOW2D:
case TGSI_TEXTURE_SHADOWRECT:
FETCH(&r[0], 0, CHAN_X);
FETCH(&r[1], 0, CHAN_Y);

View File

@ -321,16 +321,27 @@ static uint
translate_tex_src_target(struct i915_fp_compile *p, uint tex)
{
switch (tex) {
case TGSI_TEXTURE_SHADOW1D:
/* fall-through */
case TGSI_TEXTURE_1D:
return D0_SAMPLE_TYPE_2D;
case TGSI_TEXTURE_SHADOW2D:
/* fall-through */
case TGSI_TEXTURE_2D:
return D0_SAMPLE_TYPE_2D;
case TGSI_TEXTURE_SHADOWRECT:
/* fall-through */
case TGSI_TEXTURE_RECT:
return D0_SAMPLE_TYPE_2D;
case TGSI_TEXTURE_3D:
return D0_SAMPLE_TYPE_VOLUME;
case TGSI_TEXTURE_CUBE:
return D0_SAMPLE_TYPE_CUBE;
default:
i915_program_error(p, "TexSrc type");
return 0;

View File

@ -132,19 +132,35 @@ map_register_file_index(
*/
static GLuint
map_texture_target(
GLuint textarget )
GLuint textarget,
GLboolean shadow )
{
#if 1
/* XXX remove this line after we've checked that the rest of gallium
* can handle the TGSI_TEXTURE_SHADOWx tokens.
*/
shadow = GL_FALSE;
#endif
switch( textarget ) {
case TEXTURE_1D_INDEX:
return TGSI_TEXTURE_1D;
if (shadow)
return TGSI_TEXTURE_SHADOW1D;
else
return TGSI_TEXTURE_1D;
case TEXTURE_2D_INDEX:
return TGSI_TEXTURE_2D;
if (shadow)
return TGSI_TEXTURE_SHADOW2D;
else
return TGSI_TEXTURE_2D;
case TEXTURE_3D_INDEX:
return TGSI_TEXTURE_3D;
case TEXTURE_CUBE_INDEX:
return TGSI_TEXTURE_CUBE;
case TEXTURE_RECT_INDEX:
return TGSI_TEXTURE_RECT;
if (shadow)
return TGSI_TEXTURE_SHADOWRECT;
else
return TGSI_TEXTURE_RECT;
default:
assert( 0 );
}
@ -514,7 +530,8 @@ compile_instruction(
/* ordinary texture lookup */
fullinst->Instruction.Opcode = TGSI_OPCODE_TEX;
fullinst->Instruction.NumSrcRegs = 2;
fullinst->InstructionExtTexture.Texture = map_texture_target( inst->TexSrcTarget );
fullinst->InstructionExtTexture.Texture =
map_texture_target( inst->TexSrcTarget, inst->TexShadow );
fullinst->FullSrcRegisters[1].SrcRegister.File = TGSI_FILE_SAMPLER;
fullinst->FullSrcRegisters[1].SrcRegister.Index = inst->TexSrcUnit;
break;
@ -522,7 +539,8 @@ compile_instruction(
/* texture lookup with LOD bias */
fullinst->Instruction.Opcode = TGSI_OPCODE_TXB;
fullinst->Instruction.NumSrcRegs = 2;
fullinst->InstructionExtTexture.Texture = map_texture_target( inst->TexSrcTarget );
fullinst->InstructionExtTexture.Texture =
map_texture_target( inst->TexSrcTarget, inst->TexShadow );
fullinst->FullSrcRegisters[1].SrcRegister.File = TGSI_FILE_SAMPLER;
fullinst->FullSrcRegisters[1].SrcRegister.Index = inst->TexSrcUnit;
break;
@ -530,7 +548,8 @@ compile_instruction(
/* texture lookup with explicit partial derivatives */
fullinst->Instruction.Opcode = TGSI_OPCODE_TXD;
fullinst->Instruction.NumSrcRegs = 4;
fullinst->InstructionExtTexture.Texture = map_texture_target( inst->TexSrcTarget );
fullinst->InstructionExtTexture.Texture =
map_texture_target( inst->TexSrcTarget, inst->TexShadow );
/* src[0] = coord, src[1] = d[strq]/dx, src[2] = d[strq]/dy */
fullinst->FullSrcRegisters[3].SrcRegister.File = TGSI_FILE_SAMPLER;
fullinst->FullSrcRegisters[3].SrcRegister.Index = inst->TexSrcUnit;
@ -539,7 +558,8 @@ compile_instruction(
/* texture lookup with explicit LOD */
fullinst->Instruction.Opcode = TGSI_OPCODE_TXL;
fullinst->Instruction.NumSrcRegs = 2;
fullinst->InstructionExtTexture.Texture = map_texture_target( inst->TexSrcTarget );
fullinst->InstructionExtTexture.Texture =
map_texture_target( inst->TexSrcTarget, inst->TexShadow );
fullinst->FullSrcRegisters[1].SrcRegister.File = TGSI_FILE_SAMPLER;
fullinst->FullSrcRegisters[1].SrcRegister.Index = inst->TexSrcUnit;
break;
@ -548,7 +568,8 @@ compile_instruction(
/* convert to TEX w/ special flag for division */
fullinst->Instruction.Opcode = TGSI_OPCODE_TXP;
fullinst->Instruction.NumSrcRegs = 2;
fullinst->InstructionExtTexture.Texture = map_texture_target( inst->TexSrcTarget );
fullinst->InstructionExtTexture.Texture =
map_texture_target( inst->TexSrcTarget, inst->TexShadow );
fullinst->FullSrcRegisters[1].SrcRegister.File = TGSI_FILE_SAMPLER;
fullinst->FullSrcRegisters[1].SrcRegister.Index = inst->TexSrcUnit;
break;