tgsi: add support for 1D/2D texture arrays
authorBrian Paul <brianp@vmware.com>
Wed, 26 Jan 2011 03:25:50 +0000 (20:25 -0700)
committerBrian Paul <brianp@vmware.com>
Wed, 26 Jan 2011 03:25:53 +0000 (20:25 -0700)
src/gallium/auxiliary/tgsi/tgsi_dump.c
src/gallium/auxiliary/tgsi/tgsi_exec.c
src/gallium/auxiliary/tgsi/tgsi_util.c
src/gallium/include/pipe/p_shader_tokens.h

index e97698d9a0a823f2e9c6f6f0eb2315db3c0aa288..c12662076b1bf069ad30a3ee25874e60a4276640 100644 (file)
@@ -158,7 +158,9 @@ tgsi_texture_names[TGSI_TEXTURE_COUNT] =
    "RECT",
    "SHADOW1D",
    "SHADOW2D",
-   "SHADOWRECT"
+   "SHADOWRECT",
+   "1DARRAY",
+   "2DARRAY"
 };
 
 const char *tgsi_property_names[TGSI_PROPERTY_COUNT] =
index 959d978f2ebe9ea514e289bf9fa8cf2996d42eda..cbb090b2803c08849c2aa2a4d09f7f01f11686fa 100644 (file)
@@ -1750,6 +1750,36 @@ exec_tex(struct tgsi_exec_machine *mach,
                   &r[0], &r[1], &r[2], &r[3]);  /* outputs */
       break;
 
+   case TGSI_TEXTURE_1D_ARRAY:
+      FETCH(&r[0], 0, CHAN_X);
+      FETCH(&r[1], 0, CHAN_Y);
+
+      if (modifier == TEX_MODIFIER_PROJECTED) {
+         micro_div(&r[0], &r[0], &r[3]);
+      }
+
+      fetch_texel(mach->Samplers[unit],
+                  &r[0], &r[1], &r[2], lod,     /* S, T, P, LOD */
+                  control,
+                  &r[0], &r[1], &r[2], &r[3]);  /* outputs */
+      break;
+
+   case TGSI_TEXTURE_2D_ARRAY:
+      FETCH(&r[0], 0, CHAN_X);
+      FETCH(&r[1], 0, CHAN_Y);
+      FETCH(&r[2], 0, CHAN_Z);
+
+      if (modifier == TEX_MODIFIER_PROJECTED) {
+         micro_div(&r[0], &r[0], &r[3]);
+         micro_div(&r[1], &r[1], &r[3]);
+      }
+
+      fetch_texel(mach->Samplers[unit],
+                  &r[0], &r[1], &r[2], lod,     /* S, T, P, LOD */
+                  control,
+                  &r[0], &r[1], &r[2], &r[3]);  /* outputs */
+      break;
+
    case TGSI_TEXTURE_3D:
    case TGSI_TEXTURE_CUBE:
       FETCH(&r[0], 0, CHAN_X);
index 08e7e89bd670e42fcb0a7aadd9ef50c15956316c..aa9a886d4a98322e74d99c610d50aee4a370da19 100644 (file)
@@ -280,7 +280,12 @@ tgsi_util_get_inst_usage_mask(const struct tgsi_full_instruction *inst,
          case TGSI_TEXTURE_CUBE:
             read_mask = TGSI_WRITEMASK_XYZ;
             break;
-
+         case TGSI_TEXTURE_1D_ARRAY:
+            read_mask = TGSI_WRITEMASK_XY;
+            break;
+         case TGSI_TEXTURE_2D_ARRAY:
+            read_mask = TGSI_WRITEMASK_XYZ;
+            break;
          default:
             assert(0);
             read_mask = 0;
index 6e5a48b3a62472e89d4481d395415ca566105ec6..d3a3632654c15fdd657b961dd3a5088155c7744f 100644 (file)
@@ -430,7 +430,9 @@ struct tgsi_instruction_label
 #define TGSI_TEXTURE_SHADOW1D       6
 #define TGSI_TEXTURE_SHADOW2D       7
 #define TGSI_TEXTURE_SHADOWRECT     8
-#define TGSI_TEXTURE_COUNT          9
+#define TGSI_TEXTURE_1D_ARRAY       9
+#define TGSI_TEXTURE_2D_ARRAY      10
+#define TGSI_TEXTURE_COUNT         11
 
 struct tgsi_instruction_texture
 {