Commit bbc02470 by Geoff Lang

Add a common base function for getSurfaceLevel in TextureStorage9.

Instead of casting to the specific TextureStorage9 type before calling getSurfaceLevel, merge the prototypes into a pure method in TextureStorage9. BUG=angleproject:970 Change-Id: I07b24b6cc470fc8cb6ba9bd9a8f178c3b43be36a Reviewed-on: https://chromium-review.googlesource.com/293270Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Tested-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent 656b0d45
...@@ -251,8 +251,8 @@ gl::Error Blit9::copy2D(const gl::Framebuffer *framebuffer, const RECT &sourceRe ...@@ -251,8 +251,8 @@ gl::Error Blit9::copy2D(const gl::Framebuffer *framebuffer, const RECT &sourceRe
ASSERT(source); ASSERT(source);
IDirect3DSurface9 *destSurface = NULL; IDirect3DSurface9 *destSurface = NULL;
TextureStorage9_2D *storage9 = GetAs<TextureStorage9_2D>(storage); TextureStorage9 *storage9 = GetAs<TextureStorage9>(storage);
error = storage9->getSurfaceLevel(level, true, &destSurface); error = storage9->getSurfaceLevel(GL_TEXTURE_2D, level, true, &destSurface);
if (error.isError()) if (error.isError())
{ {
SafeRelease(source); SafeRelease(source);
...@@ -291,8 +291,8 @@ gl::Error Blit9::copyCube(const gl::Framebuffer *framebuffer, const RECT &source ...@@ -291,8 +291,8 @@ gl::Error Blit9::copyCube(const gl::Framebuffer *framebuffer, const RECT &source
ASSERT(source); ASSERT(source);
IDirect3DSurface9 *destSurface = NULL; IDirect3DSurface9 *destSurface = NULL;
TextureStorage9_Cube *storage9 = GetAs<TextureStorage9_Cube>(storage); TextureStorage9 *storage9 = GetAs<TextureStorage9>(storage);
error = storage9->getCubeMapSurface(target, level, true, &destSurface); error = storage9->getSurfaceLevel(target, level, true, &destSurface);
if (error.isError()) if (error.isError())
{ {
SafeRelease(source); SafeRelease(source);
......
...@@ -330,8 +330,8 @@ gl::Error Image9::getSurface(IDirect3DSurface9 **outSurface) ...@@ -330,8 +330,8 @@ gl::Error Image9::getSurface(IDirect3DSurface9 **outSurface)
gl::Error Image9::setManagedSurface2D(TextureStorage *storage, int level) gl::Error Image9::setManagedSurface2D(TextureStorage *storage, int level)
{ {
IDirect3DSurface9 *surface = NULL; IDirect3DSurface9 *surface = NULL;
TextureStorage9_2D *storage9 = GetAs<TextureStorage9_2D>(storage); TextureStorage9 *storage9 = GetAs<TextureStorage9>(storage);
gl::Error error = storage9->getSurfaceLevel(level, false, &surface); gl::Error error = storage9->getSurfaceLevel(GL_TEXTURE_2D, level, false, &surface);
if (error.isError()) if (error.isError())
{ {
return error; return error;
...@@ -342,8 +342,9 @@ gl::Error Image9::setManagedSurface2D(TextureStorage *storage, int level) ...@@ -342,8 +342,9 @@ gl::Error Image9::setManagedSurface2D(TextureStorage *storage, int level)
gl::Error Image9::setManagedSurfaceCube(TextureStorage *storage, int face, int level) gl::Error Image9::setManagedSurfaceCube(TextureStorage *storage, int face, int level)
{ {
IDirect3DSurface9 *surface = NULL; IDirect3DSurface9 *surface = NULL;
TextureStorage9_Cube *storage9 = GetAs<TextureStorage9_Cube>(storage); TextureStorage9 *storage9 = GetAs<TextureStorage9>(storage);
gl::Error error = storage9->getCubeMapSurface(GL_TEXTURE_CUBE_MAP_POSITIVE_X + face, level, false, &surface); gl::Error error =
storage9->getSurfaceLevel(GL_TEXTURE_CUBE_MAP_POSITIVE_X + face, level, false, &surface);
if (error.isError()) if (error.isError())
{ {
return error; return error;
...@@ -384,12 +385,13 @@ gl::Error Image9::copyToStorage(TextureStorage *storage, const gl::ImageIndex &i ...@@ -384,12 +385,13 @@ gl::Error Image9::copyToStorage(TextureStorage *storage, const gl::ImageIndex &i
return error; return error;
} }
TextureStorage9 *storage9 = GetAs<TextureStorage9>(storage);
IDirect3DSurface9 *destSurface = NULL; IDirect3DSurface9 *destSurface = NULL;
if (index.type == GL_TEXTURE_2D) if (index.type == GL_TEXTURE_2D)
{ {
TextureStorage9_2D *storage9 = GetAs<TextureStorage9_2D>(storage); error = storage9->getSurfaceLevel(GL_TEXTURE_2D, index.mipIndex, true, &destSurface);
error = storage9->getSurfaceLevel(index.mipIndex, true, &destSurface);
if (error.isError()) if (error.isError())
{ {
return error; return error;
...@@ -398,8 +400,7 @@ gl::Error Image9::copyToStorage(TextureStorage *storage, const gl::ImageIndex &i ...@@ -398,8 +400,7 @@ gl::Error Image9::copyToStorage(TextureStorage *storage, const gl::ImageIndex &i
else else
{ {
ASSERT(gl::IsCubeMapTextureTarget(index.type)); ASSERT(gl::IsCubeMapTextureTarget(index.type));
TextureStorage9_Cube *storage9 = GetAs<TextureStorage9_Cube>(storage); error = storage9->getSurfaceLevel(index.type, index.mipIndex, true, &destSurface);
error = storage9->getCubeMapSurface(index.type, index.mipIndex, true, &destSurface);
if (error.isError()) if (error.isError())
{ {
return error; return error;
......
...@@ -141,8 +141,14 @@ TextureStorage9_2D::~TextureStorage9_2D() ...@@ -141,8 +141,14 @@ TextureStorage9_2D::~TextureStorage9_2D()
// Increments refcount on surface. // Increments refcount on surface.
// caller must Release() the returned surface // caller must Release() the returned surface
gl::Error TextureStorage9_2D::getSurfaceLevel(int level, bool dirty, IDirect3DSurface9 **outSurface) gl::Error TextureStorage9_2D::getSurfaceLevel(GLenum target,
int level,
bool dirty,
IDirect3DSurface9 **outSurface)
{ {
ASSERT(target == GL_TEXTURE_2D);
UNUSED_ASSERTION_VARIABLE(target);
IDirect3DBaseTexture9 *baseTexture = NULL; IDirect3DBaseTexture9 *baseTexture = NULL;
gl::Error error = getBaseTexture(&baseTexture); gl::Error error = getBaseTexture(&baseTexture);
if (error.isError()) if (error.isError())
...@@ -169,12 +175,14 @@ gl::Error TextureStorage9_2D::getSurfaceLevel(int level, bool dirty, IDirect3DSu ...@@ -169,12 +175,14 @@ gl::Error TextureStorage9_2D::getSurfaceLevel(int level, bool dirty, IDirect3DSu
return gl::Error(GL_NO_ERROR); return gl::Error(GL_NO_ERROR);
} }
gl::Error TextureStorage9_2D::getRenderTarget(const gl::ImageIndex &/*index*/, RenderTargetD3D **outRT) gl::Error TextureStorage9_2D::getRenderTarget(const gl::ImageIndex &index, RenderTargetD3D **outRT)
{ {
ASSERT(index.mipIndex == 0);
if (!mRenderTarget && isRenderTarget()) if (!mRenderTarget && isRenderTarget())
{ {
IDirect3DSurface9 *surface = NULL; IDirect3DSurface9 *surface = NULL;
gl::Error error = getSurfaceLevel(0, false, &surface); gl::Error error = getSurfaceLevel(GL_TEXTURE_2D, index.mipIndex, false, &surface);
if (error.isError()) if (error.isError())
{ {
return error; return error;
...@@ -193,14 +201,14 @@ gl::Error TextureStorage9_2D::getRenderTarget(const gl::ImageIndex &/*index*/, R ...@@ -193,14 +201,14 @@ gl::Error TextureStorage9_2D::getRenderTarget(const gl::ImageIndex &/*index*/, R
gl::Error TextureStorage9_2D::generateMipmap(const gl::ImageIndex &sourceIndex, const gl::ImageIndex &destIndex) gl::Error TextureStorage9_2D::generateMipmap(const gl::ImageIndex &sourceIndex, const gl::ImageIndex &destIndex)
{ {
IDirect3DSurface9 *upper = NULL; IDirect3DSurface9 *upper = NULL;
gl::Error error = getSurfaceLevel(sourceIndex.mipIndex, false, &upper); gl::Error error = getSurfaceLevel(GL_TEXTURE_2D, sourceIndex.mipIndex, false, &upper);
if (error.isError()) if (error.isError())
{ {
return error; return error;
} }
IDirect3DSurface9 *lower = NULL; IDirect3DSurface9 *lower = NULL;
error = getSurfaceLevel(destIndex.mipIndex, true, &lower); error = getSurfaceLevel(GL_TEXTURE_2D, destIndex.mipIndex, true, &lower);
if (error.isError()) if (error.isError())
{ {
SafeRelease(upper); SafeRelease(upper);
...@@ -251,14 +259,14 @@ gl::Error TextureStorage9_2D::copyToStorage(TextureStorage *destStorage) ...@@ -251,14 +259,14 @@ gl::Error TextureStorage9_2D::copyToStorage(TextureStorage *destStorage)
for (int i = 0; i < levels; ++i) for (int i = 0; i < levels; ++i)
{ {
IDirect3DSurface9 *srcSurf = NULL; IDirect3DSurface9 *srcSurf = NULL;
gl::Error error = getSurfaceLevel(i, false, &srcSurf); gl::Error error = getSurfaceLevel(GL_TEXTURE_2D, i, false, &srcSurf);
if (error.isError()) if (error.isError())
{ {
return error; return error;
} }
IDirect3DSurface9 *dstSurf = NULL; IDirect3DSurface9 *dstSurf = NULL;
error = dest9->getSurfaceLevel(i, true, &dstSurf); error = dest9->getSurfaceLevel(GL_TEXTURE_2D, i, true, &dstSurf);
if (error.isError()) if (error.isError())
{ {
SafeRelease(srcSurf); SafeRelease(srcSurf);
...@@ -312,7 +320,10 @@ TextureStorage9_Cube::~TextureStorage9_Cube() ...@@ -312,7 +320,10 @@ TextureStorage9_Cube::~TextureStorage9_Cube()
// Increments refcount on surface. // Increments refcount on surface.
// caller must Release() the returned surface // caller must Release() the returned surface
gl::Error TextureStorage9_Cube::getCubeMapSurface(GLenum faceTarget, int level, bool dirty, IDirect3DSurface9 **outSurface) gl::Error TextureStorage9_Cube::getSurfaceLevel(GLenum target,
int level,
bool dirty,
IDirect3DSurface9 **outSurface)
{ {
IDirect3DBaseTexture9 *baseTexture = NULL; IDirect3DBaseTexture9 *baseTexture = NULL;
gl::Error error = getBaseTexture(&baseTexture); gl::Error error = getBaseTexture(&baseTexture);
...@@ -323,8 +334,8 @@ gl::Error TextureStorage9_Cube::getCubeMapSurface(GLenum faceTarget, int level, ...@@ -323,8 +334,8 @@ gl::Error TextureStorage9_Cube::getCubeMapSurface(GLenum faceTarget, int level,
IDirect3DCubeTexture9 *texture = static_cast<IDirect3DCubeTexture9*>(baseTexture); IDirect3DCubeTexture9 *texture = static_cast<IDirect3DCubeTexture9*>(baseTexture);
D3DCUBEMAP_FACES face = gl_d3d9::ConvertCubeFace(faceTarget); D3DCUBEMAP_FACES face = gl_d3d9::ConvertCubeFace(target);
HRESULT result = texture->GetCubeMapSurface(face, level + mTopLevel, outSurface); HRESULT result = texture->GetCubeMapSurface(face, level, outSurface);
ASSERT(SUCCEEDED(result)); ASSERT(SUCCEEDED(result));
if (FAILED(result)) if (FAILED(result))
...@@ -350,7 +361,8 @@ gl::Error TextureStorage9_Cube::getRenderTarget(const gl::ImageIndex &index, Ren ...@@ -350,7 +361,8 @@ gl::Error TextureStorage9_Cube::getRenderTarget(const gl::ImageIndex &index, Ren
if (mRenderTarget[index.layerIndex] == NULL && isRenderTarget()) if (mRenderTarget[index.layerIndex] == NULL && isRenderTarget())
{ {
IDirect3DSurface9 *surface = NULL; IDirect3DSurface9 *surface = NULL;
gl::Error error = getCubeMapSurface(GL_TEXTURE_CUBE_MAP_POSITIVE_X + index.layerIndex, 0, false, &surface); gl::Error error = getSurfaceLevel(GL_TEXTURE_CUBE_MAP_POSITIVE_X + index.layerIndex,
mTopLevel + index.mipIndex, false, &surface);
if (error.isError()) if (error.isError())
{ {
return error; return error;
...@@ -368,14 +380,14 @@ gl::Error TextureStorage9_Cube::getRenderTarget(const gl::ImageIndex &index, Ren ...@@ -368,14 +380,14 @@ gl::Error TextureStorage9_Cube::getRenderTarget(const gl::ImageIndex &index, Ren
gl::Error TextureStorage9_Cube::generateMipmap(const gl::ImageIndex &sourceIndex, const gl::ImageIndex &destIndex) gl::Error TextureStorage9_Cube::generateMipmap(const gl::ImageIndex &sourceIndex, const gl::ImageIndex &destIndex)
{ {
IDirect3DSurface9 *upper = NULL; IDirect3DSurface9 *upper = NULL;
gl::Error error = getCubeMapSurface(sourceIndex.type, sourceIndex.mipIndex, false, &upper); gl::Error error = getSurfaceLevel(sourceIndex.type, sourceIndex.mipIndex, false, &upper);
if (error.isError()) if (error.isError())
{ {
return error; return error;
} }
IDirect3DSurface9 *lower = NULL; IDirect3DSurface9 *lower = NULL;
error = getCubeMapSurface(destIndex.type, destIndex.mipIndex, true, &lower); error = getSurfaceLevel(destIndex.type, destIndex.mipIndex, true, &lower);
if (error.isError()) if (error.isError())
{ {
SafeRelease(upper); SafeRelease(upper);
...@@ -428,14 +440,15 @@ gl::Error TextureStorage9_Cube::copyToStorage(TextureStorage *destStorage) ...@@ -428,14 +440,15 @@ gl::Error TextureStorage9_Cube::copyToStorage(TextureStorage *destStorage)
for (int i = 0; i < levels; i++) for (int i = 0; i < levels; i++)
{ {
IDirect3DSurface9 *srcSurf = NULL; IDirect3DSurface9 *srcSurf = NULL;
gl::Error error = getCubeMapSurface(GL_TEXTURE_CUBE_MAP_POSITIVE_X + f, i, false, &srcSurf); gl::Error error =
getSurfaceLevel(GL_TEXTURE_CUBE_MAP_POSITIVE_X + f, i, false, &srcSurf);
if (error.isError()) if (error.isError())
{ {
return error; return error;
} }
IDirect3DSurface9 *dstSurf = NULL; IDirect3DSurface9 *dstSurf = NULL;
error = dest9->getCubeMapSurface(GL_TEXTURE_CUBE_MAP_POSITIVE_X + f, i, true, &dstSurf); error = dest9->getSurfaceLevel(GL_TEXTURE_CUBE_MAP_POSITIVE_X + f, i, true, &dstSurf);
if (error.isError()) if (error.isError())
{ {
SafeRelease(srcSurf); SafeRelease(srcSurf);
......
...@@ -31,6 +31,10 @@ class TextureStorage9 : public TextureStorage ...@@ -31,6 +31,10 @@ class TextureStorage9 : public TextureStorage
D3DPOOL getPool() const; D3DPOOL getPool() const;
DWORD getUsage() const; DWORD getUsage() const;
virtual gl::Error getSurfaceLevel(GLenum target,
int level,
bool dirty,
IDirect3DSurface9 **outSurface) = 0;
virtual gl::Error getBaseTexture(IDirect3DBaseTexture9 **outTexture) = 0; virtual gl::Error getBaseTexture(IDirect3DBaseTexture9 **outTexture) = 0;
virtual gl::Error getRenderTarget(const gl::ImageIndex &index, RenderTargetD3D **outRT) = 0; virtual gl::Error getRenderTarget(const gl::ImageIndex &index, RenderTargetD3D **outRT) = 0;
...@@ -67,7 +71,10 @@ class TextureStorage9_2D : public TextureStorage9 ...@@ -67,7 +71,10 @@ class TextureStorage9_2D : public TextureStorage9
TextureStorage9_2D(Renderer9 *renderer, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, int levels); TextureStorage9_2D(Renderer9 *renderer, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, int levels);
virtual ~TextureStorage9_2D(); virtual ~TextureStorage9_2D();
gl::Error getSurfaceLevel(int level, bool dirty, IDirect3DSurface9 **outSurface); gl::Error getSurfaceLevel(GLenum target,
int level,
bool dirty,
IDirect3DSurface9 **outSurface) override;
virtual gl::Error getRenderTarget(const gl::ImageIndex &index, RenderTargetD3D **outRT); virtual gl::Error getRenderTarget(const gl::ImageIndex &index, RenderTargetD3D **outRT);
virtual gl::Error getBaseTexture(IDirect3DBaseTexture9 **outTexture); virtual gl::Error getBaseTexture(IDirect3DBaseTexture9 **outTexture);
virtual gl::Error generateMipmap(const gl::ImageIndex &sourceIndex, const gl::ImageIndex &destIndex); virtual gl::Error generateMipmap(const gl::ImageIndex &sourceIndex, const gl::ImageIndex &destIndex);
...@@ -84,7 +91,10 @@ class TextureStorage9_Cube : public TextureStorage9 ...@@ -84,7 +91,10 @@ class TextureStorage9_Cube : public TextureStorage9
TextureStorage9_Cube(Renderer9 *renderer, GLenum internalformat, bool renderTarget, int size, int levels, bool hintLevelZeroOnly); TextureStorage9_Cube(Renderer9 *renderer, GLenum internalformat, bool renderTarget, int size, int levels, bool hintLevelZeroOnly);
virtual ~TextureStorage9_Cube(); virtual ~TextureStorage9_Cube();
gl::Error getCubeMapSurface(GLenum faceTarget, int level, bool dirty, IDirect3DSurface9 **outSurface); gl::Error getSurfaceLevel(GLenum target,
int level,
bool dirty,
IDirect3DSurface9 **outSurface) override;
virtual gl::Error getRenderTarget(const gl::ImageIndex &index, RenderTargetD3D **outRT); virtual gl::Error getRenderTarget(const gl::ImageIndex &index, RenderTargetD3D **outRT);
virtual gl::Error getBaseTexture(IDirect3DBaseTexture9 **outTexture); virtual gl::Error getBaseTexture(IDirect3DBaseTexture9 **outTexture);
virtual gl::Error generateMipmap(const gl::ImageIndex &sourceIndex, const gl::ImageIndex &destIndex); virtual gl::Error generateMipmap(const gl::ImageIndex &sourceIndex, const gl::ImageIndex &destIndex);
......
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