diff options
author | Ben Murdoch <benm@google.com> | 2014-09-26 13:12:32 +0100 |
---|---|---|
committer | Ben Murdoch <benm@google.com> | 2014-09-26 13:12:32 +0100 |
commit | f682e5933bcdff5955289e0cab66a8c59f9526e4 (patch) | |
tree | 7a03695c07926846857204a162a325782e7352d1 | |
parent | 7279bdb042e129dda9d23ce826b5e8424c312561 (diff) | |
parent | b5af678b07f7424b41d5045a4dcde1c7cccbaa8b (diff) | |
download | angle-f682e5933bcdff5955289e0cab66a8c59f9526e4.tar.gz |
Merge third_party/angle from https://chromium.googlesource.com/angle/angle.git at b5af678b07f7424b41d5045a4dcde1c7cccbaa8b
This commit was generated by merge_from_chromium.py.
Change-Id: I303a5d565350c182710c435e520aceffa6f560ab
-rw-r--r-- | src/libGLESv2/renderer/d3d/d3d9/formatutils9.cpp | 11 | ||||
-rw-r--r-- | tests/angle_tests/DepthStencilFormatsTest.cpp | 96 |
2 files changed, 106 insertions, 1 deletions
diff --git a/src/libGLESv2/renderer/d3d/d3d9/formatutils9.cpp b/src/libGLESv2/renderer/d3d/d3d9/formatutils9.cpp index 8e13b2e5..e90bb904 100644 --- a/src/libGLESv2/renderer/d3d/d3d9/formatutils9.cpp +++ b/src/libGLESv2/renderer/d3d/d3d9/formatutils9.cpp @@ -223,8 +223,17 @@ static D3D9FormatMap BuildD3D9FormatMap() // | Internal format | Texture format | Render format | Load function | InsertD3D9FormatInfo(&map, GL_NONE, D3DFMT_NULL, D3DFMT_NULL, UnreachableLoad ); + // We choose to downsample the GL_DEPTH_COMPONENT32_OES format to a 24-bit format because D3DFMT_D32 is not widely + // supported. We're allowed to do this because: + // - The ES spec 2.0.25 sec 3.7.1 states that we're allowed to store texture formats with internal format + // resolutions of our own choosing. + // - OES_depth_texture states that downsampling of the depth formats is allowed. + // - ANGLE_depth_texture does not state minimum required resolutions of the depth texture formats it + // introduces. + // In ES3 however, there are minimum resolutions for the texture formats and this would not be allowed. + InsertD3D9FormatInfo(&map, GL_DEPTH_COMPONENT16, D3DFMT_INTZ, D3DFMT_D24S8, UnreachableLoad ); - InsertD3D9FormatInfo(&map, GL_DEPTH_COMPONENT32_OES, D3DFMT_INTZ, D3DFMT_D32, UnreachableLoad ); + InsertD3D9FormatInfo(&map, GL_DEPTH_COMPONENT32_OES, D3DFMT_INTZ, D3DFMT_D24X8, UnreachableLoad ); InsertD3D9FormatInfo(&map, GL_DEPTH24_STENCIL8_OES, D3DFMT_INTZ, D3DFMT_D24S8, UnreachableLoad ); InsertD3D9FormatInfo(&map, GL_STENCIL_INDEX8, D3DFMT_UNKNOWN, D3DFMT_D24S8, UnreachableLoad ); // TODO: What's the texture format? diff --git a/tests/angle_tests/DepthStencilFormatsTest.cpp b/tests/angle_tests/DepthStencilFormatsTest.cpp new file mode 100644 index 00000000..56d5210a --- /dev/null +++ b/tests/angle_tests/DepthStencilFormatsTest.cpp @@ -0,0 +1,96 @@ +#include "ANGLETest.h" + +class DepthStencilFormatsTest : public ANGLETest +{ +protected: + DepthStencilFormatsTest() + { + setWindowWidth(128); + setWindowHeight(128); + setConfigRedBits(8); + setConfigGreenBits(8); + setConfigBlueBits(8); + setConfigAlphaBits(8); + setClientVersion(2); + } + + bool checkTexImageFormatSupport(GLenum format, GLenum type) + { + EXPECT_GL_NO_ERROR(); + + GLuint tex = 0; + glGenTextures(1, &tex); + glBindTexture(GL_TEXTURE_2D, tex); + glTexImage2D(GL_TEXTURE_2D, 0, format, 1, 1, 0, format, type, NULL); + glDeleteTextures(1, &tex); + + return (glGetError() == GL_NO_ERROR); + } + + bool checkTexStorageFormatSupport(GLenum internalFormat) + { + EXPECT_GL_NO_ERROR(); + + GLuint tex = 0; + glGenTextures(1, &tex); + glBindTexture(GL_TEXTURE_2D, tex); + glTexStorage2DEXT(GL_TEXTURE_2D, 1, internalFormat, 1, 1); + glDeleteTextures(1, &tex); + + return (glGetError() == GL_NO_ERROR); + } + + bool checkRenderbufferFormatSupport(GLenum internalFormat) + { + EXPECT_GL_NO_ERROR(); + + GLuint rb = 0; + glGenRenderbuffers(1, &rb); + glBindRenderbuffer(GL_RENDERBUFFER, rb); + glRenderbufferStorage(GL_RENDERBUFFER, internalFormat, 1, 1); + glDeleteRenderbuffers(1, &rb); + + return (glGetError() == GL_NO_ERROR); + } + + virtual void SetUp() + { + ANGLETest::SetUp(); + } + + virtual void TearDown() + { + ANGLETest::TearDown(); + } +}; + +TEST_F(DepthStencilFormatsTest, DepthTexture) +{ + bool shouldHaveTextureSupport = extensionEnabled("GL_ANGLE_depth_texture"); + EXPECT_EQ(shouldHaveTextureSupport, checkTexImageFormatSupport(GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT)); + EXPECT_EQ(shouldHaveTextureSupport, checkTexImageFormatSupport(GL_DEPTH_COMPONENT, GL_UNSIGNED_INT)); + + if (extensionEnabled("GL_EXT_texture_storage")) + { + EXPECT_EQ(shouldHaveTextureSupport, checkTexStorageFormatSupport(GL_DEPTH_COMPONENT16)); + EXPECT_EQ(shouldHaveTextureSupport, checkTexStorageFormatSupport(GL_DEPTH_COMPONENT32_OES)); + } +} + +TEST_F(DepthStencilFormatsTest, PackedDepthStencil) +{ + // Expected to fail in D3D9 if GL_OES_packed_depth_stencil is not present. + // Expected to fail in D3D11 if GL_OES_packed_depth_stencil or GL_ANGLE_depth_texture is not present. + + bool shouldHaveRenderbufferSupport = extensionEnabled("GL_OES_packed_depth_stencil"); + EXPECT_EQ(shouldHaveRenderbufferSupport, checkRenderbufferFormatSupport(GL_DEPTH24_STENCIL8_OES)); + + bool shouldHaveTextureSupport = extensionEnabled("GL_OES_packed_depth_stencil") && + extensionEnabled("GL_ANGLE_depth_texture"); + EXPECT_EQ(shouldHaveTextureSupport, checkTexImageFormatSupport(GL_DEPTH_STENCIL_OES, GL_UNSIGNED_INT_24_8_OES)); + + if (extensionEnabled("GL_EXT_texture_storage")) + { + EXPECT_EQ(shouldHaveTextureSupport, checkTexStorageFormatSupport(GL_DEPTH24_STENCIL8_OES)); + } +} |