Add and implement Renderer::getMaxUniformBufferSize(), returning the maximum uniform buffer/block size.
TRAC #22852
Signed-off-by: Geoff Lang
Signed-off-by: Nicolas Capens
Author: Jamie Madill
git-svn-id: https://angleproject.googlecode.com/svn/branches/es3proto@2289 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/renderer/Renderer.h b/src/libGLESv2/renderer/Renderer.h
index 0b2891d..28e7b81 100644
--- a/src/libGLESv2/renderer/Renderer.h
+++ b/src/libGLESv2/renderer/Renderer.h
@@ -166,6 +166,7 @@
virtual unsigned int getMaxVertexShaderUniformBuffers() const = 0;
virtual unsigned int getMaxFragmentShaderUniformBuffers() const = 0;
virtual unsigned int getMaxTransformFeedbackBuffers() const = 0;
+ virtual unsigned int getMaxUniformBufferSize() const = 0;
virtual bool getNonPower2TextureSupport() const = 0;
virtual bool getDepthTextureSupport() const = 0;
virtual bool getOcclusionQuerySupport() const = 0;
diff --git a/src/libGLESv2/renderer/Renderer11.cpp b/src/libGLESv2/renderer/Renderer11.cpp
index 9007890..ab517b6 100644
--- a/src/libGLESv2/renderer/Renderer11.cpp
+++ b/src/libGLESv2/renderer/Renderer11.cpp
@@ -2211,6 +2211,23 @@
}
}
+unsigned int Renderer11::getMaxUniformBufferSize() const
+{
+ // Each component is a 4-element vector of 4-byte units (floats)
+ const unsigned int bytesPerComponent = 4 * sizeof(float);
+
+ switch (mFeatureLevel)
+ {
+ case D3D_FEATURE_LEVEL_11_0:
+ return D3D11_REQ_CONSTANT_BUFFER_ELEMENT_COUNT * bytesPerComponent;
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0:
+ return D3D10_REQ_CONSTANT_BUFFER_ELEMENT_COUNT * bytesPerComponent;
+ default: UNREACHABLE();
+ return 0;
+ }
+}
+
bool Renderer11::getNonPower2TextureSupport() const
{
switch (mFeatureLevel)
diff --git a/src/libGLESv2/renderer/Renderer11.h b/src/libGLESv2/renderer/Renderer11.h
index 6725374..7b6ff8e 100644
--- a/src/libGLESv2/renderer/Renderer11.h
+++ b/src/libGLESv2/renderer/Renderer11.h
@@ -111,6 +111,7 @@
virtual unsigned int getMaxVertexShaderUniformBuffers() const;
virtual unsigned int getMaxFragmentShaderUniformBuffers() const;
virtual unsigned int getMaxTransformFeedbackBuffers() const;
+ virtual unsigned int getMaxUniformBufferSize() const;
virtual bool getNonPower2TextureSupport() const;
virtual bool getDepthTextureSupport() const;
virtual bool getOcclusionQuerySupport() const;
diff --git a/src/libGLESv2/renderer/Renderer9.cpp b/src/libGLESv2/renderer/Renderer9.cpp
index cff3aa9..6df49c6 100644
--- a/src/libGLESv2/renderer/Renderer9.cpp
+++ b/src/libGLESv2/renderer/Renderer9.cpp
@@ -2314,6 +2314,11 @@
return 0;
}
+unsigned int Renderer9::getMaxUniformBufferSize() const
+{
+ return 0;
+}
+
bool Renderer9::getNonPower2TextureSupport() const
{
return mSupportsNonPower2Textures;
diff --git a/src/libGLESv2/renderer/Renderer9.h b/src/libGLESv2/renderer/Renderer9.h
index 0b3e921..b830c15 100644
--- a/src/libGLESv2/renderer/Renderer9.h
+++ b/src/libGLESv2/renderer/Renderer9.h
@@ -126,6 +126,7 @@
virtual unsigned int getMaxVertexShaderUniformBuffers() const;
virtual unsigned int getMaxFragmentShaderUniformBuffers() const;
virtual unsigned int getMaxTransformFeedbackBuffers() const;
+ virtual unsigned int getMaxUniformBufferSize() const;
virtual bool getNonPower2TextureSupport() const;
virtual bool getDepthTextureSupport() const;
virtual bool getOcclusionQuerySupport() const;