[Mesa-dev] [PATCH 1/2] radv: only disable out-of-order rast for perfect occlusion queries

Bas Nieuwenhuizen bas at basnieuwenhuizen.nl
Tue Apr 24 17:21:49 UTC 2018


On Tue, Apr 24, 2018 at 8:06 AM, Samuel Pitoiset
<samuel.pitoiset at gmail.com> wrote:
> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
> ---
>  src/amd/vulkan/radv_cmd_buffer.c | 18 ++++++++++--------
>  src/amd/vulkan/radv_query.c      |  4 ++--
>  2 files changed, 12 insertions(+), 10 deletions(-)
>
> diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
> index baab8db617..baa28d408b 100644
> --- a/src/amd/vulkan/radv_cmd_buffer.c
> +++ b/src/amd/vulkan/radv_cmd_buffer.c
> @@ -1334,6 +1334,7 @@ radv_emit_index_buffer(struct radv_cmd_buffer *cmd_buffer)
>
>  void radv_set_db_count_control(struct radv_cmd_buffer *cmd_buffer)
>  {
> +       bool has_perfect_queries = cmd_buffer->state.perfect_occlusion_queries_enabled;
>         struct radv_pipeline *pipeline = cmd_buffer->state.pipeline;
>         uint32_t pa_sc_mode_cntl_1 =
>                 pipeline ? pipeline->graphics.ms.pa_sc_mode_cntl_1 : 0;
> @@ -1342,11 +1343,12 @@ void radv_set_db_count_control(struct radv_cmd_buffer *cmd_buffer)
>         if(!cmd_buffer->state.active_occlusion_queries) {
>                 if (cmd_buffer->device->physical_device->rad_info.chip_class >= CIK) {
>                         if (G_028A4C_OUT_OF_ORDER_PRIMITIVE_ENABLE(pa_sc_mode_cntl_1) &&
> -                           pipeline->graphics.disable_out_of_order_rast_for_occlusion) {
> +                           pipeline->graphics.disable_out_of_order_rast_for_occlusion &&
> +                           has_perfect_queries) {
>                                 /* Re-enable out-of-order rasterization if the
>                                  * bound pipeline supports it and if it's has
> -                                * been disabled before starting occlusion
> -                                * queries.
> +                                * been disabled before starting any perfect
> +                                * occlusion queries.
>                                  */
>                                 radeon_set_context_reg(cmd_buffer->cs,
>                                                        R_028A4C_PA_SC_MODE_CNTL_1,
> @@ -1359,22 +1361,22 @@ void radv_set_db_count_control(struct radv_cmd_buffer *cmd_buffer)
>         } else {
>                 const struct radv_subpass *subpass = cmd_buffer->state.subpass;
>                 uint32_t sample_rate = subpass ? util_logbase2(subpass->max_sample_count) : 0;
> -               bool perfect = cmd_buffer->state.perfect_occlusion_queries_enabled;
>
>                 if (cmd_buffer->device->physical_device->rad_info.chip_class >= CIK) {
>                         db_count_control =
> -                               S_028004_PERFECT_ZPASS_COUNTS(perfect) |
> +                               S_028004_PERFECT_ZPASS_COUNTS(has_perfect_queries) |
>                                 S_028004_SAMPLE_RATE(sample_rate) |
>                                 S_028004_ZPASS_ENABLE(1) |
>                                 S_028004_SLICE_EVEN_ENABLE(1) |
>                                 S_028004_SLICE_ODD_ENABLE(1);
>
>                         if (G_028A4C_OUT_OF_ORDER_PRIMITIVE_ENABLE(pa_sc_mode_cntl_1) &&
> -                           pipeline->graphics.disable_out_of_order_rast_for_occlusion) {
> +                           pipeline->graphics.disable_out_of_order_rast_for_occlusion &&
> +                           has_perfect_queries) {
>                                 /* If the bound pipeline has enabled
>                                  * out-of-order rasterization, we should
> -                                * disable it before starting occlusion
> -                                * queries.
> +                                * disable it before starting any perfect
> +                                * occlusion queries.
>                                  */
>                                 pa_sc_mode_cntl_1 &= C_028A4C_OUT_OF_ORDER_PRIMITIVE_ENABLE;
>
> diff --git a/src/amd/vulkan/radv_query.c b/src/amd/vulkan/radv_query.c
> index 859a4a1d68..2b2e80f4e5 100644
> --- a/src/amd/vulkan/radv_query.c
> +++ b/src/amd/vulkan/radv_query.c
> @@ -1140,12 +1140,12 @@ static void emit_end_query(struct radv_cmd_buffer *cmd_buffer,
>
>                 cmd_buffer->state.active_occlusion_queries--;
>                 if (cmd_buffer->state.active_occlusion_queries == 0) {
> +                       radv_set_db_count_control(cmd_buffer);
> +

Why move this forward?
>                         /* Reset the perfect occlusion queries hint now that no
>                          * queries are active.
>                          */
>                         cmd_buffer->state.perfect_occlusion_queries_enabled = false;
> -
> -                       radv_set_db_count_control(cmd_buffer);
>                 }
>
>                 radeon_emit(cs, PKT3(PKT3_EVENT_WRITE, 2, 0));
> --
> 2.17.0
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list