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

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

Issue 1673113002: Move WebGL1 attachment image type / attachment point matching check to command buffer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 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 2faa621968a7d1a8ccc3cd53e9f5ed49223ae927..d8d95bf4d7a13dd7fd3c856a55d3f254298c3ad7 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -6078,8 +6078,15 @@ void GLES2DecoderImpl::DoFramebufferRenderbuffer(
service_id = renderbuffer->service_id();
}
LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("glFramebufferRenderbuffer");
- glFramebufferRenderbufferEXT(
- target, attachment, renderbuffertarget, service_id);
+ if (attachment == GL_DEPTH_STENCIL_ATTACHMENT) {
+ glFramebufferRenderbufferEXT(
+ target, GL_DEPTH_ATTACHMENT, renderbuffertarget, service_id);
+ glFramebufferRenderbufferEXT(
+ target, GL_STENCIL_ATTACHMENT, renderbuffertarget, service_id);
+ } else {
+ glFramebufferRenderbufferEXT(
+ target, attachment, renderbuffertarget, service_id);
+ }
GLenum error = LOCAL_PEEK_GL_ERROR("glFramebufferRenderbuffer");
if (error == GL_NO_ERROR) {
framebuffer->AttachRenderbuffer(attachment, renderbuffer);
@@ -6266,16 +6273,26 @@ void GLES2DecoderImpl::DoFramebufferTexture2DCommon(
if (texture_ref)
DoCopyTexImageIfNeeded(texture_ref->texture(), textarget);
- LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER(name);
- if (0 == samples) {
- glFramebufferTexture2DEXT(target, attachment, textarget, service_id, level);
+ std::vector<GLenum> attachments;
+ if (attachment == GL_DEPTH_STENCIL_ATTACHMENT) {
+ attachments.push_back(GL_DEPTH_ATTACHMENT);
+ attachments.push_back(GL_STENCIL_ATTACHMENT);
} else {
- if (features().use_img_for_multisampled_render_to_texture) {
- glFramebufferTexture2DMultisampleIMG(target, attachment, textarget,
- service_id, level, samples);
+ attachments.push_back(attachment);
+ }
+ LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER(name);
+ for (size_t ii = 0; ii < attachments.size(); ++ii) {
+ if (0 == samples) {
+ glFramebufferTexture2DEXT(
+ target, attachments[ii], textarget, service_id, level);
} else {
- glFramebufferTexture2DMultisampleEXT(target, attachment, textarget,
- service_id, level, samples);
+ if (features().use_img_for_multisampled_render_to_texture) {
+ glFramebufferTexture2DMultisampleIMG(
+ target, attachments[ii], textarget, service_id, level, samples);
+ } else {
+ glFramebufferTexture2DMultisampleEXT(
+ target, attachments[ii], textarget, service_id, level, samples);
+ }
}
}
GLenum error = LOCAL_PEEK_GL_ERROR(name);
@@ -10058,12 +10075,14 @@ bool GLES2DecoderImpl::ClearLevel(Texture* texture,
glGenFramebuffersEXT(1, &fb);
glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, fb);
+ glFramebufferTexture2DEXT(GL_DRAW_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT,
+ target, texture->service_id(), level);
bool have_stencil = (channels & GLES2Util::kStencil) != 0;
- GLenum attachment = have_stencil ? GL_DEPTH_STENCIL_ATTACHMENT :
- GL_DEPTH_ATTACHMENT;
+ if (have_stencil) {
+ glFramebufferTexture2DEXT(GL_DRAW_FRAMEBUFFER_EXT, GL_STENCIL_ATTACHMENT,
+ target, texture->service_id(), level);
+ }
- glFramebufferTexture2DEXT(GL_DRAW_FRAMEBUFFER_EXT, attachment, target,
- texture->service_id(), level);
// ANGLE promises a depth only attachment ok.
if (glCheckFramebufferStatusEXT(GL_DRAW_FRAMEBUFFER_EXT) !=
GL_FRAMEBUFFER_COMPLETE) {
« no previous file with comments | « gpu/command_buffer/service/framebuffer_manager.cc ('k') | gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698