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);