gallium: add defines/shader opcode for texture cube map array
authorDave Airlie <airlied@gmail.com>
Sat, 3 Nov 2012 10:44:06 +0000 (20:44 +1000)
committerDave Airlie <airlied@redhat.com>
Fri, 9 Nov 2012 00:26:37 +0000 (10:26 +1000)
This just adds the texture target and capability along
with 3 new opcodes required to support this extension.

As this extension requires some texture opcodes with samp + 5 args,
we need to use another src register, this is only required
for TEX, TXL and TXB opcodes to implement this spec.

TEX2 is required for shadow cube map arrays
TXL2 is required for cube map array sampler + explicit lod
TXB2 is required for cube map array sampler + lod bias

Reviewed-by: Brian Paul <brianp@vmware.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
src/gallium/auxiliary/tgsi/tgsi_info.c
src/gallium/auxiliary/tgsi/tgsi_strings.c
src/gallium/auxiliary/tgsi/tgsi_util.c
src/gallium/auxiliary/util/u_inlines.h
src/gallium/include/pipe/p_defines.h
src/gallium/include/pipe/p_shader_tokens.h

index c2b4374d83ab334527a77a37d2b16d4bdd0086ee..51ca373b6ba33dc7be9191a34e3784e33614646a 100644 (file)
@@ -215,7 +215,10 @@ static const struct tgsi_opcode_info opcode_info[TGSI_OPCODE_LAST] =
    { 1, 3, 0, 0, 0, 0, OTHR, "ATOMUMIN", TGSI_OPCODE_ATOMUMIN },
    { 1, 3, 0, 0, 0, 0, OTHR, "ATOMUMAX", TGSI_OPCODE_ATOMUMAX },
    { 1, 3, 0, 0, 0, 0, OTHR, "ATOMIMIN", TGSI_OPCODE_ATOMIMIN },
-   { 1, 3, 0, 0, 0, 0, OTHR, "ATOMIMAX", TGSI_OPCODE_ATOMIMAX }
+   { 1, 3, 0, 0, 0, 0, OTHR, "ATOMIMAX", TGSI_OPCODE_ATOMIMAX },
+   { 1, 3, 1, 0, 0, 0, OTHR, "TEX2", TGSI_OPCODE_TEX2 },
+   { 1, 3, 1, 0, 0, 0, OTHR, "TXB2", TGSI_OPCODE_TXB2 },
+   { 1, 3, 1, 0, 0, 0, OTHR, "TXL2", TGSI_OPCODE_TXL2 },
 };
 
 const struct tgsi_opcode_info *
index c15e2a060d60677498aed017ac5bb425f811a6ba..70f997b3c9edd422f97263849f335001e5d73b7d 100644 (file)
@@ -99,7 +99,9 @@ const char *tgsi_texture_names[TGSI_TEXTURE_COUNT] =
    "SHADOWCUBE",
    "2D_MSAA",
    "2D_ARRAY_MSAA",
-   "UNKNOWN"
+   "CUBEARRAY",
+   "SHADOWCUBEARRAY",
+   "UNKNOWN",
 };
 
 const char *tgsi_property_names[TGSI_PROPERTY_COUNT] =
index c3fa6041b245e52cd073fd4beafa9c97ed52e7b9..8a5a8eab5aab9a48a5fd1318e55d3e9f39243a08 100644 (file)
@@ -285,8 +285,10 @@ tgsi_util_get_inst_usage_mask(const struct tgsi_full_instruction *inst,
             read_mask = TGSI_WRITEMASK_XYZ;
             break;
          case TGSI_TEXTURE_SHADOW2D_ARRAY:
+         case TGSI_TEXTURE_CUBE_ARRAY:
          case TGSI_TEXTURE_SHADOWCUBE:
          case TGSI_TEXTURE_2D_ARRAY_MSAA:
+         case TGSI_TEXTURE_SHADOWCUBE_ARRAY:
             read_mask = TGSI_WRITEMASK_XYZW;
             break;
          default:
index 3d68cf5400e5716e3e9fdf0862d8753a1930fba2..6ef5fecc695f2dd82c0e1827932ece8927c4d1b9 100644 (file)
@@ -523,6 +523,9 @@ util_pipe_tex_to_tgsi_tex(enum pipe_texture_target pipe_tex_target,
       return nr_samples > 1 ? TGSI_TEXTURE_2D_ARRAY_MSAA :
                               TGSI_TEXTURE_2D_ARRAY;
 
+   case PIPE_TEXTURE_CUBE_ARRAY:
+      return TGSI_TEXTURE_CUBE_ARRAY;
+
    default:
       assert(0 && "unexpected texture target");
       return TGSI_TEXTURE_UNKNOWN;
index 184136e47251efd5d3ad7ac01e6e71e406ab3025..fa2fb074a7ba4b0baf81656caed0da80e6ddc5fe 100644 (file)
@@ -150,6 +150,7 @@ enum pipe_texture_target {
    PIPE_TEXTURE_RECT     = 5,
    PIPE_TEXTURE_1D_ARRAY = 6,
    PIPE_TEXTURE_2D_ARRAY = 7,
+   PIPE_TEXTURE_CUBE_ARRAY = 8,
    PIPE_MAX_TEXTURE_TYPES
 };
 
@@ -489,7 +490,8 @@ enum pipe_cap {
    PIPE_CAP_START_INSTANCE = 72,
    PIPE_CAP_QUERY_TIMESTAMP = 73,
    PIPE_CAP_TEXTURE_MULTISAMPLE = 74,
-   PIPE_CAP_MIN_MAP_BUFFER_ALIGNMENT = 75
+   PIPE_CAP_MIN_MAP_BUFFER_ALIGNMENT = 75,
+   PIPE_CAP_CUBE_MAP_ARRAY = 76
 };
 
 /**
index 7d96f27e018ed0b6291ff469de4af46182734de7..3fb12fb2c47791643b2ca8637c2f1ec10df03da9 100644 (file)
@@ -431,7 +431,12 @@ struct tgsi_property_data {
 #define TGSI_OPCODE_ATOMIMIN            175
 #define TGSI_OPCODE_ATOMIMAX            176
 
-#define TGSI_OPCODE_LAST                177
+/* to be used for shadow cube map compares */
+#define TGSI_OPCODE_TEX2                177
+#define TGSI_OPCODE_TXB2                178
+#define TGSI_OPCODE_TXL2                179
+
+#define TGSI_OPCODE_LAST                180
 
 #define TGSI_SAT_NONE            0  /* do not saturate */
 #define TGSI_SAT_ZERO_ONE        1  /* clamp to [0,1] */
@@ -507,8 +512,10 @@ struct tgsi_instruction_label
 #define TGSI_TEXTURE_SHADOWCUBE     13
 #define TGSI_TEXTURE_2D_MSAA        14
 #define TGSI_TEXTURE_2D_ARRAY_MSAA  15
-#define TGSI_TEXTURE_UNKNOWN        16
-#define TGSI_TEXTURE_COUNT          17
+#define TGSI_TEXTURE_CUBE_ARRAY     16
+#define TGSI_TEXTURE_SHADOWCUBE_ARRAY 17
+#define TGSI_TEXTURE_UNKNOWN        18
+#define TGSI_TEXTURE_COUNT          19
 
 struct tgsi_instruction_texture
 {