Detect depth texture support using INTZ and NULL textures

Trac #20875 Signed-off-by: Nicolas Capens git-svn-id: https://angleproject.googlecode.com/svn/trunk@1103 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent d2cccf7a
...@@ -992,6 +992,22 @@ bool Display::getDXT5TextureSupport() ...@@ -992,6 +992,22 @@ bool Display::getDXT5TextureSupport()
return SUCCEEDED(mD3d9->CheckDeviceFormat(mAdapter, mDeviceType, currentDisplayMode.Format, 0, D3DRTYPE_TEXTURE, D3DFMT_DXT5)); return SUCCEEDED(mD3d9->CheckDeviceFormat(mAdapter, mDeviceType, currentDisplayMode.Format, 0, D3DRTYPE_TEXTURE, D3DFMT_DXT5));
} }
// we use INTZ for depth textures in Direct3D9
// we also want NULL texture support to ensure the we can make depth-only FBOs
// see http://aras-p.info/texts/D3D9GPUHacks.html
bool Display::getDepthTextureSupport() const
{
D3DDISPLAYMODE currentDisplayMode;
mD3d9->GetAdapterDisplayMode(mAdapter, &currentDisplayMode);
bool intz = SUCCEEDED(mD3d9->CheckDeviceFormat(mAdapter, mDeviceType, currentDisplayMode.Format,
D3DUSAGE_DEPTHSTENCIL, D3DRTYPE_TEXTURE, D3DFMT_INTZ));
bool null = SUCCEEDED(mD3d9->CheckDeviceFormat(mAdapter, mDeviceType, currentDisplayMode.Format,
D3DUSAGE_RENDERTARGET, D3DRTYPE_SURFACE, D3DFMT_NULL));
return intz && null;
}
bool Display::getFloat32TextureSupport(bool *filtering, bool *renderable) bool Display::getFloat32TextureSupport(bool *filtering, bool *renderable)
{ {
D3DDISPLAYMODE currentDisplayMode; D3DDISPLAYMODE currentDisplayMode;
......
...@@ -78,6 +78,7 @@ class Display ...@@ -78,6 +78,7 @@ class Display
virtual bool getLuminanceAlphaTextureSupport(); virtual bool getLuminanceAlphaTextureSupport();
virtual bool getVertexTextureSupport() const; virtual bool getVertexTextureSupport() const;
virtual bool getNonPower2TextureSupport() const; virtual bool getNonPower2TextureSupport() const;
virtual bool getDepthTextureSupport() const;
virtual bool getOcclusionQuerySupport() const; virtual bool getOcclusionQuerySupport() const;
virtual bool getInstancingSupport() const; virtual bool getInstancingSupport() const;
virtual D3DPOOL getBufferPool(DWORD usage) const; virtual D3DPOOL getBufferPool(DWORD usage) const;
......
...@@ -310,6 +310,7 @@ void Context::makeCurrent(egl::Display *display, egl::Surface *surface) ...@@ -310,6 +310,7 @@ void Context::makeCurrent(egl::Display *display, egl::Surface *surface)
mSupportsFloat16Textures = mDisplay->getFloat16TextureSupport(&mSupportsFloat16LinearFilter, &mSupportsFloat16RenderableTextures); mSupportsFloat16Textures = mDisplay->getFloat16TextureSupport(&mSupportsFloat16LinearFilter, &mSupportsFloat16RenderableTextures);
mSupportsLuminanceTextures = mDisplay->getLuminanceTextureSupport(); mSupportsLuminanceTextures = mDisplay->getLuminanceTextureSupport();
mSupportsLuminanceAlphaTextures = mDisplay->getLuminanceAlphaTextureSupport(); mSupportsLuminanceAlphaTextures = mDisplay->getLuminanceAlphaTextureSupport();
mSupportsDepthTextures = mDisplay->getDepthTextureSupport();
mSupports32bitIndices = mDeviceCaps.MaxVertexIndex >= (1 << 16); mSupports32bitIndices = mDeviceCaps.MaxVertexIndex >= (1 << 16);
...@@ -3458,6 +3459,11 @@ bool Context::supportsLuminanceAlphaTextures() const ...@@ -3458,6 +3459,11 @@ bool Context::supportsLuminanceAlphaTextures() const
return mSupportsLuminanceAlphaTextures; return mSupportsLuminanceAlphaTextures;
} }
bool Context::supportsDepthTextures() const
{
return mSupportsDepthTextures;
}
bool Context::supports32bitIndices() const bool Context::supports32bitIndices() const
{ {
return mSupports32bitIndices; return mSupports32bitIndices;
......
...@@ -496,6 +496,7 @@ class Context ...@@ -496,6 +496,7 @@ class Context
bool supportsFloat16RenderableTextures() const; bool supportsFloat16RenderableTextures() const;
bool supportsLuminanceTextures() const; bool supportsLuminanceTextures() const;
bool supportsLuminanceAlphaTextures() const; bool supportsLuminanceAlphaTextures() const;
bool supportsDepthTextures() const;
bool supports32bitIndices() const; bool supports32bitIndices() const;
bool supportsNonPower2Texture() const; bool supportsNonPower2Texture() const;
bool supportsInstancing() const; bool supportsInstancing() const;
...@@ -618,6 +619,7 @@ class Context ...@@ -618,6 +619,7 @@ class Context
bool mSupportsFloat16RenderableTextures; bool mSupportsFloat16RenderableTextures;
bool mSupportsLuminanceTextures; bool mSupportsLuminanceTextures;
bool mSupportsLuminanceAlphaTextures; bool mSupportsLuminanceAlphaTextures;
bool mSupportsDepthTextures;
bool mSupports32bitIndices; bool mSupports32bitIndices;
int mNumCompressedTextureFormats; int mNumCompressedTextureFormats;
......
...@@ -16,6 +16,9 @@ ...@@ -16,6 +16,9 @@
#include <string> #include <string>
const D3DFORMAT D3DFMT_INTZ = ((D3DFORMAT)(MAKEFOURCC('I','N','T','Z')));
const D3DFORMAT D3DFMT_NULL = ((D3DFORMAT)(MAKEFOURCC('N','U','L','L')));
namespace gl namespace gl
{ {
......
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