Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / third_party / angle / src / libGLESv2 / renderer / d3d / d3d11 / Buffer11.h
1 //
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.
5 //
6
7 // Buffer11.h: Defines the rx::Buffer11 class which implements rx::BufferImpl via rx::BufferD3D.
8
9 #ifndef LIBGLESV2_RENDERER_BUFFER11_H_
10 #define LIBGLESV2_RENDERER_BUFFER11_H_
11
12 #include "libGLESv2/renderer/d3d/BufferD3D.h"
13 #include "libGLESv2/renderer/d3d/MemoryBuffer.h"
14 #include "libGLESv2/angletypes.h"
15
16 namespace rx
17 {
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 Buffer11 : public BufferD3D
48 {
49   public:
50     Buffer11(rx::Renderer11 *renderer);
51     virtual ~Buffer11();
52
53     static Buffer11 *makeBuffer11(BufferImpl *buffer);
54
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 &params);
59
60     // BufferD3D implementation
61     virtual size_t getSize() const { return mSize; }
62     virtual bool supportsDirectBinding() const;
63     virtual Renderer* getRenderer();
64
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();
73
74   private:
75     DISALLOW_COPY_AND_ASSIGN(Buffer11);
76
77     class BufferStorage11;
78     class NativeBuffer11;
79     class PackStorage11;
80
81     rx::Renderer11 *mRenderer;
82     size_t mSize;
83
84     BufferStorage11 *mMappedStorage;
85
86     std::map<BufferUsage, BufferStorage11*> mBufferStorages;
87
88     typedef std::pair<ID3D11Buffer *, ID3D11ShaderResourceView *> BufferSRVPair;
89     std::map<DXGI_FORMAT, BufferSRVPair> mBufferResourceViews;
90
91     MemoryBuffer mResolvedData;
92     DataRevision mResolvedDataRevision;
93     unsigned int mReadUsageCount;
94
95     void markBufferUsage();
96     NativeBuffer11 *getStagingBuffer();
97     PackStorage11 *getPackStorage();
98
99     BufferStorage11 *getBufferStorage(BufferUsage usage);
100     BufferStorage11 *getLatestBufferStorage() const;
101 };
102
103 }
104
105 #endif // LIBGLESV2_RENDERER_BUFFER11_H_