D3D11: Select view in vertex shader
View selection can happen in the vertex shader through the optional
feature VPAndRTArrayIndexFromAnyShaderFeedingRasterizer.
BUG=angleproject:2062
TEST=angle_end2end_tests
Change-Id: Iaf65685e04f828b0936295fea867f6f6cbe69bee
Reviewed-on: https://chromium-review.googlesource.com/628419
Commit-Queue: Martin Radev <mradev@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libANGLE/renderer/d3d/ProgramD3D.cpp b/src/libANGLE/renderer/d3d/ProgramD3D.cpp
index 2875000..b41df35 100644
--- a/src/libANGLE/renderer/d3d/ProgramD3D.cpp
+++ b/src/libANGLE/renderer/d3d/ProgramD3D.cpp
@@ -377,6 +377,7 @@
mUsesViewScale(renderer->presentPathFastEnabled()),
mHasANGLEMultiviewEnabled(vertexShader->hasANGLEMultiviewEnabled()),
mUsesViewID(fragmentShader->usesViewID()),
+ mCanSelectViewInVertexShader(renderer->canSelectViewInVertexShader()),
mVertexShader(vertexShader),
mFragmentShader(fragmentShader)
{
@@ -434,6 +435,11 @@
return mUsesViewID;
}
+bool ProgramD3DMetadata::canSelectViewInVertexShader() const
+{
+ return mCanSelectViewInVertexShader;
+}
+
bool ProgramD3DMetadata::addsPointCoordToVertexShader() const
{
// PointSprite emulation requiress that gl_PointCoord is present in the vertex shader
@@ -601,7 +607,7 @@
bool ProgramD3D::usesGeometryShader(GLenum drawMode) const
{
- if (mHasANGLEMultiviewEnabled)
+ if (mHasANGLEMultiviewEnabled && !mRenderer->canSelectViewInVertexShader())
{
return true;
}
@@ -1322,8 +1328,8 @@
std::string geometryHLSL = mDynamicHLSL->generateGeometryShaderHLSL(
geometryShaderType, data, mState, mRenderer->presentPathFastEnabled(),
- mHasANGLEMultiviewEnabled, usesGeometryShaderForPointSpriteEmulation(),
- mGeometryShaderPreamble);
+ mHasANGLEMultiviewEnabled, mRenderer->canSelectViewInVertexShader(),
+ usesGeometryShaderForPointSpriteEmulation(), mGeometryShaderPreamble);
gl::InfoLog tempInfoLog;
gl::InfoLog *currentInfoLog = infoLog ? infoLog : &tempInfoLog;
@@ -1623,7 +1629,8 @@
if (mRenderer->getMajorShaderModel() >= 4)
{
mGeometryShaderPreamble = mDynamicHLSL->generateGeometryShaderPreamble(
- packing, builtins, mHasANGLEMultiviewEnabled);
+ packing, builtins, mHasANGLEMultiviewEnabled,
+ metadata.canSelectViewInVertexShader());
}
initAttribLocationsToD3DSemantic(context);