1 // Copyright (c) 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include <GLES2/gl2.h>
6 #include <GLES2/gl2ext.h>
7 #include <GLES2/gl2extchromium.h>
8 #include <GLES3/gl3.h>
9 #include <stdint.h>
10
11 #include "gpu/command_buffer/tests/gl_manager.h"
12 #include "gpu/command_buffer/tests/gl_test_utils.h"
13 #include "testing/gmock/include/gmock/gmock.h"
14 #include "testing/gtest/include/gtest/gtest.h"
15
16 namespace gpu {
17
18 class ObjectBindingsTest : public testing::Test {
19 protected:
SetUp()20 void SetUp() override {
21 GLManager::Options options;
22 options.context_type = CONTEXT_TYPE_OPENGLES3;
23 gl_.Initialize(options);
24 }
25
TearDown()26 void TearDown() override { gl_.Destroy(); }
IsApplicable() const27 bool IsApplicable() const { return gl_.IsInitialized(); }
28
29 GLManager gl_;
30 };
31
TEST_F(ObjectBindingsTest,Buffers)32 TEST_F(ObjectBindingsTest, Buffers) {
33 if (!IsApplicable()) {
34 return;
35 }
36
37 const std::pair<GLenum, GLenum> buffer_bindings[] = {
38 {GL_ARRAY_BUFFER, GL_ARRAY_BUFFER_BINDING},
39 {GL_ELEMENT_ARRAY_BUFFER, GL_ELEMENT_ARRAY_BUFFER_BINDING},
40 {GL_PIXEL_PACK_BUFFER, GL_PIXEL_PACK_BUFFER_BINDING},
41 {GL_PIXEL_UNPACK_BUFFER, GL_PIXEL_UNPACK_BUFFER_BINDING},
42 {GL_TRANSFORM_FEEDBACK_BUFFER, GL_TRANSFORM_FEEDBACK_BUFFER_BINDING},
43 {GL_COPY_READ_BUFFER, GL_COPY_READ_BUFFER_BINDING},
44 {GL_COPY_WRITE_BUFFER, GL_COPY_WRITE_BUFFER_BINDING},
45 {GL_UNIFORM_BUFFER, GL_UNIFORM_BUFFER_BINDING},
46 };
47
48 for (auto binding : buffer_bindings) {
49 GLuint buffer = 0;
50 glGenBuffers(1, &buffer);
51 glBindBuffer(binding.first, buffer);
52
53 {
54 GLint result = 0;
55 glGetIntegerv(binding.second, &result);
56 EXPECT_EQ(static_cast<GLuint>(result), buffer);
57 }
58
59 {
60 GLfloat result = 0;
61 glGetFloatv(binding.second, &result);
62 EXPECT_EQ(static_cast<GLuint>(result), buffer);
63 }
64
65 glBindBuffer(binding.first, 0);
66 glDeleteBuffers(1, &buffer);
67 }
68
69 GLTestHelper::CheckGLError("no errors", __LINE__);
70 }
71
TEST_F(ObjectBindingsTest,FramebufferAttachments)72 TEST_F(ObjectBindingsTest, FramebufferAttachments) {
73 if (!IsApplicable()) {
74 return;
75 }
76
77 GLuint texture = 0;
78 glGenTextures(1, &texture);
79 glBindTexture(GL_TEXTURE_2D, texture);
80 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE,
81 nullptr);
82
83 GLuint renderbuffer = 0;
84 glGenRenderbuffers(1, &renderbuffer);
85 glBindRenderbuffer(GL_RENDERBUFFER, renderbuffer);
86 glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA8, 1, 1);
87
88 GLuint framebuffer = 0;
89 glGenFramebuffers(1, &framebuffer);
90 glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
91
92 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
93 texture, 0);
94 {
95 GLint result = 0;
96 glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
97 GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME,
98 &result);
99 EXPECT_EQ(static_cast<GLuint>(result), texture);
100 }
101
102 glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
103 GL_RENDERBUFFER, renderbuffer);
104 {
105 GLint result = 0;
106 glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
107 GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME,
108 &result);
109 EXPECT_EQ(static_cast<GLuint>(result), renderbuffer);
110 }
111
112 GLTestHelper::CheckGLError("no errors", __LINE__);
113 }
114
115 } // namespace gpu
116