Handle software device creation at the Renderer9 level.

TRAC #21963 Signed-off-by: Daniel Koch Author: Nicolas Capens git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1378 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent bdfb3914
...@@ -4400,23 +4400,7 @@ gl::Context *glGetCurrentContext() ...@@ -4400,23 +4400,7 @@ gl::Context *glGetCurrentContext()
renderer::Renderer *glCreateRenderer(egl::Display *display, HDC hDc, bool softwareDevice) renderer::Renderer *glCreateRenderer(egl::Display *display, HDC hDc, bool softwareDevice)
{ {
HMODULE hModule = NULL; return new renderer::Renderer9(display, hDc, softwareDevice); // D3D9_REPLACE
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
} }
void glDestroyRenderer(renderer::Renderer *renderer) void glDestroyRenderer(renderer::Renderer *renderer)
......
...@@ -53,9 +53,9 @@ const D3DFORMAT Renderer9::mDepthStencilFormats[] = ...@@ -53,9 +53,9 @@ const D3DFORMAT Renderer9::mDepthStencilFormats[] =
// D3DFMT_D24FS8 // D3DFMT_D24FS8
}; };
Renderer9::Renderer9(egl::Display *display, HMODULE hModule, HDC hDc) : Renderer(display), mDc(hDc) Renderer9::Renderer9(egl::Display *display, HDC hDc, bool softwareDevice) : Renderer(display), mDc(hDc), mSoftwareDevice(softwareDevice)
{ {
mD3d9Module = hModule; mD3d9Module = NULL;
mD3d9 = NULL; mD3d9 = NULL;
mD3d9Ex = NULL; mD3d9Ex = NULL;
...@@ -130,6 +130,21 @@ Renderer9::~Renderer9() ...@@ -130,6 +130,21 @@ Renderer9::~Renderer9()
EGLint Renderer9::initialize() EGLint Renderer9::initialize()
{ {
if (mSoftwareDevice)
{
mD3d9Module = GetModuleHandle(TEXT("swiftshader_d3d9.dll"));
}
else
{
mD3d9Module = GetModuleHandle(TEXT("d3d9.dll"));
}
if (mD3d9Module == NULL)
{
ERR("No D3D9 module found - aborting!\n");
return EGL_NOT_INITIALIZED;
}
typedef HRESULT (WINAPI *Direct3DCreate9ExFunc)(UINT, IDirect3D9Ex**); typedef HRESULT (WINAPI *Direct3DCreate9ExFunc)(UINT, IDirect3D9Ex**);
Direct3DCreate9ExFunc Direct3DCreate9ExPtr = reinterpret_cast<Direct3DCreate9ExFunc>(GetProcAddress(mD3d9Module, "Direct3DCreate9Ex")); Direct3DCreate9ExFunc Direct3DCreate9ExPtr = reinterpret_cast<Direct3DCreate9ExFunc>(GetProcAddress(mD3d9Module, "Direct3DCreate9Ex"));
......
...@@ -32,7 +32,7 @@ namespace renderer ...@@ -32,7 +32,7 @@ namespace renderer
class Renderer9 : public Renderer class Renderer9 : public Renderer
{ {
public: public:
Renderer9(egl::Display *display, HMODULE hModule, HDC hDc); Renderer9(egl::Display *display, HDC hDc, bool softwareDevice);
virtual ~Renderer9(); virtual ~Renderer9();
virtual EGLint initialize(); virtual EGLint initialize();
...@@ -131,6 +131,7 @@ class Renderer9 : public Renderer ...@@ -131,6 +131,7 @@ class Renderer9 : public Renderer
UINT mAdapter; UINT mAdapter;
D3DDEVTYPE mDeviceType; D3DDEVTYPE mDeviceType;
bool mSoftwareDevice; // FIXME: Deprecate
IDirect3D9 *mD3d9; // Always valid after successful initialization. IDirect3D9 *mD3d9; // Always valid after successful initialization.
IDirect3D9Ex *mD3d9Ex; // Might be null if D3D9Ex is not supported. IDirect3D9Ex *mD3d9Ex; // Might be null if D3D9Ex is not supported.
IDirect3DDevice9 *mDevice; IDirect3DDevice9 *mDevice;
......
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