2 // Copyright 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.
7 // Buffer11.h: Defines the rx::Buffer11 class which implements rx::BufferImpl via rx::BufferD3D.
9 #ifndef LIBGLESV2_RENDERER_BUFFER11_H_
10 #define LIBGLESV2_RENDERER_BUFFER11_H_
12 #include "libGLESv2/renderer/d3d/BufferD3D.h"
13 #include "libGLESv2/renderer/d3d/MemoryBuffer.h"
14 #include "libGLESv2/angletypes.h"
23 BUFFER_USAGE_VERTEX_OR_TRANSFORM_FEEDBACK,
25 BUFFER_USAGE_PIXEL_UNPACK,
26 BUFFER_USAGE_PIXEL_PACK,
30 struct PackPixelsParams
33 PackPixelsParams(const gl::Rectangle &area, GLenum format, GLenum type, GLuint outputPitch,
34 const gl::PixelPackState &pack, ptrdiff_t offset);
40 gl::Buffer *packBuffer;
41 gl::PixelPackState pack;
45 typedef size_t DataRevision;
47 class Buffer11 : public BufferD3D
50 Buffer11(rx::Renderer11 *renderer);
53 static Buffer11 *makeBuffer11(BufferImpl *buffer);
55 ID3D11Buffer *getBuffer(BufferUsage usage);
56 ID3D11ShaderResourceView *getSRV(DXGI_FORMAT srvFormat);
57 bool isMapped() const { return mMappedStorage != NULL; }
58 gl::Error packPixels(ID3D11Texture2D *srcTexure, UINT srcSubresource, const PackPixelsParams ¶ms);
60 // BufferD3D implementation
61 virtual size_t getSize() const { return mSize; }
62 virtual bool supportsDirectBinding() const;
63 virtual Renderer* getRenderer();
65 // BufferImpl implementation
66 virtual gl::Error setData(const void* data, size_t size, GLenum usage);
67 gl::Error getData(const uint8_t **outData) override;
68 virtual gl::Error setSubData(const void* data, size_t size, size_t offset);
69 virtual gl::Error copySubData(BufferImpl* source, GLintptr sourceOffset, GLintptr destOffset, GLsizeiptr size);
70 virtual gl::Error map(size_t offset, size_t length, GLbitfield access, GLvoid **mapPtr);
71 virtual gl::Error unmap();
72 virtual void markTransformFeedbackUsage();
75 DISALLOW_COPY_AND_ASSIGN(Buffer11);
77 class BufferStorage11;
81 rx::Renderer11 *mRenderer;
84 BufferStorage11 *mMappedStorage;
86 std::map<BufferUsage, BufferStorage11*> mBufferStorages;
88 typedef std::pair<ID3D11Buffer *, ID3D11ShaderResourceView *> BufferSRVPair;
89 std::map<DXGI_FORMAT, BufferSRVPair> mBufferResourceViews;
91 MemoryBuffer mResolvedData;
92 DataRevision mResolvedDataRevision;
93 unsigned int mReadUsageCount;
95 void markBufferUsage();
96 NativeBuffer11 *getStagingBuffer();
97 PackStorage11 *getPackStorage();
99 BufferStorage11 *getBufferStorage(BufferUsage usage);
100 BufferStorage11 *getLatestBufferStorage() const;
105 #endif // LIBGLESV2_RENDERER_BUFFER11_H_