Merge "Merge "Fix color change verification in dithering tests" into nougat-cts-dev...
[platform/upstream/VK-GL-CTS.git] / external / vulkancts / modules / vulkan / vktInfoTests.cpp
index 19b675a..666c62d 100644 (file)
@@ -4,24 +4,17 @@
  *
  * Copyright (c) 2016 Google Inc.
  *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and/or associated documentation files (the
- * "Materials"), to deal in the Materials without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Materials, and to
- * permit persons to whom the Materials are furnished to do so, subject to
- * the following conditions:
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
  *
- * The above copyright notice(s) and this permission notice shall be
- * included in all copies or substantial portions of the Materials.
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  *
  *//*!
  * \file
@@ -38,6 +31,8 @@
 #include "tcuPlatform.hpp"
 #include "deStringUtil.hpp"
 
+#include <iomanip>
+
 namespace vkt
 {
 
@@ -160,13 +155,94 @@ tcu::TestStatus logPlatformInfo (Context& context)
        return tcu::TestStatus::pass("Not validated");
 }
 
+template<typename SizeType>
+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<typename SizeType>
+std::ostream& operator<< (std::ostream& str, const PrettySize<SizeType>& 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<typename SizeType>
+PrettySize<SizeType> prettySize (SizeType value, int precision = 2)
+{
+       return PrettySize<SizeType>(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