OSDN Git Service

r600/shader: allow multi-dimension arrays for tcs/tes inputs/outputs.
authorDave Airlie <airlied@redhat.com>
Mon, 30 Nov 2015 05:51:54 +0000 (15:51 +1000)
committerDave Airlie <airlied@redhat.com>
Sun, 6 Dec 2015 23:59:01 +0000 (09:59 +1000)
This just allows multi-dim arrays to be processed.

Signed-off-by: Dave Airlie <airlied@redhat.com>
src/gallium/drivers/r600/r600_shader.c

index ba33b40..c2aaf49 100644 (file)
@@ -393,10 +393,16 @@ static int tgsi_is_supported(struct r600_shader_ctx *ctx)
                   case TGSI_FILE_CONSTANT:
                           break;
                   case TGSI_FILE_INPUT:
-                          if (ctx->type == TGSI_PROCESSOR_GEOMETRY)
+                          if (ctx->type == TGSI_PROCESSOR_GEOMETRY ||
+                              ctx->type == TGSI_PROCESSOR_TESS_CTRL ||
+                              ctx->type == TGSI_PROCESSOR_TESS_EVAL)
+                                  break;
+                  case TGSI_FILE_OUTPUT:
+                          if (ctx->type == TGSI_PROCESSOR_TESS_CTRL)
                                   break;
                   default:
-                          R600_ERR("unsupported src %d (dimension %d)\n", j,
+                          R600_ERR("unsupported src %d (file %d, dimension %d)\n", j,
+                                   i->Src[j].Register.File,
                                    i->Src[j].Register.Dimension);
                           return -EINVAL;
                   }
@@ -404,6 +410,8 @@ static int tgsi_is_supported(struct r600_shader_ctx *ctx)
        }
        for (j = 0; j < i->Instruction.NumDstRegs; j++) {
                if (i->Dst[j].Register.Dimension) {
+                       if (ctx->type == TGSI_PROCESSOR_TESS_CTRL)
+                               continue;
                        R600_ERR("unsupported dst (dimension)\n");
                        return -EINVAL;
                }