tgsi: emit code for SVIEWINFO and SAMPLE_I
authorRoland Scheidegger <sroland@vmware.com>
Fri, 8 Mar 2013 21:10:21 +0000 (22:10 +0100)
committerRoland Scheidegger <sroland@vmware.com>
Mon, 11 Mar 2013 16:07:51 +0000 (17:07 +0100)
Can handle them since the single sampler interface was introduced.

v2: simplify txf/sample_i handling a bit according to Brian's feedback.

Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
src/gallium/auxiliary/tgsi/tgsi_exec.c

index 9945d42..d3bba2c 100644 (file)
@@ -2147,13 +2147,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 (inst->Instruction.Opcode == TGSI_OPCODE_SAMPLE_I) {
+      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:
@@ -4339,7 +4346,7 @@ exec_instruction(
       break;
 
    case TGSI_OPCODE_SAMPLE_I:
-      assert(0);
+      exec_txf(mach, inst);
       break;
 
    case TGSI_OPCODE_SAMPLE_I_MS:
@@ -4375,7 +4382,7 @@ exec_instruction(
       break;
 
    case TGSI_OPCODE_SVIEWINFO:
-      assert(0);
+      exec_txq(mach, inst);
       break;
 
    case TGSI_OPCODE_SAMPLE_POS: