Commit 6b19b002 by Brandon Jones

Removing D3D-isms from gl::Texture

BUG=angle:688 Change-Id: I0cdc758000993f2d54240c69a84f5ae149306d9e Reviewed-on: https://chromium-review.googlesource.com/209332Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Tested-by: 's avatarBrandon Jones <bajones@chromium.org>
parent 07d49ef5
......@@ -1508,13 +1508,11 @@ void Context::applyTextures(SamplerType shaderType, Texture *textures[], Texture
{
mRenderer->setSamplerState(shaderType, samplerIndex, sampler);
mRenderer->setTexture(shaderType, samplerIndex, texture);
texture->resetDirty();
}
else
{
Texture *incompleteTexture = getIncompleteTexture(textureType);
mRenderer->setTexture(shaderType, samplerIndex, incompleteTexture);
incompleteTexture->resetDirty();
}
}
else
......
......@@ -20,7 +20,6 @@
#include "libGLESv2/renderer/d3d/TextureStorage.h"
#include "libEGL/Surface.h"
#include "libGLESv2/renderer/RenderTarget.h"
#include "libGLESv2/renderer/TextureImpl.h"
namespace gl
{
......@@ -89,6 +88,22 @@ GLenum Texture::getBaseLevelInternalFormat() const
return (baseImage ? baseImage->getInternalFormat() : GL_NONE);
}
// Tests for texture sampling completeness
bool Texture::isSamplerComplete(const SamplerState &samplerState) const
{
return getImplementation()->isSamplerComplete(samplerState);
}
rx::TextureStorageInterface *Texture::getNativeTexture()
{
return getImplementation()->getNativeTexture();
}
void Texture::copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source)
{
getImplementation()->copySubImage(target, level, xoffset, yoffset, zoffset, x, y, width, height, source);
}
unsigned int Texture::getTextureSerial()
{
rx::TextureStorageInterface *texture = getNativeTexture();
......@@ -128,27 +143,12 @@ Texture2D::~Texture2D()
}
}
rx::TextureStorageInterface *Texture2D::getNativeTexture()
{
return mTexture->getNativeTexture();
}
void Texture2D::setUsage(GLenum usage)
{
mUsage = usage;
mTexture->setUsage(usage);
}
bool Texture2D::hasDirtyImages() const
{
return mTexture->hasDirtyImages();
}
void Texture2D::resetDirty()
{
mTexture->resetDirty();
}
GLsizei Texture2D::getWidth(GLint level) const
{
if (level < IMPLEMENTATION_MAX_TEXTURE_LEVELS)
......@@ -245,11 +245,6 @@ void Texture2D::copyImage(GLint level, GLenum format, GLint x, GLint y, GLsizei
mTexture->copyImage(level, format, x, y, width, height, source);
}
void Texture2D::copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source)
{
mTexture->copySubImage(target, level, xoffset, yoffset, zoffset, x, y, width, height, source);
}
void Texture2D::storage(GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)
{
mImmutable = true;
......@@ -257,12 +252,6 @@ void Texture2D::storage(GLsizei levels, GLenum internalformat, GLsizei width, GL
mTexture->storage(levels, internalformat, width, height);
}
// Tests for 2D texture sampling completeness. [OpenGL ES 2.0.24] section 3.8.2 page 85.
bool Texture2D::isSamplerComplete(const SamplerState &samplerState) const
{
return mTexture->isSamplerComplete(samplerState);
}
bool Texture2D::isCompressed(GLint level) const
{
return IsFormatCompressed(getInternalFormat(level));
......@@ -318,27 +307,12 @@ TextureCubeMap::~TextureCubeMap()
SafeDelete(mTexture);
}
rx::TextureStorageInterface *TextureCubeMap::getNativeTexture()
{
return mTexture->getNativeTexture();
}
void TextureCubeMap::setUsage(GLenum usage)
{
mUsage = usage;
mTexture->setUsage(usage);
}
bool TextureCubeMap::hasDirtyImages() const
{
return mTexture->hasDirtyImages();
}
void TextureCubeMap::resetDirty()
{
mTexture->resetDirty();
}
GLsizei TextureCubeMap::getWidth(GLenum target, GLint level) const
{
if (level < IMPLEMENTATION_MAX_TEXTURE_LEVELS)
......@@ -416,12 +390,6 @@ void TextureCubeMap::subImageCompressed(GLenum target, GLint level, GLint xoffse
mTexture->subImageCompressed(target, level, xoffset, yoffset, width, height, format, imageSize, pixels);
}
// Tests for cube map sampling completeness. [OpenGL ES 2.0.24] section 3.8.2 page 86.
bool TextureCubeMap::isSamplerComplete(const SamplerState &samplerState) const
{
return mTexture->isSamplerComplete(samplerState);
}
// Tests for cube texture completeness. [OpenGL ES 2.0.24] section 3.7.10 page 81.
bool TextureCubeMap::isCubeComplete() const
{
......@@ -443,11 +411,6 @@ void TextureCubeMap::copyImage(GLenum target, GLint level, GLenum format, GLint
mTexture->copyImage(target, level, format, x, y, width, height, source);
}
void TextureCubeMap::copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source)
{
mTexture->copySubImage(target, level, xoffset, yoffset, zoffset, x, y, width, height, source);
}
void TextureCubeMap::storage(GLsizei levels, GLenum internalformat, GLsizei size)
{
mImmutable = true;
......@@ -493,27 +456,12 @@ Texture3D::~Texture3D()
SafeDelete(mTexture);
}
rx::TextureStorageInterface *Texture3D::getNativeTexture()
{
return mTexture->getNativeTexture();
}
void Texture3D::setUsage(GLenum usage)
{
mUsage = usage;
mTexture->setUsage(usage);
}
bool Texture3D::hasDirtyImages() const
{
return mTexture->hasDirtyImages();
}
void Texture3D::resetDirty()
{
mTexture->resetDirty();
}
GLsizei Texture3D::getWidth(GLint level) const
{
return (level < IMPLEMENTATION_MAX_TEXTURE_LEVELS) ? mTexture->getImage(level)->getWidth() : 0;
......@@ -586,30 +534,11 @@ const rx::Image *Texture3D::getBaseLevelImage() const
return mTexture->getImage(0);
}
void Texture3D::copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source)
{
mTexture->copySubImage(target, level, xoffset, yoffset, zoffset, x, y, width, height, source);
}
bool Texture3D::isSamplerComplete(const SamplerState &samplerState) const
{
return mTexture->isSamplerComplete(samplerState);
}
bool Texture3D::isMipmapComplete() const
{
return mTexture->isMipmapComplete();
}
unsigned int Texture3D::getRenderTargetSerial(GLint level, GLint layer)
{
return mTexture->getRenderTargetSerial(level, layer);
}
rx::RenderTarget *Texture3D::getRenderTarget(GLint level)
{
return mTexture->getRenderTarget(level);
}
rx::RenderTarget *Texture3D::getRenderTarget(GLint level, GLint layer)
{
......@@ -632,27 +561,12 @@ Texture2DArray::~Texture2DArray()
SafeDelete(mTexture);
}
rx::TextureStorageInterface *Texture2DArray::getNativeTexture()
{
return mTexture->getNativeTexture();
}
void Texture2DArray::setUsage(GLenum usage)
{
mUsage = usage;
mTexture->setUsage(usage);
}
bool Texture2DArray::hasDirtyImages() const
{
return mTexture->hasDirtyImages();
}
void Texture2DArray::resetDirty()
{
mTexture->resetDirty();
}
GLsizei Texture2DArray::getWidth(GLint level) const
{
return (level < IMPLEMENTATION_MAX_TEXTURE_LEVELS && mTexture->getLayerCount(level) > 0) ? mTexture->getImage(level, 0)->getWidth() : 0;
......@@ -725,21 +639,6 @@ const rx::Image *Texture2DArray::getBaseLevelImage() const
return (mTexture->getLayerCount(0) > 0 ? mTexture->getImage(0, 0) : NULL);
}
void Texture2DArray::copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source)
{
mTexture->copySubImage(target, level, xoffset, yoffset, zoffset, x, y, width, height, source);
}
bool Texture2DArray::isSamplerComplete(const SamplerState &samplerState) const
{
return mTexture->isSamplerComplete(samplerState);
}
bool Texture2DArray::isMipmapComplete() const
{
return mTexture->isMipmapComplete();
}
unsigned int Texture2DArray::getRenderTargetSerial(GLint level, GLint layer)
{
return mTexture->getRenderTargetSerial(level, layer);
......
......@@ -19,6 +19,7 @@
#include "common/RefCountObject.h"
#include "libGLESv2/angletypes.h"
#include "libGLESv2/constants.h"
#include "libGLESv2/renderer/TextureImpl.h"
namespace egl
{
......@@ -27,10 +28,6 @@ class Surface;
namespace rx
{
class Texture2DImpl;
class TextureCubeImpl;
class Texture3DImpl;
class Texture2DArrayImpl;
class TextureStorageInterface;
class RenderTarget;
class Image;
......@@ -62,20 +59,21 @@ class Texture : public RefCountObject
GLint getBaseLevelDepth() const;
GLenum getBaseLevelInternalFormat() const;
virtual bool isSamplerComplete(const SamplerState &samplerState) const = 0;
bool isSamplerComplete(const SamplerState &samplerState) const;
virtual rx::TextureStorageInterface *getNativeTexture() = 0;
rx::TextureStorageInterface *getNativeTexture();
virtual void generateMipmaps() = 0;
virtual void copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source) = 0;
virtual void copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source);
virtual bool hasDirtyImages() const = 0;
virtual void resetDirty() = 0;
unsigned int getTextureSerial();
bool isImmutable() const;
int immutableLevelCount();
virtual rx::TextureImpl *getImplementation() = 0;
virtual const rx::TextureImpl *getImplementation() const = 0;
static const GLuint INCOMPLETE_TEXTURE_ID = static_cast<GLuint>(-1); // Every texture takes an id at creation time. The value is arbitrary because it is never registered with the resource manager.
protected:
......@@ -101,10 +99,7 @@ class Texture2D : public Texture
~Texture2D();
virtual rx::TextureStorageInterface *getNativeTexture();
virtual void setUsage(GLenum usage);
virtual bool hasDirtyImages() const;
virtual void resetDirty();
GLsizei getWidth(GLint level) const;
GLsizei getHeight(GLint level) const;
......@@ -118,10 +113,8 @@ class Texture2D : public Texture
void subImage(GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const PixelUnpackState &unpack, const void *pixels);
void subImageCompressed(GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *pixels);
void copyImage(GLint level, GLenum format, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source);
virtual void copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source);
void storage(GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
virtual bool isSamplerComplete(const SamplerState &samplerState) const;
virtual void bindTexImage(egl::Surface *surface);
virtual void releaseTexImage();
......@@ -129,6 +122,9 @@ class Texture2D : public Texture
unsigned int getRenderTargetSerial(GLint level);
virtual rx::TextureImpl *getImplementation() { return mTexture; }
virtual const rx::TextureImpl *getImplementation() const { return mTexture; }
protected:
friend class Texture2DAttachment;
rx::RenderTarget *getRenderTarget(GLint level);
......@@ -152,10 +148,7 @@ class TextureCubeMap : public Texture
~TextureCubeMap();
virtual rx::TextureStorageInterface *getNativeTexture();
virtual void setUsage(GLenum usage);
virtual bool hasDirtyImages() const;
virtual void resetDirty();
GLsizei getWidth(GLenum target, GLint level) const;
GLsizei getHeight(GLenum target, GLint level) const;
......@@ -176,16 +169,17 @@ class TextureCubeMap : public Texture
void subImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const PixelUnpackState &unpack, const void *pixels);
void subImageCompressed(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *pixels);
void copyImage(GLenum target, GLint level, GLenum format, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source);
virtual void copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source);
void storage(GLsizei levels, GLenum internalformat, GLsizei size);
virtual bool isSamplerComplete(const SamplerState &samplerState) const;
bool isCubeComplete() const;
virtual void generateMipmaps();
unsigned int getRenderTargetSerial(GLenum target, GLint level);
virtual rx::TextureImpl *getImplementation() { return mTexture; }
virtual const rx::TextureImpl *getImplementation() const { return mTexture; }
protected:
friend class TextureCubeMapAttachment;
rx::RenderTarget *getRenderTarget(GLenum target, GLint level);
......@@ -206,10 +200,7 @@ class Texture3D : public Texture
~Texture3D();
virtual rx::TextureStorageInterface *getNativeTexture();
virtual void setUsage(GLenum usage);
virtual bool hasDirtyImages() const;
virtual void resetDirty();
GLsizei getWidth(GLint level) const;
GLsizei getHeight(GLint level) const;
......@@ -226,16 +217,14 @@ class Texture3D : public Texture
void storage(GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
virtual void generateMipmaps();
virtual void copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source);
virtual bool isSamplerComplete(const SamplerState &samplerState) const;
virtual bool isMipmapComplete() const;
unsigned int getRenderTargetSerial(GLint level, GLint layer);
virtual rx::TextureImpl *getImplementation() { return mTexture; }
virtual const rx::TextureImpl *getImplementation() const { return mTexture; }
protected:
friend class Texture3DAttachment;
rx::RenderTarget *getRenderTarget(GLint level);
rx::RenderTarget *getRenderTarget(GLint level, GLint layer);
rx::RenderTarget *getDepthStencil(GLint level, GLint layer);
......@@ -254,10 +243,7 @@ class Texture2DArray : public Texture
~Texture2DArray();
virtual rx::TextureStorageInterface *getNativeTexture();
virtual void setUsage(GLenum usage);
virtual bool hasDirtyImages() const;
virtual void resetDirty();
GLsizei getWidth(GLint level) const;
GLsizei getHeight(GLint level) const;
......@@ -274,13 +260,12 @@ class Texture2DArray : public Texture
void storage(GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
virtual void generateMipmaps();
virtual void copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source);
virtual bool isSamplerComplete(const SamplerState &samplerState) const;
virtual bool isMipmapComplete() const;
unsigned int getRenderTargetSerial(GLint level, GLint layer);
virtual rx::TextureImpl *getImplementation() { return mTexture; }
virtual const rx::TextureImpl *getImplementation() const { return mTexture; }
protected:
friend class Texture2DArrayAttachment;
rx::RenderTarget *getRenderTarget(GLint level, GLint layer);
......
......@@ -31,23 +31,30 @@ class RenderTarget;
class Renderer;
class TextureStorageInterface;
class Texture2DImpl
class TextureImpl
{
public:
virtual ~Texture2DImpl() {}
// TODO: If this methods could go away that would be ideal;
// TextureStorage should only be necessary for the D3D backend, and as such
// higher level code should not rely on it.
virtual TextureStorageInterface *getNativeTexture() = 0;
virtual Image *getImage(int level) const = 0;
virtual void setUsage(GLenum usage) = 0;
virtual bool hasDirtyImages() const = 0;
virtual void resetDirty() = 0;
virtual bool isSamplerComplete(const gl::SamplerState &samplerState) const = 0;
virtual void copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, gl::Framebuffer *source) = 0;
virtual void generateMipmaps() = 0;
};
class Texture2DImpl : public TextureImpl
{
public:
virtual ~Texture2DImpl() {}
virtual Image *getImage(int level) const = 0;
virtual void bindTexImage(egl::Surface *surface) = 0;
virtual void releaseTexImage() = 0;
......@@ -56,9 +63,7 @@ class Texture2DImpl
virtual void subImage(GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const gl::PixelUnpackState &unpack, const void *pixels) = 0;
virtual void subImageCompressed(GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *pixels) = 0;
virtual void copyImage(GLint level, GLenum format, GLint x, GLint y, GLsizei width, GLsizei height, gl::Framebuffer *source) = 0;
virtual void copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, gl::Framebuffer *source) = 0;
virtual void storage(GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height) = 0;
virtual void generateMipmaps() = 0;
virtual unsigned int getRenderTargetSerial(GLint level) = 0;
......@@ -68,20 +73,13 @@ class Texture2DImpl
virtual void redefineImage(GLint level, GLenum internalformat, GLsizei width, GLsizei height) = 0;
};
class TextureCubeImpl
class TextureCubeImpl : public TextureImpl
{
public:
virtual ~TextureCubeImpl() {}
virtual TextureStorageInterface *getNativeTexture() = 0;
virtual Image *getImage(GLenum target, int level) const = 0;
virtual void setUsage(GLenum usage) = 0;
virtual bool hasDirtyImages() const = 0;
virtual void resetDirty() = 0;
virtual bool isSamplerComplete(const gl::SamplerState &samplerState) const = 0;
virtual bool isCubeComplete() const = 0;
virtual void setImage(int faceIndex, GLint level, GLsizei width, GLsizei height, GLenum internalFormat, GLenum format, GLenum type, const gl::PixelUnpackState &unpack, const void *pixels) = 0;
......@@ -89,9 +87,7 @@ class TextureCubeImpl
virtual void subImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const gl::PixelUnpackState &unpack, const void *pixels) = 0;
virtual void subImageCompressed(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *pixels) = 0;
virtual void copyImage(GLenum target, GLint level, GLenum format, GLint x, GLint y, GLsizei width, GLsizei height, gl::Framebuffer *source) = 0;
virtual void copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, gl::Framebuffer *source) = 0;
virtual void storage(GLsizei levels, GLenum internalformat, GLsizei size) = 0;
virtual void generateMipmaps() = 0;
virtual unsigned int getRenderTargetSerial(GLenum target, GLint level) = 0;
......@@ -99,61 +95,38 @@ class TextureCubeImpl
virtual RenderTarget *getDepthStencil(GLenum target, GLint level) = 0;
};
class Texture3DImpl
class Texture3DImpl : public TextureImpl
{
public:
virtual ~Texture3DImpl() {}
virtual TextureStorageInterface *getNativeTexture() = 0;
virtual Image *getImage(int level) const = 0;
virtual void setUsage(GLenum usage) = 0;
virtual bool hasDirtyImages() const = 0;
virtual void resetDirty() = 0;
virtual bool isSamplerComplete(const gl::SamplerState &samplerState) const = 0;
virtual bool isMipmapComplete() const = 0;
virtual void setImage(GLint level, GLsizei width, GLsizei height, GLsizei depth, GLenum internalFormat, GLenum format, GLenum type, const gl::PixelUnpackState &unpack, const void *pixels) = 0;
virtual void setCompressedImage(GLint level, GLenum format, GLsizei width, GLsizei height, GLsizei depth, GLsizei imageSize, const void *pixels) = 0;
virtual void subImage(GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const gl::PixelUnpackState &unpack, const void *pixels) = 0;
virtual void subImageCompressed(GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *pixels) = 0;
virtual void copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, gl::Framebuffer *source) = 0;
virtual void storage(GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth) = 0;
virtual void generateMipmaps() = 0;
virtual unsigned int getRenderTargetSerial(GLint level, GLint layer) = 0;
virtual RenderTarget *getRenderTarget(GLint level) = 0;
virtual RenderTarget *getRenderTarget(GLint level, GLint layer) = 0;
virtual RenderTarget *getDepthStencil(GLint level, GLint layer) = 0;
};
class Texture2DArrayImpl
class Texture2DArrayImpl : public TextureImpl
{
public:
virtual ~Texture2DArrayImpl() {}
virtual TextureStorageInterface *getNativeTexture() = 0;
virtual Image *getImage(int level, int layer) const = 0;
virtual GLsizei getLayerCount(int level) const = 0;
virtual void setUsage(GLenum usage) = 0;
virtual bool hasDirtyImages() const = 0;
virtual void resetDirty() = 0;
virtual bool isSamplerComplete(const gl::SamplerState &samplerState) const = 0;
virtual bool isMipmapComplete() const = 0;
virtual void setImage(GLint level, GLsizei width, GLsizei height, GLsizei depth, GLenum internalFormat, GLenum format, GLenum type, const gl::PixelUnpackState &unpack, const void *pixels) = 0;
virtual void setCompressedImage(GLint level, GLenum format, GLsizei width, GLsizei height, GLsizei depth, GLsizei imageSize, const void *pixels) = 0;
virtual void subImage(GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const gl::PixelUnpackState &unpack, const void *pixels) = 0;
virtual void subImageCompressed(GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *pixels) = 0;
virtual void copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, gl::Framebuffer *source) = 0;
virtual void storage(GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth) = 0;
virtual void generateMipmaps() = 0;
virtual unsigned int getRenderTargetSerial(GLint level, GLint layer) = 0;
......
......@@ -58,6 +58,12 @@ TextureD3D::~TextureD3D()
{
}
TextureD3D *TextureD3D::makeTextureD3D(TextureImpl *texture)
{
ASSERT(HAS_DYNAMIC_TYPE(TextureD3D*, texture));
return static_cast<TextureD3D*>(texture);
}
GLint TextureD3D::getBaseLevelWidth() const
{
const Image *baseImage = getBaseLevelImage();
......@@ -255,11 +261,6 @@ void TextureD3D_2D::setUsage(GLenum usage)
mUsage = usage;
}
void TextureD3D_2D::resetDirty()
{
mDirtyImages = false;
}
GLsizei TextureD3D_2D::getWidth(GLint level) const
{
if (level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS)
......@@ -875,11 +876,6 @@ void TextureD3D_Cube::setUsage(GLenum usage)
mUsage = usage;
}
void TextureD3D_Cube::resetDirty()
{
mDirtyImages = false;
}
GLenum TextureD3D_Cube::getInternalFormat(GLenum target, GLint level) const
{
if (level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS)
......@@ -1472,11 +1468,6 @@ void TextureD3D_3D::setUsage(GLenum usage)
mUsage = usage;
}
void TextureD3D_3D::resetDirty()
{
mDirtyImages = false;
}
GLsizei TextureD3D_3D::getWidth(GLint level) const
{
if (level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS)
......@@ -2032,11 +2023,6 @@ void TextureD3D_2DArray::setUsage(GLenum usage)
mUsage = usage;
}
void TextureD3D_2DArray::resetDirty()
{
mDirtyImages = false;
}
GLsizei TextureD3D_2DArray::getWidth(GLint level) const
{
return (level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS && mLayerCounts[level] > 0) ? mImageArray[level][0]->getWidth() : 0;
......
......@@ -32,18 +32,22 @@ class TextureStorageInterface2DArray;
bool IsMipmapFiltered(const gl::SamplerState &samplerState);
class TextureD3D
class TextureD3D : public TextureImpl
{
public:
TextureD3D(Renderer *renderer);
virtual ~TextureD3D();
static TextureD3D *makeTextureD3D(TextureImpl *texture);
GLint getBaseLevelWidth() const;
GLint getBaseLevelHeight() const;
GLint getBaseLevelDepth() const;
GLenum getBaseLevelInternalFormat() const;
bool hasDirtyImages() const { return mDirtyImages; }
bool isImmutable() const { return mImmutable; }
void resetDirty() { mDirtyImages = false; }
protected:
void setImage(const gl::PixelUnpackState &unpack, GLenum type, const void *pixels, Image *image);
......@@ -87,8 +91,6 @@ class TextureD3D_2D : public Texture2DImpl, public TextureD3D
virtual Image *getImage(int level) const;
virtual void setUsage(GLenum usage);
virtual bool hasDirtyImages() const { return mDirtyImages; }
virtual void resetDirty();
GLsizei getWidth(GLint level) const;
GLsizei getHeight(GLint level) const;
......@@ -153,8 +155,6 @@ class TextureD3D_Cube : public TextureCubeImpl, public TextureD3D
virtual Image *getImage(GLenum target, int level) const;
virtual void setUsage(GLenum usage);
virtual bool hasDirtyImages() const { return mDirtyImages; }
virtual void resetDirty();
GLenum getInternalFormat(GLenum target, GLint level) const;
bool isDepth(GLenum target, GLint level) const;
......@@ -217,8 +217,6 @@ class TextureD3D_3D : public Texture3DImpl, public TextureD3D
virtual Image *getImage(int level) const;
virtual void setUsage(GLenum usage);
virtual bool hasDirtyImages() const { return mDirtyImages; }
virtual void resetDirty();
GLsizei getWidth(GLint level) const;
GLsizei getHeight(GLint level) const;
......@@ -234,7 +232,6 @@ class TextureD3D_3D : public Texture3DImpl, public TextureD3D
virtual void storage(GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
virtual bool isSamplerComplete(const gl::SamplerState &samplerState) const;
virtual bool isMipmapComplete() const;
virtual void generateMipmaps();
......@@ -256,6 +253,7 @@ class TextureD3D_3D : public Texture3DImpl, public TextureD3D
virtual TextureStorageInterface *getBaseLevelStorage();
virtual const ImageD3D *getBaseLevelImage() const;
bool isMipmapComplete() const;
bool isValidLevel(int level) const;
bool isLevelComplete(int level) const;
void updateStorageLevel(int level);
......@@ -282,8 +280,6 @@ class TextureD3D_2DArray : public Texture2DArrayImpl, public TextureD3D
virtual GLsizei getLayerCount(int level) const;
virtual void setUsage(GLenum usage);
virtual bool hasDirtyImages() const { return mDirtyImages; }
virtual void resetDirty();
GLsizei getWidth(GLint level) const;
GLsizei getHeight(GLint level) const;
......@@ -299,7 +295,6 @@ class TextureD3D_2DArray : public Texture2DArrayImpl, public TextureD3D
virtual void storage(GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
virtual bool isSamplerComplete(const gl::SamplerState &samplerState) const;
virtual bool isMipmapComplete() const;
virtual void generateMipmaps();
......@@ -320,6 +315,7 @@ class TextureD3D_2DArray : public Texture2DArrayImpl, public TextureD3D
virtual TextureStorageInterface *getBaseLevelStorage();
virtual const ImageD3D *getBaseLevelImage() const;
bool isMipmapComplete() const;
bool isValidLevel(int level) const;
bool isLevelComplete(int level) const;
void updateStorageLevel(int level);
......
......@@ -510,7 +510,9 @@ void Renderer11::setTexture(gl::SamplerType type, int index, gl::Texture *textur
// missing the shader resource view
ASSERT(textureSRV != NULL);
forceSetTexture = texture->hasDirtyImages();
TextureD3D* textureImpl = TextureD3D::makeTextureD3D(texture->getImplementation());
forceSetTexture = textureImpl->hasDirtyImages();
textureImpl->resetDirty();
}
if (type == gl::SAMPLER_PIXEL)
......
......@@ -702,8 +702,11 @@ void Renderer9::setTexture(gl::SamplerType type, int index, gl::Texture *texture
// in the texture class and we're unexpectedly missing the d3d texture
ASSERT(d3dTexture != NULL);
TextureD3D* textureImpl = TextureD3D::makeTextureD3D(texture->getImplementation());
serial = texture->getTextureSerial();
forceSetTexture = texture->hasDirtyImages();
forceSetTexture = textureImpl->hasDirtyImages();
textureImpl->resetDirty();
}
if (forceSetTexture || appliedSerials[index] != serial)
......
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