Initializes storage from GL params instead of D3D params

TRAC #21910 Signed-off-by: Daniel Koch Author: Shannon Woods git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1369 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent df14c761
...@@ -838,11 +838,8 @@ void Texture2D::copySubImage(GLenum target, GLint level, GLint xoffset, GLint yo ...@@ -838,11 +838,8 @@ 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)
{ {
D3DFORMAT d3dfmt = TextureStorage::ConvertTextureInternalFormat(internalformat);
DWORD d3dusage = TextureStorage::GetTextureUsage(d3dfmt, mUsage, false);
delete mTexStorage; delete mTexStorage;
mTexStorage = new TextureStorage2D(levels, d3dfmt, d3dusage, width, height); mTexStorage = new TextureStorage2D(levels, internalformat, mUsage, false, width, height);
mImmutable = true; mImmutable = true;
for (int level = 0; level < levels; level++) for (int level = 0; level < levels; level++)
...@@ -976,21 +973,20 @@ IDirect3DBaseTexture9 *Texture2D::getBaseTexture() const ...@@ -976,21 +973,20 @@ IDirect3DBaseTexture9 *Texture2D::getBaseTexture() const
return mTexStorage ? mTexStorage->getBaseTexture() : NULL; return mTexStorage ? mTexStorage->getBaseTexture() : NULL;
} }
// Constructs a Direct3D 9 texture resource from the texture images // Constructs a native texture resource from the texture images
void Texture2D::createTexture() void Texture2D::createTexture()
{ {
GLsizei width = mImageArray[0].getWidth(); GLsizei width = mImageArray[0].getWidth();
GLsizei height = mImageArray[0].getHeight(); GLsizei height = mImageArray[0].getHeight();
if (!(width > 0 && height > 0)) if (!(width > 0 && height > 0))
return; // do not attempt to create d3d textures for nonexistant data return; // do not attempt to create native textures for nonexistant data
GLint levels = creationLevels(width, height); GLint levels = creationLevels(width, height);
D3DFORMAT d3dfmt = mImageArray[0].getD3DFormat(); GLenum internalformat = mImageArray[0].getInternalFormat();
DWORD d3dusage = TextureStorage::GetTextureUsage(d3dfmt, mUsage, false);
delete mTexStorage; delete mTexStorage;
mTexStorage = new TextureStorage2D(levels, d3dfmt, d3dusage, width, height); mTexStorage = new TextureStorage2D(levels, internalformat, mUsage, false, width, height);
if (mTexStorage->isManaged()) if (mTexStorage->isManaged())
{ {
...@@ -1032,10 +1028,9 @@ void Texture2D::convertToRenderTarget() ...@@ -1032,10 +1028,9 @@ void Texture2D::convertToRenderTarget()
GLsizei width = mImageArray[0].getWidth(); GLsizei width = mImageArray[0].getWidth();
GLsizei height = mImageArray[0].getHeight(); GLsizei height = mImageArray[0].getHeight();
GLint levels = creationLevels(width, height); GLint levels = creationLevels(width, height);
D3DFORMAT d3dfmt = mImageArray[0].getD3DFormat(); GLenum internalformat = mImageArray[0].getInternalFormat();
DWORD d3dusage = TextureStorage::GetTextureUsage(d3dfmt, GL_FRAMEBUFFER_ATTACHMENT_ANGLE, true);
newTexStorage = new TextureStorage2D(levels, d3dfmt, d3dusage, width, height); newTexStorage = new TextureStorage2D(levels, internalformat, GL_FRAMEBUFFER_ATTACHMENT_ANGLE, true, width, height);
if (mTexStorage != NULL) if (mTexStorage != NULL)
{ {
...@@ -1464,20 +1459,19 @@ IDirect3DBaseTexture9 *TextureCubeMap::getBaseTexture() const ...@@ -1464,20 +1459,19 @@ IDirect3DBaseTexture9 *TextureCubeMap::getBaseTexture() const
return mTexStorage ? mTexStorage->getBaseTexture() : NULL; return mTexStorage ? mTexStorage->getBaseTexture() : NULL;
} }
// Constructs a Direct3D 9 texture resource from the texture images, or returns an existing one // Constructs a native texture resource from the texture images, or returns an existing one
void TextureCubeMap::createTexture() void TextureCubeMap::createTexture()
{ {
GLsizei size = mImageArray[0][0].getWidth(); GLsizei size = mImageArray[0][0].getWidth();
if (!(size > 0)) if (!(size > 0))
return; // do not attempt to create d3d textures for nonexistant data return; // do not attempt to create native textures for nonexistant data
GLint levels = creationLevels(size); GLint levels = creationLevels(size);
D3DFORMAT d3dfmt = mImageArray[0][0].getD3DFormat(); GLenum internalformat = mImageArray[0][0].getInternalFormat();
DWORD d3dusage = TextureStorage::GetTextureUsage(d3dfmt, mUsage, false);
delete mTexStorage; delete mTexStorage;
mTexStorage = new TextureStorageCubeMap(levels, d3dfmt, d3dusage, size); mTexStorage = new TextureStorageCubeMap(levels, internalformat, mUsage, false, size);
if (mTexStorage->isManaged()) if (mTexStorage->isManaged())
{ {
...@@ -1524,10 +1518,9 @@ void TextureCubeMap::convertToRenderTarget() ...@@ -1524,10 +1518,9 @@ void TextureCubeMap::convertToRenderTarget()
{ {
GLsizei size = mImageArray[0][0].getWidth(); GLsizei size = mImageArray[0][0].getWidth();
GLint levels = creationLevels(size); GLint levels = creationLevels(size);
D3DFORMAT d3dfmt = mImageArray[0][0].getD3DFormat(); GLenum internalformat = mImageArray[0][0].getInternalFormat();
DWORD d3dusage = TextureStorage::GetTextureUsage(d3dfmt, GL_FRAMEBUFFER_ATTACHMENT_ANGLE, true);
newTexStorage = new TextureStorageCubeMap(levels, d3dfmt, d3dusage, size); newTexStorage = new TextureStorageCubeMap(levels, internalformat, GL_FRAMEBUFFER_ATTACHMENT_ANGLE, true, size);
if (mTexStorage != NULL) if (mTexStorage != NULL)
{ {
...@@ -1707,11 +1700,8 @@ void TextureCubeMap::copySubImage(GLenum target, GLint level, GLint xoffset, GLi ...@@ -1707,11 +1700,8 @@ 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)
{ {
D3DFORMAT d3dfmt = TextureStorage::ConvertTextureInternalFormat(internalformat);
DWORD d3dusage = TextureStorage::GetTextureUsage(d3dfmt, mUsage, false);
delete mTexStorage; delete mTexStorage;
mTexStorage = new TextureStorageCubeMap(levels, d3dfmt, d3dusage, size); mTexStorage = new TextureStorageCubeMap(levels, internalformat, mUsage, false, size);
mImmutable = true; mImmutable = true;
for (int level = 0; level < levels; level++) for (int level = 0; level < levels; level++)
......
...@@ -157,8 +157,9 @@ TextureStorage2D::TextureStorage2D(IDirect3DTexture9 *surfaceTexture) : TextureS ...@@ -157,8 +157,9 @@ TextureStorage2D::TextureStorage2D(IDirect3DTexture9 *surfaceTexture) : TextureS
mTexture = surfaceTexture; mTexture = surfaceTexture;
} }
TextureStorage2D::TextureStorage2D(int levels, D3DFORMAT format, DWORD usage, int width, int height) TextureStorage2D::TextureStorage2D(int levels, GLenum internalformat, GLenum usage, bool forceRenderable, GLsizei width, GLsizei height)
: TextureStorage(usage), mRenderTargetSerial(RenderbufferStorage::issueSerial()) : TextureStorage(GetTextureUsage(ConvertTextureInternalFormat(internalformat), usage, forceRenderable)),
mRenderTargetSerial(RenderbufferStorage::issueSerial())
{ {
mTexture = NULL; mTexture = NULL;
// if the width or height is not positive this should be treated as an incomplete texture // if the width or height is not positive this should be treated as an incomplete texture
...@@ -166,8 +167,9 @@ TextureStorage2D::TextureStorage2D(int levels, D3DFORMAT format, DWORD usage, in ...@@ -166,8 +167,9 @@ TextureStorage2D::TextureStorage2D(int levels, D3DFORMAT format, DWORD usage, in
if (width > 0 && height > 0) if (width > 0 && height > 0)
{ {
IDirect3DDevice9 *device = getDisplay()->getRenderer()->getDevice(); // D3D9_REPLACE IDirect3DDevice9 *device = getDisplay()->getRenderer()->getDevice(); // D3D9_REPLACE
MakeValidSize(false, dx::IsCompressedFormat(format), &width, &height, &mLodOffset); MakeValidSize(false, gl::IsCompressed(internalformat), &width, &height, &mLodOffset);
HRESULT result = device->CreateTexture(width, height, levels ? levels + mLodOffset : 0, getUsage(), format, getPool(), &mTexture, NULL); HRESULT result = device->CreateTexture(width, height, levels ? levels + mLodOffset : 0, getUsage(),
ConvertTextureInternalFormat(internalformat), getPool(), &mTexture, NULL);
if (FAILED(result)) if (FAILED(result))
{ {
...@@ -216,8 +218,9 @@ unsigned int TextureStorage2D::getRenderTargetSerial(GLenum target) const ...@@ -216,8 +218,9 @@ unsigned int TextureStorage2D::getRenderTargetSerial(GLenum target) const
return mRenderTargetSerial; return mRenderTargetSerial;
} }
TextureStorageCubeMap::TextureStorageCubeMap(int levels, D3DFORMAT format, DWORD usage, int size) TextureStorageCubeMap::TextureStorageCubeMap(int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size)
: TextureStorage(usage), mFirstRenderTargetSerial(RenderbufferStorage::issueCubeSerials()) : TextureStorage(GetTextureUsage(ConvertTextureInternalFormat(internalformat), usage, forceRenderable)),
mFirstRenderTargetSerial(RenderbufferStorage::issueCubeSerials())
{ {
mTexture = NULL; mTexture = NULL;
// if the size is not positive this should be treated as an incomplete texture // if the size is not positive this should be treated as an incomplete texture
...@@ -226,8 +229,9 @@ TextureStorageCubeMap::TextureStorageCubeMap(int levels, D3DFORMAT format, DWORD ...@@ -226,8 +229,9 @@ TextureStorageCubeMap::TextureStorageCubeMap(int levels, D3DFORMAT format, DWORD
{ {
IDirect3DDevice9 *device = getDisplay()->getRenderer()->getDevice(); // D3D9_REPLACE IDirect3DDevice9 *device = getDisplay()->getRenderer()->getDevice(); // D3D9_REPLACE
int height = size; int height = size;
MakeValidSize(false, dx::IsCompressedFormat(format), &size, &height, &mLodOffset); MakeValidSize(false, gl::IsCompressed(internalformat), &size, &height, &mLodOffset);
HRESULT result = device->CreateCubeTexture(size, levels ? levels + mLodOffset : 0, getUsage(), format, getPool(), &mTexture, NULL); HRESULT result = device->CreateCubeTexture(size, levels ? levels + mLodOffset : 0, getUsage(),
ConvertTextureInternalFormat(internalformat), getPool(), &mTexture, NULL);
if (FAILED(result)) if (FAILED(result))
{ {
......
...@@ -58,7 +58,7 @@ class TextureStorage2D : public TextureStorage ...@@ -58,7 +58,7 @@ class TextureStorage2D : public TextureStorage
{ {
public: public:
explicit TextureStorage2D(IDirect3DTexture9 *surfaceTexture); explicit TextureStorage2D(IDirect3DTexture9 *surfaceTexture);
TextureStorage2D(int levels, D3DFORMAT format, DWORD usage, int width, int height); TextureStorage2D(int levels, GLenum internalformat, GLenum usage, bool forceRenderable, GLsizei width, GLsizei height);
virtual ~TextureStorage2D(); virtual ~TextureStorage2D();
...@@ -77,7 +77,7 @@ class TextureStorage2D : public TextureStorage ...@@ -77,7 +77,7 @@ class TextureStorage2D : public TextureStorage
class TextureStorageCubeMap : public TextureStorage class TextureStorageCubeMap : public TextureStorage
{ {
public: public:
TextureStorageCubeMap(int levels, D3DFORMAT format, DWORD usage, int size); TextureStorageCubeMap(int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size);
virtual ~TextureStorageCubeMap(); 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