Skip to content

vkAcquireNextImageKHR crashes in validation layers if vkGetSwapchainImagesKHR hasn't been called #358

@zeux

Description

@zeux

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.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions