Commit 2f06dbfb by Jamie Madill

Remove rx::TextureStorageInterface entirely.

This class provides no added benefit now that we've scrapped the type-specialized classes. We can squash it's functionality into TextureStorage instead. BUG=angle:741 Change-Id: I04984806719a01f299986265fe09b3cccf04dca5 Reviewed-on: https://chromium-review.googlesource.com/218316Tested-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent 856d9d4b
...@@ -77,7 +77,7 @@ void Texture::getSamplerStateWithNativeOffset(SamplerState *sampler) ...@@ -77,7 +77,7 @@ void Texture::getSamplerStateWithNativeOffset(SamplerState *sampler)
*sampler = mSamplerState; *sampler = mSamplerState;
// Offset the effective base level by the texture storage's top level // Offset the effective base level by the texture storage's top level
rx::TextureStorageInterface *texture = getNativeTexture(); rx::TextureStorage *texture = getNativeTexture();
int topLevel = texture ? texture->getTopLevel() : 0; int topLevel = texture ? texture->getTopLevel() : 0;
sampler->baseLevel = topLevel + mSamplerState.baseLevel; sampler->baseLevel = topLevel + mSamplerState.baseLevel;
} }
...@@ -138,7 +138,7 @@ GLenum Texture::getActualFormat(const ImageIndex &index) const ...@@ -138,7 +138,7 @@ GLenum Texture::getActualFormat(const ImageIndex &index) const
return image->getActualFormat(); return image->getActualFormat();
} }
rx::TextureStorageInterface *Texture::getNativeTexture() rx::TextureStorage *Texture::getNativeTexture()
{ {
return getImplementation()->getNativeTexture(); return getImplementation()->getNativeTexture();
} }
...@@ -155,7 +155,7 @@ void Texture::copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoff ...@@ -155,7 +155,7 @@ void Texture::copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoff
unsigned int Texture::getTextureSerial() unsigned int Texture::getTextureSerial()
{ {
rx::TextureStorageInterface *texture = getNativeTexture(); rx::TextureStorage *texture = getNativeTexture();
return texture ? texture->getTextureSerial() : 0; return texture ? texture->getTextureSerial() : 0;
} }
...@@ -166,7 +166,7 @@ bool Texture::isImmutable() const ...@@ -166,7 +166,7 @@ bool Texture::isImmutable() const
int Texture::immutableLevelCount() int Texture::immutableLevelCount()
{ {
return (mImmutable ? getNativeTexture()->getStorageInstance()->getLevelCount() : 0); return (mImmutable ? getNativeTexture()->getLevelCount() : 0);
} }
int Texture::mipLevels() const int Texture::mipLevels() const
......
...@@ -69,7 +69,7 @@ class Texture : public RefCountObject ...@@ -69,7 +69,7 @@ class Texture : public RefCountObject
virtual bool isSamplerComplete(const SamplerState &samplerState, const TextureCapsMap &textureCaps, const Extensions &extensions, int clientVersion) const = 0; virtual bool isSamplerComplete(const SamplerState &samplerState, const TextureCapsMap &textureCaps, const Extensions &extensions, int clientVersion) const = 0;
rx::TextureStorageInterface *getNativeTexture(); rx::TextureStorage *getNativeTexture();
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 void copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, Framebuffer *source);
......
...@@ -44,7 +44,7 @@ struct VertexAttribCurrentValueData; ...@@ -44,7 +44,7 @@ struct VertexAttribCurrentValueData;
namespace rx namespace rx
{ {
class TextureStorageInterface; class TextureStorage;
class VertexBuffer; class VertexBuffer;
class IndexBuffer; class IndexBuffer;
class QueryImpl; class QueryImpl;
...@@ -170,19 +170,19 @@ class Renderer ...@@ -170,19 +170,19 @@ class Renderer
virtual int getMaxSwapInterval() const = 0; virtual int getMaxSwapInterval() const = 0;
// Pixel operations // Pixel operations
virtual bool copyToRenderTarget2D(TextureStorageInterface *dest, TextureStorageInterface *source) = 0; virtual bool copyToRenderTarget2D(TextureStorage *dest, TextureStorage *source) = 0;
virtual bool copyToRenderTargetCube(TextureStorageInterface *dest, TextureStorageInterface *source) = 0; virtual bool copyToRenderTargetCube(TextureStorage *dest, TextureStorage *source) = 0;
virtual bool copyToRenderTarget3D(TextureStorageInterface *dest, TextureStorageInterface *source) = 0; virtual bool copyToRenderTarget3D(TextureStorage *dest, TextureStorage *source) = 0;
virtual bool copyToRenderTarget2DArray(TextureStorageInterface *dest, TextureStorageInterface *source) = 0; virtual bool copyToRenderTarget2DArray(TextureStorage *dest, TextureStorage *source) = 0;
virtual bool copyImage2D(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat, virtual bool copyImage2D(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat,
GLint xoffset, GLint yoffset, TextureStorageInterface *storage, GLint level) = 0; GLint xoffset, GLint yoffset, TextureStorage *storage, GLint level) = 0;
virtual bool copyImageCube(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat, virtual bool copyImageCube(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat,
GLint xoffset, GLint yoffset, TextureStorageInterface *storage, GLenum target, GLint level) = 0; GLint xoffset, GLint yoffset, TextureStorage *storage, GLenum target, GLint level) = 0;
virtual bool copyImage3D(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat, virtual bool copyImage3D(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat,
GLint xoffset, GLint yoffset, GLint zOffset, TextureStorageInterface *storage, GLint level) = 0; GLint xoffset, GLint yoffset, GLint zOffset, TextureStorage *storage, GLint level) = 0;
virtual bool copyImage2DArray(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat, virtual bool copyImage2DArray(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat,
GLint xoffset, GLint yoffset, GLint zOffset, TextureStorageInterface *storage, GLint level) = 0; GLint xoffset, GLint yoffset, GLint zOffset, TextureStorage *storage, GLint level) = 0;
virtual bool blitRect(gl::Framebuffer *readTarget, const gl::Rectangle &readRect, gl::Framebuffer *drawTarget, const gl::Rectangle &drawRect, virtual bool blitRect(gl::Framebuffer *readTarget, const gl::Rectangle &readRect, gl::Framebuffer *drawTarget, const gl::Rectangle &drawRect,
const gl::Rectangle *scissor, bool blitRenderTarget, bool blitDepth, bool blitStencil, GLenum filter) = 0; const gl::Rectangle *scissor, bool blitRenderTarget, bool blitDepth, bool blitStencil, GLenum filter) = 0;
......
...@@ -32,7 +32,7 @@ namespace rx ...@@ -32,7 +32,7 @@ namespace rx
class Image; class Image;
class Renderer; class Renderer;
class TextureStorageInterface; class TextureStorage;
class TextureImpl class TextureImpl
{ {
...@@ -42,7 +42,7 @@ class TextureImpl ...@@ -42,7 +42,7 @@ class TextureImpl
// 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 TextureStorage *getNativeTexture() = 0;
// Deprecated in favour of the ImageIndex method // Deprecated in favour of the ImageIndex method
virtual Image *getImage(int level, int layer) const = 0; virtual Image *getImage(int level, int layer) const = 0;
......
...@@ -21,7 +21,7 @@ class Framebuffer; ...@@ -21,7 +21,7 @@ class Framebuffer;
namespace rx namespace rx
{ {
class TextureStorageInterface; class TextureStorage;
class ImageD3D : public Image class ImageD3D : public Image
{ {
...@@ -33,14 +33,14 @@ class ImageD3D : public Image ...@@ -33,14 +33,14 @@ class ImageD3D : public Image
virtual bool isDirty() const = 0; virtual bool isDirty() const = 0;
virtual void setManagedSurface2D(TextureStorageInterface *storage, int level) {}; virtual void setManagedSurface2D(TextureStorage *storage, int level) {};
virtual void setManagedSurfaceCube(TextureStorageInterface *storage, int face, int level) {}; virtual void setManagedSurfaceCube(TextureStorage *storage, int face, int level) {};
virtual void setManagedSurface3D(TextureStorageInterface *storage, int level) {}; virtual void setManagedSurface3D(TextureStorage *storage, int level) {};
virtual void setManagedSurface2DArray(TextureStorageInterface *storage, int layer, int level) {}; virtual void setManagedSurface2DArray(TextureStorage *storage, int layer, int level) {};
virtual bool copyToStorage2D(TextureStorageInterface *storage, int level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height) = 0; virtual bool copyToStorage2D(TextureStorage *storage, int level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height) = 0;
virtual bool copyToStorageCube(TextureStorageInterface *storage, int face, int level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height) = 0; virtual bool copyToStorageCube(TextureStorage *storage, int face, int level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height) = 0;
virtual bool copyToStorage3D(TextureStorageInterface *storage, int level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth) = 0; virtual bool copyToStorage3D(TextureStorage *storage, int level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth) = 0;
virtual bool copyToStorage2DArray(TextureStorageInterface *storage, int level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height) = 0; virtual bool copyToStorage2DArray(TextureStorage *storage, int level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height) = 0;
private: private:
DISALLOW_COPY_AND_ASSIGN(ImageD3D); DISALLOW_COPY_AND_ASSIGN(ImageD3D);
......
...@@ -25,7 +25,7 @@ class Image; ...@@ -25,7 +25,7 @@ class Image;
class ImageD3D; class ImageD3D;
class Renderer; class Renderer;
class RenderTarget; class RenderTarget;
class TextureStorageInterface; class TextureStorage;
class TextureD3D : public TextureImpl class TextureD3D : public TextureImpl
{ {
...@@ -35,7 +35,7 @@ class TextureD3D : public TextureImpl ...@@ -35,7 +35,7 @@ class TextureD3D : public TextureImpl
static TextureD3D *makeTextureD3D(TextureImpl *texture); static TextureD3D *makeTextureD3D(TextureImpl *texture);
virtual TextureStorageInterface *getNativeTexture(); virtual TextureStorage *getNativeTexture();
virtual void setUsage(GLenum usage) { mUsage = usage; } virtual void setUsage(GLenum usage) { mUsage = usage; }
bool hasDirtyImages() const { return mDirtyImages; } bool hasDirtyImages() const { return mDirtyImages; }
...@@ -60,7 +60,7 @@ class TextureD3D : public TextureImpl ...@@ -60,7 +60,7 @@ class TextureD3D : public TextureImpl
GLenum format, GLsizei imageSize, const void *pixels, Image *image); GLenum format, GLsizei imageSize, const void *pixels, Image *image);
bool isFastUnpackable(const gl::PixelUnpackState &unpack, GLenum sizedInternalFormat); bool isFastUnpackable(const gl::PixelUnpackState &unpack, GLenum sizedInternalFormat);
bool fastUnpackPixels(const gl::PixelUnpackState &unpack, const void *pixels, const gl::Box &destArea, bool fastUnpackPixels(const gl::PixelUnpackState &unpack, const void *pixels, const gl::Box &destArea,
GLenum sizedInternalFormat, GLenum type, RenderTarget *destRenderTarget); GLenum sizedInternalFormat, GLenum type, RenderTarget *destRenderTarget);
GLint creationLevels(GLsizei width, GLsizei height, GLsizei depth) const; GLint creationLevels(GLsizei width, GLsizei height, GLsizei depth) const;
int mipLevels() const; int mipLevels() const;
...@@ -79,7 +79,7 @@ class TextureD3D : public TextureImpl ...@@ -79,7 +79,7 @@ class TextureD3D : public TextureImpl
virtual void initializeStorage(bool renderTarget) = 0; virtual void initializeStorage(bool renderTarget) = 0;
virtual void updateStorage() = 0; virtual void updateStorage() = 0;
virtual TextureStorageInterface *getBaseLevelStorage() = 0; virtual TextureStorage *getBaseLevelStorage() = 0;
virtual const ImageD3D *getBaseLevelImage() const = 0; virtual const ImageD3D *getBaseLevelImage() const = 0;
}; };
...@@ -119,12 +119,12 @@ class TextureD3D_2D : public TextureD3D ...@@ -119,12 +119,12 @@ class TextureD3D_2D : public TextureD3D
DISALLOW_COPY_AND_ASSIGN(TextureD3D_2D); DISALLOW_COPY_AND_ASSIGN(TextureD3D_2D);
virtual void initializeStorage(bool renderTarget); virtual void initializeStorage(bool renderTarget);
TextureStorageInterface *createCompleteStorage(bool renderTarget) const; TextureStorage *createCompleteStorage(bool renderTarget) const;
void setCompleteTexStorage(TextureStorageInterface *newCompleteTexStorage); void setCompleteTexStorage(TextureStorage *newCompleteTexStorage);
virtual void updateStorage(); virtual void updateStorage();
bool ensureRenderTarget(); bool ensureRenderTarget();
virtual TextureStorageInterface *getBaseLevelStorage(); virtual TextureStorage *getBaseLevelStorage();
virtual const ImageD3D *getBaseLevelImage() const; virtual const ImageD3D *getBaseLevelImage() const;
bool isValidLevel(int level) const; bool isValidLevel(int level) const;
...@@ -135,7 +135,7 @@ class TextureD3D_2D : public TextureD3D ...@@ -135,7 +135,7 @@ class TextureD3D_2D : public TextureD3D
void redefineImage(GLint level, GLenum internalformat, GLsizei width, GLsizei height); void redefineImage(GLint level, GLenum internalformat, GLsizei width, GLsizei height);
void commitRect(GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height); void commitRect(GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height);
TextureStorageInterface *mTexStorage; TextureStorage *mTexStorage;
ImageD3D *mImageArray[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS]; ImageD3D *mImageArray[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
}; };
...@@ -176,12 +176,12 @@ class TextureD3D_Cube : public TextureD3D ...@@ -176,12 +176,12 @@ class TextureD3D_Cube : public TextureD3D
DISALLOW_COPY_AND_ASSIGN(TextureD3D_Cube); DISALLOW_COPY_AND_ASSIGN(TextureD3D_Cube);
virtual void initializeStorage(bool renderTarget); virtual void initializeStorage(bool renderTarget);
TextureStorageInterface *createCompleteStorage(bool renderTarget) const; TextureStorage *createCompleteStorage(bool renderTarget) const;
void setCompleteTexStorage(TextureStorageInterface *newCompleteTexStorage); void setCompleteTexStorage(TextureStorage *newCompleteTexStorage);
virtual void updateStorage(); virtual void updateStorage();
bool ensureRenderTarget(); bool ensureRenderTarget();
virtual TextureStorageInterface *getBaseLevelStorage(); virtual TextureStorage *getBaseLevelStorage();
virtual const ImageD3D *getBaseLevelImage() const; virtual const ImageD3D *getBaseLevelImage() const;
bool isValidFaceLevel(int faceIndex, int level) const; bool isValidFaceLevel(int faceIndex, int level) const;
...@@ -194,7 +194,7 @@ class TextureD3D_Cube : public TextureD3D ...@@ -194,7 +194,7 @@ class TextureD3D_Cube : public TextureD3D
ImageD3D *mImageArray[6][gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS]; ImageD3D *mImageArray[6][gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
TextureStorageInterface *mTexStorage; TextureStorage *mTexStorage;
}; };
class TextureD3D_3D : public TextureD3D class TextureD3D_3D : public TextureD3D
...@@ -233,12 +233,12 @@ class TextureD3D_3D : public TextureD3D ...@@ -233,12 +233,12 @@ class TextureD3D_3D : public TextureD3D
DISALLOW_COPY_AND_ASSIGN(TextureD3D_3D); DISALLOW_COPY_AND_ASSIGN(TextureD3D_3D);
virtual void initializeStorage(bool renderTarget); virtual void initializeStorage(bool renderTarget);
TextureStorageInterface *createCompleteStorage(bool renderTarget) const; TextureStorage *createCompleteStorage(bool renderTarget) const;
void setCompleteTexStorage(TextureStorageInterface *newCompleteTexStorage); void setCompleteTexStorage(TextureStorage *newCompleteTexStorage);
virtual void updateStorage(); virtual void updateStorage();
bool ensureRenderTarget(); bool ensureRenderTarget();
virtual TextureStorageInterface *getBaseLevelStorage(); virtual TextureStorage *getBaseLevelStorage();
virtual const ImageD3D *getBaseLevelImage() const; virtual const ImageD3D *getBaseLevelImage() const;
bool isValidLevel(int level) const; bool isValidLevel(int level) const;
...@@ -250,7 +250,7 @@ class TextureD3D_3D : public TextureD3D ...@@ -250,7 +250,7 @@ class TextureD3D_3D : public TextureD3D
ImageD3D *mImageArray[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS]; ImageD3D *mImageArray[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
TextureStorageInterface *mTexStorage; TextureStorage *mTexStorage;
}; };
class TextureD3D_2DArray : public TextureD3D class TextureD3D_2DArray : public TextureD3D
...@@ -289,12 +289,12 @@ class TextureD3D_2DArray : public TextureD3D ...@@ -289,12 +289,12 @@ class TextureD3D_2DArray : public TextureD3D
DISALLOW_COPY_AND_ASSIGN(TextureD3D_2DArray); DISALLOW_COPY_AND_ASSIGN(TextureD3D_2DArray);
virtual void initializeStorage(bool renderTarget); virtual void initializeStorage(bool renderTarget);
TextureStorageInterface *createCompleteStorage(bool renderTarget) const; TextureStorage *createCompleteStorage(bool renderTarget) const;
void setCompleteTexStorage(TextureStorageInterface *newCompleteTexStorage); void setCompleteTexStorage(TextureStorage *newCompleteTexStorage);
virtual void updateStorage(); virtual void updateStorage();
bool ensureRenderTarget(); bool ensureRenderTarget();
virtual TextureStorageInterface *getBaseLevelStorage(); virtual TextureStorage *getBaseLevelStorage();
virtual const ImageD3D *getBaseLevelImage() const; virtual const ImageD3D *getBaseLevelImage() const;
bool isValidLevel(int level) const; bool isValidLevel(int level) const;
...@@ -312,7 +312,7 @@ class TextureD3D_2DArray : public TextureD3D ...@@ -312,7 +312,7 @@ class TextureD3D_2DArray : public TextureD3D
GLsizei mLayerCounts[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS]; GLsizei mLayerCounts[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
ImageD3D **mImageArray[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS]; ImageD3D **mImageArray[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
TextureStorageInterface *mTexStorage; TextureStorage *mTexStorage;
}; };
} }
......
...@@ -17,54 +17,35 @@ ...@@ -17,54 +17,35 @@
namespace rx namespace rx
{ {
unsigned int TextureStorageInterface::mCurrentTextureSerial = 1;
TextureStorageInterface::TextureStorageInterface(TextureStorage *textureStorage, unsigned int rtSerialLayerStride) unsigned int TextureStorage::mCurrentTextureSerial = 1;
TextureStorage::TextureStorage()
: mTextureSerial(issueTextureSerial()), : mTextureSerial(issueTextureSerial()),
mInstance(textureStorage), mFirstRenderTargetSerial(0),
mFirstRenderTargetSerial(gl::RenderbufferStorage::issueSerials(static_cast<unsigned int>(textureStorage->getLevelCount()) * rtSerialLayerStride)), mRenderTargetSerialsLayerStride(0)
mRenderTargetSerialsLayerStride(rtSerialLayerStride)
{} {}
TextureStorageInterface::~TextureStorageInterface() void TextureStorage::initializeSerials(unsigned int rtSerialsToReserve, unsigned int rtSerialsLayerStride)
{ {
delete mInstance; mFirstRenderTargetSerial = gl::RenderbufferStorage::issueSerials(rtSerialsToReserve);
mRenderTargetSerialsLayerStride = rtSerialsLayerStride;
} }
bool TextureStorageInterface::isRenderTarget() const unsigned int TextureStorage::getRenderTargetSerial(const gl::ImageIndex &index) const
{ {
return mInstance->isRenderTarget(); unsigned int layerOffset = (index.hasLayer() ? (static_cast<unsigned int>(index.layerIndex) * mRenderTargetSerialsLayerStride) : 0);
} return mFirstRenderTargetSerial + static_cast<unsigned int>(index.mipIndex) + layerOffset;
bool TextureStorageInterface::isManaged() const
{
return mInstance->isManaged();
} }
unsigned int TextureStorageInterface::getTextureSerial() const unsigned int TextureStorage::getTextureSerial() const
{ {
return mTextureSerial; return mTextureSerial;
} }
unsigned int TextureStorageInterface::issueTextureSerial() unsigned int TextureStorage::issueTextureSerial()
{ {
return mCurrentTextureSerial++; return mCurrentTextureSerial++;
} }
int TextureStorageInterface::getTopLevel() const
{
return mInstance->getTopLevel();
}
int TextureStorageInterface::getLevelCount() const
{
return mInstance->getLevelCount();
}
unsigned int TextureStorageInterface::getRenderTargetSerial(const gl::ImageIndex &index) const
{
unsigned int layerOffset = (index.hasLayer() ? (static_cast<unsigned int>(index.layerIndex) * mRenderTargetSerialsLayerStride) : 0);
return mFirstRenderTargetSerial + static_cast<unsigned int>(index.mipIndex) + layerOffset;
}
} }
...@@ -27,7 +27,7 @@ class RenderTarget; ...@@ -27,7 +27,7 @@ class RenderTarget;
class TextureStorage class TextureStorage
{ {
public: public:
TextureStorage() {}; TextureStorage();
virtual ~TextureStorage() {}; virtual ~TextureStorage() {};
virtual int getTopLevel() const = 0; virtual int getTopLevel() const = 0;
...@@ -38,33 +38,14 @@ class TextureStorage ...@@ -38,33 +38,14 @@ class TextureStorage
virtual RenderTarget *getRenderTarget(const gl::ImageIndex &index) = 0; virtual RenderTarget *getRenderTarget(const gl::ImageIndex &index) = 0;
virtual void generateMipmaps() = 0; virtual void generateMipmaps() = 0;
private:
DISALLOW_COPY_AND_ASSIGN(TextureStorage);
};
class TextureStorageInterface
{
public:
TextureStorageInterface(TextureStorage *storageInstance, unsigned int rtSerialLayerStride);
virtual ~TextureStorageInterface();
TextureStorage *getStorageInstance() { return mInstance; }
unsigned int getTextureSerial() const;
virtual int getTopLevel() const;
virtual bool isRenderTarget() const;
virtual bool isManaged() const;
virtual int getLevelCount() const;
unsigned int getRenderTargetSerial(const gl::ImageIndex &index) const; unsigned int getRenderTargetSerial(const gl::ImageIndex &index) const;
unsigned int getTextureSerial() const;
protected: protected:
TextureStorage *mInstance; void initializeSerials(unsigned int rtSerialsToReserve, unsigned int rtSerialsLayerStride);
private: private:
DISALLOW_COPY_AND_ASSIGN(TextureStorageInterface); DISALLOW_COPY_AND_ASSIGN(TextureStorage);
const unsigned int mTextureSerial; const unsigned int mTextureSerial;
static unsigned int issueTextureSerial(); static unsigned int issueTextureSerial();
......
...@@ -99,27 +99,27 @@ bool Image11::isDirty() const ...@@ -99,27 +99,27 @@ bool Image11::isDirty() const
return mDirty; return mDirty;
} }
bool Image11::copyToStorage2D(TextureStorageInterface *storage, int level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height) bool Image11::copyToStorage2D(TextureStorage *storage, int level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height)
{ {
TextureStorage11_2D *storage11 = TextureStorage11_2D::makeTextureStorage11_2D(storage->getStorageInstance()); TextureStorage11_2D *storage11 = TextureStorage11_2D::makeTextureStorage11_2D(storage);
return copyToStorageImpl(storage11, level, 0, xoffset, yoffset, width, height); return copyToStorageImpl(storage11, level, 0, xoffset, yoffset, width, height);
} }
bool Image11::copyToStorageCube(TextureStorageInterface *storage, int face, int level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height) bool Image11::copyToStorageCube(TextureStorage *storage, int face, int level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height)
{ {
TextureStorage11_Cube *storage11 = TextureStorage11_Cube::makeTextureStorage11_Cube(storage->getStorageInstance()); TextureStorage11_Cube *storage11 = TextureStorage11_Cube::makeTextureStorage11_Cube(storage);
return copyToStorageImpl(storage11, level, face, xoffset, yoffset, width, height); return copyToStorageImpl(storage11, level, face, xoffset, yoffset, width, height);
} }
bool Image11::copyToStorage3D(TextureStorageInterface *storage, int level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth) bool Image11::copyToStorage3D(TextureStorage *storage, int level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth)
{ {
TextureStorage11_3D *storage11 = TextureStorage11_3D::makeTextureStorage11_3D(storage->getStorageInstance()); TextureStorage11_3D *storage11 = TextureStorage11_3D::makeTextureStorage11_3D(storage);
return copyToStorageImpl(storage11, level, 0, xoffset, yoffset, width, height); return copyToStorageImpl(storage11, level, 0, xoffset, yoffset, width, height);
} }
bool Image11::copyToStorage2DArray(TextureStorageInterface *storage, int level, GLint xoffset, GLint yoffset, GLint arrayLayer, GLsizei width, GLsizei height) bool Image11::copyToStorage2DArray(TextureStorage *storage, int level, GLint xoffset, GLint yoffset, GLint arrayLayer, GLsizei width, GLsizei height)
{ {
TextureStorage11_2DArray *storage11 = TextureStorage11_2DArray::makeTextureStorage11_2DArray(storage->getStorageInstance()); TextureStorage11_2DArray *storage11 = TextureStorage11_2DArray::makeTextureStorage11_2DArray(storage);
return copyToStorageImpl(storage11, level, arrayLayer, xoffset, yoffset, width, height); return copyToStorageImpl(storage11, level, arrayLayer, xoffset, yoffset, width, height);
} }
......
...@@ -23,7 +23,6 @@ namespace rx ...@@ -23,7 +23,6 @@ namespace rx
{ {
class Renderer; class Renderer;
class Renderer11; class Renderer11;
class TextureStorageInterface;
class TextureStorage11; class TextureStorage11;
class Image11 : public ImageD3D class Image11 : public ImageD3D
...@@ -38,10 +37,10 @@ class Image11 : public ImageD3D ...@@ -38,10 +37,10 @@ class Image11 : public ImageD3D
virtual bool isDirty() const; virtual bool isDirty() const;
virtual bool copyToStorage2D(TextureStorageInterface *storage, int level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height); virtual bool copyToStorage2D(TextureStorage *storage, int level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height);
virtual bool copyToStorageCube(TextureStorageInterface *storage, int face, int level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height); virtual bool copyToStorageCube(TextureStorage *storage, int face, int level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height);
virtual bool copyToStorage3D(TextureStorageInterface *storage, int level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); virtual bool copyToStorage3D(TextureStorage *storage, int level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth);
virtual bool copyToStorage2DArray(TextureStorageInterface *storage, int level, GLint xoffset, GLint yoffset, GLint arrayLayer, GLsizei width, GLsizei height); virtual bool copyToStorage2DArray(TextureStorage *storage, int level, GLint xoffset, GLint yoffset, GLint arrayLayer, GLsizei width, GLsizei height);
virtual bool redefine(Renderer *renderer, GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, bool forceRelease); virtual bool redefine(Renderer *renderer, GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, bool forceRelease);
......
...@@ -417,10 +417,10 @@ void Renderer11::generateSwizzle(gl::Texture *texture) ...@@ -417,10 +417,10 @@ void Renderer11::generateSwizzle(gl::Texture *texture)
{ {
if (texture) if (texture)
{ {
TextureStorageInterface *texStorage = texture->getNativeTexture(); TextureStorage *texStorage = texture->getNativeTexture();
if (texStorage) if (texStorage)
{ {
TextureStorage11 *storage11 = TextureStorage11::makeTextureStorage11(texStorage->getStorageInstance()); TextureStorage11 *storage11 = TextureStorage11::makeTextureStorage11(texStorage);
storage11->generateSwizzles(texture->getSamplerState().swizzleRed, storage11->generateSwizzles(texture->getSamplerState().swizzleRed,
texture->getSamplerState().swizzleGreen, texture->getSamplerState().swizzleGreen,
...@@ -488,10 +488,10 @@ void Renderer11::setTexture(gl::SamplerType type, int index, gl::Texture *textur ...@@ -488,10 +488,10 @@ void Renderer11::setTexture(gl::SamplerType type, int index, gl::Texture *textur
{ {
TextureD3D* textureImpl = TextureD3D::makeTextureD3D(texture->getImplementation()); TextureD3D* textureImpl = TextureD3D::makeTextureD3D(texture->getImplementation());
TextureStorageInterface *texStorage = textureImpl->getNativeTexture(); TextureStorage *texStorage = textureImpl->getNativeTexture();
if (texStorage) if (texStorage)
{ {
TextureStorage11 *storage11 = TextureStorage11::makeTextureStorage11(texStorage->getStorageInstance()); TextureStorage11 *storage11 = TextureStorage11::makeTextureStorage11(texStorage);
gl::SamplerState samplerState; gl::SamplerState samplerState;
texture->getSamplerStateWithNativeOffset(&samplerState); texture->getSamplerStateWithNativeOffset(&samplerState);
textureSRV = storage11->getSRV(samplerState); textureSRV = storage11->getSRV(samplerState);
...@@ -1873,12 +1873,12 @@ int Renderer11::getMaxSwapInterval() const ...@@ -1873,12 +1873,12 @@ int Renderer11::getMaxSwapInterval() const
return 4; return 4;
} }
bool Renderer11::copyToRenderTarget2D(TextureStorageInterface *dest, TextureStorageInterface *source) bool Renderer11::copyToRenderTarget2D(TextureStorage *dest, TextureStorage *source)
{ {
if (source && dest) if (source && dest)
{ {
TextureStorage11_2D *source11 = TextureStorage11_2D::makeTextureStorage11_2D(source->getStorageInstance()); TextureStorage11_2D *source11 = TextureStorage11_2D::makeTextureStorage11_2D(source);
TextureStorage11_2D *dest11 = TextureStorage11_2D::makeTextureStorage11_2D(dest->getStorageInstance()); TextureStorage11_2D *dest11 = TextureStorage11_2D::makeTextureStorage11_2D(dest);
mDeviceContext->CopyResource(dest11->getResource(), source11->getResource()); mDeviceContext->CopyResource(dest11->getResource(), source11->getResource());
...@@ -1890,12 +1890,12 @@ bool Renderer11::copyToRenderTarget2D(TextureStorageInterface *dest, TextureStor ...@@ -1890,12 +1890,12 @@ bool Renderer11::copyToRenderTarget2D(TextureStorageInterface *dest, TextureStor
return false; return false;
} }
bool Renderer11::copyToRenderTargetCube(TextureStorageInterface *dest, TextureStorageInterface *source) bool Renderer11::copyToRenderTargetCube(TextureStorage *dest, TextureStorage *source)
{ {
if (source && dest) if (source && dest)
{ {
TextureStorage11_Cube *source11 = TextureStorage11_Cube::makeTextureStorage11_Cube(source->getStorageInstance()); TextureStorage11_Cube *source11 = TextureStorage11_Cube::makeTextureStorage11_Cube(source);
TextureStorage11_Cube *dest11 = TextureStorage11_Cube::makeTextureStorage11_Cube(dest->getStorageInstance()); TextureStorage11_Cube *dest11 = TextureStorage11_Cube::makeTextureStorage11_Cube(dest);
mDeviceContext->CopyResource(dest11->getResource(), source11->getResource()); mDeviceContext->CopyResource(dest11->getResource(), source11->getResource());
...@@ -1907,12 +1907,12 @@ bool Renderer11::copyToRenderTargetCube(TextureStorageInterface *dest, TextureSt ...@@ -1907,12 +1907,12 @@ bool Renderer11::copyToRenderTargetCube(TextureStorageInterface *dest, TextureSt
return false; return false;
} }
bool Renderer11::copyToRenderTarget3D(TextureStorageInterface *dest, TextureStorageInterface *source) bool Renderer11::copyToRenderTarget3D(TextureStorage *dest, TextureStorage *source)
{ {
if (source && dest) if (source && dest)
{ {
TextureStorage11_3D *source11 = TextureStorage11_3D::makeTextureStorage11_3D(source->getStorageInstance()); TextureStorage11_3D *source11 = TextureStorage11_3D::makeTextureStorage11_3D(source);
TextureStorage11_3D *dest11 = TextureStorage11_3D::makeTextureStorage11_3D(dest->getStorageInstance()); TextureStorage11_3D *dest11 = TextureStorage11_3D::makeTextureStorage11_3D(dest);
mDeviceContext->CopyResource(dest11->getResource(), source11->getResource()); mDeviceContext->CopyResource(dest11->getResource(), source11->getResource());
...@@ -1924,12 +1924,12 @@ bool Renderer11::copyToRenderTarget3D(TextureStorageInterface *dest, TextureStor ...@@ -1924,12 +1924,12 @@ bool Renderer11::copyToRenderTarget3D(TextureStorageInterface *dest, TextureStor
return false; return false;
} }
bool Renderer11::copyToRenderTarget2DArray(TextureStorageInterface *dest, TextureStorageInterface *source) bool Renderer11::copyToRenderTarget2DArray(TextureStorage *dest, TextureStorage *source)
{ {
if (source && dest) if (source && dest)
{ {
TextureStorage11_2DArray *source11 = TextureStorage11_2DArray::makeTextureStorage11_2DArray(source->getStorageInstance()); TextureStorage11_2DArray *source11 = TextureStorage11_2DArray::makeTextureStorage11_2DArray(source);
TextureStorage11_2DArray *dest11 = TextureStorage11_2DArray::makeTextureStorage11_2DArray(dest->getStorageInstance()); TextureStorage11_2DArray *dest11 = TextureStorage11_2DArray::makeTextureStorage11_2DArray(dest);
mDeviceContext->CopyResource(dest11->getResource(), source11->getResource()); mDeviceContext->CopyResource(dest11->getResource(), source11->getResource());
...@@ -1942,7 +1942,7 @@ bool Renderer11::copyToRenderTarget2DArray(TextureStorageInterface *dest, Textur ...@@ -1942,7 +1942,7 @@ bool Renderer11::copyToRenderTarget2DArray(TextureStorageInterface *dest, Textur
} }
bool Renderer11::copyImage2D(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat, bool Renderer11::copyImage2D(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat,
GLint xoffset, GLint yoffset, TextureStorageInterface *storage, GLint level) GLint xoffset, GLint yoffset, TextureStorage *storage, GLint level)
{ {
gl::FramebufferAttachment *colorbuffer = framebuffer->getReadColorbuffer(); gl::FramebufferAttachment *colorbuffer = framebuffer->getReadColorbuffer();
if (!colorbuffer) if (!colorbuffer)
...@@ -1965,7 +1965,7 @@ bool Renderer11::copyImage2D(gl::Framebuffer *framebuffer, const gl::Rectangle & ...@@ -1965,7 +1965,7 @@ bool Renderer11::copyImage2D(gl::Framebuffer *framebuffer, const gl::Rectangle &
return gl::error(GL_OUT_OF_MEMORY, false); return gl::error(GL_OUT_OF_MEMORY, false);
} }
TextureStorage11_2D *storage11 = TextureStorage11_2D::makeTextureStorage11_2D(storage->getStorageInstance()); TextureStorage11_2D *storage11 = TextureStorage11_2D::makeTextureStorage11_2D(storage);
if (!storage11) if (!storage11)
{ {
ERR("Failed to retrieve the texture storage from the destination."); ERR("Failed to retrieve the texture storage from the destination.");
...@@ -2004,7 +2004,7 @@ bool Renderer11::copyImage2D(gl::Framebuffer *framebuffer, const gl::Rectangle & ...@@ -2004,7 +2004,7 @@ bool Renderer11::copyImage2D(gl::Framebuffer *framebuffer, const gl::Rectangle &
} }
bool Renderer11::copyImageCube(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat, bool Renderer11::copyImageCube(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat,
GLint xoffset, GLint yoffset, TextureStorageInterface *storage, GLenum target, GLint level) GLint xoffset, GLint yoffset, TextureStorage *storage, GLenum target, GLint level)
{ {
gl::FramebufferAttachment *colorbuffer = framebuffer->getReadColorbuffer(); gl::FramebufferAttachment *colorbuffer = framebuffer->getReadColorbuffer();
if (!colorbuffer) if (!colorbuffer)
...@@ -2027,7 +2027,7 @@ bool Renderer11::copyImageCube(gl::Framebuffer *framebuffer, const gl::Rectangle ...@@ -2027,7 +2027,7 @@ bool Renderer11::copyImageCube(gl::Framebuffer *framebuffer, const gl::Rectangle
return gl::error(GL_OUT_OF_MEMORY, false); return gl::error(GL_OUT_OF_MEMORY, false);
} }
TextureStorage11_Cube *storage11 = TextureStorage11_Cube::makeTextureStorage11_Cube(storage->getStorageInstance()); TextureStorage11_Cube *storage11 = TextureStorage11_Cube::makeTextureStorage11_Cube(storage);
if (!storage11) if (!storage11)
{ {
ERR("Failed to retrieve the texture storage from the destination."); ERR("Failed to retrieve the texture storage from the destination.");
...@@ -2066,7 +2066,7 @@ bool Renderer11::copyImageCube(gl::Framebuffer *framebuffer, const gl::Rectangle ...@@ -2066,7 +2066,7 @@ bool Renderer11::copyImageCube(gl::Framebuffer *framebuffer, const gl::Rectangle
} }
bool Renderer11::copyImage3D(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat, bool Renderer11::copyImage3D(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat,
GLint xoffset, GLint yoffset, GLint zOffset, TextureStorageInterface *storage, GLint level) GLint xoffset, GLint yoffset, GLint zOffset, TextureStorage *storage, GLint level)
{ {
gl::FramebufferAttachment *colorbuffer = framebuffer->getReadColorbuffer(); gl::FramebufferAttachment *colorbuffer = framebuffer->getReadColorbuffer();
if (!colorbuffer) if (!colorbuffer)
...@@ -2089,7 +2089,7 @@ bool Renderer11::copyImage3D(gl::Framebuffer *framebuffer, const gl::Rectangle & ...@@ -2089,7 +2089,7 @@ bool Renderer11::copyImage3D(gl::Framebuffer *framebuffer, const gl::Rectangle &
return gl::error(GL_OUT_OF_MEMORY, false); return gl::error(GL_OUT_OF_MEMORY, false);
} }
TextureStorage11_3D *storage11 = TextureStorage11_3D::makeTextureStorage11_3D(storage->getStorageInstance()); TextureStorage11_3D *storage11 = TextureStorage11_3D::makeTextureStorage11_3D(storage);
if (!storage11) if (!storage11)
{ {
ERR("Failed to retrieve the texture storage from the destination."); ERR("Failed to retrieve the texture storage from the destination.");
...@@ -2128,7 +2128,7 @@ bool Renderer11::copyImage3D(gl::Framebuffer *framebuffer, const gl::Rectangle & ...@@ -2128,7 +2128,7 @@ bool Renderer11::copyImage3D(gl::Framebuffer *framebuffer, const gl::Rectangle &
} }
bool Renderer11::copyImage2DArray(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat, bool Renderer11::copyImage2DArray(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat,
GLint xoffset, GLint yoffset, GLint zOffset, TextureStorageInterface *storage, GLint level) GLint xoffset, GLint yoffset, GLint zOffset, TextureStorage *storage, GLint level)
{ {
gl::FramebufferAttachment *colorbuffer = framebuffer->getReadColorbuffer(); gl::FramebufferAttachment *colorbuffer = framebuffer->getReadColorbuffer();
if (!colorbuffer) if (!colorbuffer)
...@@ -2151,7 +2151,7 @@ bool Renderer11::copyImage2DArray(gl::Framebuffer *framebuffer, const gl::Rectan ...@@ -2151,7 +2151,7 @@ bool Renderer11::copyImage2DArray(gl::Framebuffer *framebuffer, const gl::Rectan
return gl::error(GL_OUT_OF_MEMORY, false); return gl::error(GL_OUT_OF_MEMORY, false);
} }
TextureStorage11_2DArray *storage11 = TextureStorage11_2DArray::makeTextureStorage11_2DArray(storage->getStorageInstance()); TextureStorage11_2DArray *storage11 = TextureStorage11_2DArray::makeTextureStorage11_2DArray(storage);
if (!storage11) if (!storage11)
{ {
SafeRelease(source); SafeRelease(source);
...@@ -3115,7 +3115,7 @@ void Renderer11::invalidateFBOAttachmentSwizzles(gl::FramebufferAttachment *atta ...@@ -3115,7 +3115,7 @@ void Renderer11::invalidateFBOAttachmentSwizzles(gl::FramebufferAttachment *atta
ASSERT(attachment->isTexture()); ASSERT(attachment->isTexture());
gl::Texture *texture = attachment->getTexture(); gl::Texture *texture = attachment->getTexture();
TextureStorage *texStorage = texture->getNativeTexture()->getStorageInstance(); TextureStorage *texStorage = texture->getNativeTexture();
if (texStorage) if (texStorage)
{ {
TextureStorage11 *texStorage11 = TextureStorage11::makeTextureStorage11(texStorage); TextureStorage11 *texStorage11 = TextureStorage11::makeTextureStorage11(texStorage);
......
...@@ -115,19 +115,19 @@ class Renderer11 : public Renderer ...@@ -115,19 +115,19 @@ class Renderer11 : public Renderer
virtual int getMaxSwapInterval() const; virtual int getMaxSwapInterval() const;
// Pixel operations // Pixel operations
virtual bool copyToRenderTarget2D(TextureStorageInterface *dest, TextureStorageInterface *source); virtual bool copyToRenderTarget2D(TextureStorage *dest, TextureStorage *source);
virtual bool copyToRenderTargetCube(TextureStorageInterface *dest, TextureStorageInterface *source); virtual bool copyToRenderTargetCube(TextureStorage *dest, TextureStorage *source);
virtual bool copyToRenderTarget3D(TextureStorageInterface *dest, TextureStorageInterface *source); virtual bool copyToRenderTarget3D(TextureStorage *dest, TextureStorage *source);
virtual bool copyToRenderTarget2DArray(TextureStorageInterface *dest, TextureStorageInterface *source); virtual bool copyToRenderTarget2DArray(TextureStorage *dest, TextureStorage *source);
virtual bool copyImage2D(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat, virtual bool copyImage2D(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat,
GLint xoffset, GLint yoffset, TextureStorageInterface *storage, GLint level); GLint xoffset, GLint yoffset, TextureStorage *storage, GLint level);
virtual bool copyImageCube(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat, virtual bool copyImageCube(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat,
GLint xoffset, GLint yoffset, TextureStorageInterface *storage, GLenum target, GLint level); GLint xoffset, GLint yoffset, TextureStorage *storage, GLenum target, GLint level);
virtual bool copyImage3D(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat, virtual bool copyImage3D(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat,
GLint xoffset, GLint yoffset, GLint zOffset, TextureStorageInterface *storage, GLint level); GLint xoffset, GLint yoffset, GLint zOffset, TextureStorage *storage, GLint level);
virtual bool copyImage2DArray(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat, virtual bool copyImage2DArray(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat,
GLint xoffset, GLint yoffset, GLint zOffset, TextureStorageInterface *storage, GLint level); GLint xoffset, GLint yoffset, GLint zOffset, TextureStorage *storage, GLint level);
virtual bool blitRect(gl::Framebuffer *readTarget, const gl::Rectangle &readRect, gl::Framebuffer *drawTarget, const gl::Rectangle &drawRect, virtual bool blitRect(gl::Framebuffer *readTarget, const gl::Rectangle &readRect, gl::Framebuffer *drawTarget, const gl::Rectangle &drawRect,
const gl::Rectangle *scissor, bool blitRenderTarget, bool blitDepth, bool blitStencil, GLenum filter); const gl::Rectangle *scissor, bool blitRenderTarget, bool blitDepth, bool blitStencil, GLenum filter);
......
...@@ -396,11 +396,11 @@ void TextureStorage11::verifySwizzleExists(GLenum swizzleRed, GLenum swizzleGree ...@@ -396,11 +396,11 @@ void TextureStorage11::verifySwizzleExists(GLenum swizzleRed, GLenum swizzleGree
} }
TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, SwapChain11 *swapchain) TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, SwapChain11 *swapchain)
: TextureStorage11(renderer, D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE) : TextureStorage11(renderer, D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE),
mTexture(swapchain->getOffscreenTexture()),
mSwizzleTexture(NULL)
{ {
mTexture = swapchain->getOffscreenTexture();
mTexture->AddRef(); mTexture->AddRef();
mSwizzleTexture = NULL;
for (unsigned int i = 0; i < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS; i++) for (unsigned int i = 0; i < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS; i++)
{ {
...@@ -434,14 +434,15 @@ TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, SwapChain11 *swapch ...@@ -434,14 +434,15 @@ TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, SwapChain11 *swapch
mSwizzleRenderTargetFormat = formatInfo.swizzleRTVFormat; mSwizzleRenderTargetFormat = formatInfo.swizzleRTVFormat;
mDepthStencilFormat = DXGI_FORMAT_UNKNOWN; mDepthStencilFormat = DXGI_FORMAT_UNKNOWN;
initializeSerials(1, 1);
} }
TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, int levels) TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, int levels)
: TextureStorage11(renderer, GetTextureBindFlags(internalformat, renderTarget)) : TextureStorage11(renderer, GetTextureBindFlags(internalformat, renderTarget)),
mTexture(NULL),
mSwizzleTexture(NULL)
{ {
mTexture = NULL;
mSwizzleTexture = NULL;
for (unsigned int i = 0; i < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS; i++) for (unsigned int i = 0; i < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS; i++)
{ {
mAssociatedImages[i] = NULL; mAssociatedImages[i] = NULL;
...@@ -503,6 +504,8 @@ TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, GLenum internalform ...@@ -503,6 +504,8 @@ TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, GLenum internalform
mTextureDepth = 1; mTextureDepth = 1;
} }
} }
initializeSerials(getLevelCount(), 1);
} }
TextureStorage11_2D::~TextureStorage11_2D() TextureStorage11_2D::~TextureStorage11_2D()
...@@ -790,11 +793,6 @@ ID3D11RenderTargetView *TextureStorage11_2D::getSwizzleRenderTarget(int mipLevel ...@@ -790,11 +793,6 @@ ID3D11RenderTargetView *TextureStorage11_2D::getSwizzleRenderTarget(int mipLevel
} }
} }
unsigned int TextureStorage11_2D::getTextureLevelDepth(int mipLevel) const
{
return 1;
}
TextureStorage11_Cube::TextureStorage11_Cube(Renderer *renderer, GLenum internalformat, bool renderTarget, int size, int levels) TextureStorage11_Cube::TextureStorage11_Cube(Renderer *renderer, GLenum internalformat, bool renderTarget, int size, int levels)
: TextureStorage11(renderer, GetTextureBindFlags(internalformat, renderTarget)) : TextureStorage11(renderer, GetTextureBindFlags(internalformat, renderTarget))
{ {
...@@ -860,8 +858,11 @@ TextureStorage11_Cube::TextureStorage11_Cube(Renderer *renderer, GLenum internal ...@@ -860,8 +858,11 @@ TextureStorage11_Cube::TextureStorage11_Cube(Renderer *renderer, GLenum internal
mTextureDepth = 1; mTextureDepth = 1;
} }
} }
initializeSerials(getLevelCount() * 6, 6);
} }
TextureStorage11_Cube::~TextureStorage11_Cube() TextureStorage11_Cube::~TextureStorage11_Cube()
{ {
for (unsigned int level = 0; level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS; level++) for (unsigned int level = 0; level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS; level++)
...@@ -1204,11 +1205,6 @@ ID3D11RenderTargetView *TextureStorage11_Cube::getSwizzleRenderTarget(int mipLev ...@@ -1204,11 +1205,6 @@ ID3D11RenderTargetView *TextureStorage11_Cube::getSwizzleRenderTarget(int mipLev
} }
} }
unsigned int TextureStorage11_Cube::getTextureLevelDepth(int mipLevel) const
{
return 6;
}
TextureStorage11_3D::TextureStorage11_3D(Renderer *renderer, GLenum internalformat, bool renderTarget, TextureStorage11_3D::TextureStorage11_3D(Renderer *renderer, GLenum internalformat, bool renderTarget,
GLsizei width, GLsizei height, GLsizei depth, int levels) GLsizei width, GLsizei height, GLsizei depth, int levels)
: TextureStorage11(renderer, GetTextureBindFlags(internalformat, renderTarget)) : TextureStorage11(renderer, GetTextureBindFlags(internalformat, renderTarget))
...@@ -1275,6 +1271,8 @@ TextureStorage11_3D::TextureStorage11_3D(Renderer *renderer, GLenum internalform ...@@ -1275,6 +1271,8 @@ TextureStorage11_3D::TextureStorage11_3D(Renderer *renderer, GLenum internalform
mTextureDepth = desc.Depth; mTextureDepth = desc.Depth;
} }
} }
initializeSerials(getLevelCount() * depth, depth);
} }
TextureStorage11_3D::~TextureStorage11_3D() TextureStorage11_3D::~TextureStorage11_3D()
...@@ -1580,12 +1578,6 @@ ID3D11RenderTargetView *TextureStorage11_3D::getSwizzleRenderTarget(int mipLevel ...@@ -1580,12 +1578,6 @@ ID3D11RenderTargetView *TextureStorage11_3D::getSwizzleRenderTarget(int mipLevel
} }
} }
unsigned int TextureStorage11_3D::getTextureLevelDepth(int mipLevel) const
{
return std::max(mTextureDepth >> mipLevel, 1U);
}
TextureStorage11_2DArray::TextureStorage11_2DArray(Renderer *renderer, GLenum internalformat, bool renderTarget, TextureStorage11_2DArray::TextureStorage11_2DArray(Renderer *renderer, GLenum internalformat, bool renderTarget,
GLsizei width, GLsizei height, GLsizei depth, int levels) GLsizei width, GLsizei height, GLsizei depth, int levels)
: TextureStorage11(renderer, GetTextureBindFlags(internalformat, renderTarget)) : TextureStorage11(renderer, GetTextureBindFlags(internalformat, renderTarget))
...@@ -1652,6 +1644,8 @@ TextureStorage11_2DArray::TextureStorage11_2DArray(Renderer *renderer, GLenum in ...@@ -1652,6 +1644,8 @@ TextureStorage11_2DArray::TextureStorage11_2DArray(Renderer *renderer, GLenum in
mTextureDepth = desc.ArraySize; mTextureDepth = desc.ArraySize;
} }
} }
initializeSerials(getLevelCount() * depth, depth);
} }
TextureStorage11_2DArray::~TextureStorage11_2DArray() TextureStorage11_2DArray::~TextureStorage11_2DArray()
...@@ -1939,9 +1933,4 @@ ID3D11RenderTargetView *TextureStorage11_2DArray::getSwizzleRenderTarget(int mip ...@@ -1939,9 +1933,4 @@ ID3D11RenderTargetView *TextureStorage11_2DArray::getSwizzleRenderTarget(int mip
} }
} }
unsigned int TextureStorage11_2DArray::getTextureLevelDepth(int mipLevel) const
{
return mTextureDepth;
}
} }
...@@ -84,8 +84,6 @@ class TextureStorage11 : public TextureStorage ...@@ -84,8 +84,6 @@ class TextureStorage11 : public TextureStorage
void verifySwizzleExists(GLenum swizzleRed, GLenum swizzleGreen, GLenum swizzleBlue, GLenum swizzleAlpha); void verifySwizzleExists(GLenum swizzleRed, GLenum swizzleGreen, GLenum swizzleBlue, GLenum swizzleAlpha);
virtual unsigned int getTextureLevelDepth(int mipLevel) const = 0;
Renderer11 *mRenderer; Renderer11 *mRenderer;
int mTopLevel; int mTopLevel;
unsigned int mMipLevels; unsigned int mMipLevels;
...@@ -175,8 +173,6 @@ class TextureStorage11_2D : public TextureStorage11 ...@@ -175,8 +173,6 @@ class TextureStorage11_2D : public TextureStorage11
virtual ID3D11Resource *getSwizzleTexture(); virtual ID3D11Resource *getSwizzleTexture();
virtual ID3D11RenderTargetView *getSwizzleRenderTarget(int mipLevel); virtual ID3D11RenderTargetView *getSwizzleRenderTarget(int mipLevel);
virtual unsigned int getTextureLevelDepth(int mipLevel) const;
private: private:
DISALLOW_COPY_AND_ASSIGN(TextureStorage11_2D); DISALLOW_COPY_AND_ASSIGN(TextureStorage11_2D);
...@@ -213,8 +209,6 @@ class TextureStorage11_Cube : public TextureStorage11 ...@@ -213,8 +209,6 @@ class TextureStorage11_Cube : public TextureStorage11
virtual ID3D11Resource *getSwizzleTexture(); virtual ID3D11Resource *getSwizzleTexture();
virtual ID3D11RenderTargetView *getSwizzleRenderTarget(int mipLevel); virtual ID3D11RenderTargetView *getSwizzleRenderTarget(int mipLevel);
virtual unsigned int getTextureLevelDepth(int mipLevel) const;
private: private:
DISALLOW_COPY_AND_ASSIGN(TextureStorage11_Cube); DISALLOW_COPY_AND_ASSIGN(TextureStorage11_Cube);
...@@ -254,8 +248,6 @@ class TextureStorage11_3D : public TextureStorage11 ...@@ -254,8 +248,6 @@ class TextureStorage11_3D : public TextureStorage11
virtual ID3D11Resource *getSwizzleTexture(); virtual ID3D11Resource *getSwizzleTexture();
virtual ID3D11RenderTargetView *getSwizzleRenderTarget(int mipLevel); virtual ID3D11RenderTargetView *getSwizzleRenderTarget(int mipLevel);
virtual unsigned int getTextureLevelDepth(int mipLevel) const;
private: private:
DISALLOW_COPY_AND_ASSIGN(TextureStorage11_3D); DISALLOW_COPY_AND_ASSIGN(TextureStorage11_3D);
...@@ -297,8 +289,6 @@ class TextureStorage11_2DArray : public TextureStorage11 ...@@ -297,8 +289,6 @@ class TextureStorage11_2DArray : public TextureStorage11
virtual ID3D11Resource *getSwizzleTexture(); virtual ID3D11Resource *getSwizzleTexture();
virtual ID3D11RenderTargetView *getSwizzleRenderTarget(int mipLevel); virtual ID3D11RenderTargetView *getSwizzleRenderTarget(int mipLevel);
virtual unsigned int getTextureLevelDepth(int mipLevel) const;
private: private:
DISALLOW_COPY_AND_ASSIGN(TextureStorage11_2DArray); DISALLOW_COPY_AND_ASSIGN(TextureStorage11_2DArray);
......
...@@ -208,7 +208,7 @@ bool Blit9::boxFilter(IDirect3DSurface9 *source, IDirect3DSurface9 *dest) ...@@ -208,7 +208,7 @@ bool Blit9::boxFilter(IDirect3DSurface9 *source, IDirect3DSurface9 *dest)
return true; return true;
} }
bool Blit9::copy2D(gl::Framebuffer *framebuffer, const RECT &sourceRect, GLenum destFormat, GLint xoffset, GLint yoffset, TextureStorageInterface *storage, GLint level) bool Blit9::copy2D(gl::Framebuffer *framebuffer, const RECT &sourceRect, GLenum destFormat, GLint xoffset, GLint yoffset, TextureStorage *storage, GLint level)
{ {
RenderTarget9 *renderTarget = NULL; RenderTarget9 *renderTarget = NULL;
IDirect3DSurface9 *source = NULL; IDirect3DSurface9 *source = NULL;
...@@ -230,7 +230,7 @@ bool Blit9::copy2D(gl::Framebuffer *framebuffer, const RECT &sourceRect, GLenum ...@@ -230,7 +230,7 @@ bool Blit9::copy2D(gl::Framebuffer *framebuffer, const RECT &sourceRect, GLenum
return gl::error(GL_OUT_OF_MEMORY, false); return gl::error(GL_OUT_OF_MEMORY, false);
} }
TextureStorage9_2D *storage9 = TextureStorage9_2D::makeTextureStorage9_2D(storage->getStorageInstance()); TextureStorage9_2D *storage9 = TextureStorage9_2D::makeTextureStorage9_2D(storage);
IDirect3DSurface9 *destSurface = storage9->getSurfaceLevel(level, true); IDirect3DSurface9 *destSurface = storage9->getSurfaceLevel(level, true);
bool result = false; bool result = false;
...@@ -244,7 +244,7 @@ bool Blit9::copy2D(gl::Framebuffer *framebuffer, const RECT &sourceRect, GLenum ...@@ -244,7 +244,7 @@ bool Blit9::copy2D(gl::Framebuffer *framebuffer, const RECT &sourceRect, GLenum
return result; return result;
} }
bool Blit9::copyCube(gl::Framebuffer *framebuffer, const RECT &sourceRect, GLenum destFormat, GLint xoffset, GLint yoffset, TextureStorageInterface *storage, GLenum target, GLint level) bool Blit9::copyCube(gl::Framebuffer *framebuffer, const RECT &sourceRect, GLenum destFormat, GLint xoffset, GLint yoffset, TextureStorage *storage, GLenum target, GLint level)
{ {
RenderTarget9 *renderTarget = NULL; RenderTarget9 *renderTarget = NULL;
IDirect3DSurface9 *source = NULL; IDirect3DSurface9 *source = NULL;
...@@ -266,7 +266,7 @@ bool Blit9::copyCube(gl::Framebuffer *framebuffer, const RECT &sourceRect, GLenu ...@@ -266,7 +266,7 @@ bool Blit9::copyCube(gl::Framebuffer *framebuffer, const RECT &sourceRect, GLenu
return gl::error(GL_OUT_OF_MEMORY, false); return gl::error(GL_OUT_OF_MEMORY, false);
} }
TextureStorage9_Cube *storage9 = TextureStorage9_Cube::makeTextureStorage9_Cube(storage->getStorageInstance()); TextureStorage9_Cube *storage9 = TextureStorage9_Cube::makeTextureStorage9_Cube(storage);
IDirect3DSurface9 *destSurface = storage9->getCubeMapSurface(target, level, true); IDirect3DSurface9 *destSurface = storage9->getCubeMapSurface(target, level, true);
bool result = false; bool result = false;
......
...@@ -21,7 +21,7 @@ class Framebuffer; ...@@ -21,7 +21,7 @@ class Framebuffer;
namespace rx namespace rx
{ {
class Renderer9; class Renderer9;
class TextureStorageInterface; class TextureStorage;
class Blit9 class Blit9
{ {
...@@ -31,8 +31,8 @@ class Blit9 ...@@ -31,8 +31,8 @@ class Blit9
// Copy from source surface to dest surface. // Copy from source surface to dest surface.
// sourceRect, xoffset, yoffset are in D3D coordinates (0,0 in upper-left) // sourceRect, xoffset, yoffset are in D3D coordinates (0,0 in upper-left)
bool copy2D(gl::Framebuffer *framebuffer, const RECT &sourceRect, GLenum destFormat, GLint xoffset, GLint yoffset, TextureStorageInterface *storage, GLint level); bool copy2D(gl::Framebuffer *framebuffer, const RECT &sourceRect, GLenum destFormat, GLint xoffset, GLint yoffset, TextureStorage *storage, GLint level);
bool copyCube(gl::Framebuffer *framebuffer, const RECT &sourceRect, GLenum destFormat, GLint xoffset, GLint yoffset, TextureStorageInterface *storage, GLenum target, GLint level); bool copyCube(gl::Framebuffer *framebuffer, const RECT &sourceRect, GLenum destFormat, GLint xoffset, GLint yoffset, TextureStorage *storage, GLenum target, GLint level);
// Copy from source surface to dest surface. // Copy from source surface to dest surface.
// sourceRect, xoffset, yoffset are in D3D coordinates (0,0 in upper-left) // sourceRect, xoffset, yoffset are in D3D coordinates (0,0 in upper-left)
......
...@@ -270,15 +270,15 @@ IDirect3DSurface9 *Image9::getSurface() ...@@ -270,15 +270,15 @@ IDirect3DSurface9 *Image9::getSurface()
return mSurface; return mSurface;
} }
void Image9::setManagedSurface2D(TextureStorageInterface *storage, int level) void Image9::setManagedSurface2D(TextureStorage *storage, int level)
{ {
TextureStorage9_2D *storage9 = TextureStorage9_2D::makeTextureStorage9_2D(storage->getStorageInstance()); TextureStorage9_2D *storage9 = TextureStorage9_2D::makeTextureStorage9_2D(storage);
setManagedSurface(storage9->getSurfaceLevel(level, false)); setManagedSurface(storage9->getSurfaceLevel(level, false));
} }
void Image9::setManagedSurfaceCube(TextureStorageInterface *storage, int face, int level) void Image9::setManagedSurfaceCube(TextureStorage *storage, int face, int level)
{ {
TextureStorage9_Cube *storage9 = TextureStorage9_Cube::makeTextureStorage9_Cube(storage->getStorageInstance()); TextureStorage9_Cube *storage9 = TextureStorage9_Cube::makeTextureStorage9_Cube(storage);
setManagedSurface(storage9->getCubeMapSurface(GL_TEXTURE_CUBE_MAP_POSITIVE_X + face, level, false)); setManagedSurface(storage9->getCubeMapSurface(GL_TEXTURE_CUBE_MAP_POSITIVE_X + face, level, false));
} }
...@@ -301,28 +301,28 @@ void Image9::setManagedSurface(IDirect3DSurface9 *surface) ...@@ -301,28 +301,28 @@ void Image9::setManagedSurface(IDirect3DSurface9 *surface)
} }
} }
bool Image9::copyToStorage2D(TextureStorageInterface *storage, int level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height) bool Image9::copyToStorage2D(TextureStorage *storage, int level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height)
{ {
ASSERT(getSurface() != NULL); ASSERT(getSurface() != NULL);
TextureStorage9_2D *storage9 = TextureStorage9_2D::makeTextureStorage9_2D(storage->getStorageInstance()); TextureStorage9_2D *storage9 = TextureStorage9_2D::makeTextureStorage9_2D(storage);
return copyToSurface(storage9->getSurfaceLevel(level, true), xoffset, yoffset, width, height); return copyToSurface(storage9->getSurfaceLevel(level, true), xoffset, yoffset, width, height);
} }
bool Image9::copyToStorageCube(TextureStorageInterface *storage, int face, int level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height) bool Image9::copyToStorageCube(TextureStorage *storage, int face, int level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height)
{ {
ASSERT(getSurface() != NULL); ASSERT(getSurface() != NULL);
TextureStorage9_Cube *storage9 = TextureStorage9_Cube::makeTextureStorage9_Cube(storage->getStorageInstance()); TextureStorage9_Cube *storage9 = TextureStorage9_Cube::makeTextureStorage9_Cube(storage);
return copyToSurface(storage9->getCubeMapSurface(GL_TEXTURE_CUBE_MAP_POSITIVE_X + face, level, true), xoffset, yoffset, width, height); return copyToSurface(storage9->getCubeMapSurface(GL_TEXTURE_CUBE_MAP_POSITIVE_X + face, level, true), xoffset, yoffset, width, height);
} }
bool Image9::copyToStorage3D(TextureStorageInterface *storage, int level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth) bool Image9::copyToStorage3D(TextureStorage *storage, int level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth)
{ {
// 3D textures are not supported by the D3D9 backend. // 3D textures are not supported by the D3D9 backend.
UNREACHABLE(); UNREACHABLE();
return false; return false;
} }
bool Image9::copyToStorage2DArray(TextureStorageInterface *storage, int level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height) bool Image9::copyToStorage2DArray(TextureStorage *storage, int level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height)
{ {
// 2D array textures are not supported by the D3D9 backend. // 2D array textures are not supported by the D3D9 backend.
UNREACHABLE(); UNREACHABLE();
......
...@@ -22,7 +22,6 @@ namespace rx ...@@ -22,7 +22,6 @@ namespace rx
{ {
class Renderer; class Renderer;
class Renderer9; class Renderer9;
class TextureStorageInterface;
class Image9 : public ImageD3D class Image9 : public ImageD3D
{ {
...@@ -43,12 +42,12 @@ class Image9 : public ImageD3D ...@@ -43,12 +42,12 @@ class Image9 : public ImageD3D
virtual bool isDirty() const; virtual bool isDirty() const;
IDirect3DSurface9 *getSurface(); IDirect3DSurface9 *getSurface();
virtual void setManagedSurface2D(TextureStorageInterface *storage, int level); virtual void setManagedSurface2D(TextureStorage *storage, int level);
virtual void setManagedSurfaceCube(TextureStorageInterface *storage, int face, int level); virtual void setManagedSurfaceCube(TextureStorage *storage, int face, int level);
virtual bool copyToStorage2D(TextureStorageInterface *storage, int level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height); virtual bool copyToStorage2D(TextureStorage *storage, int level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height);
virtual bool copyToStorageCube(TextureStorageInterface *storage, int face, int level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height); virtual bool copyToStorageCube(TextureStorage *storage, int face, int level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height);
virtual bool copyToStorage3D(TextureStorageInterface *storage, int level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); virtual bool copyToStorage3D(TextureStorage *storage, int level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth);
virtual bool copyToStorage2DArray(TextureStorageInterface *storage, int level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height); virtual bool copyToStorage2DArray(TextureStorage *storage, int level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height);
virtual void loadData(GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, virtual void loadData(GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth,
GLint unpackAlignment, GLenum type, const void *input); GLint unpackAlignment, GLenum type, const void *input);
......
...@@ -685,10 +685,10 @@ void Renderer9::setTexture(gl::SamplerType type, int index, gl::Texture *texture ...@@ -685,10 +685,10 @@ void Renderer9::setTexture(gl::SamplerType type, int index, gl::Texture *texture
{ {
TextureD3D* textureImpl = TextureD3D::makeTextureD3D(texture->getImplementation()); TextureD3D* textureImpl = TextureD3D::makeTextureD3D(texture->getImplementation());
TextureStorageInterface *texStorage = textureImpl->getNativeTexture(); TextureStorage *texStorage = textureImpl->getNativeTexture();
if (texStorage) if (texStorage)
{ {
TextureStorage9 *storage9 = TextureStorage9::makeTextureStorage9(texStorage->getStorageInstance()); TextureStorage9 *storage9 = TextureStorage9::makeTextureStorage9(texStorage);
d3dTexture = storage9->getBaseTexture(); d3dTexture = storage9->getBaseTexture();
} }
// If we get NULL back from getBaseTexture here, something went wrong // If we get NULL back from getBaseTexture here, something went wrong
...@@ -2335,14 +2335,14 @@ int Renderer9::getMaxSwapInterval() const ...@@ -2335,14 +2335,14 @@ int Renderer9::getMaxSwapInterval() const
return mMaxSwapInterval; return mMaxSwapInterval;
} }
bool Renderer9::copyToRenderTarget2D(TextureStorageInterface *dest, TextureStorageInterface *source) bool Renderer9::copyToRenderTarget2D(TextureStorage *dest, TextureStorage *source)
{ {
bool result = false; bool result = false;
if (source && dest) if (source && dest)
{ {
TextureStorage9_2D *source9 = TextureStorage9_2D::makeTextureStorage9_2D(source->getStorageInstance()); TextureStorage9_2D *source9 = TextureStorage9_2D::makeTextureStorage9_2D(source);
TextureStorage9_2D *dest9 = TextureStorage9_2D::makeTextureStorage9_2D(dest->getStorageInstance()); TextureStorage9_2D *dest9 = TextureStorage9_2D::makeTextureStorage9_2D(dest);
int levels = source9->getLevelCount(); int levels = source9->getLevelCount();
for (int i = 0; i < levels; ++i) for (int i = 0; i < levels; ++i)
...@@ -2365,14 +2365,14 @@ bool Renderer9::copyToRenderTarget2D(TextureStorageInterface *dest, TextureStora ...@@ -2365,14 +2365,14 @@ bool Renderer9::copyToRenderTarget2D(TextureStorageInterface *dest, TextureStora
return result; return result;
} }
bool Renderer9::copyToRenderTargetCube(TextureStorageInterface *dest, TextureStorageInterface *source) bool Renderer9::copyToRenderTargetCube(TextureStorage *dest, TextureStorage *source)
{ {
bool result = false; bool result = false;
if (source && dest) if (source && dest)
{ {
TextureStorage9_Cube *source9 = TextureStorage9_Cube::makeTextureStorage9_Cube(source->getStorageInstance()); TextureStorage9_Cube *source9 = TextureStorage9_Cube::makeTextureStorage9_Cube(source);
TextureStorage9_Cube *dest9 = TextureStorage9_Cube::makeTextureStorage9_Cube(dest->getStorageInstance()); TextureStorage9_Cube *dest9 = TextureStorage9_Cube::makeTextureStorage9_Cube(dest);
int levels = source9->getLevelCount(); int levels = source9->getLevelCount();
for (int f = 0; f < 6; f++) for (int f = 0; f < 6; f++)
{ {
...@@ -2397,14 +2397,14 @@ bool Renderer9::copyToRenderTargetCube(TextureStorageInterface *dest, TextureSto ...@@ -2397,14 +2397,14 @@ bool Renderer9::copyToRenderTargetCube(TextureStorageInterface *dest, TextureSto
return result; return result;
} }
bool Renderer9::copyToRenderTarget3D(TextureStorageInterface *dest, TextureStorageInterface *source) bool Renderer9::copyToRenderTarget3D(TextureStorage *dest, TextureStorage *source)
{ {
// 3D textures are not available in the D3D9 backend. // 3D textures are not available in the D3D9 backend.
UNREACHABLE(); UNREACHABLE();
return false; return false;
} }
bool Renderer9::copyToRenderTarget2DArray(TextureStorageInterface *dest, TextureStorageInterface *source) bool Renderer9::copyToRenderTarget2DArray(TextureStorage *dest, TextureStorage *source)
{ {
// 2D array textures are not supported by the D3D9 backend. // 2D array textures are not supported by the D3D9 backend.
UNREACHABLE(); UNREACHABLE();
...@@ -2429,7 +2429,7 @@ D3DPOOL Renderer9::getBufferPool(DWORD usage) const ...@@ -2429,7 +2429,7 @@ D3DPOOL Renderer9::getBufferPool(DWORD usage) const
} }
bool Renderer9::copyImage2D(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat, bool Renderer9::copyImage2D(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat,
GLint xoffset, GLint yoffset, TextureStorageInterface *storage, GLint level) GLint xoffset, GLint yoffset, TextureStorage *storage, GLint level)
{ {
RECT rect; RECT rect;
rect.left = sourceRect.x; rect.left = sourceRect.x;
...@@ -2441,7 +2441,7 @@ bool Renderer9::copyImage2D(gl::Framebuffer *framebuffer, const gl::Rectangle &s ...@@ -2441,7 +2441,7 @@ bool Renderer9::copyImage2D(gl::Framebuffer *framebuffer, const gl::Rectangle &s
} }
bool Renderer9::copyImageCube(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat, bool Renderer9::copyImageCube(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat,
GLint xoffset, GLint yoffset, TextureStorageInterface *storage, GLenum target, GLint level) GLint xoffset, GLint yoffset, TextureStorage *storage, GLenum target, GLint level)
{ {
RECT rect; RECT rect;
rect.left = sourceRect.x; rect.left = sourceRect.x;
...@@ -2453,7 +2453,7 @@ bool Renderer9::copyImageCube(gl::Framebuffer *framebuffer, const gl::Rectangle ...@@ -2453,7 +2453,7 @@ bool Renderer9::copyImageCube(gl::Framebuffer *framebuffer, const gl::Rectangle
} }
bool Renderer9::copyImage3D(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat, bool Renderer9::copyImage3D(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat,
GLint xoffset, GLint yoffset, GLint zOffset, TextureStorageInterface *storage, GLint level) GLint xoffset, GLint yoffset, GLint zOffset, TextureStorage *storage, GLint level)
{ {
// 3D textures are not available in the D3D9 backend. // 3D textures are not available in the D3D9 backend.
UNREACHABLE(); UNREACHABLE();
...@@ -2461,7 +2461,7 @@ bool Renderer9::copyImage3D(gl::Framebuffer *framebuffer, const gl::Rectangle &s ...@@ -2461,7 +2461,7 @@ bool Renderer9::copyImage3D(gl::Framebuffer *framebuffer, const gl::Rectangle &s
} }
bool Renderer9::copyImage2DArray(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat, bool Renderer9::copyImage2DArray(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat,
GLint xoffset, GLint yoffset, GLint zOffset, TextureStorageInterface *storage, GLint level) GLint xoffset, GLint yoffset, GLint zOffset, TextureStorage *storage, GLint level)
{ {
// 2D array textures are not available in the D3D9 backend. // 2D array textures are not available in the D3D9 backend.
UNREACHABLE(); UNREACHABLE();
......
...@@ -119,19 +119,19 @@ class Renderer9 : public Renderer ...@@ -119,19 +119,19 @@ class Renderer9 : public Renderer
virtual int getMaxSwapInterval() const; virtual int getMaxSwapInterval() const;
// Pixel operations // Pixel operations
virtual bool copyToRenderTarget2D(TextureStorageInterface *dest, TextureStorageInterface *source); virtual bool copyToRenderTarget2D(TextureStorage *dest, TextureStorage *source);
virtual bool copyToRenderTargetCube(TextureStorageInterface *dest, TextureStorageInterface *source); virtual bool copyToRenderTargetCube(TextureStorage *dest, TextureStorage *source);
virtual bool copyToRenderTarget3D(TextureStorageInterface *dest, TextureStorageInterface *source); virtual bool copyToRenderTarget3D(TextureStorage *dest, TextureStorage *source);
virtual bool copyToRenderTarget2DArray(TextureStorageInterface *dest, TextureStorageInterface *source); virtual bool copyToRenderTarget2DArray(TextureStorage *dest, TextureStorage *source);
virtual bool copyImage2D(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat, virtual bool copyImage2D(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat,
GLint xoffset, GLint yoffset, TextureStorageInterface *storage, GLint level); GLint xoffset, GLint yoffset, TextureStorage *storage, GLint level);
virtual bool copyImageCube(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat, virtual bool copyImageCube(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat,
GLint xoffset, GLint yoffset, TextureStorageInterface *storage, GLenum target, GLint level); GLint xoffset, GLint yoffset, TextureStorage *storage, GLenum target, GLint level);
virtual bool copyImage3D(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat, virtual bool copyImage3D(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat,
GLint xoffset, GLint yoffset, GLint zOffset, TextureStorageInterface *storage, GLint level); GLint xoffset, GLint yoffset, GLint zOffset, TextureStorage *storage, GLint level);
virtual bool copyImage2DArray(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat, virtual bool copyImage2DArray(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat,
GLint xoffset, GLint yoffset, GLint zOffset, TextureStorageInterface *storage, GLint level); GLint xoffset, GLint yoffset, GLint zOffset, TextureStorage *storage, GLint level);
virtual bool blitRect(gl::Framebuffer *readTarget, const gl::Rectangle &readRect, gl::Framebuffer *drawTarget, const gl::Rectangle &drawRect, virtual bool blitRect(gl::Framebuffer *readTarget, const gl::Rectangle &readRect, gl::Framebuffer *drawTarget, const gl::Rectangle &drawRect,
const gl::Rectangle *scissor, bool blitRenderTarget, bool blitDepth, bool blitStencil, GLenum filter); const gl::Rectangle *scissor, bool blitRenderTarget, bool blitDepth, bool blitStencil, GLenum filter);
......
...@@ -95,6 +95,7 @@ TextureStorage9_2D::TextureStorage9_2D(Renderer *renderer, SwapChain9 *swapchain ...@@ -95,6 +95,7 @@ TextureStorage9_2D::TextureStorage9_2D(Renderer *renderer, SwapChain9 *swapchain
mRenderTarget = NULL; mRenderTarget = NULL;
initializeRenderTarget(); initializeRenderTarget();
initializeSerials(1, 1);
} }
TextureStorage9_2D::TextureStorage9_2D(Renderer *renderer, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, int levels) TextureStorage9_2D::TextureStorage9_2D(Renderer *renderer, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, int levels)
...@@ -121,6 +122,7 @@ TextureStorage9_2D::TextureStorage9_2D(Renderer *renderer, GLenum internalformat ...@@ -121,6 +122,7 @@ TextureStorage9_2D::TextureStorage9_2D(Renderer *renderer, GLenum internalformat
} }
initializeRenderTarget(); initializeRenderTarget();
initializeSerials(getLevelCount(), 1);
} }
TextureStorage9_2D::~TextureStorage9_2D() TextureStorage9_2D::~TextureStorage9_2D()
...@@ -227,6 +229,7 @@ TextureStorage9_Cube::TextureStorage9_Cube(Renderer *renderer, GLenum internalfo ...@@ -227,6 +229,7 @@ TextureStorage9_Cube::TextureStorage9_Cube(Renderer *renderer, GLenum internalfo
} }
initializeRenderTarget(); initializeRenderTarget();
initializeSerials(getLevelCount() * 6, 6);
} }
TextureStorage9_Cube::~TextureStorage9_Cube() TextureStorage9_Cube::~TextureStorage9_Cube()
......
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