Clear11 Shader Optimizations and Shader Management Rework

- ClearShader made into a class that manages all required shaders and input layouts for clears
- ClearShader reuses VS for all clear types. This reduces shader compilation time and memory usage
significantly
- Use constantBuffer for color/z values instead of VB to decouple VB & VS from clearType and
allowing for the same VS to be used for multiple clear types
- FL10+ Devices: Generate positions using SV_VertexID in VS to avoid having to bind VB.
- FL93 Devices: Use an immutable VB containing only position data (SV_VertexID not supported)
- Implement CB cache. Incoming color/Z values checked against cache and CB/cache only updated if
there is a mismatch. Significantly reduces the frequency of expensive CB map/rename operations
especially in common scenarios where most/all clears use the same color/z values

BUG=angleproject:1935

Change-Id: I2015fbdcc135ba08b65dbecbe9c62499c2801037
Reviewed-on: https://chromium-review.googlesource.com/453882
Commit-Queue: Shahmeer Esmail <shahmeer.esmail@intel.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libANGLE/renderer/d3d/FramebufferD3D.cpp b/src/libANGLE/renderer/d3d/FramebufferD3D.cpp
index e88edd6..747f551 100644
--- a/src/libANGLE/renderer/d3d/FramebufferD3D.cpp
+++ b/src/libANGLE/renderer/d3d/FramebufferD3D.cpp
@@ -38,19 +38,19 @@
     {
         clearParams.clearColor[i] = false;
     }
-    clearParams.colorFClearValue = state.getColorClearValue();
-    clearParams.colorClearType = GL_FLOAT;
-    clearParams.colorMaskRed = blendState.colorMaskRed;
-    clearParams.colorMaskGreen = blendState.colorMaskGreen;
-    clearParams.colorMaskBlue = blendState.colorMaskBlue;
-    clearParams.colorMaskAlpha = blendState.colorMaskAlpha;
-    clearParams.clearDepth = false;
-    clearParams.depthClearValue =  state.getDepthClearValue();
-    clearParams.clearStencil = false;
-    clearParams.stencilClearValue = state.getStencilClearValue();
+    clearParams.colorF           = state.getColorClearValue();
+    clearParams.colorType        = GL_FLOAT;
+    clearParams.colorMaskRed     = blendState.colorMaskRed;
+    clearParams.colorMaskGreen   = blendState.colorMaskGreen;
+    clearParams.colorMaskBlue    = blendState.colorMaskBlue;
+    clearParams.colorMaskAlpha   = blendState.colorMaskAlpha;
+    clearParams.clearDepth       = false;
+    clearParams.depthValue       = state.getDepthClearValue();
+    clearParams.clearStencil     = false;
+    clearParams.stencilValue     = state.getStencilClearValue();
     clearParams.stencilWriteMask = state.getDepthStencilState().stencilWritemask;
-    clearParams.scissorEnabled = state.isScissorTestEnabled();
-    clearParams.scissor = state.getScissor();
+    clearParams.scissorEnabled   = state.isScissorTestEnabled();
+    clearParams.scissor          = state.getScissor();
 
     const gl::Framebuffer *framebufferObject = state.getDrawFramebuffer();
     if (mask & GL_COLOR_BUFFER_BIT)
@@ -116,14 +116,14 @@
         {
             clearParams.clearColor[i] = (drawbuffer == static_cast<int>(i));
         }
-        clearParams.colorFClearValue = gl::ColorF(values[0], values[1], values[2], values[3]);
-        clearParams.colorClearType = GL_FLOAT;
+        clearParams.colorF    = gl::ColorF(values[0], values[1], values[2], values[3]);
+        clearParams.colorType = GL_FLOAT;
     }
 
     if (buffer == GL_DEPTH)
     {
         clearParams.clearDepth = true;
-        clearParams.depthClearValue = values[0];
+        clearParams.depthValue = values[0];
     }
 
     return clearImpl(context, clearParams);
@@ -140,8 +140,8 @@
     {
         clearParams.clearColor[i] = (drawbuffer == static_cast<int>(i));
     }
-    clearParams.colorUIClearValue = gl::ColorUI(values[0], values[1], values[2], values[3]);
-    clearParams.colorClearType = GL_UNSIGNED_INT;
+    clearParams.colorUI   = gl::ColorUI(values[0], values[1], values[2], values[3]);
+    clearParams.colorType = GL_UNSIGNED_INT;
 
     return clearImpl(context, clearParams);
 }
@@ -160,14 +160,14 @@
         {
             clearParams.clearColor[i] = (drawbuffer == static_cast<int>(i));
         }
-        clearParams.colorIClearValue = gl::ColorI(values[0], values[1], values[2], values[3]);
-        clearParams.colorClearType = GL_INT;
+        clearParams.colorI    = gl::ColorI(values[0], values[1], values[2], values[3]);
+        clearParams.colorType = GL_INT;
     }
 
     if (buffer == GL_STENCIL)
     {
         clearParams.clearStencil = true;
-        clearParams.stencilClearValue = values[1];
+        clearParams.stencilValue = values[1];
     }
 
     return clearImpl(context, clearParams);
@@ -181,10 +181,10 @@
 {
     // glClearBufferfi can only be called to clear a depth stencil buffer
     ClearParameters clearParams   = GetClearParameters(context->getGLState(), 0);
-    clearParams.clearDepth = true;
-    clearParams.depthClearValue = depth;
-    clearParams.clearStencil = true;
-    clearParams.stencilClearValue = stencil;
+    clearParams.clearDepth        = true;
+    clearParams.depthValue        = depth;
+    clearParams.clearStencil      = true;
+    clearParams.stencilValue      = stencil;
 
     return clearImpl(context, clearParams);
 }