1 #ifndef _VKPLATFORM_HPP 2 #define _VKPLATFORM_HPP 3 /*------------------------------------------------------------------------- 4 * Vulkan CTS Framework 5 * -------------------- 6 * 7 * Copyright (c) 2015 Google Inc. 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 Vulkan platform abstraction. 24 *//*--------------------------------------------------------------------*/ 25 26 #include "vkDefs.hpp" 27 28 #include <ostream> 29 30 namespace tcu 31 { 32 class FunctionLibrary; 33 } 34 35 namespace vk 36 { 37 38 class Library 39 { 40 public: 41 Library (void) {} 42 virtual ~Library (void) {} 43 44 virtual const PlatformInterface& getPlatformInterface (void) const = 0; 45 }; 46 47 class PlatformDriver : public PlatformInterface 48 { 49 public: 50 PlatformDriver (const tcu::FunctionLibrary& library); 51 ~PlatformDriver (void); 52 53 #include "vkConcretePlatformInterface.inl" 54 55 protected: 56 struct Functions 57 { 58 #include "vkPlatformFunctionPointers.inl" 59 }; 60 61 Functions m_vk; 62 }; 63 64 class InstanceDriver : public InstanceInterface 65 { 66 public: 67 InstanceDriver (const PlatformInterface& platformInterface, VkInstance instance); 68 ~InstanceDriver (void); 69 70 #include "vkConcreteInstanceInterface.inl" 71 72 protected: 73 struct Functions 74 { 75 #include "vkInstanceFunctionPointers.inl" 76 }; 77 78 Functions m_vk; 79 }; 80 81 class DeviceDriver : public DeviceInterface 82 { 83 public: 84 DeviceDriver (const InstanceInterface& instanceInterface, VkDevice device); 85 ~DeviceDriver (void); 86 87 #include "vkConcreteDeviceInterface.inl" 88 89 protected: 90 struct Functions 91 { 92 #include "vkDeviceFunctionPointers.inl" 93 }; 94 95 Functions m_vk; 96 }; 97 98 // Defined in vkWsiPlatform.hpp 99 namespace wsi 100 { 101 class Display; 102 } // wsi 103 104 struct PlatformMemoryLimits 105 { 106 // System memory properties 107 size_t totalSystemMemory; //!< #bytes of system memory (heap + HOST_LOCAL) tests must not exceed 108 109 // Device memory properties 110 VkDeviceSize totalDeviceLocalMemory; //!< #bytes of total DEVICE_LOCAL memory tests must not exceed or 0 if DEVICE_LOCAL counts against system memory 111 VkDeviceSize deviceMemoryAllocationGranularity; //!< VkDeviceMemory allocation granularity (typically page size) 112 113 // Device memory page table geometry 114 // \todo [2016-03-23 pyry] This becomes obsolete if Vulkan API adds a way for driver to expose internal device memory allocations 115 VkDeviceSize devicePageSize; //!< Page size on device (must be rounded up to nearest POT) 116 VkDeviceSize devicePageTableEntrySize; //!< Number of bytes per page table size 117 size_t devicePageTableHierarchyLevels; //!< Number of levels in device page table hierarchy 118 119 PlatformMemoryLimits (void) 120 : totalSystemMemory (0) 121 , totalDeviceLocalMemory (0) 122 , deviceMemoryAllocationGranularity (0) 123 , devicePageSize (0) 124 , devicePageTableEntrySize (0) 125 , devicePageTableHierarchyLevels (0) 126 {} 127 }; 128 129 /*--------------------------------------------------------------------*//*! 130 * \brief Vulkan platform interface 131 *//*--------------------------------------------------------------------*/ 132 class Platform 133 { 134 public: 135 Platform (void) {} 136 ~Platform (void) {} 137 138 virtual Library* createLibrary (void) const = 0; 139 140 virtual wsi::Display* createWsiDisplay (wsi::Type wsiType) const; 141 142 virtual void getMemoryLimits (PlatformMemoryLimits& limits) const = 0; 143 virtual void describePlatform (std::ostream& dst) const; 144 }; 145 146 inline PlatformMemoryLimits getMemoryLimits (const Platform& platform) 147 { 148 PlatformMemoryLimits limits; 149 platform.getMemoryLimits(limits); 150 return limits; 151 } 152 153 } // vk 154 155 #endif // _VKPLATFORM_HPP 156