From feda4d294070333234b64a837eae2ba166f153a1 Mon Sep 17 00:00:00 2001 From: Jamie Madill Date: Wed, 17 Sep 2014 13:03:29 -0400 Subject: Accept ImageIndex in TextureD3D::subImage and getImage. This paves the way for setting data on the TextureStorage directly instead of working through the Image objects. BUG=angle:741 Change-Id: I3be3d5f9b2e45707c1630b74ad3f4789e034c3fd Reviewed-on: https://chromium-review.googlesource.com/218311 Reviewed-by: Geoff Lang Tested-by: Jamie Madill --- src/libGLESv2/renderer/d3d/TextureD3D.cpp | 48 +++++++++++++++++++++++++++---- src/libGLESv2/renderer/d3d/TextureD3D.h | 6 +++- 2 files changed, 48 insertions(+), 6 deletions(-) (limited to 'src/libGLESv2/renderer/d3d') diff --git a/src/libGLESv2/renderer/d3d/TextureD3D.cpp b/src/libGLESv2/renderer/d3d/TextureD3D.cpp index 5e29e4b4..06803eaf 100644 --- a/src/libGLESv2/renderer/d3d/TextureD3D.cpp +++ b/src/libGLESv2/renderer/d3d/TextureD3D.cpp @@ -121,7 +121,7 @@ void TextureD3D::setImage(const gl::PixelUnpackState &unpack, GLenum type, const } bool TextureD3D::subImage(GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, - GLenum format, GLenum type, const gl::PixelUnpackState &unpack, const void *pixels, Image *image) + GLenum format, GLenum type, const gl::PixelUnpackState &unpack, const void *pixels, const gl::ImageIndex &index) { const void *pixelData = pixels; @@ -138,6 +138,9 @@ bool TextureD3D::subImage(GLint xoffset, GLint yoffset, GLint zoffset, GLsizei w if (pixelData != NULL) { + Image *image = getImage(index); + ASSERT(image); + image->loadData(xoffset, yoffset, zoffset, width, height, depth, unpack.alignment, type, pixelData); mDirtyImages = true; } @@ -238,6 +241,14 @@ Image *TextureD3D_2D::getImage(int level, int layer) const return mImageArray[level]; } +Image *TextureD3D_2D::getImage(const gl::ImageIndex &index) const +{ + ASSERT(index.mipIndex < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS); + ASSERT(index.layerIndex == 0); + ASSERT(index.type == GL_TEXTURE_2D); + return mImageArray[index.mipIndex]; +} + GLsizei TextureD3D_2D::getLayerCount(int level) const { ASSERT(level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS); @@ -343,7 +354,8 @@ void TextureD3D_2D::subImage(GLenum target, GLint level, GLint xoffset, GLint yo } } - if (!fastUnpacked && TextureD3D::subImage(xoffset, yoffset, 0, width, height, 1, format, type, unpack, pixels, mImageArray[level])) + gl::ImageIndex index = gl::ImageIndex::Make2D(level); + if (!fastUnpacked && TextureD3D::subImage(xoffset, yoffset, 0, width, height, 1, format, type, unpack, pixels, index)) { commitRect(level, xoffset, yoffset, width, height); } @@ -759,6 +771,13 @@ Image *TextureD3D_Cube::getImage(int level, int layer) const return mImageArray[layer][level]; } +Image *TextureD3D_Cube::getImage(const gl::ImageIndex &index) const +{ + ASSERT(index.mipIndex < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS); + ASSERT(index.layerIndex < 6); + return mImageArray[index.layerIndex][index.mipIndex]; +} + GLsizei TextureD3D_Cube::getLayerCount(int level) const { ASSERT(level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS); @@ -808,7 +827,8 @@ void TextureD3D_Cube::subImage(GLenum target, GLint level, GLint xoffset, GLint int faceIndex = gl::TextureCubeMap::targetToLayerIndex(target); - if (TextureD3D::subImage(xoffset, yoffset, 0, width, height, 1, format, type, unpack, pixels, mImageArray[faceIndex][level])) + gl::ImageIndex index = gl::ImageIndex::MakeCube(target, level); + if (TextureD3D::subImage(xoffset, yoffset, 0, width, height, 1, format, type, unpack, pixels, index)) { commitRect(faceIndex, level, xoffset, yoffset, width, height); } @@ -1251,6 +1271,14 @@ Image *TextureD3D_3D::getImage(int level, int layer) const return mImageArray[level]; } +Image *TextureD3D_3D::getImage(const gl::ImageIndex &index) const +{ + ASSERT(index.mipIndex < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS); + ASSERT(index.layerIndex == 0); + ASSERT(index.type == GL_TEXTURE_3D); + return mImageArray[index.mipIndex]; +} + GLsizei TextureD3D_3D::getLayerCount(int level) const { ASSERT(level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS); @@ -1356,7 +1384,8 @@ void TextureD3D_3D::subImage(GLenum target, GLint level, GLint xoffset, GLint yo } } - if (!fastUnpacked && TextureD3D::subImage(xoffset, yoffset, zoffset, width, height, depth, format, type, unpack, pixels, mImageArray[level])) + gl::ImageIndex index = gl::ImageIndex::Make3D(level); + if (!fastUnpacked && TextureD3D::subImage(xoffset, yoffset, zoffset, width, height, depth, format, type, unpack, pixels, index)) { commitRect(level, xoffset, yoffset, zoffset, width, height, depth); } @@ -1740,6 +1769,14 @@ Image *TextureD3D_2DArray::getImage(int level, int layer) const return mImageArray[level][layer]; } +Image *TextureD3D_2DArray::getImage(const gl::ImageIndex &index) const +{ + ASSERT(index.mipIndex < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS); + ASSERT(index.layerIndex < mLayerCounts[index.mipIndex]); + ASSERT(index.type == GL_TEXTURE_2D_ARRAY); + return mImageArray[index.mipIndex][index.layerIndex]; +} + GLsizei TextureD3D_2DArray::getLayerCount(int level) const { ASSERT(level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS); @@ -1818,7 +1855,8 @@ void TextureD3D_2DArray::subImage(GLenum target, GLint level, GLint xoffset, GLi int layer = zoffset + i; const void *layerPixels = pixels ? (reinterpret_cast(pixels) + (inputDepthPitch * i)) : NULL; - if (TextureD3D::subImage(xoffset, yoffset, zoffset, width, height, 1, format, type, unpack, layerPixels, mImageArray[level][layer])) + gl::ImageIndex index = gl::ImageIndex::Make2DArray(level, layer); + if (TextureD3D::subImage(xoffset, yoffset, zoffset, width, height, 1, format, type, unpack, layerPixels, index)) { commitRect(level, xoffset, yoffset, layer, width, height); } diff --git a/src/libGLESv2/renderer/d3d/TextureD3D.h b/src/libGLESv2/renderer/d3d/TextureD3D.h index e8fbe846..1ede45e2 100644 --- a/src/libGLESv2/renderer/d3d/TextureD3D.h +++ b/src/libGLESv2/renderer/d3d/TextureD3D.h @@ -58,7 +58,7 @@ class TextureD3D : public TextureImpl protected: void setImage(const gl::PixelUnpackState &unpack, GLenum type, const void *pixels, Image *image); bool subImage(GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, - GLenum format, GLenum type, const gl::PixelUnpackState &unpack, const void *pixels, Image *image); + GLenum format, GLenum type, const gl::PixelUnpackState &unpack, const void *pixels, const gl::ImageIndex &index); void setCompressedImage(GLsizei imageSize, const void *pixels, Image *image); bool subImageCompressed(GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *pixels, Image *image); @@ -94,6 +94,7 @@ class TextureD3D_2D : public TextureD3D virtual ~TextureD3D_2D(); virtual Image *getImage(int level, int layer) const; + virtual Image *getImage(const gl::ImageIndex &index) const; virtual GLsizei getLayerCount(int level) const; GLsizei getWidth(GLint level) const; @@ -149,6 +150,7 @@ class TextureD3D_Cube : public TextureD3D virtual ~TextureD3D_Cube(); virtual Image *getImage(int level, int layer) const; + virtual Image *getImage(const gl::ImageIndex &index) const; virtual GLsizei getLayerCount(int level) const; virtual bool hasDirtyImages() const { return mDirtyImages; } @@ -206,6 +208,7 @@ class TextureD3D_3D : public TextureD3D virtual ~TextureD3D_3D(); virtual Image *getImage(int level, int layer) const; + virtual Image *getImage(const gl::ImageIndex &index) const; virtual GLsizei getLayerCount(int level) const; GLsizei getWidth(GLint level) const; @@ -262,6 +265,7 @@ class TextureD3D_2DArray : public TextureD3D virtual ~TextureD3D_2DArray(); virtual Image *getImage(int level, int layer) const; + virtual Image *getImage(const gl::ImageIndex &index) const; virtual GLsizei getLayerCount(int level) const; GLsizei getWidth(GLint level) const; -- cgit v1.2.3