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