我启用了所有验证图层并且错误和无警告并且应该能够呈现彩色三角形。但是,目前我看到的只是一个清除屏幕(黑色)或空屏幕(灰色),具体取决于我运行的机器。
进一步检查后,在我调用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
答案 0 :(得分:2)
只是想确认:UNUSED
肯定是VK_LAYER_LUNARG_api_dump
图层错误
代码中基本上有if(false) ... else print UNUSED
更新:问题fix PR。
所以这是一个死胡同。但你在Vulkan生态系统中发现了一个错误,这也是一件好事......
至于你的渲染问题,在几个地方你有1x1渲染目标(例如在vkCmdBeginRenderPass
中),所以没什么可看的。我认为Windows通常会这样做(最初创建0x0窗口),然后你必须对resize事件作出反应。