Mesa (main): radv: init states from pViewportState at only one place
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed May 18 14:00:41 UTC 2022
Module: Mesa
Branch: main
Commit: 7f08fe0b9f9407d9dfe13671c8afacd584e2c80e
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=7f08fe0b9f9407d9dfe13671c8afacd584e2c80e
Author: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Date: Mon May 16 18:42:53 2022 +0200
radv: init states from pViewportState at only one place
Except the viewport/scissor arrays to avoid useless array copies.
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/16552>
---
src/amd/vulkan/radv_pipeline.c | 29 +++++++++++++----------------
src/amd/vulkan/radv_private.h | 4 ++++
2 files changed, 17 insertions(+), 16 deletions(-)
diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c
index f59c56e8068..d3441783a6f 100644
--- a/src/amd/vulkan/radv_pipeline.c
+++ b/src/amd/vulkan/radv_pipeline.c
@@ -1688,6 +1688,7 @@ radv_pipeline_init_pre_raster_info(struct radv_pipeline *pipeline,
const VkGraphicsPipelineCreateInfo *pCreateInfo)
{
const VkPipelineTessellationStateCreateInfo *ts = pCreateInfo->pTessellationState;
+ const VkPipelineViewportStateCreateInfo *vp = pCreateInfo->pViewportState;
const VkShaderStageFlagBits tess_stages = VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT |
VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT;
struct radv_pre_raster_info pre_rast_info = {0};
@@ -1703,6 +1704,15 @@ radv_pipeline_init_pre_raster_info(struct radv_pipeline *pipeline,
}
}
+ /* Viewport */
+ if (radv_is_raster_enabled(pipeline, pCreateInfo)) {
+ const VkPipelineViewportDepthClipControlCreateInfoEXT *depth_clip_control =
+ vk_find_struct_const(vp->pNext, PIPELINE_VIEWPORT_DEPTH_CLIP_CONTROL_CREATE_INFO_EXT);
+ if (depth_clip_control) {
+ pre_rast_info.viewport.negative_one_to_one = !!depth_clip_control->negativeOneToOne;
+ }
+ }
+
return pre_rast_info;
}
@@ -2008,21 +2018,6 @@ radv_pipeline_init_raster_state(struct radv_pipeline *pipeline,
VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT;
}
-static void
-radv_pipeline_init_viewport_state(struct radv_pipeline *pipeline,
- const VkGraphicsPipelineCreateInfo *pCreateInfo)
-{
- if (!radv_is_raster_enabled(pipeline, pCreateInfo))
- return;
-
- const VkPipelineViewportDepthClipControlCreateInfoEXT *depth_clip_control =
- vk_find_struct_const(pCreateInfo->pViewportState->pNext,
- PIPELINE_VIEWPORT_DEPTH_CLIP_CONTROL_CREATE_INFO_EXT);
- if (depth_clip_control) {
- pipeline->graphics.negative_one_to_one = !!depth_clip_control->negativeOneToOne;
- }
-}
-
static struct radv_depth_stencil_state
radv_pipeline_init_depth_stencil_state(struct radv_pipeline *pipeline,
const VkGraphicsPipelineCreateInfo *pCreateInfo)
@@ -6757,7 +6752,9 @@ radv_graphics_pipeline_init(struct radv_pipeline *pipeline, struct radv_device *
if (!radv_pipeline_has_mesh(pipeline))
radv_pipeline_init_input_assembly_state(pipeline, pCreateInfo, &vi_info);
radv_pipeline_init_dynamic_state(pipeline, pCreateInfo, &vi_info);
- radv_pipeline_init_viewport_state(pipeline, pCreateInfo);
+
+ pipeline->graphics.negative_one_to_one = pre_rast_info.viewport.negative_one_to_one;
+
radv_pipeline_init_raster_state(pipeline, pCreateInfo);
struct radv_depth_stencil_state ds_state =
diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
index 44deaa3028d..7651ff783f1 100644
--- a/src/amd/vulkan/radv_private.h
+++ b/src/amd/vulkan/radv_private.h
@@ -1882,6 +1882,10 @@ struct radv_pre_raster_info {
uint32_t patch_control_points;
VkTessellationDomainOrigin domain_origin;
} tess;
+
+ struct {
+ bool negative_one_to_one;
+ } viewport;
};
struct radv_pipeline {
More information about the mesa-commit
mailing list