diff options
Diffstat (limited to 'src/3rdparty/angle/src/libANGLE/renderer/d3d/DisplayD3D.cpp')
-rw-r--r-- | src/3rdparty/angle/src/libANGLE/renderer/d3d/DisplayD3D.cpp | 361 |
1 files changed, 0 insertions, 361 deletions
diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/DisplayD3D.cpp b/src/3rdparty/angle/src/libANGLE/renderer/d3d/DisplayD3D.cpp deleted file mode 100644 index 0edda9c584..0000000000 --- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/DisplayD3D.cpp +++ /dev/null @@ -1,361 +0,0 @@ -// -// Copyright (c) 2014 The ANGLE Project Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -// - -// DisplayD3D.cpp: D3D implementation of egl::Display - -#include "libANGLE/renderer/d3d/DisplayD3D.h" - -#include <EGL/eglext.h> - -#include "libANGLE/Config.h" -#include "libANGLE/Context.h" -#include "libANGLE/Display.h" -#include "libANGLE/Surface.h" -#include "libANGLE/Thread.h" -#include "libANGLE/histogram_macros.h" -#include "libANGLE/renderer/d3d/DeviceD3D.h" -#include "libANGLE/renderer/d3d/EGLImageD3D.h" -#include "libANGLE/renderer/d3d/RendererD3D.h" -#include "libANGLE/renderer/d3d/SurfaceD3D.h" -#include "libANGLE/renderer/d3d/SwapChainD3D.h" - -#if defined (ANGLE_ENABLE_D3D9) -# include "libANGLE/renderer/d3d/d3d9/Renderer9.h" -#endif // ANGLE_ENABLE_D3D9 - -#if defined (ANGLE_ENABLE_D3D11) -# include "libANGLE/renderer/d3d/d3d11/Renderer11.h" -#endif // ANGLE_ENABLE_D3D11 - -#if !defined(ANGLE_DEFAULT_D3D11) -// Enables use of the Direct3D 11 API for a default display, when available -# define ANGLE_DEFAULT_D3D11 1 -#endif - -namespace rx -{ - -typedef RendererD3D *(*CreateRendererD3DFunction)(egl::Display*); - -template <typename RendererType> -static RendererD3D *CreateTypedRendererD3D(egl::Display *display) -{ - return new RendererType(display); -} - -egl::Error CreateRendererD3D(egl::Display *display, RendererD3D **outRenderer) -{ - ASSERT(outRenderer != nullptr); - - std::vector<CreateRendererD3DFunction> rendererCreationFunctions; - - if (display->getPlatform() == EGL_PLATFORM_ANGLE_ANGLE) - { - const auto &attribMap = display->getAttributeMap(); - EGLNativeDisplayType nativeDisplay = display->getNativeDisplayId(); - - EGLint requestedDisplayType = static_cast<EGLint>( - attribMap.get(EGL_PLATFORM_ANGLE_TYPE_ANGLE, EGL_PLATFORM_ANGLE_TYPE_DEFAULT_ANGLE)); - -# if defined(ANGLE_ENABLE_D3D11) - if (nativeDisplay == EGL_D3D11_ELSE_D3D9_DISPLAY_ANGLE || - nativeDisplay == EGL_D3D11_ONLY_DISPLAY_ANGLE || - requestedDisplayType == EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE) - { - rendererCreationFunctions.push_back(CreateTypedRendererD3D<Renderer11>); - } -# endif - -# if defined(ANGLE_ENABLE_D3D9) - if (nativeDisplay == EGL_D3D11_ELSE_D3D9_DISPLAY_ANGLE || - requestedDisplayType == EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE) - { - rendererCreationFunctions.push_back(CreateTypedRendererD3D<Renderer9>); - } -# endif - - if (nativeDisplay != EGL_D3D11_ELSE_D3D9_DISPLAY_ANGLE && - nativeDisplay != EGL_D3D11_ONLY_DISPLAY_ANGLE && - requestedDisplayType == EGL_PLATFORM_ANGLE_TYPE_DEFAULT_ANGLE) - { - // The default display is requested, try the D3D9 and D3D11 renderers, order them using - // the definition of ANGLE_DEFAULT_D3D11 -# if ANGLE_DEFAULT_D3D11 -# if defined(ANGLE_ENABLE_D3D11) - rendererCreationFunctions.push_back(CreateTypedRendererD3D<Renderer11>); -# endif -# if defined(ANGLE_ENABLE_D3D9) - rendererCreationFunctions.push_back(CreateTypedRendererD3D<Renderer9>); -# endif -# else -# if defined(ANGLE_ENABLE_D3D9) - rendererCreationFunctions.push_back(CreateTypedRendererD3D<Renderer9>); -# endif -# if defined(ANGLE_ENABLE_D3D11) - rendererCreationFunctions.push_back(CreateTypedRendererD3D<Renderer11>); -# endif -# endif - } - } - else if (display->getPlatform() == EGL_PLATFORM_DEVICE_EXT) - { -#if defined(ANGLE_ENABLE_D3D11) - if (display->getDevice()->getType() == EGL_D3D11_DEVICE_ANGLE) - { - rendererCreationFunctions.push_back(CreateTypedRendererD3D<Renderer11>); - } -#endif - } - else - { - UNIMPLEMENTED(); - } - - for (size_t i = 0; i < rendererCreationFunctions.size(); i++) - { - RendererD3D *renderer = rendererCreationFunctions[i](display); - egl::Error result = renderer->initialize(); - -# if defined(ANGLE_ENABLE_D3D11) - if (renderer->getRendererClass() == RENDERER_D3D11) - { - ASSERT(result.getID() >= 0 && result.getID() < NUM_D3D11_INIT_ERRORS); - ANGLE_HISTOGRAM_ENUMERATION("GPU.ANGLE.D3D11InitializeResult", - result.getID(), - NUM_D3D11_INIT_ERRORS); - } -# endif - -# if defined(ANGLE_ENABLE_D3D9) - if (renderer->getRendererClass() == RENDERER_D3D9) - { - ASSERT(result.getID() >= 0 && result.getID() < NUM_D3D9_INIT_ERRORS); - ANGLE_HISTOGRAM_ENUMERATION("GPU.ANGLE.D3D9InitializeResult", - result.getID(), - NUM_D3D9_INIT_ERRORS); - } -# endif - - if (!result.isError()) - { - *outRenderer = renderer; - return result; - } - - // Failed to create the renderer, try the next - SafeDelete(renderer); - } - - return egl::EglNotInitialized() << "No available renderers."; -} - -DisplayD3D::DisplayD3D(const egl::DisplayState &state) : DisplayImpl(state), mRenderer(nullptr) -{ -} - -SurfaceImpl *DisplayD3D::createWindowSurface(const egl::SurfaceState &state, - EGLNativeWindowType window, - const egl::AttributeMap &attribs) -{ - ASSERT(mRenderer != nullptr); - return new WindowSurfaceD3D(state, mRenderer, mDisplay, window, attribs); -} - -SurfaceImpl *DisplayD3D::createPbufferSurface(const egl::SurfaceState &state, - const egl::AttributeMap &attribs) -{ - ASSERT(mRenderer != nullptr); - return new PbufferSurfaceD3D(state, mRenderer, mDisplay, 0, nullptr, attribs); -} - -SurfaceImpl *DisplayD3D::createPbufferFromClientBuffer(const egl::SurfaceState &state, - EGLenum buftype, - EGLClientBuffer clientBuffer, - const egl::AttributeMap &attribs) -{ - ASSERT(mRenderer != nullptr); - return new PbufferSurfaceD3D(state, mRenderer, mDisplay, buftype, clientBuffer, attribs); -} - -SurfaceImpl *DisplayD3D::createPixmapSurface(const egl::SurfaceState &state, - NativePixmapType nativePixmap, - const egl::AttributeMap &attribs) -{ - UNIMPLEMENTED(); - return nullptr; -} - -ImageImpl *DisplayD3D::createImage(const egl::ImageState &state, - EGLenum target, - const egl::AttributeMap &attribs) -{ - return new EGLImageD3D(state, target, attribs, mRenderer); -} - -egl::Error DisplayD3D::getDevice(DeviceImpl **device) -{ - return mRenderer->getEGLDevice(device); -} - -ContextImpl *DisplayD3D::createContext(const gl::ContextState &state) -{ - ASSERT(mRenderer != nullptr); - return mRenderer->createContext(state); -} - -StreamProducerImpl *DisplayD3D::createStreamProducerD3DTextureNV12( - egl::Stream::ConsumerType consumerType, - const egl::AttributeMap &attribs) -{ - ASSERT(mRenderer != nullptr); - return mRenderer->createStreamProducerD3DTextureNV12(consumerType, attribs); -} - -egl::Error DisplayD3D::makeCurrent(egl::Surface *drawSurface, egl::Surface *readSurface, gl::Context *context) -{ - return egl::NoError(); -} - -egl::Error DisplayD3D::initialize(egl::Display *display) -{ - ASSERT(mRenderer == nullptr && display != nullptr); - mDisplay = display; - ANGLE_TRY(CreateRendererD3D(display, &mRenderer)); - return egl::NoError(); -} - -void DisplayD3D::terminate() -{ - SafeDelete(mRenderer); -} - -egl::ConfigSet DisplayD3D::generateConfigs() -{ - ASSERT(mRenderer != nullptr); - return mRenderer->generateConfigs(); -} - -bool DisplayD3D::testDeviceLost() -{ - ASSERT(mRenderer != nullptr); - return mRenderer->testDeviceLost(); -} - -egl::Error DisplayD3D::restoreLostDevice(const egl::Display *display) -{ - // Release surface resources to make the Reset() succeed - for (egl::Surface *surface : mState.surfaceSet) - { - if (surface->getBoundTexture()) - { - ANGLE_TRY(surface->releaseTexImage(display->getProxyContext(), EGL_BACK_BUFFER)); - } - SurfaceD3D *surfaceD3D = GetImplAs<SurfaceD3D>(surface); - surfaceD3D->releaseSwapChain(); - } - - if (!mRenderer->resetDevice()) - { - return egl::EglBadAlloc(); - } - - // Restore any surfaces that may have been lost - for (const egl::Surface *surface : mState.surfaceSet) - { - SurfaceD3D *surfaceD3D = GetImplAs<SurfaceD3D>(surface); - - ANGLE_TRY(surfaceD3D->resetSwapChain(display)); - } - - return egl::NoError(); -} - -bool DisplayD3D::isValidNativeWindow(EGLNativeWindowType window) const -{ - return mRenderer->isValidNativeWindow(window); -} - -egl::Error DisplayD3D::validateClientBuffer(const egl::Config *configuration, - EGLenum buftype, - EGLClientBuffer clientBuffer, - const egl::AttributeMap &attribs) const -{ - switch (buftype) - { - case EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE: - return mRenderer->validateShareHandle(configuration, static_cast<HANDLE>(clientBuffer), - attribs); - - case EGL_D3D_TEXTURE_ANGLE: - return mRenderer->getD3DTextureInfo( - configuration, static_cast<IUnknown *>(clientBuffer), nullptr, nullptr, nullptr); - - default: - return DisplayImpl::validateClientBuffer(configuration, buftype, clientBuffer, attribs); - } -} - -void DisplayD3D::generateExtensions(egl::DisplayExtensions *outExtensions) const -{ - mRenderer->generateDisplayExtensions(outExtensions); -} - -std::string DisplayD3D::getVendorString() const -{ - std::string vendorString = "Google Inc."; - if (mRenderer) - { - vendorString += " " + mRenderer->getVendorString(); - } - - return vendorString; -} - -void DisplayD3D::generateCaps(egl::Caps *outCaps) const -{ - // Display must be initialized to generate caps - ASSERT(mRenderer != nullptr); - - outCaps->textureNPOT = mRenderer->getNativeExtensions().textureNPOT; -} - -egl::Error DisplayD3D::waitClient(const gl::Context *context) const -{ - for (egl::Surface *surface : mState.surfaceSet) - { - SurfaceD3D *surfaceD3D = GetImplAs<SurfaceD3D>(surface); - ANGLE_TRY(surfaceD3D->checkForOutOfDateSwapChain(context)); - } - - return egl::NoError(); -} - -egl::Error DisplayD3D::waitNative(const gl::Context *context, EGLint engine) const -{ - egl::Surface *drawSurface = context->getCurrentDrawSurface(); - egl::Surface *readSurface = context->getCurrentReadSurface(); - - if (drawSurface != nullptr) - { - SurfaceD3D *drawSurfaceD3D = GetImplAs<SurfaceD3D>(drawSurface); - ANGLE_TRY(drawSurfaceD3D->checkForOutOfDateSwapChain(context)); - } - - if (readSurface != nullptr) - { - SurfaceD3D *readSurfaceD3D = GetImplAs<SurfaceD3D>(readSurface); - ANGLE_TRY(readSurfaceD3D->checkForOutOfDateSwapChain(context)); - } - - return egl::NoError(); -} - -gl::Version DisplayD3D::getMaxSupportedESVersion() const -{ - return mRenderer->getMaxSupportedESVersion(); -} - -} // namespace rx |