Commit f6db098d by Geoff Lang

Split the Context and Renderer draw* to one per entry point.

BUG=angleproject:1136 Change-Id: Ic7ff9c23201e1fe03c5a2135be24d61cfe3d6268 Reviewed-on: https://chromium-review.googlesource.com/295232Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Tested-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent 384f1fdd
...@@ -33,6 +33,27 @@ ...@@ -33,6 +33,27 @@
#include "libANGLE/validationES.h" #include "libANGLE/validationES.h"
#include "libANGLE/renderer/Renderer.h" #include "libANGLE/renderer/Renderer.h"
namespace
{
void MarkTransformFeedbackBufferUsage(gl::TransformFeedback *transformFeedback)
{
if (transformFeedback->isActive() && !transformFeedback->isPaused())
{
for (size_t tfBufferIndex = 0; tfBufferIndex < transformFeedback->getIndexedBufferCount();
tfBufferIndex++)
{
const OffsetBindingPointer<gl::Buffer> &buffer =
transformFeedback->getIndexedBuffer(tfBufferIndex);
if (buffer.get() != nullptr)
{
buffer->onTransformFeedback();
}
}
}
}
} // anonymous namespace
namespace gl namespace gl
{ {
...@@ -1248,37 +1269,67 @@ bool Context::getIndexedQueryParameterInfo(GLenum target, GLenum *type, unsigned ...@@ -1248,37 +1269,67 @@ bool Context::getIndexedQueryParameterInfo(GLenum target, GLenum *type, unsigned
return false; return false;
} }
Error Context::drawArrays(GLenum mode, GLint first, GLsizei count, GLsizei instances) Error Context::drawArrays(GLenum mode, GLint first, GLsizei count)
{ {
syncRendererState(); syncRendererState();
Error error = mRenderer->drawArrays(getData(), mode, first, count, instances); Error error = mRenderer->drawArrays(getData(), mode, first, count);
if (error.isError()) if (error.isError())
{ {
return error; return error;
} }
TransformFeedback *transformFeedback = mState.getCurrentTransformFeedback(); MarkTransformFeedbackBufferUsage(mState.getCurrentTransformFeedback());
if (transformFeedback->isActive() && !transformFeedback->isPaused())
return Error(GL_NO_ERROR);
}
Error Context::drawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount)
{
syncRendererState();
Error error = mRenderer->drawArraysInstanced(getData(), mode, first, count, instanceCount);
if (error.isError())
{ {
for (size_t tfBufferIndex = 0; tfBufferIndex < transformFeedback->getIndexedBufferCount(); tfBufferIndex++) return error;
{
const OffsetBindingPointer<Buffer> &buffer = transformFeedback->getIndexedBuffer(tfBufferIndex);
if (buffer.get() != nullptr)
{
buffer->onTransformFeedback();
}
}
} }
MarkTransformFeedbackBufferUsage(mState.getCurrentTransformFeedback());
return Error(GL_NO_ERROR); return Error(GL_NO_ERROR);
} }
Error Context::drawElements(GLenum mode, GLsizei count, GLenum type, Error Context::drawElements(GLenum mode,
const GLvoid *indices, GLsizei instances, GLsizei count,
GLenum type,
const GLvoid *indices,
const RangeUI &indexRange) const RangeUI &indexRange)
{ {
syncRendererState(); syncRendererState();
return mRenderer->drawElements(getData(), mode, count, type, indices, instances, indexRange); return mRenderer->drawElements(getData(), mode, count, type, indices, indexRange);
}
Error Context::drawElementsInstanced(GLenum mode,
GLsizei count,
GLenum type,
const GLvoid *indices,
GLsizei instances,
const RangeUI &indexRange)
{
syncRendererState();
return mRenderer->drawElementsInstanced(getData(), mode, count, type, indices, instances,
indexRange);
}
Error Context::drawRangeElements(GLenum mode,
GLuint start,
GLuint end,
GLsizei count,
GLenum type,
const GLvoid *indices,
const RangeUI &indexRange)
{
syncRendererState();
return mRenderer->drawRangeElements(getData(), mode, start, end, count, type, indices,
indexRange);
} }
Error Context::flush() Error Context::flush()
......
...@@ -164,10 +164,28 @@ class Context final : angle::NonCopyable ...@@ -164,10 +164,28 @@ class Context final : angle::NonCopyable
bool getQueryParameterInfo(GLenum pname, GLenum *type, unsigned int *numParams); bool getQueryParameterInfo(GLenum pname, GLenum *type, unsigned int *numParams);
bool getIndexedQueryParameterInfo(GLenum target, GLenum *type, unsigned int *numParams); bool getIndexedQueryParameterInfo(GLenum target, GLenum *type, unsigned int *numParams);
Error drawArrays(GLenum mode, GLint first, GLsizei count, GLsizei instances); Error drawArrays(GLenum mode, GLint first, GLsizei count);
Error drawElements(GLenum mode, GLsizei count, GLenum type, Error drawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount);
const GLvoid *indices, GLsizei instances,
Error drawElements(GLenum mode,
GLsizei count,
GLenum type,
const GLvoid *indices,
const RangeUI &indexRange); const RangeUI &indexRange);
Error drawElementsInstanced(GLenum mode,
GLsizei count,
GLenum type,
const GLvoid *indices,
GLsizei instances,
const RangeUI &indexRange);
Error drawRangeElements(GLenum mode,
GLuint start,
GLuint end,
GLsizei count,
GLenum type,
const GLvoid *indices,
const RangeUI &indexRange);
Error flush(); Error flush();
Error finish(); Error finish();
......
...@@ -46,11 +46,34 @@ class Renderer : public ImplFactory ...@@ -46,11 +46,34 @@ class Renderer : public ImplFactory
virtual gl::Error flush() = 0; virtual gl::Error flush() = 0;
virtual gl::Error finish() = 0; virtual gl::Error finish() = 0;
virtual gl::Error drawArrays(const gl::Data &data, GLenum mode, virtual gl::Error drawArrays(const gl::Data &data, GLenum mode, GLint first, GLsizei count) = 0;
GLint first, GLsizei count, GLsizei instances) = 0; virtual gl::Error drawArraysInstanced(const gl::Data &data,
virtual gl::Error drawElements(const gl::Data &data, GLenum mode, GLsizei count, GLenum type, GLenum mode,
const GLvoid *indices, GLsizei instances, GLint first,
GLsizei count,
GLsizei instanceCount) = 0;
virtual gl::Error drawElements(const gl::Data &data,
GLenum mode,
GLsizei count,
GLenum type,
const GLvoid *indices,
const gl::RangeUI &indexRange) = 0; const gl::RangeUI &indexRange) = 0;
virtual gl::Error drawElementsInstanced(const gl::Data &data,
GLenum mode,
GLsizei count,
GLenum type,
const GLvoid *indices,
GLsizei instances,
const gl::RangeUI &indexRange) = 0;
virtual gl::Error drawRangeElements(const gl::Data &data,
GLenum mode,
GLuint start,
GLuint end,
GLsizei count,
GLenum type,
const GLvoid *indices,
const gl::RangeUI &indexRange) = 0;
// lost device // lost device
//TODO(jmadill): investigate if this stuff is necessary in GL //TODO(jmadill): investigate if this stuff is necessary in GL
......
...@@ -67,11 +67,61 @@ void RendererD3D::cleanup() ...@@ -67,11 +67,61 @@ void RendererD3D::cleanup()
} }
} }
gl::Error RendererD3D::drawArrays(const gl::Data &data, GLenum mode, GLint first, GLsizei count)
{
return genericDrawArrays(data, mode, first, count, 0);
}
gl::Error RendererD3D::drawArraysInstanced(const gl::Data &data,
GLenum mode,
GLint first,
GLsizei count,
GLsizei instanceCount)
{
return genericDrawArrays(data, mode, first, count, instanceCount);
}
gl::Error RendererD3D::drawElements(const gl::Data &data, gl::Error RendererD3D::drawElements(const gl::Data &data,
GLenum mode, GLsizei count, GLenum type, GLenum mode,
const GLvoid *indices, GLsizei instances, GLsizei count,
GLenum type,
const GLvoid *indices,
const gl::RangeUI &indexRange) const gl::RangeUI &indexRange)
{ {
return genericDrawElements(data, mode, count, type, indices, 0, indexRange);
}
gl::Error RendererD3D::drawElementsInstanced(const gl::Data &data,
GLenum mode,
GLsizei count,
GLenum type,
const GLvoid *indices,
GLsizei instances,
const gl::RangeUI &indexRange)
{
return genericDrawElements(data, mode, count, type, indices, instances, indexRange);
}
gl::Error RendererD3D::drawRangeElements(const gl::Data &data,
GLenum mode,
GLuint start,
GLuint end,
GLsizei count,
GLenum type,
const GLvoid *indices,
const gl::RangeUI &indexRange)
{
return genericDrawElements(data, mode, count, type, indices, 0, indexRange);
}
gl::Error RendererD3D::genericDrawElements(const gl::Data &data,
GLenum mode,
GLsizei count,
GLenum type,
const GLvoid *indices,
GLsizei instances,
const gl::RangeUI &indexRange)
{
if (data.state->isPrimitiveRestartEnabled()) if (data.state->isPrimitiveRestartEnabled())
{ {
UNIMPLEMENTED(); UNIMPLEMENTED();
...@@ -152,8 +202,8 @@ gl::Error RendererD3D::drawElements(const gl::Data &data, ...@@ -152,8 +202,8 @@ gl::Error RendererD3D::drawElements(const gl::Data &data,
if (!skipDraw(data, mode)) if (!skipDraw(data, mode))
{ {
error = drawElements(mode, count, type, indices, vao->getElementArrayBuffer().get(), error = drawElementsImpl(mode, count, type, indices, vao->getElementArrayBuffer().get(),
indexInfo, instances, usesPointSize); indexInfo, instances, usesPointSize);
if (error.isError()) if (error.isError())
{ {
return error; return error;
...@@ -163,9 +213,11 @@ gl::Error RendererD3D::drawElements(const gl::Data &data, ...@@ -163,9 +213,11 @@ gl::Error RendererD3D::drawElements(const gl::Data &data,
return gl::Error(GL_NO_ERROR); return gl::Error(GL_NO_ERROR);
} }
gl::Error RendererD3D::drawArrays(const gl::Data &data, gl::Error RendererD3D::genericDrawArrays(const gl::Data &data,
GLenum mode, GLint first, GLenum mode,
GLsizei count, GLsizei instances) GLint first,
GLsizei count,
GLsizei instances)
{ {
gl::Program *program = data.state->getProgram(); gl::Program *program = data.state->getProgram();
ASSERT(program != nullptr); ASSERT(program != nullptr);
...@@ -225,7 +277,7 @@ gl::Error RendererD3D::drawArrays(const gl::Data &data, ...@@ -225,7 +277,7 @@ gl::Error RendererD3D::drawArrays(const gl::Data &data,
if (!skipDraw(data, mode)) if (!skipDraw(data, mode))
{ {
error = drawArrays(data, mode, count, instances, usesPointSize); error = drawArraysImpl(data, mode, count, instances, usesPointSize);
if (error.isError()) if (error.isError())
{ {
return error; return error;
......
...@@ -94,14 +94,34 @@ class RendererD3D : public Renderer, public BufferFactoryD3D ...@@ -94,14 +94,34 @@ class RendererD3D : public Renderer, public BufferFactoryD3D
virtual egl::ConfigSet generateConfigs() const = 0; virtual egl::ConfigSet generateConfigs() const = 0;
virtual void generateDisplayExtensions(egl::DisplayExtensions *outExtensions) const = 0; virtual void generateDisplayExtensions(egl::DisplayExtensions *outExtensions) const = 0;
gl::Error drawArrays(const gl::Data &data, gl::Error drawArrays(const gl::Data &data, GLenum mode, GLint first, GLsizei count) override;
GLenum mode, GLint first, gl::Error drawArraysInstanced(const gl::Data &data,
GLsizei count, GLsizei instances) override; GLenum mode,
GLint first,
GLsizei count,
GLsizei instanceCount) override;
gl::Error drawElements(const gl::Data &data, gl::Error drawElements(const gl::Data &data,
GLenum mode, GLsizei count, GLenum type, GLenum mode,
const GLvoid *indices, GLsizei instances, GLsizei count,
GLenum type,
const GLvoid *indices,
const gl::RangeUI &indexRange) override; const gl::RangeUI &indexRange) override;
gl::Error drawElementsInstanced(const gl::Data &data,
GLenum mode,
GLsizei count,
GLenum type,
const GLvoid *indices,
GLsizei instances,
const gl::RangeUI &indexRange) override;
gl::Error drawRangeElements(const gl::Data &data,
GLenum mode,
GLuint start,
GLuint end,
GLsizei count,
GLenum type,
const GLvoid *indices,
const gl::RangeUI &indexRange) override;
bool isDeviceLost() const override; bool isDeviceLost() const override;
std::string getVendorString() const override; std::string getVendorString() const override;
...@@ -214,11 +234,6 @@ class RendererD3D : public Renderer, public BufferFactoryD3D ...@@ -214,11 +234,6 @@ class RendererD3D : public Renderer, public BufferFactoryD3D
virtual gl::Error clearTextures(gl::SamplerType samplerType, size_t rangeStart, size_t rangeEnd) = 0; virtual gl::Error clearTextures(gl::SamplerType samplerType, size_t rangeStart, size_t rangeEnd) = 0;
protected: protected:
virtual gl::Error drawArrays(const gl::Data &data, GLenum mode, GLsizei count, GLsizei instances, bool usesPointSize) = 0;
virtual gl::Error drawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices,
gl::Buffer *elementArrayBuffer, const TranslatedIndexData &indexInfo, GLsizei instances,
bool usesPointSize) = 0;
virtual bool getLUID(LUID *adapterLuid) const = 0; virtual bool getLUID(LUID *adapterLuid) const = 0;
void cleanup(); void cleanup();
...@@ -237,6 +252,34 @@ class RendererD3D : public Renderer, public BufferFactoryD3D ...@@ -237,6 +252,34 @@ class RendererD3D : public Renderer, public BufferFactoryD3D
std::vector<TranslatedAttribute> mTranslatedAttribCache; std::vector<TranslatedAttribute> mTranslatedAttribCache;
private: private:
gl::Error genericDrawArrays(const gl::Data &data,
GLenum mode,
GLint first,
GLsizei count,
GLsizei instances);
gl::Error genericDrawElements(const gl::Data &data,
GLenum mode,
GLsizei count,
GLenum type,
const GLvoid *indices,
GLsizei instances,
const gl::RangeUI &indexRange);
virtual gl::Error drawArraysImpl(const gl::Data &data,
GLenum mode,
GLsizei count,
GLsizei instances,
bool usesPointSize) = 0;
virtual gl::Error drawElementsImpl(GLenum mode,
GLsizei count,
GLenum type,
const GLvoid *indices,
gl::Buffer *elementArrayBuffer,
const TranslatedIndexData &indexInfo,
GLsizei instances,
bool usesPointSize) = 0;
//FIXME(jmadill): std::array is currently prohibited by Chromium style guide //FIXME(jmadill): std::array is currently prohibited by Chromium style guide
typedef std::array<gl::Texture*, gl::IMPLEMENTATION_MAX_FRAMEBUFFER_ATTACHMENTS> FramebufferTextureArray; typedef std::array<gl::Texture*, gl::IMPLEMENTATION_MAX_FRAMEBUFFER_ATTACHMENTS> FramebufferTextureArray;
......
...@@ -1645,7 +1645,11 @@ void Renderer11::applyTransformFeedbackBuffers(const gl::State &state) ...@@ -1645,7 +1645,11 @@ void Renderer11::applyTransformFeedbackBuffers(const gl::State &state)
} }
} }
gl::Error Renderer11::drawArrays(const gl::Data &data, GLenum mode, GLsizei count, GLsizei instances, bool usesPointSize) gl::Error Renderer11::drawArraysImpl(const gl::Data &data,
GLenum mode,
GLsizei count,
GLsizei instances,
bool usesPointSize)
{ {
bool useInstancedPointSpriteEmulation = usesPointSize && getWorkarounds().useInstancedPointSpriteEmulation; bool useInstancedPointSpriteEmulation = usesPointSize && getWorkarounds().useInstancedPointSpriteEmulation;
if (mode == GL_POINTS && data.state->isTransformFeedbackActiveUnpaused()) if (mode == GL_POINTS && data.state->isTransformFeedbackActiveUnpaused())
...@@ -1731,9 +1735,14 @@ gl::Error Renderer11::drawArrays(const gl::Data &data, GLenum mode, GLsizei coun ...@@ -1731,9 +1735,14 @@ gl::Error Renderer11::drawArrays(const gl::Data &data, GLenum mode, GLsizei coun
} }
} }
gl::Error Renderer11::drawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, gl::Error Renderer11::drawElementsImpl(GLenum mode,
gl::Buffer *elementArrayBuffer, const TranslatedIndexData &indexInfo, GLsizei instances, GLsizei count,
bool usesPointSize) GLenum type,
const GLvoid *indices,
gl::Buffer *elementArrayBuffer,
const TranslatedIndexData &indexInfo,
GLsizei instances,
bool usesPointSize)
{ {
bool useInstancedPointSpriteEmulation = usesPointSize && getWorkarounds().useInstancedPointSpriteEmulation; bool useInstancedPointSpriteEmulation = usesPointSize && getWorkarounds().useInstancedPointSpriteEmulation;
int minIndex = static_cast<int>(indexInfo.indexRange.start); int minIndex = static_cast<int>(indexInfo.indexRange.start);
......
...@@ -142,11 +142,6 @@ class Renderer11 : public RendererD3D ...@@ -142,11 +142,6 @@ class Renderer11 : public RendererD3D
virtual gl::Error applyIndexBuffer(const GLvoid *indices, gl::Buffer *elementArrayBuffer, GLsizei count, GLenum mode, GLenum type, TranslatedIndexData *indexInfo, SourceIndexData *sourceIndexInfo); virtual gl::Error applyIndexBuffer(const GLvoid *indices, gl::Buffer *elementArrayBuffer, GLsizei count, GLenum mode, GLenum type, TranslatedIndexData *indexInfo, SourceIndexData *sourceIndexInfo);
void applyTransformFeedbackBuffers(const gl::State &state) override; void applyTransformFeedbackBuffers(const gl::State &state) override;
gl::Error drawArrays(const gl::Data &data, GLenum mode, GLsizei count, GLsizei instances, bool usesPointSize) override;
virtual gl::Error drawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices,
gl::Buffer *elementArrayBuffer, const TranslatedIndexData &indexInfo, GLsizei instances,
bool usesPointSize);
virtual void markAllStateDirty(); virtual void markAllStateDirty();
// lost device // lost device
...@@ -277,6 +272,20 @@ class Renderer11 : public RendererD3D ...@@ -277,6 +272,20 @@ class Renderer11 : public RendererD3D
gl::Error clearTextures(gl::SamplerType samplerType, size_t rangeStart, size_t rangeEnd) override; gl::Error clearTextures(gl::SamplerType samplerType, size_t rangeStart, size_t rangeEnd) override;
private: private:
gl::Error drawArraysImpl(const gl::Data &data,
GLenum mode,
GLsizei count,
GLsizei instances,
bool usesPointSize) override;
gl::Error drawElementsImpl(GLenum mode,
GLsizei count,
GLenum type,
const GLvoid *indices,
gl::Buffer *elementArrayBuffer,
const TranslatedIndexData &indexInfo,
GLsizei instances,
bool usesPointSize) override;
void generateCaps(gl::Caps *outCaps, gl::TextureCapsMap *outTextureCaps, void generateCaps(gl::Caps *outCaps, gl::TextureCapsMap *outTextureCaps,
gl::Extensions *outExtensions, gl::Extensions *outExtensions,
gl::Limitations *outLimitations) const override; gl::Limitations *outLimitations) const override;
......
...@@ -1476,7 +1476,11 @@ void Renderer9::applyTransformFeedbackBuffers(const gl::State& state) ...@@ -1476,7 +1476,11 @@ void Renderer9::applyTransformFeedbackBuffers(const gl::State& state)
ASSERT(!state.isTransformFeedbackActiveUnpaused()); ASSERT(!state.isTransformFeedbackActiveUnpaused());
} }
gl::Error Renderer9::drawArrays(const gl::Data &data, GLenum mode, GLsizei count, GLsizei instances, bool usesPointSize) gl::Error Renderer9::drawArraysImpl(const gl::Data &data,
GLenum mode,
GLsizei count,
GLsizei instances,
bool usesPointSize)
{ {
ASSERT(!data.state->isTransformFeedbackActiveUnpaused()); ASSERT(!data.state->isTransformFeedbackActiveUnpaused());
...@@ -1517,9 +1521,14 @@ gl::Error Renderer9::drawArrays(const gl::Data &data, GLenum mode, GLsizei count ...@@ -1517,9 +1521,14 @@ gl::Error Renderer9::drawArrays(const gl::Data &data, GLenum mode, GLsizei count
} }
} }
gl::Error Renderer9::drawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, gl::Error Renderer9::drawElementsImpl(GLenum mode,
gl::Buffer *elementArrayBuffer, const TranslatedIndexData &indexInfo, GLsizei /*instances*/, GLsizei count,
bool /*usesPointSize*/) GLenum type,
const GLvoid *indices,
gl::Buffer *elementArrayBuffer,
const TranslatedIndexData &indexInfo,
GLsizei /*instances*/,
bool /*usesPointSize*/)
{ {
startScene(); startScene();
......
...@@ -118,11 +118,6 @@ class Renderer9 : public RendererD3D ...@@ -118,11 +118,6 @@ class Renderer9 : public RendererD3D
void applyTransformFeedbackBuffers(const gl::State &state) override; void applyTransformFeedbackBuffers(const gl::State &state) override;
gl::Error drawArrays(const gl::Data &data, GLenum mode, GLsizei count, GLsizei instances, bool usesPointSize) override;
virtual gl::Error drawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices,
gl::Buffer *elementArrayBuffer, const TranslatedIndexData &indexInfo, GLsizei instances,
bool usesPointSize);
gl::Error clear(const ClearParameters &clearParams, gl::Error clear(const ClearParameters &clearParams,
const gl::FramebufferAttachment *colorBuffer, const gl::FramebufferAttachment *colorBuffer,
const gl::FramebufferAttachment *depthStencilBuffer); const gl::FramebufferAttachment *depthStencilBuffer);
...@@ -241,6 +236,20 @@ class Renderer9 : public RendererD3D ...@@ -241,6 +236,20 @@ class Renderer9 : public RendererD3D
gl::Error clearTextures(gl::SamplerType samplerType, size_t rangeStart, size_t rangeEnd) override; gl::Error clearTextures(gl::SamplerType samplerType, size_t rangeStart, size_t rangeEnd) override;
private: private:
gl::Error drawArraysImpl(const gl::Data &data,
GLenum mode,
GLsizei count,
GLsizei instances,
bool usesPointSize) override;
gl::Error drawElementsImpl(GLenum mode,
GLsizei count,
GLenum type,
const GLvoid *indices,
gl::Buffer *elementArrayBuffer,
const TranslatedIndexData &indexInfo,
GLsizei instances,
bool usesPointSize) override;
void generateCaps(gl::Caps *outCaps, gl::TextureCapsMap *outTextureCaps, void generateCaps(gl::Caps *outCaps, gl::TextureCapsMap *outTextureCaps,
gl::Extensions *outExtensions, gl::Extensions *outExtensions,
gl::Limitations *outLimitations) const override; gl::Limitations *outLimitations) const override;
......
...@@ -129,8 +129,7 @@ gl::Error RendererGL::finish() ...@@ -129,8 +129,7 @@ gl::Error RendererGL::finish()
return gl::Error(GL_NO_ERROR); return gl::Error(GL_NO_ERROR);
} }
gl::Error RendererGL::drawArrays(const gl::Data &data, GLenum mode, gl::Error RendererGL::drawArrays(const gl::Data &data, GLenum mode, GLint first, GLsizei count)
GLint first, GLsizei count, GLsizei instances)
{ {
gl::Error error = mStateManager->setDrawArraysState(data, first, count); gl::Error error = mStateManager->setDrawArraysState(data, first, count);
if (error.isError()) if (error.isError())
...@@ -146,15 +145,23 @@ gl::Error RendererGL::drawArrays(const gl::Data &data, GLenum mode, ...@@ -146,15 +145,23 @@ gl::Error RendererGL::drawArrays(const gl::Data &data, GLenum mode,
return gl::Error(GL_NO_ERROR); return gl::Error(GL_NO_ERROR);
} }
gl::Error RendererGL::drawElements(const gl::Data &data, GLenum mode, GLsizei count, GLenum type, gl::Error RendererGL::drawArraysInstanced(const gl::Data &data,
const GLvoid *indices, GLsizei instances, GLenum mode,
const gl::RangeUI &indexRange) GLint first,
GLsizei count,
GLsizei instanceCount)
{ {
if (instances > 0) UNIMPLEMENTED();
{ return gl::Error(GL_NO_ERROR);
UNIMPLEMENTED(); }
}
gl::Error RendererGL::drawElements(const gl::Data &data,
GLenum mode,
GLsizei count,
GLenum type,
const GLvoid *indices,
const gl::RangeUI &indexRange)
{
const GLvoid *drawIndexPointer = nullptr; const GLvoid *drawIndexPointer = nullptr;
gl::Error error = mStateManager->setDrawElementsState(data, count, type, indices, &drawIndexPointer); gl::Error error = mStateManager->setDrawElementsState(data, count, type, indices, &drawIndexPointer);
if (error.isError()) if (error.isError())
...@@ -170,6 +177,31 @@ gl::Error RendererGL::drawElements(const gl::Data &data, GLenum mode, GLsizei co ...@@ -170,6 +177,31 @@ gl::Error RendererGL::drawElements(const gl::Data &data, GLenum mode, GLsizei co
return gl::Error(GL_NO_ERROR); return gl::Error(GL_NO_ERROR);
} }
gl::Error RendererGL::drawElementsInstanced(const gl::Data &data,
GLenum mode,
GLsizei count,
GLenum type,
const GLvoid *indices,
GLsizei instances,
const gl::RangeUI &indexRange)
{
UNIMPLEMENTED();
return gl::Error(GL_NO_ERROR);
}
gl::Error RendererGL::drawRangeElements(const gl::Data &data,
GLenum mode,
GLuint start,
GLuint end,
GLsizei count,
GLenum type,
const GLvoid *indices,
const gl::RangeUI &indexRange)
{
UNIMPLEMENTED();
return gl::Error(GL_NO_ERROR);
}
CompilerImpl *RendererGL::createCompiler(const gl::Data &data) CompilerImpl *RendererGL::createCompiler(const gl::Data &data)
{ {
return new CompilerGL(data, mFunctions); return new CompilerGL(data, mFunctions);
......
...@@ -28,11 +28,34 @@ class RendererGL : public Renderer ...@@ -28,11 +28,34 @@ class RendererGL : public Renderer
gl::Error flush() override; gl::Error flush() override;
gl::Error finish() override; gl::Error finish() override;
gl::Error drawArrays(const gl::Data &data, GLenum mode, gl::Error drawArrays(const gl::Data &data, GLenum mode, GLint first, GLsizei count) override;
GLint first, GLsizei count, GLsizei instances) override; gl::Error drawArraysInstanced(const gl::Data &data,
gl::Error drawElements(const gl::Data &data, GLenum mode, GLsizei count, GLenum type, GLenum mode,
const GLvoid *indices, GLsizei instances, GLint first,
GLsizei count,
GLsizei instanceCount) override;
gl::Error drawElements(const gl::Data &data,
GLenum mode,
GLsizei count,
GLenum type,
const GLvoid *indices,
const gl::RangeUI &indexRange) override; const gl::RangeUI &indexRange) override;
gl::Error drawElementsInstanced(const gl::Data &data,
GLenum mode,
GLsizei count,
GLenum type,
const GLvoid *indices,
GLsizei instances,
const gl::RangeUI &indexRange) override;
gl::Error drawRangeElements(const gl::Data &data,
GLenum mode,
GLuint start,
GLuint end,
GLsizei count,
GLenum type,
const GLvoid *indices,
const gl::RangeUI &indexRange) override;
// Shader creation // Shader creation
CompilerImpl *createCompiler(const gl::Data &data) override; CompilerImpl *createCompiler(const gl::Data &data) override;
......
...@@ -1220,7 +1220,7 @@ void GL_APIENTRY DrawArrays(GLenum mode, GLint first, GLsizei count) ...@@ -1220,7 +1220,7 @@ void GL_APIENTRY DrawArrays(GLenum mode, GLint first, GLsizei count)
return; return;
} }
Error error = context->drawArrays(mode, first, count, 0); Error error = context->drawArrays(mode, first, count);
if (error.isError()) if (error.isError())
{ {
context->recordError(error); context->recordError(error);
...@@ -1243,7 +1243,7 @@ void GL_APIENTRY DrawElements(GLenum mode, GLsizei count, GLenum type, const GLv ...@@ -1243,7 +1243,7 @@ void GL_APIENTRY DrawElements(GLenum mode, GLsizei count, GLenum type, const GLv
return; return;
} }
Error error = context->drawElements(mode, count, type, indices, 0, indexRange); Error error = context->drawElements(mode, count, type, indices, indexRange);
if (error.isError()) if (error.isError())
{ {
context->recordError(error); context->recordError(error);
......
...@@ -100,7 +100,7 @@ void GL_APIENTRY DrawArraysInstancedANGLE(GLenum mode, GLint first, GLsizei coun ...@@ -100,7 +100,7 @@ void GL_APIENTRY DrawArraysInstancedANGLE(GLenum mode, GLint first, GLsizei coun
return; return;
} }
Error error = context->drawArrays(mode, first, count, primcount); Error error = context->drawArraysInstanced(mode, first, count, primcount);
if (error.isError()) if (error.isError())
{ {
context->recordError(error); context->recordError(error);
...@@ -123,7 +123,8 @@ void GL_APIENTRY DrawElementsInstancedANGLE(GLenum mode, GLsizei count, GLenum t ...@@ -123,7 +123,8 @@ void GL_APIENTRY DrawElementsInstancedANGLE(GLenum mode, GLsizei count, GLenum t
return; return;
} }
Error error = context->drawElements(mode, count, type, indices, primcount, indexRange); Error error =
context->drawElementsInstanced(mode, count, type, indices, primcount, indexRange);
if (error.isError()) if (error.isError())
{ {
context->recordError(error); context->recordError(error);
......
...@@ -75,7 +75,8 @@ void GL_APIENTRY DrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsize ...@@ -75,7 +75,8 @@ void GL_APIENTRY DrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsize
// a drawRangeElements call - the GL back-end is free to choose to call drawRangeElements based on the // a drawRangeElements call - the GL back-end is free to choose to call drawRangeElements based on the
// validated index range. If index validation is removed, adding drawRangeElements to the context interface // validated index range. If index validation is removed, adding drawRangeElements to the context interface
// should be reconsidered. // should be reconsidered.
Error error = context->drawElements(mode, count, type, indices, 0, indexRange); Error error =
context->drawRangeElements(mode, start, end, count, type, indices, indexRange);
if (error.isError()) if (error.isError())
{ {
context->recordError(error); context->recordError(error);
...@@ -2299,7 +2300,7 @@ void GL_APIENTRY DrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GL ...@@ -2299,7 +2300,7 @@ void GL_APIENTRY DrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GL
return; return;
} }
Error error = context->drawArrays(mode, first, count, instanceCount); Error error = context->drawArraysInstanced(mode, first, count, instanceCount);
if (error.isError()) if (error.isError())
{ {
context->recordError(error); context->recordError(error);
...@@ -2328,7 +2329,8 @@ void GL_APIENTRY DrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, ...@@ -2328,7 +2329,8 @@ void GL_APIENTRY DrawElementsInstanced(GLenum mode, GLsizei count, GLenum type,
return; return;
} }
Error error = context->drawElements(mode, count, type, indices, instanceCount, indexRange); Error error =
context->drawElementsInstanced(mode, count, type, indices, instanceCount, indexRange);
if (error.isError()) if (error.isError())
{ {
context->recordError(error); context->recordError(error);
......
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