Hash :
7d712e7d
Author :
Date :
2016-03-29T21:54:33
Re-land "Clean up Buffer11." This cleans up some messy stuff from the emulated index buffers, which were caching variables that didn't need to be cached. Also add in missing error checks. This touches a lot of code. Re-land with a fix for clang-win build. BUG=angleproject:1327 BUG=angleproject:1310 Change-Id: I31ed81c7242782bef7c5f6cde2192552f7ff9403 Reviewed-on: https://chromium-review.googlesource.com/336052 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
//
// Copyright 2014 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// Buffer9.cpp Defines the Buffer9 class.
#include "libANGLE/renderer/d3d/d3d9/Buffer9.h"
#include "libANGLE/renderer/d3d/d3d9/Renderer9.h"
namespace rx
{
Buffer9::Buffer9(Renderer9 *renderer)
: BufferD3D(renderer),
mSize(0)
{}
Buffer9::~Buffer9()
{
mSize = 0;
}
gl::Error Buffer9::setData(const void* data, size_t size, GLenum usage)
{
if (size > mMemory.size())
{
if (!mMemory.resize(size))
{
return gl::Error(GL_OUT_OF_MEMORY, "Failed to resize internal buffer.");
}
}
mSize = size;
if (data && size > 0)
{
memcpy(mMemory.data(), data, size);
}
updateD3DBufferUsage(usage);
invalidateStaticData();
return gl::Error(GL_NO_ERROR);
}
gl::Error Buffer9::getData(const uint8_t **outData)
{
*outData = mMemory.data();
return gl::Error(GL_NO_ERROR);
}
gl::Error Buffer9::setSubData(const void* data, size_t size, size_t offset)
{
if (offset + size > mMemory.size())
{
if (!mMemory.resize(offset + size))
{
return gl::Error(GL_OUT_OF_MEMORY, "Failed to resize internal buffer.");
}
}
mSize = std::max(mSize, offset + size);
if (data && size > 0)
{
memcpy(mMemory.data() + offset, data, size);
}
invalidateStaticData();
return gl::Error(GL_NO_ERROR);
}
gl::Error Buffer9::copySubData(BufferImpl* source, GLintptr sourceOffset, GLintptr destOffset, GLsizeiptr size)
{
// Note: this method is currently unreachable
Buffer9* sourceBuffer = GetAs<Buffer9>(source);
ASSERT(sourceBuffer);
memcpy(mMemory.data() + destOffset, sourceBuffer->mMemory.data() + sourceOffset, size);
invalidateStaticData();
return gl::Error(GL_NO_ERROR);
}
// We do not support buffer mapping in D3D9
gl::Error Buffer9::map(GLenum access, GLvoid **mapPtr)
{
UNREACHABLE();
return gl::Error(GL_INVALID_OPERATION);
}
gl::Error Buffer9::mapRange(size_t offset, size_t length, GLbitfield access, GLvoid **mapPtr)
{
UNREACHABLE();
return gl::Error(GL_INVALID_OPERATION);
}
gl::Error Buffer9::unmap(GLboolean *result)
{
UNREACHABLE();
return gl::Error(GL_INVALID_OPERATION);
}
gl::Error Buffer9::markTransformFeedbackUsage()
{
UNREACHABLE();
return gl::Error(GL_INVALID_OPERATION);
}
} // namespace rx