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
diff --git a/src/libGLESv2/Texture.cpp b/src/libGLESv2/Texture.cpp
index 73ffa56..e079cb2 100644
--- a/src/libGLESv2/Texture.cpp
+++ b/src/libGLESv2/Texture.cpp
@@ -838,11 +838,8 @@
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;
- mTexStorage = new TextureStorage2D(levels, d3dfmt, d3dusage, width, height);
+ mTexStorage = new TextureStorage2D(levels, internalformat, mUsage, false, width, height);
mImmutable = true;
for (int level = 0; level < levels; level++)
@@ -976,21 +973,20 @@
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()
{
GLsizei width = mImageArray[0].getWidth();
GLsizei height = mImageArray[0].getHeight();
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);
- D3DFORMAT d3dfmt = mImageArray[0].getD3DFormat();
- DWORD d3dusage = TextureStorage::GetTextureUsage(d3dfmt, mUsage, false);
+ GLenum internalformat = mImageArray[0].getInternalFormat();
delete mTexStorage;
- mTexStorage = new TextureStorage2D(levels, d3dfmt, d3dusage, width, height);
+ mTexStorage = new TextureStorage2D(levels, internalformat, mUsage, false, width, height);
if (mTexStorage->isManaged())
{
@@ -1032,10 +1028,9 @@
GLsizei width = mImageArray[0].getWidth();
GLsizei height = mImageArray[0].getHeight();
GLint levels = creationLevels(width, height);
- D3DFORMAT d3dfmt = mImageArray[0].getD3DFormat();
- DWORD d3dusage = TextureStorage::GetTextureUsage(d3dfmt, GL_FRAMEBUFFER_ATTACHMENT_ANGLE, true);
+ GLenum internalformat = mImageArray[0].getInternalFormat();
- newTexStorage = new TextureStorage2D(levels, d3dfmt, d3dusage, width, height);
+ newTexStorage = new TextureStorage2D(levels, internalformat, GL_FRAMEBUFFER_ATTACHMENT_ANGLE, true, width, height);
if (mTexStorage != NULL)
{
@@ -1464,20 +1459,19 @@
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()
{
GLsizei size = mImageArray[0][0].getWidth();
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);
- D3DFORMAT d3dfmt = mImageArray[0][0].getD3DFormat();
- DWORD d3dusage = TextureStorage::GetTextureUsage(d3dfmt, mUsage, false);
+ GLenum internalformat = mImageArray[0][0].getInternalFormat();
delete mTexStorage;
- mTexStorage = new TextureStorageCubeMap(levels, d3dfmt, d3dusage, size);
+ mTexStorage = new TextureStorageCubeMap(levels, internalformat, mUsage, false, size);
if (mTexStorage->isManaged())
{
@@ -1524,10 +1518,9 @@
{
GLsizei size = mImageArray[0][0].getWidth();
GLint levels = creationLevels(size);
- D3DFORMAT d3dfmt = mImageArray[0][0].getD3DFormat();
- DWORD d3dusage = TextureStorage::GetTextureUsage(d3dfmt, GL_FRAMEBUFFER_ATTACHMENT_ANGLE, true);
+ GLenum internalformat = mImageArray[0][0].getInternalFormat();
- newTexStorage = new TextureStorageCubeMap(levels, d3dfmt, d3dusage, size);
+ newTexStorage = new TextureStorageCubeMap(levels, internalformat, GL_FRAMEBUFFER_ATTACHMENT_ANGLE, true, size);
if (mTexStorage != NULL)
{
@@ -1707,11 +1700,8 @@
void TextureCubeMap::storage(GLsizei levels, GLenum internalformat, GLsizei size)
{
- D3DFORMAT d3dfmt = TextureStorage::ConvertTextureInternalFormat(internalformat);
- DWORD d3dusage = TextureStorage::GetTextureUsage(d3dfmt, mUsage, false);
-
delete mTexStorage;
- mTexStorage = new TextureStorageCubeMap(levels, d3dfmt, d3dusage, size);
+ mTexStorage = new TextureStorageCubeMap(levels, internalformat, mUsage, false, size);
mImmutable = true;
for (int level = 0; level < levels; level++)
diff --git a/src/libGLESv2/renderer/TextureStorage.cpp b/src/libGLESv2/renderer/TextureStorage.cpp
index 279355c..68c5e1f 100644
--- a/src/libGLESv2/renderer/TextureStorage.cpp
+++ b/src/libGLESv2/renderer/TextureStorage.cpp
@@ -157,8 +157,9 @@
mTexture = surfaceTexture;
}
-TextureStorage2D::TextureStorage2D(int levels, D3DFORMAT format, DWORD usage, int width, int height)
- : TextureStorage(usage), mRenderTargetSerial(RenderbufferStorage::issueSerial())
+TextureStorage2D::TextureStorage2D(int levels, GLenum internalformat, GLenum usage, bool forceRenderable, GLsizei width, GLsizei height)
+ : TextureStorage(GetTextureUsage(ConvertTextureInternalFormat(internalformat), usage, forceRenderable)),
+ mRenderTargetSerial(RenderbufferStorage::issueSerial())
{
mTexture = NULL;
// if the width or height is not positive this should be treated as an incomplete texture
@@ -166,8 +167,9 @@
if (width > 0 && height > 0)
{
IDirect3DDevice9 *device = getDisplay()->getRenderer()->getDevice(); // D3D9_REPLACE
- MakeValidSize(false, dx::IsCompressedFormat(format), &width, &height, &mLodOffset);
- HRESULT result = device->CreateTexture(width, height, levels ? levels + mLodOffset : 0, getUsage(), format, getPool(), &mTexture, NULL);
+ MakeValidSize(false, gl::IsCompressed(internalformat), &width, &height, &mLodOffset);
+ HRESULT result = device->CreateTexture(width, height, levels ? levels + mLodOffset : 0, getUsage(),
+ ConvertTextureInternalFormat(internalformat), getPool(), &mTexture, NULL);
if (FAILED(result))
{
@@ -216,8 +218,9 @@
return mRenderTargetSerial;
}
-TextureStorageCubeMap::TextureStorageCubeMap(int levels, D3DFORMAT format, DWORD usage, int size)
- : TextureStorage(usage), mFirstRenderTargetSerial(RenderbufferStorage::issueCubeSerials())
+TextureStorageCubeMap::TextureStorageCubeMap(int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size)
+ : TextureStorage(GetTextureUsage(ConvertTextureInternalFormat(internalformat), usage, forceRenderable)),
+ mFirstRenderTargetSerial(RenderbufferStorage::issueCubeSerials())
{
mTexture = NULL;
// if the size is not positive this should be treated as an incomplete texture
@@ -226,8 +229,9 @@
{
IDirect3DDevice9 *device = getDisplay()->getRenderer()->getDevice(); // D3D9_REPLACE
int height = size;
- MakeValidSize(false, dx::IsCompressedFormat(format), &size, &height, &mLodOffset);
- HRESULT result = device->CreateCubeTexture(size, levels ? levels + mLodOffset : 0, getUsage(), format, getPool(), &mTexture, NULL);
+ MakeValidSize(false, gl::IsCompressed(internalformat), &size, &height, &mLodOffset);
+ HRESULT result = device->CreateCubeTexture(size, levels ? levels + mLodOffset : 0, getUsage(),
+ ConvertTextureInternalFormat(internalformat), getPool(), &mTexture, NULL);
if (FAILED(result))
{
diff --git a/src/libGLESv2/renderer/TextureStorage.h b/src/libGLESv2/renderer/TextureStorage.h
index a91099f..bdcf3c5 100644
--- a/src/libGLESv2/renderer/TextureStorage.h
+++ b/src/libGLESv2/renderer/TextureStorage.h
@@ -58,7 +58,7 @@
{
public:
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();
@@ -77,7 +77,7 @@
class TextureStorageCubeMap : public TextureStorage
{
public:
- TextureStorageCubeMap(int levels, D3DFORMAT format, DWORD usage, int size);
+ TextureStorageCubeMap(int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size);
virtual ~TextureStorageCubeMap();