Mesa (main): radv: init states from VkAttachmentSampleCountInfo at only one place

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon May 30 12:39:44 UTC 2022


Module: Mesa
Branch: main
Commit: b36bee672fb91dcada5264344508d9710e2ce425
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=b36bee672fb91dcada5264344508d9710e2ce425

Author: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Date:   Fri May 20 15:25:12 2022 +0200

radv: init states from VkAttachmentSampleCountInfo at only one place

Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16672>

---

 src/amd/vulkan/radv_pipeline.c | 53 ++++++++++++++++++++----------------------
 src/amd/vulkan/radv_private.h  |  4 ++++
 2 files changed, 29 insertions(+), 28 deletions(-)

diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c
index 25074da782b..3796c0c2f38 100644
--- a/src/amd/vulkan/radv_pipeline.c
+++ b/src/amd/vulkan/radv_pipeline.c
@@ -869,45 +869,30 @@ si_translate_fill(VkPolygonMode func)
 }
 
 static unsigned
-radv_pipeline_color_samples(const VkGraphicsPipelineCreateInfo *pCreateInfo,
-                            const struct radv_graphics_pipeline_info *info)
+radv_pipeline_color_samples( const struct radv_graphics_pipeline_info *info)
 {
-   const VkAttachmentSampleCountInfoAMD *sample_info =
-      vk_find_struct_const(pCreateInfo->pNext, ATTACHMENT_SAMPLE_COUNT_INFO_AMD);
-   if (sample_info && sample_info->colorAttachmentCount > 0) {
-      unsigned samples = 1;
-      for (uint32_t i = 0; i < sample_info->colorAttachmentCount; ++i) {
-         if (info->ri.color_att_formats[i] != VK_FORMAT_UNDEFINED) {
-            samples = MAX2(samples, sample_info->pColorAttachmentSamples[i]);
-         }
-      }
-      return samples;
+   if (info->color_att_samples && radv_pipeline_has_color_attachments(&info->ri)) {
+      return info->color_att_samples;
    }
 
    return info->ms.raster_samples;
 }
 
 static unsigned
-radv_pipeline_depth_samples(const VkGraphicsPipelineCreateInfo *pCreateInfo,
-                            const struct radv_graphics_pipeline_info *info)
+radv_pipeline_depth_samples(const struct radv_graphics_pipeline_info *info)
 {
-   const VkAttachmentSampleCountInfoAMD *sample_info =
-      vk_find_struct_const(pCreateInfo->pNext, ATTACHMENT_SAMPLE_COUNT_INFO_AMD);
-   if (sample_info) {
-      if (radv_pipeline_has_ds_attachments(&info->ri)) {
-         return sample_info->depthStencilAttachmentSamples;
-      }
+   if (info->ds_att_samples && radv_pipeline_has_ds_attachments(&info->ri)) {
+      return info->ds_att_samples;
    }
 
    return info->ms.raster_samples;
 }
 
 static uint8_t
-radv_pipeline_get_ps_iter_samples(const VkGraphicsPipelineCreateInfo *pCreateInfo,
-                                  const struct radv_graphics_pipeline_info *info)
+radv_pipeline_get_ps_iter_samples(const struct radv_graphics_pipeline_info *info)
 {
    uint32_t ps_iter_samples = 1;
-   uint32_t num_samples = radv_pipeline_color_samples(pCreateInfo, info);
+   uint32_t num_samples = radv_pipeline_color_samples(info);
 
    if (info->ms.sample_shading_enable) {
       ps_iter_samples = ceilf(info->ms.min_sample_shading * num_samples);
@@ -1105,7 +1090,7 @@ radv_pipeline_init_multisample_state(struct radv_graphics_pipeline *pipeline,
    if (pipeline->base.shaders[MESA_SHADER_FRAGMENT]->info.ps.uses_sample_shading) {
       ps_iter_samples = ms->num_samples;
    } else {
-      ps_iter_samples = radv_pipeline_get_ps_iter_samples(pCreateInfo, info);
+      ps_iter_samples = radv_pipeline_get_ps_iter_samples(info);
    }
 
    if (info->rs.order == VK_RASTERIZATION_ORDER_RELAXED_AMD) {
@@ -1156,7 +1141,7 @@ radv_pipeline_init_multisample_state(struct radv_graphics_pipeline *pipeline,
    }
 
    if (ms->num_samples > 1) {
-      uint32_t z_samples = radv_pipeline_depth_samples(pCreateInfo, info);
+      uint32_t z_samples = radv_pipeline_depth_samples(info);
       unsigned log_samples = util_logbase2(ms->num_samples);
       unsigned log_z_samples = util_logbase2(z_samples);
       unsigned log_ps_iter_samples = util_logbase2(ps_iter_samples);
@@ -1919,6 +1904,18 @@ radv_pipeline_init_graphics_info(struct radv_graphics_pipeline *pipeline,
    info.ri = radv_pipeline_init_rendering_info(pipeline, pCreateInfo);
    info.cb = radv_pipeline_init_color_blend_info(pipeline, pCreateInfo);
 
+   /* VK_AMD_mixed_attachment_samples */
+   const VkAttachmentSampleCountInfoAMD *sample_info =
+      vk_find_struct_const(pCreateInfo->pNext, ATTACHMENT_SAMPLE_COUNT_INFO_AMD);
+   if (sample_info) {
+      for (uint32_t i = 0; i < sample_info->colorAttachmentCount; ++i) {
+         if (info.ri.color_att_formats[i] != VK_FORMAT_UNDEFINED) {
+            info.color_att_samples = MAX2(info.color_att_samples, sample_info->pColorAttachmentSamples[i]);
+         }
+      }
+      info.ds_att_samples = sample_info->depthStencilAttachmentSamples;
+   }
+
    return info;
 }
 
@@ -2226,8 +2223,8 @@ radv_pipeline_init_depth_stencil_state(struct radv_graphics_pipeline *pipeline,
 
    if (pdevice->rad_info.gfx_level >= GFX11) {
       unsigned max_allowed_tiles_in_wave = 0;
-      unsigned num_samples = MAX2(radv_pipeline_color_samples(pCreateInfo, info),
-                                  radv_pipeline_depth_samples(pCreateInfo, info));
+      unsigned num_samples = MAX2(radv_pipeline_color_samples(info),
+                                  radv_pipeline_depth_samples(info));
 
       if (pdevice->rad_info.has_dedicated_vram) {
          if (num_samples == 8)
@@ -3360,7 +3357,7 @@ radv_generate_graphics_pipeline_key(const struct radv_graphics_pipeline *pipelin
    key.tcs.tess_input_vertices = info->ts.patch_control_points;
 
    if (info->ms.raster_samples > 1) {
-      uint32_t ps_iter_samples = radv_pipeline_get_ps_iter_samples(pCreateInfo, info);
+      uint32_t ps_iter_samples = radv_pipeline_get_ps_iter_samples(info);
       key.ps.num_samples = info->ms.raster_samples;
       key.ps.log2_ps_iter_samples = util_logbase2(ps_iter_samples);
    }
diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
index 0fd8012b0a8..05c5b976b4b 100644
--- a/src/amd/vulkan/radv_private.h
+++ b/src/amd/vulkan/radv_private.h
@@ -1995,6 +1995,10 @@ struct radv_graphics_pipeline_info {
    struct radv_depth_stencil_info ds;
    struct radv_rendering_info ri;
    struct radv_color_blend_info cb;
+
+   /* VK_AMD_mixed_attachment_samples */
+   uint8_t color_att_samples;
+   uint8_t ds_att_samples;
 };
 
 struct radv_pipeline {



More information about the mesa-commit mailing list