153 lines
5.2 KiB
C++
153 lines
5.2 KiB
C++
#ifndef _TCUPLATFORM_HPP
|
|
#define _TCUPLATFORM_HPP
|
|
/*-------------------------------------------------------------------------
|
|
* drawElements Quality Program Tester Core
|
|
* ----------------------------------------
|
|
*
|
|
* Copyright 2014 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*
|
|
*//*!
|
|
* \file
|
|
* \brief Platform (OS) specific services.
|
|
*//*--------------------------------------------------------------------*/
|
|
|
|
#include "tcuDefs.hpp"
|
|
|
|
namespace glu
|
|
{
|
|
class Platform;
|
|
}
|
|
|
|
namespace eglu
|
|
{
|
|
class Platform;
|
|
}
|
|
|
|
namespace vk
|
|
{
|
|
class Platform;
|
|
}
|
|
|
|
namespace tcu
|
|
{
|
|
|
|
class CommandLine;
|
|
class FunctionLibrary;
|
|
|
|
struct PlatformMemoryLimits
|
|
{
|
|
// System memory properties
|
|
size_t totalSystemMemory; // #bytes of system memory (heap + HOST_LOCAL) tests must not exceed
|
|
|
|
// Device memory properties
|
|
std::uint64_t totalDeviceLocalMemory; // #bytes of total DEVICE_LOCAL memory tests must not exceed or 0 if DEVICE_LOCAL counts against system memory
|
|
std::uint64_t deviceMemoryAllocationGranularity; // VkDeviceMemory allocation granularity (typically page size)
|
|
|
|
// Device memory page table geometry
|
|
std::uint64_t devicePageSize; // Page size on device (must be rounded up to the nearest POT)
|
|
std::uint64_t devicePageTableEntrySize; // Number of bytes per page table size
|
|
size_t devicePageTableHierarchyLevels; // Number of levels in device page table hierarchy
|
|
|
|
PlatformMemoryLimits (void)
|
|
: totalSystemMemory (0)
|
|
, totalDeviceLocalMemory (0)
|
|
, deviceMemoryAllocationGranularity (0)
|
|
, devicePageSize (0)
|
|
, devicePageTableEntrySize (0)
|
|
, devicePageTableHierarchyLevels (0)
|
|
{}
|
|
};
|
|
|
|
/*--------------------------------------------------------------------*//*!
|
|
* \brief Base class for platform implementation.
|
|
*
|
|
* This class represents the minimum set of functionality for a platform
|
|
* port.
|
|
*
|
|
* In addition to implementing Platform class, main entry point must be
|
|
* created that takes care of parsing command line, creating log and
|
|
* executing tcu::App. See tcuMain.cpp for reference on implementing
|
|
* application stub.
|
|
*
|
|
* If the platform uses standard posix-style main() for application entry
|
|
* point, tcuMain.cpp can be used as is. In that case you only have to
|
|
* implement createPlatform().
|
|
*
|
|
* API-specific platform interfaces (glu::Platform, eglu::Platform and vk::Platform)
|
|
* can be provided by implementing get<API>Platform() functions.
|
|
*//*--------------------------------------------------------------------*/
|
|
class Platform
|
|
{
|
|
public:
|
|
Platform (void);
|
|
virtual ~Platform (void);
|
|
|
|
/*--------------------------------------------------------------------*//*!
|
|
* \brief Process platform-specific events.
|
|
*
|
|
* Test framework will call this function between test cases and test case
|
|
* iterations. Any event handling that must be done periodically should be
|
|
* done here.
|
|
*
|
|
* Test framework will decide whether to continue test execution based on
|
|
* return code. For instance if the application receives close event from OS,
|
|
* it should communicate that to framework by returning false.
|
|
*
|
|
* \note Do not do rendering buffer swaps here.
|
|
* Do it in RenderContext::postIterate() instead.
|
|
* \return true if test execution should continue, false otherwise.
|
|
*//*--------------------------------------------------------------------*/
|
|
virtual bool processEvents (void);
|
|
|
|
/*--------------------------------------------------------------------*//*!
|
|
* \brief Get GL platform interface
|
|
*
|
|
* GL-specific platform interface is defined by glu::Platform. If your
|
|
* platform port supports OpenGL (ES), you should implement this function.
|
|
*
|
|
* Default implementation throws tcu::NotSupportedError exception.
|
|
*
|
|
* \return Reference to GL platform interface.
|
|
*//*--------------------------------------------------------------------*/
|
|
virtual const glu::Platform& getGLPlatform (void) const;
|
|
|
|
/*--------------------------------------------------------------------*//*!
|
|
* \brief Get EGL platform interface
|
|
*
|
|
* EGL-specific platform interface is defined by eglu::Platform. If your
|
|
* platform port supports EGL, you should implement this function.
|
|
*
|
|
* Default implementation throws tcu::NotSupportedError exception.
|
|
*
|
|
* \return Reference to EGL platform interface.
|
|
*//*--------------------------------------------------------------------*/
|
|
virtual const eglu::Platform& getEGLPlatform (void) const;
|
|
|
|
virtual const vk::Platform& getVulkanPlatform (void) const;
|
|
|
|
virtual void getMemoryLimits (PlatformMemoryLimits& limits) const;
|
|
};
|
|
|
|
inline tcu::PlatformMemoryLimits getMemoryLimits (const tcu::Platform& platform)
|
|
{
|
|
tcu::PlatformMemoryLimits limits;
|
|
platform.getMemoryLimits(limits);
|
|
return limits;
|
|
}
|
|
|
|
} // tcu
|
|
|
|
#endif // _TCUPLATFORM_HPP
|