On 03/08/2013 12:18 PM, srol...@vmware.com wrote:
From: Roland Scheidegger<srol...@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)

Can't you just look at inst->Instruction.Opcode to see if it's a TGSI_OPCODE_SAMPLE_I instruction?


  {
     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:

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to