result = device_dispatch_table(device)->GetSwapchainImagesKHR(
device, swapchain, pCount, pSwapchainImages);
+// TBD: Should we validate that this function was called once with
+// pSwapchainImages set to NULL (and record pCount at that time), and then
+// called again with a non-NULL pSwapchainImages?
if ((result == VK_SUCCESS) && pSwapchain &&pSwapchainImages &&
pCount && (*pCount > 0)) {
// Record the images and their state:
if (((result == VK_SUCCESS) || (result == VK_SUBOPTIMAL_KHR)) &&
pSwapchain) {
- if (*pImageIndex >= pSwapchain->imageCount) {
- LOG_ERROR(VK_OBJECT_TYPE_SWAPCHAIN_KHR, swapchain,
- "VkSwapchainKHR",
- SWAPCHAIN_INDEX_TOO_LARGE,
- "%s() returned an index that's too large (i.e. %d). "
- "There are only %d images in this VkSwapchainKHR.",
- __FUNCTION__, *pImageIndex, pSwapchain->imageCount);
- }
- if (pSwapchain->images[*pImageIndex].ownedByApp) {
- LOG_ERROR(VK_OBJECT_TYPE_SWAPCHAIN_KHR, swapchain,
- "VkSwapchainKHR",
- SWAPCHAIN_INDEX_ALREADY_IN_USE,
- "%s() returned an index (i.e. %d) for an image that "
- "is already owned by the application.\n",
- __FUNCTION__, *pImageIndex);
- }
// Change the state of the image (now owned by the application):
pSwapchain->images[*pImageIndex].ownedByApp = true;
}
SWAPCHAIN_DESTROY_SWAP_DIFF_DEVICE, // Called vkDestroySwapchainKHR() with a different VkDevice than vkCreateSwapchainKHR()
SWAPCHAIN_APP_OWNS_TOO_MANY_IMAGES, // vkAcquireNextImageKHR() asked for more images than are available
SWAPCHAIN_INDEX_TOO_LARGE, // Index is too large for swapchain
- SWAPCHAIN_INDEX_ALREADY_IN_USE, // vkAcquireNextImageKHR() returned index that is already owned by app
SWAPCHAIN_INDEX_NOT_IN_USE, // vkQueuePresentKHR() given index that is not owned by app
} SWAPCHAIN_ERROR;
| vkCreateSwapchainKHR(pCreateInfo->presentMode) | Validates vkCreateSwapchainKHR(pCreateInfo->presentMode) | CREATE_SWAP_BAD_PRESENT_MODE | vkCreateSwapchainKHR | NA | None |
| Use same device for swapchain | Validates that vkDestroySwapchainKHR() called with the same VkDevice as vkCreateSwapchainKHR() | DESTROY_SWAP_DIFF_DEVICE | vkDestroySwapchainKHR | NA | None |
| Don't use too many images | Validates that app never tries to own too many swapchain images at a time | APP_OWNS_TOO_MANY_IMAGES | vkAcquireNextImageKHR | NA | None |
-| Index too large | Validates that an image index is within the number of images in a swapchain | INDEX_TOO_LARGE | vkAcquireNextImageKHR vkQueuePresentKHR | NA | None |
-| Can't use an simultaneously use an image | If vkAcquireNextImageKHR() returns index of an image that is already owned by the application | INDEX_ALREADY_IN_USE | vkAcquireNextImageKHR | NA | None |
+| Index too large | Validates that an image index is within the number of images in a swapchain | INDEX_TOO_LARGE | vkQueuePresentKHR | NA | None |
| Can't present a non-owned image | Validates that application only presents images that it owns | INDEX_NOT_IN_USE | vkQueuePresentKHR | NA | None |
### Swapchain Pending Work