Explicitly retrieve a Renderer9 or Renderer interface from Display.

TRAC #21963 Signed-off-by: Daniel Koch Author: Nicolas Capens git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1377 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent d8e3656a
...@@ -83,22 +83,7 @@ bool Display::initialize() ...@@ -83,22 +83,7 @@ bool Display::initialize()
return true; return true;
} }
HMODULE hModule = NULL; mRenderer = glCreateRenderer(this, mDc, mSoftwareDevice);
if (mSoftwareDevice)
{
hModule = GetModuleHandle(TEXT("swiftshader_d3d9.dll"));
}
else
{
hModule = GetModuleHandle(TEXT("d3d9.dll"));
}
if (hModule == NULL)
{
terminate();
return false;
}
mRenderer = glCreateRenderer(this, hModule, mDc);
EGLint status = EGL_BAD_ALLOC; EGLint status = EGL_BAD_ALLOC;
if (mRenderer) if (mRenderer)
status = mRenderer->initialize(); status = mRenderer->initialize();
......
...@@ -54,7 +54,8 @@ class Display ...@@ -54,7 +54,8 @@ class Display
bool isValidSurface(egl::Surface *surface); bool isValidSurface(egl::Surface *surface);
bool hasExistingWindowSurface(HWND window); bool hasExistingWindowSurface(HWND window);
renderer::Renderer9 *getRenderer() { return mRenderer; }; renderer::Renderer *getRenderer() { return mRenderer; };
renderer::Renderer9 *getRenderer9() { assert(dynamic_cast<renderer::Renderer9*>(mRenderer) != NULL); return static_cast<renderer::Renderer9*>(mRenderer); }; // D3D9_REPLACE
virtual void notifyDeviceLost(); virtual void notifyDeviceLost();
...@@ -80,7 +81,7 @@ class Display ...@@ -80,7 +81,7 @@ class Display
typedef std::set<gl::Context*> ContextSet; typedef std::set<gl::Context*> ContextSet;
ContextSet mContextSet; ContextSet mContextSet;
renderer::Renderer9 *mRenderer; // D3D9_REPLACE renderer::Renderer *mRenderer;
void initExtensionString(); void initExtensionString();
std::string mExtensionString; std::string mExtensionString;
......
...@@ -27,7 +27,7 @@ namespace egl ...@@ -27,7 +27,7 @@ namespace egl
Surface::Surface(Display *display, const Config *config, HWND window, EGLint postSubBufferSupported) Surface::Surface(Display *display, const Config *config, HWND window, EGLint postSubBufferSupported)
: mDisplay(display), mConfig(config), mWindow(window), mPostSubBufferSupported(postSubBufferSupported) : mDisplay(display), mConfig(config), mWindow(window), mPostSubBufferSupported(postSubBufferSupported)
{ {
mRenderer = mDisplay->getRenderer(); mRenderer = mDisplay->getRenderer9();
mSwapChain = NULL; mSwapChain = NULL;
mShareHandle = NULL; mShareHandle = NULL;
mTexture = NULL; mTexture = NULL;
...@@ -48,7 +48,7 @@ Surface::Surface(Display *display, const Config *config, HWND window, EGLint pos ...@@ -48,7 +48,7 @@ Surface::Surface(Display *display, const Config *config, HWND window, EGLint pos
Surface::Surface(Display *display, const Config *config, HANDLE shareHandle, EGLint width, EGLint height, EGLenum textureFormat, EGLenum textureType) Surface::Surface(Display *display, const Config *config, HANDLE shareHandle, EGLint width, EGLint height, EGLenum textureFormat, EGLenum textureType)
: mDisplay(display), mWindow(NULL), mConfig(config), mShareHandle(shareHandle), mWidth(width), mHeight(height), mPostSubBufferSupported(EGL_FALSE) : mDisplay(display), mWindow(NULL), mConfig(config), mShareHandle(shareHandle), mWidth(width), mHeight(height), mPostSubBufferSupported(EGL_FALSE)
{ {
mRenderer = mDisplay->getRenderer(); mRenderer = mDisplay->getRenderer9();
mSwapChain = NULL; mSwapChain = NULL;
mWindowSubclassed = false; mWindowSubclassed = false;
mTexture = NULL; mTexture = NULL;
......
// //
// Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved. // Copyright (c) 2002-2012 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// //
...@@ -19,7 +19,7 @@ namespace gl ...@@ -19,7 +19,7 @@ namespace gl
Buffer::Buffer(GLuint id) : RefCountObject(id) Buffer::Buffer(GLuint id) : RefCountObject(id)
{ {
mRenderer = getDisplay()->getRenderer(); mRenderer = getDisplay()->getRenderer9();
mContents = NULL; mContents = NULL;
mSize = 0; mSize = 0;
mUsage = GL_DYNAMIC_DRAW; mUsage = GL_DYNAMIC_DRAW;
......
...@@ -249,7 +249,7 @@ Context::~Context() ...@@ -249,7 +249,7 @@ Context::~Context()
void Context::makeCurrent(egl::Display *display, egl::Surface *surface) void Context::makeCurrent(egl::Display *display, egl::Surface *surface)
{ {
mDisplay = display; mDisplay = display;
mRenderer = mDisplay->getRenderer(); mRenderer = mDisplay->getRenderer9();
mDevice = mRenderer->getDevice(); // D3D9_REMOVE mDevice = mRenderer->getDevice(); // D3D9_REMOVE
if (!mHasBeenCurrent) if (!mHasBeenCurrent)
...@@ -4398,8 +4398,24 @@ gl::Context *glGetCurrentContext() ...@@ -4398,8 +4398,24 @@ gl::Context *glGetCurrentContext()
return gl::getContext(); return gl::getContext();
} }
renderer::Renderer9 *glCreateRenderer(egl::Display *display, HMODULE hModule, HDC hDc) renderer::Renderer *glCreateRenderer(egl::Display *display, HDC hDc, bool softwareDevice)
{ {
HMODULE hModule = NULL;
if (softwareDevice)
{
hModule = GetModuleHandle(TEXT("swiftshader_d3d9.dll"));
}
else
{
hModule = GetModuleHandle(TEXT("d3d9.dll"));
}
if (hModule == NULL)
{
return NULL;
}
return new renderer::Renderer9(display, hModule, hDc); // D3D9_REPLACE return new renderer::Renderer9(display, hModule, hDc); // D3D9_REPLACE
} }
......
...@@ -667,7 +667,7 @@ gl::Context *glCreateContext(const gl::Context *shareContext, bool notifyResets, ...@@ -667,7 +667,7 @@ gl::Context *glCreateContext(const gl::Context *shareContext, bool notifyResets,
void glDestroyContext(gl::Context *context); void glDestroyContext(gl::Context *context);
void glMakeCurrent(gl::Context *context, egl::Display *display, egl::Surface *surface); void glMakeCurrent(gl::Context *context, egl::Display *display, egl::Surface *surface);
gl::Context *glGetCurrentContext(); gl::Context *glGetCurrentContext();
renderer::Renderer9 *glCreateRenderer(egl::Display *display, HMODULE hModule, HDC hDc); // D3D9_REPLACE renderer::Renderer *glCreateRenderer(egl::Display *display, HDC hDc, bool softwareDevice);
void glDestroyRenderer(renderer::Renderer *renderer); void glDestroyRenderer(renderer::Renderer *renderer);
renderer::SwapChain *glCreateSwapChain(renderer::Renderer9 *renderer, HWND window, HANDLE shareHandle, renderer::SwapChain *glCreateSwapChain(renderer::Renderer9 *renderer, HWND window, HANDLE shareHandle,
GLenum backBufferFormat, GLenum depthBufferFormat); // D3D9_REPLACE GLenum backBufferFormat, GLenum depthBufferFormat); // D3D9_REPLACE
......
...@@ -64,7 +64,7 @@ unsigned int ProgramBinary::mCurrentSerial = 1; ...@@ -64,7 +64,7 @@ unsigned int ProgramBinary::mCurrentSerial = 1;
ProgramBinary::ProgramBinary() : RefCountObject(0), mSerial(issueSerial()) ProgramBinary::ProgramBinary() : RefCountObject(0), mSerial(issueSerial())
{ {
mRenderer = getDisplay()->getRenderer(); mRenderer = getDisplay()->getRenderer9();
mDevice = mRenderer->getDevice(); // D3D9_REPLACE mDevice = mRenderer->getDevice(); // D3D9_REPLACE
mPixelExecutable = NULL; mPixelExecutable = NULL;
......
// //
// Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved. // Copyright (c) 2002-2012 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// //
...@@ -401,7 +401,7 @@ Colorbuffer::Colorbuffer(renderer::SwapChain *swapChain) ...@@ -401,7 +401,7 @@ Colorbuffer::Colorbuffer(renderer::SwapChain *swapChain)
Colorbuffer::Colorbuffer(int width, int height, GLenum format, GLsizei samples) : mRenderTarget(NULL) Colorbuffer::Colorbuffer(int width, int height, GLenum format, GLsizei samples) : mRenderTarget(NULL)
{ {
renderer::Renderer9 *renderer = getDisplay()->getRenderer(); renderer::Renderer9 *renderer = getDisplay()->getRenderer9();
IDirect3DDevice9 *device = renderer->getDevice(); // D3D9_REPLACE IDirect3DDevice9 *device = renderer->getDevice(); // D3D9_REPLACE
D3DFORMAT requestedFormat = es2dx::ConvertRenderbufferFormat(format); D3DFORMAT requestedFormat = es2dx::ConvertRenderbufferFormat(format);
...@@ -476,7 +476,7 @@ DepthStencilbuffer::DepthStencilbuffer(renderer::SwapChain *swapChain) ...@@ -476,7 +476,7 @@ DepthStencilbuffer::DepthStencilbuffer(renderer::SwapChain *swapChain)
DepthStencilbuffer::DepthStencilbuffer(int width, int height, GLsizei samples) DepthStencilbuffer::DepthStencilbuffer(int width, int height, GLsizei samples)
{ {
renderer::Renderer9 *renderer = getDisplay()->getRenderer(); renderer::Renderer9 *renderer = getDisplay()->getRenderer9();
IDirect3DDevice9 *device = renderer->getDevice(); // D3D9_REPLACE IDirect3DDevice9 *device = renderer->getDevice(); // D3D9_REPLACE
mDepthStencil = NULL; mDepthStencil = NULL;
......
...@@ -310,7 +310,7 @@ void Image::createSurface() ...@@ -310,7 +310,7 @@ void Image::createSurface()
MakeValidSize(true, IsCompressed(mInternalFormat), &requestWidth, &requestHeight, &levelToFetch); MakeValidSize(true, IsCompressed(mInternalFormat), &requestWidth, &requestHeight, &levelToFetch);
// D3D9_REPLACE // D3D9_REPLACE
IDirect3DDevice9 *device = getDisplay()->getRenderer()->getDevice(); IDirect3DDevice9 *device = getDisplay()->getRenderer9()->getDevice();
HRESULT result = device->CreateTexture(requestWidth, requestHeight, levelToFetch + 1, NULL, d3dFormat, HRESULT result = device->CreateTexture(requestWidth, requestHeight, levelToFetch + 1, NULL, d3dFormat,
poolToUse, &newTexture, NULL); poolToUse, &newTexture, NULL);
...@@ -437,7 +437,7 @@ bool Image::updateSurface(IDirect3DSurface9 *destSurface, GLint xoffset, GLint y ...@@ -437,7 +437,7 @@ bool Image::updateSurface(IDirect3DSurface9 *destSurface, GLint xoffset, GLint y
rect.bottom = yoffset + height; rect.bottom = yoffset + height;
POINT point = {rect.left, rect.top}; POINT point = {rect.left, rect.top};
IDirect3DDevice9 *device = getDisplay()->getRenderer()->getDevice(); // D3D9_REPLACE IDirect3DDevice9 *device = getDisplay()->getRenderer9()->getDevice(); // D3D9_REPLACE
if (mD3DPool == D3DPOOL_MANAGED) if (mD3DPool == D3DPOOL_MANAGED)
{ {
...@@ -986,7 +986,7 @@ void Image::copy(GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, ...@@ -986,7 +986,7 @@ void Image::copy(GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width,
return error(GL_OUT_OF_MEMORY); return error(GL_OUT_OF_MEMORY);
} }
IDirect3DDevice9 *device = getDisplay()->getRenderer()->getDevice(); // D3D9_REPLACE IDirect3DDevice9 *device = getDisplay()->getRenderer9()->getDevice(); // D3D9_REPLACE
IDirect3DSurface9 *renderTargetData = NULL; IDirect3DSurface9 *renderTargetData = NULL;
D3DSURFACE_DESC description; D3DSURFACE_DESC description;
renderTarget->GetDesc(&description); renderTarget->GetDesc(&description);
......
...@@ -23,7 +23,7 @@ unsigned int TextureStorage::mCurrentTextureSerial = 1; ...@@ -23,7 +23,7 @@ unsigned int TextureStorage::mCurrentTextureSerial = 1;
TextureStorage::TextureStorage(DWORD usage) TextureStorage::TextureStorage(DWORD usage)
: mD3DUsage(usage), : mD3DUsage(usage),
mD3DPool(getDisplay()->getRenderer()->getTexturePool(usage)), // D3D9_REPLACE mD3DPool(getDisplay()->getRenderer9()->getTexturePool(usage)), // D3D9_REPLACE
mTextureSerial(issueTextureSerial()), mTextureSerial(issueTextureSerial()),
mLodOffset(0) mLodOffset(0)
{ {
...@@ -172,7 +172,7 @@ bool TextureStorage::copyToRenderTarget(IDirect3DSurface9 *dest, IDirect3DSurfac ...@@ -172,7 +172,7 @@ bool TextureStorage::copyToRenderTarget(IDirect3DSurface9 *dest, IDirect3DSurfac
if (source && dest) if (source && dest)
{ {
HRESULT result = D3DERR_OUTOFVIDEOMEMORY; HRESULT result = D3DERR_OUTOFVIDEOMEMORY;
renderer::Renderer9 *renderer = getDisplay()->getRenderer(); renderer::Renderer9 *renderer = getDisplay()->getRenderer9();
IDirect3DDevice9 *device = renderer->getDevice(); // D3D9_REPLACE IDirect3DDevice9 *device = renderer->getDevice(); // D3D9_REPLACE
if (fromManaged) if (fromManaged)
...@@ -221,7 +221,7 @@ TextureStorage2D::TextureStorage2D(int levels, GLenum internalformat, GLenum usa ...@@ -221,7 +221,7 @@ TextureStorage2D::TextureStorage2D(int levels, GLenum internalformat, GLenum usa
// we handle that here by skipping the d3d texture creation // we handle that here by skipping the d3d texture creation
if (width > 0 && height > 0) if (width > 0 && height > 0)
{ {
IDirect3DDevice9 *device = getDisplay()->getRenderer()->getDevice(); // D3D9_REPLACE IDirect3DDevice9 *device = getDisplay()->getRenderer9()->getDevice(); // D3D9_REPLACE
MakeValidSize(false, gl::IsCompressed(internalformat), &width, &height, &mLodOffset); MakeValidSize(false, gl::IsCompressed(internalformat), &width, &height, &mLodOffset);
HRESULT result = device->CreateTexture(width, height, levels ? levels + mLodOffset : 0, getUsage(), HRESULT result = device->CreateTexture(width, height, levels ? levels + mLodOffset : 0, getUsage(),
ConvertTextureInternalFormat(internalformat), getPool(), &mTexture, NULL); ConvertTextureInternalFormat(internalformat), getPool(), &mTexture, NULL);
...@@ -321,7 +321,7 @@ TextureStorageCubeMap::TextureStorageCubeMap(int levels, GLenum internalformat, ...@@ -321,7 +321,7 @@ TextureStorageCubeMap::TextureStorageCubeMap(int levels, GLenum internalformat,
// we handle that here by skipping the d3d texture creation // we handle that here by skipping the d3d texture creation
if (size > 0) if (size > 0)
{ {
IDirect3DDevice9 *device = getDisplay()->getRenderer()->getDevice(); // D3D9_REPLACE IDirect3DDevice9 *device = getDisplay()->getRenderer9()->getDevice(); // D3D9_REPLACE
int height = size; int height = size;
MakeValidSize(false, gl::IsCompressed(internalformat), &size, &height, &mLodOffset); MakeValidSize(false, gl::IsCompressed(internalformat), &size, &height, &mLodOffset);
HRESULT result = device->CreateCubeTexture(size, levels ? levels + mLodOffset : 0, getUsage(), HRESULT result = device->CreateCubeTexture(size, levels ? levels + mLodOffset : 0, getUsage(),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment