Commit 3f1d0b76 by Alexis Hetu Committed by Alexis Hétu

Fixed a few issues related to transform feedback buffers

- Transform feedback buffers are now properly cleared when the object is deleted - Transform feedback buffers are now properly detached when a buffer is deleted - Ending a transform feedback now properly sets its PAUSED state to false - Added missing enums to Context::getQueryParameterInfo. GL_READ_FRAMEBUFFER_BINDING_ANGLE was also missing, so it was also added in this cl. Change-Id: I286caec119d5ae3adde95c4cce7f0298b8f836c3 Reviewed-on: https://swiftshader-review.googlesource.com/3962Tested-by: 's avatarAlexis Hétu <sugoi@google.com> Reviewed-by: 's avatarNicolas Capens <capn@google.com>
parent e4795222
...@@ -2479,7 +2479,8 @@ bool Context::getQueryParameterInfo(GLenum pname, GLenum *type, unsigned int *nu ...@@ -2479,7 +2479,8 @@ bool Context::getQueryParameterInfo(GLenum pname, GLenum *type, unsigned int *nu
case GL_NUM_SHADER_BINARY_FORMATS: case GL_NUM_SHADER_BINARY_FORMATS:
case GL_NUM_COMPRESSED_TEXTURE_FORMATS: case GL_NUM_COMPRESSED_TEXTURE_FORMATS:
case GL_ARRAY_BUFFER_BINDING: case GL_ARRAY_BUFFER_BINDING:
case GL_FRAMEBUFFER_BINDING: case GL_FRAMEBUFFER_BINDING: // Same as GL_DRAW_FRAMEBUFFER_BINDING_ANGLE
case GL_READ_FRAMEBUFFER_BINDING_ANGLE:
case GL_RENDERBUFFER_BINDING: case GL_RENDERBUFFER_BINDING:
case GL_CURRENT_PROGRAM: case GL_CURRENT_PROGRAM:
case GL_PACK_ALIGNMENT: case GL_PACK_ALIGNMENT:
...@@ -2634,6 +2635,8 @@ bool Context::getQueryParameterInfo(GLenum pname, GLenum *type, unsigned int *nu ...@@ -2634,6 +2635,8 @@ bool Context::getQueryParameterInfo(GLenum pname, GLenum *type, unsigned int *nu
case GL_DITHER: case GL_DITHER:
case GL_PRIMITIVE_RESTART_FIXED_INDEX: case GL_PRIMITIVE_RESTART_FIXED_INDEX:
case GL_RASTERIZER_DISCARD: case GL_RASTERIZER_DISCARD:
case GL_TRANSFORM_FEEDBACK_ACTIVE:
case GL_TRANSFORM_FEEDBACK_PAUSED:
{ {
*type = GL_BOOL; *type = GL_BOOL;
*numParams = 1; *numParams = 1;
...@@ -3871,6 +3874,11 @@ void Context::detachBuffer(GLuint buffer) ...@@ -3871,6 +3874,11 @@ void Context::detachBuffer(GLuint buffer)
mState.arrayBuffer = NULL; mState.arrayBuffer = NULL;
} }
for(auto tfIt = mTransformFeedbackMap.begin(); tfIt != mTransformFeedbackMap.end(); tfIt++)
{
tfIt->second->detachBuffer(buffer);
}
for(auto vaoIt = mVertexArrayMap.begin(); vaoIt != mVertexArrayMap.end(); vaoIt++) for(auto vaoIt = mVertexArrayMap.begin(); vaoIt != mVertexArrayMap.end(); vaoIt++)
{ {
vaoIt->second->detachBuffer(buffer); vaoIt->second->detachBuffer(buffer);
......
...@@ -23,6 +23,15 @@ TransformFeedback::TransformFeedback(GLuint name) : NamedObject(name), mActive(f ...@@ -23,6 +23,15 @@ TransformFeedback::TransformFeedback(GLuint name) : NamedObject(name), mActive(f
mGenericBuffer = NULL; mGenericBuffer = NULL;
} }
TransformFeedback::~TransformFeedback()
{
mGenericBuffer = NULL;
for(int i = 0; i < MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS; ++i)
{
mBuffer[i] = NULL;
}
}
Buffer* TransformFeedback::getGenericBuffer() const Buffer* TransformFeedback::getGenericBuffer() const
{ {
return mGenericBuffer; return mGenericBuffer;
...@@ -56,6 +65,7 @@ void TransformFeedback::begin(GLenum primitiveMode) ...@@ -56,6 +65,7 @@ void TransformFeedback::begin(GLenum primitiveMode)
void TransformFeedback::end() void TransformFeedback::end()
{ {
mActive = false; mActive = false;
mPaused = false;
} }
void TransformFeedback::setPaused(bool paused) void TransformFeedback::setPaused(bool paused)
...@@ -82,4 +92,20 @@ void TransformFeedback::setBuffer(GLuint index, Buffer* buffer, GLintptr offset, ...@@ -82,4 +92,20 @@ void TransformFeedback::setBuffer(GLuint index, Buffer* buffer, GLintptr offset,
} }
} }
void TransformFeedback::detachBuffer(GLuint buffer)
{
if(mGenericBuffer.name() == buffer)
{
mGenericBuffer = NULL;
}
for(int i = 0; i < MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS; ++i)
{
if(mBuffer[i].name() == buffer)
{
mBuffer[i] = NULL;
}
}
}
} }
...@@ -28,6 +28,7 @@ class TransformFeedback : public gl::NamedObject ...@@ -28,6 +28,7 @@ class TransformFeedback : public gl::NamedObject
public: public:
// FIXME: Change this when implementing transform feedback // FIXME: Change this when implementing transform feedback
TransformFeedback(GLuint name); TransformFeedback(GLuint name);
~TransformFeedback();
Buffer* getGenericBuffer() const; Buffer* getGenericBuffer() const;
Buffer* getBuffer(GLuint index) const; Buffer* getBuffer(GLuint index) const;
...@@ -38,6 +39,7 @@ public: ...@@ -38,6 +39,7 @@ public:
void setGenericBuffer(Buffer* buffer); void setGenericBuffer(Buffer* buffer);
void setBuffer(GLuint index, Buffer* buffer); void setBuffer(GLuint index, Buffer* buffer);
void setBuffer(GLuint index, Buffer* buffer, GLintptr offset, GLsizeiptr size); void setBuffer(GLuint index, Buffer* buffer, GLintptr offset, GLsizeiptr size);
void detachBuffer(GLuint buffer);
void begin(GLenum primitiveMode); void begin(GLenum primitiveMode);
void end(); void end();
void setPaused(bool paused); void setPaused(bool paused);
......
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