Updated Renderbuffers, Textures and TextureStorageInterface to be aware of render targets which are based on miplevels and layers other than zero.
TRAC #23470
Signed-off-by: Jamie Madill
Signed-off-by: Shannon Woods
Author: Geoff Lang
diff --git a/src/libGLESv2/Renderbuffer.cpp b/src/libGLESv2/Renderbuffer.cpp
index 61a1a57..940e3b3 100644
--- a/src/libGLESv2/Renderbuffer.cpp
+++ b/src/libGLESv2/Renderbuffer.cpp
@@ -38,7 +38,7 @@
///// RenderbufferTexture2D Implementation ////////
-RenderbufferTexture2D::RenderbufferTexture2D(Texture2D *texture, GLenum target) : mTarget(target)
+RenderbufferTexture2D::RenderbufferTexture2D(Texture2D *texture, GLint level) : mLevel(level)
{
mTexture2D.set(texture);
}
@@ -62,32 +62,32 @@
rx::RenderTarget *RenderbufferTexture2D::getRenderTarget()
{
- return mTexture2D->getRenderTarget(mTarget);
+ return mTexture2D->getRenderTarget(mLevel);
}
rx::RenderTarget *RenderbufferTexture2D::getDepthStencil()
{
- return mTexture2D->getDepthStencil(mTarget);
+ return mTexture2D->getDepthSencil(mLevel);
}
GLsizei RenderbufferTexture2D::getWidth() const
{
- return mTexture2D->getWidth(0);
+ return mTexture2D->getWidth(mLevel);
}
GLsizei RenderbufferTexture2D::getHeight() const
{
- return mTexture2D->getHeight(0);
+ return mTexture2D->getHeight(mLevel);
}
GLenum RenderbufferTexture2D::getInternalFormat() const
{
- return mTexture2D->getInternalFormat(0);
+ return mTexture2D->getInternalFormat(mLevel);
}
GLenum RenderbufferTexture2D::getActualFormat() const
{
- return mTexture2D->getActualFormat(0);
+ return mTexture2D->getActualFormat(mLevel);
}
GLsizei RenderbufferTexture2D::getSamples() const
@@ -97,12 +97,13 @@
unsigned int RenderbufferTexture2D::getSerial() const
{
- return mTexture2D->getRenderTargetSerial(mTarget);
+ return mTexture2D->getRenderTargetSerial(mLevel);
}
///// RenderbufferTextureCubeMap Implementation ////////
-RenderbufferTextureCubeMap::RenderbufferTextureCubeMap(TextureCubeMap *texture, GLenum target) : mTarget(target)
+RenderbufferTextureCubeMap::RenderbufferTextureCubeMap(TextureCubeMap *texture, GLenum faceTarget, GLint level)
+ : mFaceTarget(faceTarget), mLevel(level)
{
mTextureCubeMap.set(texture);
}
@@ -126,32 +127,32 @@
rx::RenderTarget *RenderbufferTextureCubeMap::getRenderTarget()
{
- return mTextureCubeMap->getRenderTarget(mTarget);
+ return mTextureCubeMap->getRenderTarget(mFaceTarget, mLevel);
}
rx::RenderTarget *RenderbufferTextureCubeMap::getDepthStencil()
{
- return NULL;
+ return mTextureCubeMap->getDepthStencil(mFaceTarget, mLevel);
}
GLsizei RenderbufferTextureCubeMap::getWidth() const
{
- return mTextureCubeMap->getWidth(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0);
+ return mTextureCubeMap->getWidth(mFaceTarget, mLevel);
}
GLsizei RenderbufferTextureCubeMap::getHeight() const
{
- return mTextureCubeMap->getHeight(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0);
+ return mTextureCubeMap->getHeight(mFaceTarget, mLevel);
}
GLenum RenderbufferTextureCubeMap::getInternalFormat() const
{
- return mTextureCubeMap->getInternalFormat(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0);
+ return mTextureCubeMap->getInternalFormat(mFaceTarget, mLevel);
}
GLenum RenderbufferTextureCubeMap::getActualFormat() const
{
- return mTextureCubeMap->getActualFormat(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0);
+ return mTextureCubeMap->getActualFormat(mFaceTarget, mLevel);
}
GLsizei RenderbufferTextureCubeMap::getSamples() const
@@ -161,7 +162,7 @@
unsigned int RenderbufferTextureCubeMap::getSerial() const
{
- return mTextureCubeMap->getRenderTargetSerial(mTarget);
+ return mTextureCubeMap->getRenderTargetSerial(mFaceTarget, mLevel);
}
////// Renderbuffer Implementation //////
@@ -274,7 +275,7 @@
mInstance = newStorage;
}
-RenderbufferStorage::RenderbufferStorage() : mSerial(issueSerial())
+RenderbufferStorage::RenderbufferStorage() : mSerial(issueSerials(1))
{
mWidth = 0;
mHeight = 0;
@@ -327,15 +328,10 @@
return mSerial;
}
-unsigned int RenderbufferStorage::issueSerial()
-{
- return mCurrentSerial++;
-}
-
-unsigned int RenderbufferStorage::issueCubeSerials()
+unsigned int RenderbufferStorage::issueSerials(GLuint count)
{
unsigned int firstSerial = mCurrentSerial;
- mCurrentSerial += 6;
+ mCurrentSerial += count;
return firstSerial;
}
@@ -377,12 +373,7 @@
rx::RenderTarget *Colorbuffer::getRenderTarget()
{
- if (mRenderTarget)
- {
- return mRenderTarget;
- }
-
- return NULL;
+ return mRenderTarget;
}
DepthStencilbuffer::DepthStencilbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain)
@@ -420,12 +411,7 @@
rx::RenderTarget *DepthStencilbuffer::getDepthStencil()
{
- if (mDepthStencil)
- {
- return mDepthStencil;
- }
-
- return NULL;
+ return mDepthStencil;
}
Depthbuffer::Depthbuffer(rx::Renderer *renderer, int width, int height, GLsizei samples) : DepthStencilbuffer(renderer, width, height, samples)