Commit 15cba8b1 by Jamie Madill

Refactor buffer storage to split backing stores.

A more flexible representation of a buffer storage implementation allows us to represent storage for D3D11 buffers, and also pack buffer as CPU memory. Refactoring patch only. BUG=angle:511 Change-Id: Ie123099f6217bec6edc98594e49333d16f006a0b Reviewed-on: https://chromium-review.googlesource.com/191033Reviewed-by: 's avatarShannon Woods <shannonwoods@chromium.org> Tested-by: 's avatarJamie Madill <jmadill@chromium.org>
parent eb9baabb
...@@ -15,7 +15,6 @@ namespace rx ...@@ -15,7 +15,6 @@ namespace rx
{ {
class Renderer; class Renderer;
class Renderer11; class Renderer11;
class DirectBufferStorage11;
enum BufferUsage enum BufferUsage
{ {
...@@ -53,10 +52,13 @@ class BufferStorage11 : public BufferStorage ...@@ -53,10 +52,13 @@ class BufferStorage11 : public BufferStorage
virtual void unmap(); virtual void unmap();
private: private:
class TypedBufferStorage11;
class NativeBuffer11;
Renderer11 *mRenderer; Renderer11 *mRenderer;
bool mIsMapped; bool mIsMapped;
std::map<BufferUsage, DirectBufferStorage11*> mDirectBuffers; std::map<BufferUsage, TypedBufferStorage11*> mTypedBuffers;
typedef std::pair<ID3D11Buffer *, ID3D11ShaderResourceView *> BufferSRVPair; typedef std::pair<ID3D11Buffer *, ID3D11ShaderResourceView *> BufferSRVPair;
std::map<DXGI_FORMAT, BufferSRVPair> mBufferResourceViews; std::map<DXGI_FORMAT, BufferSRVPair> mBufferResourceViews;
...@@ -70,42 +72,10 @@ class BufferStorage11 : public BufferStorage ...@@ -70,42 +72,10 @@ class BufferStorage11 : public BufferStorage
size_t mSize; size_t mSize;
void markBufferUsage(); void markBufferUsage();
DirectBufferStorage11 *getStagingBuffer(); NativeBuffer11 *getStagingBuffer();
DirectBufferStorage11 *getStorage(BufferUsage usage);
DirectBufferStorage11 *getLatestStorage() const;
};
// Each instance of BufferStorageD3DBuffer11 is specialized for a class of D3D binding points
// - vertex/transform feedback buffers
// - index buffers
// - pixel unpack buffers
// - uniform buffers
class DirectBufferStorage11
{
public:
DirectBufferStorage11(Renderer11 *renderer, BufferUsage usage);
~DirectBufferStorage11();
BufferUsage getUsage() const;
ID3D11Buffer *getD3DBuffer() const { return mDirectBuffer; }
size_t getSize() const {return mBufferSize; }
bool copyFromStorage(DirectBufferStorage11 *source, size_t sourceOffset, size_t size, size_t destOffset);
void resize(size_t size, bool preserveData);
DataRevision getDataRevision() const { return mRevision; }
void setDataRevision(DataRevision rev) { mRevision = rev; }
private:
Renderer11 *mRenderer;
const BufferUsage mUsage;
DataRevision mRevision;
ID3D11Buffer *mDirectBuffer;
size_t mBufferSize;
static void fillBufferDesc(D3D11_BUFFER_DESC* bufferDesc, Renderer *renderer, BufferUsage usage, unsigned int bufferSize); TypedBufferStorage11 *getStorage(BufferUsage usage);
TypedBufferStorage11 *getLatestStorage() const;
}; };
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment