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