From: Pyry Haulos Date: Thu, 21 Jan 2016 16:47:53 +0000 (-0800) Subject: Fix image memory requirements for compressed formats in null driver X-Git-Tag: upstream/0.1.0~812^2~123^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c62d1ebb4f61e2f0a7d3dd73d7af5e471de1c286;p=platform%2Fupstream%2FVK-GL-CTS.git Fix image memory requirements for compressed formats in null driver Change-Id: Ib503460bc8accf58b169b6682414fa57d168ee5f --- diff --git a/external/vulkancts/framework/vulkan/vkNullDriver.cpp b/external/vulkancts/framework/vulkan/vkNullDriver.cpp index cf0fbcd..9ccfb2c 100644 --- a/external/vulkancts/framework/vulkan/vkNullDriver.cpp +++ b/external/vulkancts/framework/vulkan/vkNullDriver.cpp @@ -513,7 +513,7 @@ VKAPI_ATTR void VKAPI_CALL getBufferMemoryRequirements (VkDevice, VkBuffer buffe requirements->alignment = (VkDeviceSize)1u; } -VKAPI_ATTR VkDeviceSize VKAPI_CALL getPackedImageDataSize (VkFormat format, VkExtent3D extent, VkSampleCountFlagBits samples) +VkDeviceSize getPackedImageDataSize (VkFormat format, VkExtent3D extent, VkSampleCountFlagBits samples) { return (VkDeviceSize)getPixelSize(mapVkFormat(format)) * (VkDeviceSize)extent.width @@ -522,13 +522,36 @@ VKAPI_ATTR VkDeviceSize VKAPI_CALL getPackedImageDataSize (VkFormat format, VkEx * (VkDeviceSize)samples; } +VkDeviceSize getCompressedImageDataSize (VkFormat format, VkExtent3D extent) +{ + try + { + const tcu::CompressedTexFormat tcuFormat = mapVkCompressedFormat(format); + const size_t blockSize = tcu::getBlockSize(tcuFormat); + const tcu::IVec3 blockPixelSize = tcu::getBlockPixelSize(tcuFormat); + const int numBlocksX = deDivRoundUp32((int)extent.width, blockPixelSize.x()); + const int numBlocksY = deDivRoundUp32((int)extent.height, blockPixelSize.y()); + const int numBlocksZ = deDivRoundUp32((int)extent.depth, blockPixelSize.z()); + + return blockSize*numBlocksX*numBlocksY*numBlocksZ; + } + catch (...) + { + return 0; // Unsupported compressed format + } +} + VKAPI_ATTR void VKAPI_CALL getImageMemoryRequirements (VkDevice, VkImage imageHandle, VkMemoryRequirements* requirements) { const Image* image = reinterpret_cast(imageHandle.getInternal()); requirements->memoryTypeBits = 1u; - requirements->alignment = 4u; - requirements->size = getPackedImageDataSize(image->getFormat(), image->getExtent(), image->getSamples()); + requirements->alignment = 16u; + + if (isCompressedFormat(image->getFormat())) + requirements->size = getCompressedImageDataSize(image->getFormat(), image->getExtent()); + else + requirements->size = getPackedImageDataSize(image->getFormat(), image->getExtent(), image->getSamples()); } VKAPI_ATTR VkResult VKAPI_CALL mapMemory (VkDevice, VkDeviceMemory memHandle, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData)