Added uniform and transform feedback state and setting on context.

TRAC #22753 Signed-off-by: Jamie Madill Signed-off-by: Nicolas Capens Author: Geoff Lang git-svn-id: https://angleproject.googlecode.com/svn/branches/es3proto@2111 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent 184d0a85
...@@ -240,6 +240,16 @@ Context::~Context() ...@@ -240,6 +240,16 @@ Context::~Context()
mTexture2DZero.set(NULL); mTexture2DZero.set(NULL);
mTextureCubeMapZero.set(NULL); mTextureCubeMapZero.set(NULL);
for (int i = 0; i < IMPLEMENTATION_MAX_COMBINED_SHADER_UNIFORM_BUFFERS; i++)
{
mState.uniformBuffers[i].set(NULL);
}
for (int i = 0; i < IMPLEMENTATION_MAX_TRANSFORM_FEEDBACK_BUFFERS; i++)
{
mState.transformFeedbackBuffers[i].set(NULL);
}
mResourceManager->release(); mResourceManager->release();
} }
...@@ -915,6 +925,20 @@ void Context::bindRenderbuffer(GLuint renderbuffer) ...@@ -915,6 +925,20 @@ void Context::bindRenderbuffer(GLuint renderbuffer)
mState.renderbuffer.set(getRenderbuffer(renderbuffer)); mState.renderbuffer.set(getRenderbuffer(renderbuffer));
} }
void Context::bindUniformBuffer(GLuint buffer, GLuint index, GLintptr offset, GLsizeiptr size)
{
mResourceManager->checkBufferAllocation(buffer);
mState.uniformBuffers[index].set(getBuffer(buffer), offset, size);
}
void Context::bindTransformFeedbackBuffer(GLuint buffer, GLuint index, GLintptr offset, GLsizeiptr size)
{
mResourceManager->checkBufferAllocation(buffer);
mState.transformFeedbackBuffers[index].set(getBuffer(buffer), offset, size);
}
void Context::useProgram(GLuint program) void Context::useProgram(GLuint program)
{ {
GLuint priorProgram = mState.currentProgram; GLuint priorProgram = mState.currentProgram;
...@@ -2172,11 +2196,22 @@ unsigned int Context::getMaximumCombinedTextureImageUnits() const ...@@ -2172,11 +2196,22 @@ unsigned int Context::getMaximumCombinedTextureImageUnits() const
return mRenderer->getMaxCombinedTextureImageUnits(); return mRenderer->getMaxCombinedTextureImageUnits();
} }
unsigned int Context::getMaximumCombinedUniformBufferBindings() const
{
return mRenderer->getMaxVertexShaderUniformBuffers() +
mRenderer->getMaxFragmentShaderUniformBuffers();
}
int Context::getMaxSupportedSamples() const int Context::getMaxSupportedSamples() const
{ {
return mRenderer->getMaxSupportedSamples(); return mRenderer->getMaxSupportedSamples();
} }
unsigned int Context::getMaxTransformFeedbackBufferBindings() const
{
return mRenderer->getMaxTransformFeedbackBuffers();
}
unsigned int Context::getMaximumRenderTargets() const unsigned int Context::getMaximumRenderTargets() const
{ {
return mRenderer->getMaxRenderTargets(); return mRenderer->getMaxRenderTargets();
......
...@@ -164,6 +164,10 @@ struct State ...@@ -164,6 +164,10 @@ struct State
BindingPointer<Texture> samplerTexture[TEXTURE_TYPE_COUNT][IMPLEMENTATION_MAX_COMBINED_TEXTURE_IMAGE_UNITS]; BindingPointer<Texture> samplerTexture[TEXTURE_TYPE_COUNT][IMPLEMENTATION_MAX_COMBINED_TEXTURE_IMAGE_UNITS];
BindingPointer<Query> activeQuery[QUERY_TYPE_COUNT]; BindingPointer<Query> activeQuery[QUERY_TYPE_COUNT];
OffsetBindingPointer<Buffer> uniformBuffers[IMPLEMENTATION_MAX_COMBINED_SHADER_UNIFORM_BUFFERS];
OffsetBindingPointer<Buffer> transformFeedbackBuffers[IMPLEMENTATION_MAX_TRANSFORM_FEEDBACK_BUFFERS];
GLint unpackAlignment; GLint unpackAlignment;
GLint packAlignment; GLint packAlignment;
bool packReverseRowOrder; bool packReverseRowOrder;
...@@ -308,6 +312,8 @@ class Context ...@@ -308,6 +312,8 @@ class Context
void bindReadFramebuffer(GLuint framebuffer); void bindReadFramebuffer(GLuint framebuffer);
void bindDrawFramebuffer(GLuint framebuffer); void bindDrawFramebuffer(GLuint framebuffer);
void bindRenderbuffer(GLuint renderbuffer); void bindRenderbuffer(GLuint renderbuffer);
void bindUniformBuffer(GLuint buffer, GLuint index, GLintptr offset, GLsizeiptr size);
void bindTransformFeedbackBuffer(GLuint buffer, GLuint index, GLintptr offset, GLsizeiptr size);
void useProgram(GLuint program); void useProgram(GLuint program);
void linkProgram(GLuint program); void linkProgram(GLuint program);
void setProgramBinary(GLuint program, const void *binary, GLint length); void setProgramBinary(GLuint program, const void *binary, GLint length);
...@@ -367,12 +373,14 @@ class Context ...@@ -367,12 +373,14 @@ class Context
int getMajorShaderModel() const; int getMajorShaderModel() const;
float getMaximumPointSize() const; float getMaximumPointSize() const;
unsigned int getMaximumCombinedTextureImageUnits() const; unsigned int getMaximumCombinedTextureImageUnits() const;
unsigned int getMaximumCombinedUniformBufferBindings() const;
int getMaximumRenderbufferDimension() const; int getMaximumRenderbufferDimension() const;
int getMaximumTextureDimension() const; int getMaximumTextureDimension() const;
int getMaximumCubeTextureDimension() const; int getMaximumCubeTextureDimension() const;
int getMaximumTextureLevel() const; int getMaximumTextureLevel() const;
unsigned int getMaximumRenderTargets() const; unsigned int getMaximumRenderTargets() const;
GLsizei getMaxSupportedSamples() const; GLsizei getMaxSupportedSamples() const;
unsigned int getMaxTransformFeedbackBufferBindings() const;
const char *getExtensionString() const; const char *getExtensionString() const;
const char *getRendererString() const; const char *getRendererString() const;
bool supportsEventQueries() const; bool supportsEventQueries() const;
......
...@@ -22,7 +22,14 @@ enum ...@@ -22,7 +22,14 @@ enum
IMPLEMENTATION_MAX_COMBINED_TEXTURE_IMAGE_UNITS = MAX_TEXTURE_IMAGE_UNITS + IMPLEMENTATION_MAX_VERTEX_TEXTURE_IMAGE_UNITS, IMPLEMENTATION_MAX_COMBINED_TEXTURE_IMAGE_UNITS = MAX_TEXTURE_IMAGE_UNITS + IMPLEMENTATION_MAX_VERTEX_TEXTURE_IMAGE_UNITS,
IMPLEMENTATION_MAX_VARYING_VECTORS = 32, IMPLEMENTATION_MAX_VARYING_VECTORS = 32,
IMPLEMENTATION_MAX_DRAW_BUFFERS = 8 IMPLEMENTATION_MAX_DRAW_BUFFERS = 8,
IMPLEMENTATION_MAX_VERTEX_SHADER_UNIFORM_BUFFERS = 16,
IMPLEMENTATION_MAX_FRAGMENT_SHADER_UNIFORM_BUFFERS = 16,
IMPLEMENTATION_MAX_COMBINED_SHADER_UNIFORM_BUFFERS = IMPLEMENTATION_MAX_VERTEX_SHADER_UNIFORM_BUFFERS +
IMPLEMENTATION_MAX_FRAGMENT_SHADER_UNIFORM_BUFFERS,
IMPLEMENTATION_MAX_TRANSFORM_FEEDBACK_BUFFERS = 4,
}; };
const float ALIASED_LINE_WIDTH_RANGE_MIN = 1.0f; const float ALIASED_LINE_WIDTH_RANGE_MIN = 1.0f;
......
...@@ -2193,6 +2193,9 @@ unsigned int Renderer11::getMaxVaryingVectors() const ...@@ -2193,6 +2193,9 @@ unsigned int Renderer11::getMaxVaryingVectors() const
unsigned int Renderer11::getMaxVertexShaderUniformBuffers() const unsigned int Renderer11::getMaxVertexShaderUniformBuffers() const
{ {
META_ASSERT(gl::IMPLEMENTATION_MAX_VERTEX_SHADER_UNIFORM_BUFFERS >= D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT &&
gl::IMPLEMENTATION_MAX_VERTEX_SHADER_UNIFORM_BUFFERS >= D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT);
switch (mFeatureLevel) switch (mFeatureLevel)
{ {
case D3D_FEATURE_LEVEL_11_0: case D3D_FEATURE_LEVEL_11_0:
...@@ -2207,6 +2210,9 @@ unsigned int Renderer11::getMaxVertexShaderUniformBuffers() const ...@@ -2207,6 +2210,9 @@ unsigned int Renderer11::getMaxVertexShaderUniformBuffers() const
unsigned int Renderer11::getMaxFragmentShaderUniformBuffers() const unsigned int Renderer11::getMaxFragmentShaderUniformBuffers() const
{ {
META_ASSERT(gl::IMPLEMENTATION_MAX_FRAGMENT_SHADER_UNIFORM_BUFFERS >= D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT &&
gl::IMPLEMENTATION_MAX_FRAGMENT_SHADER_UNIFORM_BUFFERS >= D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT);
switch (mFeatureLevel) switch (mFeatureLevel)
{ {
case D3D_FEATURE_LEVEL_11_0: case D3D_FEATURE_LEVEL_11_0:
...@@ -2221,6 +2227,9 @@ unsigned int Renderer11::getMaxFragmentShaderUniformBuffers() const ...@@ -2221,6 +2227,9 @@ unsigned int Renderer11::getMaxFragmentShaderUniformBuffers() const
unsigned int Renderer11::getMaxTransformFeedbackBuffers() const unsigned int Renderer11::getMaxTransformFeedbackBuffers() const
{ {
META_ASSERT(gl::IMPLEMENTATION_MAX_TRANSFORM_FEEDBACK_BUFFERS >= D3D11_SO_BUFFER_SLOT_COUNT &&
gl::IMPLEMENTATION_MAX_TRANSFORM_FEEDBACK_BUFFERS >= D3D10_SO_BUFFER_SLOT_COUNT);
switch (mFeatureLevel) switch (mFeatureLevel)
{ {
case D3D_FEATURE_LEVEL_11_0: case D3D_FEATURE_LEVEL_11_0:
......
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