diff options
author | Jamie Madill <jmadill@chromium.org> | 2014-09-05 10:38:05 -0400 |
---|---|---|
committer | Jamie Madill <jmadill@chromium.org> | 2014-09-05 17:01:42 +0000 |
commit | 3f2e61dea6c447ed7b98483fa0ce9ccc3cb5cc3c (patch) | |
tree | c628a2e3e23f0367b5baa2a8c24b3353561373ae /src/libGLESv2/renderer/d3d/d3d11/renderer11_utils.cpp | |
parent | aef95dec1cb82857fbe0dd88ad92eb3451e482f2 (diff) | |
download | angle-3f2e61dea6c447ed7b98483fa0ce9ccc3cb5cc3c.tar.gz |
Enable MRT pixel shader rewriting.
Writing to all 8 pixel outputs was causing performance problems on
Intel and AMD. Enabling Geoff's work to rewrite our pixel shaders
solves the regression.
This patch also includes a workaround to the nVidia driver bug
where it would ignore NULL RT values in OMSetRenderTargets, by
compacting the RT list to skip NULL values.
BUG=angle:705
BUG=365078
Change-Id: Ia68af6f0ccd5f10c484d6f76297a0bec694948f0
Reviewed-on: https://chromium-review.googlesource.com/214852
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Diffstat (limited to 'src/libGLESv2/renderer/d3d/d3d11/renderer11_utils.cpp')
-rw-r--r-- | src/libGLESv2/renderer/d3d/d3d11/renderer11_utils.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/libGLESv2/renderer/d3d/d3d11/renderer11_utils.cpp b/src/libGLESv2/renderer/d3d/d3d11/renderer11_utils.cpp index c021e2ab..bb2e5362 100644 --- a/src/libGLESv2/renderer/d3d/d3d11/renderer11_utils.cpp +++ b/src/libGLESv2/renderer/d3d/d3d11/renderer11_utils.cpp @@ -9,6 +9,7 @@ #include "libGLESv2/renderer/d3d/d3d11/renderer11_utils.h" #include "libGLESv2/renderer/d3d/d3d11/formatutils11.h" +#include "libGLESv2/ProgramBinary.h" #include "common/debug.h" @@ -392,9 +393,13 @@ static size_t GetMaximumSimultaneousRenderTargets(D3D_FEATURE_LEVEL featureLevel case D3D_FEATURE_LEVEL_11_1: case D3D_FEATURE_LEVEL_11_0: return D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT; - // FIXME(geofflang): Work around NVIDIA driver bug by repacking buffers case D3D_FEATURE_LEVEL_10_1: - case D3D_FEATURE_LEVEL_10_0: return 1; /* D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT; */ + case D3D_FEATURE_LEVEL_10_0: +#if (ANGLE_MRT_PERF_WORKAROUND == ANGLE_WORKAROUND_ENABLED) + return D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT; +#else + return 1; +#endif case D3D_FEATURE_LEVEL_9_3: return D3D_FL9_3_SIMULTANEOUS_RENDER_TARGET_COUNT; case D3D_FEATURE_LEVEL_9_2: |