Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(617)

Side by Side Diff: gpu/command_buffer/service/indexed_buffer_binding_host_unittest.cc

Issue 1922633002: Implement TransformFeedbackManager in GPU command buffer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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 "gpu/command_buffer/service/buffer_manager.h"
6 #include "gpu/command_buffer/service/gpu_service_test.h"
7 #include "gpu/command_buffer/service/indexed_buffer_binding_host.h"
8 #include "ui/gl/gl_context.h"
9 #include "ui/gl/gl_mock.h"
10
11 namespace gpu {
12 namespace gles2 {
13
14 namespace {
15 const uint32_t kMaxBindings = 16;
16 const GLuint kBufferClientId = 87;
17 const GLuint kBufferServiceId = 987;
18 } // namespace anonymous
19
20 class IndexedBufferBindingHostTest : public GpuServiceTest {
21 public:
22 IndexedBufferBindingHostTest()
23 : host_(new IndexedBufferBindingHost(kMaxBindings)),
24 buffer_manager_(new BufferManager(nullptr, nullptr)) {
25 buffer_manager_->CreateBuffer(kBufferClientId, kBufferServiceId);
26 buffer_ = buffer_manager_->GetBuffer(kBufferClientId);
27 DCHECK(buffer_.get());
28 }
29
30 ~IndexedBufferBindingHostTest() override {}
31
32 protected:
33 void SetUp() override {
34 // Use 4.1 to trigger the BindBufferRange emulation.
35 GpuServiceTest::SetUpWithGLVersion("4.1", "");
36 }
37
38 void TearDown() override {
39 host_->RemoveBoundBuffer(buffer_.get());
40 buffer_ = nullptr;
41 buffer_manager_->Destroy(false);
42 buffer_manager_.reset();
43 GpuServiceTest::TearDown();
44 }
45
46 const gfx::GLVersionInfo& GetGLVersionInfo() {
47 return *(GetGLContext()->GetVersionInfo());
48 }
49
50 void SetBufferSize(GLenum target, GLsizeiptr size) {
51 buffer_manager_->SetInfo(
52 buffer_.get(), target, size, GL_STATIC_DRAW, false);
53 }
54
55 scoped_refptr<IndexedBufferBindingHost> host_;
56 std::unique_ptr<BufferManager> buffer_manager_;
57 scoped_refptr<Buffer> buffer_;
58 };
59
60 TEST_F(IndexedBufferBindingHostTest, DoBindBufferRangeUninitializedBuffer) {
61 const GLenum kTarget = GL_TRANSFORM_FEEDBACK_BUFFER;
62 const GLuint kIndex = 2;
63 const GLintptr kOffset = 4;
64 const GLsizeiptr kSize = 8;
65
66 EXPECT_CALL(*gl_, BindBufferBase(kTarget, kIndex, 0))
67 .Times(1)
68 .RetiresOnSaturation();
69 EXPECT_CALL(*gl_, BindBuffer(kTarget, kBufferServiceId))
70 .Times(1)
71 .RetiresOnSaturation();
72
73 host_->DoBindBufferRange(
74 GetGLVersionInfo(), kTarget, kIndex, buffer_.get(), kOffset, kSize);
75
76 for (uint32_t index = 0; index < kMaxBindings; ++index) {
77 if (index != kIndex) {
78 EXPECT_EQ(nullptr, host_->GetBufferBinding(index));
79 } else {
80 EXPECT_EQ(buffer_.get(), host_->GetBufferBinding(index));
81 EXPECT_EQ(kSize, host_->GetBufferSize(index));
82 EXPECT_EQ(kOffset, host_->GetBufferStart(index));
83 }
84 }
85 }
86
87 TEST_F(IndexedBufferBindingHostTest, DoBindBufferRangeBufferWithoutEnoughSize) {
88 const GLenum kTarget = GL_TRANSFORM_FEEDBACK_BUFFER;
89 const GLuint kIndex = 2;
90 const GLintptr kOffset = 4;
91 const GLsizeiptr kSize = 8;
92 const GLsizeiptr kBufferSize = kOffset + kSize - 2;
93
94 SetBufferSize(kTarget, kBufferSize);
95
96 GLsizeiptr clamped_size = ((kBufferSize - kOffset) >> 2) << 2;
97
98 EXPECT_CALL(*gl_, BindBufferRange(kTarget, kIndex, kBufferServiceId, kOffset,
99 clamped_size))
100 .Times(1)
101 .RetiresOnSaturation();
102
103 host_->DoBindBufferRange(
104 GetGLVersionInfo(), kTarget, kIndex, buffer_.get(), kOffset, kSize);
105
106 for (uint32_t index = 0; index < kMaxBindings; ++index) {
107 if (index != kIndex) {
108 EXPECT_EQ(nullptr, host_->GetBufferBinding(index));
109 } else {
110 EXPECT_EQ(buffer_.get(), host_->GetBufferBinding(index));
111 EXPECT_EQ(kSize, host_->GetBufferSize(index));
112 EXPECT_EQ(kOffset, host_->GetBufferStart(index));
113 }
114 }
115
116 // Now adjust buffer size to be big enough.
117 EXPECT_CALL(*gl_, BindBufferRange(kTarget, kIndex, kBufferServiceId, kOffset,
118 kSize))
119 .Times(1)
120 .RetiresOnSaturation();
121
122 SetBufferSize(kTarget, kOffset + kSize);
123 host_->OnBufferData(GetGLVersionInfo(), kTarget, buffer_.get());
124 }
125
126 } // namespace gles2
127 } // namespace gpu
128
129
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698