Commit cb83dc16 by Jamie Madill

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/219835Tested-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent ef4ac5b1
...@@ -744,6 +744,12 @@ gl::ImageIndexIterator TextureD3D_2D::imageIterator() const ...@@ -744,6 +744,12 @@ gl::ImageIndexIterator TextureD3D_2D::imageIterator() const
return gl::ImageIndexIterator::Make2D(0, mTexStorage->getLevelCount()); 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_Cube::TextureD3D_Cube(Renderer *renderer)
: TextureD3D(renderer), : TextureD3D(renderer),
mTexStorage(NULL) mTexStorage(NULL)
...@@ -1254,6 +1260,12 @@ gl::ImageIndexIterator TextureD3D_Cube::imageIterator() const ...@@ -1254,6 +1260,12 @@ gl::ImageIndexIterator TextureD3D_Cube::imageIterator() const
return gl::ImageIndexIterator::MakeCube(0, mTexStorage->getLevelCount()); 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_3D::TextureD3D_3D(Renderer *renderer)
: TextureD3D(renderer), : TextureD3D(renderer),
mTexStorage(NULL) mTexStorage(NULL)
...@@ -1753,6 +1765,12 @@ gl::ImageIndexIterator TextureD3D_3D::imageIterator() const ...@@ -1753,6 +1765,12 @@ gl::ImageIndexIterator TextureD3D_3D::imageIterator() const
gl::ImageIndex::ENTIRE_LEVEL, gl::ImageIndex::ENTIRE_LEVEL); 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_2DArray::TextureD3D_2DArray(Renderer *renderer)
: TextureD3D(renderer), : TextureD3D(renderer),
mTexStorage(NULL) mTexStorage(NULL)
...@@ -2275,4 +2293,9 @@ gl::ImageIndexIterator TextureD3D_2DArray::imageIterator() const ...@@ -2275,4 +2293,9 @@ gl::ImageIndexIterator TextureD3D_2DArray::imageIterator() const
return gl::ImageIndexIterator::Make2DArray(0, mTexStorage->getLevelCount(), mLayerCounts); return gl::ImageIndexIterator::Make2DArray(0, mTexStorage->getLevelCount(), mLayerCounts);
} }
gl::ImageIndex TextureD3D_2DArray::getImageIndex(GLint mip, GLint layer) const
{
return gl::ImageIndex::Make2DArray(mip, layer);
}
} }
...@@ -54,6 +54,10 @@ class TextureD3D : public TextureImpl ...@@ -54,6 +54,10 @@ class TextureD3D : public TextureImpl
// Returns an iterator over all "Images" for this particular Texture. // Returns an iterator over all "Images" for this particular Texture.
virtual gl::ImageIndexIterator imageIterator() const = 0; virtual gl::ImageIndexIterator imageIterator() const = 0;
// Returns an ImageIndex for a particular "Image". 3D Textures do not have images for
// slices of their depth texures, so 3D textures ignore the layer parameter.
virtual gl::ImageIndex getImageIndex(GLint mip, GLint layer) const = 0;
protected: protected:
void setImage(const gl::PixelUnpackState &unpack, GLenum type, const void *pixels, Image *image); 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, bool subImage(GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth,
...@@ -119,6 +123,7 @@ class TextureD3D_2D : public TextureD3D ...@@ -119,6 +123,7 @@ class TextureD3D_2D : public TextureD3D
virtual unsigned int getRenderTargetSerial(const gl::ImageIndex &index); virtual unsigned int getRenderTargetSerial(const gl::ImageIndex &index);
virtual gl::ImageIndexIterator imageIterator() const; virtual gl::ImageIndexIterator imageIterator() const;
virtual gl::ImageIndex getImageIndex(GLint mip, GLint layer) const;
private: private:
DISALLOW_COPY_AND_ASSIGN(TextureD3D_2D); DISALLOW_COPY_AND_ASSIGN(TextureD3D_2D);
...@@ -178,6 +183,7 @@ class TextureD3D_Cube : public TextureD3D ...@@ -178,6 +183,7 @@ class TextureD3D_Cube : public TextureD3D
virtual unsigned int getRenderTargetSerial(const gl::ImageIndex &index); virtual unsigned int getRenderTargetSerial(const gl::ImageIndex &index);
virtual gl::ImageIndexIterator imageIterator() const; virtual gl::ImageIndexIterator imageIterator() const;
virtual gl::ImageIndex getImageIndex(GLint mip, GLint layer) const;
private: private:
DISALLOW_COPY_AND_ASSIGN(TextureD3D_Cube); DISALLOW_COPY_AND_ASSIGN(TextureD3D_Cube);
...@@ -237,6 +243,7 @@ class TextureD3D_3D : public TextureD3D ...@@ -237,6 +243,7 @@ class TextureD3D_3D : public TextureD3D
virtual unsigned int getRenderTargetSerial(const gl::ImageIndex &index); virtual unsigned int getRenderTargetSerial(const gl::ImageIndex &index);
virtual gl::ImageIndexIterator imageIterator() const; virtual gl::ImageIndexIterator imageIterator() const;
virtual gl::ImageIndex getImageIndex(GLint mip, GLint layer) const;
private: private:
DISALLOW_COPY_AND_ASSIGN(TextureD3D_3D); DISALLOW_COPY_AND_ASSIGN(TextureD3D_3D);
...@@ -295,6 +302,7 @@ class TextureD3D_2DArray : public TextureD3D ...@@ -295,6 +302,7 @@ class TextureD3D_2DArray : public TextureD3D
virtual unsigned int getRenderTargetSerial(const gl::ImageIndex &index); virtual unsigned int getRenderTargetSerial(const gl::ImageIndex &index);
virtual gl::ImageIndexIterator imageIterator() const; virtual gl::ImageIndexIterator imageIterator() const;
virtual gl::ImageIndex getImageIndex(GLint mip, GLint layer) const;
private: private:
DISALLOW_COPY_AND_ASSIGN(TextureD3D_2DArray); DISALLOW_COPY_AND_ASSIGN(TextureD3D_2DArray);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment