Commit 33510107 by Jamie Madill Committed by Commit Bot

Pass gl::Context to more Buffer methods.

This will allow us to pull out the Renderer from the Context in more places in Buffer11, for state update. Impacts a few method calls in a few places. BUG=angleproject:2151 Change-Id: I1360caea65a94d3de4cd9f52d1b74b10439b02b3 Reviewed-on: https://chromium-review.googlesource.com/673136Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Reviewed-by: 's avatarFrank Henigman <fjhenigman@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
parent 4cc89e2b
...@@ -192,7 +192,8 @@ void Buffer::onPixelUnpack() ...@@ -192,7 +192,8 @@ void Buffer::onPixelUnpack()
mIndexRangeCache.clear(); mIndexRangeCache.clear();
} }
Error Buffer::getIndexRange(GLenum type, Error Buffer::getIndexRange(const gl::Context *context,
GLenum type,
size_t offset, size_t offset,
size_t count, size_t count,
bool primitiveRestartEnabled, bool primitiveRestartEnabled,
...@@ -203,7 +204,8 @@ Error Buffer::getIndexRange(GLenum type, ...@@ -203,7 +204,8 @@ Error Buffer::getIndexRange(GLenum type,
return NoError(); return NoError();
} }
ANGLE_TRY(mImpl->getIndexRange(type, offset, count, primitiveRestartEnabled, outRange)); ANGLE_TRY(
mImpl->getIndexRange(context, type, offset, count, primitiveRestartEnabled, outRange));
mIndexRangeCache.addRange(type, offset, count, primitiveRestartEnabled, *outRange); mIndexRangeCache.addRange(type, offset, count, primitiveRestartEnabled, *outRange);
......
...@@ -92,7 +92,8 @@ class Buffer final : public RefCountObject, public LabeledObject ...@@ -92,7 +92,8 @@ class Buffer final : public RefCountObject, public LabeledObject
void onTransformFeedback(); void onTransformFeedback();
void onPixelUnpack(); void onPixelUnpack();
Error getIndexRange(GLenum type, Error getIndexRange(const gl::Context *context,
GLenum type,
size_t offset, size_t offset,
size_t count, size_t count,
bool primitiveRestartEnabled, bool primitiveRestartEnabled,
......
...@@ -37,7 +37,7 @@ const Optional<IndexRange> &HasIndexRange::getIndexRange() const ...@@ -37,7 +37,7 @@ const Optional<IndexRange> &HasIndexRange::getIndexRange() const
uintptr_t offset = reinterpret_cast<uintptr_t>(mIndices); uintptr_t offset = reinterpret_cast<uintptr_t>(mIndices);
IndexRange indexRange; IndexRange indexRange;
Error error = Error error =
elementArrayBuffer->getIndexRange(mType, static_cast<size_t>(offset), mCount, elementArrayBuffer->getIndexRange(mContext, mType, static_cast<size_t>(offset), mCount,
state.isPrimitiveRestartEnabled(), &indexRange); state.isPrimitiveRestartEnabled(), &indexRange);
if (error.isError()) if (error.isError())
{ {
......
...@@ -53,7 +53,8 @@ class BufferImpl : angle::NonCopyable ...@@ -53,7 +53,8 @@ class BufferImpl : angle::NonCopyable
void **mapPtr) = 0; void **mapPtr) = 0;
virtual gl::Error unmap(const gl::Context *context, GLboolean *result) = 0; virtual gl::Error unmap(const gl::Context *context, GLboolean *result) = 0;
virtual gl::Error getIndexRange(GLenum type, virtual gl::Error getIndexRange(const gl::Context *context,
GLenum type,
size_t offset, size_t offset,
size_t count, size_t count,
bool primitiveRestartEnabled, bool primitiveRestartEnabled,
......
...@@ -32,7 +32,8 @@ class MockBufferImpl : public BufferImpl ...@@ -32,7 +32,8 @@ class MockBufferImpl : public BufferImpl
gl::Error(const gl::Context *contextImpl, size_t, size_t, GLbitfield, void **)); gl::Error(const gl::Context *contextImpl, size_t, size_t, GLbitfield, void **));
MOCK_METHOD2(unmap, gl::Error(const gl::Context *contextImpl, GLboolean *result)); MOCK_METHOD2(unmap, gl::Error(const gl::Context *contextImpl, GLboolean *result));
MOCK_METHOD5(getIndexRange, gl::Error(GLenum, size_t, size_t, bool, gl::IndexRange *)); MOCK_METHOD6(getIndexRange,
gl::Error(const gl::Context *, GLenum, size_t, size_t, bool, gl::IndexRange *));
MOCK_METHOD0(destructor, void()); MOCK_METHOD0(destructor, void());
......
...@@ -47,7 +47,7 @@ void BufferD3D::updateSerial() ...@@ -47,7 +47,7 @@ void BufferD3D::updateSerial()
mSerial = mNextSerial++; mSerial = mNextSerial++;
} }
void BufferD3D::updateD3DBufferUsage(GLenum usage) void BufferD3D::updateD3DBufferUsage(const gl::Context *context, GLenum usage)
{ {
switch (usage) switch (usage)
{ {
...@@ -55,7 +55,7 @@ void BufferD3D::updateD3DBufferUsage(GLenum usage) ...@@ -55,7 +55,7 @@ void BufferD3D::updateD3DBufferUsage(GLenum usage)
case GL_STATIC_READ: case GL_STATIC_READ:
case GL_STATIC_COPY: case GL_STATIC_COPY:
mUsage = D3DBufferUsage::STATIC; mUsage = D3DBufferUsage::STATIC;
initializeStaticData(); initializeStaticData(context);
break; break;
case GL_STREAM_DRAW: case GL_STREAM_DRAW:
...@@ -71,7 +71,7 @@ void BufferD3D::updateD3DBufferUsage(GLenum usage) ...@@ -71,7 +71,7 @@ void BufferD3D::updateD3DBufferUsage(GLenum usage)
} }
} }
void BufferD3D::initializeStaticData() void BufferD3D::initializeStaticData(const gl::Context *context)
{ {
if (mStaticVertexBuffers.empty()) if (mStaticVertexBuffers.empty())
{ {
...@@ -140,7 +140,7 @@ StaticVertexBufferInterface *BufferD3D::getStaticVertexBuffer(const gl::VertexAt ...@@ -140,7 +140,7 @@ StaticVertexBufferInterface *BufferD3D::getStaticVertexBuffer(const gl::VertexAt
return newStaticBuffer; return newStaticBuffer;
} }
void BufferD3D::invalidateStaticData() void BufferD3D::invalidateStaticData(const gl::Context *context)
{ {
emptyStaticBufferCache(); emptyStaticBufferCache();
...@@ -153,14 +153,14 @@ void BufferD3D::invalidateStaticData() ...@@ -153,14 +153,14 @@ void BufferD3D::invalidateStaticData()
// buffers so that they are populated the next time we use this buffer. // buffers so that they are populated the next time we use this buffer.
if (mUsage == D3DBufferUsage::STATIC) if (mUsage == D3DBufferUsage::STATIC)
{ {
initializeStaticData(); initializeStaticData(context);
} }
mUnmodifiedDataUse = 0; mUnmodifiedDataUse = 0;
} }
// Creates static buffers if sufficient used data has been left unmodified // Creates static buffers if sufficient used data has been left unmodified
void BufferD3D::promoteStaticUsage(int dataSize) void BufferD3D::promoteStaticUsage(const gl::Context *context, int dataSize)
{ {
if (mUsage == D3DBufferUsage::DYNAMIC) if (mUsage == D3DBufferUsage::DYNAMIC)
{ {
...@@ -168,19 +168,20 @@ void BufferD3D::promoteStaticUsage(int dataSize) ...@@ -168,19 +168,20 @@ void BufferD3D::promoteStaticUsage(int dataSize)
if (mUnmodifiedDataUse > 3 * getSize()) if (mUnmodifiedDataUse > 3 * getSize())
{ {
updateD3DBufferUsage(GL_STATIC_DRAW); updateD3DBufferUsage(context, GL_STATIC_DRAW);
} }
} }
} }
gl::Error BufferD3D::getIndexRange(GLenum type, gl::Error BufferD3D::getIndexRange(const gl::Context *context,
GLenum type,
size_t offset, size_t offset,
size_t count, size_t count,
bool primitiveRestartEnabled, bool primitiveRestartEnabled,
gl::IndexRange *outRange) gl::IndexRange *outRange)
{ {
const uint8_t *data = nullptr; const uint8_t *data = nullptr;
ANGLE_TRY(getData(&data)); ANGLE_TRY(getData(context, &data));
*outRange = gl::ComputeIndexRange(type, data + offset, count, primitiveRestartEnabled); *outRange = gl::ComputeIndexRange(type, data + offset, count, primitiveRestartEnabled);
return gl::NoError(); return gl::NoError();
......
...@@ -43,8 +43,8 @@ class BufferD3D : public BufferImpl ...@@ -43,8 +43,8 @@ class BufferD3D : public BufferImpl
virtual size_t getSize() const = 0; virtual size_t getSize() const = 0;
virtual bool supportsDirectBinding() const = 0; virtual bool supportsDirectBinding() const = 0;
virtual gl::Error markTransformFeedbackUsage() = 0; virtual gl::Error markTransformFeedbackUsage(const gl::Context *context) = 0;
virtual gl::Error getData(const uint8_t **outData) = 0; virtual gl::Error getData(const gl::Context *context, const uint8_t **outData) = 0;
// Warning: you should ensure binding really matches attrib.bindingIndex before using this // Warning: you should ensure binding really matches attrib.bindingIndex before using this
// function. // function.
...@@ -52,12 +52,13 @@ class BufferD3D : public BufferImpl ...@@ -52,12 +52,13 @@ class BufferD3D : public BufferImpl
const gl::VertexBinding &binding); const gl::VertexBinding &binding);
StaticIndexBufferInterface *getStaticIndexBuffer(); StaticIndexBufferInterface *getStaticIndexBuffer();
virtual void initializeStaticData(); virtual void initializeStaticData(const gl::Context *context);
virtual void invalidateStaticData(); virtual void invalidateStaticData(const gl::Context *context);
void promoteStaticUsage(int dataSize); void promoteStaticUsage(const gl::Context *context, int dataSize);
gl::Error getIndexRange(GLenum type, gl::Error getIndexRange(const gl::Context *context,
GLenum type,
size_t offset, size_t offset,
size_t count, size_t count,
bool primitiveRestartEnabled, bool primitiveRestartEnabled,
...@@ -68,7 +69,7 @@ class BufferD3D : public BufferImpl ...@@ -68,7 +69,7 @@ class BufferD3D : public BufferImpl
protected: protected:
void updateSerial(); void updateSerial();
void updateD3DBufferUsage(GLenum usage); void updateD3DBufferUsage(const gl::Context *context, GLenum usage);
void emptyStaticBufferCache(); void emptyStaticBufferCache();
BufferFactoryD3D *mFactory; BufferFactoryD3D *mFactory;
......
...@@ -204,7 +204,8 @@ bool IndexDataManager::IsStreamingIndexData(const gl::Context *context, ...@@ -204,7 +204,8 @@ bool IndexDataManager::IsStreamingIndexData(const gl::Context *context,
// When we have a buffer with an unsupported format (subcase b) then we need to do some translation: // When we have a buffer with an unsupported format (subcase b) then we need to do some translation:
// we will start by falling back to streaming, and after a while will start using a static // we will start by falling back to streaming, and after a while will start using a static
// translated copy of the index buffer. // translated copy of the index buffer.
gl::Error IndexDataManager::prepareIndexData(GLenum srcType, gl::Error IndexDataManager::prepareIndexData(const gl::Context *context,
GLenum srcType,
GLsizei count, GLsizei count,
gl::Buffer *glBuffer, gl::Buffer *glBuffer,
const void *indices, const void *indices,
...@@ -293,14 +294,14 @@ gl::Error IndexDataManager::prepareIndexData(GLenum srcType, ...@@ -293,14 +294,14 @@ gl::Error IndexDataManager::prepareIndexData(GLenum srcType,
if (staticBufferInitialized && !staticBufferUsable) if (staticBufferInitialized && !staticBufferUsable)
{ {
buffer->invalidateStaticData(); buffer->invalidateStaticData(context);
staticBuffer = nullptr; staticBuffer = nullptr;
} }
if (staticBuffer == nullptr || !offsetAligned) if (staticBuffer == nullptr || !offsetAligned)
{ {
const uint8_t *bufferData = nullptr; const uint8_t *bufferData = nullptr;
gl::Error error = buffer->getData(&bufferData); gl::Error error = buffer->getData(context, &bufferData);
if (error.isError()) if (error.isError())
{ {
return error; return error;
...@@ -313,14 +314,14 @@ gl::Error IndexDataManager::prepareIndexData(GLenum srcType, ...@@ -313,14 +314,14 @@ gl::Error IndexDataManager::prepareIndexData(GLenum srcType,
{ {
return error; return error;
} }
buffer->promoteStaticUsage(count << srcTypeInfo.bytesShift); buffer->promoteStaticUsage(context, count << srcTypeInfo.bytesShift);
} }
else else
{ {
if (!staticBufferInitialized) if (!staticBufferInitialized)
{ {
const uint8_t *bufferData = nullptr; const uint8_t *bufferData = nullptr;
gl::Error error = buffer->getData(&bufferData); gl::Error error = buffer->getData(context, &bufferData);
if (error.isError()) if (error.isError())
{ {
return error; return error;
......
...@@ -76,7 +76,8 @@ class IndexDataManager : angle::NonCopyable ...@@ -76,7 +76,8 @@ class IndexDataManager : angle::NonCopyable
static bool IsStreamingIndexData(const gl::Context *context, static bool IsStreamingIndexData(const gl::Context *context,
GLenum srcType, GLenum srcType,
RendererClass rendererClass); RendererClass rendererClass);
gl::Error prepareIndexData(GLenum srcType, gl::Error prepareIndexData(const gl::Context *context,
GLenum srcType,
GLsizei count, GLsizei count,
gl::Buffer *glBuffer, gl::Buffer *glBuffer,
const void *indices, const void *indices,
......
...@@ -33,8 +33,11 @@ namespace rx ...@@ -33,8 +33,11 @@ namespace rx
namespace namespace
{ {
gl::Error GetUnpackPointer(const gl::PixelUnpackState &unpack, const uint8_t *pixels, gl::Error GetUnpackPointer(const gl::Context *context,
ptrdiff_t layerOffset, const uint8_t **pointerOut) const gl::PixelUnpackState &unpack,
const uint8_t *pixels,
ptrdiff_t layerOffset,
const uint8_t **pointerOut)
{ {
if (unpack.pixelBuffer.id() != 0) if (unpack.pixelBuffer.id() != 0)
{ {
...@@ -47,7 +50,7 @@ gl::Error GetUnpackPointer(const gl::PixelUnpackState &unpack, const uint8_t *pi ...@@ -47,7 +50,7 @@ gl::Error GetUnpackPointer(const gl::PixelUnpackState &unpack, const uint8_t *pi
BufferD3D *bufferD3D = GetImplAs<BufferD3D>(pixelBuffer); BufferD3D *bufferD3D = GetImplAs<BufferD3D>(pixelBuffer);
ASSERT(bufferD3D); ASSERT(bufferD3D);
const uint8_t *bufferData = nullptr; const uint8_t *bufferData = nullptr;
ANGLE_TRY(bufferD3D->getData(&bufferData)); ANGLE_TRY(bufferD3D->getData(context, &bufferData));
*pointerOut = bufferData + offset; *pointerOut = bufferData + offset;
} }
else else
...@@ -229,7 +232,7 @@ gl::Error TextureD3D::setImageImpl(const gl::Context *context, ...@@ -229,7 +232,7 @@ gl::Error TextureD3D::setImageImpl(const gl::Context *context,
// We no longer need the "GLenum format" parameter to TexImage to determine what data format "pixels" contains. // We no longer need the "GLenum format" parameter to TexImage to determine what data format "pixels" contains.
// From our image internal format we know how many channels to expect, and "type" gives the format of pixel's components. // From our image internal format we know how many channels to expect, and "type" gives the format of pixel's components.
const uint8_t *pixelData = nullptr; const uint8_t *pixelData = nullptr;
ANGLE_TRY(GetUnpackPointer(unpack, pixels, layerOffset, &pixelData)); ANGLE_TRY(GetUnpackPointer(context, unpack, pixels, layerOffset, &pixelData));
if (pixelData != nullptr) if (pixelData != nullptr)
{ {
...@@ -262,7 +265,7 @@ gl::Error TextureD3D::subImage(const gl::Context *context, ...@@ -262,7 +265,7 @@ gl::Error TextureD3D::subImage(const gl::Context *context,
{ {
// CPU readback & copy where direct GPU copy is not supported // CPU readback & copy where direct GPU copy is not supported
const uint8_t *pixelData = nullptr; const uint8_t *pixelData = nullptr;
ANGLE_TRY(GetUnpackPointer(unpack, pixels, layerOffset, &pixelData)); ANGLE_TRY(GetUnpackPointer(context, unpack, pixels, layerOffset, &pixelData));
if (pixelData != nullptr) if (pixelData != nullptr)
{ {
...@@ -299,7 +302,7 @@ gl::Error TextureD3D::setCompressedImageImpl(const gl::Context *context, ...@@ -299,7 +302,7 @@ gl::Error TextureD3D::setCompressedImageImpl(const gl::Context *context,
// We no longer need the "GLenum format" parameter to TexImage to determine what data format "pixels" contains. // We no longer need the "GLenum format" parameter to TexImage to determine what data format "pixels" contains.
// From our image internal format we know how many channels to expect, and "type" gives the format of pixel's components. // From our image internal format we know how many channels to expect, and "type" gives the format of pixel's components.
const uint8_t *pixelData = nullptr; const uint8_t *pixelData = nullptr;
ANGLE_TRY(GetUnpackPointer(unpack, pixels, layerOffset, &pixelData)); ANGLE_TRY(GetUnpackPointer(context, unpack, pixels, layerOffset, &pixelData));
if (pixelData != nullptr) if (pixelData != nullptr)
{ {
...@@ -321,7 +324,7 @@ gl::Error TextureD3D::subImageCompressed(const gl::Context *context, ...@@ -321,7 +324,7 @@ gl::Error TextureD3D::subImageCompressed(const gl::Context *context,
ptrdiff_t layerOffset) ptrdiff_t layerOffset)
{ {
const uint8_t *pixelData = nullptr; const uint8_t *pixelData = nullptr;
ANGLE_TRY(GetUnpackPointer(unpack, pixels, layerOffset, &pixelData)); ANGLE_TRY(GetUnpackPointer(context, unpack, pixels, layerOffset, &pixelData));
if (pixelData != nullptr) if (pixelData != nullptr)
{ {
......
...@@ -11,11 +11,12 @@ ...@@ -11,11 +11,12 @@
#include "common/bitset_utils.h" #include "common/bitset_utils.h"
#include "libANGLE/Buffer.h" #include "libANGLE/Buffer.h"
#include "libANGLE/formatutils.h" #include "libANGLE/Context.h"
#include "libANGLE/Program.h" #include "libANGLE/Program.h"
#include "libANGLE/State.h" #include "libANGLE/State.h"
#include "libANGLE/VertexAttribute.h"
#include "libANGLE/VertexArray.h" #include "libANGLE/VertexArray.h"
#include "libANGLE/VertexAttribute.h"
#include "libANGLE/formatutils.h"
#include "libANGLE/renderer/d3d/BufferD3D.h" #include "libANGLE/renderer/d3d/BufferD3D.h"
#include "libANGLE/renderer/d3d/RendererD3D.h" #include "libANGLE/renderer/d3d/RendererD3D.h"
#include "libANGLE/renderer/d3d/VertexBuffer.h" #include "libANGLE/renderer/d3d/VertexBuffer.h"
...@@ -217,7 +218,7 @@ void VertexDataManager::deinitialize() ...@@ -217,7 +218,7 @@ void VertexDataManager::deinitialize()
mCurrentValueCache.clear(); mCurrentValueCache.clear();
} }
gl::Error VertexDataManager::prepareVertexData(const gl::State &state, gl::Error VertexDataManager::prepareVertexData(const gl::Context *context,
GLint start, GLint start,
GLsizei count, GLsizei count,
std::vector<TranslatedAttribute> *translatedAttribs, std::vector<TranslatedAttribute> *translatedAttribs,
...@@ -225,6 +226,7 @@ gl::Error VertexDataManager::prepareVertexData(const gl::State &state, ...@@ -225,6 +226,7 @@ gl::Error VertexDataManager::prepareVertexData(const gl::State &state,
{ {
ASSERT(mStreamingBuffer); ASSERT(mStreamingBuffer);
const gl::State &state = context->getGLState();
const gl::VertexArray *vertexArray = state.getVertexArray(); const gl::VertexArray *vertexArray = state.getVertexArray();
const auto &vertexAttributes = vertexArray->getVertexAttributes(); const auto &vertexAttributes = vertexArray->getVertexAttributes();
const auto &vertexBindings = vertexArray->getVertexBindings(); const auto &vertexBindings = vertexArray->getVertexBindings();
...@@ -261,7 +263,7 @@ gl::Error VertexDataManager::prepareVertexData(const gl::State &state, ...@@ -261,7 +263,7 @@ gl::Error VertexDataManager::prepareVertexData(const gl::State &state,
case VertexStorageType::STATIC: case VertexStorageType::STATIC:
{ {
// Store static attribute. // Store static attribute.
ANGLE_TRY(StoreStaticAttrib(translated)); ANGLE_TRY(StoreStaticAttrib(context, translated));
break; break;
} }
case VertexStorageType::DYNAMIC: case VertexStorageType::DYNAMIC:
...@@ -288,10 +290,10 @@ gl::Error VertexDataManager::prepareVertexData(const gl::State &state, ...@@ -288,10 +290,10 @@ gl::Error VertexDataManager::prepareVertexData(const gl::State &state,
return gl::NoError(); return gl::NoError();
} }
ANGLE_TRY( ANGLE_TRY(storeDynamicAttribs(context, translatedAttribs, mDynamicAttribsMaskCache, start,
storeDynamicAttribs(translatedAttribs, mDynamicAttribsMaskCache, start, count, instances)); count, instances));
PromoteDynamicAttribs(*translatedAttribs, mDynamicAttribsMaskCache, count); PromoteDynamicAttribs(context, *translatedAttribs, mDynamicAttribsMaskCache, count);
return gl::NoError(); return gl::NoError();
} }
...@@ -320,7 +322,8 @@ void VertexDataManager::StoreDirectAttrib(TranslatedAttribute *directAttrib) ...@@ -320,7 +322,8 @@ void VertexDataManager::StoreDirectAttrib(TranslatedAttribute *directAttrib)
} }
// static // static
gl::Error VertexDataManager::StoreStaticAttrib(TranslatedAttribute *translated) gl::Error VertexDataManager::StoreStaticAttrib(const gl::Context *context,
TranslatedAttribute *translated)
{ {
ASSERT(translated->attribute && translated->binding); ASSERT(translated->attribute && translated->binding);
const auto &attrib = *translated->attribute; const auto &attrib = *translated->attribute;
...@@ -334,7 +337,7 @@ gl::Error VertexDataManager::StoreStaticAttrib(TranslatedAttribute *translated) ...@@ -334,7 +337,7 @@ gl::Error VertexDataManager::StoreStaticAttrib(TranslatedAttribute *translated)
const uint8_t *sourceData = nullptr; const uint8_t *sourceData = nullptr;
const int offset = static_cast<int>(ComputeVertexAttributeOffset(attrib, binding)); const int offset = static_cast<int>(ComputeVertexAttributeOffset(attrib, binding));
ANGLE_TRY(bufferD3D->getData(&sourceData)); ANGLE_TRY(bufferD3D->getData(context, &sourceData));
sourceData += offset; sourceData += offset;
unsigned int streamOffset = 0; unsigned int streamOffset = 0;
...@@ -383,6 +386,7 @@ gl::Error VertexDataManager::StoreStaticAttrib(TranslatedAttribute *translated) ...@@ -383,6 +386,7 @@ gl::Error VertexDataManager::StoreStaticAttrib(TranslatedAttribute *translated)
} }
gl::Error VertexDataManager::storeDynamicAttribs( gl::Error VertexDataManager::storeDynamicAttribs(
const gl::Context *context,
std::vector<TranslatedAttribute> *translatedAttribs, std::vector<TranslatedAttribute> *translatedAttribs,
const gl::AttributesMask &dynamicAttribsMask, const gl::AttributesMask &dynamicAttribsMask,
GLint start, GLint start,
...@@ -418,13 +422,14 @@ gl::Error VertexDataManager::storeDynamicAttribs( ...@@ -418,13 +422,14 @@ gl::Error VertexDataManager::storeDynamicAttribs(
for (auto attribIndex : dynamicAttribsMask) for (auto attribIndex : dynamicAttribsMask)
{ {
auto *dynamicAttrib = &(*translatedAttribs)[attribIndex]; auto *dynamicAttrib = &(*translatedAttribs)[attribIndex];
ANGLE_TRY(storeDynamicAttrib(dynamicAttrib, start, count, instances)); ANGLE_TRY(storeDynamicAttrib(context, dynamicAttrib, start, count, instances));
} }
return gl::NoError(); return gl::NoError();
} }
void VertexDataManager::PromoteDynamicAttribs( void VertexDataManager::PromoteDynamicAttribs(
const gl::Context *context,
const std::vector<TranslatedAttribute> &translatedAttribs, const std::vector<TranslatedAttribute> &translatedAttribs,
const gl::AttributesMask &dynamicAttribsMask, const gl::AttributesMask &dynamicAttribsMask,
GLsizei count) GLsizei count)
...@@ -440,7 +445,7 @@ void VertexDataManager::PromoteDynamicAttribs( ...@@ -440,7 +445,7 @@ void VertexDataManager::PromoteDynamicAttribs(
{ {
BufferD3D *bufferD3D = GetImplAs<BufferD3D>(buffer); BufferD3D *bufferD3D = GetImplAs<BufferD3D>(buffer);
size_t typeSize = ComputeVertexAttributeTypeSize(*dynamicAttrib.attribute); size_t typeSize = ComputeVertexAttributeTypeSize(*dynamicAttrib.attribute);
bufferD3D->promoteStaticUsage(count * static_cast<int>(typeSize)); bufferD3D->promoteStaticUsage(context, count * static_cast<int>(typeSize));
} }
} }
} }
...@@ -483,7 +488,8 @@ gl::Error VertexDataManager::reserveSpaceForAttrib(const TranslatedAttribute &tr ...@@ -483,7 +488,8 @@ gl::Error VertexDataManager::reserveSpaceForAttrib(const TranslatedAttribute &tr
instances); instances);
} }
gl::Error VertexDataManager::storeDynamicAttrib(TranslatedAttribute *translated, gl::Error VertexDataManager::storeDynamicAttrib(const gl::Context *context,
TranslatedAttribute *translated,
GLint start, GLint start,
GLsizei count, GLsizei count,
GLsizei instances) GLsizei instances)
...@@ -506,7 +512,7 @@ gl::Error VertexDataManager::storeDynamicAttrib(TranslatedAttribute *translated, ...@@ -506,7 +512,7 @@ gl::Error VertexDataManager::storeDynamicAttrib(TranslatedAttribute *translated,
if (buffer) if (buffer)
{ {
ANGLE_TRY(storage->getData(&sourceData)); ANGLE_TRY(storage->getData(context, &sourceData));
sourceData += static_cast<int>(ComputeVertexAttributeOffset(attrib, binding)); sourceData += static_cast<int>(ComputeVertexAttributeOffset(attrib, binding));
} }
else else
......
...@@ -90,7 +90,7 @@ class VertexDataManager : angle::NonCopyable ...@@ -90,7 +90,7 @@ class VertexDataManager : angle::NonCopyable
gl::Error initialize(); gl::Error initialize();
void deinitialize(); void deinitialize();
gl::Error prepareVertexData(const gl::State &state, gl::Error prepareVertexData(const gl::Context *context,
GLint start, GLint start,
GLsizei count, GLsizei count,
std::vector<TranslatedAttribute> *translatedAttribs, std::vector<TranslatedAttribute> *translatedAttribs,
...@@ -98,16 +98,18 @@ class VertexDataManager : angle::NonCopyable ...@@ -98,16 +98,18 @@ class VertexDataManager : angle::NonCopyable
static void StoreDirectAttrib(TranslatedAttribute *directAttrib); static void StoreDirectAttrib(TranslatedAttribute *directAttrib);
static gl::Error StoreStaticAttrib(TranslatedAttribute *translated); static gl::Error StoreStaticAttrib(const gl::Context *context, TranslatedAttribute *translated);
gl::Error storeDynamicAttribs(std::vector<TranslatedAttribute> *translatedAttribs, gl::Error storeDynamicAttribs(const gl::Context *context,
std::vector<TranslatedAttribute> *translatedAttribs,
const gl::AttributesMask &dynamicAttribsMask, const gl::AttributesMask &dynamicAttribsMask,
GLint start, GLint start,
GLsizei count, GLsizei count,
GLsizei instances); GLsizei instances);
// Promote static usage of dynamic buffers. // Promote static usage of dynamic buffers.
static void PromoteDynamicAttribs(const std::vector<TranslatedAttribute> &translatedAttribs, static void PromoteDynamicAttribs(const gl::Context *context,
const std::vector<TranslatedAttribute> &translatedAttribs,
const gl::AttributesMask &dynamicAttribsMask, const gl::AttributesMask &dynamicAttribsMask,
GLsizei count); GLsizei count);
...@@ -131,7 +133,8 @@ class VertexDataManager : angle::NonCopyable ...@@ -131,7 +133,8 @@ class VertexDataManager : angle::NonCopyable
GLint start, GLint start,
GLsizei instances) const; GLsizei instances) const;
gl::Error storeDynamicAttrib(TranslatedAttribute *translated, gl::Error storeDynamicAttrib(const gl::Context *context,
TranslatedAttribute *translated,
GLint start, GLint start,
GLsizei count, GLsizei count,
GLsizei instances); GLsizei instances);
......
...@@ -53,16 +53,19 @@ class Buffer11 : public BufferD3D ...@@ -53,16 +53,19 @@ class Buffer11 : public BufferD3D
Buffer11(const gl::BufferState &state, Renderer11 *renderer); Buffer11(const gl::BufferState &state, Renderer11 *renderer);
virtual ~Buffer11(); virtual ~Buffer11();
gl::ErrorOrResult<ID3D11Buffer *> getBuffer(BufferUsage usage); gl::ErrorOrResult<ID3D11Buffer *> getBuffer(const gl::Context *context, BufferUsage usage);
gl::ErrorOrResult<ID3D11Buffer *> getEmulatedIndexedBuffer(SourceIndexData *indexInfo, gl::ErrorOrResult<ID3D11Buffer *> getEmulatedIndexedBuffer(const gl::Context *context,
SourceIndexData *indexInfo,
const TranslatedAttribute &attribute, const TranslatedAttribute &attribute,
GLint startVertex); GLint startVertex);
gl::Error getConstantBufferRange(GLintptr offset, gl::Error getConstantBufferRange(const gl::Context *context,
GLintptr offset,
GLsizeiptr size, GLsizeiptr size,
const d3d11::Buffer **bufferOut, const d3d11::Buffer **bufferOut,
UINT *firstConstantOut, UINT *firstConstantOut,
UINT *numConstantsOut); UINT *numConstantsOut);
gl::ErrorOrResult<const d3d11::ShaderResourceView *> getSRV(DXGI_FORMAT srvFormat); gl::ErrorOrResult<const d3d11::ShaderResourceView *> getSRV(const gl::Context *context,
DXGI_FORMAT srvFormat);
bool isMapped() const { return mMappedStorage != nullptr; } bool isMapped() const { return mMappedStorage != nullptr; }
gl::Error packPixels(const gl::Context *context, gl::Error packPixels(const gl::Context *context,
const gl::FramebufferAttachment &readAttachment, const gl::FramebufferAttachment &readAttachment,
...@@ -72,9 +75,9 @@ class Buffer11 : public BufferD3D ...@@ -72,9 +75,9 @@ class Buffer11 : public BufferD3D
// BufferD3D implementation // BufferD3D implementation
size_t getSize() const override { return mSize; } size_t getSize() const override { return mSize; }
bool supportsDirectBinding() const override; bool supportsDirectBinding() const override;
gl::Error getData(const uint8_t **outData) override; gl::Error getData(const gl::Context *context, const uint8_t **outData) override;
void initializeStaticData() override; void initializeStaticData(const gl::Context *context) override;
void invalidateStaticData() override; void invalidateStaticData(const gl::Context *context) override;
// BufferImpl implementation // BufferImpl implementation
gl::Error setData(const gl::Context *context, gl::Error setData(const gl::Context *context,
...@@ -99,7 +102,7 @@ class Buffer11 : public BufferD3D ...@@ -99,7 +102,7 @@ class Buffer11 : public BufferD3D
GLbitfield access, GLbitfield access,
void **mapPtr) override; void **mapPtr) override;
gl::Error unmap(const gl::Context *context, GLboolean *result) override; gl::Error unmap(const gl::Context *context, GLboolean *result) override;
gl::Error markTransformFeedbackUsage() override; gl::Error markTransformFeedbackUsage(const gl::Context *context) override;
// We use two set of dirty events. Static buffers are marked dirty whenever // We use two set of dirty events. Static buffers are marked dirty whenever
// data changes, because they must be re-translated. Direct buffers only need to be // data changes, because they must be re-translated. Direct buffers only need to be
...@@ -123,23 +126,28 @@ class Buffer11 : public BufferD3D ...@@ -123,23 +126,28 @@ class Buffer11 : public BufferD3D
}; };
void markBufferUsage(BufferUsage usage); void markBufferUsage(BufferUsage usage);
gl::Error garbageCollection(BufferUsage currentUsage); gl::Error garbageCollection(const gl::Context *context, BufferUsage currentUsage);
gl::ErrorOrResult<NativeStorage *> getStagingStorage(); gl::ErrorOrResult<NativeStorage *> getStagingStorage(const gl::Context *context);
gl::ErrorOrResult<PackStorage *> getPackStorage(); gl::ErrorOrResult<PackStorage *> getPackStorage(const gl::Context *context);
gl::ErrorOrResult<SystemMemoryStorage *> getSystemMemoryStorage(); gl::ErrorOrResult<SystemMemoryStorage *> getSystemMemoryStorage(const gl::Context *context);
gl::Error updateBufferStorage(BufferStorage *storage, size_t sourceOffset, size_t storageSize); gl::Error updateBufferStorage(const gl::Context *context,
gl::ErrorOrResult<BufferStorage *> getBufferStorage(BufferUsage usage); BufferStorage *storage,
gl::ErrorOrResult<BufferStorage *> getLatestBufferStorage() const; size_t sourceOffset,
size_t storageSize);
gl::ErrorOrResult<BufferStorage *> getConstantBufferRangeStorage(GLintptr offset, gl::ErrorOrResult<BufferStorage *> getBufferStorage(const gl::Context *context,
BufferUsage usage);
gl::ErrorOrResult<BufferStorage *> getLatestBufferStorage(const gl::Context *context) const;
gl::ErrorOrResult<BufferStorage *> getConstantBufferRangeStorage(const gl::Context *context,
GLintptr offset,
GLsizeiptr size); GLsizeiptr size);
BufferStorage *allocateStorage(BufferUsage usage); BufferStorage *allocateStorage(BufferUsage usage);
void updateDeallocThreshold(BufferUsage usage); void updateDeallocThreshold(BufferUsage usage);
// Free the storage if we decide it isn't being used very often. // Free the storage if we decide it isn't being used very often.
gl::Error checkForDeallocation(BufferUsage usage); gl::Error checkForDeallocation(const gl::Context *context, BufferUsage usage);
// For some cases of uniform buffer storage, we can't deallocate system memory storage. // For some cases of uniform buffer storage, we can't deallocate system memory storage.
bool canDeallocateSystemMemory() const; bool canDeallocateSystemMemory() const;
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include "common/bitset_utils.h" #include "common/bitset_utils.h"
#include "common/third_party/murmurhash/MurmurHash3.h" #include "common/third_party/murmurhash/MurmurHash3.h"
#include "common/utilities.h" #include "common/utilities.h"
#include "libANGLE/Context.h"
#include "libANGLE/Program.h" #include "libANGLE/Program.h"
#include "libANGLE/VertexArray.h" #include "libANGLE/VertexArray.h"
#include "libANGLE/VertexAttribute.h" #include "libANGLE/VertexAttribute.h"
...@@ -19,6 +20,7 @@ ...@@ -19,6 +20,7 @@
#include "libANGLE/renderer/d3d/ProgramD3D.h" #include "libANGLE/renderer/d3d/ProgramD3D.h"
#include "libANGLE/renderer/d3d/VertexDataManager.h" #include "libANGLE/renderer/d3d/VertexDataManager.h"
#include "libANGLE/renderer/d3d/d3d11/Buffer11.h" #include "libANGLE/renderer/d3d/d3d11/Buffer11.h"
#include "libANGLE/renderer/d3d/d3d11/Context11.h"
#include "libANGLE/renderer/d3d/d3d11/Renderer11.h" #include "libANGLE/renderer/d3d/d3d11/Renderer11.h"
#include "libANGLE/renderer/d3d/d3d11/ShaderExecutable11.h" #include "libANGLE/renderer/d3d/d3d11/ShaderExecutable11.h"
#include "libANGLE/renderer/d3d/d3d11/VertexBuffer11.h" #include "libANGLE/renderer/d3d/d3d11/VertexBuffer11.h"
...@@ -119,13 +121,14 @@ void InputLayoutCache::clear() ...@@ -119,13 +121,14 @@ void InputLayoutCache::clear()
} }
gl::Error InputLayoutCache::applyVertexBuffers( gl::Error InputLayoutCache::applyVertexBuffers(
Renderer11 *renderer, const gl::Context *context,
const gl::State &state,
const std::vector<const TranslatedAttribute *> &currentAttributes, const std::vector<const TranslatedAttribute *> &currentAttributes,
GLenum mode, GLenum mode,
GLint start, GLint start,
TranslatedIndexData *indexInfo) TranslatedIndexData *indexInfo)
{ {
Renderer11 *renderer = GetImplAs<Context11>(context)->getRenderer();
const gl::State &state = context->getGLState();
auto *stateManager = renderer->getStateManager(); auto *stateManager = renderer->getStateManager();
gl::Program *program = state.getProgram(); gl::Program *program = state.getProgram();
ProgramD3D *programD3D = GetImplAs<ProgramD3D>(program); ProgramD3D *programD3D = GetImplAs<ProgramD3D>(program);
...@@ -162,7 +165,7 @@ gl::Error InputLayoutCache::applyVertexBuffers( ...@@ -162,7 +165,7 @@ gl::Error InputLayoutCache::applyVertexBuffers(
if (indexInfo->srcIndexData.srcBuffer != nullptr) if (indexInfo->srcIndexData.srcBuffer != nullptr)
{ {
const uint8_t *bufferData = nullptr; const uint8_t *bufferData = nullptr;
ANGLE_TRY(indexInfo->srcIndexData.srcBuffer->getData(&bufferData)); ANGLE_TRY(indexInfo->srcIndexData.srcBuffer->getData(context, &bufferData));
ASSERT(bufferData != nullptr); ASSERT(bufferData != nullptr);
ptrdiff_t offset = ptrdiff_t offset =
...@@ -171,14 +174,15 @@ gl::Error InputLayoutCache::applyVertexBuffers( ...@@ -171,14 +174,15 @@ gl::Error InputLayoutCache::applyVertexBuffers(
indexInfo->srcIndexData.srcIndices = bufferData + offset; indexInfo->srcIndexData.srcIndices = bufferData + offset;
} }
ANGLE_TRY_RESULT(bufferStorage->getEmulatedIndexedBuffer(&indexInfo->srcIndexData, ANGLE_TRY_RESULT(bufferStorage->getEmulatedIndexedBuffer(
attrib, start), context, &indexInfo->srcIndexData, attrib, start),
buffer); buffer);
} }
else else
{ {
ANGLE_TRY_RESULT( ANGLE_TRY_RESULT(
bufferStorage->getBuffer(BUFFER_USAGE_VERTEX_OR_TRANSFORM_FEEDBACK), buffer); bufferStorage->getBuffer(context, BUFFER_USAGE_VERTEX_OR_TRANSFORM_FEEDBACK),
buffer);
} }
vertexStride = attrib.stride; vertexStride = attrib.stride;
......
...@@ -85,8 +85,7 @@ class InputLayoutCache : angle::NonCopyable ...@@ -85,8 +85,7 @@ class InputLayoutCache : angle::NonCopyable
void clear(); void clear();
gl::Error applyVertexBuffers(Renderer11 *renderer, gl::Error applyVertexBuffers(const gl::Context *context,
const gl::State &state,
const std::vector<const TranslatedAttribute *> &currentAttributes, const std::vector<const TranslatedAttribute *> &currentAttributes,
GLenum mode, GLenum mode,
GLint start, GLint start,
......
...@@ -172,7 +172,7 @@ gl::Error PixelTransfer11::copyBufferToTexture(const gl::Context *context, ...@@ -172,7 +172,7 @@ gl::Error PixelTransfer11::copyBufferToTexture(const gl::Context *context,
ASSERT(srvFormat != DXGI_FORMAT_UNKNOWN); ASSERT(srvFormat != DXGI_FORMAT_UNKNOWN);
Buffer11 *bufferStorage11 = GetAs<Buffer11>(sourceBuffer.getImplementation()); Buffer11 *bufferStorage11 = GetAs<Buffer11>(sourceBuffer.getImplementation());
const d3d11::ShaderResourceView *bufferSRV = nullptr; const d3d11::ShaderResourceView *bufferSRV = nullptr;
ANGLE_TRY_RESULT(bufferStorage11->getSRV(srvFormat), bufferSRV); ANGLE_TRY_RESULT(bufferStorage11->getSRV(context, srvFormat), bufferSRV);
ASSERT(bufferSRV != nullptr); ASSERT(bufferSRV != nullptr);
const d3d11::RenderTargetView &textureRTV = const d3d11::RenderTargetView &textureRTV =
......
...@@ -1511,12 +1511,12 @@ gl::Error Renderer11::drawArraysImpl(const gl::Context *context, ...@@ -1511,12 +1511,12 @@ gl::Error Renderer11::drawArraysImpl(const gl::Context *context,
if (mode == GL_LINE_LOOP) if (mode == GL_LINE_LOOP)
{ {
return drawLineLoop(glState, count, GL_NONE, nullptr, 0, adjustedInstanceCount); return drawLineLoop(context, count, GL_NONE, nullptr, 0, adjustedInstanceCount);
} }
if (mode == GL_TRIANGLE_FAN) if (mode == GL_TRIANGLE_FAN)
{ {
return drawTriangleFan(glState, count, GL_NONE, nullptr, 0, adjustedInstanceCount); return drawTriangleFan(context, count, GL_NONE, nullptr, 0, adjustedInstanceCount);
} }
bool useInstancedPointSpriteEmulation = bool useInstancedPointSpriteEmulation =
...@@ -1609,12 +1609,12 @@ gl::Error Renderer11::drawElementsImpl(const gl::Context *context, ...@@ -1609,12 +1609,12 @@ gl::Error Renderer11::drawElementsImpl(const gl::Context *context,
if (mode == GL_LINE_LOOP) if (mode == GL_LINE_LOOP)
{ {
return drawLineLoop(glState, count, type, indices, baseVertex, adjustedInstanceCount); return drawLineLoop(context, count, type, indices, baseVertex, adjustedInstanceCount);
} }
if (mode == GL_TRIANGLE_FAN) if (mode == GL_TRIANGLE_FAN)
{ {
return drawTriangleFan(glState, count, type, indices, baseVertex, adjustedInstanceCount); return drawTriangleFan(context, count, type, indices, baseVertex, adjustedInstanceCount);
} }
const ProgramD3D *programD3D = GetImplAs<ProgramD3D>(glState.getProgram()); const ProgramD3D *programD3D = GetImplAs<ProgramD3D>(glState.getProgram());
...@@ -1686,13 +1686,13 @@ gl::Error Renderer11::drawArraysIndirectImpl(const gl::Context *context, ...@@ -1686,13 +1686,13 @@ gl::Error Renderer11::drawArraysIndirectImpl(const gl::Context *context,
{ {
ANGLE_TRY(mStateManager.applyVertexBuffer(context, mode, 0, 0, 0, nullptr)); ANGLE_TRY(mStateManager.applyVertexBuffer(context, mode, 0, 0, 0, nullptr));
ID3D11Buffer *buffer = nullptr; ID3D11Buffer *buffer = nullptr;
ANGLE_TRY_RESULT(storage->getBuffer(BUFFER_USAGE_INDIRECT), buffer); ANGLE_TRY_RESULT(storage->getBuffer(context, BUFFER_USAGE_INDIRECT), buffer);
mDeviceContext->DrawInstancedIndirect(buffer, static_cast<unsigned int>(offset)); mDeviceContext->DrawInstancedIndirect(buffer, static_cast<unsigned int>(offset));
return gl::NoError(); return gl::NoError();
} }
const uint8_t *bufferData = nullptr; const uint8_t *bufferData = nullptr;
ANGLE_TRY(storage->getData(&bufferData)); ANGLE_TRY(storage->getData(context, &bufferData));
ASSERT(bufferData); ASSERT(bufferData);
const gl::DrawArraysIndirectCommand *args = const gl::DrawArraysIndirectCommand *args =
reinterpret_cast<const gl::DrawArraysIndirectCommand *>(bufferData + offset); reinterpret_cast<const gl::DrawArraysIndirectCommand *>(bufferData + offset);
...@@ -1704,11 +1704,11 @@ gl::Error Renderer11::drawArraysIndirectImpl(const gl::Context *context, ...@@ -1704,11 +1704,11 @@ gl::Error Renderer11::drawArraysIndirectImpl(const gl::Context *context,
if (mode == GL_LINE_LOOP) if (mode == GL_LINE_LOOP)
{ {
return drawLineLoop(glState, count, GL_NONE, nullptr, 0, instances); return drawLineLoop(context, count, GL_NONE, nullptr, 0, instances);
} }
if (mode == GL_TRIANGLE_FAN) if (mode == GL_TRIANGLE_FAN)
{ {
return drawTriangleFan(glState, count, GL_NONE, nullptr, 0, instances); return drawTriangleFan(context, count, GL_NONE, nullptr, 0, instances);
} }
mDeviceContext->DrawInstanced(count, instances, 0, 0); mDeviceContext->DrawInstanced(count, instances, 0, 0);
...@@ -1737,13 +1737,13 @@ gl::Error Renderer11::drawElementsIndirectImpl(const gl::Context *context, ...@@ -1737,13 +1737,13 @@ gl::Error Renderer11::drawElementsIndirectImpl(const gl::Context *context,
ANGLE_TRY(mStateManager.applyIndexBuffer(context, nullptr, 0, type, &indexInfo)); ANGLE_TRY(mStateManager.applyIndexBuffer(context, nullptr, 0, type, &indexInfo));
ANGLE_TRY(mStateManager.applyVertexBuffer(context, mode, 0, 0, 0, &indexInfo)); ANGLE_TRY(mStateManager.applyVertexBuffer(context, mode, 0, 0, 0, &indexInfo));
ID3D11Buffer *buffer = nullptr; ID3D11Buffer *buffer = nullptr;
ANGLE_TRY_RESULT(storage->getBuffer(BUFFER_USAGE_INDIRECT), buffer); ANGLE_TRY_RESULT(storage->getBuffer(context, BUFFER_USAGE_INDIRECT), buffer);
mDeviceContext->DrawIndexedInstancedIndirect(buffer, static_cast<unsigned int>(offset)); mDeviceContext->DrawIndexedInstancedIndirect(buffer, static_cast<unsigned int>(offset));
return gl::NoError(); return gl::NoError();
} }
const uint8_t *bufferData = nullptr; const uint8_t *bufferData = nullptr;
ANGLE_TRY(storage->getData(&bufferData)); ANGLE_TRY(storage->getData(context, &bufferData));
ASSERT(bufferData); ASSERT(bufferData);
const gl::DrawElementsIndirectCommand *cmd = const gl::DrawElementsIndirectCommand *cmd =
...@@ -1759,8 +1759,9 @@ gl::Error Renderer11::drawElementsIndirectImpl(const gl::Context *context, ...@@ -1759,8 +1759,9 @@ gl::Error Renderer11::drawElementsIndirectImpl(const gl::Context *context,
gl::Buffer *elementArrayBuffer = glState.getVertexArray()->getElementArrayBuffer().get(); gl::Buffer *elementArrayBuffer = glState.getVertexArray()->getElementArrayBuffer().get();
ASSERT(elementArrayBuffer); ASSERT(elementArrayBuffer);
gl::IndexRange indexRange; gl::IndexRange indexRange;
ANGLE_TRY(elementArrayBuffer->getIndexRange(type, reinterpret_cast<size_t>(indices), count, ANGLE_TRY(elementArrayBuffer->getIndexRange(context, type, reinterpret_cast<size_t>(indices),
glState.isPrimitiveRestartEnabled(), &indexRange)); count, glState.isPrimitiveRestartEnabled(),
&indexRange));
indexInfo.indexRange = indexRange; indexInfo.indexRange = indexRange;
ANGLE_TRY(mStateManager.applyIndexBuffer(context, indices, count, type, &indexInfo)); ANGLE_TRY(mStateManager.applyIndexBuffer(context, indices, count, type, &indexInfo));
...@@ -1772,25 +1773,26 @@ gl::Error Renderer11::drawElementsIndirectImpl(const gl::Context *context, ...@@ -1772,25 +1773,26 @@ gl::Error Renderer11::drawElementsIndirectImpl(const gl::Context *context,
int baseVertexLocation = -static_cast<int>(indexRange.start); int baseVertexLocation = -static_cast<int>(indexRange.start);
if (mode == GL_LINE_LOOP) if (mode == GL_LINE_LOOP)
{ {
return drawLineLoop(glState, count, type, indices, baseVertexLocation, instances); return drawLineLoop(context, count, type, indices, baseVertexLocation, instances);
} }
if (mode == GL_TRIANGLE_FAN) if (mode == GL_TRIANGLE_FAN)
{ {
return drawTriangleFan(glState, count, type, indices, baseVertexLocation, instances); return drawTriangleFan(context, count, type, indices, baseVertexLocation, instances);
} }
mDeviceContext->DrawIndexedInstanced(count, instances, 0, baseVertexLocation, 0); mDeviceContext->DrawIndexedInstanced(count, instances, 0, baseVertexLocation, 0);
return gl::NoError(); return gl::NoError();
} }
gl::Error Renderer11::drawLineLoop(const gl::State &glState, gl::Error Renderer11::drawLineLoop(const gl::Context *context,
GLsizei count, GLsizei count,
GLenum type, GLenum type,
const void *indexPointer, const void *indexPointer,
int baseVertex, int baseVertex,
int instances) int instances)
{ {
const gl::State &glState = context->getGLState();
gl::VertexArray *vao = glState.getVertexArray(); gl::VertexArray *vao = glState.getVertexArray();
gl::Buffer *elementArrayBuffer = vao->getElementArrayBuffer().get(); gl::Buffer *elementArrayBuffer = vao->getElementArrayBuffer().get();
...@@ -1803,7 +1805,7 @@ gl::Error Renderer11::drawLineLoop(const gl::State &glState, ...@@ -1803,7 +1805,7 @@ gl::Error Renderer11::drawLineLoop(const gl::State &glState,
intptr_t offset = reinterpret_cast<intptr_t>(indices); intptr_t offset = reinterpret_cast<intptr_t>(indices);
const uint8_t *bufferData = nullptr; const uint8_t *bufferData = nullptr;
ANGLE_TRY(storage->getData(&bufferData)); ANGLE_TRY(storage->getData(context, &bufferData));
indices = bufferData + offset; indices = bufferData + offset;
} }
...@@ -1867,13 +1869,14 @@ gl::Error Renderer11::drawLineLoop(const gl::State &glState, ...@@ -1867,13 +1869,14 @@ gl::Error Renderer11::drawLineLoop(const gl::State &glState,
return gl::NoError(); return gl::NoError();
} }
gl::Error Renderer11::drawTriangleFan(const gl::State &glState, gl::Error Renderer11::drawTriangleFan(const gl::Context *context,
GLsizei count, GLsizei count,
GLenum type, GLenum type,
const void *indices, const void *indices,
int baseVertex, int baseVertex,
int instances) int instances)
{ {
const gl::State &glState = context->getGLState();
gl::VertexArray *vao = glState.getVertexArray(); gl::VertexArray *vao = glState.getVertexArray();
gl::Buffer *elementArrayBuffer = vao->getElementArrayBuffer().get(); gl::Buffer *elementArrayBuffer = vao->getElementArrayBuffer().get();
...@@ -1886,7 +1889,7 @@ gl::Error Renderer11::drawTriangleFan(const gl::State &glState, ...@@ -1886,7 +1889,7 @@ gl::Error Renderer11::drawTriangleFan(const gl::State &glState,
intptr_t offset = reinterpret_cast<intptr_t>(indices); intptr_t offset = reinterpret_cast<intptr_t>(indices);
const uint8_t *bufferData = nullptr; const uint8_t *bufferData = nullptr;
ANGLE_TRY(storage->getData(&bufferData)); ANGLE_TRY(storage->getData(context, &bufferData));
indexPointer = bufferData + offset; indexPointer = bufferData + offset;
} }
...@@ -3839,7 +3842,7 @@ gl::Error Renderer11::genericDrawArrays(const gl::Context *context, ...@@ -3839,7 +3842,7 @@ gl::Error Renderer11::genericDrawArrays(const gl::Context *context,
if (glState.isTransformFeedbackActiveUnpaused()) if (glState.isTransformFeedbackActiveUnpaused())
{ {
ANGLE_TRY(markTransformFeedbackUsage(glState)); ANGLE_TRY(markTransformFeedbackUsage(context));
} }
} }
...@@ -4040,8 +4043,9 @@ bool Renderer11::canSelectViewInVertexShader() const ...@@ -4040,8 +4043,9 @@ bool Renderer11::canSelectViewInVertexShader() const
getRenderer11DeviceCaps().supportsVpRtIndexWriteFromVertexShader; getRenderer11DeviceCaps().supportsVpRtIndexWriteFromVertexShader;
} }
gl::Error Renderer11::markTransformFeedbackUsage(const gl::State &glState) gl::Error Renderer11::markTransformFeedbackUsage(const gl::Context *context)
{ {
const gl::State &glState = context->getGLState();
const gl::TransformFeedback *transformFeedback = glState.getCurrentTransformFeedback(); const gl::TransformFeedback *transformFeedback = glState.getCurrentTransformFeedback();
for (size_t i = 0; i < transformFeedback->getIndexedBufferCount(); i++) for (size_t i = 0; i < transformFeedback->getIndexedBufferCount(); i++)
{ {
...@@ -4050,7 +4054,7 @@ gl::Error Renderer11::markTransformFeedbackUsage(const gl::State &glState) ...@@ -4050,7 +4054,7 @@ gl::Error Renderer11::markTransformFeedbackUsage(const gl::State &glState)
if (binding.get() != nullptr) if (binding.get() != nullptr)
{ {
BufferD3D *bufferD3D = GetImplAs<BufferD3D>(binding.get()); BufferD3D *bufferD3D = GetImplAs<BufferD3D>(binding.get());
ANGLE_TRY(bufferD3D->markTransformFeedbackUsage()); ANGLE_TRY(bufferD3D->markTransformFeedbackUsage(context));
} }
} }
......
...@@ -484,13 +484,13 @@ class Renderer11 : public RendererD3D ...@@ -484,13 +484,13 @@ class Renderer11 : public RendererD3D
angle::WorkaroundsD3D generateWorkarounds() const override; angle::WorkaroundsD3D generateWorkarounds() const override;
gl::Error drawLineLoop(const gl::State &glState, gl::Error drawLineLoop(const gl::Context *context,
GLsizei count, GLsizei count,
GLenum type, GLenum type,
const void *indices, const void *indices,
int baseVertex, int baseVertex,
int instances); int instances);
gl::Error drawTriangleFan(const gl::State &glState, gl::Error drawTriangleFan(const gl::Context *context,
GLsizei count, GLsizei count,
GLenum type, GLenum type,
const void *indices, const void *indices,
...@@ -524,7 +524,7 @@ class Renderer11 : public RendererD3D ...@@ -524,7 +524,7 @@ class Renderer11 : public RendererD3D
d3d11::ANGLED3D11DeviceType getDeviceType() const; d3d11::ANGLED3D11DeviceType getDeviceType() const;
gl::Error markTransformFeedbackUsage(const gl::State &glState); gl::Error markTransformFeedbackUsage(const gl::Context *context);
HMODULE mD3d11Module; HMODULE mD3d11Module;
HMODULE mDxgiModule; HMODULE mDxgiModule;
......
...@@ -2486,8 +2486,8 @@ gl::Error StateManager11::applyVertexBuffer(const gl::Context *context, ...@@ -2486,8 +2486,8 @@ gl::Error StateManager11::applyVertexBuffer(const gl::Context *context,
sortedSemanticIndices, numIndicesPerInstance)); sortedSemanticIndices, numIndicesPerInstance));
// Update the applied vertex buffers. // Update the applied vertex buffers.
ANGLE_TRY(mInputLayoutCache.applyVertexBuffers(mRenderer, state, mCurrentAttributes, mode, ANGLE_TRY(
first, indexInfo)); mInputLayoutCache.applyVertexBuffers(context, mCurrentAttributes, mode, first, indexInfo));
// InputLayoutCache::applyVertexBuffers calls through to the Bufer11 to get the native vertex // InputLayoutCache::applyVertexBuffers calls through to the Bufer11 to get the native vertex
// buffer (ID3D11Buffer *). Because we allocate these buffers lazily, this will trigger // buffer (ID3D11Buffer *). Because we allocate these buffers lazily, this will trigger
...@@ -2496,7 +2496,7 @@ gl::Error StateManager11::applyVertexBuffer(const gl::Context *context, ...@@ -2496,7 +2496,7 @@ gl::Error StateManager11::applyVertexBuffer(const gl::Context *context,
// update on the second draw call. // update on the second draw call.
// Hence we clear the flags here, after we've applied vertex data, since we know everything // Hence we clear the flags here, after we've applied vertex data, since we know everything
// is clean. This is a bit of a hack. // is clean. This is a bit of a hack.
vertexArray11->clearDirtyAndPromoteDynamicAttribs(state, count); vertexArray11->clearDirtyAndPromoteDynamicAttribs(context, count);
mInputLayoutIsDirty = false; mInputLayoutIsDirty = false;
return gl::NoError(); return gl::NoError();
...@@ -2511,7 +2511,7 @@ gl::Error StateManager11::applyIndexBuffer(const gl::Context *context, ...@@ -2511,7 +2511,7 @@ gl::Error StateManager11::applyIndexBuffer(const gl::Context *context,
const auto &glState = context->getGLState(); const auto &glState = context->getGLState();
gl::VertexArray *vao = glState.getVertexArray(); gl::VertexArray *vao = glState.getVertexArray();
gl::Buffer *elementArrayBuffer = vao->getElementArrayBuffer().get(); gl::Buffer *elementArrayBuffer = vao->getElementArrayBuffer().get();
ANGLE_TRY(mIndexDataManager.prepareIndexData(type, count, elementArrayBuffer, indices, ANGLE_TRY(mIndexDataManager.prepareIndexData(context, type, count, elementArrayBuffer, indices,
indexInfo, glState.isPrimitiveRestartEnabled())); indexInfo, glState.isPrimitiveRestartEnabled()));
ID3D11Buffer *buffer = nullptr; ID3D11Buffer *buffer = nullptr;
...@@ -2521,7 +2521,7 @@ gl::Error StateManager11::applyIndexBuffer(const gl::Context *context, ...@@ -2521,7 +2521,7 @@ gl::Error StateManager11::applyIndexBuffer(const gl::Context *context,
if (indexInfo->storage) if (indexInfo->storage)
{ {
Buffer11 *storage = GetAs<Buffer11>(indexInfo->storage); Buffer11 *storage = GetAs<Buffer11>(indexInfo->storage);
ANGLE_TRY_RESULT(storage->getBuffer(BUFFER_USAGE_INDEX), buffer); ANGLE_TRY_RESULT(storage->getBuffer(context, BUFFER_USAGE_INDEX), buffer);
} }
else else
{ {
...@@ -2799,9 +2799,9 @@ gl::Error StateManager11::syncUniformBuffers(const gl::Context *context, Program ...@@ -2799,9 +2799,9 @@ gl::Error StateManager11::syncUniformBuffers(const gl::Context *context, Program
UINT firstConstant = 0; UINT firstConstant = 0;
UINT numConstants = 0; UINT numConstants = 0;
ANGLE_TRY(bufferStorage->getConstantBufferRange(uniformBufferOffset, uniformBufferSize, ANGLE_TRY(bufferStorage->getConstantBufferRange(context, uniformBufferOffset,
&constantBuffer, &firstConstant, uniformBufferSize, &constantBuffer,
&numConstants)); &firstConstant, &numConstants));
ASSERT(constantBuffer); ASSERT(constantBuffer);
...@@ -2853,9 +2853,9 @@ gl::Error StateManager11::syncUniformBuffers(const gl::Context *context, Program ...@@ -2853,9 +2853,9 @@ gl::Error StateManager11::syncUniformBuffers(const gl::Context *context, Program
UINT firstConstant = 0; UINT firstConstant = 0;
UINT numConstants = 0; UINT numConstants = 0;
ANGLE_TRY(bufferStorage->getConstantBufferRange(uniformBufferOffset, uniformBufferSize, ANGLE_TRY(bufferStorage->getConstantBufferRange(context, uniformBufferOffset,
&constantBuffer, &firstConstant, uniformBufferSize, &constantBuffer,
&numConstants)); &firstConstant, &numConstants));
ASSERT(constantBuffer); ASSERT(constantBuffer);
...@@ -2911,7 +2911,7 @@ gl::Error StateManager11::syncTransformFeedbackBuffers(const gl::Context *contex ...@@ -2911,7 +2911,7 @@ gl::Error StateManager11::syncTransformFeedbackBuffers(const gl::Context *contex
} }
const std::vector<ID3D11Buffer *> *soBuffers = nullptr; const std::vector<ID3D11Buffer *> *soBuffers = nullptr;
ANGLE_TRY_RESULT(tf11->getSOBuffers(), soBuffers); ANGLE_TRY_RESULT(tf11->getSOBuffers(context), soBuffers);
const std::vector<UINT> &soOffsets = tf11->getSOBufferOffsets(); const std::vector<UINT> &soOffsets = tf11->getSOBufferOffsets();
deviceContext->SOSetTargets(tf11->getNumSOBuffers(), soBuffers->data(), soOffsets.data()); deviceContext->SOSetTargets(tf11->getNumSOBuffers(), soBuffers->data(), soOffsets.data());
......
...@@ -94,7 +94,8 @@ UINT TransformFeedback11::getNumSOBuffers() const ...@@ -94,7 +94,8 @@ UINT TransformFeedback11::getNumSOBuffers() const
return static_cast<UINT>(mBuffers.size()); return static_cast<UINT>(mBuffers.size());
} }
gl::ErrorOrResult<const std::vector<ID3D11Buffer *> *> TransformFeedback11::getSOBuffers() gl::ErrorOrResult<const std::vector<ID3D11Buffer *> *> TransformFeedback11::getSOBuffers(
const gl::Context *context)
{ {
for (size_t bindingIdx = 0; bindingIdx < mBuffers.size(); bindingIdx++) for (size_t bindingIdx = 0; bindingIdx < mBuffers.size(); bindingIdx++)
{ {
...@@ -102,7 +103,7 @@ gl::ErrorOrResult<const std::vector<ID3D11Buffer *> *> TransformFeedback11::getS ...@@ -102,7 +103,7 @@ gl::ErrorOrResult<const std::vector<ID3D11Buffer *> *> TransformFeedback11::getS
if (binding.get() != nullptr) if (binding.get() != nullptr)
{ {
Buffer11 *storage = GetImplAs<Buffer11>(binding.get()); Buffer11 *storage = GetImplAs<Buffer11>(binding.get());
ANGLE_TRY_RESULT(storage->getBuffer(BUFFER_USAGE_VERTEX_OR_TRANSFORM_FEEDBACK), ANGLE_TRY_RESULT(storage->getBuffer(context, BUFFER_USAGE_VERTEX_OR_TRANSFORM_FEEDBACK),
mBuffers[bindingIdx]); mBuffers[bindingIdx]);
} }
} }
......
...@@ -41,7 +41,7 @@ class TransformFeedback11 : public TransformFeedbackImpl ...@@ -41,7 +41,7 @@ class TransformFeedback11 : public TransformFeedbackImpl
bool isDirty() const; bool isDirty() const;
UINT getNumSOBuffers() const; UINT getNumSOBuffers() const;
gl::ErrorOrResult<const std::vector<ID3D11Buffer *> *> getSOBuffers(); gl::ErrorOrResult<const std::vector<ID3D11Buffer *> *> getSOBuffers(const gl::Context *context);
const std::vector<UINT> &getSOBufferOffsets() const; const std::vector<UINT> &getSOBufferOffsets() const;
Serial getSerial() const; Serial getSerial() const;
......
...@@ -210,7 +210,7 @@ gl::Error VertexArray11::updateDirtyAndDynamicAttribs(const gl::Context *context ...@@ -210,7 +210,7 @@ gl::Error VertexArray11::updateDirtyAndDynamicAttribs(const gl::Context *context
break; break;
case VertexStorageType::STATIC: case VertexStorageType::STATIC:
{ {
ANGLE_TRY(VertexDataManager::StoreStaticAttrib(translatedAttrib)); ANGLE_TRY(VertexDataManager::StoreStaticAttrib(context, translatedAttrib));
break; break;
} }
case VertexStorageType::CURRENT_VALUE: case VertexStorageType::CURRENT_VALUE:
...@@ -240,8 +240,8 @@ gl::Error VertexArray11::updateDirtyAndDynamicAttribs(const gl::Context *context ...@@ -240,8 +240,8 @@ gl::Error VertexArray11::updateDirtyAndDynamicAttribs(const gl::Context *context
dynamicAttrib->binding->getDivisor() * mAppliedNumViewsToDivisor; dynamicAttrib->binding->getDivisor() * mAppliedNumViewsToDivisor;
} }
ANGLE_TRY(vertexDataManager->storeDynamicAttribs(&mTranslatedAttribs, activeDynamicAttribs, ANGLE_TRY(vertexDataManager->storeDynamicAttribs(
start, count, instances)); context, &mTranslatedAttribs, activeDynamicAttribs, start, count, instances));
} }
return gl::NoError(); return gl::NoError();
...@@ -252,7 +252,7 @@ const std::vector<TranslatedAttribute> &VertexArray11::getTranslatedAttribs() co ...@@ -252,7 +252,7 @@ const std::vector<TranslatedAttribute> &VertexArray11::getTranslatedAttribs() co
return mTranslatedAttribs; return mTranslatedAttribs;
} }
void VertexArray11::signal(size_t channelID) void VertexArray11::signal(size_t channelID, const gl::Context *context)
{ {
ASSERT(mAttributeStorageTypes[channelID] != VertexStorageType::CURRENT_VALUE); ASSERT(mAttributeStorageTypes[channelID] != VertexStorageType::CURRENT_VALUE);
...@@ -260,15 +260,17 @@ void VertexArray11::signal(size_t channelID) ...@@ -260,15 +260,17 @@ void VertexArray11::signal(size_t channelID)
mAttribsToUpdate.set(channelID); mAttribsToUpdate.set(channelID);
} }
void VertexArray11::clearDirtyAndPromoteDynamicAttribs(const gl::State &state, GLsizei count) void VertexArray11::clearDirtyAndPromoteDynamicAttribs(const gl::Context *context, GLsizei count)
{ {
const gl::State &state = context->getGLState();
const gl::Program *program = state.getProgram(); const gl::Program *program = state.getProgram();
const auto &activeLocations = program->getActiveAttribLocationsMask(); const auto &activeLocations = program->getActiveAttribLocationsMask();
mAttribsToUpdate &= ~activeLocations; mAttribsToUpdate &= ~activeLocations;
// Promote to static after we clear the dirty attributes, otherwise we can lose dirtyness. // Promote to static after we clear the dirty attributes, otherwise we can lose dirtyness.
auto activeDynamicAttribs = (mDynamicAttribsMask & activeLocations); auto activeDynamicAttribs = (mDynamicAttribsMask & activeLocations);
VertexDataManager::PromoteDynamicAttribs(mTranslatedAttribs, activeDynamicAttribs, count); VertexDataManager::PromoteDynamicAttribs(context, mTranslatedAttribs, activeDynamicAttribs,
count);
} }
void VertexArray11::markAllAttributeDivisorsForAdjustment(int numViews) void VertexArray11::markAllAttributeDivisorsForAdjustment(int numViews)
......
...@@ -34,12 +34,12 @@ class VertexArray11 : public VertexArrayImpl, public OnBufferDataDirtyReceiver ...@@ -34,12 +34,12 @@ class VertexArray11 : public VertexArrayImpl, public OnBufferDataDirtyReceiver
GLint start, GLint start,
GLsizei count, GLsizei count,
GLsizei instances); GLsizei instances);
void clearDirtyAndPromoteDynamicAttribs(const gl::State &state, GLsizei count); void clearDirtyAndPromoteDynamicAttribs(const gl::Context *context, GLsizei count);
const std::vector<TranslatedAttribute> &getTranslatedAttribs() const; const std::vector<TranslatedAttribute> &getTranslatedAttribs() const;
// SignalReceiver implementation // SignalReceiver implementation
void signal(size_t channelID) override; void signal(size_t channelID, const gl::Context *context) override;
Serial getCurrentStateSerial() const { return mCurrentStateSerial; } Serial getCurrentStateSerial() const { return mCurrentStateSerial; }
......
...@@ -396,9 +396,9 @@ enum class StagingAccess ...@@ -396,9 +396,9 @@ enum class StagingAccess
bool UsePresentPathFast(const Renderer11 *renderer, const gl::FramebufferAttachment *colorbuffer); bool UsePresentPathFast(const Renderer11 *renderer, const gl::FramebufferAttachment *colorbuffer);
// Used for state change notifications between buffers and vertex arrays. // Used for state change notifications between buffers and vertex arrays.
using OnBufferDataDirtyBinding = angle::ChannelBinding<size_t>; using OnBufferDataDirtyBinding = angle::ChannelBinding<size_t, const gl::Context *>;
using OnBufferDataDirtyChannel = angle::BroadcastChannel<size_t>; using OnBufferDataDirtyChannel = angle::BroadcastChannel<size_t, const gl::Context *>;
using OnBufferDataDirtyReceiver = angle::SignalReceiver<size_t>; using OnBufferDataDirtyReceiver = angle::SignalReceiver<size_t, const gl::Context *>;
// Used for state change notifications between RenderTarget11 and Framebuffer11. // Used for state change notifications between RenderTarget11 and Framebuffer11.
using OnRenderTargetDirtyBinding = angle::ChannelBinding<size_t>; using OnRenderTargetDirtyBinding = angle::ChannelBinding<size_t>;
......
...@@ -22,7 +22,7 @@ Buffer9::~Buffer9() ...@@ -22,7 +22,7 @@ Buffer9::~Buffer9()
mSize = 0; mSize = 0;
} }
gl::Error Buffer9::setData(const gl::Context * /*context*/, gl::Error Buffer9::setData(const gl::Context *context,
GLenum /*target*/, GLenum /*target*/,
const void *data, const void *data,
size_t size, size_t size,
...@@ -42,20 +42,20 @@ gl::Error Buffer9::setData(const gl::Context * /*context*/, ...@@ -42,20 +42,20 @@ gl::Error Buffer9::setData(const gl::Context * /*context*/,
memcpy(mMemory.data(), data, size); memcpy(mMemory.data(), data, size);
} }
updateD3DBufferUsage(usage); updateD3DBufferUsage(context, usage);
invalidateStaticData(); invalidateStaticData(context);
return gl::NoError(); return gl::NoError();
} }
gl::Error Buffer9::getData(const uint8_t **outData) gl::Error Buffer9::getData(const gl::Context *context, const uint8_t **outData)
{ {
*outData = mMemory.data(); *outData = mMemory.data();
return gl::NoError(); return gl::NoError();
} }
gl::Error Buffer9::setSubData(const gl::Context * /*context*/, gl::Error Buffer9::setSubData(const gl::Context *context,
GLenum /*target*/, GLenum /*target*/,
const void *data, const void *data,
size_t size, size_t size,
...@@ -75,7 +75,7 @@ gl::Error Buffer9::setSubData(const gl::Context * /*context*/, ...@@ -75,7 +75,7 @@ gl::Error Buffer9::setSubData(const gl::Context * /*context*/,
memcpy(mMemory.data() + offset, data, size); memcpy(mMemory.data() + offset, data, size);
} }
invalidateStaticData(); invalidateStaticData(context);
return gl::NoError(); return gl::NoError();
} }
...@@ -92,7 +92,7 @@ gl::Error Buffer9::copySubData(const gl::Context *context, ...@@ -92,7 +92,7 @@ gl::Error Buffer9::copySubData(const gl::Context *context,
memcpy(mMemory.data() + destOffset, sourceBuffer->mMemory.data() + sourceOffset, size); memcpy(mMemory.data() + destOffset, sourceBuffer->mMemory.data() + sourceOffset, size);
invalidateStaticData(); invalidateStaticData(context);
return gl::NoError(); return gl::NoError();
} }
...@@ -120,7 +120,7 @@ gl::Error Buffer9::unmap(const gl::Context *context, GLboolean *result) ...@@ -120,7 +120,7 @@ gl::Error Buffer9::unmap(const gl::Context *context, GLboolean *result)
return gl::InternalError(); return gl::InternalError();
} }
gl::Error Buffer9::markTransformFeedbackUsage() gl::Error Buffer9::markTransformFeedbackUsage(const gl::Context *context)
{ {
UNREACHABLE(); UNREACHABLE();
return gl::InternalError(); return gl::InternalError();
......
...@@ -26,7 +26,7 @@ class Buffer9 : public BufferD3D ...@@ -26,7 +26,7 @@ class Buffer9 : public BufferD3D
// BufferD3D implementation // BufferD3D implementation
virtual size_t getSize() const { return mSize; } virtual size_t getSize() const { return mSize; }
virtual bool supportsDirectBinding() const { return false; } virtual bool supportsDirectBinding() const { return false; }
gl::Error getData(const uint8_t **outData) override; gl::Error getData(const gl::Context *context, const uint8_t **outData) override;
// BufferImpl implementation // BufferImpl implementation
gl::Error setData(const gl::Context *context, gl::Error setData(const gl::Context *context,
...@@ -51,7 +51,7 @@ class Buffer9 : public BufferD3D ...@@ -51,7 +51,7 @@ class Buffer9 : public BufferD3D
GLbitfield access, GLbitfield access,
void **mapPtr) override; void **mapPtr) override;
gl::Error unmap(const gl::Context *context, GLboolean *result) override; gl::Error unmap(const gl::Context *context, GLboolean *result) override;
gl::Error markTransformFeedbackUsage() override; gl::Error markTransformFeedbackUsage(const gl::Context *context) override;
private: private:
angle::MemoryBuffer mMemory; angle::MemoryBuffer mMemory;
......
...@@ -1311,14 +1311,15 @@ gl::Error Renderer9::applyRenderTarget(const gl::Context *context, ...@@ -1311,14 +1311,15 @@ gl::Error Renderer9::applyRenderTarget(const gl::Context *context,
framebuffer->getDepthOrStencilbuffer()); framebuffer->getDepthOrStencilbuffer());
} }
gl::Error Renderer9::applyVertexBuffer(const gl::State &state, gl::Error Renderer9::applyVertexBuffer(const gl::Context *context,
GLenum mode, GLenum mode,
GLint first, GLint first,
GLsizei count, GLsizei count,
GLsizei instances, GLsizei instances,
TranslatedIndexData * /*indexInfo*/) TranslatedIndexData * /*indexInfo*/)
{ {
gl::Error error = mVertexDataManager->prepareVertexData(state, first, count, const gl::State &state = context->getGLState();
gl::Error error = mVertexDataManager->prepareVertexData(context, first, count,
&mTranslatedAttribCache, instances); &mTranslatedAttribCache, instances);
if (error.isError()) if (error.isError())
{ {
...@@ -1330,17 +1331,17 @@ gl::Error Renderer9::applyVertexBuffer(const gl::State &state, ...@@ -1330,17 +1331,17 @@ gl::Error Renderer9::applyVertexBuffer(const gl::State &state,
} }
// Applies the indices and element array bindings to the Direct3D 9 device // Applies the indices and element array bindings to the Direct3D 9 device
gl::Error Renderer9::applyIndexBuffer(const gl::ContextState &data, gl::Error Renderer9::applyIndexBuffer(const gl::Context *context,
const void *indices, const void *indices,
GLsizei count, GLsizei count,
GLenum mode, GLenum mode,
GLenum type, GLenum type,
TranslatedIndexData *indexInfo) TranslatedIndexData *indexInfo)
{ {
gl::VertexArray *vao = data.getState().getVertexArray(); gl::VertexArray *vao = context->getGLState().getVertexArray();
gl::Buffer *elementArrayBuffer = vao->getElementArrayBuffer().get(); gl::Buffer *elementArrayBuffer = vao->getElementArrayBuffer().get();
gl::Error error = mIndexDataManager->prepareIndexData(type, count, elementArrayBuffer, indices, gl::Error error = mIndexDataManager->prepareIndexData(context, type, count, elementArrayBuffer,
indexInfo, false); indices, indexInfo, false);
if (error.isError()) if (error.isError())
{ {
return error; return error;
...@@ -1360,19 +1361,19 @@ gl::Error Renderer9::applyIndexBuffer(const gl::ContextState &data, ...@@ -1360,19 +1361,19 @@ gl::Error Renderer9::applyIndexBuffer(const gl::ContextState &data,
return gl::NoError(); return gl::NoError();
} }
gl::Error Renderer9::drawArraysImpl(const gl::ContextState &data, gl::Error Renderer9::drawArraysImpl(const gl::Context *context,
GLenum mode, GLenum mode,
GLint startVertex, GLint startVertex,
GLsizei count, GLsizei count,
GLsizei instances) GLsizei instances)
{ {
ASSERT(!data.getState().isTransformFeedbackActiveUnpaused()); ASSERT(!context->getGLState().isTransformFeedbackActiveUnpaused());
startScene(); startScene();
if (mode == GL_LINE_LOOP) if (mode == GL_LINE_LOOP)
{ {
return drawLineLoop(count, GL_NONE, nullptr, 0, nullptr); return drawLineLoop(context, count, GL_NONE, nullptr, 0, nullptr);
} }
else if (instances > 0) else if (instances > 0)
{ {
...@@ -1412,31 +1413,29 @@ gl::Error Renderer9::drawElementsImpl(const gl::Context *context, ...@@ -1412,31 +1413,29 @@ gl::Error Renderer9::drawElementsImpl(const gl::Context *context,
const void *indices, const void *indices,
GLsizei instances) GLsizei instances)
{ {
const auto &data = context->getContextState();
TranslatedIndexData indexInfo; TranslatedIndexData indexInfo;
const gl::IndexRange &indexRange = const gl::IndexRange &indexRange =
context->getParams<gl::HasIndexRange>().getIndexRange().value(); context->getParams<gl::HasIndexRange>().getIndexRange().value();
indexInfo.indexRange = indexRange; indexInfo.indexRange = indexRange;
ANGLE_TRY(applyIndexBuffer(data, indices, count, mode, type, &indexInfo)); ANGLE_TRY(applyIndexBuffer(context, indices, count, mode, type, &indexInfo));
size_t vertexCount = indexInfo.indexRange.vertexCount(); size_t vertexCount = indexInfo.indexRange.vertexCount();
ANGLE_TRY(applyVertexBuffer(data.getState(), mode, ANGLE_TRY(applyVertexBuffer(context, mode, static_cast<GLsizei>(indexInfo.indexRange.start),
static_cast<GLsizei>(indexInfo.indexRange.start),
static_cast<GLsizei>(vertexCount), instances, &indexInfo)); static_cast<GLsizei>(vertexCount), instances, &indexInfo));
startScene(); startScene();
int minIndex = static_cast<int>(indexInfo.indexRange.start); int minIndex = static_cast<int>(indexInfo.indexRange.start);
gl::VertexArray *vao = data.getState().getVertexArray(); gl::VertexArray *vao = context->getGLState().getVertexArray();
gl::Buffer *elementArrayBuffer = vao->getElementArrayBuffer().get(); gl::Buffer *elementArrayBuffer = vao->getElementArrayBuffer().get();
if (mode == GL_POINTS) if (mode == GL_POINTS)
{ {
return drawIndexedPoints(count, type, indices, minIndex, elementArrayBuffer); return drawIndexedPoints(context, count, type, indices, minIndex, elementArrayBuffer);
} }
else if (mode == GL_LINE_LOOP) else if (mode == GL_LINE_LOOP)
{ {
return drawLineLoop(count, type, indices, minIndex, elementArrayBuffer); return drawLineLoop(context, count, type, indices, minIndex, elementArrayBuffer);
} }
else else
{ {
...@@ -1450,7 +1449,8 @@ gl::Error Renderer9::drawElementsImpl(const gl::Context *context, ...@@ -1450,7 +1449,8 @@ gl::Error Renderer9::drawElementsImpl(const gl::Context *context,
} }
} }
gl::Error Renderer9::drawLineLoop(GLsizei count, gl::Error Renderer9::drawLineLoop(const gl::Context *context,
GLsizei count,
GLenum type, GLenum type,
const void *indices, const void *indices,
int minIndex, int minIndex,
...@@ -1462,7 +1462,7 @@ gl::Error Renderer9::drawLineLoop(GLsizei count, ...@@ -1462,7 +1462,7 @@ gl::Error Renderer9::drawLineLoop(GLsizei count,
BufferD3D *storage = GetImplAs<BufferD3D>(elementArrayBuffer); BufferD3D *storage = GetImplAs<BufferD3D>(elementArrayBuffer);
intptr_t offset = reinterpret_cast<intptr_t>(indices); intptr_t offset = reinterpret_cast<intptr_t>(indices);
const uint8_t *bufferData = nullptr; const uint8_t *bufferData = nullptr;
gl::Error error = storage->getData(&bufferData); gl::Error error = storage->getData(context, &bufferData);
if (error.isError()) if (error.isError())
{ {
return error; return error;
...@@ -1668,7 +1668,8 @@ static gl::Error drawPoints(IDirect3DDevice9 *device, ...@@ -1668,7 +1668,8 @@ static gl::Error drawPoints(IDirect3DDevice9 *device,
return gl::NoError(); return gl::NoError();
} }
gl::Error Renderer9::drawIndexedPoints(GLsizei count, gl::Error Renderer9::drawIndexedPoints(const gl::Context *context,
GLsizei count,
GLenum type, GLenum type,
const void *indices, const void *indices,
int minIndex, int minIndex,
...@@ -1683,7 +1684,7 @@ gl::Error Renderer9::drawIndexedPoints(GLsizei count, ...@@ -1683,7 +1684,7 @@ gl::Error Renderer9::drawIndexedPoints(GLsizei count,
intptr_t offset = reinterpret_cast<intptr_t>(indices); intptr_t offset = reinterpret_cast<intptr_t>(indices);
const uint8_t *bufferData = nullptr; const uint8_t *bufferData = nullptr;
gl::Error error = storage->getData(&bufferData); gl::Error error = storage->getData(context, &bufferData);
if (error.isError()) if (error.isError())
{ {
return error; return error;
...@@ -3135,7 +3136,6 @@ gl::Error Renderer9::genericDrawArrays(const gl::Context *context, ...@@ -3135,7 +3136,6 @@ gl::Error Renderer9::genericDrawArrays(const gl::Context *context,
GLsizei count, GLsizei count,
GLsizei instances) GLsizei instances)
{ {
const auto &data = context->getContextState();
gl::Program *program = context->getGLState().getProgram(); gl::Program *program = context->getGLState().getProgram();
ASSERT(program != nullptr); ASSERT(program != nullptr);
ProgramD3D *programD3D = GetImplAs<ProgramD3D>(program); ProgramD3D *programD3D = GetImplAs<ProgramD3D>(program);
...@@ -3149,13 +3149,13 @@ gl::Error Renderer9::genericDrawArrays(const gl::Context *context, ...@@ -3149,13 +3149,13 @@ gl::Error Renderer9::genericDrawArrays(const gl::Context *context,
} }
ANGLE_TRY(updateState(context, mode)); ANGLE_TRY(updateState(context, mode));
ANGLE_TRY(applyVertexBuffer(data.getState(), mode, first, count, instances, nullptr)); ANGLE_TRY(applyVertexBuffer(context, mode, first, count, instances, nullptr));
ANGLE_TRY(applyTextures(context)); ANGLE_TRY(applyTextures(context));
ANGLE_TRY(applyShaders(context, mode)); ANGLE_TRY(applyShaders(context, mode));
if (!skipDraw(data.getState(), mode)) if (!skipDraw(context->getGLState(), mode))
{ {
ANGLE_TRY(drawArraysImpl(data, mode, first, count, instances)); ANGLE_TRY(drawArraysImpl(context, mode, first, count, instances));
} }
return gl::NoError(); return gl::NoError();
......
...@@ -145,13 +145,13 @@ class Renderer9 : public RendererD3D ...@@ -145,13 +145,13 @@ class Renderer9 : public RendererD3D
const gl::FramebufferAttachment *depthStencilAttachment); const gl::FramebufferAttachment *depthStencilAttachment);
gl::Error applyUniforms(ProgramD3D *programD3D); gl::Error applyUniforms(ProgramD3D *programD3D);
bool applyPrimitiveType(GLenum primitiveType, GLsizei elementCount, bool usesPointSize); bool applyPrimitiveType(GLenum primitiveType, GLsizei elementCount, bool usesPointSize);
gl::Error applyVertexBuffer(const gl::State &state, gl::Error applyVertexBuffer(const gl::Context *context,
GLenum mode, GLenum mode,
GLint first, GLint first,
GLsizei count, GLsizei count,
GLsizei instances, GLsizei instances,
TranslatedIndexData *indexInfo); TranslatedIndexData *indexInfo);
gl::Error applyIndexBuffer(const gl::ContextState &data, gl::Error applyIndexBuffer(const gl::Context *context,
const void *indices, const void *indices,
GLsizei count, GLsizei count,
GLenum mode, GLenum mode,
...@@ -389,7 +389,7 @@ class Renderer9 : public RendererD3D ...@@ -389,7 +389,7 @@ class Renderer9 : public RendererD3D
bool canSelectViewInVertexShader() const override { return false; } bool canSelectViewInVertexShader() const override { return false; }
private: private:
gl::Error drawArraysImpl(const gl::ContextState &data, gl::Error drawArraysImpl(const gl::Context *context,
GLenum mode, GLenum mode,
GLint startVertex, GLint startVertex,
GLsizei count, GLsizei count,
...@@ -424,12 +424,14 @@ class Renderer9 : public RendererD3D ...@@ -424,12 +424,14 @@ class Renderer9 : public RendererD3D
void applyUniformniv(const D3DUniform *targetUniform, const GLint *v); void applyUniformniv(const D3DUniform *targetUniform, const GLint *v);
void applyUniformnbv(const D3DUniform *targetUniform, const GLint *v); void applyUniformnbv(const D3DUniform *targetUniform, const GLint *v);
gl::Error drawLineLoop(GLsizei count, gl::Error drawLineLoop(const gl::Context *context,
GLsizei count,
GLenum type, GLenum type,
const void *indices, const void *indices,
int minIndex, int minIndex,
gl::Buffer *elementArrayBuffer); gl::Buffer *elementArrayBuffer);
gl::Error drawIndexedPoints(GLsizei count, gl::Error drawIndexedPoints(const gl::Context *context,
GLsizei count,
GLenum type, GLenum type,
const void *indices, const void *indices,
int minIndex, int minIndex,
......
...@@ -193,7 +193,8 @@ gl::Error BufferGL::unmap(const gl::Context *context, GLboolean *result) ...@@ -193,7 +193,8 @@ gl::Error BufferGL::unmap(const gl::Context *context, GLboolean *result)
return gl::NoError(); return gl::NoError();
} }
gl::Error BufferGL::getIndexRange(GLenum type, gl::Error BufferGL::getIndexRange(const gl::Context *context,
GLenum type,
size_t offset, size_t offset,
size_t count, size_t count,
bool primitiveRestartEnabled, bool primitiveRestartEnabled,
......
...@@ -49,7 +49,8 @@ class BufferGL : public BufferImpl ...@@ -49,7 +49,8 @@ class BufferGL : public BufferImpl
void **mapPtr) override; void **mapPtr) override;
gl::Error unmap(const gl::Context *context, GLboolean *result) override; gl::Error unmap(const gl::Context *context, GLboolean *result) override;
gl::Error getIndexRange(GLenum type, gl::Error getIndexRange(const gl::Context *context,
GLenum type,
size_t offset, size_t offset,
size_t count, size_t count,
bool primitiveRestartEnabled, bool primitiveRestartEnabled,
......
...@@ -208,7 +208,8 @@ gl::Error VertexArrayGL::syncIndexData(const gl::Context *context, ...@@ -208,7 +208,8 @@ gl::Error VertexArrayGL::syncIndexData(const gl::Context *context,
{ {
ptrdiff_t elementArrayBufferOffset = reinterpret_cast<ptrdiff_t>(indices); ptrdiff_t elementArrayBufferOffset = reinterpret_cast<ptrdiff_t>(indices);
Error error = mData.getElementArrayBuffer()->getIndexRange( Error error = mData.getElementArrayBuffer()->getIndexRange(
type, elementArrayBufferOffset, count, primitiveRestartEnabled, outIndexRange); context, type, elementArrayBufferOffset, count, primitiveRestartEnabled,
outIndexRange);
if (error.isError()) if (error.isError())
{ {
return error; return error;
......
...@@ -97,7 +97,8 @@ gl::Error BufferNULL::unmap(const gl::Context *context, GLboolean *result) ...@@ -97,7 +97,8 @@ gl::Error BufferNULL::unmap(const gl::Context *context, GLboolean *result)
return gl::NoError(); return gl::NoError();
} }
gl::Error BufferNULL::getIndexRange(GLenum type, gl::Error BufferNULL::getIndexRange(const gl::Context *context,
GLenum type,
size_t offset, size_t offset,
size_t count, size_t count,
bool primitiveRestartEnabled, bool primitiveRestartEnabled,
......
...@@ -46,7 +46,8 @@ class BufferNULL : public BufferImpl ...@@ -46,7 +46,8 @@ class BufferNULL : public BufferImpl
void **mapPtr) override; void **mapPtr) override;
gl::Error unmap(const gl::Context *context, GLboolean *result) override; gl::Error unmap(const gl::Context *context, GLboolean *result) override;
gl::Error getIndexRange(GLenum type, gl::Error getIndexRange(const gl::Context *context,
GLenum type,
size_t offset, size_t offset,
size_t count, size_t count,
bool primitiveRestartEnabled, bool primitiveRestartEnabled,
......
...@@ -162,7 +162,8 @@ gl::Error BufferVk::unmap(const gl::Context *context, GLboolean *result) ...@@ -162,7 +162,8 @@ gl::Error BufferVk::unmap(const gl::Context *context, GLboolean *result)
return gl::NoError(); return gl::NoError();
} }
gl::Error BufferVk::getIndexRange(GLenum type, gl::Error BufferVk::getIndexRange(const gl::Context *context,
GLenum type,
size_t offset, size_t offset,
size_t count, size_t count,
bool primitiveRestartEnabled, bool primitiveRestartEnabled,
......
...@@ -46,7 +46,8 @@ class BufferVk : public BufferImpl, public ResourceVk ...@@ -46,7 +46,8 @@ class BufferVk : public BufferImpl, public ResourceVk
void **mapPtr) override; void **mapPtr) override;
gl::Error unmap(const gl::Context *context, GLboolean *result) override; gl::Error unmap(const gl::Context *context, GLboolean *result) override;
gl::Error getIndexRange(GLenum type, gl::Error getIndexRange(const gl::Context *context,
GLenum type,
size_t offset, size_t offset,
size_t count, size_t count,
bool primitiveRestartEnabled, bool primitiveRestartEnabled,
......
...@@ -31,8 +31,8 @@ class D3D11EmulatedIndexedBufferTest : public ANGLETest ...@@ -31,8 +31,8 @@ class D3D11EmulatedIndexedBufferTest : public ANGLETest
ANGLETest::SetUp(); ANGLETest::SetUp();
ASSERT_EQ(EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, GetParam().getRenderer()); ASSERT_EQ(EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, GetParam().getRenderer());
gl::Context *context = reinterpret_cast<gl::Context *>(getEGLWindow()->getContext()); mContext = reinterpret_cast<gl::Context *>(getEGLWindow()->getContext());
rx::Context11 *context11 = rx::GetImplAs<rx::Context11>(context); rx::Context11 *context11 = rx::GetImplAs<rx::Context11>(mContext);
mRenderer = context11->getRenderer(); mRenderer = context11->getRenderer();
mSourceBuffer = new rx::Buffer11(mBufferState, mRenderer); mSourceBuffer = new rx::Buffer11(mBufferState, mRenderer);
...@@ -112,7 +112,7 @@ class D3D11EmulatedIndexedBufferTest : public ANGLETest ...@@ -112,7 +112,7 @@ class D3D11EmulatedIndexedBufferTest : public ANGLETest
void emulateAndCompare(rx::SourceIndexData *srcData) void emulateAndCompare(rx::SourceIndexData *srcData)
{ {
auto bufferOrError = auto bufferOrError =
mSourceBuffer->getEmulatedIndexedBuffer(srcData, mTranslatedAttribute, 0); mSourceBuffer->getEmulatedIndexedBuffer(mContext, srcData, mTranslatedAttribute, 0);
ASSERT_FALSE(bufferOrError.isError()); ASSERT_FALSE(bufferOrError.isError());
ID3D11Buffer *emulatedBuffer = bufferOrError.getResult(); ID3D11Buffer *emulatedBuffer = bufferOrError.getResult();
ASSERT_TRUE(emulatedBuffer != nullptr); ASSERT_TRUE(emulatedBuffer != nullptr);
...@@ -120,6 +120,7 @@ class D3D11EmulatedIndexedBufferTest : public ANGLETest ...@@ -120,6 +120,7 @@ class D3D11EmulatedIndexedBufferTest : public ANGLETest
} }
protected: protected:
gl::Context *mContext;
rx::Buffer11 *mSourceBuffer; rx::Buffer11 *mSourceBuffer;
rx::Renderer11 *mRenderer; rx::Renderer11 *mRenderer;
rx::TranslatedAttribute mTranslatedAttribute; rx::TranslatedAttribute mTranslatedAttribute;
...@@ -179,10 +180,10 @@ TEST_P(D3D11EmulatedIndexedBufferTest, TestSourceBufferRemainsUntouchedAfterExpa ...@@ -179,10 +180,10 @@ TEST_P(D3D11EmulatedIndexedBufferTest, TestSourceBufferRemainsUntouchedAfterExpa
const uint8_t *sourceBufferMem = nullptr; const uint8_t *sourceBufferMem = nullptr;
const uint8_t *cleanBufferMem = nullptr; const uint8_t *cleanBufferMem = nullptr;
gl::Error error = mSourceBuffer->getData(&sourceBufferMem); gl::Error error = mSourceBuffer->getData(mContext, &sourceBufferMem);
ASSERT_FALSE(error.isError()); ASSERT_FALSE(error.isError());
error = cleanSourceBuffer->getData(&cleanBufferMem); error = cleanSourceBuffer->getData(mContext, &cleanBufferMem);
ASSERT_FALSE(error.isError()); ASSERT_FALSE(error.isError());
int result = memcmp(sourceBufferMem, cleanBufferMem, cleanSourceBuffer->getSize()); int result = memcmp(sourceBufferMem, cleanBufferMem, cleanSourceBuffer->getSize());
......
...@@ -100,13 +100,13 @@ class MockBufferD3D : public rx::BufferD3D ...@@ -100,13 +100,13 @@ class MockBufferD3D : public rx::BufferD3D
MOCK_METHOD2(unmap, gl::Error(const gl::Context *context, GLboolean *)); MOCK_METHOD2(unmap, gl::Error(const gl::Context *context, GLboolean *));
// BufferD3D // BufferD3D
MOCK_METHOD0(markTransformFeedbackUsage, gl::Error()); MOCK_METHOD1(markTransformFeedbackUsage, gl::Error(const gl::Context *));
// inlined for speed // inlined for speed
bool supportsDirectBinding() const override { return false; } bool supportsDirectBinding() const override { return false; }
size_t getSize() const override { return mData.size(); } size_t getSize() const override { return mData.size(); }
gl::Error getData(const uint8_t **outData) override gl::Error getData(const gl::Context *context, const uint8_t **outData) override
{ {
*outData = &mData[0]; *outData = &mData[0];
return gl::NoError(); return gl::NoError();
...@@ -129,7 +129,7 @@ class MockGLFactoryD3D : public rx::MockGLFactory ...@@ -129,7 +129,7 @@ class MockGLFactoryD3D : public rx::MockGLFactory
EXPECT_CALL(*mBufferFactory, createVertexBuffer()) EXPECT_CALL(*mBufferFactory, createVertexBuffer())
.WillOnce(Return(nullptr)) .WillOnce(Return(nullptr))
.RetiresOnSaturation(); .RetiresOnSaturation();
mockBufferD3D->initializeStaticData(); mockBufferD3D->initializeStaticData(nullptr);
return mockBufferD3D; return mockBufferD3D;
} }
...@@ -177,10 +177,11 @@ void IndexDataManagerPerfTest::step() ...@@ -177,10 +177,11 @@ void IndexDataManagerPerfTest::step()
rx::TranslatedIndexData translatedIndexData; rx::TranslatedIndexData translatedIndexData;
for (unsigned int iteration = 0; iteration < 100; ++iteration) for (unsigned int iteration = 0; iteration < 100; ++iteration)
{ {
(void)mIndexBuffer.getIndexRange(GL_UNSIGNED_SHORT, 0, mIndexCount, false, (void)mIndexBuffer.getIndexRange(nullptr, GL_UNSIGNED_SHORT, 0, mIndexCount, false,
&translatedIndexData.indexRange); &translatedIndexData.indexRange);
(void)mIndexDataManager.prepareIndexData(GL_UNSIGNED_SHORT, mIndexCount, &mIndexBuffer, (void)mIndexDataManager.prepareIndexData(nullptr, GL_UNSIGNED_SHORT, mIndexCount,
nullptr, &translatedIndexData, false); &mIndexBuffer, nullptr, &translatedIndexData,
false);
} }
} }
......
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