freedreno/a3xx/compiler: fix RECT textures
authorRob Clark <robclark@freedesktop.org>
Sun, 30 Mar 2014 16:06:35 +0000 (12:06 -0400)
committerRob Clark <robclark@freedesktop.org>
Sun, 30 Mar 2014 16:10:26 +0000 (12:10 -0400)
Whether or not the coords are normalized is handled in the texture
state.  But we otherwise need to treat RECT sample instructions as 2D.

Signed-off-by: Rob Clark <robclark@freedesktop.org>
src/gallium/drivers/freedreno/a3xx/fd3_compiler.c

index 9b644742615dd159e8e0905ca73be893bcf9a77b..1d99e5caa9942e9210436da7ee8194f032d3efe4 100644 (file)
@@ -1090,21 +1090,41 @@ trans_samp(const struct instr_translater *t,
 
        switch (t->arg) {
        case TGSI_OPCODE_TEX:
-               if (tex == TGSI_TEXTURE_2D) {
+               switch (tex) {
+               case TGSI_TEXTURE_2D:
+               case TGSI_TEXTURE_RECT:
                        order = (int8_t[4]){ 0,  1, -1, -1 };
                        src_wrmask = TGSI_WRITEMASK_XY;
-               } else {
+                       break;
+               case TGSI_TEXTURE_3D:
+               case TGSI_TEXTURE_CUBE:
                        order = (int8_t[4]){ 0,  1,  2, -1 };
                        src_wrmask = TGSI_WRITEMASK_XYZ;
+                       flags |= IR3_INSTR_3D;
+                       break;
+               default:
+                       compile_error(ctx, "unknown texture type: %s\n",
+                                       tgsi_texture_names[tex]);
+                       break;
                }
                break;
        case TGSI_OPCODE_TXP:
-               if (tex == TGSI_TEXTURE_2D) {
+               switch (tex) {
+               case TGSI_TEXTURE_2D:
+               case TGSI_TEXTURE_RECT:
                        order = (int8_t[4]){ 0,  1,  3, -1 };
                        src_wrmask = TGSI_WRITEMASK_XYZ;
-               } else {
+                       break;
+               case TGSI_TEXTURE_3D:
+               case TGSI_TEXTURE_CUBE:
                        order = (int8_t[4]){ 0,  1,  2,  3 };
                        src_wrmask = TGSI_WRITEMASK_XYZW;
+                       flags |= IR3_INSTR_3D;
+                       break;
+               default:
+                       compile_error(ctx, "unknown texture type: %s\n",
+                                       tgsi_texture_names[tex]);
+                       break;
                }
                flags |= IR3_INSTR_P;
                break;
@@ -1113,9 +1133,6 @@ trans_samp(const struct instr_translater *t,
                break;
        }
 
-       if ((tex == TGSI_TEXTURE_3D) || (tex == TGSI_TEXTURE_CUBE))
-               flags |= IR3_INSTR_3D;
-
        /* cat5 instruction cannot seem to handle const or relative: */
        if (is_rel_or_const(coord))
                needs_mov = true;