diff options
| author | Mai <mai.iam2048@gmail.com> | 2023-12-17 14:40:39 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-12-17 14:40:39 -0500 |
| commit | f589c04aa7684e72f9866d1d85e9cb32b3d281ca (patch) | |
| tree | d5cf7a22f818ad48ee5c6f4e333772058b9660ab /Source/Core/VideoBackends/D3D/DXTexture.cpp | |
| parent | e6c85bf8f09c54297bc71fd37432d7daa7f22bcc (diff) | |
| parent | 12dd15c8ddb587e2f76351b59e0097940061485b (diff) | |
Merge pull request #12372 from iwubcode/texture_usage_flag
VideoBackends / VideoCommon: add type enum to dictate how the texture is used; support texture 2d
Diffstat (limited to 'Source/Core/VideoBackends/D3D/DXTexture.cpp')
| -rw-r--r-- | Source/Core/VideoBackends/D3D/DXTexture.cpp | 42 |
1 files changed, 32 insertions, 10 deletions
diff --git a/Source/Core/VideoBackends/D3D/DXTexture.cpp b/Source/Core/VideoBackends/D3D/DXTexture.cpp index 7a260eae4a..5d791b5246 100644 --- a/Source/Core/VideoBackends/D3D/DXTexture.cpp +++ b/Source/Core/VideoBackends/D3D/DXTexture.cpp @@ -45,9 +45,10 @@ std::unique_ptr<DXTexture> DXTexture::Create(const TextureConfig& config, std::s if (config.IsComputeImage()) bindflags |= D3D11_BIND_UNORDERED_ACCESS; - CD3D11_TEXTURE2D_DESC desc(tex_format, config.width, config.height, config.layers, config.levels, - bindflags, D3D11_USAGE_DEFAULT, 0, config.samples, 0, - config.IsCubeMap() ? D3D11_RESOURCE_MISC_TEXTURECUBE : 0); + CD3D11_TEXTURE2D_DESC desc( + tex_format, config.width, config.height, config.layers, config.levels, bindflags, + D3D11_USAGE_DEFAULT, 0, config.samples, 0, + config.type == AbstractTextureType::Texture_CubeMap ? D3D11_RESOURCE_MISC_TEXTURECUBE : 0); ComPtr<ID3D11Texture2D> d3d_texture; HRESULT hr = D3D::device->CreateTexture2D(&desc, nullptr, d3d_texture.GetAddressOf()); if (FAILED(hr)) @@ -72,7 +73,8 @@ std::unique_ptr<DXTexture> DXTexture::CreateAdopted(ComPtr<ID3D11Texture2D> text // Convert to our texture config format. TextureConfig config(desc.Width, desc.Height, desc.MipLevels, desc.ArraySize, desc.SampleDesc.Count, - D3DCommon::GetAbstractFormatForDXGIFormat(desc.Format), 0); + D3DCommon::GetAbstractFormatForDXGIFormat(desc.Format), 0, + AbstractTextureType::Texture_2DArray); if (desc.BindFlags & D3D11_BIND_RENDER_TARGET) config.flags |= AbstractTextureFlag_RenderTarget; if (desc.BindFlags & D3D11_BIND_UNORDERED_ACCESS) @@ -89,13 +91,33 @@ std::unique_ptr<DXTexture> DXTexture::CreateAdopted(ComPtr<ID3D11Texture2D> text bool DXTexture::CreateSRV() { + D3D_SRV_DIMENSION dimension = D3D_SRV_DIMENSION_TEXTURE2DARRAY; + if (m_config.type == AbstractTextureType::Texture_2DArray) + { + if (m_config.IsMultisampled()) + dimension = D3D_SRV_DIMENSION_TEXTURE2DMSARRAY; + else + dimension = D3D_SRV_DIMENSION_TEXTURE2DARRAY; + } + else if (m_config.type == AbstractTextureType::Texture_2D) + { + if (m_config.IsMultisampled()) + dimension = D3D_SRV_DIMENSION_TEXTURE2DMS; + else + dimension = D3D_SRV_DIMENSION_TEXTURE2D; + } + else if (m_config.type == AbstractTextureType::Texture_CubeMap) + { + dimension = D3D_SRV_DIMENSION_TEXTURECUBE; + } + else + { + PanicAlertFmt("Failed to create D3D SRV - unhandled type"); + return false; + } const CD3D11_SHADER_RESOURCE_VIEW_DESC desc( - m_texture.Get(), - m_config.IsCubeMap() ? D3D11_SRV_DIMENSION_TEXTURECUBE : - m_config.IsMultisampled() ? D3D11_SRV_DIMENSION_TEXTURE2DMSARRAY : - D3D11_SRV_DIMENSION_TEXTURE2DARRAY, - D3DCommon::GetSRVFormatForAbstractFormat(m_config.format), 0, m_config.levels, 0, - m_config.layers); + m_texture.Get(), dimension, D3DCommon::GetSRVFormatForAbstractFormat(m_config.format), 0, + m_config.levels, 0, m_config.layers); DEBUG_ASSERT(!m_srv); HRESULT hr = D3D::device->CreateShaderResourceView(m_texture.Get(), &desc, m_srv.GetAddressOf()); if (FAILED(hr)) |
