blob: 56d5210ad4c8ae3dbbdae949674d959569d4390b [file] [log] [blame]
Geoff Langdf647a22014-09-19 13:13:40 -04001#include "ANGLETest.h"
2
3class DepthStencilFormatsTest : public ANGLETest
4{
5protected:
6 DepthStencilFormatsTest()
7 {
8 setWindowWidth(128);
9 setWindowHeight(128);
10 setConfigRedBits(8);
11 setConfigGreenBits(8);
12 setConfigBlueBits(8);
13 setConfigAlphaBits(8);
14 setClientVersion(2);
15 }
16
17 bool checkTexImageFormatSupport(GLenum format, GLenum type)
18 {
19 EXPECT_GL_NO_ERROR();
20
21 GLuint tex = 0;
22 glGenTextures(1, &tex);
23 glBindTexture(GL_TEXTURE_2D, tex);
24 glTexImage2D(GL_TEXTURE_2D, 0, format, 1, 1, 0, format, type, NULL);
25 glDeleteTextures(1, &tex);
26
27 return (glGetError() == GL_NO_ERROR);
28 }
29
30 bool checkTexStorageFormatSupport(GLenum internalFormat)
31 {
32 EXPECT_GL_NO_ERROR();
33
34 GLuint tex = 0;
35 glGenTextures(1, &tex);
36 glBindTexture(GL_TEXTURE_2D, tex);
37 glTexStorage2DEXT(GL_TEXTURE_2D, 1, internalFormat, 1, 1);
38 glDeleteTextures(1, &tex);
39
40 return (glGetError() == GL_NO_ERROR);
41 }
42
43 bool checkRenderbufferFormatSupport(GLenum internalFormat)
44 {
45 EXPECT_GL_NO_ERROR();
46
47 GLuint rb = 0;
48 glGenRenderbuffers(1, &rb);
49 glBindRenderbuffer(GL_RENDERBUFFER, rb);
50 glRenderbufferStorage(GL_RENDERBUFFER, internalFormat, 1, 1);
51 glDeleteRenderbuffers(1, &rb);
52
53 return (glGetError() == GL_NO_ERROR);
54 }
55
56 virtual void SetUp()
57 {
58 ANGLETest::SetUp();
59 }
60
61 virtual void TearDown()
62 {
63 ANGLETest::TearDown();
64 }
65};
66
67TEST_F(DepthStencilFormatsTest, DepthTexture)
68{
69 bool shouldHaveTextureSupport = extensionEnabled("GL_ANGLE_depth_texture");
70 EXPECT_EQ(shouldHaveTextureSupport, checkTexImageFormatSupport(GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT));
71 EXPECT_EQ(shouldHaveTextureSupport, checkTexImageFormatSupport(GL_DEPTH_COMPONENT, GL_UNSIGNED_INT));
72
73 if (extensionEnabled("GL_EXT_texture_storage"))
74 {
75 EXPECT_EQ(shouldHaveTextureSupport, checkTexStorageFormatSupport(GL_DEPTH_COMPONENT16));
76 EXPECT_EQ(shouldHaveTextureSupport, checkTexStorageFormatSupport(GL_DEPTH_COMPONENT32_OES));
77 }
78}
79
80TEST_F(DepthStencilFormatsTest, PackedDepthStencil)
81{
82 // Expected to fail in D3D9 if GL_OES_packed_depth_stencil is not present.
83 // Expected to fail in D3D11 if GL_OES_packed_depth_stencil or GL_ANGLE_depth_texture is not present.
84
85 bool shouldHaveRenderbufferSupport = extensionEnabled("GL_OES_packed_depth_stencil");
86 EXPECT_EQ(shouldHaveRenderbufferSupport, checkRenderbufferFormatSupport(GL_DEPTH24_STENCIL8_OES));
87
88 bool shouldHaveTextureSupport = extensionEnabled("GL_OES_packed_depth_stencil") &&
89 extensionEnabled("GL_ANGLE_depth_texture");
90 EXPECT_EQ(shouldHaveTextureSupport, checkTexImageFormatSupport(GL_DEPTH_STENCIL_OES, GL_UNSIGNED_INT_24_8_OES));
91
92 if (extensionEnabled("GL_EXT_texture_storage"))
93 {
94 EXPECT_EQ(shouldHaveTextureSupport, checkTexStorageFormatSupport(GL_DEPTH24_STENCIL8_OES));
95 }
96}