13c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*-------------------------------------------------------------------------
23c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * drawElements Quality Program Tester Core
33c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * ----------------------------------------
43c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
53c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Copyright 2014 The Android Open Source Project
63c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
73c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Licensed under the Apache License, Version 2.0 (the "License");
83c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * you may not use this file except in compliance with the License.
93c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * You may obtain a copy of the License at
103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *      http://www.apache.org/licenses/LICENSE-2.0
123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Unless required by applicable law or agreed to in writing, software
143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * distributed under the License is distributed on an "AS IS" BASIS,
153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * See the License for the specific language governing permissions and
173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * limitations under the License.
183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*!
203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \file
213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief EGL native display abstraction
223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "egluNativeDisplay.hpp"
253c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos#include "eglwEnums.hpp"
263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
273c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace eglu
283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
303c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosusing namespace eglw;
313c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos
323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// NativeDisplay
333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
343c827367444ee418f129b2c238299f49d3264554Jarkko PoyryNativeDisplay::NativeDisplay (Capability capabilities, EGLenum platformType, const char* platformExtension)
353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	: m_capabilities		(capabilities)
363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	, m_platformType		(platformType)
373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	, m_platformExtension	(platformExtension)
383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DE_ASSERT(platformType != EGL_NONE && platformExtension);
403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DE_ASSERT(capabilities & CAPABILITY_GET_DISPLAY_PLATFORM);
413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
433c827367444ee418f129b2c238299f49d3264554Jarkko PoyryNativeDisplay::NativeDisplay (Capability capabilities)
443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	: m_capabilities		(capabilities)
453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	, m_platformType		(EGL_NONE)
463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	, m_platformExtension	("")
473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DE_ASSERT(!(capabilities & CAPABILITY_GET_DISPLAY_PLATFORM));
493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DE_ASSERT(capabilities & CAPABILITY_GET_DISPLAY_LEGACY);
503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
523c827367444ee418f129b2c238299f49d3264554Jarkko PoyryNativeDisplay::~NativeDisplay (void)
533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
563c827367444ee418f129b2c238299f49d3264554Jarkko PoyryEGLNativeDisplayType NativeDisplay::getLegacyNative (void)
573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
58922a9f4dc244825434a2b3113a28a0d2851555c7Mika Isojärvi	// If NativeDisplay claims to support CAPABILITY_GET_DISPLAY_LEGACY then
59922a9f4dc244825434a2b3113a28a0d2851555c7Mika Isojärvi	// this method must be implemented.
603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	TCU_CHECK_INTERNAL((m_capabilities & CAPABILITY_GET_DISPLAY_LEGACY) == 0);
61922a9f4dc244825434a2b3113a28a0d2851555c7Mika Isojärvi	TCU_THROW(NotSupportedError, "eglu::NativeDisplay can't be used with eglGetDisplay()");
623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
643c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid* NativeDisplay::getPlatformNative (void)
653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
66922a9f4dc244825434a2b3113a28a0d2851555c7Mika Isojärvi	// If NativeDisplay claims to support CAPABILITY_GET_DISPLAY_PLATFORM then
67922a9f4dc244825434a2b3113a28a0d2851555c7Mika Isojärvi	// this method must be implemented.
683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	TCU_CHECK_INTERNAL((m_capabilities & CAPABILITY_GET_DISPLAY_PLATFORM) == 0);
69922a9f4dc244825434a2b3113a28a0d2851555c7Mika Isojärvi	TCU_THROW(NotSupportedError, "eglu::NativeDisplay can't be used with eglGetPlatformDisplay()");
703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7224cf7bb0a3f0b82c2f3017cc3c42e6ff9cc8fce2Pyry Haulosconst EGLAttrib* NativeDisplay::getPlatformAttributes (void) const
7324cf7bb0a3f0b82c2f3017cc3c42e6ff9cc8fce2Pyry Haulos{
74922a9f4dc244825434a2b3113a28a0d2851555c7Mika Isojärvi	// If NativeDisplay claims to support CAPABILITY_GET_DISPLAY_PLATFORM then
75922a9f4dc244825434a2b3113a28a0d2851555c7Mika Isojärvi	// this method must be implemented.
7624cf7bb0a3f0b82c2f3017cc3c42e6ff9cc8fce2Pyry Haulos	TCU_CHECK_INTERNAL((m_capabilities & CAPABILITY_GET_DISPLAY_PLATFORM) == 0);
77922a9f4dc244825434a2b3113a28a0d2851555c7Mika Isojärvi	TCU_THROW(NotSupportedError, "eglu::NativeDisplay can't be used with eglGetPlatformDisplay()");
7824cf7bb0a3f0b82c2f3017cc3c42e6ff9cc8fce2Pyry Haulos}
7924cf7bb0a3f0b82c2f3017cc3c42e6ff9cc8fce2Pyry Haulos
803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// NativeDisplayFactory
813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
823c827367444ee418f129b2c238299f49d3264554Jarkko PoyryNativeDisplayFactory::NativeDisplayFactory (const std::string& name, const std::string& description, NativeDisplay::Capability capabilities, EGLenum platformType, const char* platformExtension)
833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	: FactoryBase			(name, description)
843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	, m_capabilities		(capabilities)
853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	, m_platformType		(platformType)
863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	, m_platformExtension	(platformExtension)
873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DE_ASSERT(platformType != EGL_NONE && platformExtension);
893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DE_ASSERT(capabilities & NativeDisplay::CAPABILITY_GET_DISPLAY_PLATFORM);
903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
923c827367444ee418f129b2c238299f49d3264554Jarkko PoyryNativeDisplayFactory::NativeDisplayFactory (const std::string& name, const std::string& description, NativeDisplay::Capability capabilities)
933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	: FactoryBase			(name, description)
943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	, m_capabilities		(capabilities)
953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	, m_platformType		(EGL_NONE)
963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	, m_platformExtension	("")
973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DE_ASSERT(!(capabilities & NativeDisplay::CAPABILITY_GET_DISPLAY_PLATFORM));
993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DE_ASSERT(capabilities & NativeDisplay::CAPABILITY_GET_DISPLAY_LEGACY);
1003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
1013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1023c827367444ee418f129b2c238299f49d3264554Jarkko PoyryNativeDisplayFactory::~NativeDisplayFactory (void)
1033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
1053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // eglu
107