viewportCount can't be assumed to be the number of scissors

* Although normally viewportCount == scissorCount, if viewport is
  DYNAMIC_WITH_COUNT and scissor is only dynamic (or fixed) the number of
  scissors must be used strictly.
This commit is contained in:
baldurk
2025-10-06 14:21:10 +01:00
parent a4ae1e881a
commit 2485eefc80
2 changed files with 14 additions and 1 deletions
+13 -1
View File
@@ -1424,13 +1424,22 @@ void VulkanCreationInfo::Pipeline::Init(VulkanResourceManager *resourceMan,
viewportCount = 0;
viewports.resize(viewportCount);
scissors.resize(viewportCount);
for(uint32_t i = 0; i < viewportCount; i++)
{
if(pCreateInfo->pViewportState->pViewports)
viewports[i] = pCreateInfo->pViewportState->pViewports[i];
}
if(pCreateInfo->pViewportState)
scissorCount = pCreateInfo->pViewportState->scissorCount;
else
scissorCount = 0;
scissors.resize(scissorCount);
for(uint32_t i = 0; i < scissorCount; i++)
{
if(pCreateInfo->pViewportState->pScissors)
scissors[i] = pCreateInfo->pViewportState->pScissors[i];
}
@@ -1751,6 +1760,7 @@ void VulkanCreationInfo::Pipeline::Init(VulkanResourceManager *resourceMan,
vertLayout = pipeInfo.vertLayout;
viewportCount = pipeInfo.viewportCount;
scissorCount = pipeInfo.scissorCount;
viewports = pipeInfo.viewports;
scissors = pipeInfo.scissors;
@@ -2013,6 +2023,7 @@ void VulkanCreationInfo::Pipeline::Init(VulkanResourceManager *resourceMan, Vulk
tessellationDomainOrigin = VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT;
viewportCount = 0;
scissorCount = 0;
// VkPipelineRasterStateCreateInfo
depthClampEnable = false;
@@ -2079,6 +2090,7 @@ void VulkanCreationInfo::Pipeline::Init(VulkanResourceManager *resourceMan,
tessellationDomainOrigin = VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT;
viewportCount = 0;
scissorCount = 0;
// VkPipelineRasterStateCreateInfo
depthClampEnable = false;
+1
View File
@@ -364,6 +364,7 @@ struct VulkanCreationInfo
// VkPipelineViewportStateCreateInfo
uint32_t viewportCount;
uint32_t scissorCount;
rdcarray<VkViewport> viewports;
rdcarray<VkRect2D> scissors;