Add TextureD3D::getIndex.

This is a simple virtual method which gives an ImageIndex at a
particular level and layer. It's useful for handling all the texture
types uniformly, which all treat levels and layers differently.

BUG=angle:729

Change-Id: I72db560287272c195b1ff8555f99ab2258ac7e6d
Reviewed-on: https://chromium-review.googlesource.com/219835
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libGLESv2/renderer/d3d/TextureD3D.cpp b/src/libGLESv2/renderer/d3d/TextureD3D.cpp
index e522b85..447254e 100644
--- a/src/libGLESv2/renderer/d3d/TextureD3D.cpp
+++ b/src/libGLESv2/renderer/d3d/TextureD3D.cpp
@@ -744,6 +744,12 @@
     return gl::ImageIndexIterator::Make2D(0, mTexStorage->getLevelCount());
 }
 
+gl::ImageIndex TextureD3D_2D::getImageIndex(GLint mip, GLint /*layer*/) const
+{
+    // "layer" does not apply to 2D Textures.
+    return gl::ImageIndex::Make2D(mip);
+}
+
 TextureD3D_Cube::TextureD3D_Cube(Renderer *renderer)
     : TextureD3D(renderer),
       mTexStorage(NULL)
@@ -1254,6 +1260,12 @@
     return gl::ImageIndexIterator::MakeCube(0, mTexStorage->getLevelCount());
 }
 
+gl::ImageIndex TextureD3D_Cube::getImageIndex(GLint mip, GLint layer) const
+{
+    // The "layer" of the image index corresponds to the cube face
+    return gl::ImageIndex::MakeCube(gl::TextureCubeMap::layerIndexToTarget(layer), mip);
+}
+
 TextureD3D_3D::TextureD3D_3D(Renderer *renderer)
     : TextureD3D(renderer),
       mTexStorage(NULL)
@@ -1753,6 +1765,12 @@
                                           gl::ImageIndex::ENTIRE_LEVEL, gl::ImageIndex::ENTIRE_LEVEL);
 }
 
+gl::ImageIndex TextureD3D_3D::getImageIndex(GLint mip, GLint /*layer*/) const
+{
+    // The "layer" here does not apply to 3D images. We use one Image per mip.
+    return gl::ImageIndex::Make3D(mip);
+}
+
 TextureD3D_2DArray::TextureD3D_2DArray(Renderer *renderer)
     : TextureD3D(renderer),
       mTexStorage(NULL)
@@ -2275,4 +2293,9 @@
     return gl::ImageIndexIterator::Make2DArray(0, mTexStorage->getLevelCount(), mLayerCounts);
 }
 
+gl::ImageIndex TextureD3D_2DArray::getImageIndex(GLint mip, GLint layer) const
+{
+    return gl::ImageIndex::Make2DArray(mip, layer);
+}
+
 }