Mesa (main): radv: copy viewport/scissor when initializing radv_viewport_info

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


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

Author: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Date:   Fri May 20 16:07:13 2022 +0200

radv: copy viewport/scissor when initializing radv_viewport_info

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 | 22 ++++++++++++++--------
 src/amd/vulkan/radv_private.h  |  4 ++++
 2 files changed, 18 insertions(+), 8 deletions(-)

diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c
index 811352e9070..ff710801748 100644
--- a/src/amd/vulkan/radv_pipeline.c
+++ b/src/amd/vulkan/radv_pipeline.c
@@ -1694,6 +1694,16 @@ radv_pipeline_init_viewport_info(struct radv_graphics_pipeline *pipeline,
    struct radv_viewport_info info = {0};
 
    if (radv_is_raster_enabled(pipeline, pCreateInfo)) {
+      if (!(pipeline->dynamic_states & RADV_DYNAMIC_VIEWPORT)) {
+         typed_memcpy(info.viewports, vp->pViewports, vp->viewportCount);
+      }
+      info.viewport_count = vp->viewportCount;
+
+      if (!(pipeline->dynamic_states & RADV_DYNAMIC_SCISSOR)) {
+         typed_memcpy(info.scissors, vp->pScissors, vp->scissorCount);
+      }
+      info.scissor_count = vp->scissorCount;
+
       const VkPipelineViewportDepthClipControlCreateInfoEXT *depth_clip_control =
          vk_find_struct_const(vp->pNext, PIPELINE_VIEWPORT_DEPTH_CLIP_CONTROL_CREATE_INFO_EXT);
       if (depth_clip_control) {
@@ -1817,12 +1827,9 @@ radv_pipeline_init_dynamic_state(struct radv_graphics_pipeline *pipeline,
    struct radv_dynamic_state *dynamic = &pipeline->dynamic_state;
 
    if (needed_states & RADV_DYNAMIC_VIEWPORT) {
-      assert(pCreateInfo->pViewportState);
-
-      dynamic->viewport.count = pCreateInfo->pViewportState->viewportCount;
+      dynamic->viewport.count = info->vp.viewport_count;
       if (states & RADV_DYNAMIC_VIEWPORT) {
-         typed_memcpy(dynamic->viewport.viewports, pCreateInfo->pViewportState->pViewports,
-                      pCreateInfo->pViewportState->viewportCount);
+         typed_memcpy(dynamic->viewport.viewports, info->vp.viewports, info->vp.viewport_count);
          for (unsigned i = 0; i < dynamic->viewport.count; i++)
             radv_get_viewport_xform(&dynamic->viewport.viewports[i],
                                     dynamic->viewport.xform[i].scale, dynamic->viewport.xform[i].translate);
@@ -1830,10 +1837,9 @@ radv_pipeline_init_dynamic_state(struct radv_graphics_pipeline *pipeline,
    }
 
    if (needed_states & RADV_DYNAMIC_SCISSOR) {
-      dynamic->scissor.count = pCreateInfo->pViewportState->scissorCount;
+      dynamic->scissor.count = info->vp.scissor_count;
       if (states & RADV_DYNAMIC_SCISSOR) {
-         typed_memcpy(dynamic->scissor.scissors, pCreateInfo->pViewportState->pScissors,
-                      pCreateInfo->pViewportState->scissorCount);
+         typed_memcpy(dynamic->scissor.scissors, info->vp.scissors, info->vp.scissor_count);
       }
    }
 
diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
index 50db6c3d639..b70f9f84aab 100644
--- a/src/amd/vulkan/radv_private.h
+++ b/src/amd/vulkan/radv_private.h
@@ -1893,6 +1893,10 @@ struct radv_tessellation_info {
 
 struct radv_viewport_info {
    bool negative_one_to_one;
+   uint8_t viewport_count;
+   uint8_t scissor_count;
+   VkRect2D scissors[MAX_SCISSORS];
+   VkViewport viewports[MAX_VIEWPORTS];
 };
 
 struct radv_rasterization_info {



More information about the mesa-commit mailing list