From d9f857bcc4588e02b5dd7980299da9cceea288cf Mon Sep 17 00:00:00 2001 From: Samuliak Date: Wed, 20 Nov 2024 19:38:53 +0100 Subject: [PATCH] only set array length for texture view arrays --- .../Renderer/Metal/LatteTextureViewMtl.cpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) 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);