pViewports总是未使用

时间:2017-06-15 06:43:41

标签: vulkan

我启用了所有验证图层并且错误和无警告并且应该能够呈现彩色三角形。但是,目前我看到的只是一个清除屏幕(黑色)或空屏幕(灰色),具体取决于我运行的机器。

进一步检查后,在我调用vkCreateGraphicsPipelines时,pViewports和pScissors总是被设置为UNUSED,即使我传入了值。我没有dynamicState,计数都是一个。

我错过了一面旗帜还是我的绑定有缺陷?

代码段:

Thread 0, Frame 0:
vkCreateGraphicsPipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines) returns VkResult VK_SUCCESS (0):
    device:                         VkDevice = 00000000056FD350
    pipelineCache:                  VkPipelineCache = 0000000000000000
    createInfoCount:                uint32_t = 1
    pCreateInfos:                   const VkGraphicsPipelineCreateInfo* = 000000000566BB38
        pCreateInfos[0]:                const VkGraphicsPipelineCreateInfo = 000000000566BB38:
            sType:                          VkStructureType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO (28)
            pNext:                          const void* = NULL
        ...
            pViewportState:                 const VkPipelineViewportStateCreateInfo* = 000000000725A920:
                sType:                          VkStructureType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO (22)
                pNext:                          const void* = NULL
                flags:                          VkPipelineViewportStateCreateFlags = 0
                viewportCount:                  uint32_t = 1
                pViewports:                     const VkViewport* = UNUSED
                scissorCount:                   uint32_t = 1
                pScissors:                      const VkRect2D* = UNUSED

调试打印:

 Pipeline_Info.pViewportState.pScissors before assign = 0
 Pipeline_Info.pViewportState.pViewports before assign = 0
 Pipeline_Info.pViewportState.pScissors after assign = 2350856
 Pipeline_Info.pViewportState.pViewports after assign = 2348296
 vkCreateGraphicsPipelines call result = 0

完整的API转储(参见第2107行): https://pastebin.com/MmXUBnk0

完整代码(对于那些好奇的人 - 请参阅第791行): https://github.com/AdaDoom3/AdaDoom3/blob/master/Engine/neo-engine-renderer.adb

1 个答案:

答案 0 :(得分:2)

只是想确认:UNUSED肯定是VK_LAYER_LUNARG_api_dump图层错误 代码中基本上有if(false) ... else print UNUSED 更新:问题fix PR

所以这是一个死胡同。但你在Vulkan生态系统中发现了一个错误,这也是一件好事......

至于你的渲染问题,在几个地方你有1x1渲染目标(例如在vkCmdBeginRenderPass中),所以没什么可看的。我认为Windows通常会这样做(最初创建0x0窗口),然后你必须对resize事件作出反应。