From 62d0dab7cd29b02879304ae18c067aff72088042 Mon Sep 17 00:00:00 2001 From: Kawe Mazidjatari <48657826+Mauler125@users.noreply.github.com> Date: Mon, 6 Jan 2025 16:35:36 +0100 Subject: [PATCH] GFX: add support for creating cubemap textures Later versions of the game store their cube maps in the RPak as DDS textures now, the engine needs a modification to its texture creation code to support these. --- src/windows/id3dx.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/windows/id3dx.cpp b/src/windows/id3dx.cpp index 91508c7a..be1b34ba 100644 --- a/src/windows/id3dx.cpp +++ b/src/windows/id3dx.cpp @@ -183,7 +183,7 @@ void CreateTextureResource(TextureHeader_t* textureHeader, INT_PTR imageData) textureDesc.SampleDesc.Quality = 0; textureDesc.Usage = textureHeader->m_nCPUAccessFlag != 2 ? D3D11_USAGE_IMMUTABLE : D3D11_USAGE_DEFAULT; textureDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE; - textureDesc.MiscFlags = 0; + textureDesc.MiscFlags = 2 * (textureHeader->m_nLayerCount & 2); const u32 offsetStartResourceData = mipLevel << 4u; const D3D11_SUBRESOURCE_DATA* subResData = (D3D11_SUBRESOURCE_DATA*)((uint8_t*)initialData + offsetStartResourceData); @@ -195,11 +195,19 @@ void CreateTextureResource(TextureHeader_t* textureHeader, INT_PTR imageData) D3D11_SHADER_RESOURCE_VIEW_DESC shaderResource{}; shaderResource.Format = dxgiFormat; shaderResource.Texture2D.MipLevels = textureHeader->m_nTextureMipLevels; + if (textureHeader->m_nArraySize > 1) // Do we have a texture array? { - shaderResource.Texture2DArray.FirstArraySlice = 0; - shaderResource.Texture2DArray.ArraySize = textureHeader->m_nArraySize; - shaderResource.ViewDimension = D3D_SRV_DIMENSION_TEXTURE2DARRAY; + const bool isCubeMap = (textureHeader->m_nLayerCount & 2); + + if (!isCubeMap) + { + shaderResource.Texture2DArray.FirstArraySlice = 0; + shaderResource.Texture2DArray.ArraySize = textureHeader->m_nArraySize; + shaderResource.ViewDimension = D3D_SRV_DIMENSION_TEXTURE2DARRAY; + } + else + shaderResource.ViewDimension = D3D_SRV_DIMENSION_TEXTURECUBE; } else {