Mesa (main): radv: init states from VkPipelineFragmentShadingRateState 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: 2981ee5c7b1b35a17f0e29c39a3ead0346ac78a2
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=2981ee5c7b1b35a17f0e29c39a3ead0346ac78a2
Author: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Date: Mon May 23 11:33:30 2022 +0200
radv: init states from VkPipelineFragmentShadingRateState 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 | 29 +++++++++++++++++++++++++----
src/amd/vulkan/radv_private.h | 7 +++++++
2 files changed, 32 insertions(+), 4 deletions(-)
diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c
index 1654fbe6220..8093c08d8da 100644
--- a/src/amd/vulkan/radv_pipeline.c
+++ b/src/amd/vulkan/radv_pipeline.c
@@ -1903,6 +1903,27 @@ radv_pipeline_init_color_blend_info(struct radv_graphics_pipeline *pipeline,
return info;
}
+static struct radv_fragment_shading_rate_info
+radv_pipeline_init_fragment_shading_rate_info(struct radv_graphics_pipeline *pipeline,
+ const VkGraphicsPipelineCreateInfo *pCreateInfo)
+{
+ const VkPipelineFragmentShadingRateStateCreateInfoKHR *shading_rate =
+ vk_find_struct_const(pCreateInfo->pNext, PIPELINE_FRAGMENT_SHADING_RATE_STATE_CREATE_INFO_KHR);
+ struct radv_fragment_shading_rate_info info = {0};
+
+ if (shading_rate && !(pipeline->dynamic_states & RADV_DYNAMIC_FRAGMENT_SHADING_RATE)) {
+ info.size = shading_rate->fragmentSize;
+ for (int i = 0; i < 2; i++)
+ info.combiner_ops[i] = shading_rate->combinerOps[i];
+ } else {
+ info.size = (VkExtent2D){ 1, 1 };
+ info.combiner_ops[0] = VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR;
+ info.combiner_ops[1] = VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR;
+ }
+
+ return info;
+}
+
static struct radv_graphics_pipeline_info
radv_pipeline_init_graphics_info(struct radv_graphics_pipeline *pipeline,
const VkGraphicsPipelineCreateInfo *pCreateInfo)
@@ -1925,6 +1946,8 @@ 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);
+ info.fsr = radv_pipeline_init_fragment_shading_rate_info(pipeline, pCreateInfo);
+
/* VK_AMD_mixed_attachment_samples */
const VkAttachmentSampleCountInfoAMD *sample_info =
vk_find_struct_const(pCreateInfo->pNext, ATTACHMENT_SAMPLE_COUNT_INFO_AMD);
@@ -2118,12 +2141,10 @@ radv_pipeline_init_dynamic_state(struct radv_graphics_pipeline *pipeline,
!(states & RADV_DYNAMIC_VERTEX_INPUT))
pipeline->uses_dynamic_stride = true;
- const VkPipelineFragmentShadingRateStateCreateInfoKHR *shading_rate = vk_find_struct_const(
- pCreateInfo->pNext, PIPELINE_FRAGMENT_SHADING_RATE_STATE_CREATE_INFO_KHR);
if (states & RADV_DYNAMIC_FRAGMENT_SHADING_RATE) {
- dynamic->fragment_shading_rate.size = shading_rate->fragmentSize;
+ dynamic->fragment_shading_rate.size = info->fsr.size;
for (int i = 0; i < 2; i++)
- dynamic->fragment_shading_rate.combiner_ops[i] = shading_rate->combinerOps[i];
+ dynamic->fragment_shading_rate.combiner_ops[i] = info->fsr.combiner_ops[i];
}
if (states & RADV_DYNAMIC_DEPTH_BIAS_ENABLE) {
diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
index 092e2eb9988..b3930a5da4c 100644
--- a/src/amd/vulkan/radv_private.h
+++ b/src/amd/vulkan/radv_private.h
@@ -1989,6 +1989,11 @@ struct radv_color_blend_info {
} att[MAX_RTS];
};
+struct radv_fragment_shading_rate_info {
+ VkExtent2D size;
+ VkFragmentShadingRateCombinerOpKHR combiner_ops[2];
+};
+
struct radv_graphics_pipeline_info {
struct radv_vertex_input_info vi;
struct radv_input_assembly_info ia;
@@ -2003,6 +2008,8 @@ struct radv_graphics_pipeline_info {
struct radv_rendering_info ri;
struct radv_color_blend_info cb;
+ struct radv_fragment_shading_rate_info fsr;
+
/* VK_AMD_mixed_attachment_samples */
uint8_t color_att_samples;
uint8_t ds_att_samples;
More information about the mesa-commit
mailing list