freedreno/ir3: handle flat bypass for a4xx
[mesa.git] / src / gallium / drivers / freedreno / a4xx / fd4_draw.c
index b6bf650cfe040c195f4d10d49bff9049a90ee6be..57f257478a792910605ad8a23b8ad97df68096bc 100644 (file)
@@ -100,6 +100,9 @@ fixup_shader_state(struct fd_context *ctx, struct ir3_shader_key *key)
                if (last_key->alpha != key->alpha)
                        ctx->prog.dirty |= FD_SHADER_DIRTY_FP;
 
+               if (last_key->rasterflat != key->rasterflat)
+                       ctx->prog.dirty |= FD_SHADER_DIRTY_FP;
+
                fd4_ctx->last_key = *key;
        }
 }
@@ -118,6 +121,7 @@ fd4_draw_vbo(struct fd_context *ctx, const struct pipe_draw_info *info)
                        .binning_pass = true,
                        .color_two_side = ctx->rasterizer ? ctx->rasterizer->light_twoside : false,
                        .alpha = util_format_is_alpha(pipe_surface_format(pfb->cbufs[0])),
+                       .rasterflat = ctx->rasterizer && ctx->rasterizer->flatshade,
                        // TODO set .half_precision based on render target format,
                        // ie. float16 and smaller use half, float32 use full..
                        .half_precision = !!(fd_mesa_debug & FD_DBG_FRAGHALF),
@@ -130,7 +134,6 @@ fd4_draw_vbo(struct fd_context *ctx, const struct pipe_draw_info *info)
                        .fsaturate_r = fd4_ctx->fsaturate_r,
                },
                .format = fd4_emit_format(pfb->cbufs[0]),
-               .rasterflat = ctx->rasterizer && ctx->rasterizer->flatshade,
        };
        unsigned dirty;