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