lima: handle early-z and pixel kill better
[1] calls bit 12 of aux0 'pixel kill' which is likely forward pixel kill described in [2]. Blob sets this bit if early-z is enabled and blending is disabled and colormask is RGBA. Bit 8 seems to be always enabled with bit 9 (early-z). Let's mimic blob behavior. [1] https://web.archive.org/web/20171026123213/http://limadriver.org/Render_State/ [2] https://community.arm.com/developer/tools-software/graphics/b/blog/posts/killing-pixels---a-new-optimization-for-shading-on-arm-mali-gpus Reviewed-by: Andreas Baierl <ichgeh@imkreisrum.de> Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com> Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3754> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3754>
This commit is contained in:
committed by
Marge Bot
parent
582d0c5f14
commit
f43a3fc28f
@@ -1136,6 +1136,8 @@ lima_pack_render_state(struct lima_context *ctx, const struct pipe_draw_info *in
|
||||
struct lima_render_state *render =
|
||||
lima_ctx_buff_alloc(ctx, lima_ctx_buff_pp_plb_rsw,
|
||||
sizeof(*render));
|
||||
bool early_z = true;
|
||||
bool pixel_kill = true;
|
||||
|
||||
/* do hw support RGBA independ blend?
|
||||
* PIPE_CAP_INDEP_BLEND_ENABLE
|
||||
@@ -1239,15 +1241,27 @@ lima_pack_render_state(struct lima_context *ctx, const struct pipe_draw_info *in
|
||||
|
||||
render->textures_address = 0x00000000;
|
||||
|
||||
/* more investigation */
|
||||
render->aux0 = 0x00000100 | (ctx->vs->varying_stride >> 3);
|
||||
render->aux0 = (ctx->vs->varying_stride >> 3);
|
||||
render->aux1 = 0x00001000;
|
||||
if (ctx->blend->base.dither)
|
||||
render->aux1 |= 0x00002000;
|
||||
|
||||
/* Enable Early-Z if shader doesn't have discard */
|
||||
if (!fs->uses_discard)
|
||||
render->aux0 |= 0x200;
|
||||
if (fs->uses_discard) {
|
||||
early_z = false;
|
||||
pixel_kill = false;
|
||||
}
|
||||
|
||||
if (rt->blend_enable)
|
||||
pixel_kill = false;
|
||||
|
||||
if ((rt->colormask & PIPE_MASK_RGBA) != PIPE_MASK_RGBA)
|
||||
pixel_kill = false;
|
||||
|
||||
if (early_z)
|
||||
render->aux0 |= 0x300;
|
||||
|
||||
if (pixel_kill)
|
||||
render->aux0 |= 0x1000;
|
||||
|
||||
if (ctx->tex_stateobj.num_samplers) {
|
||||
render->textures_address =
|
||||
|
||||
Reference in New Issue
Block a user