Make egl::Surface independent of the Renderer implementation.
TRAC #21926
Signed-off-by: Daniel Koch
Signed-off-by: Geoff Lang
Author: Nicolas Capens
git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1427 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libEGL/Surface.cpp b/src/libEGL/Surface.cpp
index 19df9ad..2a20839 100644
--- a/src/libEGL/Surface.cpp
+++ b/src/libEGL/Surface.cpp
@@ -28,7 +28,7 @@
Surface::Surface(Display *display, const Config *config, HWND window, EGLint postSubBufferSupported)
: mDisplay(display), mConfig(config), mWindow(window), mPostSubBufferSupported(postSubBufferSupported)
{
- mRenderer = mDisplay->getRenderer9();
+ mRenderer = mDisplay->getRenderer();
mSwapChain = NULL;
mShareHandle = NULL;
mTexture = NULL;
@@ -97,7 +97,7 @@
void Surface::release()
{
- glDestroySwapChain(mSwapChain);
+ delete mSwapChain;
mSwapChain = NULL;
if (mTexture)
@@ -135,8 +135,9 @@
height = mHeight;
}
- mSwapChain = glCreateSwapChain(mRenderer, mWindow, mShareHandle,
- mConfig->mRenderTargetFormat, mConfig->mDepthStencilFormat);
+ mSwapChain = mRenderer->createSwapChain(mWindow, mShareHandle,
+ mConfig->mRenderTargetFormat,
+ mConfig->mDepthStencilFormat);
if (!mSwapChain)
{
return error(EGL_BAD_ALLOC, false);
@@ -144,7 +145,7 @@
if (!resetSwapChain(width, height))
{
- glDestroySwapChain(mSwapChain);
+ delete mSwapChain;
mSwapChain = NULL;
return false;
}
diff --git a/src/libEGL/Surface.h b/src/libEGL/Surface.h
index 5513cb0..a79a9af 100644
--- a/src/libEGL/Surface.h
+++ b/src/libEGL/Surface.h
@@ -22,7 +22,7 @@
}
namespace rx
{
-class Renderer9;
+class Renderer;
class SwapChain;
}
@@ -68,7 +68,7 @@
DISALLOW_COPY_AND_ASSIGN(Surface);
Display *const mDisplay;
- rx::Renderer9 *mRenderer; // D3D9_REPLACE
+ rx::Renderer *mRenderer;
HANDLE mShareHandle;
rx::SwapChain *mSwapChain;
diff --git a/src/libGLESv2/Context.cpp b/src/libGLESv2/Context.cpp
index 646baed..7b61c08 100644
--- a/src/libGLESv2/Context.cpp
+++ b/src/libGLESv2/Context.cpp
@@ -1924,7 +1924,7 @@
GLint alwaysFront = !isTriangleMode(drawMode);
programBinary->setUniform1iv(pointsOrLines, 1, &alwaysFront);
- const gl::Renderbuffer *depthbuffer = framebufferObject->getDepthbuffer();
+ const gl::Renderbuffer *depthbuffer = framebufferObject->getDepthbuffer();
unsigned int depthSize = depthbuffer ? depthbuffer->getDepthSize() : 0;
mRenderer->setRasterizerState(mState.rasterizer, depthSize);
@@ -4076,16 +4076,4 @@
return gl::getContext();
}
-rx::SwapChain *glCreateSwapChain(rx::Renderer9 *renderer, HWND window, HANDLE shareHandle,
- GLenum backBufferFormat, GLenum depthBufferFormat)
-{
- return new rx::SwapChain(renderer, window, shareHandle, backBufferFormat, depthBufferFormat);
-}
-
-void glDestroySwapChain(rx::SwapChain *swapChain)
-{
- delete swapChain;
-}
-
-
}
diff --git a/src/libGLESv2/libGLESv2.def b/src/libGLESv2/libGLESv2.def
index 03837a8..067225e 100644
--- a/src/libGLESv2/libGLESv2.def
+++ b/src/libGLESv2/libGLESv2.def
@@ -181,6 +181,4 @@
glGetProcAddress @148 NONAME
glBindTexImage @158 NONAME
glCreateRenderer @177 NONAME
- glDestroyRenderer @178 NONAME
- glCreateSwapChain @179 NONAME
- glDestroySwapChain @180 NONAME
+ glDestroyRenderer @178 NONAME
\ No newline at end of file
diff --git a/src/libGLESv2/main.h b/src/libGLESv2/main.h
index d56bbb3..92440c8 100644
--- a/src/libGLESv2/main.h
+++ b/src/libGLESv2/main.h
@@ -54,9 +54,6 @@
gl::Context *glGetCurrentContext();
rx::Renderer *glCreateRenderer(egl::Display *display, HDC hDc, bool softwareDevice);
void glDestroyRenderer(rx::Renderer *renderer);
-rx::SwapChain *glCreateSwapChain(rx::Renderer9 *renderer, HWND window, HANDLE shareHandle,
- GLenum backBufferFormat, GLenum depthBufferFormat); // D3D9_REPLACE
-void glDestroySwapChain(rx::SwapChain *swapChain);
__eglMustCastToProperFunctionPointerType __stdcall glGetProcAddress(const char *procname);
bool __stdcall glBindTexImage(egl::Surface *surface);
diff --git a/src/libGLESv2/renderer/Renderer.h b/src/libGLESv2/renderer/Renderer.h
index 43e8f0e..99b2ae6 100644
--- a/src/libGLESv2/renderer/Renderer.h
+++ b/src/libGLESv2/renderer/Renderer.h
@@ -68,6 +68,8 @@
virtual void sync(bool block) = 0;
+ virtual SwapChain *createSwapChain(HWND window, HANDLE shareHandle, GLenum backBufferFormat, GLenum depthBufferFormat) = 0;
+
virtual void setSamplerState(gl::SamplerType type, int index, const gl::SamplerState &sampler) = 0;
virtual void setTexture(gl::SamplerType type, int index, gl::Texture *texture) = 0;
diff --git a/src/libGLESv2/renderer/Renderer11.cpp b/src/libGLESv2/renderer/Renderer11.cpp
index b60b2e2..60e12cf 100644
--- a/src/libGLESv2/renderer/Renderer11.cpp
+++ b/src/libGLESv2/renderer/Renderer11.cpp
@@ -31,6 +31,8 @@
mD3d11Module = NULL;
mDxgiModule = NULL;
+ mDeviceLost = false;
+
mDevice = NULL;
mDeviceContext = NULL;
mDxgiAdapter = NULL;
@@ -224,6 +226,16 @@
UNIMPLEMENTED();
}
+SwapChain *Renderer11::createSwapChain(HWND window, HANDLE shareHandle, GLenum backBufferFormat, GLenum depthBufferFormat)
+{
+ // TODO
+ UNIMPLEMENTED();
+
+ //return new rx::SwapChain(this, window, shareHandle, backBufferFormat, depthBufferFormat);
+
+ return NULL;
+}
+
void Renderer11::setSamplerState(gl::SamplerType type, int index, const gl::SamplerState &samplerState)
{
// TODO
@@ -298,7 +310,7 @@
bool isLost = false;
// TODO
- UNIMPLEMENTED();
+ //UNIMPLEMENTED();
if (isLost)
{
@@ -484,7 +496,7 @@
bool Renderer11::getShareHandleSupport() const
{
// TODO
- UNIMPLEMENTED();
+ //UNIMPLEMENTED();
// PIX doesn't seem to support using share handles, so disable them.
return false && !gl::perfActive();
diff --git a/src/libGLESv2/renderer/Renderer11.h b/src/libGLESv2/renderer/Renderer11.h
index bf068b9..dfc651d 100644
--- a/src/libGLESv2/renderer/Renderer11.h
+++ b/src/libGLESv2/renderer/Renderer11.h
@@ -42,6 +42,8 @@
virtual void sync(bool block);
+ virtual SwapChain *createSwapChain(HWND window, HANDLE shareHandle, GLenum backBufferFormat, GLenum depthBufferFormat);
+
virtual void setSamplerState(gl::SamplerType type, int index, const gl::SamplerState &sampler);
virtual void setTexture(gl::SamplerType type, int index, gl::Texture *texture);
diff --git a/src/libGLESv2/renderer/Renderer9.cpp b/src/libGLESv2/renderer/Renderer9.cpp
index 480ffa9..fa4724d 100644
--- a/src/libGLESv2/renderer/Renderer9.cpp
+++ b/src/libGLESv2/renderer/Renderer9.cpp
@@ -502,6 +502,11 @@
}
}
+SwapChain *Renderer9::createSwapChain(HWND window, HANDLE shareHandle, GLenum backBufferFormat, GLenum depthBufferFormat)
+{
+ return new rx::SwapChain(this, window, shareHandle, backBufferFormat, depthBufferFormat);
+}
+
// D3D9_REPLACE
IDirect3DQuery9* Renderer9::allocateEventQuery()
{
diff --git a/src/libGLESv2/renderer/Renderer9.h b/src/libGLESv2/renderer/Renderer9.h
index e0b5035..e5c60b8 100644
--- a/src/libGLESv2/renderer/Renderer9.h
+++ b/src/libGLESv2/renderer/Renderer9.h
@@ -44,6 +44,9 @@
virtual void endScene();
virtual void sync(bool block);
+
+ virtual SwapChain *createSwapChain(HWND window, HANDLE shareHandle, GLenum backBufferFormat, GLenum depthBufferFormat);
+
IDirect3DQuery9* allocateEventQuery();
void freeEventQuery(IDirect3DQuery9* query);