try moving layout transition into render pass
parent
b72b0b5fde
commit
425694ede5
|
@ -5956,6 +5956,7 @@ static VkRenderPass VULKAN_INTERNAL_CreateRenderPass(
|
||||||
VkAttachmentReference depthStencilAttachmentReference;
|
VkAttachmentReference depthStencilAttachmentReference;
|
||||||
VkRenderPassCreateInfo renderPassCreateInfo;
|
VkRenderPassCreateInfo renderPassCreateInfo;
|
||||||
VkSubpassDescription subpass;
|
VkSubpassDescription subpass;
|
||||||
|
VkImageLayout finalLayout;
|
||||||
VkRenderPass renderPass;
|
VkRenderPass renderPass;
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
|
|
||||||
|
@ -5970,6 +5971,19 @@ static VkRenderPass VULKAN_INTERNAL_CreateRenderPass(
|
||||||
{
|
{
|
||||||
texture = ((VulkanTextureContainer*) colorAttachmentInfos[i].texture)->vulkanTexture;
|
texture = ((VulkanTextureContainer*) colorAttachmentInfos[i].texture)->vulkanTexture;
|
||||||
|
|
||||||
|
if (texture->usageFlags & VK_IMAGE_USAGE_SAMPLED_BIT)
|
||||||
|
{
|
||||||
|
finalLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
|
||||||
|
}
|
||||||
|
else if (texture->usageFlags & VK_IMAGE_USAGE_STORAGE_BIT)
|
||||||
|
{
|
||||||
|
finalLayout = VK_IMAGE_LAYOUT_GENERAL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
finalLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
|
||||||
|
}
|
||||||
|
|
||||||
if (texture->msaaTex != NULL)
|
if (texture->msaaTex != NULL)
|
||||||
{
|
{
|
||||||
msaaTexture = texture->msaaTex;
|
msaaTexture = texture->msaaTex;
|
||||||
|
@ -6008,7 +6022,7 @@ static VkRenderPass VULKAN_INTERNAL_CreateRenderPass(
|
||||||
attachmentDescriptions[attachmentDescriptionCount].initialLayout =
|
attachmentDescriptions[attachmentDescriptionCount].initialLayout =
|
||||||
VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
|
VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
|
||||||
attachmentDescriptions[attachmentDescriptionCount].finalLayout =
|
attachmentDescriptions[attachmentDescriptionCount].finalLayout =
|
||||||
VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
|
finalLayout;
|
||||||
|
|
||||||
resolveReferences[resolveReferenceCount].attachment =
|
resolveReferences[resolveReferenceCount].attachment =
|
||||||
attachmentDescriptionCount;
|
attachmentDescriptionCount;
|
||||||
|
@ -6064,7 +6078,7 @@ static VkRenderPass VULKAN_INTERNAL_CreateRenderPass(
|
||||||
attachmentDescriptions[attachmentDescriptionCount].initialLayout =
|
attachmentDescriptions[attachmentDescriptionCount].initialLayout =
|
||||||
VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
|
VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
|
||||||
attachmentDescriptions[attachmentDescriptionCount].finalLayout =
|
attachmentDescriptions[attachmentDescriptionCount].finalLayout =
|
||||||
VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
|
finalLayout;
|
||||||
|
|
||||||
|
|
||||||
colorAttachmentReferences[colorAttachmentReferenceCount].attachment = attachmentDescriptionCount;
|
colorAttachmentReferences[colorAttachmentReferenceCount].attachment = attachmentDescriptionCount;
|
||||||
|
@ -6093,6 +6107,15 @@ static VkRenderPass VULKAN_INTERNAL_CreateRenderPass(
|
||||||
{
|
{
|
||||||
texture = ((VulkanTextureContainer*) depthStencilAttachmentInfo->texture)->vulkanTexture;
|
texture = ((VulkanTextureContainer*) depthStencilAttachmentInfo->texture)->vulkanTexture;
|
||||||
|
|
||||||
|
if (texture->usageFlags & VK_IMAGE_USAGE_SAMPLED_BIT)
|
||||||
|
{
|
||||||
|
finalLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
finalLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL;
|
||||||
|
}
|
||||||
|
|
||||||
attachmentDescriptions[attachmentDescriptionCount].flags = 0;
|
attachmentDescriptions[attachmentDescriptionCount].flags = 0;
|
||||||
attachmentDescriptions[attachmentDescriptionCount].format = texture->format;
|
attachmentDescriptions[attachmentDescriptionCount].format = texture->format;
|
||||||
attachmentDescriptions[attachmentDescriptionCount].samples = RefreshToVK_SampleCount[
|
attachmentDescriptions[attachmentDescriptionCount].samples = RefreshToVK_SampleCount[
|
||||||
|
@ -6113,7 +6136,7 @@ static VkRenderPass VULKAN_INTERNAL_CreateRenderPass(
|
||||||
attachmentDescriptions[attachmentDescriptionCount].initialLayout =
|
attachmentDescriptions[attachmentDescriptionCount].initialLayout =
|
||||||
VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL;
|
VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL;
|
||||||
attachmentDescriptions[attachmentDescriptionCount].finalLayout =
|
attachmentDescriptions[attachmentDescriptionCount].finalLayout =
|
||||||
VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL;
|
finalLayout;
|
||||||
|
|
||||||
depthStencilAttachmentReference.attachment =
|
depthStencilAttachmentReference.attachment =
|
||||||
attachmentDescriptionCount;
|
attachmentDescriptionCount;
|
||||||
|
@ -6182,6 +6205,7 @@ static VkRenderPass VULKAN_INTERNAL_CreateTransientRenderPass(
|
||||||
uint32_t resolveReferenceCount = 0;
|
uint32_t resolveReferenceCount = 0;
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
|
|
||||||
|
/* Note: Render pass compatibility does not compare about layout */
|
||||||
for (i = 0; i < attachmentInfo.colorAttachmentCount; i += 1)
|
for (i = 0; i < attachmentInfo.colorAttachmentCount; i += 1)
|
||||||
{
|
{
|
||||||
attachmentDescription = attachmentInfo.colorAttachmentDescriptions[i];
|
attachmentDescription = attachmentInfo.colorAttachmentDescriptions[i];
|
||||||
|
@ -9026,35 +9050,11 @@ static void VULKAN_EndRenderPass(
|
||||||
|
|
||||||
if (currentTexture->usageFlags & VK_IMAGE_USAGE_SAMPLED_BIT)
|
if (currentTexture->usageFlags & VK_IMAGE_USAGE_SAMPLED_BIT)
|
||||||
{
|
{
|
||||||
VULKAN_INTERNAL_ImageMemoryBarrier(
|
currentTexture->resourceAccessType = RESOURCE_ACCESS_ANY_SHADER_READ_SAMPLED_IMAGE;
|
||||||
renderer,
|
|
||||||
vulkanCommandBuffer->commandBuffer,
|
|
||||||
RESOURCE_ACCESS_ANY_SHADER_READ_SAMPLED_IMAGE,
|
|
||||||
currentTexture->aspectFlags,
|
|
||||||
0,
|
|
||||||
currentTexture->layerCount,
|
|
||||||
0,
|
|
||||||
currentTexture->levelCount,
|
|
||||||
0,
|
|
||||||
currentTexture->image,
|
|
||||||
¤tTexture->resourceAccessType
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
else if (currentTexture->usageFlags & VK_IMAGE_USAGE_STORAGE_BIT)
|
else if (currentTexture->usageFlags & VK_IMAGE_USAGE_STORAGE_BIT)
|
||||||
{
|
{
|
||||||
VULKAN_INTERNAL_ImageMemoryBarrier(
|
currentTexture->resourceAccessType = RESOURCE_ACCESS_COMPUTE_SHADER_STORAGE_IMAGE_READ_WRITE;
|
||||||
renderer,
|
|
||||||
vulkanCommandBuffer->commandBuffer,
|
|
||||||
RESOURCE_ACCESS_COMPUTE_SHADER_STORAGE_IMAGE_READ_WRITE,
|
|
||||||
currentTexture->aspectFlags,
|
|
||||||
0,
|
|
||||||
currentTexture->layerCount,
|
|
||||||
0,
|
|
||||||
currentTexture->levelCount,
|
|
||||||
0,
|
|
||||||
currentTexture->image,
|
|
||||||
¤tTexture->resourceAccessType
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
vulkanCommandBuffer->renderPassColorTargetCount = 0;
|
vulkanCommandBuffer->renderPassColorTargetCount = 0;
|
||||||
|
@ -9065,19 +9065,7 @@ static void VULKAN_EndRenderPass(
|
||||||
|
|
||||||
if (currentTexture->usageFlags & VK_IMAGE_USAGE_SAMPLED_BIT)
|
if (currentTexture->usageFlags & VK_IMAGE_USAGE_SAMPLED_BIT)
|
||||||
{
|
{
|
||||||
VULKAN_INTERNAL_ImageMemoryBarrier(
|
currentTexture->resourceAccessType = RESOURCE_ACCESS_ANY_SHADER_READ_SAMPLED_IMAGE;
|
||||||
renderer,
|
|
||||||
vulkanCommandBuffer->commandBuffer,
|
|
||||||
RESOURCE_ACCESS_ANY_SHADER_READ_SAMPLED_IMAGE,
|
|
||||||
currentTexture->aspectFlags,
|
|
||||||
0,
|
|
||||||
currentTexture->layerCount,
|
|
||||||
0,
|
|
||||||
currentTexture->levelCount,
|
|
||||||
0,
|
|
||||||
currentTexture->image,
|
|
||||||
¤tTexture->resourceAccessType
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
vulkanCommandBuffer->renderPassDepthTexture = NULL;
|
vulkanCommandBuffer->renderPassDepthTexture = NULL;
|
||||||
|
|
Loading…
Reference in New Issue