diff --git a/src/gallium/drivers/panfrost/pan_fb_preload.c b/src/gallium/drivers/panfrost/pan_fb_preload.c index b28572bf6cc..17e103d18df 100644 --- a/src/gallium/drivers/panfrost/pan_fb_preload.c +++ b/src/gallium/drivers/panfrost/pan_fb_preload.c @@ -258,8 +258,9 @@ pan_preload_emit_rsd(const struct pan_preload_shader_data *preload_shader, cfg.properties.zs_update_operation = MALI_PIXEL_KILL_FORCE_LATE; cfg.properties.pixel_kill_operation = MALI_PIXEL_KILL_FORCE_LATE; } else { - cfg.properties.zs_update_operation = MALI_PIXEL_KILL_WEAK_EARLY; - cfg.properties.pixel_kill_operation = MALI_PIXEL_KILL_WEAK_EARLY; + /* Skipping ATEST requires forcing Z/S */ + cfg.properties.zs_update_operation = MALI_PIXEL_KILL_FORCE_EARLY; + cfg.properties.pixel_kill_operation = MALI_PIXEL_KILL_FORCE_EARLY; } /* However, while shaders writing Z/S can normally be killed, on v6 @@ -586,6 +587,7 @@ pan_preload_get_shader(struct pan_fb_preload_cache *cache, struct panfrost_compile_inputs inputs = { .gpu_id = cache->gpu_id, + .is_blit = true, .no_idvs = true, }; struct util_dynarray binary; @@ -1187,8 +1189,9 @@ pan_preload_emit_dcd(struct pan_fb_preload_cache *cache, struct pan_pool *pool, cfg.pixel_kill_operation = MALI_PIXEL_KILL_FORCE_LATE; cfg.blend_count = 0; } else { - cfg.zs_update_operation = MALI_PIXEL_KILL_WEAK_EARLY; - cfg.pixel_kill_operation = MALI_PIXEL_KILL_WEAK_EARLY; + /* Skipping ATEST requires forcing Z/S */ + cfg.zs_update_operation = MALI_PIXEL_KILL_FORCE_EARLY; + cfg.pixel_kill_operation = MALI_PIXEL_KILL_FORCE_EARLY; cfg.blend = blend.gpu; cfg.blend_count = bd_count; diff --git a/src/panfrost/vulkan/panvk_vX_cmd_fb_preload.c b/src/panfrost/vulkan/panvk_vX_cmd_fb_preload.c index 248c3662faf..28d96508def 100644 --- a/src/panfrost/vulkan/panvk_vX_cmd_fb_preload.c +++ b/src/panfrost/vulkan/panvk_vX_cmd_fb_preload.c @@ -172,6 +172,7 @@ get_preload_shader(struct panvk_device *dev, struct panfrost_compile_inputs inputs = { .gpu_id = phys_dev->kmod.props.gpu_prod_id, .no_ubo_to_push = true, + .is_blit = true, }; pan_shader_preprocess(nir, inputs.gpu_id); @@ -374,8 +375,9 @@ cmd_emit_dcd(struct panvk_cmd_buffer *cmdbuf, struct pan_fb_info *fbinfo, cfg.stencil_back = cfg.stencil_front; if (key->aspects == VK_IMAGE_ASPECT_COLOR_BIT) { - cfg.properties.zs_update_operation = MALI_PIXEL_KILL_WEAK_EARLY; - cfg.properties.pixel_kill_operation = MALI_PIXEL_KILL_WEAK_EARLY; + /* Skipping ATEST requires forcing Z/S */ + cfg.properties.zs_update_operation = MALI_PIXEL_KILL_FORCE_EARLY; + cfg.properties.pixel_kill_operation = MALI_PIXEL_KILL_FORCE_EARLY; } else { /* Writing Z/S requires late updates */ cfg.properties.zs_update_operation = MALI_PIXEL_KILL_FORCE_LATE; @@ -617,8 +619,9 @@ cmd_emit_dcd(struct panvk_cmd_buffer *cmdbuf, struct pan_fb_info *fbinfo, pan_pack(&dcds[dcd_idx], DRAW, cfg) { if (key->aspects == VK_IMAGE_ASPECT_COLOR_BIT) { - cfg.zs_update_operation = MALI_PIXEL_KILL_WEAK_EARLY; - cfg.pixel_kill_operation = MALI_PIXEL_KILL_WEAK_EARLY; + /* Skipping ATEST requires forcing Z/S */ + cfg.zs_update_operation = MALI_PIXEL_KILL_FORCE_EARLY; + cfg.pixel_kill_operation = MALI_PIXEL_KILL_FORCE_EARLY; cfg.blend = bds.gpu; cfg.blend_count = bd_count;