Implemented Renderer11::getFloat*TextureSupport.

TRAC #22502 Signed-off-by: Jamie Madill Signed-off-by: Nicolas Capens Author: Geoff Lang git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1878 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent 6d79257d
...@@ -251,6 +251,64 @@ EGLint Renderer11::initialize() ...@@ -251,6 +251,64 @@ EGLint Renderer11::initialize()
mBGRATextureSupport = (formatSupport & flags) == flags; mBGRATextureSupport = (formatSupport & flags) == flags;
} }
// Check floating point texture support
static const unsigned int requiredTextureFlags = D3D11_FORMAT_SUPPORT_TEXTURE2D | D3D11_FORMAT_SUPPORT_TEXTURECUBE;
static const unsigned int requiredRenderableFlags = D3D11_FORMAT_SUPPORT_RENDER_TARGET;
static const unsigned int requiredFilterFlags = D3D11_FORMAT_SUPPORT_SHADER_SAMPLE;
DXGI_FORMAT float16Formats[] =
{
DXGI_FORMAT_R16_FLOAT,
DXGI_FORMAT_R16G16_FLOAT,
DXGI_FORMAT_R16G16B16A16_FLOAT,
};
DXGI_FORMAT float32Formats[] =
{
DXGI_FORMAT_R32_FLOAT,
DXGI_FORMAT_R32G32_FLOAT,
DXGI_FORMAT_R32G32B32_FLOAT,
DXGI_FORMAT_R32G32B32A32_FLOAT,
};
mFloat16TextureSupport = true;
mFloat16FilterSupport = true;
mFloat16RenderSupport = true;
for (unsigned int i = 0; i < ArraySize(float16Formats); i++)
{
if (SUCCEEDED(mDevice->CheckFormatSupport(float16Formats[i], &formatSupport)))
{
mFloat16TextureSupport = mFloat16TextureSupport && (formatSupport & requiredTextureFlags) == requiredTextureFlags;
mFloat16FilterSupport = mFloat16FilterSupport && (formatSupport & requiredFilterFlags) == requiredFilterFlags;
mFloat16RenderSupport = mFloat16RenderSupport && (formatSupport & requiredRenderableFlags) == requiredRenderableFlags;
}
else
{
mFloat16TextureSupport = false;
mFloat16RenderSupport = false;
mFloat16FilterSupport = false;
}
}
mFloat32TextureSupport = true;
mFloat32FilterSupport = true;
mFloat32RenderSupport = true;
for (unsigned int i = 0; i < ArraySize(float32Formats); i++)
{
if (SUCCEEDED(mDevice->CheckFormatSupport(float32Formats[i], &formatSupport)))
{
mFloat32TextureSupport = mFloat32TextureSupport && (formatSupport & requiredTextureFlags) == requiredTextureFlags;
mFloat32FilterSupport = mFloat32FilterSupport && (formatSupport & requiredFilterFlags) == requiredFilterFlags;
mFloat32RenderSupport = mFloat32RenderSupport && (formatSupport & requiredRenderableFlags) == requiredRenderableFlags;
}
else
{
mFloat32TextureSupport = false;
mFloat32FilterSupport = false;
mFloat32RenderSupport = false;
}
}
return EGL_SUCCESS; return EGL_SUCCESS;
} }
...@@ -1979,22 +2037,16 @@ bool Renderer11::getDepthTextureSupport() const ...@@ -1979,22 +2037,16 @@ bool Renderer11::getDepthTextureSupport() const
bool Renderer11::getFloat32TextureSupport(bool *filtering, bool *renderable) bool Renderer11::getFloat32TextureSupport(bool *filtering, bool *renderable)
{ {
// TODO *renderable = mFloat32RenderSupport;
// UNIMPLEMENTED(); *filtering = mFloat32FilterSupport;
return mFloat32TextureSupport;
*filtering = false;
*renderable = false;
return false;
} }
bool Renderer11::getFloat16TextureSupport(bool *filtering, bool *renderable) bool Renderer11::getFloat16TextureSupport(bool *filtering, bool *renderable)
{ {
// TODO *renderable = mFloat16RenderSupport;
// UNIMPLEMENTED(); *filtering = mFloat16FilterSupport;
return mFloat16TextureSupport;
*filtering = false;
*renderable = false;
return false;
} }
bool Renderer11::getLuminanceTextureSupport() bool Renderer11::getLuminanceTextureSupport()
......
...@@ -214,6 +214,15 @@ class Renderer11 : public Renderer ...@@ -214,6 +214,15 @@ class Renderer11 : public Renderer
RenderStateCache mStateCache; RenderStateCache mStateCache;
// Support flags
bool mFloat16TextureSupport;
bool mFloat16FilterSupport;
bool mFloat16RenderSupport;
bool mFloat32TextureSupport;
bool mFloat32FilterSupport;
bool mFloat32RenderSupport;
// Multisample format support // Multisample format support
struct MultisampleSupportInfo struct MultisampleSupportInfo
{ {
......
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