Fix managed texturestorage textures

Trac #19259 Issue=268 managed textures need to be set on the images so they can be updated properly and to avoid the additional system memory copy of the surfaces. Also make sure track the managed state properly. Signed-off-by: Nicolas Capens git-svn-id: https://angleproject.googlecode.com/svn/trunk@915 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent f71a339a
...@@ -123,6 +123,7 @@ void Image::createSurface() ...@@ -123,6 +123,7 @@ void Image::createSurface()
mSurface = newSurface; mSurface = newSurface;
mDirty = false; mDirty = false;
mManaged = false;
} }
HRESULT Image::lock(D3DLOCKED_RECT *lockedRect, const RECT *rect) HRESULT Image::lock(D3DLOCKED_RECT *lockedRect, const RECT *rect)
...@@ -1987,6 +1988,17 @@ void Texture2D::storage(GLsizei levels, GLenum internalformat, GLsizei width, GL ...@@ -1987,6 +1988,17 @@ void Texture2D::storage(GLsizei levels, GLenum internalformat, GLsizei width, GL
{ {
mImageArray[level].redefine(GL_NONE, 0, 0, GL_UNSIGNED_BYTE, true); mImageArray[level].redefine(GL_NONE, 0, 0, GL_UNSIGNED_BYTE, true);
} }
if (mTexture->isManaged())
{
int levels = levelCount();
for (int level = 0; level < levels; level++)
{
IDirect3DSurface9 *surface = mTexture->getSurfaceLevel(level);
mImageArray[level].setManagedSurface(surface);
}
}
} }
// Tests for 2D texture sampling completeness. [OpenGL ES 2.0.24] section 3.8.2 page 85. // Tests for 2D texture sampling completeness. [OpenGL ES 2.0.24] section 3.8.2 page 85.
...@@ -2612,7 +2624,7 @@ void TextureCubeMap::createTexture() ...@@ -2612,7 +2624,7 @@ void TextureCubeMap::createTexture()
} }
} }
} }
mDirtyImages = true; mDirtyImages = true;
} }
...@@ -2836,7 +2848,7 @@ void TextureCubeMap::storage(GLsizei levels, GLenum internalformat, GLsizei size ...@@ -2836,7 +2848,7 @@ void TextureCubeMap::storage(GLsizei levels, GLenum internalformat, GLsizei size
mTexture = new TextureStorageCubeMap(levels, d3dfmt, size, mUsage == GL_FRAMEBUFFER_ATTACHMENT_ANGLE); mTexture = new TextureStorageCubeMap(levels, d3dfmt, size, mUsage == GL_FRAMEBUFFER_ATTACHMENT_ANGLE);
mImmutable = true; mImmutable = true;
for (int level = 0; level < IMPLEMENTATION_MAX_TEXTURE_LEVELS; level++) for (int level = 0; level < levels; level++)
{ {
for (int face = 0; face < 6; face++) for (int face = 0; face < 6; face++)
{ {
...@@ -2852,6 +2864,20 @@ void TextureCubeMap::storage(GLsizei levels, GLenum internalformat, GLsizei size ...@@ -2852,6 +2864,20 @@ void TextureCubeMap::storage(GLsizei levels, GLenum internalformat, GLsizei size
mImageArray[face][level].redefine(GL_NONE, 0, 0, GL_UNSIGNED_BYTE, true); mImageArray[face][level].redefine(GL_NONE, 0, 0, GL_UNSIGNED_BYTE, true);
} }
} }
if (mTexture->isManaged())
{
int levels = levelCount();
for (int face = 0; face < 6; face++)
{
for (int level = 0; level < levels; level++)
{
IDirect3DSurface9 *surface = mTexture->getCubeMapSurface(GL_TEXTURE_CUBE_MAP_POSITIVE_X + face, level);
mImageArray[face][level].setManagedSurface(surface);
}
}
}
} }
void TextureCubeMap::generateMipmaps() void TextureCubeMap::generateMipmaps()
......
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