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 ¶ms); 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