Use a single buffer to image copy for the cube map (Refs #140)

This commit is contained in:
saschawillems 2016-05-14 12:22:07 +02:00
parent d3e1718f28
commit 47a6dee065

View file

@ -158,26 +158,16 @@ public:
memcpy(data, texCube.data(), texCube.size()); memcpy(data, texCube.data(), texCube.size());
vkUnmapMemory(device, stagingMemory); vkUnmapMemory(device, stagingMemory);
// Setup buffer copy regions for all cube faces // Setup buffer copy regions for the cube faces
std::vector<VkBufferImageCopy> bufferCopyRegions; // As all faces of a cube map must have the same dimensions, we can do a single copy
uint32_t offset = 0; VkBufferImageCopy bufferCopyRegion = {};
bufferCopyRegion.imageSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
for (uint32_t face = 0; face < 6; face++) bufferCopyRegion.imageSubresource.mipLevel = 0;
{ bufferCopyRegion.imageSubresource.baseArrayLayer = 0;
VkBufferImageCopy bufferCopyRegion = {}; bufferCopyRegion.imageSubresource.layerCount = 6;
bufferCopyRegion.imageSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; bufferCopyRegion.imageExtent.width = cubeMap.width;
bufferCopyRegion.imageSubresource.mipLevel = 0; bufferCopyRegion.imageExtent.height = cubeMap.height;
bufferCopyRegion.imageSubresource.baseArrayLayer = face; bufferCopyRegion.imageExtent.depth = 1;
bufferCopyRegion.imageSubresource.layerCount = 1;
bufferCopyRegion.imageExtent.width = texCube[face].dimensions().x;
bufferCopyRegion.imageExtent.height = texCube[face].dimensions().y;
bufferCopyRegion.imageExtent.depth = 1;
bufferCopyRegion.bufferOffset = offset;
bufferCopyRegions.push_back(bufferCopyRegion);
offset += texCube[face].size();
}
// Create optimal tiled target image // Create optimal tiled target image
VkImageCreateInfo imageCreateInfo = vkTools::initializers::imageCreateInfo(); VkImageCreateInfo imageCreateInfo = vkTools::initializers::imageCreateInfo();
@ -230,8 +220,8 @@ public:
stagingBuffer, stagingBuffer,
cubeMap.image, cubeMap.image,
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
bufferCopyRegions.size(), 1,
bufferCopyRegions.data() &bufferCopyRegion
); );
// Change texture image layout to shader read after all faces have been copied // Change texture image layout to shader read after all faces have been copied