diff --git a/src/Cafe/HW/Latte/Renderer/Metal/LatteTextureViewMtl.cpp b/src/Cafe/HW/Latte/Renderer/Metal/LatteTextureViewMtl.cpp index 5374126ac..e77e47156 100644 --- a/src/Cafe/HW/Latte/Renderer/Metal/LatteTextureViewMtl.cpp +++ b/src/Cafe/HW/Latte/Renderer/Metal/LatteTextureViewMtl.cpp @@ -2,6 +2,7 @@ #include "Cafe/HW/Latte/Renderer/Metal/LatteTextureMtl.h" #include "Cafe/HW/Latte/Renderer/Metal/MetalRenderer.h" #include "Cafe/HW/Latte/Renderer/Metal/LatteToMtl.h" +#include "Metal/MTLTexture.hpp" uint32 LatteTextureMtl_AdjustTextureCompSel(Latte::E_GX2SURFFMT format, uint32 compSel) { @@ -158,21 +159,21 @@ MTL::Texture* LatteTextureViewMtl::CreateSwizzledView(uint32 gpuSamplerSwizzle) uint32 baseLevel = firstMip; uint32 levelCount = this->numMip; - uint32 baseLayer; - uint32 layerCount; - // TODO: check if base texture is 3D texture as well + uint32 baseLayer = 0; + uint32 layerCount = 1; + + // TODO: check if base texture is 3D texture as well? if (textureType == MTL::TextureType3D) { cemu_assert_debug(firstMip == 0); cemu_assert_debug(this->numSlice == baseTexture->depth); - baseLayer = 0; - layerCount = 1; } - else - { - baseLayer = firstSlice; + // Cube array needs to have layer count multiple of 6 as opposed to when creating a texture + else if (textureType == MTL::TextureTypeCubeArray || textureType == MTL::TextureType2DArray) + { + baseLayer = firstSlice; layerCount = this->numSlice; - } + } MTL::TextureSwizzleChannels swizzle; swizzle.red = GetMtlTextureSwizzle(compSelR);