panvk: Fix the static scissor/viewport case

Even if we can build a static viewport descriptor, we will need the
static scissor/viewport data to fill the viewport sysvals.

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Tomeu Vizoso <tomeu.vizoso@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13077>
This commit is contained in:
Boris Brezillon 2021-09-15 09:03:26 +02:00 committed by Marge Bot
parent a5115faefa
commit e856386764
2 changed files with 10 additions and 6 deletions

View file

@ -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.
*/

View file

@ -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