diff options
author | Rob Clark <robclark@freedesktop.org> | 2015-02-25 13:54:25 -0500 |
---|---|---|
committer | Rob Clark <robclark@freedesktop.org> | 2015-03-03 10:41:00 -0500 |
commit | e9f2abe349886ae5423c7c31d201e7d587a3695a (patch) | |
tree | be373383fcc74246bb538a2d4228e0ebfee862f2 /src/gallium/drivers/freedreno/a4xx | |
parent | 9d732d3125e1b39788a642a5723aeb54cb1983f3 (diff) |
freedreno/ir3: handle flat bypass for a4xx
We may not need this for later a4xx patchlevels, but we do at least need
this for patchlevel 0. Bypass bary.f for fetching varyings when flat
shading is needed (rather than configure via cmdstream). This requires
a special dummy bary.f w/ (ei) flag to signal to scheduler when all
varyings are consumed. And requires shader variants based on rasterizer
flatshade state to handle TGSI_INTERPOLATE_COLOR.
Signed-off-by: Rob Clark <robclark@freedesktop.org>
Diffstat (limited to 'src/gallium/drivers/freedreno/a4xx')
-rw-r--r-- | src/gallium/drivers/freedreno/a4xx/fd4_draw.c | 5 | ||||
-rw-r--r-- | src/gallium/drivers/freedreno/a4xx/fd4_emit.h | 1 |
2 files changed, 4 insertions, 2 deletions
diff --git a/src/gallium/drivers/freedreno/a4xx/fd4_draw.c b/src/gallium/drivers/freedreno/a4xx/fd4_draw.c index b6bf650cfe0..57f257478a7 100644 --- a/src/gallium/drivers/freedreno/a4xx/fd4_draw.c +++ b/src/gallium/drivers/freedreno/a4xx/fd4_draw.c @@ -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; diff --git a/src/gallium/drivers/freedreno/a4xx/fd4_emit.h b/src/gallium/drivers/freedreno/a4xx/fd4_emit.h index cdfa0f4c53a..5dc3db8880e 100644 --- a/src/gallium/drivers/freedreno/a4xx/fd4_emit.h +++ b/src/gallium/drivers/freedreno/a4xx/fd4_emit.h @@ -55,7 +55,6 @@ struct fd4_emit { struct ir3_shader_key key; enum a4xx_color_fmt format; uint32_t dirty; - bool rasterflat; /* cached to avoid repeated lookups of same variants: */ struct ir3_shader_variant *vp, *fp; |