Moves the Blitter into the Renderer's domain

TRAC #22001 Signed-off-by: Daniel Koch Author: Shannon Woods git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1413 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent 8c7b1a9d
......@@ -222,8 +222,6 @@
'libGLESv2/VertexDataManager.cpp',
'libGLESv2/VertexDataManager.h',
'libGLESv2/BinaryStream.h',
'libGLESv2/Blit.cpp',
'libGLESv2/Blit.h',
'libGLESv2/Buffer.cpp',
'libGLESv2/Buffer.h',
'libGLESv2/Context.cpp',
......@@ -252,6 +250,8 @@
'libGLESv2/Query.cpp',
'libGLESv2/Renderbuffer.cpp',
'libGLESv2/Renderbuffer.h',
'libGLESv2/renderer/Blit.cpp',
'libGLESv2/renderer/Blit.h',
'libGLESv2/renderer/Image.cpp',
'libGLESv2/renderer/Image.h',
'libGLESv2/renderer/Renderer.cpp',
......
......@@ -17,7 +17,6 @@
#include "libGLESv2/mathutil.h"
#include "libGLESv2/utilities.h"
#include "libGLESv2/renderer/renderer9_utils.h" // D3D9_REPLACE
#include "libGLESv2/Blit.h"
#include "libGLESv2/ResourceManager.h"
#include "libGLESv2/Buffer.h"
#include "libGLESv2/Fence.h"
......@@ -153,7 +152,6 @@ Context::Context(const gl::Context *shareContext, rx::Renderer *renderer, bool n
mVertexDataManager = NULL;
mIndexDataManager = NULL;
mBlit = NULL;
mLineLoopIB = NULL;
mInvalidEnum = false;
......@@ -238,7 +236,6 @@ Context::~Context()
delete mVertexDataManager;
delete mIndexDataManager;
delete mBlit;
delete mLineLoopIB;
if (mMaskedClearSavedState)
......@@ -257,7 +254,6 @@ void Context::makeCurrent(egl::Surface *surface)
{
mVertexDataManager = new VertexDataManager(mRenderer);
mIndexDataManager = new IndexDataManager(mRenderer);
mBlit = new Blit(mRenderer);
mSupportsShaderModel3 = mRenderer->getShaderModel3Support();
mMaximumPointSize = mRenderer->getMaxPointSize();
......
......@@ -60,7 +60,6 @@ class Stencilbuffer;
class DepthStencilbuffer;
class VertexDataManager;
class IndexDataManager;
class Blit;
class Fence;
class Query;
......@@ -513,8 +512,6 @@ class Context
GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
GLbitfield mask);
Blit *getBlitter() { return mBlit; }
private:
DISALLOW_COPY_AND_ASSIGN(Context);
......@@ -574,8 +571,6 @@ class Context
VertexDataManager *mVertexDataManager;
IndexDataManager *mIndexDataManager;
Blit *mBlit;
StreamingIndexBuffer *mLineLoopIB;
BindingPointer<Texture> mIncompleteTextures[TEXTURE_TYPE_COUNT];
......
......@@ -19,7 +19,7 @@
#include "libGLESv2/main.h"
#include "libGLESv2/mathutil.h"
#include "libGLESv2/utilities.h"
#include "libGLESv2/Blit.h"
#include "libGLESv2/renderer/Blit.h"
#include "libGLESv2/Framebuffer.h"
namespace gl
......@@ -326,12 +326,6 @@ GLint Texture::creationLevels(GLsizei size) const
return creationLevels(size, size);
}
Blit *Texture::getBlitter()
{
Context *context = getContext();
return context->getBlitter();
}
Texture2D::Texture2D(rx::Renderer *renderer, GLuint id) : Texture(renderer, id)
{
mTexStorage = NULL;
......@@ -542,7 +536,7 @@ void Texture2D::copyImage(GLint level, GLenum format, GLint x, GLint y, GLsizei
sourceRect.top = y;
sourceRect.bottom = y + height;
getBlitter()->copy(source, sourceRect, format, 0, 0, mTexStorage, level);
mRenderer->copyImage(source, sourceRect, format, 0, 0, mTexStorage, level);
}
}
......@@ -577,9 +571,9 @@ void Texture2D::copySubImage(GLenum target, GLint level, GLint xoffset, GLint yo
sourceRect.top = y;
sourceRect.bottom = y + height;
getBlitter()->copy(source, sourceRect,
gl::ExtractFormat(mImageArray[0].getInternalFormat()),
xoffset, yoffset, mTexStorage, level);
mRenderer->copyImage(source, sourceRect,
gl::ExtractFormat(mImageArray[0].getInternalFormat()),
xoffset, yoffset, mTexStorage, level);
}
}
}
......@@ -1326,7 +1320,7 @@ void TextureCubeMap::copyImage(GLenum target, GLint level, GLenum format, GLint
sourceRect.top = y;
sourceRect.bottom = y + height;
getBlitter()->copy(source, sourceRect, format, 0, 0, mTexStorage, target, level);
mRenderer->copyImage(source, sourceRect, format, 0, 0, mTexStorage, target, level);
}
}
......@@ -1365,7 +1359,8 @@ void TextureCubeMap::copySubImage(GLenum target, GLint level, GLint xoffset, GLi
sourceRect.top = y;
sourceRect.bottom = y + height;
getBlitter()->copy(source, sourceRect, gl::ExtractFormat(mImageArray[0][0].getInternalFormat()), xoffset, yoffset, mTexStorage, target, level);
mRenderer->copyImage(source, sourceRect, gl::ExtractFormat(mImageArray[0][0].getInternalFormat()),
xoffset, yoffset, mTexStorage, target, level);
}
}
......
......@@ -36,7 +36,6 @@ class Renderer;
namespace gl
{
class Blit;
class Framebuffer;
enum
......@@ -123,8 +122,6 @@ class Texture : public RefCountObject
virtual int levelCount() = 0;
static Blit *getBlitter();
rx::Renderer *mRenderer;
SamplerState mSamplerState;
......
......@@ -228,7 +228,6 @@ copy "$(OutDir)libGLESv2.lib" "$(ProjectDir)..\..\lib\$(Configuration)\"
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="Blit.cpp" />
<ClCompile Include="Buffer.cpp" />
<ClCompile Include="Context.cpp" />
<ClCompile Include="..\common\debug.cpp" />
......@@ -245,6 +244,7 @@ copy "$(OutDir)libGLESv2.lib" "$(ProjectDir)..\..\lib\$(Configuration)\"
<ClCompile Include="Query.cpp" />
<ClCompile Include="..\common\RefCountObject.cpp" />
<ClCompile Include="Renderbuffer.cpp" />
<ClCompile Include="renderer\Blit.cpp" />
<ClCompile Include="renderer\Renderer.cpp" />
<ClCompile Include="renderer\Renderer11.cpp" />
<ClCompile Include="renderer\renderer11_utils.cpp" />
......@@ -262,7 +262,6 @@ copy "$(OutDir)libGLESv2.lib" "$(ProjectDir)..\..\lib\$(Configuration)\"
</ItemGroup>
<ItemGroup>
<ClInclude Include="BinaryStream.h" />
<ClInclude Include="Blit.h" />
<ClInclude Include="Buffer.h" />
<ClInclude Include="Context.h" />
<ClInclude Include="D3DConstantTable.h" />
......@@ -281,6 +280,7 @@ copy "$(OutDir)libGLESv2.lib" "$(ProjectDir)..\..\lib\$(Configuration)\"
<ClInclude Include="Query.h" />
<ClInclude Include="..\common\RefCountObject.h" />
<ClInclude Include="Renderbuffer.h" />
<ClInclude Include="renderer\Blit.h" />
<ClInclude Include="renderer\Image.h" />
<ClInclude Include="renderer\Renderer.h" />
<ClInclude Include="renderer\Renderer11.h" />
......
......@@ -14,9 +14,6 @@
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="Blit.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Buffer.cpp">
<Filter>Source Files</Filter>
</ClCompile>
......@@ -107,14 +104,14 @@
<ClCompile Include="renderer\renderer11_utils.cpp">
<Filter>Renderer</Filter>
</ClCompile>
<ClCompile Include="renderer\Blit.cpp">
<Filter>Renderer</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="BinaryStream.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Blit.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Buffer.h">
<Filter>Header Files</Filter>
</ClInclude>
......@@ -220,6 +217,9 @@
<ClInclude Include="renderer\renderer11_utils.h">
<Filter>Renderer</Filter>
</ClInclude>
<ClInclude Include="renderer\Blit.h">
<Filter>Renderer</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="libGLESv2.def">
......@@ -229,4 +229,4 @@
<ItemGroup>
<ResourceCompile Include="libGLESv2.rc" />
</ItemGroup>
</Project>
\ No newline at end of file
</Project>
......@@ -6,13 +6,14 @@
// Blit.cpp: Surface copy utility class.
#include "libGLESv2/Blit.h"
#include "libGLESv2/renderer/Blit.h"
#include "common/debug.h"
#include "libGLESv2/main.h"
#include "libGLESv2/utilities.h"
#include "libGLESv2/renderer/renderer9_utils.h" // D3D9_REPLACE
#include "libGLESv2/renderer/TextureStorage.h"
#include "libGLESv2/Framebuffer.h"
namespace
......@@ -42,7 +43,7 @@ const size_t g_shaderSize[] =
};
}
namespace gl
namespace rx
{
Blit::Blit(rx::Renderer9 *renderer)
: mRenderer(renderer), mQuadVertexBuffer(NULL), mQuadVertexDeclaration(NULL), mSavedRenderTarget(NULL), mSavedDepthStencil(NULL), mSavedStateBlock(NULL)
......@@ -211,7 +212,7 @@ bool Blit::boxFilter(IDirect3DSurface9 *source, IDirect3DSurface9 *dest)
return true;
}
bool Blit::copy(Framebuffer *framebuffer, const RECT &sourceRect, GLenum destFormat, GLint xoffset, GLint yoffset, TextureStorage2D *storage, GLint level)
bool Blit::copy(gl::Framebuffer *framebuffer, const RECT &sourceRect, GLenum destFormat, GLint xoffset, GLint yoffset, gl::TextureStorage2D *storage, GLint level)
{
// D3D9_REPLACE
IDirect3DSurface9 *source = framebuffer->getRenderTarget();
......@@ -234,7 +235,7 @@ bool Blit::copy(Framebuffer *framebuffer, const RECT &sourceRect, GLenum destFor
return result;
}
bool Blit::copy(Framebuffer *framebuffer, const RECT &sourceRect, GLenum destFormat, GLint xoffset, GLint yoffset, TextureStorageCubeMap *storage, GLenum target, GLint level)
bool Blit::copy(gl::Framebuffer *framebuffer, const RECT &sourceRect, GLenum destFormat, GLint xoffset, GLint yoffset, gl::TextureStorageCubeMap *storage, GLenum target, GLint level)
{
// D3D9_REPLACE
IDirect3DSurface9 *source = framebuffer->getRenderTarget();
......@@ -474,7 +475,7 @@ void Blit::setCommonBlitState()
RECT scissorRect = {0}; // Scissoring is disabled for flipping, but we need this to capture and restore the old rectangle
device->SetScissorRect(&scissorRect);
for(int i = 0; i < MAX_VERTEX_ATTRIBS; i++)
for(int i = 0; i < gl::MAX_VERTEX_ATTRIBS; i++)
{
device->SetStreamSourceFreq(i, 1);
}
......
......@@ -23,17 +23,20 @@
namespace gl
{
class Context;
}
namespace rx
{
class Blit
{
public:
explicit Blit(rx::Renderer9 *renderer);
explicit Blit(Renderer9 *renderer);
~Blit();
// Copy from source surface to dest surface.
// sourceRect, xoffset, yoffset are in D3D coordinates (0,0 in upper-left)
bool copy(Framebuffer *framebuffer, const RECT &sourceRect, GLenum destFormat, GLint xoffset, GLint yoffset, TextureStorage2D *storage, GLint level);
bool copy(Framebuffer *framebuffer, const RECT &sourceRect, GLenum destFormat, GLint xoffset, GLint yoffset, TextureStorageCubeMap *storage, GLenum target, GLint level);
bool copy(gl::Framebuffer *framebuffer, const RECT &sourceRect, GLenum destFormat, GLint xoffset, GLint yoffset, gl::TextureStorage2D *storage, GLint level);
bool copy(gl::Framebuffer *framebuffer, const RECT &sourceRect, GLenum destFormat, GLint xoffset, GLint yoffset, gl::TextureStorageCubeMap *storage, GLenum target, GLint level);
// Copy from source surface to dest surface.
// sourceRect, xoffset, yoffset are in D3D coordinates (0,0 in upper-left)
......@@ -76,7 +79,7 @@ class Blit
template <class D3DShaderType>
bool setShader(ShaderId source, const char *profile,
D3DShaderType *(rx::Renderer9::*createShader)(const DWORD *, size_t length),
D3DShaderType *(Renderer9::*createShader)(const DWORD *, size_t length),
HRESULT (WINAPI IDirect3DDevice9::*setShader)(D3DShaderType*));
bool setVertexShader(ShaderId shader);
......
......@@ -46,6 +46,8 @@ class TextureStorageCubeMap;
namespace rx
{
class Blit;
struct ConfigDesc
{
GLenum renderTargetFormat;
......@@ -115,6 +117,9 @@ class Renderer
virtual bool copyToRenderTarget(gl::TextureStorage2D *dest, gl::TextureStorage2D *source) = 0;
virtual bool copyToRenderTarget(gl::TextureStorageCubeMap *dest, gl::TextureStorageCubeMap *source) = 0;
virtual bool copyImage(gl::Framebuffer *framebuffer, const RECT &sourceRect, GLenum destFormat, GLint xoffset, GLint yoffset, gl::TextureStorage2D *storage, GLint level) = 0;
virtual bool copyImage(gl::Framebuffer *framebuffer, const RECT &sourceRect, GLenum destFormat, GLint xoffset, GLint yoffset, gl::TextureStorageCubeMap *storage, GLenum target, GLint level) = 0;
protected:
egl::Display *mDisplay;
......
......@@ -12,6 +12,7 @@
#include "libGLESv2/renderer/renderer9_utils.h"
#include "libGLESv2/renderer/TextureStorage.h"
#include "libGLESv2/renderer/Image.h"
#include "libGLESv2/renderer/Blit.h"
#include "libEGL/Config.h"
#include "libEGL/Display.h"
......@@ -62,6 +63,7 @@ Renderer9::Renderer9(egl::Display *display, HDC hDc, bool softwareDevice) : Rend
mDevice = NULL;
mDeviceEx = NULL;
mDeviceWindow = NULL;
mBlit = NULL;
mAdapter = D3DADAPTER_DEFAULT;
......@@ -79,6 +81,8 @@ Renderer9::Renderer9(egl::Display *display, HDC hDc, bool softwareDevice) : Rend
Renderer9::~Renderer9()
{
releaseDeviceResources();
delete mBlit;
if (mDevice)
{
......@@ -319,6 +323,8 @@ EGLint Renderer9::initialize()
initializeDevice();
mBlit = new Blit(this);
return EGL_SUCCESS;
}
......@@ -1123,6 +1129,23 @@ D3DPOOL Renderer9::getBufferPool(DWORD usage) const
return D3DPOOL_DEFAULT;
}
bool Renderer9::copyImage(gl::Framebuffer *framebuffer, const RECT &sourceRect, GLenum destFormat, GLint xoffset, GLint yoffset,
gl::TextureStorage2D *storage, GLint level)
{
return mBlit->copy(framebuffer, sourceRect, destFormat, xoffset, yoffset, storage, level);
}
bool Renderer9::copyImage(gl::Framebuffer *framebuffer, const RECT &sourceRect, GLenum destFormat, GLint xoffset, GLint yoffset,
gl::TextureStorageCubeMap *storage, GLenum target, GLint level)
{
return mBlit->copy(framebuffer, sourceRect, destFormat, xoffset, yoffset, storage, target, level);
}
bool Renderer9::boxFilter(IDirect3DSurface9 *source, IDirect3DSurface9 *dest)
{
return mBlit->boxFilter(source, dest);
}
D3DPOOL Renderer9::getTexturePool(DWORD usage) const
{
if (mD3d9Ex != NULL)
......
......@@ -114,6 +114,11 @@ class Renderer9 : public Renderer
virtual bool copyToRenderTarget(gl::TextureStorage2D *dest, gl::TextureStorage2D *source);
virtual bool copyToRenderTarget(gl::TextureStorageCubeMap *dest, gl::TextureStorageCubeMap *source);
virtual bool copyImage(gl::Framebuffer *framebuffer, const RECT &sourceRect, GLenum destFormat, GLint xoffset, GLint yoffset, gl::TextureStorage2D *storage, GLint level);
virtual bool copyImage(gl::Framebuffer *framebuffer, const RECT &sourceRect, GLenum destFormat, GLint xoffset, GLint yoffset, gl::TextureStorageCubeMap *storage, GLenum target, GLint level);
bool boxFilter(IDirect3DSurface9 *source, IDirect3DSurface9 *dest);
D3DPOOL getTexturePool(DWORD usage) const;
private:
......@@ -139,6 +144,8 @@ class Renderer9 : public Renderer
IDirect3DDevice9 *mDevice;
IDirect3DDevice9Ex *mDeviceEx; // Might be null if D3D9Ex is not supported.
Blit *mBlit;
HWND mDeviceWindow;
bool mDeviceLost;
......
......@@ -11,7 +11,7 @@
#include "libGLESv2/main.h"
#include "libGLESv2/renderer/TextureStorage.h"
#include "libGLESv2/renderer/SwapChain.h"
#include "libGLESv2/Blit.h"
#include "libGLESv2/renderer/Blit.h"
#include "libGLESv2/renderer/renderer9_utils.h"
......@@ -75,12 +75,6 @@ bool TextureStorage::IsTextureFormatRenderable(D3DFORMAT format)
return false;
}
Blit *TextureStorage::getBlitter()
{
Context *context = getContext();
return context->getBlitter();
}
bool TextureStorage::isRenderTarget() const
{
return (mD3DUsage & (D3DUSAGE_RENDERTARGET | D3DUSAGE_DEPTHSTENCIL)) != 0;
......@@ -185,7 +179,7 @@ void TextureStorage2D::generateMipmap(int level)
if (upper != NULL && lower != NULL)
{
getBlitter()->boxFilter(upper, lower);
mRenderer->boxFilter(upper, lower);
}
if (upper != NULL) upper->Release();
......@@ -262,7 +256,7 @@ void TextureStorageCubeMap::generateMipmap(int face, int level)
if (upper != NULL && lower != NULL)
{
getBlitter()->boxFilter(upper, lower);
mRenderer->boxFilter(upper, lower);
}
if (upper != NULL) upper->Release();
......
......@@ -21,12 +21,11 @@ namespace rx
{
class Renderer9;
class SwapChain;
class Blit;
}
namespace gl
{
class Blit;
class TextureStorage
{
public:
......@@ -36,7 +35,6 @@ class TextureStorage
static DWORD GetTextureUsage(D3DFORMAT d3dfmt, GLenum glusage, bool forceRenderable);
static bool IsTextureFormatRenderable(D3DFORMAT format);
static Blit *getBlitter();
bool isRenderTarget() const;
bool isManaged() const;
......@@ -50,6 +48,7 @@ class TextureStorage
protected:
int mLodOffset;
rx::Renderer9 *mRenderer;
private:
DISALLOW_COPY_AND_ASSIGN(TextureStorage);
......@@ -57,8 +56,6 @@ class TextureStorage
const DWORD mD3DUsage;
const D3DPOOL mD3DPool;
rx::Renderer9 *mRenderer;
const unsigned int mTextureSerial;
static unsigned int issueTextureSerial();
......
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