diff --git a/src/broadcom/vulkan/v3dv_private.h b/src/broadcom/vulkan/v3dv_private.h index 3656db97ac5..ee5b4b84853 100644 --- a/src/broadcom/vulkan/v3dv_private.h +++ b/src/broadcom/vulkan/v3dv_private.h @@ -1082,6 +1082,9 @@ struct v3dv_job { */ bool decided_global_ez_enable; + /* If the job emitted any draw calls with Early Z/S enabled */ + bool has_ez_draws; + /* If this job has been configured to use early Z/S clear */ bool early_zs_clear; diff --git a/src/broadcom/vulkan/v3dvx_cmd_buffer.c b/src/broadcom/vulkan/v3dvx_cmd_buffer.c index ad3e9ba35a9..58405714b28 100644 --- a/src/broadcom/vulkan/v3dvx_cmd_buffer.c +++ b/src/broadcom/vulkan/v3dvx_cmd_buffer.c @@ -754,11 +754,8 @@ set_rcl_early_z_config(struct v3dv_job *job, bool *early_z_disable, uint32_t *early_z_test_and_update_direction) { - /* If this is true then we have not emitted any draw calls in this job - * and we don't get any benefits form early Z. - */ - if (!job->decided_global_ez_enable) { - assert(job->draw_count == 0); + /* Disable if none of the draw calls in this job enabled EZ */ + if (!job->has_ez_draws) { *early_z_disable = true; return; } @@ -1533,6 +1530,9 @@ job_update_ez_state(struct v3dv_job *job, job->ez_state = V3D_EZ_DISABLED; } + if (!disable_ez) + job->has_ez_draws = true; + return !disable_ez; }