Commit b86b979d by Geoff Lang Committed by Shannon Woods

Refactored the Renderer11::copyTexture method into a Blit11 class.

TRAC #23256 Signed-off-by: Jamie Madill Signed-off-by: Shannon Woods Author: Geoff Lang
parent 7b7bc36a
...@@ -271,6 +271,8 @@ ...@@ -271,6 +271,8 @@
'libGLESv2/Renderbuffer.h', 'libGLESv2/Renderbuffer.h',
'libGLESv2/renderer/Blit9.cpp', 'libGLESv2/renderer/Blit9.cpp',
'libGLESv2/renderer/Blit9.h', 'libGLESv2/renderer/Blit9.h',
'libGLESv2/renderer/Blit11.cpp',
'libGLESv2/renderer/Blit11.h',
'libGLESv2/renderer/copyimage.cpp', 'libGLESv2/renderer/copyimage.cpp',
'libGLESv2/renderer/copyimage.h', 'libGLESv2/renderer/copyimage.h',
'libGLESv2/renderer/BufferStorage.h', 'libGLESv2/renderer/BufferStorage.h',
......
...@@ -267,6 +267,7 @@ copy "$(OutDir)libGLESv2.lib" "$(ProjectDir)..\..\lib\$(Configuration)\" ...@@ -267,6 +267,7 @@ copy "$(OutDir)libGLESv2.lib" "$(ProjectDir)..\..\lib\$(Configuration)\"
<ClCompile Include="Query.cpp" /> <ClCompile Include="Query.cpp" />
<ClCompile Include="..\common\RefCountObject.cpp" /> <ClCompile Include="..\common\RefCountObject.cpp" />
<ClCompile Include="Renderbuffer.cpp" /> <ClCompile Include="Renderbuffer.cpp" />
<ClCompile Include="renderer\Blit11.cpp" />
<ClCompile Include="renderer\Blit9.cpp" /> <ClCompile Include="renderer\Blit9.cpp" />
<ClCompile Include="renderer\copyimage.cpp" /> <ClCompile Include="renderer\copyimage.cpp" />
<ClCompile Include="renderer\Fence11.cpp" /> <ClCompile Include="renderer\Fence11.cpp" />
...@@ -342,6 +343,7 @@ copy "$(OutDir)libGLESv2.lib" "$(ProjectDir)..\..\lib\$(Configuration)\" ...@@ -342,6 +343,7 @@ copy "$(OutDir)libGLESv2.lib" "$(ProjectDir)..\..\lib\$(Configuration)\"
<ClInclude Include="Query.h" /> <ClInclude Include="Query.h" />
<ClInclude Include="..\common\RefCountObject.h" /> <ClInclude Include="..\common\RefCountObject.h" />
<ClInclude Include="Renderbuffer.h" /> <ClInclude Include="Renderbuffer.h" />
<ClInclude Include="renderer\Blit11.h" />
<ClInclude Include="renderer\Blit9.h" /> <ClInclude Include="renderer\Blit9.h" />
<ClInclude Include="renderer\copyimage.h" /> <ClInclude Include="renderer\copyimage.h" />
<ClInclude Include="renderer\Fence11.h" /> <ClInclude Include="renderer\Fence11.h" />
......
...@@ -236,6 +236,9 @@ ...@@ -236,6 +236,9 @@
<ClCompile Include="renderer\Blit9.cpp"> <ClCompile Include="renderer\Blit9.cpp">
<Filter>Source Files\Renderer9</Filter> <Filter>Source Files\Renderer9</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="renderer\Blit11.cpp">
<Filter>Source Files\Renderer11</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="BinaryStream.h"> <ClInclude Include="BinaryStream.h">
...@@ -550,6 +553,9 @@ ...@@ -550,6 +553,9 @@
<ClInclude Include="renderer\Blit9.h"> <ClInclude Include="renderer\Blit9.h">
<Filter>Header Files\Renderer9</Filter> <Filter>Header Files\Renderer9</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="renderer\Blit11.h">
<Filter>Header Files\Renderer11</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="renderer\shaders\Blit.ps"> <None Include="renderer\shaders\Blit.ps">
......
//
// Copyright (c) 2013 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// Blit11.cpp: Texture copy utility class.
#ifndef LIBGLESV2_BLIT11_H_
#define LIBGLESV2_BLIT11_H_
#include "common/angleutils.h"
#include "libGLESv2/angletypes.h"
namespace rx
{
class Renderer11;
enum Filter
{
Point,
Linear,
};
class Blit11
{
public:
explicit Blit11(Renderer11 *renderer);
~Blit11();
bool copyTexture(ID3D11ShaderResourceView *source, const gl::Box &sourceArea, const gl::Extents &sourceSize,
ID3D11RenderTargetView *dest, const gl::Box &destArea, const gl::Extents &destSize,
GLenum destFormat, GLenum filter);
private:
rx::Renderer11 *mRenderer;
struct BlitParameters
{
GLenum mDestinationFormat;
bool mSignedInteger;
bool m3DBlit;
};
static bool compareBlitParameters(const BlitParameters &a, const BlitParameters &b);
typedef void (*WriteVertexFunction)(const gl::Box &sourceArea, const gl::Extents &sourceSize,
const gl::Box &destArea, const gl::Extents &destSize,
void *outVertices, unsigned int *outStride, unsigned int *outVertexCount,
D3D11_PRIMITIVE_TOPOLOGY *outTopology);
struct BlitShader
{
WriteVertexFunction mVertexWriteFunction;
ID3D11InputLayout *mInputLayout;
ID3D11VertexShader *mVertexShader;
ID3D11GeometryShader *mGeometryShader;
ID3D11PixelShader *mPixelShader;
};
typedef bool (*BlitParametersComparisonFunction)(const BlitParameters&, const BlitParameters &);
typedef std::map<BlitParameters, BlitShader, BlitParametersComparisonFunction> BlitShaderMap;
BlitShaderMap mShaderMap;
void add2DShaderToMap(GLenum destFormat, bool signedInteger, ID3D11PixelShader *ps);
void add3DShaderToMap(GLenum destFormat, bool signedInteger, ID3D11PixelShader *ps);
void buildShaderMap();
void clearShaderMap();
ID3D11Buffer *mVertexBuffer;
ID3D11SamplerState *mPointSampler;
ID3D11SamplerState *mLinearSampler;
ID3D11InputLayout *mQuad2DIL;
ID3D11VertexShader *mQuad2DVS;
ID3D11InputLayout *mQuad3DIL;
ID3D11VertexShader *mQuad3DVS;
ID3D11GeometryShader *mQuad3DGS;
DISALLOW_COPY_AND_ASSIGN(Blit11);
};
}
#endif // LIBGLESV2_BLIT11_H_
...@@ -29,6 +29,7 @@ namespace rx ...@@ -29,6 +29,7 @@ namespace rx
class VertexDataManager; class VertexDataManager;
class IndexDataManager; class IndexDataManager;
class StreamingIndexBufferInterface; class StreamingIndexBufferInterface;
class Blit11;
enum enum
{ {
...@@ -163,10 +164,6 @@ class Renderer11 : public Renderer ...@@ -163,10 +164,6 @@ class Renderer11 : public Renderer
virtual bool copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat, virtual bool copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat,
GLint xoffset, GLint yoffset, GLint zOffset, TextureStorageInterface2DArray *storage, GLint level); GLint xoffset, GLint yoffset, GLint zOffset, TextureStorageInterface2DArray *storage, GLint level);
bool copyTexture(ID3D11ShaderResourceView *source, const gl::Box &sourceArea, unsigned int sourceWidth, unsigned int sourceHeight, unsigned int sourceDepth,
ID3D11RenderTargetView *dest, const gl::Box &destArea, unsigned int destWidth, unsigned int destHeight, unsigned int destDepth,
GLenum destFormat);
virtual bool blitRect(gl::Framebuffer *readTarget, const gl::Rectangle &readRect, gl::Framebuffer *drawTarget, const gl::Rectangle &drawRect, virtual bool blitRect(gl::Framebuffer *readTarget, const gl::Rectangle &readRect, gl::Framebuffer *drawTarget, const gl::Rectangle &drawRect,
bool blitRenderTarget, bool blitDepthStencil); bool blitRenderTarget, bool blitDepthStencil);
virtual void readPixels(gl::Framebuffer *framebuffer, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, virtual void readPixels(gl::Framebuffer *framebuffer, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type,
...@@ -203,6 +200,8 @@ class Renderer11 : public Renderer ...@@ -203,6 +200,8 @@ class Renderer11 : public Renderer
ID3D11DeviceContext *getDeviceContext() { return mDeviceContext; }; ID3D11DeviceContext *getDeviceContext() { return mDeviceContext; };
IDXGIFactory *getDxgiFactory() { return mDxgiFactory; }; IDXGIFactory *getDxgiFactory() { return mDxgiFactory; };
Blit11 *getBlitter() { return mBlit; }
bool getRenderTargetResource(gl::Renderbuffer *colorbuffer, unsigned int *subresourceIndex, ID3D11Texture2D **resource); bool getRenderTargetResource(gl::Renderbuffer *colorbuffer, unsigned int *subresourceIndex, ID3D11Texture2D **resource);
void unapplyRenderTargets(); void unapplyRenderTargets();
void setOneTimeRenderTarget(ID3D11RenderTargetView *renderTargetView); void setOneTimeRenderTarget(ID3D11RenderTargetView *renderTargetView);
...@@ -339,24 +338,7 @@ class Renderer11 : public Renderer ...@@ -339,24 +338,7 @@ class Renderer11 : public Renderer
StreamingIndexBufferInterface *mTriangleFanIB; StreamingIndexBufferInterface *mTriangleFanIB;
// Texture copy resources // Texture copy resources
bool mCopyResourcesInitialized; Blit11 *mBlit;
ID3D11Buffer *mCopyVB;
ID3D11SamplerState *mCopySampler;
ID3D11InputLayout *mCopy2DIL;
ID3D11VertexShader *mCopy2DVS;
ID3D11PixelShader *mCopyRGBA2DPS;
ID3D11PixelShader *mCopyRGB2DPS;
ID3D11PixelShader *mCopyLum2DPS;
ID3D11PixelShader *mCopyLumAlpha2DPS;
ID3D11InputLayout *mCopy3DIL;
ID3D11VertexShader *mCopy3DVS;
ID3D11GeometryShader *mCopy3DGS;
ID3D11PixelShader *mCopyRGBA3DPS;
ID3D11PixelShader *mCopyRGB3DPS;
ID3D11PixelShader *mCopyLum3DPS;
ID3D11PixelShader *mCopyLumAlpha3DPS;
// Masked clear resources // Masked clear resources
bool mClearResourcesInitialized; bool mClearResourcesInitialized;
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include "libGLESv2/renderer/RenderTarget11.h" #include "libGLESv2/renderer/RenderTarget11.h"
#include "libGLESv2/renderer/SwapChain11.h" #include "libGLESv2/renderer/SwapChain11.h"
#include "libGLESv2/renderer/renderer11_utils.h" #include "libGLESv2/renderer/renderer11_utils.h"
#include "libGLESv2/renderer/Blit11.h"
#include "libGLESv2/renderer/formatutils11.h" #include "libGLESv2/renderer/formatutils11.h"
#include "common/utilities.h" #include "common/utilities.h"
...@@ -142,25 +143,16 @@ void TextureStorage11::generateMipmapLayer(RenderTarget11 *source, RenderTarget1 ...@@ -142,25 +143,16 @@ void TextureStorage11::generateMipmapLayer(RenderTarget11 *source, RenderTarget1
if (sourceSRV && destRTV) if (sourceSRV && destRTV)
{ {
gl::Box sourceArea; gl::Box sourceArea(0, 0, 0, source->getWidth(), source->getHeight(), source->getDepth());
sourceArea.x = 0; gl::Extents sourceSize(source->getWidth(), source->getHeight(), source->getDepth());
sourceArea.y = 0;
sourceArea.z = 0; gl::Box destArea(0, 0, 0, dest->getWidth(), dest->getHeight(), dest->getDepth());
sourceArea.width = source->getWidth(); gl::Extents destSize(dest->getWidth(), dest->getHeight(), dest->getDepth());
sourceArea.height = source->getHeight();
sourceArea.depth = source->getDepth(); Blit11 *blitter = mRenderer->getBlitter();
gl::Box destArea; blitter->copyTexture(sourceSRV, sourceArea, sourceSize, destRTV, destArea, destSize,
destArea.x = 0; GL_RGBA, GL_LINEAR);
destArea.y = 0;
destArea.z = 0;
destArea.width = dest->getWidth();
destArea.height = dest->getHeight();
destArea.depth = dest->getDepth();
mRenderer->copyTexture(sourceSRV, sourceArea, source->getWidth(), source->getHeight(), source->getDepth(),
destRTV, destArea, dest->getWidth(), dest->getHeight(), dest->getDepth(),
GL_RGBA);
} }
if (sourceSRV) if (sourceSRV)
......
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