*
* 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
#include "tcuPlatform.hpp"
#include "deStringUtil.hpp"
+#include <iomanip>
+
namespace vkt
{
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