X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fbackends%2Fvulkan%2Fcommands_backend.cpp;h=d655134d032fdf95cf05fe6a5d7941868cd2c341;hb=016f0f0dd51511f98d0bf398d99199d7dec1543c;hp=bf8ee3f13d5652c21a14db09ff1e077e016740cc;hpb=6d2e2a0bb28496a8c25b441009bdd2a1a1e72d81;p=libs%2Fgl.git diff --git a/source/backends/vulkan/commands_backend.cpp b/source/backends/vulkan/commands_backend.cpp index bf8ee3f1..d655134d 100644 --- a/source/backends/vulkan/commands_backend.cpp +++ b/source/backends/vulkan/commands_backend.cpp @@ -97,11 +97,15 @@ void VulkanCommands::begin_render_pass(bool clear, const ClearValue *clear_value if(dynamic_cast(framebuffer->get_attachment(i))) fb_is_swapchain = true; - discard_fb_contents = (clear && !viewport); + Rect fb_rect = framebuffer->get_rect(); + Rect render_area = fb_rect.intersect(viewport); + bool full_viewport = render_area==fb_rect; + discard_fb_contents = (clear && full_viewport); framebuffer->refresh(); - VkRenderPass render_pass = device.get_pipeline_cache().get_render_pass(framebuffer->get_format(), clear, (!clear_values && !viewport), fb_is_swapchain); + VkRenderPass render_pass = device.get_pipeline_cache().get_render_pass(framebuffer->get_format(), + clear, (!clear_values && full_viewport), fb_is_swapchain); begin_buffer(render_pass); StructureBuilder sb(pass_begin_info, 2); @@ -112,18 +116,10 @@ void VulkanCommands::begin_render_pass(bool clear, const ClearValue *clear_value begin_info->renderPass = handle_cast<::VkRenderPass>(render_pass); begin_info->framebuffer = handle_cast<::VkFramebuffer>(framebuffer->handle); - if(viewport) - { - begin_info->renderArea.offset.x = viewport->left; - begin_info->renderArea.offset.y = viewport->bottom; - begin_info->renderArea.extent.width = viewport->width; - begin_info->renderArea.extent.height = viewport->height; - } - else - { - begin_info->renderArea.extent.width = framebuffer->get_width(); - begin_info->renderArea.extent.height = framebuffer->get_height(); - } + begin_info->renderArea.offset.x = render_area.left; + begin_info->renderArea.offset.y = render_area.bottom; + begin_info->renderArea.extent.width = render_area.width; + begin_info->renderArea.extent.height = render_area.height; if(clear_values) { @@ -169,7 +165,7 @@ void VulkanCommands::end_render_pass() vk.CmdEndRenderPass(primary_buffer); framebuffer = 0; - viewport = 0; + viewport = Rect::max(); pass_buffer = 0; }