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

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

Issue 2936973003: Revert "Workaround for Qualcomm renderbuffer resize bug" (Closed)
Patch Set: Created 3 years, 6 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
« no previous file with comments | « gpu/command_buffer/service/renderbuffer_manager.h ('k') | gpu/config/gpu_driver_bug_list.json » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "gpu/command_buffer/service/renderbuffer_manager.h" 5 #include "gpu/command_buffer/service/renderbuffer_manager.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include "base/format_macros.h" 10 #include "base/format_macros.h"
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 96
97 void Renderbuffer::SetInfoAndInvalidate(GLsizei samples, 97 void Renderbuffer::SetInfoAndInvalidate(GLsizei samples,
98 GLenum internalformat, 98 GLenum internalformat,
99 GLsizei width, 99 GLsizei width,
100 GLsizei height) { 100 GLsizei height) {
101 samples_ = samples; 101 samples_ = samples;
102 internal_format_ = internalformat; 102 internal_format_ = internalformat;
103 width_ = width; 103 width_ = width;
104 height_ = height; 104 height_ = height;
105 cleared_ = false; 105 cleared_ = false;
106 allocated_ = true;
107 for (auto& point : framebuffer_attachment_points_) { 106 for (auto& point : framebuffer_attachment_points_) {
108 point.first->UnmarkAsComplete(); 107 point.first->UnmarkAsComplete();
109 } 108 }
110 } 109 }
111 110
112 void Renderbuffer::AddToSignature(std::string* signature) const { 111 void Renderbuffer::AddToSignature(std::string* signature) const {
113 DCHECK(signature); 112 DCHECK(signature);
114 RenderbufferSignature signature_data(internal_format_, 113 RenderbufferSignature signature_data(internal_format_,
115 samples_, 114 samples_,
116 width_, 115 width_,
117 height_); 116 height_);
118 117
119 signature->append(RenderbufferTag, sizeof(RenderbufferTag)); 118 signature->append(RenderbufferTag, sizeof(RenderbufferTag));
120 signature->append(reinterpret_cast<const char*>(&signature_data), 119 signature->append(reinterpret_cast<const char*>(&signature_data),
121 sizeof(signature_data)); 120 sizeof(signature_data));
122 } 121 }
123 122
124 Renderbuffer::Renderbuffer(RenderbufferManager* manager, 123 Renderbuffer::Renderbuffer(RenderbufferManager* manager,
125 GLuint client_id, 124 GLuint client_id,
126 GLuint service_id) 125 GLuint service_id)
127 : manager_(manager), 126 : manager_(manager),
128 client_id_(client_id), 127 client_id_(client_id),
129 service_id_(service_id), 128 service_id_(service_id),
130 cleared_(true), 129 cleared_(true),
131 allocated_(false),
132 has_been_bound_(false), 130 has_been_bound_(false),
133 samples_(0), 131 samples_(0),
134 internal_format_(GL_RGBA4), 132 internal_format_(GL_RGBA4),
135 width_(0), 133 width_(0),
136 height_(0) { 134 height_(0) {
137 manager_->StartTracking(this); 135 manager_->StartTracking(this);
138 } 136 }
139 137
140 bool Renderbuffer::RegenerateAndBindBackingObjectIfNeeded() {
141 if (!allocated_ || !has_been_bound_ || samples_ == 0) {
142 // Not needed - won't trigger bug (multisample_renderbuffer_resize_broken).
143 return false;
144 }
145
146 GLint original_fbo = 0;
147 glGetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &original_fbo);
148
149 glDeleteRenderbuffersEXT(1, &service_id_);
150 service_id_ = 0;
151 glGenRenderbuffersEXT(1, &service_id_);
152 glBindRenderbufferEXT(GL_RENDERBUFFER, service_id_);
153
154 // Attach new renderbuffer to all framebuffers
155 for (auto& point : framebuffer_attachment_points_) {
156 glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER, point.first->service_id());
157 glFramebufferRenderbufferEXT(GL_DRAW_FRAMEBUFFER, point.second,
158 GL_RENDERBUFFER, service_id_);
159 }
160
161 glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER, original_fbo);
162
163 allocated_ = false;
164 return true;
165 }
166
167 void Renderbuffer::AddFramebufferAttachmentPoint(Framebuffer* framebuffer, 138 void Renderbuffer::AddFramebufferAttachmentPoint(Framebuffer* framebuffer,
168 GLenum attachment) { 139 GLenum attachment) {
169 framebuffer_attachment_points_.insert( 140 framebuffer_attachment_points_.insert(
170 std::make_pair(framebuffer, attachment)); 141 std::make_pair(framebuffer, attachment));
171 } 142 }
172 143
173 void Renderbuffer::RemoveFramebufferAttachmentPoint(Framebuffer* framebuffer, 144 void Renderbuffer::RemoveFramebufferAttachmentPoint(Framebuffer* framebuffer,
174 GLenum attachment) { 145 GLenum attachment) {
175 framebuffer_attachment_points_.erase(std::make_pair(framebuffer, attachment)); 146 framebuffer_attachment_points_.erase(std::make_pair(framebuffer, attachment));
176 } 147 }
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
341 client_renderbuffer_id); 312 client_renderbuffer_id);
342 pmd->CreateSharedGlobalAllocatorDump(guid); 313 pmd->CreateSharedGlobalAllocatorDump(guid);
343 pmd->AddOwnershipEdge(dump->guid(), guid); 314 pmd->AddOwnershipEdge(dump->guid(), guid);
344 } 315 }
345 316
346 return true; 317 return true;
347 } 318 }
348 319
349 } // namespace gles2 320 } // namespace gles2
350 } // namespace gpu 321 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/renderbuffer_manager.h ('k') | gpu/config/gpu_driver_bug_list.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698