On 13.09.2017 01:28, Dave Airlie wrote:
From: Dave Airlie <airl...@redhat.com>

The virgl protocol version of tgsi doesn't handle this yet,
transform it back to the old ways.

Fixes: 41e342d5 tgsi/ureg: always emit constants (and their decls) as 2D
Signed-off-by: Dave Airlie <airl...@redhat.com>
---
  src/gallium/drivers/virgl/virgl_tgsi.c | 26 ++++++++++++++++++++++++++
  1 file changed, 26 insertions(+)

diff --git a/src/gallium/drivers/virgl/virgl_tgsi.c 
b/src/gallium/drivers/virgl/virgl_tgsi.c
index 7ad1cbd..bf5c84c 100644
--- a/src/gallium/drivers/virgl/virgl_tgsi.c
+++ b/src/gallium/drivers/virgl/virgl_tgsi.c
@@ -31,6 +31,24 @@ struct virgl_transform_context {
     struct tgsi_transform_context base;
  };
+static void
+virgl_tgsi_transform_declaration(struct tgsi_transform_context *ctx,
+                                 struct tgsi_full_declaration *decl)
+{
+   switch (decl->Declaration.File) {
+   case TGSI_FILE_CONSTANT:
+      if (decl->Declaration.Dimension) {
+         if (decl->Dim.Index2D == 0)
+            decl->Declaration.Dimension = 0;
+      }
+      break;
+   default:
+      break;
+   }
+   ctx->emit_declaration(ctx, decl);
+
+}
+
  /* for now just strip out the new properties the remote doesn't understand
     yet */
  static void
@@ -54,6 +72,13 @@ virgl_tgsi_transform_instruction(struct 
tgsi_transform_context *ctx,
  {
     if (inst->Instruction.Precise)
        inst->Instruction.Precise = 0;
+
+   for (unsigned i = 0; i < TGSI_FULL_MAX_SRC_REGISTERS; i++) {
+      if (inst->Src[i].Register.File == TGSI_FILE_CONSTANT &&
+          inst->Src[i].Register.Dimension &&
+          inst->Src[i].Dimension.Index == 0)
+         inst->Src[i].Register.Dimension = 0;

Maybe add a check that indirect addressing isn't used?

Cheers,
Nicolai


+   }
     ctx->emit_instruction(ctx, inst);
  }
@@ -69,6 +94,7 @@ struct tgsi_token *virgl_tgsi_transform(const struct tgsi_token *tokens_in)
        return NULL;
memset(&transform, 0, sizeof(transform));
+   transform.base.transform_declaration = virgl_tgsi_transform_declaration;
     transform.base.transform_property = virgl_tgsi_transform_property;
     transform.base.transform_instruction = virgl_tgsi_transform_instruction;
     tgsi_transform_shader(tokens_in, new_tokens, newLen, &transform.base);



--
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to