OSDN Git Service

Implemented missing Transform Feedback queries
authorAlexis Hetu <sugoi@google.com>
Wed, 10 Feb 2016 18:53:07 +0000 (13:53 -0500)
committerAlexis Hétu <sugoi@google.com>
Wed, 10 Feb 2016 20:48:18 +0000 (20:48 +0000)
Added missing implementations for binding/start/size
related queries for TransformFeedback objects.

Change-Id: Iebfebdc840764755a74d4a3753f72eceb1e6c86e
Reviewed-on: https://swiftshader-review.googlesource.com/4747
Tested-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
src/OpenGL/libGLESv2/Context.cpp
src/OpenGL/libGLESv2/TransformFeedback.cpp
src/OpenGL/libGLESv2/TransformFeedback.h

index 7518af3..3ef0c78 100644 (file)
@@ -2396,6 +2396,32 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const
        case GL_VERTEX_ARRAY_BINDING: // GLint, initially 0\r
                *params = getCurrentVertexArray()->name;\r
                break;\r
+       case GL_TRANSFORM_FEEDBACK_BINDING:\r
+               {\r
+                       TransformFeedback* transformFeedback = getTransformFeedback(mState.transformFeedback);\r
+                       if(transformFeedback)\r
+                       {\r
+                               *params = transformFeedback->name;\r
+                       }\r
+                       else\r
+                       {\r
+                               return false;\r
+                       }\r
+               }\r
+               break;\r
+       case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING:\r
+               {\r
+                       TransformFeedback* transformFeedback = getTransformFeedback(mState.transformFeedback);\r
+                       if(transformFeedback)\r
+                       {\r
+                               *params = transformFeedback->getGenericBufferName();\r
+                       }\r
+                       else\r
+                       {\r
+                               return false;\r
+                       }\r
+               }\r
+               break;\r
        default:\r
         return false;\r
     }\r
@@ -2403,13 +2429,11 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const
     return true;\r
 }\r
 \r
-template bool Context::getTransformFeedbackiv<GLint>(GLuint xfb, GLenum pname, GLint *param) const;\r
-template bool Context::getTransformFeedbackiv<GLint64>(GLuint xfb, GLenum pname, GLint64 *param) const;\r
+template bool Context::getTransformFeedbackiv<GLint>(GLuint index, GLenum pname, GLint *param) const;\r
+template bool Context::getTransformFeedbackiv<GLint64>(GLuint index, GLenum pname, GLint64 *param) const;\r
 \r
-template<typename T> bool Context::getTransformFeedbackiv(GLuint xfb, GLenum pname, T *param) const\r
+template<typename T> bool Context::getTransformFeedbackiv(GLuint index, GLenum pname, T *param) const\r
 {\r
-       UNIMPLEMENTED();\r
-\r
        TransformFeedback* transformFeedback = getTransformFeedback(mState.transformFeedback);\r
        if(!transformFeedback)\r
        {\r
@@ -2419,27 +2443,31 @@ template<typename T> bool Context::getTransformFeedbackiv(GLuint xfb, GLenum pna
        switch(pname)\r
        {\r
        case GL_TRANSFORM_FEEDBACK_BINDING: // GLint, initially 0\r
-               *param = 0;\r
+               *param = transformFeedback->name;\r
                break;\r
        case GL_TRANSFORM_FEEDBACK_ACTIVE: // boolean, initially GL_FALSE\r
                *param = transformFeedback->isActive();\r
                break;\r
        case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING: // name, initially 0\r
-               *param = transformFeedback->name;\r
+               *param = transformFeedback->getBufferName(index);\r
                break;\r
        case GL_TRANSFORM_FEEDBACK_PAUSED: // boolean, initially GL_FALSE\r
                *param = transformFeedback->isPaused();\r
                break;\r
        case GL_TRANSFORM_FEEDBACK_BUFFER_SIZE: // indexed[n] 64-bit integer, initially 0\r
-               if(transformFeedback->getGenericBuffer())\r
+               if(transformFeedback->getBuffer(index))\r
                {\r
-                       *param = transformFeedback->getGenericBuffer()->size();\r
+                       *param = transformFeedback->getSize(index);\r
                        break;\r
                }\r
                else return false;\r
        case GL_TRANSFORM_FEEDBACK_BUFFER_START: // indexed[n] 64-bit integer, initially 0\r
-               *param = 0;\r
+               if(transformFeedback->getBuffer(index))\r
+               {\r
+                       *param = transformFeedback->getOffset(index);\r
                break;\r
+               }\r
+               else return false;\r
        default:\r
                return false;\r
        }\r
@@ -2624,6 +2652,8 @@ bool Context::getQueryParameterInfo(GLenum pname, GLenum *type, unsigned int *nu
     case GL_UNPACK_SKIP_PIXELS:\r
     case GL_UNPACK_SKIP_ROWS:\r
     case GL_VERTEX_ARRAY_BINDING:\r
+       case GL_TRANSFORM_FEEDBACK_BINDING:\r
+       case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING:\r
         {\r
             *type = GL_INT;\r
             *numParams = 1;\r
index d71c748..3d5e2b3 100644 (file)
@@ -40,6 +40,26 @@ Buffer* TransformFeedback::getBuffer(GLuint index) const
        return mBuffer[index].get();\r
 }\r
 \r
+GLuint TransformFeedback::getGenericBufferName() const\r
+{\r
+       return mGenericBuffer.name();\r
+}\r
+\r
+GLuint TransformFeedback::getBufferName(GLuint index) const\r
+{\r
+       return mBuffer[index].get().name();\r
+}\r
+\r
+int TransformFeedback::getOffset(GLuint index) const\r
+{\r
+       return mBuffer[index].getOffset();\r
+}\r
+\r
+int TransformFeedback::getSize(GLuint index) const\r
+{\r
+       return mBuffer[index].getSize();\r
+}\r
+\r
 bool TransformFeedback::isActive() const\r
 {\r
        return mActive;\r
index 631f17f..0363581 100644 (file)
@@ -32,6 +32,10 @@ public:
 \r
        Buffer* getGenericBuffer() const;\r
        Buffer* getBuffer(GLuint index) const;\r
+       GLuint getGenericBufferName() const;\r
+       GLuint getBufferName(GLuint index) const;\r
+       int getOffset(GLuint index) const;\r
+       int getSize(GLuint index) const;\r
        bool isActive() const;\r
        bool isPaused() const;\r
        GLenum primitiveMode() const;\r