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