1 #ifndef _TCUPLATFORM_HPP
2 #define _TCUPLATFORM_HPP
3 /*-------------------------------------------------------------------------
4 * drawElements Quality Program Tester Core
5 * ----------------------------------------
7 * Copyright 2014 The Android Open Source Project
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
23 * \brief Platform (OS) specific services.
24 *//*--------------------------------------------------------------------*/
26 #include "tcuDefs.hpp"
47 class FunctionLibrary;
49 struct PlatformMemoryLimits
51 // System memory properties
52 size_t totalSystemMemory; // #bytes of system memory (heap + HOST_LOCAL) tests must not exceed
54 // Device memory properties
55 std::uint64_t totalDeviceLocalMemory; // #bytes of total DEVICE_LOCAL memory tests must not exceed or 0 if DEVICE_LOCAL counts against system memory
56 std::uint64_t deviceMemoryAllocationGranularity; // VkDeviceMemory allocation granularity (typically page size)
58 // Device memory page table geometry
59 std::uint64_t devicePageSize; // Page size on device (must be rounded up to the nearest POT)
60 std::uint64_t devicePageTableEntrySize; // Number of bytes per page table size
61 size_t devicePageTableHierarchyLevels; // Number of levels in device page table hierarchy
63 PlatformMemoryLimits (void)
64 : totalSystemMemory (0)
65 , totalDeviceLocalMemory (0)
66 , deviceMemoryAllocationGranularity (0)
68 , devicePageTableEntrySize (0)
69 , devicePageTableHierarchyLevels (0)
73 /*--------------------------------------------------------------------*//*!
74 * \brief Base class for platform implementation.
76 * This class represents the minimum set of functionality for a platform
79 * In addition to implementing Platform class, main entry point must be
80 * created that takes care of parsing command line, creating log and
81 * executing tcu::App. See tcuMain.cpp for reference on implementing
84 * If the platform uses standard posix-style main() for application entry
85 * point, tcuMain.cpp can be used as is. In that case you only have to
86 * implement createPlatform().
88 * API-specific platform interfaces (glu::Platform, eglu::Platform and vk::Platform)
89 * can be provided by implementing get<API>Platform() functions.
90 *//*--------------------------------------------------------------------*/
95 virtual ~Platform (void);
97 /*--------------------------------------------------------------------*//*!
98 * \brief Process platform-specific events.
100 * Test framework will call this function between test cases and test case
101 * iterations. Any event handling that must be done periodically should be
104 * Test framework will decide whether to continue test execution based on
105 * return code. For instance if the application receives close event from OS,
106 * it should communicate that to framework by returning false.
108 * \note Do not do rendering buffer swaps here.
109 * Do it in RenderContext::postIterate() instead.
110 * \return true if test execution should continue, false otherwise.
111 *//*--------------------------------------------------------------------*/
112 virtual bool processEvents (void);
114 /*--------------------------------------------------------------------*//*!
115 * \brief Get GL platform interface
117 * GL-specific platform interface is defined by glu::Platform. If your
118 * platform port supports OpenGL (ES), you should implement this function.
120 * Default implementation throws tcu::NotSupportedError exception.
122 * \return Reference to GL platform interface.
123 *//*--------------------------------------------------------------------*/
124 virtual const glu::Platform& getGLPlatform (void) const;
126 /*--------------------------------------------------------------------*//*!
127 * \brief Get EGL platform interface
129 * EGL-specific platform interface is defined by eglu::Platform. If your
130 * platform port supports EGL, you should implement this function.
132 * Default implementation throws tcu::NotSupportedError exception.
134 * \return Reference to EGL platform interface.
135 *//*--------------------------------------------------------------------*/
136 virtual const eglu::Platform& getEGLPlatform (void) const;
138 virtual const vk::Platform& getVulkanPlatform (void) const;
140 virtual void getMemoryLimits (PlatformMemoryLimits& limits) const;
143 inline tcu::PlatformMemoryLimits getMemoryLimits (const tcu::Platform& platform)
145 tcu::PlatformMemoryLimits limits;
146 platform.getMemoryLimits(limits);
152 #endif // _TCUPLATFORM_HPP