diff --git a/src/common/rendering/vulkan/textures/vk_texture.cpp b/src/common/rendering/vulkan/textures/vk_texture.cpp index 25d8809dc..fc5f66ce1 100644 --- a/src/common/rendering/vulkan/textures/vk_texture.cpp +++ b/src/common/rendering/vulkan/textures/vk_texture.cpp @@ -367,22 +367,26 @@ void VkTextureManager::CreatePrefiltermap(int size, int count, TArray& .Execute(cmdbuffer); int offset = 0; - for (int level = 0; level < miplevels; level++) + for (int i = 0; i < 6; ++i) { - int mipwidth = std::max(w >> level, 1); - int mipheight = std::max(h >> level, 1); + for (int level = 0; level < miplevels; level++) + { + int mipwidth = std::max(w >> level, 1); + int mipheight = std::max(h >> level, 1); - VkBufferImageCopy region = {}; - region.bufferOffset = offset; - region.imageSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; - region.imageSubresource.layerCount = count; - region.imageSubresource.mipLevel = level; - region.imageExtent.depth = 1; - region.imageExtent.width = mipwidth; - region.imageExtent.height = mipheight; - cmdbuffer->copyBufferToImage(stagingBuffer->buffer, Prefiltermap.Image.Image->image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, ®ion); + VkBufferImageCopy region = {}; + region.bufferOffset = offset; + region.imageSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; + region.imageSubresource.layerCount = 1; + region.imageSubresource.baseArrayLayer = i; + region.imageSubresource.mipLevel = level; + region.imageExtent.depth = 1; + region.imageExtent.width = mipwidth; + region.imageExtent.height = mipheight; + cmdbuffer->copyBufferToImage(stagingBuffer->buffer, Prefiltermap.Image.Image->image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, ®ion); - offset += mipwidth * mipheight * count * pixelsize; + offset += mipwidth * mipheight * pixelsize; + } } fb->GetCommands()->TransferDeleteList->Add(std::move(stagingBuffer)); diff --git a/src/common/rendering/vulkan/vk_lightprober.cpp b/src/common/rendering/vulkan/vk_lightprober.cpp index 55dcbb993..d6395a417 100644 --- a/src/common/rendering/vulkan/vk_lightprober.cpp +++ b/src/common/rendering/vulkan/vk_lightprober.cpp @@ -377,11 +377,11 @@ void VkLightprober::CreatePrefilterMap() .MaxSets(6 * prefilterMap.maxlevels) .Create(fb->GetDevice()); - for (int level = 0; level < prefilterMap.maxlevels; level++) + for (int i = 0; i < 6; i++) { - for (int i = 0; i < 6; i++) + for (int level = 0; level < prefilterMap.maxlevels; level++) { - int idx = level * 6 + i; + int idx = i * prefilterMap.maxlevels + level; prefilterMap.images[idx] = ImageBuilder() .Size(128 >> level, 128 >> level)