1// 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. 5// 6 7// PixelTransfer11.h: 8// Buffer-to-Texture and Texture-to-Buffer data transfers. 9// Used to implement pixel unpack and pixel pack buffers in ES3. 10 11#ifndef LIBGLESV2_PIXELTRANSFER11_H_ 12#define LIBGLESV2_PIXELTRANSFER11_H_ 13 14#include "common/platform.h" 15 16#include <GLES2/gl2.h> 17 18#include <map> 19 20namespace gl 21{ 22 23class Buffer; 24struct Box; 25struct Extents; 26struct PixelUnpackState; 27 28} 29 30namespace rx 31{ 32class Renderer11; 33class RenderTarget; 34 35class PixelTransfer11 36{ 37 public: 38 explicit PixelTransfer11(Renderer11 *renderer); 39 ~PixelTransfer11(); 40 41 static bool supportsBufferToTextureCopy(GLenum internalFormat); 42 43 // unpack: the source buffer is stored in the unpack state, and buffer strides 44 // offset: the start of the data within the unpack buffer 45 // destRenderTarget: individual slice/layer of a target texture 46 // destinationFormat/sourcePixelsType: determines shaders + shader parameters 47 // destArea: the sub-section of destRenderTarget to copy to 48 bool copyBufferToTexture(const gl::PixelUnpackState &unpack, unsigned int offset, RenderTarget *destRenderTarget, 49 GLenum destinationFormat, GLenum sourcePixelsType, const gl::Box &destArea); 50 51 private: 52 53 struct CopyShaderParams 54 { 55 unsigned int FirstPixelOffset; 56 unsigned int PixelsPerRow; 57 unsigned int RowStride; 58 unsigned int RowsPerSlice; 59 float PositionOffset[2]; 60 float PositionScale[2]; 61 int TexLocationOffset[2]; 62 int TexLocationScale[2]; 63 }; 64 65 static void setBufferToTextureCopyParams(const gl::Box &destArea, const gl::Extents &destSize, GLenum internalFormat, 66 const gl::PixelUnpackState &unpack, unsigned int offset, CopyShaderParams *parametersOut); 67 68 void buildShaderMap(); 69 ID3D11PixelShader *findBufferToTexturePS(GLenum internalFormat) const; 70 71 Renderer11 *mRenderer; 72 73 std::map<GLenum, ID3D11PixelShader *> mBufferToTexturePSMap; 74 ID3D11VertexShader *mBufferToTextureVS; 75 ID3D11GeometryShader *mBufferToTextureGS; 76 ID3D11Buffer *mParamsConstantBuffer; 77 CopyShaderParams mParamsData; 78 79 ID3D11RasterizerState *mCopyRasterizerState; 80 ID3D11DepthStencilState *mCopyDepthStencilState; 81 82}; 83 84} 85 86#endif // LIBGLESV2_PIXELTRANSFER11_H_ 87