Ok, I have a log now. It is until the first queue present that produces the validation error. General method:
- Before the render pass the image is transferred from VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL to VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL.
- The render pass attaches the resolve image at index 2. It has initialLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL and finalLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL. Thus when the render pass ends I would expect the resolve image to be in VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL.
- Finally vkUpdateDescriptorSets is called and makes the image a shader input. This seems to produce an UNASSIGNED-CoreValidation-DrawState-InvalidImageLayout complaining that the image is in VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL when it should be in VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL.
I had to trim the log because txt upload is not allowed. The excerpt should include the calls that have to do with the resolve image, its view, the framebuffer and render pass. I know that the loadops etc. are suboptimal, I want to get rid of the validation error first.
VkImage 0x5555581deb58 (Resolve image)
VkImageView 0x5555581e1dd8
VkFramebuffer 0x5555581c3108
VkRenderPass 0x5555581c2f68
4092:
Thread 0, Frame 0:
vkCreateImage(device, pCreateInfo, pAllocator, pImage) returns VkResult VK_SUCCESS (0):
device: VkDevice = 0x555557b9a8f8
pCreateInfo: const VkImageCreateInfo* = 0x7fffffffb450:
sType: VkStructureType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO (14)
pNext: const void* = NULL
flags: VkImageCreateFlags = 0
imageType: VkImageType = VK_IMAGE_TYPE_2D (1)
format: VkFormat = VK_FORMAT_R8G8B8A8_UNORM (37)
extent: VkExtent3D = 0x7fffffffb46c:
width: uint32_t = 1000
height: uint32_t = 800
depth: uint32_t = 1
mipLevels: uint32_t = 1
arrayLayers: uint32_t = 1
samples: VkSampleCountFlagBits = 1 (VK_SAMPLE_COUNT_1_BIT)
tiling: VkImageTiling = VK_IMAGE_TILING_OPTIMAL (0)
usage: VkImageUsageFlags = 20 (VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)
sharingMode: VkSharingMode = VK_SHARING_MODE_EXCLUSIVE (0)
queueFamilyIndexCount: uint32_t = 0
pQueueFamilyIndices: const uint32_t* = UNUSED
initialLayout: VkImageLayout = VK_IMAGE_LAYOUT_UNDEFINED (0)
pAllocator: const VkAllocationCallbacks* = NULL
pImage: VkImage* = 0x5555581deb58
4117:
Thread 0, Frame 0:
vkGetImageMemoryRequirements(device, image, pMemoryRequirements) returns void:
device: VkDevice = 0x555557b9a8f8
image: VkImage = 0x5555581deb58
pMemoryRequirements: VkMemoryRequirements* = 0x5555581df240:
size: VkDeviceSize = 3612672
alignment: VkDeviceSize = 65536
memoryTypeBits: uint32_t = 130
4135:
Thread 0, Frame 0:
vkGetImageMemoryRequirements(device, image, pMemoryRequirements) returns void:
device: VkDevice = 0x555557b9a8f8
image: VkImage = 0x5555581deb58
pMemoryRequirements: VkMemoryRequirements* = 0x7fffffffb5f0:
size: VkDeviceSize = 3612672
alignment: VkDeviceSize = 65536
memoryTypeBits: uint32_t = 130
4155:
Thread 0, Frame 0:
vkBindImageMemory(device, image, memory, memoryOffset) returns VkResult VK_SUCCESS (0):
device: VkDevice = 0x555557b9a8f8
image: VkImage = 0x5555581deb58
memory: VkDeviceMemory = 0x5555581df768
memoryOffset: VkDeviceSize = 0
4183:
Thread 0, Frame 0:
vkCmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers) returns void:
commandBuffer: VkCommandBuffer = 0x5555581c6a58
srcStageMask: VkPipelineStageFlags = 1 (VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT)
dstStageMask: VkPipelineStageFlags = 1024 (VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)
dependencyFlags: VkDependencyFlags = 0
memoryBarrierCount: uint32_t = 0
pMemoryBarriers: const VkMemoryBarrier* = NULL
bufferMemoryBarrierCount: uint32_t = 0
pBufferMemoryBarriers: const VkBufferMemoryBarrier* = NULL
imageMemoryBarrierCount: uint32_t = 1
pImageMemoryBarriers: const VkImageMemoryBarrier* = 0x7fffe40076f8
pImageMemoryBarriers[0]: const VkImageMemoryBarrier = 0x7fffe40076f8:
sType: VkStructureType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER (45)
pNext: const void* = NULL
srcAccessMask: VkAccessFlags = 0
dstAccessMask: VkAccessFlags = 384 (VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT)
oldLayout: VkImageLayout = VK_IMAGE_LAYOUT_UNDEFINED (0)
newLayout: VkImageLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL (2)
srcQueueFamilyIndex: uint32_t = 4294967295
dstQueueFamilyIndex: uint32_t = 4294967295
image: VkImage = 0x5555581deb58
subresourceRange: VkImageSubresourceRange = 0x7fffe4007728:
aspectMask: VkImageAspectFlags = 1 (VK_IMAGE_ASPECT_COLOR_BIT)
baseMipLevel: uint32_t = 0
levelCount: uint32_t = 1
baseArrayLayer: uint32_t = 0
layerCount: uint32_t = 1
4255:
Thread 0, Frame 0:
vkCreateImageView(device, pCreateInfo, pAllocator, pView) returns VkResult VK_SUCCESS (0):
device: VkDevice = 0x555557b9a8f8
pCreateInfo: const VkImageViewCreateInfo* = 0x7fffffffb450:
sType: VkStructureType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO (15)
pNext: const void* = NULL
flags: VkImageViewCreateFlags = 0
image: VkImage = 0x5555581deb58
viewType: VkImageViewType = VK_IMAGE_VIEW_TYPE_2D (1)
format: VkFormat = VK_FORMAT_R8G8B8A8_UNORM (37)
components: VkComponentMapping = 0x7fffffffb478:
r: VkComponentSwizzle = VK_COMPONENT_SWIZZLE_IDENTITY (0)
g: VkComponentSwizzle = VK_COMPONENT_SWIZZLE_IDENTITY (0)
b: VkComponentSwizzle = VK_COMPONENT_SWIZZLE_IDENTITY (0)
a: VkComponentSwizzle = VK_COMPONENT_SWIZZLE_IDENTITY (0)
subresourceRange: VkImageSubresourceRange = 0x7fffffffb488:
aspectMask: VkImageAspectFlags = 1 (VK_IMAGE_ASPECT_COLOR_BIT)
baseMipLevel: uint32_t = 0
levelCount: uint32_t = 1
baseArrayLayer: uint32_t = 0
layerCount: uint32_t = 1
pAllocator: const VkAllocationCallbacks* = NULL
pView: VkImageView* = 0x5555581e1dd8
4366:
Thread 0, Frame 0:
vkCreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass) returns VkResult VK_SUCCESS (0):
device: VkDevice = 0x555557b9a8f8
pCreateInfo: const VkRenderPassCreateInfo* = 0x7fffffffb810:
sType: VkStructureType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO (38)
pNext: const void* = NULL
flags: VkRenderPassCreateFlags = 0
attachmentCount: uint32_t = 3
pAttachments: const VkAttachmentDescription* = 0x7fffffffb8e0
pAttachments[0]: const VkAttachmentDescription = 0x7fffffffb8e0:
flags: VkAttachmentDescriptionFlags = 0
format: VkFormat = VK_FORMAT_R8G8B8A8_UNORM (37)
samples: VkSampleCountFlagBits = 4 (VK_SAMPLE_COUNT_4_BIT)
loadOp: VkAttachmentLoadOp = VK_ATTACHMENT_LOAD_OP_LOAD (0)
storeOp: VkAttachmentStoreOp = VK_ATTACHMENT_STORE_OP_STORE (0)
stencilLoadOp: VkAttachmentLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE (2)
stencilStoreOp: VkAttachmentStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE (1)
initialLayout: VkImageLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL (2)
finalLayout: VkImageLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL (2)
pAttachments[1]: const VkAttachmentDescription = 0x7fffffffb904:
flags: VkAttachmentDescriptionFlags = 0
format: VkFormat = VK_FORMAT_D24_UNORM_S8_UINT (129)
samples: VkSampleCountFlagBits = 4 (VK_SAMPLE_COUNT_4_BIT)
loadOp: VkAttachmentLoadOp = VK_ATTACHMENT_LOAD_OP_LOAD (0)
storeOp: VkAttachmentStoreOp = VK_ATTACHMENT_STORE_OP_STORE (0)
stencilLoadOp: VkAttachmentLoadOp = VK_ATTACHMENT_LOAD_OP_LOAD (0)
stencilStoreOp: VkAttachmentStoreOp = VK_ATTACHMENT_STORE_OP_STORE (0)
initialLayout: VkImageLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL (3)
finalLayout: VkImageLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL (3)
pAttachments[2]: const VkAttachmentDescription = 0x7fffffffb928:
flags: VkAttachmentDescriptionFlags = 0
format: VkFormat = VK_FORMAT_R8G8B8A8_UNORM (37)
samples: VkSampleCountFlagBits = 1 (VK_SAMPLE_COUNT_1_BIT)
loadOp: VkAttachmentLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE (2)
storeOp: VkAttachmentStoreOp = VK_ATTACHMENT_STORE_OP_STORE (0)
stencilLoadOp: VkAttachmentLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE (2)
stencilStoreOp: VkAttachmentStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE (1)
initialLayout: VkImageLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL (2)
finalLayout: VkImageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL (5)
subpassCount: uint32_t = 1
pSubpasses: const VkSubpassDescription* = 0x7fffffffb890
pSubpasses[0]: const VkSubpassDescription = 0x7fffffffb890:
flags: VkSubpassDescriptionFlags = 0
pipelineBindPoint: VkPipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS (0)
inputAttachmentCount: uint32_t = 0
pInputAttachments: const VkAttachmentReference* = NULL
colorAttachmentCount: uint32_t = 1
pColorAttachments: const VkAttachmentReference* = 0x7fffffffb7b8
pColorAttachments[0]: const VkAttachmentReference = 0x7fffffffb7b8:
attachment: uint32_t = 0
layout: VkImageLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL (2)
pResolveAttachments: const VkAttachmentReference* = 0x7fffffffb7c8
pResolveAttachments[0]: const VkAttachmentReference = 0x7fffffffb7c8:
attachment: uint32_t = 2
layout: VkImageLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL (2)
pDepthStencilAttachment: const VkAttachmentReference* = 0x7fffffffb7c0:
attachment: uint32_t = 1
layout: VkImageLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL (3)
preserveAttachmentCount: uint32_t = 0
pPreserveAttachments: const uint32_t* = NULL
dependencyCount: uint32_t = 2
pDependencies: const VkSubpassDependency* = 0x5555581c8610
pDependencies[0]: const VkSubpassDependency = 0x5555581c8610:
srcSubpass: uint32_t = 4294967295
dstSubpass: uint32_t = 0
srcStageMask: VkPipelineStageFlags = 8192 (VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT)
dstStageMask: VkPipelineStageFlags = 1024 (VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)
srcAccessMask: VkAccessFlags = 32768 (VK_ACCESS_MEMORY_READ_BIT)
dstAccessMask: VkAccessFlags = 256 (VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT)
dependencyFlags: VkDependencyFlags = 1 (VK_DEPENDENCY_BY_REGION_BIT)
pDependencies[1]: const VkSubpassDependency = 0x5555581c862c:
srcSubpass: uint32_t = 0
dstSubpass: uint32_t = 4294967295
srcStageMask: VkPipelineStageFlags = 1024 (VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)
dstStageMask: VkPipelineStageFlags = 8192 (VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT)
srcAccessMask: VkAccessFlags = 256 (VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT)
dstAccessMask: VkAccessFlags = 32768 (VK_ACCESS_MEMORY_READ_BIT)
dependencyFlags: VkDependencyFlags = 1 (VK_DEPENDENCY_BY_REGION_BIT)
pAllocator: const VkAllocationCallbacks* = NULL
pRenderPass: VkRenderPass* = 0x5555581c2f68
4447:
Thread 0, Frame 0:
vkCreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer) returns VkResult VK_SUCCESS (0):
device: VkDevice = 0x555557b9a8f8
pCreateInfo: const VkFramebufferCreateInfo* = 0x7fffffffb630:
sType: VkStructureType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO (37)
pNext: const void* = NULL
flags: VkFramebufferCreateFlags = 0
renderPass: VkRenderPass = 0x5555581c2f68
attachmentCount: uint32_t = 3
pAttachments: const VkImageView* = 0x55555818e4b0
pAttachments[0]: const VkImageView = 0x555558141f98
pAttachments[1]: const VkImageView = 0x555558140ae8
pAttachments[2]: const VkImageView = 0x5555581e1dd8
width: uint32_t = 1000
height: uint32_t = 800
layers: uint32_t = 1
pAllocator: const VkAllocationCallbacks* = NULL
pFramebuffer: VkFramebuffer* = 0x5555581c3108
4493:
Thread 0, Frame 0:
vkCmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers) returns void:
commandBuffer: VkCommandBuffer = 0x55555809a828
srcStageMask: VkPipelineStageFlags = 128 (VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT)
dstStageMask: VkPipelineStageFlags = 1024 (VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)
dependencyFlags: VkDependencyFlags = 0
memoryBarrierCount: uint32_t = 0
pMemoryBarriers: const VkMemoryBarrier* = NULL
bufferMemoryBarrierCount: uint32_t = 0
pBufferMemoryBarriers: const VkBufferMemoryBarrier* = NULL
imageMemoryBarrierCount: uint32_t = 1
pImageMemoryBarriers: const VkImageMemoryBarrier* = 0x7fffe40076f8
pImageMemoryBarriers[0]: const VkImageMemoryBarrier = 0x7fffe40076f8:
sType: VkStructureType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER (45)
pNext: const void* = NULL
srcAccessMask: VkAccessFlags = 32 (VK_ACCESS_SHADER_READ_BIT)
dstAccessMask: VkAccessFlags = 384 (VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT)
oldLayout: VkImageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL (5)
newLayout: VkImageLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL (2)
srcQueueFamilyIndex: uint32_t = 4294967295
dstQueueFamilyIndex: uint32_t = 4294967295
image: VkImage = 0x5555581deb58
subresourceRange: VkImageSubresourceRange = 0x7fffe4007728:
aspectMask: VkImageAspectFlags = 1 (VK_IMAGE_ASPECT_COLOR_BIT)
baseMipLevel: uint32_t = 0
levelCount: uint32_t = 1
baseArrayLayer: uint32_t = 0
layerCount: uint32_t = 1