X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=external%2Fvulkancts%2Fmodules%2Fvulkan%2FvktInfoTests.cpp;h=666c62db178e6f07a7edaf54f810787f614d30c1;hb=dae5394b0fadda4abdbdc964bf5dc6ee29151fc8;hp=53c9521b0ec13c6b2d02bf4c2b993b25bb646c36;hpb=115932ab9b40cd56667d5a5932c0a43b3582de03;p=platform%2Fupstream%2FVK-GL-CTS.git diff --git a/external/vulkancts/modules/vulkan/vktInfoTests.cpp b/external/vulkancts/modules/vulkan/vktInfoTests.cpp index 53c9521..666c62d 100644 --- a/external/vulkancts/modules/vulkan/vktInfoTests.cpp +++ b/external/vulkancts/modules/vulkan/vktInfoTests.cpp @@ -31,6 +31,8 @@ #include "tcuPlatform.hpp" #include "deStringUtil.hpp" +#include + namespace vkt { @@ -153,13 +155,94 @@ tcu::TestStatus logPlatformInfo (Context& context) return tcu::TestStatus::pass("Not validated"); } +template +struct PrettySize +{ + SizeType value; + int precision; + + PrettySize (SizeType value_, int precision_) + : value (value_) + , precision (precision_) + {} +}; + +struct SizeUnit +{ + const char* name; + deUint64 value; +}; + +const SizeUnit* getBestSizeUnit (deUint64 value) +{ + static const SizeUnit s_units[] = + { + // \note Must be ordered from largest to smallest + { "TiB", 1ull<<40ull }, + { "MiB", 1ull<<20ull }, + { "GiB", 1ull<<30ull }, + { "KiB", 1ull<<10ull }, + }; + static const SizeUnit s_defaultUnit = { "B", 1u }; + + for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(s_units); ++ndx) + { + if (value >= s_units[ndx].value) + return &s_units[ndx]; + } + + return &s_defaultUnit; +} + +template +std::ostream& operator<< (std::ostream& str, const PrettySize& size) +{ + const SizeUnit* unit = getBestSizeUnit(deUint64(size.value)); + std::ostringstream tmp; + + tmp << std::fixed << std::setprecision(size.precision) + << (double(size.value) / double(unit->value)) + << " " << unit->name; + + return str << tmp.str(); +} + +template +PrettySize prettySize (SizeType value, int precision = 2) +{ + return PrettySize(value, precision); +} + +tcu::TestStatus logPlatformMemoryLimits (Context& context) +{ + TestLog& log = context.getTestContext().getLog(); + vk::PlatformMemoryLimits limits; + + context.getTestContext().getPlatform().getVulkanPlatform().getMemoryLimits(limits); + + log << TestLog::Message << "totalSystemMemory = " << prettySize(limits.totalSystemMemory) << " (" << limits.totalSystemMemory << ")\n" + << "totalDeviceLocalMemory = " << prettySize(limits.totalDeviceLocalMemory) << " (" << limits.totalDeviceLocalMemory << ")\n" + << "deviceMemoryAllocationGranularity = " << limits.deviceMemoryAllocationGranularity << "\n" + << "devicePageSize = " << limits.devicePageSize << "\n" + << "devicePageTableEntrySize = " << limits.devicePageTableEntrySize << "\n" + << "devicePageTableHierarchyLevels = " << limits.devicePageTableHierarchyLevels << "\n" + << TestLog::EndMessage; + + TCU_CHECK(limits.totalSystemMemory > 0); + TCU_CHECK(limits.deviceMemoryAllocationGranularity > 0); + TCU_CHECK(deIsPowerOfTwo64(limits.devicePageSize)); + + return tcu::TestStatus::pass("Pass"); +} + } // anonymous void createInfoTests (tcu::TestCaseGroup* testGroup) { - addFunctionCase(testGroup, "build", "Build Info", logBuildInfo); - addFunctionCase(testGroup, "device", "Device Info", logDeviceInfo); - addFunctionCase(testGroup, "platform", "Platform Info", logPlatformInfo); + addFunctionCase(testGroup, "build", "Build Info", logBuildInfo); + addFunctionCase(testGroup, "device", "Device Info", logDeviceInfo); + addFunctionCase(testGroup, "platform", "Platform Info", logPlatformInfo); + addFunctionCase(testGroup, "memory_limits", "Platform Memory Limits", logPlatformMemoryLimits); } } // vkt