radv: remove small overhead of radv_pipeline_has_ngg()
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Thu, 20 May 2021 20:54:51 +0000 (22:54 +0200)
committerMarge Bot <eric+marge@anholt.net>
Mon, 24 May 2021 08:50:47 +0000 (08:50 +0000)
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/4784
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10908>

src/amd/vulkan/radv_cmd_buffer.c
src/amd/vulkan/radv_pipeline.c
src/amd/vulkan/radv_private.h

index 1ac322a..d25c152 100644 (file)
@@ -3054,7 +3054,7 @@ radv_flush_ngg_gs_state(struct radv_cmd_buffer *cmd_buffer)
    uint32_t ngg_gs_state = 0;
    uint32_t base_reg;
 
-   if (!radv_pipeline_has_gs(pipeline) || !radv_pipeline_has_ngg(pipeline))
+   if (!radv_pipeline_has_gs(pipeline) || !pipeline->graphics.is_ngg)
       return;
 
    /* By default NGG GS queries are disabled but they are enabled if the
@@ -4378,8 +4378,8 @@ radv_CmdBindPipeline(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipeline
 
       if (cmd_buffer->device->physical_device->rad_info.has_vgt_flush_ngg_legacy_bug &&
           cmd_buffer->state.emitted_pipeline &&
-          radv_pipeline_has_ngg(cmd_buffer->state.emitted_pipeline) &&
-          !radv_pipeline_has_ngg(cmd_buffer->state.pipeline)) {
+          cmd_buffer->state.emitted_pipeline->graphics.is_ngg &&
+          !cmd_buffer->state.pipeline->graphics.is_ngg) {
          /* Transitioning from NGG to legacy GS requires
           * VGT_FLUSH on GFX10 and Sienna Cichlid. VGT_FLUSH
           * is also emitted at the beginning of IBs when legacy
index 152e6c6..cc02758 100644 (file)
@@ -142,7 +142,7 @@ radv_pipeline_get_color_blend_state(const VkGraphicsPipelineCreateInfo *pCreateI
    return NULL;
 }
 
-bool
+static bool
 radv_pipeline_has_ngg(const struct radv_pipeline *pipeline)
 {
    struct radv_shader_variant *variant = NULL;
@@ -5481,6 +5481,8 @@ radv_pipeline_init(struct radv_pipeline *pipeline, struct radv_device *device,
    /* Find the last vertex shader stage that eventually uses streamout. */
    pipeline->streamout_shader = radv_pipeline_get_streamout_shader(pipeline);
 
+   pipeline->graphics.is_ngg = radv_pipeline_has_ngg(pipeline);
+
    radv_pipeline_generate_pm4(pipeline, pCreateInfo, extra, &blend);
 
    return result;
index ee67220..ba744a2 100644 (file)
@@ -1740,6 +1740,9 @@ struct radv_pipeline {
          /* Used for rbplus */
          uint32_t col_format;
          uint32_t cb_target_mask;
+
+         /* Whether the pipeline uses NGG (GFX10+). */
+         bool is_ngg;
       } graphics;
    };
 
@@ -1765,8 +1768,6 @@ radv_pipeline_has_tess(const struct radv_pipeline *pipeline)
    return pipeline->shaders[MESA_SHADER_TESS_CTRL] ? true : false;
 }
 
-bool radv_pipeline_has_ngg(const struct radv_pipeline *pipeline);
-
 bool radv_pipeline_has_ngg_passthrough(const struct radv_pipeline *pipeline);
 
 bool radv_pipeline_has_gs_copy_shader(const struct radv_pipeline *pipeline);