[Mesa-dev] [PATCH 2/3] tgsi: emit code for SVIEWINFO and SAMPLE_I
sroland at vmware.com
sroland at vmware.com
Fri Mar 8 11:18:33 PST 2013
From: Roland Scheidegger <sroland at vmware.com>
Can handle them since the single sampler interface was introduced.
---
src/gallium/auxiliary/tgsi/tgsi_exec.c | 18 +++++++++++++-----
1 file changed, 13 insertions(+), 5 deletions(-)
diff --git a/src/gallium/auxiliary/tgsi/tgsi_exec.c b/src/gallium/auxiliary/tgsi/tgsi_exec.c
index 9945d42..8c6890b 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_exec.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_exec.c
@@ -2139,7 +2139,8 @@ exec_txd(struct tgsi_exec_machine *mach,
static void
exec_txf(struct tgsi_exec_machine *mach,
- const struct tgsi_full_instruction *inst)
+ const struct tgsi_full_instruction *inst,
+ boolean is_samplei)
{
const uint unit = inst->Src[1].Register.Index;
union tgsi_exec_channel r[4];
@@ -2147,13 +2148,20 @@ exec_txf(struct tgsi_exec_machine *mach,
float rgba[TGSI_NUM_CHANNELS][TGSI_QUAD_SIZE];
int j;
int8_t offsets[3];
+ unsigned target;
/* always fetch all 3 offsets, overkill but keeps code simple */
fetch_texel_offsets(mach, inst, offsets);
IFETCH(&r[3], 0, TGSI_CHAN_W);
- switch(inst->Texture.Texture) {
+ if (is_samplei) {
+ target = mach->SamplerViews[unit].Resource;
+ }
+ else {
+ target = inst->Texture.Texture;
+ }
+ switch(target) {
case TGSI_TEXTURE_3D:
case TGSI_TEXTURE_2D_ARRAY:
case TGSI_TEXTURE_SHADOW2D_ARRAY:
@@ -4112,7 +4120,7 @@ exec_instruction(
break;
case TGSI_OPCODE_TXF:
- exec_txf(mach, inst);
+ exec_txf(mach, inst, FALSE);
break;
case TGSI_OPCODE_TXQ:
@@ -4339,7 +4347,7 @@ exec_instruction(
break;
case TGSI_OPCODE_SAMPLE_I:
- assert(0);
+ exec_txf(mach, inst, TRUE);
break;
case TGSI_OPCODE_SAMPLE_I_MS:
@@ -4375,7 +4383,7 @@ exec_instruction(
break;
case TGSI_OPCODE_SVIEWINFO:
- assert(0);
+ exec_txq(mach, inst);
break;
case TGSI_OPCODE_SAMPLE_POS:
--
1.7.9.5
More information about the mesa-dev
mailing list