diff options
| author | Stenzek <stenzek@gmail.com> | 2018-01-21 23:59:19 +1000 |
|---|---|---|
| committer | Stenzek <stenzek@gmail.com> | 2018-03-01 17:31:24 +1000 |
| commit | 2a6d9e4713a9a540684795cb10ee6e6462178ba1 (patch) | |
| tree | bb932f3a7003832c83e50c4033b3ee82b3ba6ac3 /Source/Core/VideoBackends/Vulkan/VKTexture.cpp | |
| parent | 6374a4c4a80e88eea2e5914fb84e393c91ec65af (diff) | |
AbstractTexture: Add support for depth textures/formats
Diffstat (limited to 'Source/Core/VideoBackends/Vulkan/VKTexture.cpp')
| -rw-r--r-- | Source/Core/VideoBackends/Vulkan/VKTexture.cpp | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/Source/Core/VideoBackends/Vulkan/VKTexture.cpp b/Source/Core/VideoBackends/Vulkan/VKTexture.cpp index 974a8578a1..f51a9150de 100644 --- a/Source/Core/VideoBackends/Vulkan/VKTexture.cpp +++ b/Source/Core/VideoBackends/Vulkan/VKTexture.cpp @@ -79,14 +79,29 @@ std::unique_ptr<VKTexture> VKTexture::Create(const TextureConfig& tex_config) return nullptr; } - // Clear render targets before use to prevent reading uninitialized memory. - VkClearColorValue clear_value = {{0.0f, 0.0f, 0.0f, 1.0f}}; - VkImageSubresourceRange clear_range = {VK_IMAGE_ASPECT_COLOR_BIT, 0, tex_config.levels, 0, - tex_config.layers}; - texture->TransitionToLayout(g_command_buffer_mgr->GetCurrentInitCommandBuffer(), - VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL); - vkCmdClearColorImage(g_command_buffer_mgr->GetCurrentInitCommandBuffer(), texture->GetImage(), - texture->GetLayout(), &clear_value, 1, &clear_range); + if (!IsDepthFormat(tex_config.format)) + { + // Clear render targets before use to prevent reading uninitialized memory. + VkClearColorValue clear_value = {{0.0f, 0.0f, 0.0f, 1.0f}}; + VkImageSubresourceRange clear_range = {VK_IMAGE_ASPECT_COLOR_BIT, 0, tex_config.levels, 0, + tex_config.layers}; + texture->TransitionToLayout(g_command_buffer_mgr->GetCurrentInitCommandBuffer(), + VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL); + vkCmdClearColorImage(g_command_buffer_mgr->GetCurrentInitCommandBuffer(), texture->GetImage(), + texture->GetLayout(), &clear_value, 1, &clear_range); + } + else + { + // Clear render targets before use to prevent reading uninitialized memory. + VkClearDepthStencilValue clear_value = {0.0f, 0}; + VkImageSubresourceRange clear_range = {VK_IMAGE_ASPECT_DEPTH_BIT, 0, tex_config.levels, 0, + tex_config.layers}; + texture->TransitionToLayout(g_command_buffer_mgr->GetCurrentInitCommandBuffer(), + VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL); + vkCmdClearDepthStencilImage(g_command_buffer_mgr->GetCurrentInitCommandBuffer(), + texture->GetImage(), texture->GetLayout(), &clear_value, 1, + &clear_range); + } } return std::unique_ptr<VKTexture>(new VKTexture(tex_config, std::move(texture), framebuffer)); |
