Commit 4251b758 by Geoff Lang

Add remaining transform feedback queries.

BUG=angle:493 Change-Id: Ibeae41da2b83ab63d237912602ba5d2aad0bbec2 Reviewed-on: https://chromium-review.googlesource.com/185036Tested-by: 's avatarGeoff Lang <geofflang@chromium.org> Reviewed-by: 's avatarShannon Woods <shannonwoods@chromium.org>
parent e708fc02
......@@ -1667,7 +1667,8 @@ bool Context::getBooleanv(GLenum pname, GLboolean *params)
case GL_BLEND: *params = mState.blend.blend; break;
case GL_DITHER: *params = mState.blend.dither; break;
case GL_CONTEXT_ROBUST_ACCESS_EXT: *params = mRobustAccess ? GL_TRUE : GL_FALSE; break;
case GL_TRANSFORM_FEEDBACK_ACTIVE: *params = GL_FALSE; UNIMPLEMENTED(); break;
case GL_TRANSFORM_FEEDBACK_ACTIVE: *params = getCurrentTransformFeedback()->isStarted(); break;
case GL_TRANSFORM_FEEDBACK_PAUSED: *params = getCurrentTransformFeedback()->isPaused(); break;
default:
return false;
}
......@@ -1815,7 +1816,9 @@ bool Context::getIntegerv(GLenum pname, GLint *params)
case GL_MINOR_VERSION: *params = 0; break;
case GL_MAX_ELEMENTS_INDICES: *params = mRenderer->getMaxRecommendedElementsIndices(); break;
case GL_MAX_ELEMENTS_VERTICES: *params = mRenderer->getMaxRecommendedElementsVertices(); break;
case GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS: *params = 0; UNIMPLEMENTED(); break;
case GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS: *params = mRenderer->getMaxTransformFeedbackInterleavedComponents(); break;
case GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS: *params = mRenderer->getMaxTransformFeedbackBuffers(); break;
case GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS: *params = mRenderer->getMaxTransformFeedbackSeparateComponents(); break;
case GL_NUM_COMPRESSED_TEXTURE_FORMATS:
params[0] = mNumCompressedTextureFormats;
break;
......@@ -2356,7 +2359,9 @@ bool Context::getQueryParameterInfo(GLenum pname, GLenum *type, unsigned int *nu
case GL_MINOR_VERSION:
case GL_MAX_ELEMENTS_INDICES:
case GL_MAX_ELEMENTS_VERTICES:
case GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS:
case GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS:
case GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS:
{
*type = GL_INT;
*numParams = 1;
......@@ -2375,6 +2380,7 @@ bool Context::getQueryParameterInfo(GLenum pname, GLenum *type, unsigned int *nu
return true;
case GL_TRANSFORM_FEEDBACK_ACTIVE:
case GL_TRANSFORM_FEEDBACK_PAUSED:
{
*type = GL_BOOL;
*numParams = 1;
......
......@@ -3002,6 +3002,9 @@ void __stdcall glGetProgramiv(GLuint program, GLenum pname, GLint* params)
{
case GL_ACTIVE_UNIFORM_BLOCKS:
case GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH:
case GL_TRANSFORM_FEEDBACK_BUFFER_MODE:
case GL_TRANSFORM_FEEDBACK_VARYINGS:
case GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH:
return gl::error(GL_INVALID_ENUM);
}
}
......@@ -3044,6 +3047,15 @@ void __stdcall glGetProgramiv(GLuint program, GLenum pname, GLint* params)
case GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH:
*params = programObject->getActiveUniformBlockMaxLength();
break;
case GL_TRANSFORM_FEEDBACK_BUFFER_MODE:
*params = programObject->getTransformFeedbackBufferMode();
break;
case GL_TRANSFORM_FEEDBACK_VARYINGS:
*params = programObject->getTransformFeedbackVaryingCount();
break;
case GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH:
*params = programObject->getTransformFeedbackVaryingMaxLength();
break;
default:
return gl::error(GL_INVALID_ENUM);
}
......
......@@ -43,6 +43,7 @@
#endif // ANGLE_ENABLE_D3D9
#if defined(ANGLE_ENABLE_D3D11)
#include <D3D10_1.h>
#include <D3D11.h>
#include <dxgi.h>
#include <dxgi1_2.h>
......
......@@ -180,6 +180,8 @@ class Renderer
virtual unsigned int getReservedVertexUniformBuffers() const = 0;
virtual unsigned int getReservedFragmentUniformBuffers() const = 0;
virtual unsigned int getMaxTransformFeedbackBuffers() const = 0;
virtual unsigned int getMaxTransformFeedbackSeparateComponents() const = 0;
virtual unsigned int getMaxTransformFeedbackInterleavedComponents() const = 0;
virtual unsigned int getMaxUniformBufferSize() const = 0;
virtual bool getNonPower2TextureSupport() const = 0;
virtual bool getDepthTextureSupport() const = 0;
......
......@@ -2097,10 +2097,11 @@ unsigned int Renderer11::getMaxVaryingVectors() const
switch (mFeatureLevel)
{
case D3D_FEATURE_LEVEL_11_0:
return D3D11_VS_OUTPUT_REGISTER_COUNT;
return D3D11_VS_OUTPUT_REGISTER_COUNT - getReservedVaryings();
case D3D_FEATURE_LEVEL_10_1:
return D3D10_1_VS_OUTPUT_REGISTER_COUNT - getReservedVaryings();
case D3D_FEATURE_LEVEL_10_0:
return D3D10_VS_OUTPUT_REGISTER_COUNT;
return D3D10_VS_OUTPUT_REGISTER_COUNT - getReservedVaryings();
default: UNREACHABLE();
return 0;
}
......@@ -2152,6 +2153,13 @@ unsigned int Renderer11::getReservedFragmentUniformBuffers() const
return 2;
}
unsigned int Renderer11::getReservedVaryings() const
{
// We potentially reserve varyings for gl_Position, _dx_Position, gl_FragCoord and gl_PointSize
return 4;
}
unsigned int Renderer11::getMaxTransformFeedbackBuffers() const
{
META_ASSERT(gl::IMPLEMENTATION_MAX_TRANSFORM_FEEDBACK_BUFFERS >= D3D11_SO_BUFFER_SLOT_COUNT &&
......@@ -2162,6 +2170,7 @@ unsigned int Renderer11::getMaxTransformFeedbackBuffers() const
case D3D_FEATURE_LEVEL_11_0:
return D3D11_SO_BUFFER_SLOT_COUNT;
case D3D_FEATURE_LEVEL_10_1:
return D3D10_1_SO_BUFFER_SLOT_COUNT;
case D3D_FEATURE_LEVEL_10_0:
return D3D10_SO_BUFFER_SLOT_COUNT;
default: UNREACHABLE();
......@@ -2169,6 +2178,27 @@ unsigned int Renderer11::getMaxTransformFeedbackBuffers() const
}
}
unsigned int Renderer11::getMaxTransformFeedbackSeparateComponents() const
{
switch (mFeatureLevel)
{
case D3D_FEATURE_LEVEL_11_0:
return getMaxTransformFeedbackInterleavedComponents() / getMaxTransformFeedbackBuffers();
case D3D_FEATURE_LEVEL_10_1:
case D3D_FEATURE_LEVEL_10_0:
// D3D 10 and 10.1 only allow one output per output slot if an output slot other than zero
// is used.
return 4;
default: UNREACHABLE();
return 0;
}
}
unsigned int Renderer11::getMaxTransformFeedbackInterleavedComponents() const
{
return (getMaxVaryingVectors() * 4);
}
unsigned int Renderer11::getMaxUniformBufferSize() const
{
// Each component is a 4-element vector of 4-byte units (floats)
......
......@@ -127,7 +127,10 @@ class Renderer11 : public Renderer
virtual unsigned int getMaxFragmentShaderUniformBuffers() const;
virtual unsigned int getReservedVertexUniformBuffers() const;
virtual unsigned int getReservedFragmentUniformBuffers() const;
unsigned int getReservedVaryings() const;
virtual unsigned int getMaxTransformFeedbackBuffers() const;
virtual unsigned int getMaxTransformFeedbackSeparateComponents() const;
virtual unsigned int getMaxTransformFeedbackInterleavedComponents() const;
virtual unsigned int getMaxUniformBufferSize() const;
virtual bool getNonPower2TextureSupport() const;
virtual bool getDepthTextureSupport() const;
......
......@@ -2535,6 +2535,16 @@ unsigned int Renderer9::getMaxTransformFeedbackBuffers() const
return 0;
}
unsigned int Renderer9::getMaxTransformFeedbackSeparateComponents() const
{
return 0;
}
unsigned int Renderer9::getMaxTransformFeedbackInterleavedComponents() const
{
return 0;
}
unsigned int Renderer9::getMaxUniformBufferSize() const
{
return 0;
......
......@@ -131,6 +131,8 @@ class Renderer9 : public Renderer
virtual unsigned int getReservedVertexUniformBuffers() const;
virtual unsigned int getReservedFragmentUniformBuffers() const;
virtual unsigned int getMaxTransformFeedbackBuffers() const;
virtual unsigned int getMaxTransformFeedbackSeparateComponents() const;
virtual unsigned int getMaxTransformFeedbackInterleavedComponents() const;
virtual unsigned int getMaxUniformBufferSize() const;
virtual bool getNonPower2TextureSupport() const;
virtual bool getDepthTextureSupport() 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