tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

PixelTransfer11.h (3241B)


      1 //
      2 // Copyright 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 LIBANGLE_RENDERER_D3D_D3D11_PIXELTRANSFER11_H_
     12 #define LIBANGLE_RENDERER_D3D_D3D11_PIXELTRANSFER11_H_
     13 
     14 #include <GLES2/gl2.h>
     15 
     16 #include <map>
     17 
     18 #include "common/platform.h"
     19 #include "libANGLE/Error.h"
     20 #include "libANGLE/renderer/d3d/d3d11/ResourceManager11.h"
     21 
     22 namespace gl
     23 {
     24 class Buffer;
     25 class Context;
     26 struct Box;
     27 struct Extents;
     28 struct PixelUnpackState;
     29 }  // namespace gl
     30 
     31 namespace rx
     32 {
     33 class Renderer11;
     34 class RenderTargetD3D;
     35 
     36 class PixelTransfer11
     37 {
     38  public:
     39    explicit PixelTransfer11(Renderer11 *renderer);
     40    ~PixelTransfer11();
     41 
     42    // unpack: the source buffer is stored in the unpack state, and buffer strides
     43    // offset: the start of the data within the unpack buffer
     44    // destRenderTarget: individual slice/layer of a target texture
     45    // destinationFormat/sourcePixelsType: determines shaders + shader parameters
     46    // destArea: the sub-section of destRenderTarget to copy to
     47    angle::Result copyBufferToTexture(const gl::Context *context,
     48                                      const gl::PixelUnpackState &unpack,
     49                                      gl::Buffer *unpackBuffer,
     50                                      unsigned int offset,
     51                                      RenderTargetD3D *destRenderTarget,
     52                                      GLenum destinationFormat,
     53                                      GLenum sourcePixelsType,
     54                                      const gl::Box &destArea);
     55 
     56  private:
     57    struct CopyShaderParams
     58    {
     59        unsigned int FirstPixelOffset;
     60        unsigned int PixelsPerRow;
     61        unsigned int RowStride;
     62        unsigned int RowsPerSlice;
     63        float PositionOffset[2];
     64        float PositionScale[2];
     65        int TexLocationOffset[2];
     66        int TexLocationScale[2];
     67        unsigned int FirstSlice;
     68    };
     69 
     70    static void setBufferToTextureCopyParams(const gl::Box &destArea,
     71                                             const gl::Extents &destSize,
     72                                             GLenum internalFormat,
     73                                             const gl::PixelUnpackState &unpack,
     74                                             unsigned int offset,
     75                                             CopyShaderParams *parametersOut);
     76 
     77    angle::Result loadResources(const gl::Context *context);
     78    angle::Result buildShaderMap(const gl::Context *context);
     79    const d3d11::PixelShader *findBufferToTexturePS(GLenum internalFormat) const;
     80 
     81    Renderer11 *mRenderer;
     82 
     83    bool mResourcesLoaded;
     84    std::map<GLenum, d3d11::PixelShader> mBufferToTexturePSMap;
     85    d3d11::VertexShader mBufferToTextureVS;
     86    d3d11::GeometryShader mBufferToTextureGS;
     87    d3d11::Buffer mParamsConstantBuffer;
     88    CopyShaderParams mParamsData;
     89 
     90    d3d11::RasterizerState mCopyRasterizerState;
     91    d3d11::DepthStencilState mCopyDepthStencilState;
     92 };
     93 
     94 }  // namespace rx
     95 
     96 #endif  // LIBANGLE_RENDERER_D3D_D3D11_PIXELTRANSFER11_H_