Passes a base-class Renderer pointer to Image where needed, instead of Renderer9

TRAC #22254 Author: Shannon Woods Signed-off-by: Geoff Lang Signed-off-by: Daniel Koch git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1570 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent 244e1838
......@@ -416,9 +416,8 @@ GLenum Texture2D::getActualFormat(GLint level) const
void Texture2D::redefineImage(GLint level, GLint internalformat, GLsizei width, GLsizei height)
{
releaseTexImage();
assert(dynamic_cast<rx::Renderer9*>(mRenderer) != NULL); // D3D9_REPLACE
rx::Renderer9 *renderer9 = static_cast<rx::Renderer9*>(mRenderer); // D3D9_REPLACE
bool redefined = mImageArray[level]->redefine(renderer9, internalformat, width, height, false);
bool redefined = mImageArray[level]->redefine(mRenderer, internalformat, width, height, false);
if (mTexStorage && redefined)
{
......@@ -447,13 +446,11 @@ void Texture2D::bindTexImage(egl::Surface *surface)
GLint internalformat = surface->getFormat();
assert(dynamic_cast<rx::Renderer9*>(mRenderer) != NULL); // D3D9_REPLACE
rx::Renderer9 *renderer9 = static_cast<rx::Renderer9*>(mRenderer); // D3D9_REPLACE
mImageArray[0]->redefine(renderer9, internalformat, surface->getWidth(), surface->getHeight(), true);
mImageArray[0]->redefine(mRenderer, internalformat, surface->getWidth(), surface->getHeight(), true);
delete mTexStorage;
rx::SwapChain9 *swapchain = static_cast<rx::SwapChain9*>(surface->getSwapChain()); // D3D9_REPLACE
mTexStorage = new rx::TextureStorage2D(renderer9, swapchain);
mTexStorage = new rx::TextureStorage2D(mRenderer, swapchain);
mDirtyImages = true;
mSurface = surface;
......@@ -473,11 +470,9 @@ void Texture2D::releaseTexImage()
mTexStorage = NULL;
}
assert(dynamic_cast<rx::Renderer9*>(mRenderer) != NULL); // D3D9_REPLACE
rx::Renderer9 *renderer9 = static_cast<rx::Renderer9*>(mRenderer); // D3D9_REPLACE
for (int i = 0; i < IMPLEMENTATION_MAX_TEXTURE_LEVELS; i++)
{
mImageArray[i]->redefine(renderer9, GL_RGBA8_OES, 0, 0, true);
mImageArray[i]->redefine(mRenderer, GL_RGBA8_OES, 0, 0, true);
}
}
}
......@@ -592,21 +587,19 @@ void Texture2D::copySubImage(GLenum target, GLint level, GLint xoffset, GLint yo
void Texture2D::storage(GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)
{
delete mTexStorage;
assert(dynamic_cast<rx::Renderer9*>(mRenderer) != NULL); // D3D9_REPLACE
rx::Renderer9 *renderer9 = static_cast<rx::Renderer9*>(mRenderer); // D3D9_REPLACE
mTexStorage = new rx::TextureStorage2D(renderer9, levels, internalformat, mUsage, false, width, height);
mTexStorage = new rx::TextureStorage2D(mRenderer, levels, internalformat, mUsage, false, width, height);
mImmutable = true;
for (int level = 0; level < levels; level++)
{
mImageArray[level]->redefine(renderer9, internalformat, width, height, true);
mImageArray[level]->redefine(mRenderer, internalformat, width, height, true);
width = std::max(1, width >> 1);
height = std::max(1, height >> 1);
}
for (int level = levels; level < IMPLEMENTATION_MAX_TEXTURE_LEVELS; level++)
{
mImageArray[level]->redefine(renderer9, GL_NONE, 0, 0, true);
mImageArray[level]->redefine(mRenderer, GL_NONE, 0, 0, true);
}
if (mTexStorage->isManaged())
......@@ -736,9 +729,7 @@ void Texture2D::createTexture()
GLenum internalformat = mImageArray[0]->getInternalFormat();
delete mTexStorage;
assert(dynamic_cast<rx::Renderer9*>(mRenderer) != NULL); // D3D9_REPLACE
rx::Renderer9 *renderer9 = static_cast<rx::Renderer9*>(mRenderer); // D3D9_REPLACE
mTexStorage = new rx::TextureStorage2D(renderer9, levels, internalformat, mUsage, false, width, height);
mTexStorage = new rx::TextureStorage2D(mRenderer, levels, internalformat, mUsage, false, width, height);
if (mTexStorage->isManaged())
{
......@@ -781,9 +772,7 @@ void Texture2D::convertToRenderTarget()
GLint levels = creationLevels(width, height);
GLenum internalformat = mImageArray[0]->getInternalFormat();
assert(dynamic_cast<rx::Renderer9*>(mRenderer) != NULL); // D3D9_REPLACE
rx::Renderer9 *renderer9 = static_cast<rx::Renderer9*>(mRenderer); // D3D9_REPLACE
newTexStorage = new rx::TextureStorage2D(renderer9, levels, internalformat, GL_FRAMEBUFFER_ATTACHMENT_ANGLE, true, width, height);
newTexStorage = new rx::TextureStorage2D(mRenderer, levels, internalformat, GL_FRAMEBUFFER_ATTACHMENT_ANGLE, true, width, height);
if (mTexStorage != NULL)
{
......@@ -1195,9 +1184,7 @@ void TextureCubeMap::createTexture()
GLenum internalformat = mImageArray[0][0]->getInternalFormat();
delete mTexStorage;
assert(dynamic_cast<rx::Renderer9*>(mRenderer) != NULL); // D3D9_REPLACE
rx::Renderer9 *renderer9 = static_cast<rx::Renderer9*>(mRenderer); // D3D9_REPLACE
mTexStorage = new rx::TextureStorageCubeMap(renderer9, levels, internalformat, mUsage, false, size);
mTexStorage = new rx::TextureStorageCubeMap(mRenderer, levels, internalformat, mUsage, false, size);
if (mTexStorage->isManaged())
{
......@@ -1245,9 +1232,7 @@ void TextureCubeMap::convertToRenderTarget()
GLint levels = creationLevels(size);
GLenum internalformat = mImageArray[0][0]->getInternalFormat();
assert(dynamic_cast<rx::Renderer9*>(mRenderer) != NULL); // D3D9_REPLACE
rx::Renderer9 *renderer9 = static_cast<rx::Renderer9*>(mRenderer); // D3D9_REPLACE
newTexStorage = new rx::TextureStorageCubeMap(renderer9, levels, internalformat, GL_FRAMEBUFFER_ATTACHMENT_ANGLE, true, size);
newTexStorage = new rx::TextureStorageCubeMap(mRenderer, levels, internalformat, GL_FRAMEBUFFER_ATTACHMENT_ANGLE, true, size);
if (mTexStorage != NULL)
{
......@@ -1286,9 +1271,7 @@ unsigned int TextureCubeMap::faceIndex(GLenum face)
void TextureCubeMap::redefineImage(int face, GLint level, GLint internalformat, GLsizei width, GLsizei height)
{
assert(dynamic_cast<rx::Renderer9*>(mRenderer) != NULL); // D3D9_REPLACE
rx::Renderer9 *renderer9 = static_cast<rx::Renderer9*>(mRenderer); // D3D9_REPLACE
bool redefined = mImageArray[face][level]->redefine(renderer9, internalformat, width, height, false);
bool redefined = mImageArray[face][level]->redefine(mRenderer, internalformat, width, height, false);
if (mTexStorage && redefined)
{
......@@ -1386,16 +1369,14 @@ void TextureCubeMap::copySubImage(GLenum target, GLint level, GLint xoffset, GLi
void TextureCubeMap::storage(GLsizei levels, GLenum internalformat, GLsizei size)
{
delete mTexStorage;
assert(dynamic_cast<rx::Renderer9*>(mRenderer) != NULL); // D3D9_REPLACE
rx::Renderer9 *renderer9 = static_cast<rx::Renderer9*>(mRenderer); // D3D9_REPLACE
mTexStorage = new rx::TextureStorageCubeMap(renderer9, levels, internalformat, mUsage, false, size);
mTexStorage = new rx::TextureStorageCubeMap(mRenderer, levels, internalformat, mUsage, false, size);
mImmutable = true;
for (int level = 0; level < levels; level++)
{
for (int face = 0; face < 6; face++)
{
mImageArray[face][level]->redefine(renderer9, internalformat, size, size, true);
mImageArray[face][level]->redefine(mRenderer, internalformat, size, size, true);
size = std::max(1, size >> 1);
}
}
......@@ -1404,7 +1385,7 @@ void TextureCubeMap::storage(GLsizei levels, GLenum internalformat, GLsizei size
{
for (int face = 0; face < 6; face++)
{
mImageArray[face][level]->redefine(renderer9, GL_NONE, 0, 0, true);
mImageArray[face][level]->redefine(mRenderer, GL_NONE, 0, 0, true);
}
}
......
......@@ -266,22 +266,22 @@ void Image::CopyLockableSurfaces(IDirect3DSurface9 *dest, IDirect3DSurface9 *sou
else UNREACHABLE();
}
bool Image::redefine(rx::Renderer9 *renderer, GLint internalformat, GLsizei width, GLsizei height, bool forceRelease)
bool Image::redefine(rx::Renderer *renderer, GLint internalformat, GLsizei width, GLsizei height, bool forceRelease)
{
if (mWidth != width ||
mHeight != height ||
mInternalFormat != internalformat ||
forceRelease)
{
mRenderer = Renderer9::makeRenderer9(renderer);
mWidth = width;
mHeight = height;
mInternalFormat = internalformat;
// compute the d3d format that will be used
mD3DFormat = renderer->ConvertTextureInternalFormat(internalformat);
mD3DFormat = mRenderer->ConvertTextureInternalFormat(internalformat);
mActualFormat = d3d9_gl::GetEquivalentFormat(mD3DFormat);
mRenderer = Renderer9::makeRenderer9(renderer); // D3D9_REPLACE
if (mSurface)
{
mSurface->Release();
......
......@@ -23,6 +23,7 @@ class Framebuffer;
namespace rx
{
class Renderer;
class Renderer9;
class TextureStorage2D;
class TextureStorageCubeMap;
......@@ -36,7 +37,7 @@ class Image
static void GenerateMipmap(Image *dest, Image *source);
static void Image::CopyLockableSurfaces(IDirect3DSurface9 *dest, IDirect3DSurface9 *source);
bool redefine(Renderer9 *renderer, GLint internalformat, GLsizei width, GLsizei height, bool forceRelease);
bool redefine(Renderer *renderer, GLint internalformat, GLsizei width, GLsizei height, bool forceRelease);
void markDirty() {mDirty = true;}
void markClean() {mDirty = false;}
......
......@@ -21,11 +21,11 @@ namespace rx
{
unsigned int TextureStorage::mCurrentTextureSerial = 1;
TextureStorage::TextureStorage(Renderer9 *renderer, DWORD usage)
TextureStorage::TextureStorage(Renderer *renderer, DWORD usage)
: mLodOffset(0),
mRenderer(renderer),
mRenderer(Renderer9::makeRenderer9(renderer)),
mD3DUsage(usage),
mD3DPool(renderer->getTexturePool(usage)),
mD3DPool(mRenderer->getTexturePool(usage)),
mTextureSerial(issueTextureSerial())
{
}
......@@ -115,7 +115,7 @@ int TextureStorage::levelCount()
return getBaseTexture() ? getBaseTexture()->GetLevelCount() - getLodOffset() : 0;
}
TextureStorage2D::TextureStorage2D(Renderer9 *renderer, rx::SwapChain9 *swapchain) : TextureStorage(renderer, D3DUSAGE_RENDERTARGET), mRenderTargetSerial(gl::RenderbufferStorage::issueSerial())
TextureStorage2D::TextureStorage2D(Renderer *renderer, rx::SwapChain9 *swapchain) : TextureStorage(renderer, D3DUSAGE_RENDERTARGET), mRenderTargetSerial(gl::RenderbufferStorage::issueSerial())
{
IDirect3DTexture9 *surfaceTexture = swapchain->getOffscreenTexture();
mTexture = surfaceTexture;
......@@ -123,8 +123,8 @@ TextureStorage2D::TextureStorage2D(Renderer9 *renderer, rx::SwapChain9 *swapchai
initializeRenderTarget();
}
TextureStorage2D::TextureStorage2D(Renderer9 *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, GLsizei width, GLsizei height)
: TextureStorage(renderer, GetTextureUsage(renderer->ConvertTextureInternalFormat(internalformat), usage, forceRenderable)),
TextureStorage2D::TextureStorage2D(Renderer *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, GLsizei width, GLsizei height)
: TextureStorage(renderer, GetTextureUsage(Renderer9::makeRenderer9(renderer)->ConvertTextureInternalFormat(internalformat), usage, forceRenderable)),
mRenderTargetSerial(gl::RenderbufferStorage::issueSerial())
{
mTexture = NULL;
......@@ -132,10 +132,10 @@ TextureStorage2D::TextureStorage2D(Renderer9 *renderer, int levels, GLenum inter
// we handle that here by skipping the d3d texture creation
if (width > 0 && height > 0)
{
IDirect3DDevice9 *device = renderer->getDevice(); // D3D9_REPLACE
IDirect3DDevice9 *device = mRenderer->getDevice(); // D3D9_REPLACE
gl::MakeValidSize(false, gl::IsCompressed(internalformat), &width, &height, &mLodOffset);
HRESULT result = device->CreateTexture(width, height, levels ? levels + mLodOffset : 0, getUsage(),
renderer->ConvertTextureInternalFormat(internalformat), getPool(), &mTexture, NULL);
mRenderer->ConvertTextureInternalFormat(internalformat), getPool(), &mTexture, NULL);
if (FAILED(result))
{
......@@ -221,8 +221,8 @@ void TextureStorage2D::initializeRenderTarget()
}
}
TextureStorageCubeMap::TextureStorageCubeMap(Renderer9 *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size)
: TextureStorage(renderer, GetTextureUsage(renderer->ConvertTextureInternalFormat(internalformat), usage, forceRenderable)),
TextureStorageCubeMap::TextureStorageCubeMap(Renderer *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size)
: TextureStorage(renderer, GetTextureUsage(Renderer9::makeRenderer9(renderer)->ConvertTextureInternalFormat(internalformat), usage, forceRenderable)),
mFirstRenderTargetSerial(gl::RenderbufferStorage::issueCubeSerials())
{
mTexture = NULL;
......@@ -230,11 +230,11 @@ TextureStorageCubeMap::TextureStorageCubeMap(Renderer9 *renderer, int levels, GL
// we handle that here by skipping the d3d texture creation
if (size > 0)
{
IDirect3DDevice9 *device = renderer->getDevice();
IDirect3DDevice9 *device = mRenderer->getDevice();
int height = size;
gl::MakeValidSize(false, gl::IsCompressed(internalformat), &size, &height, &mLodOffset);
HRESULT result = device->CreateCubeTexture(size, levels ? levels + mLodOffset : 0, getUsage(),
renderer->ConvertTextureInternalFormat(internalformat), getPool(), &mTexture, NULL);
mRenderer->ConvertTextureInternalFormat(internalformat), getPool(), &mTexture, NULL);
if (FAILED(result))
{
......
......@@ -28,7 +28,7 @@ class Blit;
class TextureStorage
{
public:
TextureStorage(rx::Renderer9 *renderer, DWORD usage);
TextureStorage(rx::Renderer *renderer, DWORD usage);
virtual ~TextureStorage();
......@@ -64,8 +64,8 @@ class TextureStorage
class TextureStorage2D : public TextureStorage
{
public:
explicit TextureStorage2D(rx::Renderer9 *renderer, rx::SwapChain9 *swapchain);
TextureStorage2D(rx::Renderer9 *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, GLsizei width, GLsizei height);
explicit TextureStorage2D(rx::Renderer *renderer, rx::SwapChain9 *swapchain);
TextureStorage2D(rx::Renderer *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, GLsizei width, GLsizei height);
virtual ~TextureStorage2D();
......@@ -89,7 +89,7 @@ class TextureStorage2D : public TextureStorage
class TextureStorageCubeMap : public TextureStorage
{
public:
TextureStorageCubeMap(rx::Renderer9 *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size);
TextureStorageCubeMap(rx::Renderer *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size);
virtual ~TextureStorageCubeMap();
......
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