Commit 3635a129 by Sean Risser

Generic Transform Feedback buffer as global state

Moved the generic Transform Feedback buffer out of the local Transform Feedback Object (TFO), and into global state. Bug chromium:818098 Tests: dEQP-GLES3.functional.state_query.indexed.transform_feedback_switching_buffer Change-id: Ife86cc82bd57c33b9daec4870610b5eaea5c2f52 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/28436 Presubmit-Ready: Sean Risser <srisser@google.com> Reviewed-by: 's avatarAlexis Hétu <sugoi@google.com> Reviewed-by: 's avatarNicolas Capens <nicolascapens@google.com> Tested-by: 's avatarSean Risser <srisser@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
parent 04dae5ec
......@@ -238,6 +238,7 @@ Context::~Context()
mState.pixelPackBuffer = nullptr;
mState.pixelUnpackBuffer = nullptr;
mState.genericUniformBuffer = nullptr;
mState.genericTransformFeedbackBuffer = nullptr;
for(int i = 0; i < MAX_UNIFORM_BUFFER_BINDINGS; i++) {
mState.uniformBuffers[i].set(nullptr, 0, 0);
......@@ -1171,12 +1172,7 @@ void Context::bindTransformFeedbackBuffer(GLuint buffer)
{
mResourceManager->checkBufferAllocation(buffer);
TransformFeedback* transformFeedback = getTransformFeedback(mState.transformFeedback);
if(transformFeedback)
{
transformFeedback->setGenericBuffer(getBuffer(buffer));
}
mState.genericTransformFeedbackBuffer = getBuffer(buffer);
}
void Context::bindTexture(TextureType type, GLuint texture)
......@@ -1259,7 +1255,7 @@ void Context::bindGenericTransformFeedbackBuffer(GLuint buffer)
{
mResourceManager->checkBufferAllocation(buffer);
getTransformFeedback()->setGenericBuffer(getBuffer(buffer));
mState.genericTransformFeedbackBuffer = getBuffer(buffer);
}
void Context::bindIndexedTransformFeedbackBuffer(GLuint buffer, GLuint index, GLintptr offset, GLsizeiptr size)
......@@ -1268,6 +1264,7 @@ void Context::bindIndexedTransformFeedbackBuffer(GLuint buffer, GLuint index, GL
Buffer* bufferObject = getBuffer(buffer);
getTransformFeedback()->setBuffer(index, bufferObject, offset, size);
mState.genericTransformFeedbackBuffer = bufferObject;
}
void Context::bindTransformFeedback(GLuint id)
......@@ -1621,10 +1618,7 @@ bool Context::getBuffer(GLenum target, es2::Buffer **buffer) const
*buffer = getPixelUnpackBuffer();
break;
case GL_TRANSFORM_FEEDBACK_BUFFER:
{
TransformFeedback* transformFeedback = getTransformFeedback();
*buffer = transformFeedback ? static_cast<es2::Buffer*>(transformFeedback->getGenericBuffer()) : nullptr;
}
*buffer = static_cast<es2::Buffer*>(mState.genericTransformFeedbackBuffer);
break;
case GL_UNIFORM_BUFFER:
*buffer = getGenericUniformBuffer();
......@@ -2383,7 +2377,7 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const
TransformFeedback* transformFeedback = getTransformFeedback(mState.transformFeedback);
if(transformFeedback)
{
*params = transformFeedback->getGenericBufferName();
*params = mState.genericTransformFeedbackBuffer.name();
}
else
{
......@@ -3861,6 +3855,10 @@ void Context::detachBuffer(GLuint buffer)
{
mState.genericUniformBuffer = nullptr;
}
if (mState.genericTransformFeedbackBuffer.name() == buffer)
{
mState.genericTransformFeedbackBuffer = nullptr;
}
if(getArrayBufferName() == buffer)
{
......
......@@ -410,6 +410,7 @@ struct State
gl::BindingPointer<Buffer> pixelPackBuffer;
gl::BindingPointer<Buffer> pixelUnpackBuffer;
gl::BindingPointer<Buffer> genericUniformBuffer;
gl::BindingPointer<Buffer> genericTransformFeedbackBuffer;
BufferBinding uniformBuffers[MAX_UNIFORM_BUFFER_BINDINGS];
GLuint readFramebuffer;
......
......@@ -21,33 +21,21 @@ namespace es2
TransformFeedback::TransformFeedback(GLuint name) : NamedObject(name), mActive(false), mPaused(false), mVertexOffset(0)
{
mGenericBuffer = nullptr;
}
TransformFeedback::~TransformFeedback()
{
mGenericBuffer = nullptr;
for(int i = 0; i < MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS; ++i)
{
mBuffer[i].set(nullptr);
}
}
Buffer* TransformFeedback::getGenericBuffer() const
{
return mGenericBuffer;
}
Buffer* TransformFeedback::getBuffer(GLuint index) const
{
return mBuffer[index].get();
}
GLuint TransformFeedback::getGenericBufferName() const
{
return mGenericBuffer.name();
}
GLuint TransformFeedback::getBufferName(GLuint index) const
{
return mBuffer[index].get().name();
......@@ -108,11 +96,6 @@ void TransformFeedback::setPaused(bool paused)
mPaused = paused;
}
void TransformFeedback::setGenericBuffer(Buffer* buffer)
{
mGenericBuffer = buffer;
}
void TransformFeedback::setBuffer(GLuint index, Buffer* buffer)
{
mBuffer[index].set(buffer);
......@@ -125,11 +108,6 @@ void TransformFeedback::setBuffer(GLuint index, Buffer* buffer, GLintptr offset,
void TransformFeedback::detachBuffer(GLuint buffer)
{
if(mGenericBuffer.name() == buffer)
{
mGenericBuffer = nullptr;
}
for(int i = 0; i < MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS; ++i)
{
if(mBuffer[i].get().name() == buffer)
......
......@@ -35,9 +35,7 @@ public:
BufferBinding* getBuffers() { return mBuffer; }
Buffer* getGenericBuffer() const;
Buffer* getBuffer(GLuint index) const;
GLuint getGenericBufferName() const;
GLuint getBufferName(GLuint index) const;
int getOffset(GLuint index) const;
int getSize(GLuint index) const;
......@@ -46,7 +44,6 @@ public:
GLenum primitiveMode() const;
int vertexOffset() const;
void setGenericBuffer(Buffer* buffer);
void setBuffer(GLuint index, Buffer* buffer);
void setBuffer(GLuint index, Buffer* buffer, GLintptr offset, GLsizeiptr size);
void detachBuffer(GLuint buffer);
......@@ -56,7 +53,6 @@ public:
void addVertexOffset(int count);
private:
gl::BindingPointer<Buffer> mGenericBuffer;
BufferBinding mBuffer[MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS];
bool mActive;
......
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