diff --git a/src/panfrost/vulkan/panvk_cmd_buffer.c b/src/panfrost/vulkan/panvk_cmd_buffer.c index af0fcf3b316..3b427a2dcf0 100644 --- a/src/panfrost/vulkan/panvk_cmd_buffer.c +++ b/src/panfrost/vulkan/panvk_cmd_buffer.c @@ -141,6 +141,11 @@ panvk_CmdBindPipeline(VkCommandBuffer commandBuffer, memset(cmdbuf->descriptors[pipelineBindPoint].sysvals, 0, sizeof(cmdbuf->descriptors[pipelineBindPoint].sysvals)); + if (!(pipeline->dynamic_state_mask & BITFIELD_BIT(VK_DYNAMIC_STATE_VIEWPORT))) + cmdbuf->state.viewport = pipeline->viewport; + if (!(pipeline->dynamic_state_mask & BITFIELD_BIT(VK_DYNAMIC_STATE_SCISSOR))) + cmdbuf->state.scissor = pipeline->scissor; + /* Sysvals are passed through UBOs, we need dirty the UBO array if the * pipeline contain shaders using sysvals. */ diff --git a/src/panfrost/vulkan/panvk_vX_pipeline.c b/src/panfrost/vulkan/panvk_vX_pipeline.c index dfa11e0de5c..a60fc23b9bc 100644 --- a/src/panfrost/vulkan/panvk_vX_pipeline.c +++ b/src/panfrost/vulkan/panvk_vX_pipeline.c @@ -376,13 +376,12 @@ panvk_pipeline_builder_parse_viewport(struct panvk_pipeline_builder *builder, vpd); pipeline->vpd = pipeline->state_bo->ptr.gpu + builder->vpd_offset; - } else { - if (builder->create_info->pViewportState->pViewports) - pipeline->viewport = builder->create_info->pViewportState->pViewports[0]; - - if (builder->create_info->pViewportState->pScissors) - pipeline->scissor = builder->create_info->pViewportState->pScissors[0]; } + if (panvk_pipeline_static_state(pipeline, VK_DYNAMIC_STATE_VIEWPORT)) + pipeline->viewport = builder->create_info->pViewportState->pViewports[0]; + + if (panvk_pipeline_static_state(pipeline, VK_DYNAMIC_STATE_SCISSOR)) + pipeline->scissor = builder->create_info->pViewportState->pScissors[0]; } static void