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

Unified Diff: gpu/command_buffer/service/gles2_cmd_decoder.cc

Issue 2171543002: Split DEPTH_STENCIL into DEPTH and STENCIL in command buffer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: test bots 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 side-by-side diff with in-line comments
Download patch
Index: gpu/command_buffer/service/gles2_cmd_decoder.cc
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc
index 03ce04134dc62c31df4633c1137cbb290af7591c..e778bdc8364fae812bb947e4628601f0a507cbbc 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -6971,11 +6971,11 @@ void GLES2DecoderImpl::DoClearBufferfi(
void GLES2DecoderImpl::DoFramebufferRenderbuffer(
GLenum target, GLenum attachment, GLenum renderbuffertarget,
GLuint client_renderbuffer_id) {
+ const char* func_name = "glFramebufferRenderbuffer";
Framebuffer* framebuffer = GetFramebufferInfoForTarget(target);
if (!framebuffer) {
LOCAL_SET_GL_ERROR(
- GL_INVALID_OPERATION,
- "glFramebufferRenderbuffer", "no framebuffer bound");
+ GL_INVALID_OPERATION, func_name, "no framebuffer bound");
return;
}
GLuint service_id = 0;
@@ -6985,12 +6985,12 @@ void GLES2DecoderImpl::DoFramebufferRenderbuffer(
if (!renderbuffer) {
LOCAL_SET_GL_ERROR(
GL_INVALID_OPERATION,
- "glFramebufferRenderbuffer", "unknown renderbuffer");
+ func_name, "unknown renderbuffer");
return;
}
service_id = renderbuffer->service_id();
}
- LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("glFramebufferRenderbuffer");
+ LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER(func_name);
if (attachment == GL_DEPTH_STENCIL_ATTACHMENT) {
glFramebufferRenderbufferEXT(
target, GL_DEPTH_ATTACHMENT, renderbuffertarget, service_id);
@@ -7000,9 +7000,14 @@ void GLES2DecoderImpl::DoFramebufferRenderbuffer(
glFramebufferRenderbufferEXT(
target, attachment, renderbuffertarget, service_id);
}
- GLenum error = LOCAL_PEEK_GL_ERROR("glFramebufferRenderbuffer");
+ GLenum error = LOCAL_PEEK_GL_ERROR(func_name);
if (error == GL_NO_ERROR) {
- framebuffer->AttachRenderbuffer(attachment, renderbuffer);
+ if (attachment == GL_DEPTH_STENCIL_ATTACHMENT) {
+ framebuffer->AttachRenderbuffer(GL_DEPTH_ATTACHMENT, renderbuffer);
+ framebuffer->AttachRenderbuffer(GL_STENCIL_ATTACHMENT, renderbuffer);
+ } else {
+ framebuffer->AttachRenderbuffer(attachment, renderbuffer);
+ }
}
if (framebuffer == framebuffer_state_.bound_draw_framebuffer.get()) {
framebuffer_state_.clear_state_dirty = true;
@@ -7090,16 +7095,14 @@ void GLES2DecoderImpl::ClearUnclearedAttachments(
}
}
- if (framebuffer->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT) ||
- framebuffer->HasUnclearedAttachment(GL_DEPTH_STENCIL_ATTACHMENT)) {
+ if (framebuffer->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT)) {
glClearStencil(0);
state_.SetDeviceStencilMaskSeparate(GL_FRONT, kDefaultStencilMask);
state_.SetDeviceStencilMaskSeparate(GL_BACK, kDefaultStencilMask);
clear_bits |= GL_STENCIL_BUFFER_BIT;
}
- if (framebuffer->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT) ||
- framebuffer->HasUnclearedAttachment(GL_DEPTH_STENCIL_ATTACHMENT)) {
+ if (framebuffer->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT)) {
glClearDepth(1.0f);
state_.SetDeviceDepthMask(GL_TRUE);
clear_bits |= GL_DEPTH_BUFFER_BIT;
@@ -7244,8 +7247,15 @@ void GLES2DecoderImpl::DoFramebufferTexture2DCommon(
}
GLenum error = LOCAL_PEEK_GL_ERROR(name);
if (error == GL_NO_ERROR) {
- framebuffer->AttachTexture(attachment, texture_ref, textarget, level,
- samples);
+ if (attachment == GL_DEPTH_STENCIL_ATTACHMENT) {
+ framebuffer->AttachTexture(
+ GL_DEPTH_ATTACHMENT, texture_ref, textarget, level, samples);
+ framebuffer->AttachTexture(
+ GL_STENCIL_ATTACHMENT, texture_ref, textarget, level, samples);
+ } else {
+ framebuffer->AttachTexture(
+ attachment, texture_ref, textarget, level, samples);
+ }
}
if (framebuffer == framebuffer_state_.bound_draw_framebuffer.get()) {
framebuffer_state_.clear_state_dirty = true;
@@ -7294,9 +7304,27 @@ void GLES2DecoderImpl::DoFramebufferTextureLayer(
return;
}
}
- glFramebufferTextureLayer(target, attachment, service_id, level, layer);
- framebuffer->AttachTextureLayer(
- attachment, texture_ref, texture_target, level, layer);
+ LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER(function_name);
+ if (attachment == GL_DEPTH_STENCIL_ATTACHMENT) {
+ glFramebufferTextureLayer(
+ target, GL_DEPTH_ATTACHMENT, service_id, level, layer);
+ glFramebufferTextureLayer(
+ target, GL_STENCIL_ATTACHMENT, service_id, level, layer);
+ } else {
+ glFramebufferTextureLayer(target, attachment, service_id, level, layer);
+ }
+ GLenum error = LOCAL_PEEK_GL_ERROR(function_name);
+ if (error == GL_NO_ERROR) {
+ if (attachment == GL_DEPTH_STENCIL_ATTACHMENT) {
+ framebuffer->AttachTextureLayer(
+ GL_DEPTH_ATTACHMENT, texture_ref, texture_target, level, layer);
+ framebuffer->AttachTextureLayer(
+ GL_STENCIL_ATTACHMENT, texture_ref, texture_target, level, layer);
+ } else {
+ framebuffer->AttachTextureLayer(
+ attachment, texture_ref, texture_target, level, layer);
+ }
+ }
if (framebuffer == framebuffer_state_.bound_draw_framebuffer.get()) {
framebuffer_state_.clear_state_dirty = true;
}

Powered by Google App Engine
This is Rietveld 408576698