13d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa/*------------------------------------------------------------------------- 23d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa * drawElements Quality Program Tester Core 33d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa * ---------------------------------------- 43d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa * 53d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa * Copyright (c) 2016 The Khronos Group Inc. 63d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa * 73d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa * Licensed under the Apache License, Version 2.0 (the "License"); 83d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa * you may not use this file except in compliance with the License. 93d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa * You may obtain a copy of the License at 103d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa * 113d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa * http://www.apache.org/licenses/LICENSE-2.0 123d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa * 133d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa * Unless required by applicable law or agreed to in writing, software 143d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa * distributed under the License is distributed on an "AS IS" BASIS, 153d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 163d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa * See the License for the specific language governing permissions and 173d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa * limitations under the License. 183d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa * 193d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa *//*! 203d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa * \file 213d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa * \brief X11Vulkan Platform. 223d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa *//*--------------------------------------------------------------------*/ 233d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa 243d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa#include "tcuX11VulkanPlatform.hpp" 253d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa#include "tcuX11Platform.hpp" 263d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa#include "vkWsiPlatform.hpp" 273d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa#include "gluPlatform.hpp" 283d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa#include "tcuX11.hpp" 293d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa#include "tcuFunctionLibrary.hpp" 303d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa#include "deUniquePtr.hpp" 313d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa#include "deMemory.h" 323d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa 333d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa#include <sys/utsname.h> 343d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa 353d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwausing de::MovePtr; 363d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwausing de::UniquePtr; 373d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa 383d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa#if defined (DEQP_SUPPORT_XCB) 393d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa#include "tcuX11Xcb.hpp" 403d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa#endif // DEQP_SUPPORT_XCB 413d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa 423d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwanamespace tcu 433d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa{ 443d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwanamespace x11 453d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa{ 463d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa 473d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwaclass VulkanWindowXlib : public vk::wsi::XlibWindowInterface 483d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa{ 493d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwapublic: 503d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa VulkanWindowXlib (MovePtr<XlibWindow> window) 513d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa : vk::wsi::XlibWindowInterface (vk::pt::XlibWindow(window->getXID())) 523d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa , m_window (window) 533d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa { 543d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa } 553d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa 563d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa void resize (const UVec2& newSize) 573d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa { 583d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa m_window->setDimensions((int)newSize.x(), (int)newSize.y()); 593d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa } 603d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa 613d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwaprivate: 623d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa UniquePtr<XlibWindow> m_window; 633d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa}; 643d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa 653d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwaclass VulkanDisplayXlib : public vk::wsi::XlibDisplayInterface 663d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa{ 673d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwapublic: 683d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa VulkanDisplayXlib (MovePtr<DisplayBase> display) 693d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa : vk::wsi::XlibDisplayInterface (vk::pt::XlibDisplayPtr(((XlibDisplay*)display.get())->getXDisplay())) 703d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa , m_display (display) 713d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa { 723d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa } 733d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa 743d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa vk::wsi::Window* createWindow (const Maybe<UVec2>& initialSize) const 753d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa { 763d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa XlibDisplay* instance = (XlibDisplay*)(m_display.get()); 773d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa const deUint32 height = !initialSize ? (deUint32)DEFAULT_WINDOW_HEIGHT : initialSize->y(); 783d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa const deUint32 width = !initialSize ? (deUint32)DEFAULT_WINDOW_WIDTH : initialSize->x(); 793d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa return new VulkanWindowXlib(MovePtr<XlibWindow>(new XlibWindow(*instance, (int)width, (int)height, instance->getVisual(0)))); 803d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa } 813d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa 823d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwaprivate: 833d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa MovePtr<DisplayBase> m_display; 843d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa}; 853d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa 863d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa#if defined (DEQP_SUPPORT_XCB) 873d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa 883d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwaclass VulkanWindowXcb : public vk::wsi::XcbWindowInterface 893d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa{ 903d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwapublic: 913d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa VulkanWindowXcb (MovePtr<XcbWindow> window) 923d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa : vk::wsi::XcbWindowInterface (vk::pt::XcbWindow(window->getXID())) 933d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa , m_window (window) 943d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa { 953d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa } 963d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa 973d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa void resize (const UVec2& newSize) 983d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa { 993d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa m_window->setDimensions((int)newSize.x(), (int)newSize.y()); 1003d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa } 1013d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa 1023d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwaprivate: 1033d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa UniquePtr<XcbWindow> m_window; 1043d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa}; 1053d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa 1063d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwaclass VulkanDisplayXcb : public vk::wsi::XcbDisplayInterface 1073d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa{ 1083d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwapublic: 1093d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa VulkanDisplayXcb (MovePtr<DisplayBase> display) 1103d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa : vk::wsi::XcbDisplayInterface (vk::pt::XcbConnectionPtr(((XcbDisplay*)display.get())->getConnection())) 1113d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa , m_display (display) 1123d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa { 1133d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa } 1143d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa 1153d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa vk::wsi::Window* createWindow (const Maybe<UVec2>& initialSize) const 1163d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa { 1173d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa XcbDisplay* instance = (XcbDisplay*)(m_display.get()); 1183d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa const deUint32 height = !initialSize ? (deUint32)DEFAULT_WINDOW_HEIGHT : initialSize->y(); 1193d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa const deUint32 width = !initialSize ? (deUint32)DEFAULT_WINDOW_WIDTH : initialSize->x(); 1203d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa return new VulkanWindowXcb(MovePtr<XcbWindow>(new XcbWindow(*instance, (int)width, (int)height, DE_NULL))); 1213d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa } 1223d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa 1233d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwaprivate: 1243d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa MovePtr<DisplayBase> m_display; 1253d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa}; 1263d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa#endif // DEQP_SUPPORT_XCB 1273d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa 1283d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwaclass VulkanLibrary : public vk::Library 1293d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa{ 1303d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwapublic: 1313d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa VulkanLibrary (void) 1323d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa : m_library ("libvulkan.so.1") 1333d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa , m_driver (m_library) 1343d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa { 1353d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa } 1363d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa 1373d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa const vk::PlatformInterface& getPlatformInterface (void) const 1383d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa { 1393d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa return m_driver; 1403d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa } 1413d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa 1423d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwaprivate: 1433d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa const DynamicFunctionLibrary m_library; 1443d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa const vk::PlatformDriver m_driver; 1453d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa}; 1463d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa 1473d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz SarwaVulkanPlatform::VulkanPlatform (EventState& eventState) 1483d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa : m_eventState(eventState) 1493d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa{ 1503d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa} 1513d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa 1523d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwavk::wsi::Display* VulkanPlatform::createWsiDisplay (vk::wsi::Type wsiType) const 1533d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa{ 1543d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa switch(wsiType) 1553d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa { 1563d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa case vk::wsi::TYPE_XLIB: 1573d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa return new VulkanDisplayXlib(MovePtr<DisplayBase>(new XlibDisplay(m_eventState,""))); 1583d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa break; 1593d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa#if defined (DEQP_SUPPORT_XCB) 1603d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa case vk::wsi::TYPE_XCB: 1613d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa return new VulkanDisplayXcb(MovePtr<DisplayBase>(new XcbDisplay(m_eventState,""))); 1623d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa break; 1633d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa#endif // DEQP_SUPPORT_XCB 1643d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa default: 1653d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa TCU_THROW(NotSupportedError, "WSI type not supported"); 1663d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa 1673d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa }; 1683d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa} 1693d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa 1703d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwavk::Library* VulkanPlatform::createLibrary (void) const 1713d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa{ 1723d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa return new VulkanLibrary(); 1733d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa} 1743d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa 1753d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwavoid VulkanPlatform::describePlatform (std::ostream& dst) const 1763d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa{ 1773d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa utsname sysInfo; 1783d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa deMemset(&sysInfo, 0, sizeof(sysInfo)); 1793d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa 1803d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa if (uname(&sysInfo) != 0) 1813d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa throw std::runtime_error("uname() failed"); 1823d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa 1833d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa dst << "OS: " << sysInfo.sysname << " " << sysInfo.release << " " << sysInfo.version << "\n"; 1843d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa dst << "CPU: " << sysInfo.machine << "\n"; 1853d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa} 1863d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa 1873d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwavoid VulkanPlatform::getMemoryLimits (vk::PlatformMemoryLimits& limits) const 1883d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa{ 1893d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa limits.totalSystemMemory = 256*1024*1024; 1903d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa limits.totalDeviceLocalMemory = 128*1024*1024; 1913d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa limits.deviceMemoryAllocationGranularity = 64*1024; 1923d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa limits.devicePageSize = 4096; 1933d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa limits.devicePageTableEntrySize = 8; 1943d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa limits.devicePageTableHierarchyLevels = 3; 1953d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa} 1963d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa 1973d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa} // x11 1983d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa} // tcu 1993d6f22c833396c0c0b5806868f3e11f8ea05de3aArkadiusz Sarwa 200