1#ifndef _TCUPLATFORM_HPP 2#define _TCUPLATFORM_HPP 3/*------------------------------------------------------------------------- 4 * drawElements Quality Program Tester Core 5 * ---------------------------------------- 6 * 7 * Copyright 2014 The Android Open Source Project 8 * 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 12 * 13 * http://www.apache.org/licenses/LICENSE-2.0 14 * 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. 20 * 21 *//*! 22 * \file 23 * \brief Platform (OS) specific services. 24 *//*--------------------------------------------------------------------*/ 25 26#include "tcuDefs.hpp" 27 28#include <cstdint> 29 30namespace glu 31{ 32class Platform; 33} 34 35namespace eglu 36{ 37class Platform; 38} 39 40namespace vk 41{ 42class Platform; 43} 44 45namespace tcu 46{ 47 48class CommandLine; 49class FunctionLibrary; 50 51struct PlatformMemoryLimits 52{ 53 // System memory properties 54 size_t totalSystemMemory; // #bytes of system memory (heap + HOST_LOCAL) tests must not exceed 55 56 // Device memory properties 57 std::uint64_t totalDeviceLocalMemory; // #bytes of total DEVICE_LOCAL memory tests must not exceed or 0 if DEVICE_LOCAL counts against system memory 58 std::uint64_t deviceMemoryAllocationGranularity; // VkDeviceMemory allocation granularity (typically page size) 59 60 // Device memory page table geometry 61 std::uint64_t devicePageSize; // Page size on device (must be rounded up to the nearest POT) 62 std::uint64_t devicePageTableEntrySize; // Number of bytes per page table size 63 size_t devicePageTableHierarchyLevels; // Number of levels in device page table hierarchy 64 65 PlatformMemoryLimits (void) 66 : totalSystemMemory (0) 67 , totalDeviceLocalMemory (0) 68 , deviceMemoryAllocationGranularity (0) 69 , devicePageSize (0) 70 , devicePageTableEntrySize (0) 71 , devicePageTableHierarchyLevels (0) 72 {} 73}; 74 75/*--------------------------------------------------------------------*//*! 76 * \brief Base class for platform implementation. 77 * 78 * This class represents the minimum set of functionality for a platform 79 * port. 80 * 81 * In addition to implementing Platform class, main entry point must be 82 * created that takes care of parsing command line, creating log and 83 * executing tcu::App. See tcuMain.cpp for reference on implementing 84 * application stub. 85 * 86 * If the platform uses standard posix-style main() for application entry 87 * point, tcuMain.cpp can be used as is. In that case you only have to 88 * implement createPlatform(). 89 * 90 * API-specific platform interfaces (glu::Platform, eglu::Platform and vk::Platform) 91 * can be provided by implementing get<API>Platform() functions. 92 *//*--------------------------------------------------------------------*/ 93class Platform 94{ 95public: 96 Platform (void); 97 virtual ~Platform (void); 98 99 /*--------------------------------------------------------------------*//*! 100 * \brief Process platform-specific events. 101 * 102 * Test framework will call this function between test cases and test case 103 * iterations. Any event handling that must be done periodically should be 104 * done here. 105 * 106 * Test framework will decide whether to continue test execution based on 107 * return code. For instance if the application receives close event from OS, 108 * it should communicate that to framework by returning false. 109 * 110 * \note Do not do rendering buffer swaps here. 111 * Do it in RenderContext::postIterate() instead. 112 * \return true if test execution should continue, false otherwise. 113 *//*--------------------------------------------------------------------*/ 114 virtual bool processEvents (void); 115 116 /*--------------------------------------------------------------------*//*! 117 * \brief Get GL platform interface 118 * 119 * GL-specific platform interface is defined by glu::Platform. If your 120 * platform port supports OpenGL (ES), you should implement this function. 121 * 122 * Default implementation throws tcu::NotSupportedError exception. 123 * 124 * \return Reference to GL platform interface. 125 *//*--------------------------------------------------------------------*/ 126 virtual const glu::Platform& getGLPlatform (void) const; 127 128 /*--------------------------------------------------------------------*//*! 129 * \brief Get EGL platform interface 130 * 131 * EGL-specific platform interface is defined by eglu::Platform. If your 132 * platform port supports EGL, you should implement this function. 133 * 134 * Default implementation throws tcu::NotSupportedError exception. 135 * 136 * \return Reference to EGL platform interface. 137 *//*--------------------------------------------------------------------*/ 138 virtual const eglu::Platform& getEGLPlatform (void) const; 139 140 virtual const vk::Platform& getVulkanPlatform (void) const; 141 142 virtual void getMemoryLimits (PlatformMemoryLimits& limits) const; 143}; 144 145inline tcu::PlatformMemoryLimits getMemoryLimits (const tcu::Platform& platform) 146{ 147 tcu::PlatformMemoryLimits limits; 148 platform.getMemoryLimits(limits); 149 return limits; 150} 151 152} // tcu 153 154#endif // _TCUPLATFORM_HPP 155