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() ...@@ -839,7 +839,7 @@ 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));
} }
bool Display::getFloatTextureSupport(bool *filtering, bool *renderable) bool Display::getFloat32TextureSupport(bool *filtering, bool *renderable)
{ {
D3DDISPLAYMODE currentDisplayMode; D3DDISPLAYMODE currentDisplayMode;
mD3d9->GetAdapterDisplayMode(mAdapter, &currentDisplayMode); mD3d9->GetAdapterDisplayMode(mAdapter, &currentDisplayMode);
...@@ -867,7 +867,7 @@ bool Display::getFloatTextureSupport(bool *filtering, bool *renderable) ...@@ -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; D3DDISPLAYMODE currentDisplayMode;
mD3d9->GetAdapterDisplayMode(mAdapter, &currentDisplayMode); mD3d9->GetAdapterDisplayMode(mAdapter, &currentDisplayMode);
......
...@@ -67,8 +67,8 @@ class Display ...@@ -67,8 +67,8 @@ class Display
virtual bool getDXT3TextureSupport(); virtual bool getDXT3TextureSupport();
virtual bool getDXT5TextureSupport(); virtual bool getDXT5TextureSupport();
virtual bool getEventQuerySupport(); virtual bool getEventQuerySupport();
virtual bool getFloatTextureSupport(bool *filtering, bool *renderable); virtual bool getFloat32TextureSupport(bool *filtering, bool *renderable);
virtual bool getHalfFloatTextureSupport(bool *filtering, bool *renderable); virtual bool getFloat16TextureSupport(bool *filtering, bool *renderable);
virtual bool getLuminanceTextureSupport(); virtual bool getLuminanceTextureSupport();
virtual bool getLuminanceAlphaTextureSupport(); virtual bool getLuminanceAlphaTextureSupport();
virtual bool getVertexTextureSupport() const; virtual bool getVertexTextureSupport() const;
......
...@@ -290,8 +290,8 @@ void Context::makeCurrent(egl::Display *display, egl::Surface *surface) ...@@ -290,8 +290,8 @@ void Context::makeCurrent(egl::Display *display, egl::Surface *surface)
mSupportsDXT1Textures = mDisplay->getDXT1TextureSupport(); mSupportsDXT1Textures = mDisplay->getDXT1TextureSupport();
mSupportsDXT3Textures = mDisplay->getDXT3TextureSupport(); mSupportsDXT3Textures = mDisplay->getDXT3TextureSupport();
mSupportsDXT5Textures = mDisplay->getDXT5TextureSupport(); mSupportsDXT5Textures = mDisplay->getDXT5TextureSupport();
mSupportsFloatTextures = mDisplay->getFloatTextureSupport(&mSupportsFloatLinearFilter, &mSupportsFloatRenderableTextures); mSupportsFloat32Textures = mDisplay->getFloat32TextureSupport(&mSupportsFloat32LinearFilter, &mSupportsFloat32RenderableTextures);
mSupportsHalfFloatTextures = mDisplay->getHalfFloatTextureSupport(&mSupportsHalfFloatLinearFilter, &mSupportsHalfFloatRenderableTextures); mSupportsFloat16Textures = mDisplay->getFloat16TextureSupport(&mSupportsFloat16LinearFilter, &mSupportsFloat16RenderableTextures);
mSupportsLuminanceTextures = mDisplay->getLuminanceTextureSupport(); mSupportsLuminanceTextures = mDisplay->getLuminanceTextureSupport();
mSupportsLuminanceAlphaTextures = mDisplay->getLuminanceAlphaTextureSupport(); mSupportsLuminanceAlphaTextures = mDisplay->getLuminanceAlphaTextureSupport();
...@@ -3068,34 +3068,34 @@ bool Context::supportsDXT5Textures() const ...@@ -3068,34 +3068,34 @@ bool Context::supportsDXT5Textures() const
return mSupportsDXT5Textures; 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 int Context::getMaximumRenderbufferDimension() const
...@@ -3344,19 +3344,19 @@ void Context::initExtensionString() ...@@ -3344,19 +3344,19 @@ void Context::initExtensionString()
mExtensionString += "GL_OES_rgb8_rgba8 "; mExtensionString += "GL_OES_rgb8_rgba8 ";
mExtensionString += "GL_OES_standard_derivatives "; mExtensionString += "GL_OES_standard_derivatives ";
if (supportsHalfFloatTextures()) if (supportsFloat16Textures())
{ {
mExtensionString += "GL_OES_texture_half_float "; mExtensionString += "GL_OES_texture_half_float ";
} }
if (supportsHalfFloatLinearFilter()) if (supportsFloat16LinearFilter())
{ {
mExtensionString += "GL_OES_texture_half_float_linear "; mExtensionString += "GL_OES_texture_half_float_linear ";
} }
if (supportsFloatTextures()) if (supportsFloat32Textures())
{ {
mExtensionString += "GL_OES_texture_float "; mExtensionString += "GL_OES_texture_float ";
} }
if (supportsFloatLinearFilter()) if (supportsFloat32LinearFilter())
{ {
mExtensionString += "GL_OES_texture_float_linear "; mExtensionString += "GL_OES_texture_float_linear ";
} }
......
...@@ -452,12 +452,12 @@ class Context ...@@ -452,12 +452,12 @@ class Context
bool supportsDXT1Textures() const; bool supportsDXT1Textures() const;
bool supportsDXT3Textures() const; bool supportsDXT3Textures() const;
bool supportsDXT5Textures() const; bool supportsDXT5Textures() const;
bool supportsFloatTextures() const; bool supportsFloat32Textures() const;
bool supportsFloatLinearFilter() const; bool supportsFloat32LinearFilter() const;
bool supportsFloatRenderableTextures() const; bool supportsFloat32RenderableTextures() const;
bool supportsHalfFloatTextures() const; bool supportsFloat16Textures() const;
bool supportsHalfFloatLinearFilter() const; bool supportsFloat16LinearFilter() const;
bool supportsHalfFloatRenderableTextures() const; bool supportsFloat16RenderableTextures() const;
bool supportsLuminanceTextures() const; bool supportsLuminanceTextures() const;
bool supportsLuminanceAlphaTextures() const; bool supportsLuminanceAlphaTextures() const;
bool supports32bitIndices() const; bool supports32bitIndices() const;
...@@ -562,12 +562,12 @@ class Context ...@@ -562,12 +562,12 @@ class Context
bool mSupportsDXT1Textures; bool mSupportsDXT1Textures;
bool mSupportsDXT3Textures; bool mSupportsDXT3Textures;
bool mSupportsDXT5Textures; bool mSupportsDXT5Textures;
bool mSupportsFloatTextures; bool mSupportsFloat32Textures;
bool mSupportsFloatLinearFilter; bool mSupportsFloat32LinearFilter;
bool mSupportsFloatRenderableTextures; bool mSupportsFloat32RenderableTextures;
bool mSupportsHalfFloatTextures; bool mSupportsFloat16Textures;
bool mSupportsHalfFloatLinearFilter; bool mSupportsFloat16LinearFilter;
bool mSupportsHalfFloatRenderableTextures; bool mSupportsFloat16RenderableTextures;
bool mSupportsLuminanceTextures; bool mSupportsLuminanceTextures;
bool mSupportsLuminanceAlphaTextures; bool mSupportsLuminanceAlphaTextures;
bool mSupports32bitIndices; bool mSupports32bitIndices;
......
...@@ -296,8 +296,8 @@ GLenum Framebuffer::completeness() ...@@ -296,8 +296,8 @@ GLenum Framebuffer::completeness()
return GL_FRAMEBUFFER_UNSUPPORTED; return GL_FRAMEBUFFER_UNSUPPORTED;
} }
if ((colorbuffer->getType() == GL_FLOAT && !getContext()->supportsFloatRenderableTextures()) || if ((colorbuffer->getType() == GL_FLOAT && !getContext()->supportsFloat32RenderableTextures()) ||
(colorbuffer->getType() == GL_HALF_FLOAT_OES && !getContext()->supportsHalfFloatRenderableTextures())) (colorbuffer->getType() == GL_HALF_FLOAT_OES && !getContext()->supportsFloat16RenderableTextures()))
{ {
return GL_FRAMEBUFFER_UNSUPPORTED; return GL_FRAMEBUFFER_UNSUPPORTED;
} }
......
...@@ -1821,8 +1821,8 @@ bool Texture2D::isComplete() const ...@@ -1821,8 +1821,8 @@ bool Texture2D::isComplete() const
default: UNREACHABLE(); default: UNREACHABLE();
} }
if ((getInternalFormat() == GL_FLOAT && !getContext()->supportsFloatLinearFilter()) || if ((getInternalFormat() == GL_FLOAT && !getContext()->supportsFloat32LinearFilter()) ||
(getInternalFormat() == GL_HALF_FLOAT_OES && !getContext()->supportsHalfFloatLinearFilter())) (getInternalFormat() == GL_HALF_FLOAT_OES && !getContext()->supportsFloat16LinearFilter()))
{ {
if (mMagFilter != GL_NEAREST || (mMinFilter != GL_NEAREST && mMinFilter != GL_NEAREST_MIPMAP_NEAREST)) if (mMagFilter != GL_NEAREST || (mMinFilter != GL_NEAREST && mMinFilter != GL_NEAREST_MIPMAP_NEAREST))
{ {
...@@ -2272,8 +2272,8 @@ bool TextureCubeMap::isComplete() const ...@@ -2272,8 +2272,8 @@ bool TextureCubeMap::isComplete() const
} }
} }
if ((getInternalFormat() == GL_FLOAT && !getContext()->supportsFloatLinearFilter()) || if ((getInternalFormat() == GL_FLOAT && !getContext()->supportsFloat32LinearFilter()) ||
(getInternalFormat() == GL_HALF_FLOAT_OES && !getContext()->supportsHalfFloatLinearFilter())) (getInternalFormat() == GL_HALF_FLOAT_OES && !getContext()->supportsFloat16LinearFilter()))
{ {
if (mMagFilter != GL_NEAREST || (mMinFilter != GL_NEAREST && mMinFilter != GL_NEAREST_MIPMAP_NEAREST)) 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 ...@@ -4648,14 +4648,14 @@ void __stdcall glTexImage2D(GLenum target, GLint level, GLint internalformat, GL
if (type == GL_FLOAT) if (type == GL_FLOAT)
{ {
if (!context->supportsFloatTextures()) if (!context->supportsFloat32Textures())
{ {
return error(GL_INVALID_ENUM); return error(GL_INVALID_ENUM);
} }
} }
else if (type == GL_HALF_FLOAT_OES) else if (type == GL_HALF_FLOAT_OES)
{ {
if (!context->supportsHalfFloatTextures()) if (!context->supportsFloat16Textures())
{ {
return error(GL_INVALID_ENUM); return error(GL_INVALID_ENUM);
} }
...@@ -4834,14 +4834,14 @@ void __stdcall glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint ...@@ -4834,14 +4834,14 @@ void __stdcall glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint
if (format == GL_FLOAT) if (format == GL_FLOAT)
{ {
if (!context->supportsFloatTextures()) if (!context->supportsFloat32Textures())
{ {
return error(GL_INVALID_ENUM); return error(GL_INVALID_ENUM);
} }
} }
else if (format == GL_HALF_FLOAT_OES) else if (format == GL_HALF_FLOAT_OES)
{ {
if (!context->supportsHalfFloatTextures()) if (!context->supportsFloat16Textures())
{ {
return error(GL_INVALID_ENUM); return error(GL_INVALID_ENUM);
} }
......
...@@ -853,6 +853,50 @@ unsigned int GetDepthSize(D3DFORMAT depthFormat) ...@@ -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) GLsizei GetSamplesFromMultisampleType(D3DMULTISAMPLE_TYPE type)
{ {
if (type == D3DMULTISAMPLE_NONMASKABLE) if (type == D3DMULTISAMPLE_NONMASKABLE)
......
...@@ -74,6 +74,8 @@ GLuint GetGreenSize(D3DFORMAT colorFormat); ...@@ -74,6 +74,8 @@ GLuint GetGreenSize(D3DFORMAT colorFormat);
GLuint GetBlueSize(D3DFORMAT colorFormat); GLuint GetBlueSize(D3DFORMAT colorFormat);
GLuint GetDepthSize(D3DFORMAT depthFormat); GLuint GetDepthSize(D3DFORMAT depthFormat);
GLuint GetStencilSize(D3DFORMAT stencilFormat); GLuint GetStencilSize(D3DFORMAT stencilFormat);
bool IsFloat32Format(D3DFORMAT surfaceFormat);
bool IsFloat16Format(D3DFORMAT surfaceFormat);
GLsizei GetSamplesFromMultisampleType(D3DMULTISAMPLE_TYPE type); 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