Commit fa7b76d0 by Nicolas Capens

Remove base level from texture storage.

BUG=angle:596 Change-Id: I66173f77b6c5aed3b8836cd2c9f1da02ae769429 Reviewed-on: https://chromium-review.googlesource.com/192056Tested-by: 's avatarNicolas Capens <nicolascapens@chromium.org> Reviewed-by: 's avatarShannon Woods <shannonwoods@chromium.org>
parent f61738a5
...@@ -710,7 +710,7 @@ void Texture2D::storage(GLsizei levels, GLenum internalformat, GLsizei width, GL ...@@ -710,7 +710,7 @@ void Texture2D::storage(GLsizei levels, GLenum internalformat, GLsizei width, GL
mImmutable = true; mImmutable = true;
setCompleteTexStorage(new rx::TextureStorageInterface2D(mRenderer, 0, levels, internalformat, IsRenderTargetUsage(mUsage), width, height)); setCompleteTexStorage(new rx::TextureStorageInterface2D(mRenderer, levels, internalformat, IsRenderTargetUsage(mUsage), width, height));
} }
void Texture2D::setCompleteTexStorage(rx::TextureStorageInterface2D *newCompleteTexStorage) void Texture2D::setCompleteTexStorage(rx::TextureStorageInterface2D *newCompleteTexStorage)
...@@ -901,7 +901,7 @@ rx::TextureStorageInterface2D *Texture2D::createCompleteStorage(bool renderTarge ...@@ -901,7 +901,7 @@ rx::TextureStorageInterface2D *Texture2D::createCompleteStorage(bool renderTarge
// use existing storage level count, when previously specified by TexStorage*D // use existing storage level count, when previously specified by TexStorage*D
GLint levels = (mTexStorage ? mTexStorage->getMaxLevel() : creationLevels(width, height, 1)); GLint levels = (mTexStorage ? mTexStorage->getMaxLevel() : creationLevels(width, height, 1));
return new rx::TextureStorageInterface2D(mRenderer, 0, levels, getBaseLevelInternalFormat(), renderTarget, width, height); return new rx::TextureStorageInterface2D(mRenderer, levels, getBaseLevelInternalFormat(), renderTarget, width, height);
} }
void Texture2D::updateStorage() void Texture2D::updateStorage()
...@@ -1046,7 +1046,7 @@ rx::RenderTarget *Texture2D::getDepthSencil(GLint level) ...@@ -1046,7 +1046,7 @@ rx::RenderTarget *Texture2D::getDepthSencil(GLint level)
bool Texture2D::isValidLevel(int level) const bool Texture2D::isValidLevel(int level) const
{ {
return (mTexStorage ? (level >= mTexStorage->getBaseLevel() && level < mTexStorage->getMaxLevel()) : false); return (mTexStorage ? (level >= 0 && level < mTexStorage->getMaxLevel()) : false);
} }
TextureCubeMap::TextureCubeMap(rx::Renderer *renderer, GLuint id) : Texture(renderer, id, GL_TEXTURE_CUBE_MAP) TextureCubeMap::TextureCubeMap(rx::Renderer *renderer, GLuint id) : Texture(renderer, id, GL_TEXTURE_CUBE_MAP)
...@@ -1353,7 +1353,7 @@ rx::TextureStorageInterfaceCube *TextureCubeMap::createCompleteStorage(bool rend ...@@ -1353,7 +1353,7 @@ rx::TextureStorageInterfaceCube *TextureCubeMap::createCompleteStorage(bool rend
// use existing storage level count, when previously specified by TexStorage*D // use existing storage level count, when previously specified by TexStorage*D
GLint levels = (mTexStorage ? mTexStorage->getMaxLevel() : creationLevels(size, size, 1)); GLint levels = (mTexStorage ? mTexStorage->getMaxLevel() : creationLevels(size, size, 1));
return new rx::TextureStorageInterfaceCube(mRenderer, 0, levels, getBaseLevelInternalFormat(), renderTarget, size); return new rx::TextureStorageInterfaceCube(mRenderer, levels, getBaseLevelInternalFormat(), renderTarget, size);
} }
void TextureCubeMap::setCompleteTexStorage(rx::TextureStorageInterfaceCube *newCompleteTexStorage) void TextureCubeMap::setCompleteTexStorage(rx::TextureStorageInterfaceCube *newCompleteTexStorage)
...@@ -1579,7 +1579,7 @@ void TextureCubeMap::storage(GLsizei levels, GLenum internalformat, GLsizei size ...@@ -1579,7 +1579,7 @@ void TextureCubeMap::storage(GLsizei levels, GLenum internalformat, GLsizei size
mImmutable = true; mImmutable = true;
setCompleteTexStorage(new rx::TextureStorageInterfaceCube(mRenderer, 0, levels, internalformat, IsRenderTargetUsage(mUsage), size)); setCompleteTexStorage(new rx::TextureStorageInterfaceCube(mRenderer, levels, internalformat, IsRenderTargetUsage(mUsage), size));
} }
void TextureCubeMap::generateMipmaps() void TextureCubeMap::generateMipmaps()
...@@ -1699,7 +1699,7 @@ rx::RenderTarget *TextureCubeMap::getDepthStencil(GLenum target, GLint level) ...@@ -1699,7 +1699,7 @@ rx::RenderTarget *TextureCubeMap::getDepthStencil(GLenum target, GLint level)
bool TextureCubeMap::isValidFaceLevel(int faceIndex, int level) const bool TextureCubeMap::isValidFaceLevel(int faceIndex, int level) const
{ {
return (mTexStorage ? (level >= mTexStorage->getBaseLevel() && level < mTexStorage->getMaxLevel()) : 0); return (mTexStorage ? (level >= 0 && level < mTexStorage->getMaxLevel()) : 0);
} }
Texture3D::Texture3D(rx::Renderer *renderer, GLuint id) : Texture(renderer, id, GL_TEXTURE_3D) Texture3D::Texture3D(rx::Renderer *renderer, GLuint id) : Texture(renderer, id, GL_TEXTURE_3D)
...@@ -1847,7 +1847,7 @@ void Texture3D::storage(GLsizei levels, GLenum internalformat, GLsizei width, GL ...@@ -1847,7 +1847,7 @@ void Texture3D::storage(GLsizei levels, GLenum internalformat, GLsizei width, GL
mImmutable = true; mImmutable = true;
setCompleteTexStorage(new rx::TextureStorageInterface3D(mRenderer, 0, levels, internalformat, IsRenderTargetUsage(mUsage), width, height, depth)); setCompleteTexStorage(new rx::TextureStorageInterface3D(mRenderer, levels, internalformat, IsRenderTargetUsage(mUsage), width, height, depth));
} }
void Texture3D::generateMipmaps() void Texture3D::generateMipmaps()
...@@ -2039,7 +2039,7 @@ unsigned int Texture3D::getRenderTargetSerial(GLint level, GLint layer) ...@@ -2039,7 +2039,7 @@ unsigned int Texture3D::getRenderTargetSerial(GLint level, GLint layer)
bool Texture3D::isValidLevel(int level) const bool Texture3D::isValidLevel(int level) const
{ {
return (mTexStorage ? (level >= mTexStorage->getBaseLevel() && level < mTexStorage->getMaxLevel()) : 0); return (mTexStorage ? (level >= 0 && level < mTexStorage->getMaxLevel()) : 0);
} }
void Texture3D::initializeStorage(bool renderTarget) void Texture3D::initializeStorage(bool renderTarget)
...@@ -2076,7 +2076,7 @@ rx::TextureStorageInterface3D *Texture3D::createCompleteStorage(bool renderTarge ...@@ -2076,7 +2076,7 @@ rx::TextureStorageInterface3D *Texture3D::createCompleteStorage(bool renderTarge
// use existing storage level count, when previously specified by TexStorage*D // use existing storage level count, when previously specified by TexStorage*D
GLint levels = (mTexStorage ? mTexStorage->getMaxLevel() : creationLevels(width, height, depth)); GLint levels = (mTexStorage ? mTexStorage->getMaxLevel() : creationLevels(width, height, depth));
return new rx::TextureStorageInterface3D(mRenderer, 0, levels, getBaseLevelInternalFormat(), renderTarget, width, height, depth); return new rx::TextureStorageInterface3D(mRenderer, levels, getBaseLevelInternalFormat(), renderTarget, width, height, depth);
} }
void Texture3D::setCompleteTexStorage(rx::TextureStorageInterface3D *newCompleteTexStorage) void Texture3D::setCompleteTexStorage(rx::TextureStorageInterface3D *newCompleteTexStorage)
...@@ -2396,7 +2396,7 @@ void Texture2DArray::storage(GLsizei levels, GLenum internalformat, GLsizei widt ...@@ -2396,7 +2396,7 @@ void Texture2DArray::storage(GLsizei levels, GLenum internalformat, GLsizei widt
} }
mImmutable = true; mImmutable = true;
setCompleteTexStorage(new rx::TextureStorageInterface2DArray(mRenderer, 0, levels, internalformat, IsRenderTargetUsage(mUsage), width, height, depth)); setCompleteTexStorage(new rx::TextureStorageInterface2DArray(mRenderer, levels, internalformat, IsRenderTargetUsage(mUsage), width, height, depth));
} }
void Texture2DArray::generateMipmaps() void Texture2DArray::generateMipmaps()
...@@ -2593,7 +2593,7 @@ unsigned int Texture2DArray::getRenderTargetSerial(GLint level, GLint layer) ...@@ -2593,7 +2593,7 @@ unsigned int Texture2DArray::getRenderTargetSerial(GLint level, GLint layer)
bool Texture2DArray::isValidLevel(int level) const bool Texture2DArray::isValidLevel(int level) const
{ {
return (mTexStorage ? (level >= mTexStorage->getBaseLevel() && level < mTexStorage->getMaxLevel()) : 0); return (mTexStorage ? (level >= 0 && level < mTexStorage->getMaxLevel()) : 0);
} }
void Texture2DArray::initializeStorage(bool renderTarget) void Texture2DArray::initializeStorage(bool renderTarget)
...@@ -2630,7 +2630,7 @@ rx::TextureStorageInterface2DArray *Texture2DArray::createCompleteStorage(bool r ...@@ -2630,7 +2630,7 @@ rx::TextureStorageInterface2DArray *Texture2DArray::createCompleteStorage(bool r
// use existing storage level count, when previously specified by TexStorage*D // use existing storage level count, when previously specified by TexStorage*D
GLint levels = (mTexStorage ? mTexStorage->getMaxLevel() : creationLevels(width, height, 1)); GLint levels = (mTexStorage ? mTexStorage->getMaxLevel() : creationLevels(width, height, 1));
return new rx::TextureStorageInterface2DArray(mRenderer, 0, levels, getBaseLevelInternalFormat(), renderTarget, width, height, depth); return new rx::TextureStorageInterface2DArray(mRenderer, levels, getBaseLevelInternalFormat(), renderTarget, width, height, depth);
} }
void Texture2DArray::setCompleteTexStorage(rx::TextureStorageInterface2DArray *newCompleteTexStorage) void Texture2DArray::setCompleteTexStorage(rx::TextureStorageInterface2DArray *newCompleteTexStorage)
......
...@@ -254,10 +254,10 @@ class Renderer ...@@ -254,10 +254,10 @@ class Renderer
virtual Image *createImage() = 0; virtual Image *createImage() = 0;
virtual void generateMipmap(Image *dest, Image *source) = 0; virtual void generateMipmap(Image *dest, Image *source) = 0;
virtual TextureStorage *createTextureStorage2D(SwapChain *swapChain) = 0; virtual TextureStorage *createTextureStorage2D(SwapChain *swapChain) = 0;
virtual TextureStorage *createTextureStorage2D(int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height) = 0; virtual TextureStorage *createTextureStorage2D(int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height) = 0;
virtual TextureStorage *createTextureStorageCube(int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget, int size) = 0; virtual TextureStorage *createTextureStorageCube(int maxLevel, GLenum internalformat, bool renderTarget, int size) = 0;
virtual TextureStorage *createTextureStorage3D(int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, GLsizei depth) = 0; virtual TextureStorage *createTextureStorage3D(int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, GLsizei depth) = 0;
virtual TextureStorage *createTextureStorage2DArray(int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, GLsizei depth) = 0; virtual TextureStorage *createTextureStorage2DArray(int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, GLsizei depth) = 0;
// Buffer creation // Buffer creation
virtual VertexBuffer *createVertexBuffer() = 0; virtual VertexBuffer *createVertexBuffer() = 0;
......
...@@ -57,11 +57,6 @@ int TextureStorageInterface::getTopLevel() const ...@@ -57,11 +57,6 @@ int TextureStorageInterface::getTopLevel() const
return mInstance->getTopLevel(); return mInstance->getTopLevel();
} }
int TextureStorageInterface::getBaseLevel() const
{
return mInstance->getBaseLevel();
}
int TextureStorageInterface::getMaxLevel() const int TextureStorageInterface::getMaxLevel() const
{ {
return mInstance->getMaxLevel(); return mInstance->getMaxLevel();
...@@ -74,9 +69,9 @@ TextureStorageInterface2D::TextureStorageInterface2D(Renderer *renderer, SwapCha ...@@ -74,9 +69,9 @@ TextureStorageInterface2D::TextureStorageInterface2D(Renderer *renderer, SwapCha
mInstance = renderer->createTextureStorage2D(swapchain); mInstance = renderer->createTextureStorage2D(swapchain);
} }
TextureStorageInterface2D::TextureStorageInterface2D(Renderer *renderer, int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height) TextureStorageInterface2D::TextureStorageInterface2D(Renderer *renderer, int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height)
{ {
mInstance = renderer->createTextureStorage2D(baseLevel, maxLevel, internalformat, renderTarget, width, height); mInstance = renderer->createTextureStorage2D(maxLevel, internalformat, renderTarget, width, height);
mFirstRenderTargetSerial = gl::RenderbufferStorage::issueSerials(static_cast<GLuint>(mInstance->levelCount())); mFirstRenderTargetSerial = gl::RenderbufferStorage::issueSerials(static_cast<GLuint>(mInstance->levelCount()));
} }
...@@ -99,9 +94,9 @@ unsigned int TextureStorageInterface2D::getRenderTargetSerial(GLint level) const ...@@ -99,9 +94,9 @@ unsigned int TextureStorageInterface2D::getRenderTargetSerial(GLint level) const
return mFirstRenderTargetSerial + level; return mFirstRenderTargetSerial + level;
} }
TextureStorageInterfaceCube::TextureStorageInterfaceCube(Renderer *renderer, int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget, int size) TextureStorageInterfaceCube::TextureStorageInterfaceCube(Renderer *renderer, int maxLevel, GLenum internalformat, bool renderTarget, int size)
{ {
mInstance = renderer->createTextureStorageCube(baseLevel, maxLevel, internalformat, renderTarget, size); mInstance = renderer->createTextureStorageCube(maxLevel, internalformat, renderTarget, size);
mFirstRenderTargetSerial = gl::RenderbufferStorage::issueSerials(static_cast<GLuint>(mInstance->levelCount() * 6)); mFirstRenderTargetSerial = gl::RenderbufferStorage::issueSerials(static_cast<GLuint>(mInstance->levelCount() * 6));
} }
...@@ -124,11 +119,11 @@ unsigned int TextureStorageInterfaceCube::getRenderTargetSerial(GLenum target, G ...@@ -124,11 +119,11 @@ unsigned int TextureStorageInterfaceCube::getRenderTargetSerial(GLenum target, G
return mFirstRenderTargetSerial + (level * 6) + gl::TextureCubeMap::targetToIndex(target); return mFirstRenderTargetSerial + (level * 6) + gl::TextureCubeMap::targetToIndex(target);
} }
TextureStorageInterface3D::TextureStorageInterface3D(Renderer *renderer, int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget, TextureStorageInterface3D::TextureStorageInterface3D(Renderer *renderer, int maxLevel, GLenum internalformat, bool renderTarget,
GLsizei width, GLsizei height, GLsizei depth) GLsizei width, GLsizei height, GLsizei depth)
{ {
mInstance = renderer->createTextureStorage3D(baseLevel, maxLevel, internalformat, renderTarget, width, height, depth); mInstance = renderer->createTextureStorage3D(maxLevel, internalformat, renderTarget, width, height, depth);
mFirstRenderTargetSerial = gl::RenderbufferStorage::issueSerials(static_cast<GLuint>(mInstance->levelCount() * depth)); mFirstRenderTargetSerial = gl::RenderbufferStorage::issueSerials(static_cast<GLuint>(mInstance->levelCount() * depth));
} }
...@@ -156,10 +151,10 @@ unsigned int TextureStorageInterface3D::getRenderTargetSerial(GLint level, GLint ...@@ -156,10 +151,10 @@ unsigned int TextureStorageInterface3D::getRenderTargetSerial(GLint level, GLint
return mFirstRenderTargetSerial + static_cast<unsigned int>((layer * mInstance->levelCount()) + level); return mFirstRenderTargetSerial + static_cast<unsigned int>((layer * mInstance->levelCount()) + level);
} }
TextureStorageInterface2DArray::TextureStorageInterface2DArray(Renderer *renderer, int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget, TextureStorageInterface2DArray::TextureStorageInterface2DArray(Renderer *renderer, int maxLevel, GLenum internalformat, bool renderTarget,
GLsizei width, GLsizei height, GLsizei depth) GLsizei width, GLsizei height, GLsizei depth)
{ {
mInstance = renderer->createTextureStorage2DArray(baseLevel, maxLevel, internalformat, renderTarget, width, height, depth); mInstance = renderer->createTextureStorage2DArray(maxLevel, internalformat, renderTarget, width, height, depth);
mFirstRenderTargetSerial = gl::RenderbufferStorage::issueSerials(static_cast<GLuint>(mInstance->levelCount() * depth)); mFirstRenderTargetSerial = gl::RenderbufferStorage::issueSerials(static_cast<GLuint>(mInstance->levelCount() * depth));
} }
......
...@@ -28,10 +28,9 @@ class TextureStorage ...@@ -28,10 +28,9 @@ class TextureStorage
virtual int getTopLevel() const = 0; virtual int getTopLevel() const = 0;
virtual bool isRenderTarget() const = 0; virtual bool isRenderTarget() const = 0;
virtual bool isManaged() const = 0; virtual bool isManaged() const = 0;
virtual int getBaseLevel() const = 0;
virtual int getMaxLevel() const = 0; virtual int getMaxLevel() const = 0;
int levelCount() const { return getMaxLevel() - getBaseLevel(); } int levelCount() const { return getMaxLevel(); }
virtual RenderTarget *getRenderTarget(int level) = 0; virtual RenderTarget *getRenderTarget(int level) = 0;
virtual RenderTarget *getRenderTargetFace(GLenum faceTarget, int level) = 0; virtual RenderTarget *getRenderTargetFace(GLenum faceTarget, int level) = 0;
...@@ -57,7 +56,6 @@ class TextureStorageInterface ...@@ -57,7 +56,6 @@ class TextureStorageInterface
virtual int getTopLevel() const; virtual int getTopLevel() const;
virtual bool isRenderTarget() const; virtual bool isRenderTarget() const;
virtual bool isManaged() const; virtual bool isManaged() const;
virtual int getBaseLevel() const;
virtual int getMaxLevel() const; virtual int getMaxLevel() const;
protected: protected:
...@@ -76,7 +74,7 @@ class TextureStorageInterface2D : public TextureStorageInterface ...@@ -76,7 +74,7 @@ class TextureStorageInterface2D : public TextureStorageInterface
{ {
public: public:
TextureStorageInterface2D(Renderer *renderer, SwapChain *swapchain); TextureStorageInterface2D(Renderer *renderer, SwapChain *swapchain);
TextureStorageInterface2D(Renderer *renderer, int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height); TextureStorageInterface2D(Renderer *renderer, int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height);
virtual ~TextureStorageInterface2D(); virtual ~TextureStorageInterface2D();
void generateMipmap(int level); void generateMipmap(int level);
...@@ -93,7 +91,7 @@ class TextureStorageInterface2D : public TextureStorageInterface ...@@ -93,7 +91,7 @@ class TextureStorageInterface2D : public TextureStorageInterface
class TextureStorageInterfaceCube : public TextureStorageInterface class TextureStorageInterfaceCube : public TextureStorageInterface
{ {
public: public:
TextureStorageInterfaceCube(Renderer *renderer, int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget, int size); TextureStorageInterfaceCube(Renderer *renderer, int maxLevel, GLenum internalformat, bool renderTarget, int size);
virtual ~TextureStorageInterfaceCube(); virtual ~TextureStorageInterfaceCube();
void generateMipmap(int faceIndex, int level); void generateMipmap(int faceIndex, int level);
...@@ -110,7 +108,7 @@ class TextureStorageInterfaceCube : public TextureStorageInterface ...@@ -110,7 +108,7 @@ class TextureStorageInterfaceCube : public TextureStorageInterface
class TextureStorageInterface3D : public TextureStorageInterface class TextureStorageInterface3D : public TextureStorageInterface
{ {
public: public:
TextureStorageInterface3D(Renderer *renderer, int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget, TextureStorageInterface3D(Renderer *renderer, int maxLevel, GLenum internalformat, bool renderTarget,
GLsizei width, GLsizei height, GLsizei depth); GLsizei width, GLsizei height, GLsizei depth);
virtual ~TextureStorageInterface3D(); virtual ~TextureStorageInterface3D();
...@@ -129,7 +127,7 @@ class TextureStorageInterface3D : public TextureStorageInterface ...@@ -129,7 +127,7 @@ class TextureStorageInterface3D : public TextureStorageInterface
class TextureStorageInterface2DArray : public TextureStorageInterface class TextureStorageInterface2DArray : public TextureStorageInterface
{ {
public: public:
TextureStorageInterface2DArray(Renderer *renderer, int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget, TextureStorageInterface2DArray(Renderer *renderer, int maxLevel, GLenum internalformat, bool renderTarget,
GLsizei width, GLsizei height, GLsizei depth); GLsizei width, GLsizei height, GLsizei depth);
virtual ~TextureStorageInterface2DArray(); virtual ~TextureStorageInterface2DArray();
......
...@@ -3295,24 +3295,24 @@ TextureStorage *Renderer11::createTextureStorage2D(SwapChain *swapChain) ...@@ -3295,24 +3295,24 @@ TextureStorage *Renderer11::createTextureStorage2D(SwapChain *swapChain)
return new TextureStorage11_2D(this, swapChain11); return new TextureStorage11_2D(this, swapChain11);
} }
TextureStorage *Renderer11::createTextureStorage2D(int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height) TextureStorage *Renderer11::createTextureStorage2D(int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height)
{ {
return new TextureStorage11_2D(this, baseLevel, maxLevel, internalformat, renderTarget, width, height); return new TextureStorage11_2D(this, maxLevel, internalformat, renderTarget, width, height);
} }
TextureStorage *Renderer11::createTextureStorageCube(int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget, int size) TextureStorage *Renderer11::createTextureStorageCube(int maxLevel, GLenum internalformat, bool renderTarget, int size)
{ {
return new TextureStorage11_Cube(this, baseLevel, maxLevel, internalformat, renderTarget, size); return new TextureStorage11_Cube(this, maxLevel, internalformat, renderTarget, size);
} }
TextureStorage *Renderer11::createTextureStorage3D(int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, GLsizei depth) TextureStorage *Renderer11::createTextureStorage3D(int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, GLsizei depth)
{ {
return new TextureStorage11_3D(this, baseLevel, maxLevel, internalformat, renderTarget, width, height, depth); return new TextureStorage11_3D(this, maxLevel, internalformat, renderTarget, width, height, depth);
} }
TextureStorage *Renderer11::createTextureStorage2DArray(int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, GLsizei depth) TextureStorage *Renderer11::createTextureStorage2DArray(int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, GLsizei depth)
{ {
return new TextureStorage11_2DArray(this, baseLevel, maxLevel, internalformat, renderTarget, width, height, depth); return new TextureStorage11_2DArray(this, maxLevel, internalformat, renderTarget, width, height, depth);
} }
void Renderer11::readTextureData(ID3D11Texture2D *texture, unsigned int subResource, const gl::Rectangle &area, void Renderer11::readTextureData(ID3D11Texture2D *texture, unsigned int subResource, const gl::Rectangle &area,
......
...@@ -202,10 +202,10 @@ class Renderer11 : public Renderer ...@@ -202,10 +202,10 @@ class Renderer11 : public Renderer
virtual Image *createImage(); virtual Image *createImage();
virtual void generateMipmap(Image *dest, Image *source); virtual void generateMipmap(Image *dest, Image *source);
virtual TextureStorage *createTextureStorage2D(SwapChain *swapChain); virtual TextureStorage *createTextureStorage2D(SwapChain *swapChain);
virtual TextureStorage *createTextureStorage2D(int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height); virtual TextureStorage *createTextureStorage2D(int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height);
virtual TextureStorage *createTextureStorageCube(int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget, int size); virtual TextureStorage *createTextureStorageCube(int maxLevel, GLenum internalformat, bool renderTarget, int size);
virtual TextureStorage *createTextureStorage3D(int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, GLsizei depth); virtual TextureStorage *createTextureStorage3D(int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, GLsizei depth);
virtual TextureStorage *createTextureStorage2DArray(int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, GLsizei depth); virtual TextureStorage *createTextureStorage2DArray(int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, GLsizei depth);
// Buffer creation // Buffer creation
virtual VertexBuffer *createVertexBuffer(); virtual VertexBuffer *createVertexBuffer();
......
...@@ -46,11 +46,10 @@ bool TextureStorage11::SwizzleCacheValue::operator!=(const SwizzleCacheValue &ot ...@@ -46,11 +46,10 @@ bool TextureStorage11::SwizzleCacheValue::operator!=(const SwizzleCacheValue &ot
return !(*this == other); return !(*this == other);
} }
TextureStorage11::TextureStorage11(Renderer *renderer, int baseLevel, UINT bindFlags) TextureStorage11::TextureStorage11(Renderer *renderer, UINT bindFlags)
: mBindFlags(bindFlags), : mBindFlags(bindFlags),
mTopLevel(0), mTopLevel(0),
mMipLevels(0), mMipLevels(0),
mBaseLevel(baseLevel),
mTextureFormat(DXGI_FORMAT_UNKNOWN), mTextureFormat(DXGI_FORMAT_UNKNOWN),
mShaderResourceFormat(DXGI_FORMAT_UNKNOWN), mShaderResourceFormat(DXGI_FORMAT_UNKNOWN),
mRenderTargetFormat(DXGI_FORMAT_UNKNOWN), mRenderTargetFormat(DXGI_FORMAT_UNKNOWN),
...@@ -112,34 +111,24 @@ bool TextureStorage11::isManaged() const ...@@ -112,34 +111,24 @@ bool TextureStorage11::isManaged() const
return false; return false;
} }
int TextureStorage11::getBaseLevel() const
{
return mBaseLevel;
}
int TextureStorage11::getMaxLevel() const int TextureStorage11::getMaxLevel() const
{ {
int levels = 0; return mMipLevels - mTopLevel;
if (getBaseTexture())
{
levels = mMipLevels - getTopLevel();
}
return getBaseLevel() + levels;
} }
int TextureStorage11::getLevelWidth(int mipLevel) const int TextureStorage11::getLevelWidth(int mipLevel) const
{ {
return std::max((static_cast<int>(mTextureWidth) >> (mipLevel - mBaseLevel)), 1); return std::max(static_cast<int>(mTextureWidth) >> mipLevel, 1);
} }
int TextureStorage11::getLevelHeight(int mipLevel) const int TextureStorage11::getLevelHeight(int mipLevel) const
{ {
return std::max((static_cast<int>(mTextureHeight) >> (mipLevel - mBaseLevel)), 1); return std::max(static_cast<int>(mTextureHeight) >> mipLevel, 1);
} }
int TextureStorage11::getLevelDepth(int mipLevel) const int TextureStorage11::getLevelDepth(int mipLevel) const
{ {
return std::max((static_cast<int>(mTextureDepth) >> (mipLevel - mBaseLevel)), 1); return std::max(static_cast<int>(mTextureDepth) >> mipLevel, 1);
} }
UINT TextureStorage11::getSubresourceIndex(int mipLevel, int layerTarget) const UINT TextureStorage11::getSubresourceIndex(int mipLevel, int layerTarget) const
...@@ -155,7 +144,7 @@ UINT TextureStorage11::getSubresourceIndex(int mipLevel, int layerTarget) const ...@@ -155,7 +144,7 @@ UINT TextureStorage11::getSubresourceIndex(int mipLevel, int layerTarget) const
void TextureStorage11::generateSwizzles(GLenum swizzleRed, GLenum swizzleGreen, GLenum swizzleBlue, GLenum swizzleAlpha) void TextureStorage11::generateSwizzles(GLenum swizzleRed, GLenum swizzleGreen, GLenum swizzleBlue, GLenum swizzleAlpha)
{ {
SwizzleCacheValue swizzleTarget(swizzleRed, swizzleGreen, swizzleBlue, swizzleAlpha); SwizzleCacheValue swizzleTarget(swizzleRed, swizzleGreen, swizzleBlue, swizzleAlpha);
for (int level = getBaseLevel(); level < getMaxLevel(); level++) for (int level = mTopLevel; level < getMaxLevel(); level++)
{ {
// Check if the swizzle for this level is out of date // Check if the swizzle for this level is out of date
if (mSwizzleCache[level] != swizzleTarget) if (mSwizzleCache[level] != swizzleTarget)
...@@ -285,7 +274,7 @@ void TextureStorage11::verifySwizzleExists(GLenum swizzleRed, GLenum swizzleGree ...@@ -285,7 +274,7 @@ 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, 0, D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE) : TextureStorage11(renderer, D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE)
{ {
mTexture = swapchain->getOffscreenTexture(); mTexture = swapchain->getOffscreenTexture();
mTexture->AddRef(); mTexture->AddRef();
...@@ -326,8 +315,8 @@ TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, SwapChain11 *swapch ...@@ -326,8 +315,8 @@ TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, SwapChain11 *swapch
mDepthStencilFormat = DXGI_FORMAT_UNKNOWN; mDepthStencilFormat = DXGI_FORMAT_UNKNOWN;
} }
TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height) TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height)
: TextureStorage11(renderer, baseLevel, GetTextureBindFlags(internalformat, renderer->getCurrentClientVersion(), renderTarget)) : TextureStorage11(renderer, GetTextureBindFlags(internalformat, renderer->getCurrentClientVersion(), renderTarget))
{ {
mTexture = NULL; mTexture = NULL;
mSwizzleTexture = NULL; mSwizzleTexture = NULL;
...@@ -428,7 +417,7 @@ ID3D11Resource *TextureStorage11_2D::getBaseTexture() const ...@@ -428,7 +417,7 @@ ID3D11Resource *TextureStorage11_2D::getBaseTexture() const
RenderTarget *TextureStorage11_2D::getRenderTarget(int level) RenderTarget *TextureStorage11_2D::getRenderTarget(int level)
{ {
if (level >= getBaseLevel() && level < getMaxLevel()) if (level >= 0 && level < getMaxLevel())
{ {
if (!mRenderTarget[level]) if (!mRenderTarget[level])
{ {
...@@ -445,7 +434,7 @@ RenderTarget *TextureStorage11_2D::getRenderTarget(int level) ...@@ -445,7 +434,7 @@ RenderTarget *TextureStorage11_2D::getRenderTarget(int level)
D3D11_RENDER_TARGET_VIEW_DESC rtvDesc; D3D11_RENDER_TARGET_VIEW_DESC rtvDesc;
rtvDesc.Format = mRenderTargetFormat; rtvDesc.Format = mRenderTargetFormat;
rtvDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D; rtvDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D;
rtvDesc.Texture2D.MipSlice = level - getBaseLevel(); rtvDesc.Texture2D.MipSlice = mTopLevel + level;
ID3D11RenderTargetView *rtv; ID3D11RenderTargetView *rtv;
HRESULT result = device->CreateRenderTargetView(mTexture, &rtvDesc, &rtv); HRESULT result = device->CreateRenderTargetView(mTexture, &rtvDesc, &rtv);
...@@ -468,7 +457,7 @@ RenderTarget *TextureStorage11_2D::getRenderTarget(int level) ...@@ -468,7 +457,7 @@ RenderTarget *TextureStorage11_2D::getRenderTarget(int level)
D3D11_DEPTH_STENCIL_VIEW_DESC dsvDesc; D3D11_DEPTH_STENCIL_VIEW_DESC dsvDesc;
dsvDesc.Format = mDepthStencilFormat; dsvDesc.Format = mDepthStencilFormat;
dsvDesc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D; dsvDesc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D;
dsvDesc.Texture2D.MipSlice = level; dsvDesc.Texture2D.MipSlice = mTopLevel + level;
dsvDesc.Flags = 0; dsvDesc.Flags = 0;
ID3D11DepthStencilView *dsv; ID3D11DepthStencilView *dsv;
...@@ -578,7 +567,7 @@ ID3D11Texture2D *TextureStorage11_2D::getSwizzleTexture() ...@@ -578,7 +567,7 @@ ID3D11Texture2D *TextureStorage11_2D::getSwizzleTexture()
ID3D11RenderTargetView *TextureStorage11_2D::getSwizzleRenderTarget(int mipLevel) ID3D11RenderTargetView *TextureStorage11_2D::getSwizzleRenderTarget(int mipLevel)
{ {
if (mipLevel >= getBaseLevel() && mipLevel < getMaxLevel()) if (mipLevel >= 0 && mipLevel < getMaxLevel())
{ {
if (!mSwizzleRenderTargets[mipLevel]) if (!mSwizzleRenderTargets[mipLevel])
{ {
...@@ -593,7 +582,7 @@ ID3D11RenderTargetView *TextureStorage11_2D::getSwizzleRenderTarget(int mipLevel ...@@ -593,7 +582,7 @@ ID3D11RenderTargetView *TextureStorage11_2D::getSwizzleRenderTarget(int mipLevel
D3D11_RENDER_TARGET_VIEW_DESC rtvDesc; D3D11_RENDER_TARGET_VIEW_DESC rtvDesc;
rtvDesc.Format = mSwizzleRenderTargetFormat; rtvDesc.Format = mSwizzleRenderTargetFormat;
rtvDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D; rtvDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D;
rtvDesc.Texture2D.MipSlice = mipLevel - getBaseLevel(); rtvDesc.Texture2D.MipSlice = mTopLevel + mipLevel;
HRESULT result = device->CreateRenderTargetView(mSwizzleTexture, &rtvDesc, &mSwizzleRenderTargets[mipLevel]); HRESULT result = device->CreateRenderTargetView(mSwizzleTexture, &rtvDesc, &mSwizzleRenderTargets[mipLevel]);
} }
...@@ -608,7 +597,7 @@ ID3D11RenderTargetView *TextureStorage11_2D::getSwizzleRenderTarget(int mipLevel ...@@ -608,7 +597,7 @@ ID3D11RenderTargetView *TextureStorage11_2D::getSwizzleRenderTarget(int mipLevel
ID3D11ShaderResourceView *TextureStorage11_2D::getSRVLevel(int mipLevel) ID3D11ShaderResourceView *TextureStorage11_2D::getSRVLevel(int mipLevel)
{ {
if (mipLevel >= getBaseLevel() && mipLevel < getMaxLevel()) if (mipLevel >= 0 && mipLevel < getMaxLevel())
{ {
if (!mLevelSRVs[mipLevel]) if (!mLevelSRVs[mipLevel])
{ {
...@@ -618,7 +607,7 @@ ID3D11ShaderResourceView *TextureStorage11_2D::getSRVLevel(int mipLevel) ...@@ -618,7 +607,7 @@ ID3D11ShaderResourceView *TextureStorage11_2D::getSRVLevel(int mipLevel)
D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc; D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc;
srvDesc.Format = mShaderResourceFormat; srvDesc.Format = mShaderResourceFormat;
srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D; srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D;
srvDesc.Texture2D.MostDetailedMip = mipLevel - getBaseLevel(); srvDesc.Texture2D.MostDetailedMip = mTopLevel + mipLevel;
srvDesc.Texture2D.MipLevels = 1; srvDesc.Texture2D.MipLevels = 1;
result = device->CreateShaderResourceView(mTexture, &srvDesc, &mLevelSRVs[mipLevel]); result = device->CreateShaderResourceView(mTexture, &srvDesc, &mLevelSRVs[mipLevel]);
...@@ -643,8 +632,8 @@ unsigned int TextureStorage11_2D::getTextureLevelDepth(int mipLevel) const ...@@ -643,8 +632,8 @@ unsigned int TextureStorage11_2D::getTextureLevelDepth(int mipLevel) const
return 1; return 1;
} }
TextureStorage11_Cube::TextureStorage11_Cube(Renderer *renderer, int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget, int size) TextureStorage11_Cube::TextureStorage11_Cube(Renderer *renderer, int maxLevel, GLenum internalformat, bool renderTarget, int size)
: TextureStorage11(renderer, baseLevel, GetTextureBindFlags(internalformat, renderer->getCurrentClientVersion(), renderTarget)) : TextureStorage11(renderer, GetTextureBindFlags(internalformat, renderer->getCurrentClientVersion(), renderTarget))
{ {
mTexture = NULL; mTexture = NULL;
mSwizzleTexture = NULL; mSwizzleTexture = NULL;
...@@ -746,7 +735,7 @@ ID3D11Resource *TextureStorage11_Cube::getBaseTexture() const ...@@ -746,7 +735,7 @@ ID3D11Resource *TextureStorage11_Cube::getBaseTexture() const
RenderTarget *TextureStorage11_Cube::getRenderTargetFace(GLenum faceTarget, int level) RenderTarget *TextureStorage11_Cube::getRenderTargetFace(GLenum faceTarget, int level)
{ {
if (level >= getBaseLevel() && level < getMaxLevel()) if (level >= 0 && level < getMaxLevel())
{ {
int faceIndex = gl::TextureCubeMap::targetToIndex(faceTarget); int faceIndex = gl::TextureCubeMap::targetToIndex(faceTarget);
if (!mRenderTarget[faceIndex][level]) if (!mRenderTarget[faceIndex][level])
...@@ -757,7 +746,7 @@ RenderTarget *TextureStorage11_Cube::getRenderTargetFace(GLenum faceTarget, int ...@@ -757,7 +746,7 @@ RenderTarget *TextureStorage11_Cube::getRenderTargetFace(GLenum faceTarget, int
D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc; D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc;
srvDesc.Format = mShaderResourceFormat; srvDesc.Format = mShaderResourceFormat;
srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2DARRAY; // Will be used with Texture2D sampler, not TextureCube srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2DARRAY; // Will be used with Texture2D sampler, not TextureCube
srvDesc.Texture2DArray.MostDetailedMip = level - getBaseLevel(); srvDesc.Texture2DArray.MostDetailedMip = mTopLevel + level;
srvDesc.Texture2DArray.MipLevels = 1; srvDesc.Texture2DArray.MipLevels = 1;
srvDesc.Texture2DArray.FirstArraySlice = faceIndex; srvDesc.Texture2DArray.FirstArraySlice = faceIndex;
srvDesc.Texture2DArray.ArraySize = 1; srvDesc.Texture2DArray.ArraySize = 1;
...@@ -776,7 +765,7 @@ RenderTarget *TextureStorage11_Cube::getRenderTargetFace(GLenum faceTarget, int ...@@ -776,7 +765,7 @@ RenderTarget *TextureStorage11_Cube::getRenderTargetFace(GLenum faceTarget, int
D3D11_RENDER_TARGET_VIEW_DESC rtvDesc; D3D11_RENDER_TARGET_VIEW_DESC rtvDesc;
rtvDesc.Format = mRenderTargetFormat; rtvDesc.Format = mRenderTargetFormat;
rtvDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2DARRAY; rtvDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2DARRAY;
rtvDesc.Texture2DArray.MipSlice = level - getBaseLevel(); rtvDesc.Texture2DArray.MipSlice = mTopLevel + level;
rtvDesc.Texture2DArray.FirstArraySlice = faceIndex; rtvDesc.Texture2DArray.FirstArraySlice = faceIndex;
rtvDesc.Texture2DArray.ArraySize = 1; rtvDesc.Texture2DArray.ArraySize = 1;
...@@ -802,7 +791,7 @@ RenderTarget *TextureStorage11_Cube::getRenderTargetFace(GLenum faceTarget, int ...@@ -802,7 +791,7 @@ RenderTarget *TextureStorage11_Cube::getRenderTargetFace(GLenum faceTarget, int
dsvDesc.Format = mDepthStencilFormat; dsvDesc.Format = mDepthStencilFormat;
dsvDesc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2DARRAY; dsvDesc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2DARRAY;
dsvDesc.Flags = 0; dsvDesc.Flags = 0;
dsvDesc.Texture2DArray.MipSlice = level - getBaseLevel(); dsvDesc.Texture2DArray.MipSlice = mTopLevel + level;
dsvDesc.Texture2DArray.FirstArraySlice = faceIndex; dsvDesc.Texture2DArray.FirstArraySlice = faceIndex;
dsvDesc.Texture2DArray.ArraySize = 1; dsvDesc.Texture2DArray.ArraySize = 1;
...@@ -928,7 +917,7 @@ ID3D11Texture2D *TextureStorage11_Cube::getSwizzleTexture() ...@@ -928,7 +917,7 @@ ID3D11Texture2D *TextureStorage11_Cube::getSwizzleTexture()
ID3D11RenderTargetView *TextureStorage11_Cube::getSwizzleRenderTarget(int mipLevel) ID3D11RenderTargetView *TextureStorage11_Cube::getSwizzleRenderTarget(int mipLevel)
{ {
if (mipLevel >= getBaseLevel() && mipLevel < getMaxLevel()) if (mipLevel >= 0 && mipLevel < getMaxLevel())
{ {
if (!mSwizzleRenderTargets[mipLevel]) if (!mSwizzleRenderTargets[mipLevel])
{ {
...@@ -943,7 +932,7 @@ ID3D11RenderTargetView *TextureStorage11_Cube::getSwizzleRenderTarget(int mipLev ...@@ -943,7 +932,7 @@ ID3D11RenderTargetView *TextureStorage11_Cube::getSwizzleRenderTarget(int mipLev
D3D11_RENDER_TARGET_VIEW_DESC rtvDesc; D3D11_RENDER_TARGET_VIEW_DESC rtvDesc;
rtvDesc.Format = mSwizzleRenderTargetFormat; rtvDesc.Format = mSwizzleRenderTargetFormat;
rtvDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2DARRAY; rtvDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2DARRAY;
rtvDesc.Texture2DArray.MipSlice = mipLevel - getBaseLevel(); rtvDesc.Texture2DArray.MipSlice = mTopLevel + mipLevel;
rtvDesc.Texture2DArray.FirstArraySlice = 0; rtvDesc.Texture2DArray.FirstArraySlice = 0;
rtvDesc.Texture2DArray.ArraySize = 6; rtvDesc.Texture2DArray.ArraySize = 6;
...@@ -960,7 +949,7 @@ ID3D11RenderTargetView *TextureStorage11_Cube::getSwizzleRenderTarget(int mipLev ...@@ -960,7 +949,7 @@ ID3D11RenderTargetView *TextureStorage11_Cube::getSwizzleRenderTarget(int mipLev
ID3D11ShaderResourceView *TextureStorage11_Cube::getSRVLevel(int mipLevel) ID3D11ShaderResourceView *TextureStorage11_Cube::getSRVLevel(int mipLevel)
{ {
if (mipLevel >= getBaseLevel() && mipLevel < getMaxLevel()) if (mipLevel >= 0 && mipLevel < getMaxLevel())
{ {
if (!mLevelSRVs[mipLevel]) if (!mLevelSRVs[mipLevel])
{ {
...@@ -970,7 +959,7 @@ ID3D11ShaderResourceView *TextureStorage11_Cube::getSRVLevel(int mipLevel) ...@@ -970,7 +959,7 @@ ID3D11ShaderResourceView *TextureStorage11_Cube::getSRVLevel(int mipLevel)
D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc; D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc;
srvDesc.Format = mShaderResourceFormat; srvDesc.Format = mShaderResourceFormat;
srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2DARRAY; srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2DARRAY;
srvDesc.Texture2DArray.MostDetailedMip = mipLevel - getBaseLevel(); srvDesc.Texture2DArray.MostDetailedMip = mTopLevel + mipLevel;
srvDesc.Texture2DArray.MipLevels = 1; srvDesc.Texture2DArray.MipLevels = 1;
srvDesc.Texture2DArray.FirstArraySlice = 0; srvDesc.Texture2DArray.FirstArraySlice = 0;
srvDesc.Texture2DArray.ArraySize = 6; srvDesc.Texture2DArray.ArraySize = 6;
...@@ -997,9 +986,9 @@ unsigned int TextureStorage11_Cube::getTextureLevelDepth(int mipLevel) const ...@@ -997,9 +986,9 @@ unsigned int TextureStorage11_Cube::getTextureLevelDepth(int mipLevel) const
return 6; return 6;
} }
TextureStorage11_3D::TextureStorage11_3D(Renderer *renderer, int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget, TextureStorage11_3D::TextureStorage11_3D(Renderer *renderer, int maxLevel, GLenum internalformat, bool renderTarget,
GLsizei width, GLsizei height, GLsizei depth) GLsizei width, GLsizei height, GLsizei depth)
: TextureStorage11(renderer, baseLevel, GetTextureBindFlags(internalformat, renderer->getCurrentClientVersion(), renderTarget)) : TextureStorage11(renderer, GetTextureBindFlags(internalformat, renderer->getCurrentClientVersion(), renderTarget))
{ {
mTexture = NULL; mTexture = NULL;
mSwizzleTexture = NULL; mSwizzleTexture = NULL;
...@@ -1139,7 +1128,7 @@ ID3D11ShaderResourceView *TextureStorage11_3D::getSRV(const gl::SamplerState &sa ...@@ -1139,7 +1128,7 @@ ID3D11ShaderResourceView *TextureStorage11_3D::getSRV(const gl::SamplerState &sa
RenderTarget *TextureStorage11_3D::getRenderTarget(int mipLevel) RenderTarget *TextureStorage11_3D::getRenderTarget(int mipLevel)
{ {
if (mipLevel >= getBaseLevel() && mipLevel < getMaxLevel()) if (mipLevel >= 0 && mipLevel < getMaxLevel())
{ {
if (!mLevelRenderTargets[mipLevel]) if (!mLevelRenderTargets[mipLevel])
{ {
...@@ -1156,7 +1145,7 @@ RenderTarget *TextureStorage11_3D::getRenderTarget(int mipLevel) ...@@ -1156,7 +1145,7 @@ RenderTarget *TextureStorage11_3D::getRenderTarget(int mipLevel)
D3D11_RENDER_TARGET_VIEW_DESC rtvDesc; D3D11_RENDER_TARGET_VIEW_DESC rtvDesc;
rtvDesc.Format = mRenderTargetFormat; rtvDesc.Format = mRenderTargetFormat;
rtvDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE3D; rtvDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE3D;
rtvDesc.Texture3D.MipSlice = mipLevel - getBaseLevel(); rtvDesc.Texture3D.MipSlice = mTopLevel + mipLevel;
rtvDesc.Texture3D.FirstWSlice = 0; rtvDesc.Texture3D.FirstWSlice = 0;
rtvDesc.Texture3D.WSize = -1; rtvDesc.Texture3D.WSize = -1;
...@@ -1191,7 +1180,7 @@ RenderTarget *TextureStorage11_3D::getRenderTarget(int mipLevel) ...@@ -1191,7 +1180,7 @@ RenderTarget *TextureStorage11_3D::getRenderTarget(int mipLevel)
RenderTarget *TextureStorage11_3D::getRenderTargetLayer(int mipLevel, int layer) RenderTarget *TextureStorage11_3D::getRenderTargetLayer(int mipLevel, int layer)
{ {
if (mipLevel >= getBaseLevel() && mipLevel < getMaxLevel()) if (mipLevel >= 0 && mipLevel < getMaxLevel())
{ {
LevelLayerKey key(mipLevel, layer); LevelLayerKey key(mipLevel, layer);
if (mLevelLayerRenderTargets.find(key) == mLevelLayerRenderTargets.end()) if (mLevelLayerRenderTargets.find(key) == mLevelLayerRenderTargets.end())
...@@ -1207,7 +1196,7 @@ RenderTarget *TextureStorage11_3D::getRenderTargetLayer(int mipLevel, int layer) ...@@ -1207,7 +1196,7 @@ RenderTarget *TextureStorage11_3D::getRenderTargetLayer(int mipLevel, int layer)
D3D11_RENDER_TARGET_VIEW_DESC rtvDesc; D3D11_RENDER_TARGET_VIEW_DESC rtvDesc;
rtvDesc.Format = mRenderTargetFormat; rtvDesc.Format = mRenderTargetFormat;
rtvDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE3D; rtvDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE3D;
rtvDesc.Texture3D.MipSlice = mipLevel - getBaseLevel(); rtvDesc.Texture3D.MipSlice = mTopLevel + mipLevel;
rtvDesc.Texture3D.FirstWSlice = layer; rtvDesc.Texture3D.FirstWSlice = layer;
rtvDesc.Texture3D.WSize = 1; rtvDesc.Texture3D.WSize = 1;
...@@ -1282,7 +1271,7 @@ ID3D11Texture3D *TextureStorage11_3D::getSwizzleTexture() ...@@ -1282,7 +1271,7 @@ ID3D11Texture3D *TextureStorage11_3D::getSwizzleTexture()
ID3D11RenderTargetView *TextureStorage11_3D::getSwizzleRenderTarget(int mipLevel) ID3D11RenderTargetView *TextureStorage11_3D::getSwizzleRenderTarget(int mipLevel)
{ {
if (mipLevel >= getBaseLevel() && mipLevel < getMaxLevel()) if (mipLevel >= 0 && mipLevel < getMaxLevel())
{ {
if (!mSwizzleRenderTargets[mipLevel]) if (!mSwizzleRenderTargets[mipLevel])
{ {
...@@ -1297,7 +1286,7 @@ ID3D11RenderTargetView *TextureStorage11_3D::getSwizzleRenderTarget(int mipLevel ...@@ -1297,7 +1286,7 @@ ID3D11RenderTargetView *TextureStorage11_3D::getSwizzleRenderTarget(int mipLevel
D3D11_RENDER_TARGET_VIEW_DESC rtvDesc; D3D11_RENDER_TARGET_VIEW_DESC rtvDesc;
rtvDesc.Format = mSwizzleRenderTargetFormat; rtvDesc.Format = mSwizzleRenderTargetFormat;
rtvDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE3D; rtvDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE3D;
rtvDesc.Texture3D.MipSlice = mipLevel - getBaseLevel(); rtvDesc.Texture3D.MipSlice = mTopLevel + mipLevel;
rtvDesc.Texture3D.FirstWSlice = 0; rtvDesc.Texture3D.FirstWSlice = 0;
rtvDesc.Texture3D.WSize = -1; rtvDesc.Texture3D.WSize = -1;
...@@ -1314,7 +1303,7 @@ ID3D11RenderTargetView *TextureStorage11_3D::getSwizzleRenderTarget(int mipLevel ...@@ -1314,7 +1303,7 @@ ID3D11RenderTargetView *TextureStorage11_3D::getSwizzleRenderTarget(int mipLevel
ID3D11ShaderResourceView *TextureStorage11_3D::getSRVLevel(int mipLevel) ID3D11ShaderResourceView *TextureStorage11_3D::getSRVLevel(int mipLevel)
{ {
if (mipLevel >= getBaseLevel() && mipLevel < getMaxLevel()) if (mipLevel >= 0 && mipLevel < getMaxLevel())
{ {
if (!mLevelSRVs[mipLevel]) if (!mLevelSRVs[mipLevel])
{ {
...@@ -1324,7 +1313,7 @@ ID3D11ShaderResourceView *TextureStorage11_3D::getSRVLevel(int mipLevel) ...@@ -1324,7 +1313,7 @@ ID3D11ShaderResourceView *TextureStorage11_3D::getSRVLevel(int mipLevel)
D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc; D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc;
srvDesc.Format = mShaderResourceFormat; srvDesc.Format = mShaderResourceFormat;
srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE3D; srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE3D;
srvDesc.Texture3D.MostDetailedMip = mipLevel - getBaseLevel(); srvDesc.Texture3D.MostDetailedMip = mTopLevel + mipLevel;
srvDesc.Texture3D.MipLevels = 1; srvDesc.Texture3D.MipLevels = 1;
result = device->CreateShaderResourceView(mTexture, &srvDesc, &mLevelSRVs[mipLevel]); result = device->CreateShaderResourceView(mTexture, &srvDesc, &mLevelSRVs[mipLevel]);
...@@ -1350,9 +1339,9 @@ unsigned int TextureStorage11_3D::getTextureLevelDepth(int mipLevel) const ...@@ -1350,9 +1339,9 @@ unsigned int TextureStorage11_3D::getTextureLevelDepth(int mipLevel) const
} }
TextureStorage11_2DArray::TextureStorage11_2DArray(Renderer *renderer, int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget, TextureStorage11_2DArray::TextureStorage11_2DArray(Renderer *renderer, int maxLevel, GLenum internalformat, bool renderTarget,
GLsizei width, GLsizei height, GLsizei depth) GLsizei width, GLsizei height, GLsizei depth)
: TextureStorage11(renderer, baseLevel, GetTextureBindFlags(internalformat, renderer->getCurrentClientVersion(), renderTarget)) : TextureStorage11(renderer, GetTextureBindFlags(internalformat, renderer->getCurrentClientVersion(), renderTarget))
{ {
mTexture = NULL; mTexture = NULL;
mSwizzleTexture = NULL; mSwizzleTexture = NULL;
...@@ -1494,7 +1483,7 @@ ID3D11ShaderResourceView *TextureStorage11_2DArray::getSRV(const gl::SamplerStat ...@@ -1494,7 +1483,7 @@ ID3D11ShaderResourceView *TextureStorage11_2DArray::getSRV(const gl::SamplerStat
RenderTarget *TextureStorage11_2DArray::getRenderTargetLayer(int mipLevel, int layer) RenderTarget *TextureStorage11_2DArray::getRenderTargetLayer(int mipLevel, int layer)
{ {
if (mipLevel >= getBaseLevel() && mipLevel < getMaxLevel()) if (mipLevel >= 0 && mipLevel < getMaxLevel())
{ {
LevelLayerKey key(mipLevel, layer); LevelLayerKey key(mipLevel, layer);
if (mRenderTargets.find(key) == mRenderTargets.end()) if (mRenderTargets.find(key) == mRenderTargets.end())
...@@ -1505,7 +1494,7 @@ RenderTarget *TextureStorage11_2DArray::getRenderTargetLayer(int mipLevel, int l ...@@ -1505,7 +1494,7 @@ RenderTarget *TextureStorage11_2DArray::getRenderTargetLayer(int mipLevel, int l
D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc; D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc;
srvDesc.Format = mShaderResourceFormat; srvDesc.Format = mShaderResourceFormat;
srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2DARRAY; srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2DARRAY;
srvDesc.Texture2DArray.MostDetailedMip = mipLevel - getBaseLevel(); srvDesc.Texture2DArray.MostDetailedMip = mTopLevel + mipLevel;
srvDesc.Texture2DArray.MipLevels = 1; srvDesc.Texture2DArray.MipLevels = 1;
srvDesc.Texture2DArray.FirstArraySlice = layer; srvDesc.Texture2DArray.FirstArraySlice = layer;
srvDesc.Texture2DArray.ArraySize = 1; srvDesc.Texture2DArray.ArraySize = 1;
...@@ -1524,7 +1513,7 @@ RenderTarget *TextureStorage11_2DArray::getRenderTargetLayer(int mipLevel, int l ...@@ -1524,7 +1513,7 @@ RenderTarget *TextureStorage11_2DArray::getRenderTargetLayer(int mipLevel, int l
D3D11_RENDER_TARGET_VIEW_DESC rtvDesc; D3D11_RENDER_TARGET_VIEW_DESC rtvDesc;
rtvDesc.Format = mRenderTargetFormat; rtvDesc.Format = mRenderTargetFormat;
rtvDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2DARRAY; rtvDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2DARRAY;
rtvDesc.Texture2DArray.MipSlice = mipLevel - getBaseLevel(); rtvDesc.Texture2DArray.MipSlice = mTopLevel + mipLevel;
rtvDesc.Texture2DArray.FirstArraySlice = layer; rtvDesc.Texture2DArray.FirstArraySlice = layer;
rtvDesc.Texture2DArray.ArraySize = 1; rtvDesc.Texture2DArray.ArraySize = 1;
...@@ -1604,7 +1593,7 @@ ID3D11Texture2D *TextureStorage11_2DArray::getSwizzleTexture() ...@@ -1604,7 +1593,7 @@ ID3D11Texture2D *TextureStorage11_2DArray::getSwizzleTexture()
ID3D11RenderTargetView *TextureStorage11_2DArray::getSwizzleRenderTarget(int mipLevel) ID3D11RenderTargetView *TextureStorage11_2DArray::getSwizzleRenderTarget(int mipLevel)
{ {
if (mipLevel >= getBaseLevel() && mipLevel < getMaxLevel()) if (mipLevel >= 0 && mipLevel < getMaxLevel())
{ {
if (!mSwizzleRenderTargets[mipLevel]) if (!mSwizzleRenderTargets[mipLevel])
{ {
...@@ -1619,7 +1608,7 @@ ID3D11RenderTargetView *TextureStorage11_2DArray::getSwizzleRenderTarget(int mip ...@@ -1619,7 +1608,7 @@ ID3D11RenderTargetView *TextureStorage11_2DArray::getSwizzleRenderTarget(int mip
D3D11_RENDER_TARGET_VIEW_DESC rtvDesc; D3D11_RENDER_TARGET_VIEW_DESC rtvDesc;
rtvDesc.Format = mSwizzleRenderTargetFormat; rtvDesc.Format = mSwizzleRenderTargetFormat;
rtvDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2DARRAY; rtvDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2DARRAY;
rtvDesc.Texture2DArray.MipSlice = mipLevel - getBaseLevel(); rtvDesc.Texture2DArray.MipSlice = mTopLevel + mipLevel;
rtvDesc.Texture2DArray.FirstArraySlice = 0; rtvDesc.Texture2DArray.FirstArraySlice = 0;
rtvDesc.Texture2DArray.ArraySize = mTextureDepth; rtvDesc.Texture2DArray.ArraySize = mTextureDepth;
...@@ -1636,7 +1625,7 @@ ID3D11RenderTargetView *TextureStorage11_2DArray::getSwizzleRenderTarget(int mip ...@@ -1636,7 +1625,7 @@ ID3D11RenderTargetView *TextureStorage11_2DArray::getSwizzleRenderTarget(int mip
ID3D11ShaderResourceView *TextureStorage11_2DArray::getSRVLevel(int mipLevel) ID3D11ShaderResourceView *TextureStorage11_2DArray::getSRVLevel(int mipLevel)
{ {
if (mipLevel >= getBaseLevel() && mipLevel < getMaxLevel()) if (mipLevel >= 0 && mipLevel < getMaxLevel())
{ {
if (!mLevelSRVs[mipLevel]) if (!mLevelSRVs[mipLevel])
{ {
...@@ -1646,7 +1635,7 @@ ID3D11ShaderResourceView *TextureStorage11_2DArray::getSRVLevel(int mipLevel) ...@@ -1646,7 +1635,7 @@ ID3D11ShaderResourceView *TextureStorage11_2DArray::getSRVLevel(int mipLevel)
D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc; D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc;
srvDesc.Format = mShaderResourceFormat; srvDesc.Format = mShaderResourceFormat;
srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2DARRAY; srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2DARRAY;
srvDesc.Texture2DArray.MostDetailedMip = mipLevel - getBaseLevel(); srvDesc.Texture2DArray.MostDetailedMip = mTopLevel + mipLevel;
srvDesc.Texture2DArray.MipLevels = 1; srvDesc.Texture2DArray.MipLevels = 1;
srvDesc.Texture2DArray.FirstArraySlice = 0; srvDesc.Texture2DArray.FirstArraySlice = 0;
srvDesc.Texture2DArray.ArraySize = mTextureDepth; srvDesc.Texture2DArray.ArraySize = mTextureDepth;
......
...@@ -44,7 +44,6 @@ class TextureStorage11 : public TextureStorage ...@@ -44,7 +44,6 @@ class TextureStorage11 : public TextureStorage
virtual int getTopLevel() const; virtual int getTopLevel() const;
virtual bool isRenderTarget() const; virtual bool isRenderTarget() const;
virtual bool isManaged() const; virtual bool isManaged() const;
virtual int getBaseLevel() const;
virtual int getMaxLevel() const; virtual int getMaxLevel() const;
UINT getSubresourceIndex(int mipLevel, int layerTarget) const; UINT getSubresourceIndex(int mipLevel, int layerTarget) const;
...@@ -57,7 +56,7 @@ class TextureStorage11 : public TextureStorage ...@@ -57,7 +56,7 @@ class TextureStorage11 : public TextureStorage
GLsizei width, GLsizei height, GLsizei depth); GLsizei width, GLsizei height, GLsizei depth);
protected: protected:
TextureStorage11(Renderer *renderer, int baseLevel, UINT bindFlags); TextureStorage11(Renderer *renderer, UINT bindFlags);
void generateMipmapLayer(RenderTarget11 *source, RenderTarget11 *dest); void generateMipmapLayer(RenderTarget11 *source, RenderTarget11 *dest);
int getLevelWidth(int mipLevel) const; int getLevelWidth(int mipLevel) const;
int getLevelHeight(int mipLevel) const; int getLevelHeight(int mipLevel) const;
...@@ -73,7 +72,6 @@ class TextureStorage11 : public TextureStorage ...@@ -73,7 +72,6 @@ class TextureStorage11 : public TextureStorage
Renderer11 *mRenderer; Renderer11 *mRenderer;
int mTopLevel; int mTopLevel;
unsigned int mMipLevels; unsigned int mMipLevels;
int mBaseLevel;
DXGI_FORMAT mTextureFormat; DXGI_FORMAT mTextureFormat;
DXGI_FORMAT mShaderResourceFormat; DXGI_FORMAT mShaderResourceFormat;
...@@ -111,7 +109,7 @@ class TextureStorage11_2D : public TextureStorage11 ...@@ -111,7 +109,7 @@ class TextureStorage11_2D : public TextureStorage11
{ {
public: public:
TextureStorage11_2D(Renderer *renderer, SwapChain11 *swapchain); TextureStorage11_2D(Renderer *renderer, SwapChain11 *swapchain);
TextureStorage11_2D(Renderer *renderer, int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height); TextureStorage11_2D(Renderer *renderer, int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height);
virtual ~TextureStorage11_2D(); virtual ~TextureStorage11_2D();
static TextureStorage11_2D *makeTextureStorage11_2D(TextureStorage *storage); static TextureStorage11_2D *makeTextureStorage11_2D(TextureStorage *storage);
...@@ -146,7 +144,7 @@ class TextureStorage11_2D : public TextureStorage11 ...@@ -146,7 +144,7 @@ class TextureStorage11_2D : public TextureStorage11
class TextureStorage11_Cube : public TextureStorage11 class TextureStorage11_Cube : public TextureStorage11
{ {
public: public:
TextureStorage11_Cube(Renderer *renderer, int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget, int size); TextureStorage11_Cube(Renderer *renderer, int maxLevel, GLenum internalformat, bool renderTarget, int size);
virtual ~TextureStorage11_Cube(); virtual ~TextureStorage11_Cube();
static TextureStorage11_Cube *makeTextureStorage11_Cube(TextureStorage *storage); static TextureStorage11_Cube *makeTextureStorage11_Cube(TextureStorage *storage);
...@@ -181,7 +179,7 @@ class TextureStorage11_Cube : public TextureStorage11 ...@@ -181,7 +179,7 @@ class TextureStorage11_Cube : public TextureStorage11
class TextureStorage11_3D : public TextureStorage11 class TextureStorage11_3D : public TextureStorage11
{ {
public: public:
TextureStorage11_3D(Renderer *renderer, int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget, TextureStorage11_3D(Renderer *renderer, int maxLevel, GLenum internalformat, bool renderTarget,
GLsizei width, GLsizei height, GLsizei depth); GLsizei width, GLsizei height, GLsizei depth);
virtual ~TextureStorage11_3D(); virtual ~TextureStorage11_3D();
...@@ -222,7 +220,7 @@ class TextureStorage11_3D : public TextureStorage11 ...@@ -222,7 +220,7 @@ class TextureStorage11_3D : public TextureStorage11
class TextureStorage11_2DArray : public TextureStorage11 class TextureStorage11_2DArray : public TextureStorage11
{ {
public: public:
TextureStorage11_2DArray(Renderer *renderer, int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget, TextureStorage11_2DArray(Renderer *renderer, int maxLevel, GLenum internalformat, bool renderTarget,
GLsizei width, GLsizei height, GLsizei depth); GLsizei width, GLsizei height, GLsizei depth);
virtual ~TextureStorage11_2DArray(); virtual ~TextureStorage11_2DArray();
......
...@@ -2805,7 +2805,7 @@ bool Renderer9::copyToRenderTarget(TextureStorageInterface2D *dest, TextureStora ...@@ -2805,7 +2805,7 @@ bool Renderer9::copyToRenderTarget(TextureStorageInterface2D *dest, TextureStora
TextureStorage9_2D *source9 = TextureStorage9_2D::makeTextureStorage9_2D(source->getStorageInstance()); TextureStorage9_2D *source9 = TextureStorage9_2D::makeTextureStorage9_2D(source->getStorageInstance());
TextureStorage9_2D *dest9 = TextureStorage9_2D::makeTextureStorage9_2D(dest->getStorageInstance()); TextureStorage9_2D *dest9 = TextureStorage9_2D::makeTextureStorage9_2D(dest->getStorageInstance());
int levels = source9->getMaxLevel() - source9->getBaseLevel(); int levels = source9->getMaxLevel();
for (int i = 0; i < levels; ++i) for (int i = 0; i < levels; ++i)
{ {
IDirect3DSurface9 *srcSurf = source9->getSurfaceLevel(i, false); IDirect3DSurface9 *srcSurf = source9->getSurfaceLevel(i, false);
...@@ -2834,7 +2834,7 @@ bool Renderer9::copyToRenderTarget(TextureStorageInterfaceCube *dest, TextureSto ...@@ -2834,7 +2834,7 @@ bool Renderer9::copyToRenderTarget(TextureStorageInterfaceCube *dest, TextureSto
{ {
TextureStorage9_Cube *source9 = TextureStorage9_Cube::makeTextureStorage9_Cube(source->getStorageInstance()); TextureStorage9_Cube *source9 = TextureStorage9_Cube::makeTextureStorage9_Cube(source->getStorageInstance());
TextureStorage9_Cube *dest9 = TextureStorage9_Cube::makeTextureStorage9_Cube(dest->getStorageInstance()); TextureStorage9_Cube *dest9 = TextureStorage9_Cube::makeTextureStorage9_Cube(dest->getStorageInstance());
int levels = source9->getMaxLevel() - source9->getBaseLevel(); int levels = source9->getMaxLevel();
for (int f = 0; f < 6; f++) for (int f = 0; f < 6; f++)
{ {
for (int i = 0; i < levels; i++) for (int i = 0; i < levels; i++)
...@@ -3480,17 +3480,17 @@ TextureStorage *Renderer9::createTextureStorage2D(SwapChain *swapChain) ...@@ -3480,17 +3480,17 @@ TextureStorage *Renderer9::createTextureStorage2D(SwapChain *swapChain)
return new TextureStorage9_2D(this, swapChain9); return new TextureStorage9_2D(this, swapChain9);
} }
TextureStorage *Renderer9::createTextureStorage2D(int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height) TextureStorage *Renderer9::createTextureStorage2D(int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height)
{ {
return new TextureStorage9_2D(this, baseLevel, maxLevel, internalformat, renderTarget, width, height); return new TextureStorage9_2D(this, maxLevel, internalformat, renderTarget, width, height);
} }
TextureStorage *Renderer9::createTextureStorageCube(int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget, int size) TextureStorage *Renderer9::createTextureStorageCube(int maxLevel, GLenum internalformat, bool renderTarget, int size)
{ {
return new TextureStorage9_Cube(this, baseLevel, maxLevel, internalformat, renderTarget, size); return new TextureStorage9_Cube(this, maxLevel, internalformat, renderTarget, size);
} }
TextureStorage *Renderer9::createTextureStorage3D(int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, GLsizei depth) TextureStorage *Renderer9::createTextureStorage3D(int maxLevel, GLenum internalformat, bool renderTarget, 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();
...@@ -3498,7 +3498,7 @@ TextureStorage *Renderer9::createTextureStorage3D(int baseLevel, int maxLevel, G ...@@ -3498,7 +3498,7 @@ TextureStorage *Renderer9::createTextureStorage3D(int baseLevel, int maxLevel, G
return NULL; return NULL;
} }
TextureStorage *Renderer9::createTextureStorage2DArray(int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, GLsizei depth) TextureStorage *Renderer9::createTextureStorage2DArray(int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, GLsizei depth)
{ {
// 2D array textures are not supported by the D3D9 backend. // 2D array textures are not supported by the D3D9 backend.
UNREACHABLE(); UNREACHABLE();
......
...@@ -207,10 +207,10 @@ class Renderer9 : public Renderer ...@@ -207,10 +207,10 @@ class Renderer9 : public Renderer
virtual Image *createImage(); virtual Image *createImage();
virtual void generateMipmap(Image *dest, Image *source); virtual void generateMipmap(Image *dest, Image *source);
virtual TextureStorage *createTextureStorage2D(SwapChain *swapChain); virtual TextureStorage *createTextureStorage2D(SwapChain *swapChain);
virtual TextureStorage *createTextureStorage2D(int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height); virtual TextureStorage *createTextureStorage2D(int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height);
virtual TextureStorage *createTextureStorageCube(int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget, int size); virtual TextureStorage *createTextureStorageCube(int maxLevel, GLenum internalformat, bool renderTarget, int size);
virtual TextureStorage *createTextureStorage3D(int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, GLsizei depth); virtual TextureStorage *createTextureStorage3D(int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, GLsizei depth);
virtual TextureStorage *createTextureStorage2DArray(int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, GLsizei depth); virtual TextureStorage *createTextureStorage2DArray(int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, GLsizei depth);
// Buffer creation // Buffer creation
virtual VertexBuffer *createVertexBuffer(); virtual VertexBuffer *createVertexBuffer();
......
...@@ -20,9 +20,8 @@ ...@@ -20,9 +20,8 @@
namespace rx namespace rx
{ {
TextureStorage9::TextureStorage9(Renderer *renderer, int baseLevel, DWORD usage) TextureStorage9::TextureStorage9(Renderer *renderer, DWORD usage)
: mTopLevel(0), : mTopLevel(0),
mBaseLevel(baseLevel),
mRenderer(Renderer9::makeRenderer9(renderer)), mRenderer(Renderer9::makeRenderer9(renderer)),
mD3DUsage(usage), mD3DUsage(usage),
mD3DPool(mRenderer->getTexturePool(usage)) mD3DPool(mRenderer->getTexturePool(usage))
...@@ -84,18 +83,13 @@ int TextureStorage9::getTopLevel() const ...@@ -84,18 +83,13 @@ int TextureStorage9::getTopLevel() const
return mTopLevel; return mTopLevel;
} }
int TextureStorage9::getBaseLevel() const
{
return mBaseLevel;
}
int TextureStorage9::getMaxLevel() const int TextureStorage9::getMaxLevel() const
{ {
return getBaseLevel() + (getBaseTexture() ? getBaseTexture()->GetLevelCount() - getTopLevel() : 0); return getBaseTexture() ? (getBaseTexture()->GetLevelCount() - getTopLevel()) : 0;
} }
TextureStorage9_2D::TextureStorage9_2D(Renderer *renderer, SwapChain9 *swapchain) TextureStorage9_2D::TextureStorage9_2D(Renderer *renderer, SwapChain9 *swapchain)
: TextureStorage9(renderer, 0, D3DUSAGE_RENDERTARGET) : TextureStorage9(renderer, D3DUSAGE_RENDERTARGET)
{ {
IDirect3DTexture9 *surfaceTexture = swapchain->getOffscreenTexture(); IDirect3DTexture9 *surfaceTexture = swapchain->getOffscreenTexture();
mTexture = surfaceTexture; mTexture = surfaceTexture;
...@@ -104,8 +98,8 @@ TextureStorage9_2D::TextureStorage9_2D(Renderer *renderer, SwapChain9 *swapchain ...@@ -104,8 +98,8 @@ TextureStorage9_2D::TextureStorage9_2D(Renderer *renderer, SwapChain9 *swapchain
initializeRenderTarget(); initializeRenderTarget();
} }
TextureStorage9_2D::TextureStorage9_2D(Renderer *renderer, int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height) TextureStorage9_2D::TextureStorage9_2D(Renderer *renderer, int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height)
: TextureStorage9(renderer, baseLevel, GetTextureUsage(internalformat, Renderer9::makeRenderer9(renderer), renderTarget)) : TextureStorage9(renderer, GetTextureUsage(internalformat, Renderer9::makeRenderer9(renderer), renderTarget))
{ {
mTexture = NULL; mTexture = NULL;
mRenderTarget = NULL; mRenderTarget = NULL;
...@@ -199,8 +193,8 @@ void TextureStorage9_2D::initializeRenderTarget() ...@@ -199,8 +193,8 @@ void TextureStorage9_2D::initializeRenderTarget()
} }
} }
TextureStorage9_Cube::TextureStorage9_Cube(Renderer *renderer, int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget, int size) TextureStorage9_Cube::TextureStorage9_Cube(Renderer *renderer, int maxLevel, GLenum internalformat, bool renderTarget, int size)
: TextureStorage9(renderer, baseLevel, GetTextureUsage(internalformat, Renderer9::makeRenderer9(renderer), renderTarget)) : TextureStorage9(renderer, GetTextureUsage(internalformat, Renderer9::makeRenderer9(renderer), renderTarget))
{ {
mTexture = NULL; mTexture = NULL;
for (int i = 0; i < 6; ++i) for (int i = 0; i < 6; ++i)
......
...@@ -43,15 +43,13 @@ class TextureStorage9 : public TextureStorage ...@@ -43,15 +43,13 @@ class TextureStorage9 : public TextureStorage
virtual int getTopLevel() const; virtual int getTopLevel() const;
virtual bool isRenderTarget() const; virtual bool isRenderTarget() const;
virtual bool isManaged() const; virtual bool isManaged() const;
virtual int getBaseLevel() const;
virtual int getMaxLevel() const; virtual int getMaxLevel() const;
protected: protected:
int mTopLevel; int mTopLevel;
int mBaseLevel;
Renderer9 *mRenderer; Renderer9 *mRenderer;
TextureStorage9(Renderer *renderer, int baseLevel, DWORD usage); TextureStorage9(Renderer *renderer, DWORD usage);
private: private:
DISALLOW_COPY_AND_ASSIGN(TextureStorage9); DISALLOW_COPY_AND_ASSIGN(TextureStorage9);
...@@ -64,7 +62,7 @@ class TextureStorage9_2D : public TextureStorage9 ...@@ -64,7 +62,7 @@ class TextureStorage9_2D : public TextureStorage9
{ {
public: public:
TextureStorage9_2D(Renderer *renderer, SwapChain9 *swapchain); TextureStorage9_2D(Renderer *renderer, SwapChain9 *swapchain);
TextureStorage9_2D(Renderer *renderer, int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height); TextureStorage9_2D(Renderer *renderer, int maxLevel, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height);
virtual ~TextureStorage9_2D(); virtual ~TextureStorage9_2D();
static TextureStorage9_2D *makeTextureStorage9_2D(TextureStorage *storage); static TextureStorage9_2D *makeTextureStorage9_2D(TextureStorage *storage);
...@@ -86,7 +84,7 @@ class TextureStorage9_2D : public TextureStorage9 ...@@ -86,7 +84,7 @@ class TextureStorage9_2D : public TextureStorage9
class TextureStorage9_Cube : public TextureStorage9 class TextureStorage9_Cube : public TextureStorage9
{ {
public: public:
TextureStorage9_Cube(Renderer *renderer, int baseLevel, int maxLevel, GLenum internalformat, bool renderTarget, int size); TextureStorage9_Cube(Renderer *renderer, int maxLevel, GLenum internalformat, bool renderTarget, int size);
virtual ~TextureStorage9_Cube(); virtual ~TextureStorage9_Cube();
static TextureStorage9_Cube *makeTextureStorage9_Cube(TextureStorage *storage); static TextureStorage9_Cube *makeTextureStorage9_Cube(TextureStorage *storage);
......
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