Remove getData from BufferImpl.

We only ever call this method inside the D3D Renderer, so we can
downcast to BufferD3D and call getData on the D3D-specific type.

Leave a FIXME for handling index range validation, which will
need a CPU-side data cache.

Change-Id: Iaf71bc8055869a8561777b6b36f67e376a1d0b81
Reviewed-on: https://chromium-review.googlesource.com/224654
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libGLESv2/validationES.cpp b/src/libGLESv2/validationES.cpp
index d0b2331..22cd680 100644
--- a/src/libGLESv2/validationES.cpp
+++ b/src/libGLESv2/validationES.cpp
@@ -24,6 +24,9 @@
 #include "common/mathutil.h"
 #include "common/utilities.h"
 
+// FIXME(jmadill): remove this when we support buffer data caching
+#include "libGLESv2/renderer/d3d/BufferD3D.h"
+
 namespace gl
 {
 
@@ -1671,8 +1674,10 @@
         uintptr_t offset = reinterpret_cast<uintptr_t>(indices);
         if (!elementArrayBuffer->getIndexRangeCache()->findRange(type, offset, count, indexRangeOut, NULL))
         {
+            // FIXME(jmadill): Use buffer data caching instead of the D3D back-end
+            rx::BufferD3D *bufferD3D = rx::BufferD3D::makeBufferD3D(elementArrayBuffer->getImplementation());
             const uint8_t *dataPointer = NULL;
-            Error error = elementArrayBuffer->getImplementation()->getData(&dataPointer);
+            Error error = bufferD3D->getData(&dataPointer);
             if (error.isError())
             {
                 context->recordError(error);