Move shader cache into Renderer

Trac #21727 git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1333 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent f688c0d1
...@@ -253,6 +253,7 @@ ...@@ -253,6 +253,7 @@
'libGLESv2/Renderbuffer.h', 'libGLESv2/Renderbuffer.h',
'libGLESv2/renderer/Renderer.cpp', 'libGLESv2/renderer/Renderer.cpp',
'libGLESv2/renderer/Renderer.h', 'libGLESv2/renderer/Renderer.h',
'libGLESv2/renderer/ShaderCache.h',
'libGLESv2/ResourceManager.cpp', 'libGLESv2/ResourceManager.cpp',
'libGLESv2/ResourceManager.h', 'libGLESv2/ResourceManager.h',
'libGLESv2/Shader.cpp', 'libGLESv2/Shader.cpp',
......
...@@ -212,9 +212,6 @@ bool Display::initialize() ...@@ -212,9 +212,6 @@ bool Display::initialize()
initExtensionString(); initExtensionString();
mVertexShaderCache.initialize(device);
mPixelShaderCache.initialize(device);
return true; return true;
} }
...@@ -230,9 +227,6 @@ void Display::terminate() ...@@ -230,9 +227,6 @@ void Display::terminate()
destroyContext(*mContextSet.begin()); destroyContext(*mContextSet.begin());
} }
mVertexShaderCache.clear();
mPixelShaderCache.clear();
glDestroyRenderer(mRenderer); glDestroyRenderer(mRenderer);
mRenderer = NULL; mRenderer = NULL;
} }
...@@ -497,9 +491,6 @@ bool Display::restoreLostDevice() ...@@ -497,9 +491,6 @@ bool Display::restoreLostDevice()
(*surface)->release(); (*surface)->release();
} }
mVertexShaderCache.clear();
mPixelShaderCache.clear();
if (!mRenderer->resetDevice()) if (!mRenderer->resetDevice())
{ {
return error(EGL_BAD_ALLOC, false); return error(EGL_BAD_ALLOC, false);
...@@ -622,15 +613,5 @@ const char *Display::getExtensionString() const ...@@ -622,15 +613,5 @@ const char *Display::getExtensionString() const
return mExtensionString.c_str(); return mExtensionString.c_str();
} }
IDirect3DVertexShader9 *Display::createVertexShader(const DWORD *function, size_t length)
{
return mVertexShaderCache.create(function, length);
}
IDirect3DPixelShader9 *Display::createPixelShader(const DWORD *function, size_t length)
{
return mPixelShaderCache.create(function, length);
}
} }
...@@ -24,7 +24,6 @@ ...@@ -24,7 +24,6 @@
#include "libGLESv2/renderer/Renderer.h" #include "libGLESv2/renderer/Renderer.h"
#include "libEGL/Config.h" #include "libEGL/Config.h"
#include "libEGL/ShaderCache.h"
#include "libEGL/Surface.h" #include "libEGL/Surface.h"
namespace egl namespace egl
...@@ -64,9 +63,6 @@ class Display ...@@ -64,9 +63,6 @@ class Display
const char *getExtensionString() const; const char *getExtensionString() const;
virtual IDirect3DVertexShader9 *createVertexShader(const DWORD *function, size_t length);
virtual IDirect3DPixelShader9 *createPixelShader(const DWORD *function, size_t length);
private: private:
DISALLOW_COPY_AND_ASSIGN(Display); DISALLOW_COPY_AND_ASSIGN(Display);
...@@ -77,9 +73,6 @@ class Display ...@@ -77,9 +73,6 @@ class Display
EGLNativeDisplayType mDisplayId; EGLNativeDisplayType mDisplayId;
const HDC mDc; const HDC mDc;
VertexShaderCache mVertexShaderCache;
PixelShaderCache mPixelShaderCache;
EGLint mMaxSwapInterval; EGLint mMaxSwapInterval;
EGLint mMinSwapInterval; EGLint mMinSwapInterval;
bool mSoftwareDevice; bool mSoftwareDevice;
......
...@@ -42,8 +42,8 @@ const size_t g_shaderSize[] = ...@@ -42,8 +42,8 @@ const size_t g_shaderSize[] =
namespace gl namespace gl
{ {
Blit::Blit(Context *context) Blit::Blit(renderer::Renderer *renderer)
: mContext(context), mQuadVertexBuffer(NULL), mQuadVertexDeclaration(NULL), mSavedRenderTarget(NULL), mSavedDepthStencil(NULL), mSavedStateBlock(NULL) : mRenderer(renderer), mQuadVertexBuffer(NULL), mQuadVertexDeclaration(NULL), mSavedRenderTarget(NULL), mSavedDepthStencil(NULL), mSavedStateBlock(NULL)
{ {
initGeometry(); initGeometry();
memset(mCompiledShaders, 0, sizeof(mCompiledShaders)); memset(mCompiledShaders, 0, sizeof(mCompiledShaders));
...@@ -75,7 +75,7 @@ void Blit::initGeometry() ...@@ -75,7 +75,7 @@ void Blit::initGeometry()
1, 1 1, 1
}; };
IDirect3DDevice9 *device = getDevice(); IDirect3DDevice9 *device = mRenderer->getDevice();
HRESULT result = device->CreateVertexBuffer(sizeof(quad), D3DUSAGE_WRITEONLY, 0, D3DPOOL_DEFAULT, &mQuadVertexBuffer, NULL); HRESULT result = device->CreateVertexBuffer(sizeof(quad), D3DUSAGE_WRITEONLY, 0, D3DPOOL_DEFAULT, &mQuadVertexBuffer, NULL);
...@@ -114,11 +114,10 @@ void Blit::initGeometry() ...@@ -114,11 +114,10 @@ void Blit::initGeometry()
template <class D3DShaderType> template <class D3DShaderType>
bool Blit::setShader(ShaderId source, const char *profile, bool Blit::setShader(ShaderId source, const char *profile,
D3DShaderType *(egl::Display::*createShader)(const DWORD *, size_t length), D3DShaderType *(renderer::Renderer::*createShader)(const DWORD *, size_t length),
HRESULT (WINAPI IDirect3DDevice9::*setShader)(D3DShaderType*)) HRESULT (WINAPI IDirect3DDevice9::*setShader)(D3DShaderType*))
{ {
egl::Display *display = getDisplay(); IDirect3DDevice9 *device = mRenderer->getDevice(); // D3D9_REPLACE
IDirect3DDevice9 *device = display->getRenderer()->getDevice(); // D3D9_REPLACE
D3DShaderType *shader; D3DShaderType *shader;
...@@ -131,7 +130,7 @@ bool Blit::setShader(ShaderId source, const char *profile, ...@@ -131,7 +130,7 @@ bool Blit::setShader(ShaderId source, const char *profile,
const BYTE* shaderCode = g_shaderCode[source]; const BYTE* shaderCode = g_shaderCode[source];
size_t shaderSize = g_shaderSize[source]; size_t shaderSize = g_shaderSize[source];
shader = (display->*createShader)(reinterpret_cast<const DWORD*>(shaderCode), shaderSize); shader = (mRenderer->*createShader)(reinterpret_cast<const DWORD*>(shaderCode), shaderSize);
if (!shader) if (!shader)
{ {
ERR("Failed to create shader for blit operation"); ERR("Failed to create shader for blit operation");
...@@ -154,12 +153,12 @@ bool Blit::setShader(ShaderId source, const char *profile, ...@@ -154,12 +153,12 @@ bool Blit::setShader(ShaderId source, const char *profile,
bool Blit::setVertexShader(ShaderId shader) bool Blit::setVertexShader(ShaderId shader)
{ {
return setShader<IDirect3DVertexShader9>(shader, "vs_2_0", &egl::Display::createVertexShader, &IDirect3DDevice9::SetVertexShader); return setShader<IDirect3DVertexShader9>(shader, "vs_2_0", &renderer::Renderer::createVertexShader, &IDirect3DDevice9::SetVertexShader);
} }
bool Blit::setPixelShader(ShaderId shader) bool Blit::setPixelShader(ShaderId shader)
{ {
return setShader<IDirect3DPixelShader9>(shader, "ps_2_0", &egl::Display::createPixelShader, &IDirect3DDevice9::SetPixelShader); return setShader<IDirect3DPixelShader9>(shader, "ps_2_0", &renderer::Renderer::createPixelShader, &IDirect3DDevice9::SetPixelShader);
} }
RECT Blit::getSurfaceRect(IDirect3DSurface9 *surface) const RECT Blit::getSurfaceRect(IDirect3DSurface9 *surface) const
...@@ -185,7 +184,7 @@ bool Blit::boxFilter(IDirect3DSurface9 *source, IDirect3DSurface9 *dest) ...@@ -185,7 +184,7 @@ bool Blit::boxFilter(IDirect3DSurface9 *source, IDirect3DSurface9 *dest)
} }
// D3D9_REPLACE // D3D9_REPLACE
IDirect3DDevice9 *device = getDevice(); IDirect3DDevice9 *device = mRenderer->getDevice();
saveState(); saveState();
...@@ -213,7 +212,7 @@ bool Blit::boxFilter(IDirect3DSurface9 *source, IDirect3DSurface9 *dest) ...@@ -213,7 +212,7 @@ bool Blit::boxFilter(IDirect3DSurface9 *source, IDirect3DSurface9 *dest)
bool Blit::copy(IDirect3DSurface9 *source, const RECT &sourceRect, GLenum destFormat, GLint xoffset, GLint yoffset, IDirect3DSurface9 *dest) bool Blit::copy(IDirect3DSurface9 *source, const RECT &sourceRect, GLenum destFormat, GLint xoffset, GLint yoffset, IDirect3DSurface9 *dest)
{ {
// D3D9_REPLACE // D3D9_REPLACE
IDirect3DDevice9 *device = getDevice(); IDirect3DDevice9 *device = mRenderer->getDevice();
D3DSURFACE_DESC sourceDesc; D3DSURFACE_DESC sourceDesc;
D3DSURFACE_DESC destDesc; D3DSURFACE_DESC destDesc;
...@@ -249,7 +248,7 @@ bool Blit::formatConvert(IDirect3DSurface9 *source, const RECT &sourceRect, GLen ...@@ -249,7 +248,7 @@ bool Blit::formatConvert(IDirect3DSurface9 *source, const RECT &sourceRect, GLen
} }
// D3D9_REPLACE // D3D9_REPLACE
IDirect3DDevice9 *device = getDevice(); IDirect3DDevice9 *device = mRenderer->getDevice();
saveState(); saveState();
...@@ -329,7 +328,7 @@ bool Blit::setFormatConvertShaders(GLenum destFormat) ...@@ -329,7 +328,7 @@ bool Blit::setFormatConvertShaders(GLenum destFormat)
break; break;
} }
getDevice()->SetPixelShaderConstantF(0, psConst0, 1); mRenderer->getDevice()->SetPixelShaderConstantF(0, psConst0, 1); // D3D9_REPLACE
return true; return true;
} }
...@@ -342,9 +341,7 @@ IDirect3DTexture9 *Blit::copySurfaceToTexture(IDirect3DSurface9 *surface, const ...@@ -342,9 +341,7 @@ IDirect3DTexture9 *Blit::copySurfaceToTexture(IDirect3DSurface9 *surface, const
return NULL; return NULL;
} }
egl::Display *display = getDisplay(); IDirect3DDevice9 *device = mRenderer->getDevice(); // D3D9_REPLACE
renderer::Renderer *renderer = display->getRenderer();
IDirect3DDevice9 *device = renderer->getDevice(); // D3D9_REPLACE
D3DSURFACE_DESC sourceDesc; D3DSURFACE_DESC sourceDesc;
surface->GetDesc(&sourceDesc); surface->GetDesc(&sourceDesc);
...@@ -369,7 +366,7 @@ IDirect3DTexture9 *Blit::copySurfaceToTexture(IDirect3DSurface9 *surface, const ...@@ -369,7 +366,7 @@ IDirect3DTexture9 *Blit::copySurfaceToTexture(IDirect3DSurface9 *surface, const
return error(GL_OUT_OF_MEMORY, (IDirect3DTexture9*)NULL); return error(GL_OUT_OF_MEMORY, (IDirect3DTexture9*)NULL);
} }
renderer->endScene(); mRenderer->endScene();
result = device->StretchRect(surface, &sourceRect, textureSurface, NULL, D3DTEXF_NONE); result = device->StretchRect(surface, &sourceRect, textureSurface, NULL, D3DTEXF_NONE);
textureSurface->Release(); textureSurface->Release();
...@@ -386,7 +383,7 @@ IDirect3DTexture9 *Blit::copySurfaceToTexture(IDirect3DSurface9 *surface, const ...@@ -386,7 +383,7 @@ IDirect3DTexture9 *Blit::copySurfaceToTexture(IDirect3DSurface9 *surface, const
void Blit::setViewport(const RECT &sourceRect, GLint xoffset, GLint yoffset) void Blit::setViewport(const RECT &sourceRect, GLint xoffset, GLint yoffset)
{ {
IDirect3DDevice9 *device = getDevice(); // D3D9_REPLACE IDirect3DDevice9 *device = mRenderer->getDevice(); // D3D9_REPLACE
D3DVIEWPORT9 vp; D3DVIEWPORT9 vp;
vp.X = xoffset; vp.X = xoffset;
...@@ -404,7 +401,7 @@ void Blit::setViewport(const RECT &sourceRect, GLint xoffset, GLint yoffset) ...@@ -404,7 +401,7 @@ void Blit::setViewport(const RECT &sourceRect, GLint xoffset, GLint yoffset)
// D3D9_REPLACE // D3D9_REPLACE
void Blit::setCommonBlitState() void Blit::setCommonBlitState()
{ {
IDirect3DDevice9 *device = getDevice(); IDirect3DDevice9 *device = mRenderer->getDevice();
device->SetDepthStencilSurface(NULL); device->SetDepthStencilSurface(NULL);
...@@ -435,21 +432,19 @@ void Blit::setCommonBlitState() ...@@ -435,21 +432,19 @@ void Blit::setCommonBlitState()
// D3D9_REPLACE // D3D9_REPLACE
void Blit::render() void Blit::render()
{ {
egl::Display *display = getDisplay(); IDirect3DDevice9 *device = mRenderer->getDevice();
renderer::Renderer *renderer = display->getRenderer();
IDirect3DDevice9 *device = renderer->getDevice();
HRESULT hr = device->SetStreamSource(0, mQuadVertexBuffer, 0, 2 * sizeof(float)); HRESULT hr = device->SetStreamSource(0, mQuadVertexBuffer, 0, 2 * sizeof(float));
hr = device->SetVertexDeclaration(mQuadVertexDeclaration); hr = device->SetVertexDeclaration(mQuadVertexDeclaration);
renderer->startScene(); mRenderer->startScene();
hr = device->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2); hr = device->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
} }
// D3D9_REPLACE // D3D9_REPLACE
void Blit::saveState() void Blit::saveState()
{ {
IDirect3DDevice9 *device = getDevice(); IDirect3DDevice9 *device = mRenderer->getDevice();
HRESULT hr; HRESULT hr;
...@@ -502,7 +497,7 @@ void Blit::saveState() ...@@ -502,7 +497,7 @@ void Blit::saveState()
// D3D9_REPLACE // D3D9_REPLACE
void Blit::restoreState() void Blit::restoreState()
{ {
IDirect3DDevice9 *device = getDevice(); IDirect3DDevice9 *device = mRenderer->getDevice();
device->SetDepthStencilSurface(mSavedDepthStencil); device->SetDepthStencilSurface(mSavedDepthStencil);
if (mSavedDepthStencil != NULL) if (mSavedDepthStencil != NULL)
......
...@@ -27,7 +27,7 @@ class Context; ...@@ -27,7 +27,7 @@ class Context;
class Blit class Blit
{ {
public: public:
explicit Blit(Context *context); explicit Blit(renderer::Renderer *renderer);
~Blit(); ~Blit();
// Copy from source surface to dest surface. // Copy from source surface to dest surface.
...@@ -44,7 +44,7 @@ class Blit ...@@ -44,7 +44,7 @@ class Blit
bool boxFilter(IDirect3DSurface9 *source, IDirect3DSurface9 *dest); bool boxFilter(IDirect3DSurface9 *source, IDirect3DSurface9 *dest);
private: private:
Context *mContext; renderer::Renderer *mRenderer;
IDirect3DVertexBuffer9 *mQuadVertexBuffer; IDirect3DVertexBuffer9 *mQuadVertexBuffer;
IDirect3DVertexDeclaration9 *mQuadVertexDeclaration; IDirect3DVertexDeclaration9 *mQuadVertexDeclaration;
...@@ -74,7 +74,7 @@ class Blit ...@@ -74,7 +74,7 @@ class Blit
template <class D3DShaderType> template <class D3DShaderType>
bool setShader(ShaderId source, const char *profile, bool setShader(ShaderId source, const char *profile,
D3DShaderType *(egl::Display::*createShader)(const DWORD *, size_t length), D3DShaderType *(renderer::Renderer::*createShader)(const DWORD *, size_t length),
HRESULT (WINAPI IDirect3DDevice9::*setShader)(D3DShaderType*)); HRESULT (WINAPI IDirect3DDevice9::*setShader)(D3DShaderType*));
bool setVertexShader(ShaderId shader); bool setVertexShader(ShaderId shader);
......
...@@ -264,7 +264,7 @@ void Context::makeCurrent(egl::Display *display, egl::Surface *surface) ...@@ -264,7 +264,7 @@ void Context::makeCurrent(egl::Display *display, egl::Surface *surface)
mVertexDataManager = new VertexDataManager(this, mDevice); mVertexDataManager = new VertexDataManager(this, mDevice);
mIndexDataManager = new IndexDataManager(this, mDevice); mIndexDataManager = new IndexDataManager(this, mDevice);
mBlit = new Blit(this); mBlit = new Blit(mRenderer);
mSupportsShaderModel3 = mDeviceCaps.PixelShaderVersion >= D3DPS_VERSION(3, 0); mSupportsShaderModel3 = mDeviceCaps.PixelShaderVersion >= D3DPS_VERSION(3, 0);
mMaximumPointSize = mDeviceCaps.MaxPointSize; mMaximumPointSize = mDeviceCaps.MaxPointSize;
......
...@@ -64,7 +64,8 @@ unsigned int ProgramBinary::mCurrentSerial = 1; ...@@ -64,7 +64,8 @@ unsigned int ProgramBinary::mCurrentSerial = 1;
ProgramBinary::ProgramBinary() : RefCountObject(0), mSerial(issueSerial()) ProgramBinary::ProgramBinary() : RefCountObject(0), mSerial(issueSerial())
{ {
mDevice = getDevice(); // D3D9_REPLACE mRenderer = getDisplay()->getRenderer();
mDevice = mRenderer->getDevice(); // D3D9_REPLACE
mPixelExecutable = NULL; mPixelExecutable = NULL;
mVertexExecutable = NULL; mVertexExecutable = NULL;
...@@ -1746,7 +1747,7 @@ bool ProgramBinary::load(InfoLog &infoLog, const void *binary, GLsizei length) ...@@ -1746,7 +1747,7 @@ bool ProgramBinary::load(InfoLog &infoLog, const void *binary, GLsizei length)
ptr += sizeof(GUID); ptr += sizeof(GUID);
// D3D9_REPLACE // D3D9_REPLACE
D3DADAPTER_IDENTIFIER9 *currentIdentifier = getDisplay()->getRenderer()->getAdapterIdentifier(); D3DADAPTER_IDENTIFIER9 *currentIdentifier = mRenderer->getAdapterIdentifier();
if (memcmp(&currentIdentifier->DeviceIdentifier, binaryIdentifier, sizeof(GUID)) != 0) if (memcmp(&currentIdentifier->DeviceIdentifier, binaryIdentifier, sizeof(GUID)) != 0)
{ {
infoLog.append("Invalid program binary."); infoLog.append("Invalid program binary.");
...@@ -1759,14 +1760,14 @@ bool ProgramBinary::load(InfoLog &infoLog, const void *binary, GLsizei length) ...@@ -1759,14 +1760,14 @@ bool ProgramBinary::load(InfoLog &infoLog, const void *binary, GLsizei length)
const char *vertexShaderFunction = ptr; const char *vertexShaderFunction = ptr;
ptr += vertexShaderSize; ptr += vertexShaderSize;
mPixelExecutable = getDisplay()->createPixelShader(reinterpret_cast<const DWORD*>(pixelShaderFunction), pixelShaderSize); mPixelExecutable = mRenderer->createPixelShader(reinterpret_cast<const DWORD*>(pixelShaderFunction), pixelShaderSize);
if (!mPixelExecutable) if (!mPixelExecutable)
{ {
infoLog.append("Could not create pixel shader."); infoLog.append("Could not create pixel shader.");
return false; return false;
} }
mVertexExecutable = getDisplay()->createVertexShader(reinterpret_cast<const DWORD*>(vertexShaderFunction), vertexShaderSize); mVertexExecutable = mRenderer->createVertexShader(reinterpret_cast<const DWORD*>(vertexShaderFunction), vertexShaderSize);
if (!mVertexExecutable) if (!mVertexExecutable)
{ {
infoLog.append("Could not create vertex shader."); infoLog.append("Could not create vertex shader.");
...@@ -1853,7 +1854,7 @@ bool ProgramBinary::save(void* binary, GLsizei bufSize, GLsizei *length) ...@@ -1853,7 +1854,7 @@ bool ProgramBinary::save(void* binary, GLsizei bufSize, GLsizei *length)
stream.write(vertexShaderSize); stream.write(vertexShaderSize);
// D3D9_REPLACE // D3D9_REPLACE
D3DADAPTER_IDENTIFIER9 *identifier = getDisplay()->getRenderer()->getAdapterIdentifier(); D3DADAPTER_IDENTIFIER9 *identifier = mRenderer->getAdapterIdentifier();
GLsizei streamLength = stream.length(); GLsizei streamLength = stream.length();
const void *streamData = stream.data(); const void *streamData = stream.data();
...@@ -1940,13 +1941,13 @@ bool ProgramBinary::link(InfoLog &infoLog, const AttributeBindings &attributeBin ...@@ -1940,13 +1941,13 @@ bool ProgramBinary::link(InfoLog &infoLog, const AttributeBindings &attributeBin
if (vertexBinary && pixelBinary) if (vertexBinary && pixelBinary)
{ {
mVertexExecutable = getDisplay()->createVertexShader((DWORD*)vertexBinary->GetBufferPointer(), vertexBinary->GetBufferSize()); mVertexExecutable = mRenderer->createVertexShader((DWORD*)vertexBinary->GetBufferPointer(), vertexBinary->GetBufferSize());
if (!mVertexExecutable) if (!mVertexExecutable)
{ {
return error(GL_OUT_OF_MEMORY, false); return error(GL_OUT_OF_MEMORY, false);
} }
mPixelExecutable = getDisplay()->createPixelShader((DWORD*)pixelBinary->GetBufferPointer(), pixelBinary->GetBufferSize()); mPixelExecutable = mRenderer->createPixelShader((DWORD*)pixelBinary->GetBufferPointer(), pixelBinary->GetBufferSize());
if (!mPixelExecutable) if (!mPixelExecutable)
{ {
mVertexExecutable->Release(); mVertexExecutable->Release();
......
...@@ -184,10 +184,11 @@ class ProgramBinary : public RefCountObject ...@@ -184,10 +184,11 @@ class ProgramBinary : public RefCountObject
void applyUniformniv(Uniform *targetUniform, GLsizei count, const Vector4 *vector); void applyUniformniv(Uniform *targetUniform, GLsizei count, const Vector4 *vector);
void applyUniformnbv(Uniform *targetUniform, GLsizei count, int width, const GLboolean *v); void applyUniformnbv(Uniform *targetUniform, GLsizei count, int width, const GLboolean *v);
IDirect3DDevice9 *mDevice; renderer::Renderer *mRenderer;
IDirect3DDevice9 *mDevice; // D3D9_REPLACE
IDirect3DPixelShader9 *mPixelExecutable; IDirect3DPixelShader9 *mPixelExecutable; // D3D9_REPLACE
IDirect3DVertexShader9 *mVertexExecutable; IDirect3DVertexShader9 *mVertexExecutable; // D3D9_REPLACE
// These are only used during linking. // These are only used during linking.
D3DConstantTable *mConstantTablePS; D3DConstantTable *mConstantTablePS;
......
...@@ -274,6 +274,7 @@ copy "$(OutDir)libGLESv2.lib" "$(ProjectDir)..\..\lib\$(Configuration)\" ...@@ -274,6 +274,7 @@ copy "$(OutDir)libGLESv2.lib" "$(ProjectDir)..\..\lib\$(Configuration)\"
<ClInclude Include="..\common\RefCountObject.h" /> <ClInclude Include="..\common\RefCountObject.h" />
<ClInclude Include="Renderbuffer.h" /> <ClInclude Include="Renderbuffer.h" />
<ClInclude Include="renderer\Renderer.h" /> <ClInclude Include="renderer\Renderer.h" />
<ClInclude Include="renderer\ShaderCache.h" />
<ClInclude Include="resource.h" /> <ClInclude Include="resource.h" />
<ClInclude Include="ResourceManager.h" /> <ClInclude Include="ResourceManager.h" />
<ClInclude Include="Shader.h" /> <ClInclude Include="Shader.h" />
......
...@@ -169,6 +169,9 @@ ...@@ -169,6 +169,9 @@
<ClInclude Include="renderer\Renderer.h"> <ClInclude Include="renderer\Renderer.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="renderer\ShaderCache.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="libGLESv2.def"> <None Include="libGLESv2.def">
......
...@@ -199,6 +199,9 @@ EGLint Renderer::initialize() ...@@ -199,6 +199,9 @@ EGLint Renderer::initialize()
ASSERT(SUCCEEDED(result)); ASSERT(SUCCEEDED(result));
} }
mVertexShaderCache.initialize(mDevice);
mPixelShaderCache.initialize(mDevice);
initializeDevice(); initializeDevice();
return EGL_SUCCESS; return EGL_SUCCESS;
...@@ -344,6 +347,16 @@ void Renderer::freeEventQuery(IDirect3DQuery9* query) ...@@ -344,6 +347,16 @@ void Renderer::freeEventQuery(IDirect3DQuery9* query)
} }
} }
IDirect3DVertexShader9 *Renderer::createVertexShader(const DWORD *function, size_t length)
{
return mVertexShaderCache.create(function, length);
}
IDirect3DPixelShader9 *Renderer::createPixelShader(const DWORD *function, size_t length)
{
return mPixelShaderCache.create(function, length);
}
void Renderer::releaseDeviceResources() void Renderer::releaseDeviceResources()
{ {
while (!mEventQueryPool.empty()) while (!mEventQueryPool.empty())
...@@ -351,6 +364,9 @@ void Renderer::releaseDeviceResources() ...@@ -351,6 +364,9 @@ void Renderer::releaseDeviceResources()
mEventQueryPool.back()->Release(); mEventQueryPool.back()->Release();
mEventQueryPool.pop_back(); mEventQueryPool.pop_back();
} }
mVertexShaderCache.clear();
mPixelShaderCache.clear();
} }
......
...@@ -13,7 +13,6 @@ ...@@ -13,7 +13,6 @@
#include <set> #include <set>
#include <vector> #include <vector>
#include "common/angleutils.h"
#define GL_APICALL #define GL_APICALL
#include <GLES2/gl2.h> #include <GLES2/gl2.h>
#include <GLES2/gl2ext.h> #include <GLES2/gl2ext.h>
...@@ -22,6 +21,9 @@ ...@@ -22,6 +21,9 @@
#include <d3d9.h> // D3D9_REPLACE #include <d3d9.h> // D3D9_REPLACE
#include "common/angleutils.h"
#include "libGLESv2/renderer/ShaderCache.h"
const int versionWindowsVista = MAKEWORD(0x00, 0x06); const int versionWindowsVista = MAKEWORD(0x00, 0x06);
const int versionWindows7 = MAKEWORD(0x01, 0x06); const int versionWindows7 = MAKEWORD(0x01, 0x06);
...@@ -59,10 +61,10 @@ class Renderer ...@@ -59,10 +61,10 @@ class Renderer
virtual IDirect3DQuery9* allocateEventQuery(); virtual IDirect3DQuery9* allocateEventQuery();
virtual void freeEventQuery(IDirect3DQuery9* query); virtual void freeEventQuery(IDirect3DQuery9* query);
#if 0
// resource creation // resource creation
virtual void *createVertexShader(const DWORD *function, size_t length); virtual IDirect3DVertexShader9 *createVertexShader(const DWORD *function, size_t length); // D3D9_REPLACE
virtual void *createPixelShader(const DWORD *function, size_t length); virtual IDirect3DPixelShader9 *createPixelShader(const DWORD *function, size_t length); // D3D9_REPLACE
#if 0
virtual void *createTexture2D(); virtual void *createTexture2D();
virtual void *createTextureCube(); virtual void *createTextureCube();
virtual void *createQuery();; virtual void *createQuery();;
...@@ -141,6 +143,8 @@ class Renderer ...@@ -141,6 +143,8 @@ class Renderer
// A pool of event queries that are currently unused. // A pool of event queries that are currently unused.
std::vector<IDirect3DQuery9*> mEventQueryPool; std::vector<IDirect3DQuery9*> mEventQueryPool;
VertexShaderCache mVertexShaderCache;
PixelShaderCache mPixelShaderCache;
}; };
} }
......
...@@ -4,11 +4,11 @@ ...@@ -4,11 +4,11 @@
// found in the LICENSE file. // found in the LICENSE file.
// //
// Display.h: Defines egl::ShaderCache, a cache of Direct3D shader objects // ShaderCache: Defines renderer::ShaderCache, a cache of Direct3D shader objects
// keyed by their byte code. // keyed by their byte code.
#ifndef LIBEGL_SHADER_CACHE_H_ #ifndef LIBGLESV2_RENDERER_SHADER_CACHE_H_
#define LIBEGL_SHADER_CACHE_H_ #define LIBGLESV2_RENDERER_SHADER_CACHE_H_
#include <d3d9.h> #include <d3d9.h>
...@@ -18,7 +18,9 @@ ...@@ -18,7 +18,9 @@
#include <unordered_map> #include <unordered_map>
#endif #endif
namespace egl #include "common/debug.h"
namespace renderer
{ {
template <typename ShaderObject> template <typename ShaderObject>
class ShaderCache class ShaderCache
...@@ -48,7 +50,7 @@ class ShaderCache ...@@ -48,7 +50,7 @@ class ShaderCache
it->second->AddRef(); it->second->AddRef();
return it->second; return it->second;
} }
ShaderObject *shader; ShaderObject *shader;
HRESULT result = createShader(function, &shader); HRESULT result = createShader(function, &shader);
if (FAILED(result)) if (FAILED(result))
...@@ -113,4 +115,4 @@ typedef ShaderCache<IDirect3DPixelShader9> PixelShaderCache; ...@@ -113,4 +115,4 @@ typedef ShaderCache<IDirect3DPixelShader9> PixelShaderCache;
} }
#endif // LIBEGL_SHADER_CACHE_H_ #endif // LIBGLESV2_RENDERER_SHADER_CACHE_H_
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