Commit 10eaf2ed by Alexis Hetu Committed by Alexis Hétu

Implemented missing Transform Feedback queries

Added missing implementations for binding/start/size related queries for TransformFeedback objects. Change-Id: Iebfebdc840764755a74d4a3753f72eceb1e6c86e Reviewed-on: https://swiftshader-review.googlesource.com/4747Tested-by: 's avatarAlexis Hétu <sugoi@google.com> Reviewed-by: 's avatarNicolas Capens <capn@google.com>
parent 2885249e
...@@ -2396,6 +2396,32 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const ...@@ -2396,6 +2396,32 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const
case GL_VERTEX_ARRAY_BINDING: // GLint, initially 0 case GL_VERTEX_ARRAY_BINDING: // GLint, initially 0
*params = getCurrentVertexArray()->name; *params = getCurrentVertexArray()->name;
break; break;
case GL_TRANSFORM_FEEDBACK_BINDING:
{
TransformFeedback* transformFeedback = getTransformFeedback(mState.transformFeedback);
if(transformFeedback)
{
*params = transformFeedback->name;
}
else
{
return false;
}
}
break;
case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING:
{
TransformFeedback* transformFeedback = getTransformFeedback(mState.transformFeedback);
if(transformFeedback)
{
*params = transformFeedback->getGenericBufferName();
}
else
{
return false;
}
}
break;
default: default:
return false; return false;
} }
...@@ -2403,13 +2429,11 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const ...@@ -2403,13 +2429,11 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const
return true; return true;
} }
template bool Context::getTransformFeedbackiv<GLint>(GLuint xfb, GLenum pname, GLint *param) const; template bool Context::getTransformFeedbackiv<GLint>(GLuint index, GLenum pname, GLint *param) const;
template bool Context::getTransformFeedbackiv<GLint64>(GLuint xfb, GLenum pname, GLint64 *param) const; template bool Context::getTransformFeedbackiv<GLint64>(GLuint index, GLenum pname, GLint64 *param) const;
template<typename T> bool Context::getTransformFeedbackiv(GLuint xfb, GLenum pname, T *param) const template<typename T> bool Context::getTransformFeedbackiv(GLuint index, GLenum pname, T *param) const
{ {
UNIMPLEMENTED();
TransformFeedback* transformFeedback = getTransformFeedback(mState.transformFeedback); TransformFeedback* transformFeedback = getTransformFeedback(mState.transformFeedback);
if(!transformFeedback) if(!transformFeedback)
{ {
...@@ -2419,27 +2443,31 @@ template<typename T> bool Context::getTransformFeedbackiv(GLuint xfb, GLenum pna ...@@ -2419,27 +2443,31 @@ template<typename T> bool Context::getTransformFeedbackiv(GLuint xfb, GLenum pna
switch(pname) switch(pname)
{ {
case GL_TRANSFORM_FEEDBACK_BINDING: // GLint, initially 0 case GL_TRANSFORM_FEEDBACK_BINDING: // GLint, initially 0
*param = 0; *param = transformFeedback->name;
break; break;
case GL_TRANSFORM_FEEDBACK_ACTIVE: // boolean, initially GL_FALSE case GL_TRANSFORM_FEEDBACK_ACTIVE: // boolean, initially GL_FALSE
*param = transformFeedback->isActive(); *param = transformFeedback->isActive();
break; break;
case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING: // name, initially 0 case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING: // name, initially 0
*param = transformFeedback->name; *param = transformFeedback->getBufferName(index);
break; break;
case GL_TRANSFORM_FEEDBACK_PAUSED: // boolean, initially GL_FALSE case GL_TRANSFORM_FEEDBACK_PAUSED: // boolean, initially GL_FALSE
*param = transformFeedback->isPaused(); *param = transformFeedback->isPaused();
break; break;
case GL_TRANSFORM_FEEDBACK_BUFFER_SIZE: // indexed[n] 64-bit integer, initially 0 case GL_TRANSFORM_FEEDBACK_BUFFER_SIZE: // indexed[n] 64-bit integer, initially 0
if(transformFeedback->getGenericBuffer()) if(transformFeedback->getBuffer(index))
{ {
*param = transformFeedback->getGenericBuffer()->size(); *param = transformFeedback->getSize(index);
break; break;
} }
else return false; else return false;
case GL_TRANSFORM_FEEDBACK_BUFFER_START: // indexed[n] 64-bit integer, initially 0 case GL_TRANSFORM_FEEDBACK_BUFFER_START: // indexed[n] 64-bit integer, initially 0
*param = 0; if(transformFeedback->getBuffer(index))
{
*param = transformFeedback->getOffset(index);
break; break;
}
else return false;
default: default:
return false; return false;
} }
...@@ -2624,6 +2652,8 @@ bool Context::getQueryParameterInfo(GLenum pname, GLenum *type, unsigned int *nu ...@@ -2624,6 +2652,8 @@ bool Context::getQueryParameterInfo(GLenum pname, GLenum *type, unsigned int *nu
case GL_UNPACK_SKIP_PIXELS: case GL_UNPACK_SKIP_PIXELS:
case GL_UNPACK_SKIP_ROWS: case GL_UNPACK_SKIP_ROWS:
case GL_VERTEX_ARRAY_BINDING: case GL_VERTEX_ARRAY_BINDING:
case GL_TRANSFORM_FEEDBACK_BINDING:
case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING:
{ {
*type = GL_INT; *type = GL_INT;
*numParams = 1; *numParams = 1;
......
...@@ -40,6 +40,26 @@ Buffer* TransformFeedback::getBuffer(GLuint index) const ...@@ -40,6 +40,26 @@ Buffer* TransformFeedback::getBuffer(GLuint index) const
return mBuffer[index].get(); return mBuffer[index].get();
} }
GLuint TransformFeedback::getGenericBufferName() const
{
return mGenericBuffer.name();
}
GLuint TransformFeedback::getBufferName(GLuint index) const
{
return mBuffer[index].get().name();
}
int TransformFeedback::getOffset(GLuint index) const
{
return mBuffer[index].getOffset();
}
int TransformFeedback::getSize(GLuint index) const
{
return mBuffer[index].getSize();
}
bool TransformFeedback::isActive() const bool TransformFeedback::isActive() const
{ {
return mActive; return mActive;
......
...@@ -32,6 +32,10 @@ public: ...@@ -32,6 +32,10 @@ public:
Buffer* getGenericBuffer() const; Buffer* getGenericBuffer() const;
Buffer* getBuffer(GLuint index) const; Buffer* getBuffer(GLuint index) const;
GLuint getGenericBufferName() const;
GLuint getBufferName(GLuint index) const;
int getOffset(GLuint index) const;
int getSize(GLuint index) const;
bool isActive() const; bool isActive() const;
bool isPaused() const; bool isPaused() const;
GLenum primitiveMode() const; GLenum primitiveMode() const;
......
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