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 // Buffer9.cpp Defines the Buffer9 class.
9 #include "libGLESv2/renderer/d3d/d3d9/Buffer9.h"
10 #include "libGLESv2/renderer/d3d/d3d9/Renderer9.h"
11 #include "libGLESv2/main.h"
16 Buffer9::Buffer9(rx::Renderer9 *renderer)
27 Buffer9 *Buffer9::makeBuffer9(BufferImpl *buffer)
29 ASSERT(HAS_DYNAMIC_TYPE(Buffer9*, buffer));
30 return static_cast<Buffer9*>(buffer);
33 gl::Error Buffer9::setData(const void* data, size_t size, GLenum usage)
35 if (size > mMemory.size())
37 if (!mMemory.resize(size))
39 return gl::Error(GL_OUT_OF_MEMORY, "Failed to resize internal buffer.");
46 memcpy(mMemory.data(), data, size);
49 invalidateStaticData();
51 if (usage == GL_STATIC_DRAW)
53 initializeStaticData();
56 return gl::Error(GL_NO_ERROR);
59 gl::Error Buffer9::getData(const uint8_t **outData)
61 *outData = mMemory.data();
62 return gl::Error(GL_NO_ERROR);
65 gl::Error Buffer9::setSubData(const void* data, size_t size, size_t offset)
67 if (offset + size > mMemory.size())
69 if (!mMemory.resize(offset + size))
71 return gl::Error(GL_OUT_OF_MEMORY, "Failed to resize internal buffer.");
75 mSize = std::max(mSize, offset + size);
78 memcpy(mMemory.data() + offset, data, size);
81 invalidateStaticData();
83 return gl::Error(GL_NO_ERROR);
86 gl::Error Buffer9::copySubData(BufferImpl* source, GLintptr sourceOffset, GLintptr destOffset, GLsizeiptr size)
88 // Note: this method is currently unreachable
89 Buffer9* sourceBuffer = makeBuffer9(source);
92 memcpy(mMemory.data() + destOffset, sourceBuffer->mMemory.data() + sourceOffset, size);
94 invalidateStaticData();
96 return gl::Error(GL_NO_ERROR);
99 // We do not support buffer mapping in D3D9
100 gl::Error Buffer9::map(size_t offset, size_t length, GLbitfield access, GLvoid **mapPtr)
103 return gl::Error(GL_INVALID_OPERATION);
106 gl::Error Buffer9::unmap()
109 return gl::Error(GL_INVALID_OPERATION);
112 void Buffer9::markTransformFeedbackUsage()
117 Renderer* Buffer9::getRenderer()