vulkan: Fix framebuffer creation with mip levels (#36)

Before this change, framebuffers were created based on the attachments' full dimensions, instead of the dimensions of the requested mip level. This fixes validation errors in the RenderTextureMipmaps test program.

Co-authored-by: Caleb Cornett <caleb.cornett@outlook.com>
Reviewed-on: MoonsideGames/Refresh#36
Co-authored-by: TheSpydog <thespydog@noreply.example.org>
Co-committed-by: TheSpydog <thespydog@noreply.example.org>
samplecount
TheSpydog 2023-01-24 00:15:02 +00:00 committed by cosmonaut
parent e3ab5fadf8
commit 89ba9c52ff
1 changed files with 13 additions and 8 deletions

View File

@ -8299,6 +8299,7 @@ static void VULKAN_BeginRenderPass(
VulkanFramebuffer *framebuffer;
VulkanTexture *texture;
uint32_t w, h;
VkClearValue *clearValues;
uint32_t clearCount = colorAttachmentCount;
uint32_t multisampleAttachmentCount = 0;
@ -8314,30 +8315,34 @@ static void VULKAN_BeginRenderPass(
for (i = 0; i < colorAttachmentCount; i += 1)
{
texture = (VulkanTexture*) colorAttachmentInfos[i].texture;
w = texture->dimensions.width >> colorAttachmentInfos[i].level;
h = texture->dimensions.height >> colorAttachmentInfos[i].level;
if (texture->dimensions.width < framebufferWidth)
if (w < framebufferWidth)
{
framebufferWidth = texture->dimensions.width;
framebufferWidth = w;
}
if (texture->dimensions.height < framebufferHeight)
if (h < framebufferHeight)
{
framebufferHeight = texture->dimensions.height;
framebufferHeight = h;
}
}
if (depthStencilAttachmentInfo != NULL)
{
texture = (VulkanTexture*) depthStencilAttachmentInfo->texture;
w = texture->dimensions.width >> depthStencilAttachmentInfo->level;
h = texture->dimensions.height >> depthStencilAttachmentInfo->level;
if (texture->dimensions.width < framebufferWidth)
if (w < framebufferWidth)
{
framebufferWidth = texture->dimensions.width;
framebufferWidth = w;
}
if (texture->dimensions.height < framebufferHeight)
if (h < framebufferHeight)
{
framebufferHeight = texture->dimensions.height;
framebufferHeight = h;
}
}