Browse Source

vulkan: implement volume textures

niki 2 years ago
parent
commit
aec9e201f5

+ 1 - 1
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;
 }
 

+ 7 - 1
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<uint32_t>(r.h), 1
 	};
 
+	if (getTextureType() == TEXTURE_VOLUME)
+		region.imageOffset.z = slice;
+
 	auto commandBuffer = vgfx->getCommandBufferForDataTransfer();