diff options
| author | iwubcode <iwubcode@users.noreply.github.com> | 2023-12-09 19:00:11 -0600 |
|---|---|---|
| committer | iwubcode <iwubcode@users.noreply.github.com> | 2023-12-15 11:06:02 -0600 |
| commit | 12dd15c8ddb587e2f76351b59e0097940061485b (patch) | |
| tree | 0a0ba100b4b60b208ee5dfbeceeb73d6d990bb90 /Source/Core/VideoBackends/Vulkan | |
| parent | 370474a7cbec12c9647b155f9d7cc4409c438df8 (diff) | |
VideoBackends / VideoCommon: add type enum to dictate whether a texture is a 2D texture, a texture array, or a cube map; support 2D texture type across backends
Co-authored-by: TellowKrinkle <tellowkrinkle@gmail.com>
Diffstat (limited to 'Source/Core/VideoBackends/Vulkan')
| -rw-r--r-- | Source/Core/VideoBackends/Vulkan/StateTracker.cpp | 8 | ||||
| -rw-r--r-- | Source/Core/VideoBackends/Vulkan/VKSwapChain.cpp | 5 | ||||
| -rw-r--r-- | Source/Core/VideoBackends/Vulkan/VKTexture.cpp | 27 |
3 files changed, 31 insertions, 9 deletions
diff --git a/Source/Core/VideoBackends/Vulkan/StateTracker.cpp b/Source/Core/VideoBackends/Vulkan/StateTracker.cpp index 4afd627614..332cd41cbf 100644 --- a/Source/Core/VideoBackends/Vulkan/StateTracker.cpp +++ b/Source/Core/VideoBackends/Vulkan/StateTracker.cpp @@ -60,15 +60,17 @@ void StateTracker::DestroyInstance() bool StateTracker::Initialize() { // Create a dummy texture which can be used in place of a real binding. - m_dummy_texture = - VKTexture::Create(TextureConfig(1, 1, 1, 1, 1, AbstractTextureFormat::RGBA8, 0), ""); + m_dummy_texture = VKTexture::Create(TextureConfig(1, 1, 1, 1, 1, AbstractTextureFormat::RGBA8, 0, + AbstractTextureType::Texture_2DArray), + ""); if (!m_dummy_texture) return false; m_dummy_texture->TransitionToLayout(g_command_buffer_mgr->GetCurrentInitCommandBuffer(), VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL); // Create a dummy compute texture which can be used in place of a real binding m_dummy_compute_texture = VKTexture::Create( - TextureConfig(1, 1, 1, 1, 1, AbstractTextureFormat::RGBA8, AbstractTextureFlag_ComputeImage), + TextureConfig(1, 1, 1, 1, 1, AbstractTextureFormat::RGBA8, AbstractTextureFlag_ComputeImage, + AbstractTextureType::Texture_2DArray), ""); if (!m_dummy_compute_texture) return false; diff --git a/Source/Core/VideoBackends/Vulkan/VKSwapChain.cpp b/Source/Core/VideoBackends/Vulkan/VKSwapChain.cpp index 48102df64d..58e2e439e8 100644 --- a/Source/Core/VideoBackends/Vulkan/VKSwapChain.cpp +++ b/Source/Core/VideoBackends/Vulkan/VKSwapChain.cpp @@ -428,8 +428,9 @@ bool SwapChain::SetupSwapChainImages() images.data()); ASSERT(res == VK_SUCCESS); - const TextureConfig texture_config(TextureConfig( - m_width, m_height, 1, m_layers, 1, m_texture_format, AbstractTextureFlag_RenderTarget)); + const TextureConfig texture_config( + TextureConfig(m_width, m_height, 1, m_layers, 1, m_texture_format, + AbstractTextureFlag_RenderTarget, AbstractTextureType::Texture_2DArray)); const VkRenderPass load_render_pass = g_object_cache->GetRenderPass( m_surface_format.format, VK_FORMAT_UNDEFINED, 1, VK_ATTACHMENT_LOAD_OP_LOAD); const VkRenderPass clear_render_pass = g_object_cache->GetRenderPass( diff --git a/Source/Core/VideoBackends/Vulkan/VKTexture.cpp b/Source/Core/VideoBackends/Vulkan/VKTexture.cpp index e80ce4f2f7..6756305d1e 100644 --- a/Source/Core/VideoBackends/Vulkan/VKTexture.cpp +++ b/Source/Core/VideoBackends/Vulkan/VKTexture.cpp @@ -70,8 +70,9 @@ std::unique_ptr<VKTexture> VKTexture::Create(const TextureConfig& tex_config, st VkImageCreateInfo image_info = {VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO, nullptr, - tex_config.IsCubeMap() ? VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT : - static_cast<VkImageCreateFlags>(0), + tex_config.type == AbstractTextureType::Texture_CubeMap ? + VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT : + static_cast<VkImageCreateFlags>(0), VK_IMAGE_TYPE_2D, GetVkFormatForHostTextureFormat(tex_config.format), {tex_config.width, tex_config.height, 1}, @@ -107,8 +108,26 @@ std::unique_ptr<VKTexture> VKTexture::Create(const TextureConfig& tex_config, st std::unique_ptr<VKTexture> texture = std::make_unique<VKTexture>( tex_config, alloc, image, name, VK_IMAGE_LAYOUT_UNDEFINED, ComputeImageLayout::Undefined); - if (!texture->CreateView(tex_config.IsCubeMap() ? VK_IMAGE_VIEW_TYPE_CUBE : - VK_IMAGE_VIEW_TYPE_2D_ARRAY)) + + VkImageViewType image_view_type = VK_IMAGE_VIEW_TYPE_2D_ARRAY; + if (tex_config.type == AbstractTextureType::Texture_CubeMap) + { + image_view_type = VK_IMAGE_VIEW_TYPE_CUBE; + } + else if (tex_config.type == AbstractTextureType::Texture_2D) + { + image_view_type = VK_IMAGE_VIEW_TYPE_2D; + } + else if (tex_config.type == AbstractTextureType::Texture_2DArray) + { + image_view_type = VK_IMAGE_VIEW_TYPE_2D_ARRAY; + } + else + { + PanicAlertFmt("Unhandled texture type."); + return nullptr; + } + if (!texture->CreateView(image_view_type)) return nullptr; return texture; |
