Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / third_party / angle / src / libGLESv2 / renderer / d3d / d3d9 / Buffer9.cpp
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 // Buffer9.cpp Defines the Buffer9 class.
8
9 #include "libGLESv2/renderer/d3d/d3d9/Buffer9.h"
10 #include "libGLESv2/renderer/d3d/d3d9/Renderer9.h"
11 #include "libGLESv2/main.h"
12
13 namespace rx
14 {
15
16 Buffer9::Buffer9(rx::Renderer9 *renderer)
17     : BufferD3D(),
18       mRenderer(renderer),
19       mSize(0)
20 {}
21
22 Buffer9::~Buffer9()
23 {
24     mSize = 0;
25 }
26
27 Buffer9 *Buffer9::makeBuffer9(BufferImpl *buffer)
28 {
29     ASSERT(HAS_DYNAMIC_TYPE(Buffer9*, buffer));
30     return static_cast<Buffer9*>(buffer);
31 }
32
33 gl::Error Buffer9::setData(const void* data, size_t size, GLenum usage)
34 {
35     if (size > mMemory.size())
36     {
37         if (!mMemory.resize(size))
38         {
39             return gl::Error(GL_OUT_OF_MEMORY, "Failed to resize internal buffer.");
40         }
41     }
42
43     mSize = size;
44     if (data && size > 0)
45     {
46         memcpy(mMemory.data(), data, size);
47     }
48
49     invalidateStaticData();
50
51     if (usage == GL_STATIC_DRAW)
52     {
53         initializeStaticData();
54     }
55
56     return gl::Error(GL_NO_ERROR);
57 }
58
59 gl::Error Buffer9::getData(const uint8_t **outData)
60 {
61     *outData = mMemory.data();
62     return gl::Error(GL_NO_ERROR);
63 }
64
65 gl::Error Buffer9::setSubData(const void* data, size_t size, size_t offset)
66 {
67     if (offset + size > mMemory.size())
68     {
69         if (!mMemory.resize(offset + size))
70         {
71             return gl::Error(GL_OUT_OF_MEMORY, "Failed to resize internal buffer.");
72         }
73     }
74
75     mSize = std::max(mSize, offset + size);
76     if (data && size > 0)
77     {
78         memcpy(mMemory.data() + offset, data, size);
79     }
80
81     invalidateStaticData();
82
83     return gl::Error(GL_NO_ERROR);
84 }
85
86 gl::Error Buffer9::copySubData(BufferImpl* source, GLintptr sourceOffset, GLintptr destOffset, GLsizeiptr size)
87 {
88     // Note: this method is currently unreachable
89     Buffer9* sourceBuffer = makeBuffer9(source);
90     ASSERT(sourceBuffer);
91
92     memcpy(mMemory.data() + destOffset, sourceBuffer->mMemory.data() + sourceOffset, size);
93
94     invalidateStaticData();
95
96     return gl::Error(GL_NO_ERROR);
97 }
98
99 // We do not support buffer mapping in D3D9
100 gl::Error Buffer9::map(size_t offset, size_t length, GLbitfield access, GLvoid **mapPtr)
101 {
102     UNREACHABLE();
103     return gl::Error(GL_INVALID_OPERATION);
104 }
105
106 gl::Error Buffer9::unmap()
107 {
108     UNREACHABLE();
109     return gl::Error(GL_INVALID_OPERATION);
110 }
111
112 void Buffer9::markTransformFeedbackUsage()
113 {
114     UNREACHABLE();
115 }
116
117 Renderer* Buffer9::getRenderer()
118 {
119     return mRenderer;
120 }
121
122 }