vkAcquireNextImageKHR crashes in validation layers if vkGetSwapchainImagesKHR hasn't been called
zeux opened this issue · 3 comments
zeux commented
If you call vkAcquireNextImageKHR before calling vkGetSwapchainImagesKHR, validation layers crash with this callstack:
VkLayer_core_validation.dll!core_validation::PostCallRecordAcquireNextImageKHR(core_validation::layer_data * dev_data, VkDevice_T * device, VkSwapchainKHR_T * swapchain, unsigned __int64 timeout, VkSemaphore_T * semaphore, VkFence_T * fence, unsigned int * pImageIndex) Line 11754 C++
VkLayer_core_validation.dll!core_validation::AcquireNextImageKHR(VkDevice_T * device, VkSwapchainKHR_T * swapchain, unsigned __int64 timeout, VkSemaphore_T * semaphore, VkFence_T * fence, unsigned int * pImageIndex) Line 11775 C++
VkLayer_object_tracker.dll!object_tracker::AcquireNextImageKHR(VkDevice_T * device, VkSwapchainKHR_T * swapchain, unsigned __int64 timeout, VkSemaphore_T * semaphore, VkFence_T * fence, unsigned int * pImageIndex) Line 2974 C++
VkLayer_parameter_validation.dll!parameter_validation::vkAcquireNextImageKHR(VkDevice_T * device, VkSwapchainKHR_T * swapchain, unsigned __int64 timeout, VkSemaphore_T * semaphore, VkFence_T * fence, unsigned int * pImageIndex) Line 7731 C++
VkLayer_threading.dll!threading::AcquireNextImageKHR(VkDevice_T * device, VkSwapchainKHR_T * swapchain, unsigned __int64 timeout, VkSemaphore_T * semaphore, VkFence_T * fence, unsigned int * pImageIndex) Line 3652 C++
Here:
// Mark the image as acquired.
auto swapchain_data = GetSwapchainNode(dev_data, swapchain);
auto image = swapchain_data->images[*pImageIndex];
auto image_state = GetImageState(dev_data, image);
The issue is that *pImageIndex is 0 (as returned by the driver), but swapchain_data->images is empty.
jzulauf-lunarg commented
Triage notes:
two parts to this
- deduplicate the vkAcquireNextImageKHR and vkAcquireNextImage2KHR validate and record logic
- add defensive checks for invalid swapchain handle (VU codegen'd in Object Tracker) causing null returns from GetSwapchainNode
mark-lunarg commented
Tony-LunarG commented
Resolved in PR #402