virgl: Extend integer write out output fix to all non-move integers ops
authorGert Wollny <gert.wollny@collabora.com>
Wed, 13 Apr 2022 10:04:33 +0000 (12:04 +0200)
committerMarge Bot <emma+marge@anholt.net>
Thu, 14 Apr 2022 11:53:25 +0000 (11:53 +0000)
The host virglrenderer can only handle moves to integer outputs, all
ALU opt that create integer outputs are created with extra code to convert
to float for the temporaries, and this breaks the output write
handling.

Fixes:
  spec@arb_sample_shading@builtin-gl-sample-mask *
  spec@arb_sample_shading@builtin-gl-sample-mask-simple *

Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Reviewed-by: Emma Anholt <emma@anholt.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15921>

src/gallium/drivers/virgl/virgl_tgsi.c

index 747ac0e..aa755b5 100644 (file)
@@ -385,8 +385,7 @@ virgl_tgsi_transform_instruction(struct tgsi_transform_context *ctx,
 
    /* virglrenderer doesn't resolve non-float output write properly,
     * so we have to first write to a temporary */
-   if ((inst->Src[0].Register.File == TGSI_FILE_CONSTANT ||
-        inst->Src[0].Register.File == TGSI_FILE_IMMEDIATE) &&
+   if (inst->Instruction.Opcode != TGSI_OPCODE_MOV &&
        !tgsi_get_opcode_info(inst->Instruction.Opcode)->is_tex &&
        !tgsi_get_opcode_info(inst->Instruction.Opcode)->is_store &&
        inst->Dst[0].Register.File == TGSI_FILE_OUTPUT &&