From aec9e201f530904888d539ff2345601ce8986ed3 Mon Sep 17 00:00:00 2001 From: niki Date: Fri, 16 Sep 2022 13:49:31 +0200 Subject: [PATCH] vulkan: implement volume textures --- src/modules/graphics/vulkan/Graphics.cpp | 2 +- src/modules/graphics/vulkan/Texture.cpp | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/modules/graphics/vulkan/Graphics.cpp b/src/modules/graphics/vulkan/Graphics.cpp index 878ab8386..53ff8c506 100644 --- a/src/modules/graphics/vulkan/Graphics.cpp +++ b/src/modules/graphics/vulkan/Graphics.cpp @@ -566,7 +566,7 @@ void Graphics::initCapabilities() capabilities.textureTypes[TEXTURE_2D] = true; capabilities.textureTypes[TEXTURE_2D_ARRAY] = true; - capabilities.textureTypes[TEXTURE_VOLUME] = false; + capabilities.textureTypes[TEXTURE_VOLUME] = true; capabilities.textureTypes[TEXTURE_CUBE] = true; } diff --git a/src/modules/graphics/vulkan/Texture.cpp b/src/modules/graphics/vulkan/Texture.cpp index 5068565da..ba4a1f9d7 100644 --- a/src/modules/graphics/vulkan/Texture.cpp +++ b/src/modules/graphics/vulkan/Texture.cpp @@ -438,7 +438,10 @@ void Texture::uploadByteData(PixelFormat pixelformat, const void *data, size_t s region.imageSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; region.imageSubresource.mipLevel = level; - region.imageSubresource.baseArrayLayer = slice; + if (getTextureType() == TEXTURE_VOLUME) + region.imageSubresource.baseArrayLayer = 0; + else + region.imageSubresource.baseArrayLayer = slice; region.imageSubresource.layerCount = 1; region.imageOffset = { r.x, r.y, 0 }; @@ -447,6 +450,9 @@ void Texture::uploadByteData(PixelFormat pixelformat, const void *data, size_t s static_cast(r.h), 1 }; + if (getTextureType() == TEXTURE_VOLUME) + region.imageOffset.z = slice; + auto commandBuffer = vgfx->getCommandBufferForDataTransfer();