Home | History | Annotate | Download | only in d3d11
      1 //
      2 // Copyright (c) 2013-2014 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 // BufferStorage11.h Defines the BufferStorage11 class.
      8 
      9 #ifndef LIBGLESV2_RENDERER_BUFFERSTORAGE11_H_
     10 #define LIBGLESV2_RENDERER_BUFFERSTORAGE11_H_
     11 
     12 #include "libGLESv2/renderer/BufferStorage.h"
     13 #include "libGLESv2/angletypes.h"
     14 
     15 namespace rx
     16 {
     17 class Renderer;
     18 class Renderer11;
     19 
     20 enum BufferUsage
     21 {
     22     BUFFER_USAGE_STAGING,
     23     BUFFER_USAGE_VERTEX_OR_TRANSFORM_FEEDBACK,
     24     BUFFER_USAGE_INDEX,
     25     BUFFER_USAGE_PIXEL_UNPACK,
     26     BUFFER_USAGE_PIXEL_PACK,
     27     BUFFER_USAGE_UNIFORM,
     28 };
     29 
     30 struct PackPixelsParams
     31 {
     32     PackPixelsParams();
     33     PackPixelsParams(const gl::Rectangle &area, GLenum format, GLenum type, GLuint outputPitch,
     34                      const gl::PixelPackState &pack, ptrdiff_t offset);
     35 
     36     gl::Rectangle area;
     37     GLenum format;
     38     GLenum type;
     39     GLuint outputPitch;
     40     gl::Buffer *packBuffer;
     41     gl::PixelPackState pack;
     42     ptrdiff_t offset;
     43 };
     44 
     45 typedef size_t DataRevision;
     46 
     47 class BufferStorage11 : public BufferStorage
     48 {
     49   public:
     50     explicit BufferStorage11(Renderer11 *renderer);
     51     virtual ~BufferStorage11();
     52 
     53     static BufferStorage11 *makeBufferStorage11(BufferStorage *bufferStorage);
     54 
     55     virtual void *getData();
     56     virtual void setData(const void* data, size_t size, size_t offset);
     57     virtual void copyData(BufferStorage* sourceStorage, size_t size, size_t sourceOffset, size_t destOffset);
     58     virtual void clear();
     59     virtual void markTransformFeedbackUsage();
     60     virtual size_t getSize() const;
     61     virtual bool supportsDirectBinding() const;
     62 
     63     ID3D11Buffer *getBuffer(BufferUsage usage);
     64     ID3D11ShaderResourceView *getSRV(DXGI_FORMAT srvFormat);
     65     void packPixels(ID3D11Texture2D *srcTexure, UINT srcSubresource, const PackPixelsParams &params);
     66 
     67     virtual bool isMapped() const;
     68     virtual void *map(GLbitfield access);
     69     virtual void unmap();
     70 
     71   private:
     72     class TypedBufferStorage11;
     73     class NativeBuffer11;
     74     class PackStorage11;
     75 
     76     Renderer11 *mRenderer;
     77     TypedBufferStorage11 *mMappedStorage;
     78 
     79     std::map<BufferUsage, TypedBufferStorage11*> mTypedBuffers;
     80 
     81     typedef std::pair<ID3D11Buffer *, ID3D11ShaderResourceView *> BufferSRVPair;
     82     std::map<DXGI_FORMAT, BufferSRVPair> mBufferResourceViews;
     83 
     84     std::vector<unsigned char> mResolvedData;
     85     DataRevision mResolvedDataRevision;
     86     unsigned int mReadUsageCount;
     87 
     88     size_t mSize;
     89 
     90     void markBufferUsage();
     91     NativeBuffer11 *getStagingBuffer();
     92     PackStorage11 *getPackStorage();
     93 
     94     TypedBufferStorage11 *getStorage(BufferUsage usage);
     95     TypedBufferStorage11 *getLatestStorage() const;
     96 };
     97 
     98 }
     99 
    100 #endif // LIBGLESV2_RENDERER_BUFFERSTORAGE11_H_
    101