Be more explicit about floating-point format support.

TRAC #16284 Signed-off-by: Daniel Koch Author: Nicolas Capens git-svn-id: https://angleproject.googlecode.com/svn/trunk@839 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent c1fde76c
......@@ -839,7 +839,7 @@ bool Display::getDXT5TextureSupport()
return SUCCEEDED(mD3d9->CheckDeviceFormat(mAdapter, mDeviceType, currentDisplayMode.Format, 0, D3DRTYPE_TEXTURE, D3DFMT_DXT5));
}
bool Display::getFloatTextureSupport(bool *filtering, bool *renderable)
bool Display::getFloat32TextureSupport(bool *filtering, bool *renderable)
{
D3DDISPLAYMODE currentDisplayMode;
mD3d9->GetAdapterDisplayMode(mAdapter, &currentDisplayMode);
......@@ -867,7 +867,7 @@ bool Display::getFloatTextureSupport(bool *filtering, bool *renderable)
}
}
bool Display::getHalfFloatTextureSupport(bool *filtering, bool *renderable)
bool Display::getFloat16TextureSupport(bool *filtering, bool *renderable)
{
D3DDISPLAYMODE currentDisplayMode;
mD3d9->GetAdapterDisplayMode(mAdapter, &currentDisplayMode);
......
......@@ -67,8 +67,8 @@ class Display
virtual bool getDXT3TextureSupport();
virtual bool getDXT5TextureSupport();
virtual bool getEventQuerySupport();
virtual bool getFloatTextureSupport(bool *filtering, bool *renderable);
virtual bool getHalfFloatTextureSupport(bool *filtering, bool *renderable);
virtual bool getFloat32TextureSupport(bool *filtering, bool *renderable);
virtual bool getFloat16TextureSupport(bool *filtering, bool *renderable);
virtual bool getLuminanceTextureSupport();
virtual bool getLuminanceAlphaTextureSupport();
virtual bool getVertexTextureSupport() const;
......
......@@ -290,8 +290,8 @@ void Context::makeCurrent(egl::Display *display, egl::Surface *surface)
mSupportsDXT1Textures = mDisplay->getDXT1TextureSupport();
mSupportsDXT3Textures = mDisplay->getDXT3TextureSupport();
mSupportsDXT5Textures = mDisplay->getDXT5TextureSupport();
mSupportsFloatTextures = mDisplay->getFloatTextureSupport(&mSupportsFloatLinearFilter, &mSupportsFloatRenderableTextures);
mSupportsHalfFloatTextures = mDisplay->getHalfFloatTextureSupport(&mSupportsHalfFloatLinearFilter, &mSupportsHalfFloatRenderableTextures);
mSupportsFloat32Textures = mDisplay->getFloat32TextureSupport(&mSupportsFloat32LinearFilter, &mSupportsFloat32RenderableTextures);
mSupportsFloat16Textures = mDisplay->getFloat16TextureSupport(&mSupportsFloat16LinearFilter, &mSupportsFloat16RenderableTextures);
mSupportsLuminanceTextures = mDisplay->getLuminanceTextureSupport();
mSupportsLuminanceAlphaTextures = mDisplay->getLuminanceAlphaTextureSupport();
......@@ -3068,34 +3068,34 @@ bool Context::supportsDXT5Textures() const
return mSupportsDXT5Textures;
}
bool Context::supportsFloatTextures() const
bool Context::supportsFloat32Textures() const
{
return mSupportsFloatTextures;
return mSupportsFloat32Textures;
}
bool Context::supportsFloatLinearFilter() const
bool Context::supportsFloat32LinearFilter() const
{
return mSupportsFloatLinearFilter;
return mSupportsFloat32LinearFilter;
}
bool Context::supportsFloatRenderableTextures() const
bool Context::supportsFloat32RenderableTextures() const
{
return mSupportsFloatRenderableTextures;
return mSupportsFloat32RenderableTextures;
}
bool Context::supportsHalfFloatTextures() const
bool Context::supportsFloat16Textures() const
{
return mSupportsHalfFloatTextures;
return mSupportsFloat16Textures;
}
bool Context::supportsHalfFloatLinearFilter() const
bool Context::supportsFloat16LinearFilter() const
{
return mSupportsHalfFloatLinearFilter;
return mSupportsFloat16LinearFilter;
}
bool Context::supportsHalfFloatRenderableTextures() const
bool Context::supportsFloat16RenderableTextures() const
{
return mSupportsHalfFloatRenderableTextures;
return mSupportsFloat16RenderableTextures;
}
int Context::getMaximumRenderbufferDimension() const
......@@ -3344,19 +3344,19 @@ void Context::initExtensionString()
mExtensionString += "GL_OES_rgb8_rgba8 ";
mExtensionString += "GL_OES_standard_derivatives ";
if (supportsHalfFloatTextures())
if (supportsFloat16Textures())
{
mExtensionString += "GL_OES_texture_half_float ";
}
if (supportsHalfFloatLinearFilter())
if (supportsFloat16LinearFilter())
{
mExtensionString += "GL_OES_texture_half_float_linear ";
}
if (supportsFloatTextures())
if (supportsFloat32Textures())
{
mExtensionString += "GL_OES_texture_float ";
}
if (supportsFloatLinearFilter())
if (supportsFloat32LinearFilter())
{
mExtensionString += "GL_OES_texture_float_linear ";
}
......
......@@ -452,12 +452,12 @@ class Context
bool supportsDXT1Textures() const;
bool supportsDXT3Textures() const;
bool supportsDXT5Textures() const;
bool supportsFloatTextures() const;
bool supportsFloatLinearFilter() const;
bool supportsFloatRenderableTextures() const;
bool supportsHalfFloatTextures() const;
bool supportsHalfFloatLinearFilter() const;
bool supportsHalfFloatRenderableTextures() const;
bool supportsFloat32Textures() const;
bool supportsFloat32LinearFilter() const;
bool supportsFloat32RenderableTextures() const;
bool supportsFloat16Textures() const;
bool supportsFloat16LinearFilter() const;
bool supportsFloat16RenderableTextures() const;
bool supportsLuminanceTextures() const;
bool supportsLuminanceAlphaTextures() const;
bool supports32bitIndices() const;
......@@ -562,12 +562,12 @@ class Context
bool mSupportsDXT1Textures;
bool mSupportsDXT3Textures;
bool mSupportsDXT5Textures;
bool mSupportsFloatTextures;
bool mSupportsFloatLinearFilter;
bool mSupportsFloatRenderableTextures;
bool mSupportsHalfFloatTextures;
bool mSupportsHalfFloatLinearFilter;
bool mSupportsHalfFloatRenderableTextures;
bool mSupportsFloat32Textures;
bool mSupportsFloat32LinearFilter;
bool mSupportsFloat32RenderableTextures;
bool mSupportsFloat16Textures;
bool mSupportsFloat16LinearFilter;
bool mSupportsFloat16RenderableTextures;
bool mSupportsLuminanceTextures;
bool mSupportsLuminanceAlphaTextures;
bool mSupports32bitIndices;
......
......@@ -296,8 +296,8 @@ GLenum Framebuffer::completeness()
return GL_FRAMEBUFFER_UNSUPPORTED;
}
if ((colorbuffer->getType() == GL_FLOAT && !getContext()->supportsFloatRenderableTextures()) ||
(colorbuffer->getType() == GL_HALF_FLOAT_OES && !getContext()->supportsHalfFloatRenderableTextures()))
if ((colorbuffer->getType() == GL_FLOAT && !getContext()->supportsFloat32RenderableTextures()) ||
(colorbuffer->getType() == GL_HALF_FLOAT_OES && !getContext()->supportsFloat16RenderableTextures()))
{
return GL_FRAMEBUFFER_UNSUPPORTED;
}
......
......@@ -1821,8 +1821,8 @@ bool Texture2D::isComplete() const
default: UNREACHABLE();
}
if ((getInternalFormat() == GL_FLOAT && !getContext()->supportsFloatLinearFilter()) ||
(getInternalFormat() == GL_HALF_FLOAT_OES && !getContext()->supportsHalfFloatLinearFilter()))
if ((getInternalFormat() == GL_FLOAT && !getContext()->supportsFloat32LinearFilter()) ||
(getInternalFormat() == GL_HALF_FLOAT_OES && !getContext()->supportsFloat16LinearFilter()))
{
if (mMagFilter != GL_NEAREST || (mMinFilter != GL_NEAREST && mMinFilter != GL_NEAREST_MIPMAP_NEAREST))
{
......@@ -2272,8 +2272,8 @@ bool TextureCubeMap::isComplete() const
}
}
if ((getInternalFormat() == GL_FLOAT && !getContext()->supportsFloatLinearFilter()) ||
(getInternalFormat() == GL_HALF_FLOAT_OES && !getContext()->supportsHalfFloatLinearFilter()))
if ((getInternalFormat() == GL_FLOAT && !getContext()->supportsFloat32LinearFilter()) ||
(getInternalFormat() == GL_HALF_FLOAT_OES && !getContext()->supportsFloat16LinearFilter()))
{
if (mMagFilter != GL_NEAREST || (mMinFilter != GL_NEAREST && mMinFilter != GL_NEAREST_MIPMAP_NEAREST))
{
......
......@@ -4648,14 +4648,14 @@ void __stdcall glTexImage2D(GLenum target, GLint level, GLint internalformat, GL
if (type == GL_FLOAT)
{
if (!context->supportsFloatTextures())
if (!context->supportsFloat32Textures())
{
return error(GL_INVALID_ENUM);
}
}
else if (type == GL_HALF_FLOAT_OES)
{
if (!context->supportsHalfFloatTextures())
if (!context->supportsFloat16Textures())
{
return error(GL_INVALID_ENUM);
}
......@@ -4834,14 +4834,14 @@ void __stdcall glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint
if (format == GL_FLOAT)
{
if (!context->supportsFloatTextures())
if (!context->supportsFloat32Textures())
{
return error(GL_INVALID_ENUM);
}
}
else if (format == GL_HALF_FLOAT_OES)
{
if (!context->supportsHalfFloatTextures())
if (!context->supportsFloat16Textures())
{
return error(GL_INVALID_ENUM);
}
......
......@@ -853,6 +853,50 @@ unsigned int GetDepthSize(D3DFORMAT depthFormat)
}
}
bool IsFloat32Format(D3DFORMAT surfaceFormat)
{
switch(surfaceFormat)
{
case D3DFMT_R16F:
case D3DFMT_G16R16F:
case D3DFMT_A16B16G16R16F:
return false;
case D3DFMT_R32F:
case D3DFMT_G32R32F:
case D3DFMT_A32B32G32R32F:
return true;
case D3DFMT_A8R8G8B8:
case D3DFMT_X8R8G8B8:
case D3DFMT_A1R5G5B5:
case D3DFMT_R5G6B5:
return false;
default: UNREACHABLE();
}
return false;
}
bool IsFloat16Format(D3DFORMAT surfaceFormat)
{
switch(surfaceFormat)
{
case D3DFMT_R16F:
case D3DFMT_G16R16F:
case D3DFMT_A16B16G16R16F:
return true;
case D3DFMT_R32F:
case D3DFMT_G32R32F:
case D3DFMT_A32B32G32R32F:
return false;
case D3DFMT_A8R8G8B8:
case D3DFMT_X8R8G8B8:
case D3DFMT_A1R5G5B5:
case D3DFMT_R5G6B5:
return false;
default: UNREACHABLE();
}
return false;
}
GLsizei GetSamplesFromMultisampleType(D3DMULTISAMPLE_TYPE type)
{
if (type == D3DMULTISAMPLE_NONMASKABLE)
......
......@@ -74,6 +74,8 @@ GLuint GetGreenSize(D3DFORMAT colorFormat);
GLuint GetBlueSize(D3DFORMAT colorFormat);
GLuint GetDepthSize(D3DFORMAT depthFormat);
GLuint GetStencilSize(D3DFORMAT stencilFormat);
bool IsFloat32Format(D3DFORMAT surfaceFormat);
bool IsFloat16Format(D3DFORMAT surfaceFormat);
GLsizei GetSamplesFromMultisampleType(D3DMULTISAMPLE_TYPE type);
......
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