2 // Copyright (c) 2013 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
8 // Buffer-to-Texture and Texture-to-Buffer data transfers.
9 // Used to implement pixel unpack and pixel pack buffers in ES3.
11 #ifndef LIBGLESV2_PIXELTRANSFER11_H_
12 #define LIBGLESV2_PIXELTRANSFER11_H_
14 #include "common/platform.h"
22 struct PixelUnpackState;
34 explicit PixelTransfer11(Renderer11 *renderer);
37 static bool supportsBufferToTextureCopy(GLenum internalFormat);
39 // unpack: the source buffer is stored in the unpack state, and buffer strides
40 // offset: the start of the data within the unpack buffer
41 // destRenderTarget: individual slice/layer of a target texture
42 // destinationFormat/sourcePixelsType: determines shaders + shader parameters
43 // destArea: the sub-section of destRenderTarget to copy to
44 bool copyBufferToTexture(const gl::PixelUnpackState &unpack, unsigned int offset, RenderTarget *destRenderTarget,
45 GLenum destinationFormat, GLenum sourcePixelsType, const gl::Box &destArea);
49 struct CopyShaderParams
51 unsigned int FirstPixelOffset;
52 unsigned int PixelsPerRow;
53 unsigned int RowStride;
54 unsigned int RowsPerSlice;
55 float PositionOffset[2];
56 float PositionScale[2];
57 int TexLocationOffset[2];
58 int TexLocationScale[2];
61 static void setBufferToTextureCopyParams(const gl::Box &destArea, const gl::Extents &destSize, GLenum internalFormat,
62 const gl::PixelUnpackState &unpack, unsigned int offset, CopyShaderParams *parametersOut);
64 void buildShaderMap();
65 ID3D11PixelShader *findBufferToTexturePS(GLenum internalFormat) const;
67 Renderer11 *mRenderer;
69 std::map<GLenum, ID3D11PixelShader *> mBufferToTexturePSMap;
70 ID3D11VertexShader *mBufferToTextureVS;
71 ID3D11GeometryShader *mBufferToTextureGS;
72 ID3D11Buffer *mParamsConstantBuffer;
73 CopyShaderParams mParamsData;
75 ID3D11RasterizerState *mCopyRasterizerState;
76 ID3D11DepthStencilState *mCopyDepthStencilState;
82 #endif // LIBGLESV2_PIXELTRANSFER11_H_