Add remaining transform feedback queries.
BUG=angle:493
Change-Id: I8841af50dcb90e7fb8a811b95d015bfdd2c5d226
Reviewed-on: https://chromium-review.googlesource.com/191035
Reviewed-by: Shannon Woods <shannonwoods@chromium.org>
Tested-by: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libGLESv2/renderer/d3d11/Renderer11.cpp b/src/libGLESv2/renderer/d3d11/Renderer11.cpp
index 8e881ca..d7ba2bd 100644
--- a/src/libGLESv2/renderer/d3d11/Renderer11.cpp
+++ b/src/libGLESv2/renderer/d3d11/Renderer11.cpp
@@ -2097,10 +2097,11 @@
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 @@
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 @@
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::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)