mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-23 14:19:46 -06:00
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>
This commit is contained in:
@ -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;
|
||||
|
@ -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(
|
||||
|
@ -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;
|
||||
|
Reference in New Issue
Block a user