Commit d4589c97 by Jamie Madill

Simplify passing the texture usage parameters through the texture classes.

Avoid passing a raw GLenum when possible. TRAC #23961 Signed-off-by: Geoff Lang Signed-off-by: Shannon Woods
parent e83d1a93
......@@ -44,6 +44,11 @@ bool IsMipmapFiltered(const SamplerState &samplerState)
}
}
bool IsRenderTargetUsage(GLenum usage)
{
return (usage == GL_FRAMEBUFFER_ATTACHMENT_ANGLE);
}
Texture::Texture(rx::Renderer *renderer, GLuint id, GLenum target) : RefCountObject(id)
{
mRenderer = renderer;
......@@ -630,7 +635,7 @@ void Texture2D::copySubImage(GLenum target, GLint level, GLint xoffset, GLint yo
void Texture2D::storage(GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)
{
delete mTexStorage;
mTexStorage = new rx::TextureStorageInterface2D(mRenderer, levels, internalformat, mUsage, false, width, height);
mTexStorage = new rx::TextureStorageInterface2D(mRenderer, levels, internalformat, IsRenderTargetUsage(mUsage), width, height);
mImmutable = true;
for (int level = 0; level < levels; level++)
......@@ -806,7 +811,7 @@ void Texture2D::createTexture()
GLint levels = creationLevels(width, height);
delete mTexStorage;
mTexStorage = new rx::TextureStorageInterface2D(mRenderer, levels, getBaseLevelInternalFormat(), mUsage, false, width, height);
mTexStorage = new rx::TextureStorageInterface2D(mRenderer, levels, getBaseLevelInternalFormat(), IsRenderTargetUsage(mUsage), width, height);
if (mTexStorage->isManaged())
{
......@@ -861,7 +866,7 @@ bool Texture2D::ensureRenderTarget()
{
GLint levels = mTexStorage != NULL ? mTexStorage->levelCount() : creationLevels(width, height);
newTexStorage = new rx::TextureStorageInterface2D(mRenderer, levels, getBaseLevelInternalFormat(), GL_FRAMEBUFFER_ATTACHMENT_ANGLE, true, width, height);
newTexStorage = new rx::TextureStorageInterface2D(mRenderer, levels, getBaseLevelInternalFormat(), true, width, height);
if (mTexStorage != NULL)
{
......@@ -1274,7 +1279,7 @@ void TextureCubeMap::createTexture()
GLenum internalformat = getBaseLevelInternalFormat();
delete mTexStorage;
mTexStorage = new rx::TextureStorageInterfaceCube(mRenderer, levels, internalformat, mUsage, false, size);
mTexStorage = new rx::TextureStorageInterfaceCube(mRenderer, levels, internalformat, IsRenderTargetUsage(mUsage), size);
if (mTexStorage->isManaged())
{
......@@ -1334,7 +1339,7 @@ bool TextureCubeMap::ensureRenderTarget()
GLint levels = mTexStorage != NULL ? mTexStorage->levelCount() : creationLevels(size);
GLenum internalformat = getBaseLevelInternalFormat();
newTexStorage = new rx::TextureStorageInterfaceCube(mRenderer, levels, internalformat, GL_FRAMEBUFFER_ATTACHMENT_ANGLE, true, size);
newTexStorage = new rx::TextureStorageInterfaceCube(mRenderer, levels, internalformat, true, size);
if (mTexStorage != NULL)
{
......@@ -1488,7 +1493,7 @@ void TextureCubeMap::copySubImage(GLenum target, GLint level, GLint xoffset, GLi
void TextureCubeMap::storage(GLsizei levels, GLenum internalformat, GLsizei size)
{
delete mTexStorage;
mTexStorage = new rx::TextureStorageInterfaceCube(mRenderer, levels, internalformat, mUsage, false, size);
mTexStorage = new rx::TextureStorageInterfaceCube(mRenderer, levels, internalformat, IsRenderTargetUsage(mUsage), size);
mImmutable = true;
for (int level = 0; level < levels; level++)
......@@ -1786,7 +1791,7 @@ void Texture3D::subImageCompressed(GLint level, GLint xoffset, GLint yoffset, GL
void Texture3D::storage(GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth)
{
delete mTexStorage;
mTexStorage = new rx::TextureStorageInterface3D(mRenderer, levels, internalformat, mUsage, width, height, depth);
mTexStorage = new rx::TextureStorageInterface3D(mRenderer, levels, internalformat, IsRenderTargetUsage(mUsage), width, height, depth);
mImmutable = true;
for (int level = 0; level < levels; level++)
......@@ -2017,7 +2022,7 @@ void Texture3D::createTexture()
GLint levels = creationLevels(width, height, depth);
delete mTexStorage;
mTexStorage = new rx::TextureStorageInterface3D(mRenderer, levels, getBaseLevelInternalFormat(), mUsage, width, height, depth);
mTexStorage = new rx::TextureStorageInterface3D(mRenderer, levels, getBaseLevelInternalFormat(), IsRenderTargetUsage(mUsage), width, height, depth);
if (mTexStorage->isManaged())
{
......@@ -2072,7 +2077,7 @@ bool Texture3D::ensureRenderTarget()
GLsizei depth = getBaseLevelDepth();
GLint levels = mTexStorage != NULL ? mTexStorage->levelCount() : creationLevels(width, height, depth);
newTexStorage = new rx::TextureStorageInterface3D(mRenderer, levels, getBaseLevelInternalFormat(), GL_FRAMEBUFFER_ATTACHMENT_ANGLE, width, height, depth);
newTexStorage = new rx::TextureStorageInterface3D(mRenderer, levels, getBaseLevelInternalFormat(), true, width, height, depth);
if (mTexStorage != NULL)
{
......@@ -2338,7 +2343,7 @@ void Texture2DArray::subImageCompressed(GLint level, GLint xoffset, GLint yoffse
void Texture2DArray::storage(GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth)
{
delete mTexStorage;
mTexStorage = new rx::TextureStorageInterface2DArray(mRenderer, levels, internalformat, mUsage, width, height, depth);
mTexStorage = new rx::TextureStorageInterface2DArray(mRenderer, levels, internalformat, IsRenderTargetUsage(mUsage), width, height, depth);
mImmutable = true;
for (int level = 0; level < IMPLEMENTATION_MAX_TEXTURE_LEVELS; level++)
......@@ -2594,7 +2599,7 @@ void Texture2DArray::createTexture()
GLenum internalformat = getBaseLevelInternalFormat();
delete mTexStorage;
mTexStorage = new rx::TextureStorageInterface2DArray(mRenderer, levels, internalformat, mUsage, width, height, depth);
mTexStorage = new rx::TextureStorageInterface2DArray(mRenderer, levels, internalformat, IsRenderTargetUsage(mUsage), width, height, depth);
if (mTexStorage->isManaged())
{
......@@ -2657,7 +2662,7 @@ bool Texture2DArray::ensureRenderTarget()
GLint levels = mTexStorage != NULL ? mTexStorage->levelCount() : creationLevels(width, height);
GLenum internalformat = getInternalFormat(0);
newTexStorage = new rx::TextureStorageInterface2DArray(mRenderer, levels, internalformat, GL_FRAMEBUFFER_ATTACHMENT_ANGLE, width, height, depth);
newTexStorage = new rx::TextureStorageInterface2DArray(mRenderer, levels, internalformat, true, width, height, depth);
if (mTexStorage != NULL)
{
......
......@@ -242,10 +242,10 @@ class Renderer
virtual Image *createImage() = 0;
virtual void generateMipmap(Image *dest, Image *source) = 0;
virtual TextureStorage *createTextureStorage2D(SwapChain *swapChain) = 0;
virtual TextureStorage *createTextureStorage2D(int levels, GLenum internalformat, GLenum usage, bool forceRenderable, GLsizei width, GLsizei height) = 0;
virtual TextureStorage *createTextureStorageCube(int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size) = 0;
virtual TextureStorage *createTextureStorage3D(int levels, GLenum internalformat, GLenum usage, GLsizei width, GLsizei height, GLsizei depth) = 0;
virtual TextureStorage *createTextureStorage2DArray(int levels, GLenum internalformat, GLenum usage, GLsizei width, GLsizei height, GLsizei depth) = 0;
virtual TextureStorage *createTextureStorage2D(int levels, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height) = 0;
virtual TextureStorage *createTextureStorageCube(int levels, GLenum internalformat, bool renderTarget, int size) = 0;
virtual TextureStorage *createTextureStorage3D(int levels, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, GLsizei depth) = 0;
virtual TextureStorage *createTextureStorage2DArray(int levels, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, GLsizei depth) = 0;
// Buffer creation
virtual VertexBuffer *createVertexBuffer() = 0;
......
......@@ -74,12 +74,12 @@ TextureStorageInterface2D::TextureStorageInterface2D(Renderer *renderer, SwapCha
mInstance = renderer->createTextureStorage2D(swapchain);
}
TextureStorageInterface2D::TextureStorageInterface2D(Renderer *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, GLsizei width, GLsizei height)
TextureStorageInterface2D::TextureStorageInterface2D(Renderer *renderer, int levels, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height)
{
unsigned int actualLevels = GetActualLevelCount(width, height, 0, levels);
mFirstRenderTargetSerial = gl::RenderbufferStorage::issueSerials(actualLevels);
mInstance = renderer->createTextureStorage2D(levels, internalformat, usage, forceRenderable, width, height);
mInstance = renderer->createTextureStorage2D(levels, internalformat, renderTarget, width, height);
}
TextureStorageInterface2D::~TextureStorageInterface2D()
......@@ -101,12 +101,12 @@ unsigned int TextureStorageInterface2D::getRenderTargetSerial(GLint level) const
return mFirstRenderTargetSerial + level;
}
TextureStorageInterfaceCube::TextureStorageInterfaceCube(Renderer *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size)
TextureStorageInterfaceCube::TextureStorageInterfaceCube(Renderer *renderer, int levels, GLenum internalformat, bool renderTarget, int size)
{
unsigned int actualLevels = GetActualLevelCount(size, size, 0, levels);
mFirstRenderTargetSerial = gl::RenderbufferStorage::issueSerials(actualLevels * 6);
mInstance = renderer->createTextureStorageCube(levels, internalformat, usage, forceRenderable, size);
mInstance = renderer->createTextureStorageCube(levels, internalformat, renderTarget, size);
}
TextureStorageInterfaceCube::~TextureStorageInterfaceCube()
......@@ -128,13 +128,13 @@ unsigned int TextureStorageInterfaceCube::getRenderTargetSerial(GLenum target, G
return mFirstRenderTargetSerial + (level * 6) + gl::TextureCubeMap::faceIndex(target);
}
TextureStorageInterface3D::TextureStorageInterface3D(Renderer *renderer, int levels, GLenum internalformat, GLenum usage,
TextureStorageInterface3D::TextureStorageInterface3D(Renderer *renderer, int levels, GLenum internalformat, bool renderTarget,
GLsizei width, GLsizei height, GLsizei depth)
{
mLevels = GetActualLevelCount(width, height, depth, levels);
mFirstRenderTargetSerial = gl::RenderbufferStorage::issueSerials(mLevels * depth);
mInstance = renderer->createTextureStorage3D(levels, internalformat, usage, width, height, depth);
mInstance = renderer->createTextureStorage3D(levels, internalformat, renderTarget, width, height, depth);
}
TextureStorageInterface3D::~TextureStorageInterface3D()
......@@ -161,13 +161,13 @@ unsigned int TextureStorageInterface3D::getRenderTargetSerial(GLint level, GLint
return mFirstRenderTargetSerial + (layer * mLevels) + level;
}
TextureStorageInterface2DArray::TextureStorageInterface2DArray(Renderer *renderer, int levels, GLenum internalformat, GLenum usage,
TextureStorageInterface2DArray::TextureStorageInterface2DArray(Renderer *renderer, int levels, GLenum internalformat, bool renderTarget,
GLsizei width, GLsizei height, GLsizei depth)
{
mLevels = GetActualLevelCount(width, height, 0, levels);
mFirstRenderTargetSerial = gl::RenderbufferStorage::issueSerials(mLevels * depth);
mInstance = renderer->createTextureStorage2DArray(levels, internalformat, usage, width, height, depth);
mInstance = renderer->createTextureStorage2DArray(levels, internalformat, renderTarget, width, height, depth);
}
TextureStorageInterface2DArray::~TextureStorageInterface2DArray()
......
......@@ -72,7 +72,7 @@ class TextureStorageInterface2D : public TextureStorageInterface
{
public:
TextureStorageInterface2D(Renderer *renderer, SwapChain *swapchain);
TextureStorageInterface2D(Renderer *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, GLsizei width, GLsizei height);
TextureStorageInterface2D(Renderer *renderer, int levels, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height);
virtual ~TextureStorageInterface2D();
void generateMipmap(int level);
......@@ -89,7 +89,7 @@ class TextureStorageInterface2D : public TextureStorageInterface
class TextureStorageInterfaceCube : public TextureStorageInterface
{
public:
TextureStorageInterfaceCube(Renderer *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size);
TextureStorageInterfaceCube(Renderer *renderer, int levels, GLenum internalformat, bool renderTarget, int size);
virtual ~TextureStorageInterfaceCube();
void generateMipmap(int face, int level);
......@@ -106,7 +106,7 @@ class TextureStorageInterfaceCube : public TextureStorageInterface
class TextureStorageInterface3D : public TextureStorageInterface
{
public:
TextureStorageInterface3D(Renderer *renderer, int levels, GLenum internalformat, GLenum usage,
TextureStorageInterface3D(Renderer *renderer, int levels, GLenum internalformat, bool renderTarget,
GLsizei width, GLsizei height, GLsizei depth);
virtual ~TextureStorageInterface3D();
......@@ -126,8 +126,8 @@ class TextureStorageInterface3D : public TextureStorageInterface
class TextureStorageInterface2DArray : public TextureStorageInterface
{
public:
TextureStorageInterface2DArray(Renderer *renderer, int levels, GLenum internalformat, GLenum usage,
GLsizei width, GLsizei height, GLsizei depth);
TextureStorageInterface2DArray(Renderer *renderer, int levels, GLenum internalformat, bool renderTarget,
GLsizei width, GLsizei height, GLsizei depth);
virtual ~TextureStorageInterface2DArray();
void generateMipmap(int level);
......
......@@ -3004,24 +3004,24 @@ TextureStorage *Renderer11::createTextureStorage2D(SwapChain *swapChain)
return new TextureStorage11_2D(this, swapChain11);
}
TextureStorage *Renderer11::createTextureStorage2D(int levels, GLenum internalformat, GLenum usage, bool forceRenderable, GLsizei width, GLsizei height)
TextureStorage *Renderer11::createTextureStorage2D(int levels, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height)
{
return new TextureStorage11_2D(this, levels, internalformat, usage, forceRenderable, width, height);
return new TextureStorage11_2D(this, levels, internalformat, renderTarget, width, height);
}
TextureStorage *Renderer11::createTextureStorageCube(int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size)
TextureStorage *Renderer11::createTextureStorageCube(int levels, GLenum internalformat, bool renderTarget, int size)
{
return new TextureStorage11_Cube(this, levels, internalformat, usage, forceRenderable, size);
return new TextureStorage11_Cube(this, levels, internalformat, renderTarget, size);
}
TextureStorage *Renderer11::createTextureStorage3D(int levels, GLenum internalformat, GLenum usage, GLsizei width, GLsizei height, GLsizei depth)
TextureStorage *Renderer11::createTextureStorage3D(int levels, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, GLsizei depth)
{
return new TextureStorage11_3D(this, levels, internalformat, usage, width, height, depth);
return new TextureStorage11_3D(this, levels, internalformat, renderTarget, width, height, depth);
}
TextureStorage *Renderer11::createTextureStorage2DArray(int levels, GLenum internalformat, GLenum usage, GLsizei width, GLsizei height, GLsizei depth)
TextureStorage *Renderer11::createTextureStorage2DArray(int levels, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, GLsizei depth)
{
return new TextureStorage11_2DArray(this, levels, internalformat, usage, width, height, depth);
return new TextureStorage11_2DArray(this, levels, internalformat, renderTarget, width, height, depth);
}
void Renderer11::readTextureData(ID3D11Texture2D *texture, unsigned int subResource, const gl::Rectangle &area,
......
......@@ -187,10 +187,10 @@ class Renderer11 : public Renderer
virtual Image *createImage();
virtual void generateMipmap(Image *dest, Image *source);
virtual TextureStorage *createTextureStorage2D(SwapChain *swapChain);
virtual TextureStorage *createTextureStorage2D(int levels, GLenum internalformat, GLenum usage, bool forceRenderable, GLsizei width, GLsizei height);
virtual TextureStorage *createTextureStorageCube(int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size);
virtual TextureStorage *createTextureStorage3D(int levels, GLenum internalformat, GLenum usage, GLsizei width, GLsizei height, GLsizei depth);
virtual TextureStorage *createTextureStorage2DArray(int levels, GLenum internalformat, GLenum usage, GLsizei width, GLsizei height, GLsizei depth);
virtual TextureStorage *createTextureStorage2D(int levels, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height);
virtual TextureStorage *createTextureStorageCube(int levels, GLenum internalformat, bool renderTarget, int size);
virtual TextureStorage *createTextureStorage3D(int levels, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, GLsizei depth);
virtual TextureStorage *createTextureStorage2DArray(int levels, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, GLsizei depth);
// Buffer creation
virtual VertexBuffer *createVertexBuffer();
......
......@@ -49,7 +49,7 @@ TextureStorage11 *TextureStorage11::makeTextureStorage11(TextureStorage *storage
return static_cast<TextureStorage11*>(storage);
}
DWORD TextureStorage11::GetTextureBindFlags(GLenum internalFormat, GLuint clientVersion, GLenum glusage)
DWORD TextureStorage11::GetTextureBindFlags(GLenum internalFormat, GLuint clientVersion, bool renderTarget)
{
UINT bindFlags = 0;
......@@ -61,8 +61,7 @@ DWORD TextureStorage11::GetTextureBindFlags(GLenum internalFormat, GLuint client
{
bindFlags |= D3D11_BIND_DEPTH_STENCIL;
}
if (gl_d3d11::GetRTVFormat(internalFormat, clientVersion) != DXGI_FORMAT_UNKNOWN &&
glusage == GL_FRAMEBUFFER_ATTACHMENT_ANGLE)
if (gl_d3d11::GetRTVFormat(internalFormat, clientVersion) != DXGI_FORMAT_UNKNOWN && renderTarget)
{
bindFlags |= D3D11_BIND_RENDER_TARGET;
}
......@@ -220,8 +219,8 @@ TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, SwapChain11 *swapch
mDepthStencilFormat = DXGI_FORMAT_UNKNOWN;
}
TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, GLsizei width, GLsizei height)
: TextureStorage11(renderer, GetTextureBindFlags(internalformat, renderer->getCurrentClientVersion(), usage))
TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, int levels, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height)
: TextureStorage11(renderer, GetTextureBindFlags(internalformat, renderer->getCurrentClientVersion(), renderTarget))
{
mTexture = NULL;
for (unsigned int i = 0; i < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS; i++)
......@@ -428,8 +427,8 @@ void TextureStorage11_2D::generateMipmap(int level)
generateMipmapLayer(source, dest);
}
TextureStorage11_Cube::TextureStorage11_Cube(Renderer *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size)
: TextureStorage11(renderer, GetTextureBindFlags(internalformat, renderer->getCurrentClientVersion(), usage))
TextureStorage11_Cube::TextureStorage11_Cube(Renderer *renderer, int levels, GLenum internalformat, bool renderTarget, int size)
: TextureStorage11(renderer, GetTextureBindFlags(internalformat, renderer->getCurrentClientVersion(), renderTarget))
{
mTexture = NULL;
for (unsigned int i = 0; i < 6; i++)
......@@ -644,9 +643,9 @@ void TextureStorage11_Cube::generateMipmap(int face, int level)
generateMipmapLayer(source, dest);
}
TextureStorage11_3D::TextureStorage11_3D(Renderer *renderer, int levels, GLenum internalformat, GLenum usage,
TextureStorage11_3D::TextureStorage11_3D(Renderer *renderer, int levels, GLenum internalformat, bool renderTarget,
GLsizei width, GLsizei height, GLsizei depth)
: TextureStorage11(renderer, GetTextureBindFlags(internalformat, renderer->getCurrentClientVersion(), usage))
: TextureStorage11(renderer, GetTextureBindFlags(internalformat, renderer->getCurrentClientVersion(), renderTarget))
{
mTexture = NULL;
......@@ -888,9 +887,9 @@ void TextureStorage11_3D::generateMipmap(int level)
generateMipmapLayer(source, dest);
}
TextureStorage11_2DArray::TextureStorage11_2DArray(Renderer *renderer, int levels, GLenum internalformat, GLenum usage,
TextureStorage11_2DArray::TextureStorage11_2DArray(Renderer *renderer, int levels, GLenum internalformat, bool renderTarget,
GLsizei width, GLsizei height, GLsizei depth)
: TextureStorage11(renderer, GetTextureBindFlags(internalformat, renderer->getCurrentClientVersion(), usage))
: TextureStorage11(renderer, GetTextureBindFlags(internalformat, renderer->getCurrentClientVersion(), renderTarget))
{
mTexture = NULL;
......
......@@ -29,7 +29,7 @@ class TextureStorage11 : public TextureStorage
static TextureStorage11 *makeTextureStorage11(TextureStorage *storage);
static DWORD GetTextureBindFlags(GLenum internalFormat, GLuint clientVersion, GLenum glusage);
static DWORD GetTextureBindFlags(GLenum internalFormat, GLuint clientVersion, bool renderTarget);
UINT getBindFlags() const;
......@@ -79,7 +79,7 @@ class TextureStorage11_2D : public TextureStorage11
{
public:
TextureStorage11_2D(Renderer *renderer, SwapChain11 *swapchain);
TextureStorage11_2D(Renderer *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, GLsizei width, GLsizei height);
TextureStorage11_2D(Renderer *renderer, int levels, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height);
virtual ~TextureStorage11_2D();
static TextureStorage11_2D *makeTextureStorage11_2D(TextureStorage *storage);
......@@ -100,7 +100,7 @@ class TextureStorage11_2D : public TextureStorage11
class TextureStorage11_Cube : public TextureStorage11
{
public:
TextureStorage11_Cube(Renderer *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size);
TextureStorage11_Cube(Renderer *renderer, int levels, GLenum internalformat, bool renderTarget, int size);
virtual ~TextureStorage11_Cube();
static TextureStorage11_Cube *makeTextureStorage11_Cube(TextureStorage *storage);
......@@ -121,7 +121,7 @@ class TextureStorage11_Cube : public TextureStorage11
class TextureStorage11_3D : public TextureStorage11
{
public:
TextureStorage11_3D(Renderer *renderer, int levels, GLenum internalformat, GLenum usage,
TextureStorage11_3D(Renderer *renderer, int levels, GLenum internalformat, bool renderTarget,
GLsizei width, GLsizei height, GLsizei depth);
virtual ~TextureStorage11_3D();
......@@ -149,7 +149,7 @@ class TextureStorage11_3D : public TextureStorage11
class TextureStorage11_2DArray : public TextureStorage11
{
public:
TextureStorage11_2DArray(Renderer *renderer, int levels, GLenum internalformat, GLenum usage,
TextureStorage11_2DArray(Renderer *renderer, int levels, GLenum internalformat, bool renderTarget,
GLsizei width, GLsizei height, GLsizei depth);
virtual ~TextureStorage11_2DArray();
......
......@@ -3313,17 +3313,17 @@ TextureStorage *Renderer9::createTextureStorage2D(SwapChain *swapChain)
return new TextureStorage9_2D(this, swapChain9);
}
TextureStorage *Renderer9::createTextureStorage2D(int levels, GLenum internalformat, GLenum usage, bool forceRenderable, GLsizei width, GLsizei height)
TextureStorage *Renderer9::createTextureStorage2D(int levels, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height)
{
return new TextureStorage9_2D(this, levels, internalformat, usage, forceRenderable, width, height);
return new TextureStorage9_2D(this, levels, internalformat, renderTarget, width, height);
}
TextureStorage *Renderer9::createTextureStorageCube(int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size)
TextureStorage *Renderer9::createTextureStorageCube(int levels, GLenum internalformat, bool renderTarget, int size)
{
return new TextureStorage9_Cube(this, levels, internalformat, usage, forceRenderable, size);
return new TextureStorage9_Cube(this, levels, internalformat, renderTarget, size);
}
TextureStorage *Renderer9::createTextureStorage3D(int levels, GLenum internalformat, GLenum usage, GLsizei width, GLsizei height, GLsizei depth)
TextureStorage *Renderer9::createTextureStorage3D(int levels, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, GLsizei depth)
{
// 3D textures are not supported by the D3D9 backend.
UNREACHABLE();
......@@ -3331,7 +3331,7 @@ TextureStorage *Renderer9::createTextureStorage3D(int levels, GLenum internalfor
return NULL;
}
TextureStorage *Renderer9::createTextureStorage2DArray(int levels, GLenum internalformat, GLenum usage, GLsizei width, GLsizei height, GLsizei depth)
TextureStorage *Renderer9::createTextureStorage2DArray(int levels, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, GLsizei depth)
{
// 2D array textures are not supported by the D3D9 backend.
UNREACHABLE();
......
......@@ -203,10 +203,10 @@ class Renderer9 : public Renderer
virtual Image *createImage();
virtual void generateMipmap(Image *dest, Image *source);
virtual TextureStorage *createTextureStorage2D(SwapChain *swapChain);
virtual TextureStorage *createTextureStorage2D(int levels, GLenum internalformat, GLenum usage, bool forceRenderable, GLsizei width, GLsizei height);
virtual TextureStorage *createTextureStorageCube(int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size);
virtual TextureStorage *createTextureStorage3D(int levels, GLenum internalformat, GLenum usage, GLsizei width, GLsizei height, GLsizei depth);
virtual TextureStorage *createTextureStorage2DArray(int levels, GLenum internalformat, GLenum usage, GLsizei width, GLsizei height, GLsizei depth);
virtual TextureStorage *createTextureStorage2D(int levels, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height);
virtual TextureStorage *createTextureStorageCube(int levels, GLenum internalformat, bool renderTarget, int size);
virtual TextureStorage *createTextureStorage3D(int levels, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, GLsizei depth);
virtual TextureStorage *createTextureStorage2DArray(int levels, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, GLsizei depth);
// Buffer creation
virtual VertexBuffer *createVertexBuffer();
......
......@@ -38,7 +38,7 @@ TextureStorage9 *TextureStorage9::makeTextureStorage9(TextureStorage *storage)
return static_cast<TextureStorage9*>(storage);
}
DWORD TextureStorage9::GetTextureUsage(GLenum internalformat, Renderer9 *renderer, GLenum glusage, bool forceRenderable)
DWORD TextureStorage9::GetTextureUsage(GLenum internalformat, Renderer9 *renderer, bool renderTarget)
{
GLuint clientVersion = renderer->getCurrentClientVersion();
......@@ -49,9 +49,7 @@ DWORD TextureStorage9::GetTextureUsage(GLenum internalformat, Renderer9 *rendere
{
d3dusage |= D3DUSAGE_DEPTHSTENCIL;
}
else if (forceRenderable ||
(gl_d3d9::GetRenderFormat(internalformat, renderer) != D3DFMT_UNKNOWN &&
glusage == GL_FRAMEBUFFER_ATTACHMENT_ANGLE))
else if (renderTarget && (gl_d3d9::GetRenderFormat(internalformat, renderer) != D3DFMT_UNKNOWN))
{
d3dusage |= D3DUSAGE_RENDERTARGET;
}
......@@ -99,8 +97,8 @@ TextureStorage9_2D::TextureStorage9_2D(Renderer *renderer, SwapChain9 *swapchain
initializeRenderTarget();
}
TextureStorage9_2D::TextureStorage9_2D(Renderer *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, GLsizei width, GLsizei height)
: TextureStorage9(renderer, GetTextureUsage(internalformat, Renderer9::makeRenderer9(renderer), usage, forceRenderable))
TextureStorage9_2D::TextureStorage9_2D(Renderer *renderer, int levels, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height)
: TextureStorage9(renderer, GetTextureUsage(internalformat, Renderer9::makeRenderer9(renderer), renderTarget))
{
mTexture = NULL;
mRenderTarget = NULL;
......@@ -193,8 +191,8 @@ void TextureStorage9_2D::initializeRenderTarget()
}
}
TextureStorage9_Cube::TextureStorage9_Cube(Renderer *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size)
: TextureStorage9(renderer, GetTextureUsage(internalformat, Renderer9::makeRenderer9(renderer), usage, forceRenderable))
TextureStorage9_Cube::TextureStorage9_Cube(Renderer *renderer, int levels, GLenum internalformat, bool renderTarget, int size)
: TextureStorage9(renderer, GetTextureUsage(internalformat, Renderer9::makeRenderer9(renderer), renderTarget))
{
mTexture = NULL;
for (int i = 0; i < 6; ++i)
......
......@@ -29,7 +29,7 @@ class TextureStorage9 : public TextureStorage
static TextureStorage9 *makeTextureStorage9(TextureStorage *storage);
static DWORD GetTextureUsage(GLenum internalformat, Renderer9 *renderer, GLenum glusage, bool forceRenderable);
static DWORD GetTextureUsage(GLenum internalformat, Renderer9 *renderer, bool renderTarget);
D3DPOOL getPool() const;
DWORD getUsage() const;
......@@ -61,7 +61,7 @@ class TextureStorage9_2D : public TextureStorage9
{
public:
TextureStorage9_2D(Renderer *renderer, SwapChain9 *swapchain);
TextureStorage9_2D(Renderer *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, GLsizei width, GLsizei height);
TextureStorage9_2D(Renderer *renderer, int levels, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height);
virtual ~TextureStorage9_2D();
static TextureStorage9_2D *makeTextureStorage9_2D(TextureStorage *storage);
......@@ -83,7 +83,7 @@ class TextureStorage9_2D : public TextureStorage9
class TextureStorage9_Cube : public TextureStorage9
{
public:
TextureStorage9_Cube(Renderer *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size);
TextureStorage9_Cube(Renderer *renderer, int levels, GLenum internalformat, bool renderTarget, int size);
virtual ~TextureStorage9_Cube();
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