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

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

Issue 2149523002: Make invalidateFramebuffer no-op for DEPTH_STENCIL attachment (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add depth_cleared_ and stencil_cleared_ for class texture and renderbuffer. Created 4 years, 5 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
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/gles2_cmd_decoder.h" 5 #include "gpu/command_buffer/service/gles2_cmd_decoder.h"
6 6
7 #include <limits.h> 7 #include <limits.h>
8 #include <stddef.h> 8 #include <stddef.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 #include <stdio.h> 10 #include <stdio.h>
(...skipping 6963 matching lines...) Expand 10 before | Expand all | Expand 10 after
6974 glFramebufferRenderbufferEXT( 6974 glFramebufferRenderbufferEXT(
6975 target, GL_DEPTH_ATTACHMENT, renderbuffertarget, service_id); 6975 target, GL_DEPTH_ATTACHMENT, renderbuffertarget, service_id);
6976 glFramebufferRenderbufferEXT( 6976 glFramebufferRenderbufferEXT(
6977 target, GL_STENCIL_ATTACHMENT, renderbuffertarget, service_id); 6977 target, GL_STENCIL_ATTACHMENT, renderbuffertarget, service_id);
6978 } else { 6978 } else {
6979 glFramebufferRenderbufferEXT( 6979 glFramebufferRenderbufferEXT(
6980 target, attachment, renderbuffertarget, service_id); 6980 target, attachment, renderbuffertarget, service_id);
6981 } 6981 }
6982 GLenum error = LOCAL_PEEK_GL_ERROR("glFramebufferRenderbuffer"); 6982 GLenum error = LOCAL_PEEK_GL_ERROR("glFramebufferRenderbuffer");
6983 if (error == GL_NO_ERROR) { 6983 if (error == GL_NO_ERROR) {
6984 framebuffer->AttachRenderbuffer(attachment, renderbuffer); 6984 if (attachment == GL_DEPTH_STENCIL_ATTACHMENT) {
6985 framebuffer->AttachRenderbuffer(GL_DEPTH_ATTACHMENT, renderbuffer);
6986 framebuffer->AttachRenderbuffer(GL_STENCIL_ATTACHMENT, renderbuffer);
6987 } else {
6988 framebuffer->AttachRenderbuffer(attachment, renderbuffer);
6989 }
6985 } 6990 }
6986 if (framebuffer == framebuffer_state_.bound_draw_framebuffer.get()) { 6991 if (framebuffer == framebuffer_state_.bound_draw_framebuffer.get()) {
6987 framebuffer_state_.clear_state_dirty = true; 6992 framebuffer_state_.clear_state_dirty = true;
6988 } 6993 }
6989 OnFboChanged(); 6994 OnFboChanged();
6990 } 6995 }
6991 6996
6992 void GLES2DecoderImpl::DoDisable(GLenum cap) { 6997 void GLES2DecoderImpl::DoDisable(GLenum cap) {
6993 if (SetCapabilityState(cap, false)) { 6998 if (SetCapabilityState(cap, false)) {
6994 if (cap == GL_PRIMITIVE_RESTART_FIXED_INDEX && 6999 if (cap == GL_PRIMITIVE_RESTART_FIXED_INDEX &&
(...skipping 4200 matching lines...) Expand 10 before | Expand all | Expand 10 after
11195 GL_FRAMEBUFFER_COMPLETE) { 11200 GL_FRAMEBUFFER_COMPLETE) {
11196 return false; 11201 return false;
11197 } 11202 }
11198 glClearStencil(0); 11203 glClearStencil(0);
11199 state_.SetDeviceStencilMaskSeparate(GL_FRONT, kDefaultStencilMask); 11204 state_.SetDeviceStencilMaskSeparate(GL_FRONT, kDefaultStencilMask);
11200 state_.SetDeviceStencilMaskSeparate(GL_BACK, kDefaultStencilMask); 11205 state_.SetDeviceStencilMaskSeparate(GL_BACK, kDefaultStencilMask);
11201 glClearDepth(1.0f); 11206 glClearDepth(1.0f);
11202 state_.SetDeviceDepthMask(GL_TRUE); 11207 state_.SetDeviceDepthMask(GL_TRUE);
11203 state_.SetDeviceCapabilityState(GL_SCISSOR_TEST, true); 11208 state_.SetDeviceCapabilityState(GL_SCISSOR_TEST, true);
11204 glScissor(xoffset, yoffset, width, height); 11209 glScissor(xoffset, yoffset, width, height);
11205 glClear(GL_DEPTH_BUFFER_BIT | (have_stencil ? GL_STENCIL_BUFFER_BIT : 0)); 11210 if (format != GL_DEPTH_STENCIL) {
11206 11211 glClear(GL_DEPTH_BUFFER_BIT | (have_stencil ? GL_STENCIL_BUFFER_BIT : 0));
11212 } else {
11213 // When format is DEPTH_STENCIL, only clear the uncleared part.
11214 GLbitfield clear_bits = 0;
11215 if (!texture->IsLevelCleared(target, level, GL_DEPTH_ATTACHMENT))
11216 clear_bits |= GL_DEPTH_BUFFER_BIT;
11217 if (have_stencil && !texture->IsLevelCleared(target, level,
qiankun 2016/07/14 06:48:21 new line after &&
11218 GL_STENCIL_ATTACHMENT))
11219 clear_bits |= GL_STENCIL_BUFFER_BIT;
11220 glClear(clear_bits);
11221 }
11207 RestoreClearState(); 11222 RestoreClearState();
11208 11223
11209 glDeleteFramebuffersEXT(1, &fb); 11224 glDeleteFramebuffersEXT(1, &fb);
11210 Framebuffer* framebuffer = 11225 Framebuffer* framebuffer =
11211 GetFramebufferInfoForTarget(GL_DRAW_FRAMEBUFFER_EXT); 11226 GetFramebufferInfoForTarget(GL_DRAW_FRAMEBUFFER_EXT);
11212 GLuint fb_service_id = 11227 GLuint fb_service_id =
11213 framebuffer ? framebuffer->service_id() : GetBackbufferServiceId(); 11228 framebuffer ? framebuffer->service_id() : GetBackbufferServiceId();
11214 glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, fb_service_id); 11229 glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, fb_service_id);
11215 return true; 11230 return true;
11216 } 11231 }
(...skipping 5889 matching lines...) Expand 10 before | Expand all | Expand 10 after
17106 } 17121 }
17107 17122
17108 // Include the auto-generated part of this file. We split this because it means 17123 // Include the auto-generated part of this file. We split this because it means
17109 // we can easily edit the non-auto generated parts right here in this file 17124 // we can easily edit the non-auto generated parts right here in this file
17110 // instead of having to edit some template or the code generator. 17125 // instead of having to edit some template or the code generator.
17111 #include "base/macros.h" 17126 #include "base/macros.h"
17112 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" 17127 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h"
17113 17128
17114 } // namespace gles2 17129 } // namespace gles2
17115 } // namespace gpu 17130 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698