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

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

Issue 18492005: Add GL_EXT_multisampled_render_to_texture support to command buffer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: some cleanup Created 7 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 <stdio.h> 7 #include <stdio.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <list> 10 #include <list>
(...skipping 1229 matching lines...) Expand 10 before | Expand all | Expand 10 after
1240 // Wrapper for glFramebufferRenderbufffer. 1240 // Wrapper for glFramebufferRenderbufffer.
1241 void DoFramebufferRenderbuffer( 1241 void DoFramebufferRenderbuffer(
1242 GLenum target, GLenum attachment, GLenum renderbuffertarget, 1242 GLenum target, GLenum attachment, GLenum renderbuffertarget,
1243 GLuint renderbuffer); 1243 GLuint renderbuffer);
1244 1244
1245 // Wrapper for glFramebufferTexture2D. 1245 // Wrapper for glFramebufferTexture2D.
1246 void DoFramebufferTexture2D( 1246 void DoFramebufferTexture2D(
1247 GLenum target, GLenum attachment, GLenum textarget, GLuint texture, 1247 GLenum target, GLenum attachment, GLenum textarget, GLuint texture,
1248 GLint level); 1248 GLint level);
1249 1249
1250 // Wrapper for glFramebufferTexture2DMultisampleEXT.
1251 void DoFramebufferTexture2DMultisample(
1252 GLenum target, GLenum attachment, GLenum textarget,
1253 GLuint texture, GLint level, GLsizei samples);
1254
1255 // Common implementation for both DoFramebufferTexture2D wrappers.
1256 void DoFramebufferTexture2DCommon(const char* name,
1257 GLenum target, GLenum attachment, GLenum textarget,
1258 GLuint texture, GLint level, GLsizei samples);
1259
1250 // Wrapper for glGenerateMipmap 1260 // Wrapper for glGenerateMipmap
1251 void DoGenerateMipmap(GLenum target); 1261 void DoGenerateMipmap(GLenum target);
1252 1262
1253 // Helper for GenSharedIdsCHROMIUM commands. 1263 // Helper for GenSharedIdsCHROMIUM commands.
1254 void DoGenSharedIdsCHROMIUM( 1264 void DoGenSharedIdsCHROMIUM(
1255 GLuint namespace_id, GLuint id_offset, GLsizei n, GLuint* ids); 1265 GLuint namespace_id, GLuint id_offset, GLsizei n, GLuint* ids);
1256 1266
1267 // Helper for DoGetBooleanv, Floatv, and Intergerv to adjust pname
1268 // to account for different pname values defined in different extension
1269 // variants.
1270 GLenum AdjustGetPname(GLenum pname);
1271
1257 // Wrapper for DoGetBooleanv. 1272 // Wrapper for DoGetBooleanv.
1258 void DoGetBooleanv(GLenum pname, GLboolean* params); 1273 void DoGetBooleanv(GLenum pname, GLboolean* params);
1259 1274
1260 // Wrapper for DoGetFloatv. 1275 // Wrapper for DoGetFloatv.
1261 void DoGetFloatv(GLenum pname, GLfloat* params); 1276 void DoGetFloatv(GLenum pname, GLfloat* params);
1262 1277
1263 // Wrapper for glGetFramebufferAttachmentParameteriv. 1278 // Wrapper for glGetFramebufferAttachmentParameteriv.
1264 void DoGetFramebufferAttachmentParameteriv( 1279 void DoGetFramebufferAttachmentParameteriv(
1265 GLenum target, GLenum attachment, GLenum pname, GLint* params); 1280 GLenum target, GLenum attachment, GLenum pname, GLint* params);
1266 1281
(...skipping 3073 matching lines...) Expand 10 before | Expand all | Expand 10 after
4340 } 4355 }
4341 4356
4342 bool GLES2DecoderImpl::GetNumValuesReturnedForGLGet( 4357 bool GLES2DecoderImpl::GetNumValuesReturnedForGLGet(
4343 GLenum pname, GLsizei* num_values) { 4358 GLenum pname, GLsizei* num_values) {
4344 if (state_.GetStateAsGLint(pname, NULL, num_values)) { 4359 if (state_.GetStateAsGLint(pname, NULL, num_values)) {
4345 return true; 4360 return true;
4346 } 4361 }
4347 return GetHelper(pname, NULL, num_values); 4362 return GetHelper(pname, NULL, num_values);
4348 } 4363 }
4349 4364
4365 GLenum GLES2DecoderImpl::AdjustGetPname(GLenum pname) {
4366 if (GL_MAX_SAMPLES == pname &&
4367 features().use_img_for_multisampled_render_to_texture) {
4368 return GL_MAX_SAMPLES_IMG;
4369 }
4370 return pname;
4371 }
4372
4350 void GLES2DecoderImpl::DoGetBooleanv(GLenum pname, GLboolean* params) { 4373 void GLES2DecoderImpl::DoGetBooleanv(GLenum pname, GLboolean* params) {
4351 DCHECK(params); 4374 DCHECK(params);
4352 GLsizei num_written = 0; 4375 GLsizei num_written = 0;
4353 if (GetNumValuesReturnedForGLGet(pname, &num_written)) { 4376 if (GetNumValuesReturnedForGLGet(pname, &num_written)) {
4354 scoped_ptr<GLint[]> values(new GLint[num_written]); 4377 scoped_ptr<GLint[]> values(new GLint[num_written]);
4355 if (!state_.GetStateAsGLint(pname, values.get(), &num_written)) { 4378 if (!state_.GetStateAsGLint(pname, values.get(), &num_written)) {
4356 GetHelper(pname, values.get(), &num_written); 4379 GetHelper(pname, values.get(), &num_written);
4357 } 4380 }
4358 for (GLsizei ii = 0; ii < num_written; ++ii) { 4381 for (GLsizei ii = 0; ii < num_written; ++ii) {
4359 params[ii] = static_cast<GLboolean>(values[ii]); 4382 params[ii] = static_cast<GLboolean>(values[ii]);
4360 } 4383 }
4361 } else { 4384 } else {
4385 pname = AdjustGetPname(pname);
4362 glGetBooleanv(pname, params); 4386 glGetBooleanv(pname, params);
4363 } 4387 }
4364 } 4388 }
4365 4389
4366 void GLES2DecoderImpl::DoGetFloatv(GLenum pname, GLfloat* params) { 4390 void GLES2DecoderImpl::DoGetFloatv(GLenum pname, GLfloat* params) {
4367 DCHECK(params); 4391 DCHECK(params);
4368 GLsizei num_written = 0; 4392 GLsizei num_written = 0;
4369 if (!state_.GetStateAsGLfloat(pname, params, &num_written)) { 4393 if (!state_.GetStateAsGLfloat(pname, params, &num_written)) {
4370 if (GetHelper(pname, NULL, &num_written)) { 4394 if (GetHelper(pname, NULL, &num_written)) {
4371 scoped_ptr<GLint[]> values(new GLint[num_written]); 4395 scoped_ptr<GLint[]> values(new GLint[num_written]);
4372 GetHelper(pname, values.get(), &num_written); 4396 GetHelper(pname, values.get(), &num_written);
4373 for (GLsizei ii = 0; ii < num_written; ++ii) { 4397 for (GLsizei ii = 0; ii < num_written; ++ii) {
4374 params[ii] = static_cast<GLfloat>(values[ii]); 4398 params[ii] = static_cast<GLfloat>(values[ii]);
4375 } 4399 }
4376 } else { 4400 } else {
4401 pname = AdjustGetPname(pname);
4377 glGetFloatv(pname, params); 4402 glGetFloatv(pname, params);
4378 } 4403 }
4379 } 4404 }
4380 } 4405 }
4381 4406
4382 void GLES2DecoderImpl::DoGetIntegerv(GLenum pname, GLint* params) { 4407 void GLES2DecoderImpl::DoGetIntegerv(GLenum pname, GLint* params) {
4383 DCHECK(params); 4408 DCHECK(params);
4384 GLsizei num_written; 4409 GLsizei num_written;
4385 if (!state_.GetStateAsGLint(pname, params, &num_written) && 4410 if (!state_.GetStateAsGLint(pname, params, &num_written) &&
4386 !GetHelper(pname, params, &num_written)) { 4411 !GetHelper(pname, params, &num_written)) {
4412 pname = AdjustGetPname(pname);
4387 glGetIntegerv(pname, params); 4413 glGetIntegerv(pname, params);
4388 } 4414 }
4389 } 4415 }
4390 4416
4391 void GLES2DecoderImpl::DoGetProgramiv( 4417 void GLES2DecoderImpl::DoGetProgramiv(
4392 GLuint program_id, GLenum pname, GLint* params) { 4418 GLuint program_id, GLenum pname, GLint* params) {
4393 Program* program = GetProgramInfoNotShader(program_id, "glGetProgramiv"); 4419 Program* program = GetProgramInfoNotShader(program_id, "glGetProgramiv");
4394 if (!program) { 4420 if (!program) {
4395 return; 4421 return;
4396 } 4422 }
(...skipping 455 matching lines...) Expand 10 before | Expand all | Expand 10 after
4852 GLenum completeness = framebuffer->IsPossiblyComplete(); 4878 GLenum completeness = framebuffer->IsPossiblyComplete();
4853 if (completeness != GL_FRAMEBUFFER_COMPLETE) { 4879 if (completeness != GL_FRAMEBUFFER_COMPLETE) {
4854 return completeness; 4880 return completeness;
4855 } 4881 }
4856 return framebuffer->GetStatus(texture_manager(), target); 4882 return framebuffer->GetStatus(texture_manager(), target);
4857 } 4883 }
4858 4884
4859 void GLES2DecoderImpl::DoFramebufferTexture2D( 4885 void GLES2DecoderImpl::DoFramebufferTexture2D(
4860 GLenum target, GLenum attachment, GLenum textarget, 4886 GLenum target, GLenum attachment, GLenum textarget,
4861 GLuint client_texture_id, GLint level) { 4887 GLuint client_texture_id, GLint level) {
4888 DoFramebufferTexture2DCommon(
4889 "glFramebufferTexture2D", target, attachment,
4890 textarget, client_texture_id, level, 0);
4891 }
4892
4893 void GLES2DecoderImpl::DoFramebufferTexture2DMultisample(
4894 GLenum target, GLenum attachment, GLenum textarget,
4895 GLuint client_texture_id, GLint level, GLsizei samples) {
4896 if (!features().multisampled_render_to_texture) {
4897 LOCAL_SET_GL_ERROR(
4898 GL_INVALID_OPERATION,
4899 "glFramebufferTexture2DMultisample", "function not available");
4900 return;
4901 }
4902 DoFramebufferTexture2DCommon(
4903 "glFramebufferTexture2DMultisample", target, attachment,
4904 textarget, client_texture_id, level, samples);
4905 }
4906
4907 void GLES2DecoderImpl::DoFramebufferTexture2DCommon(
4908 const char* name, GLenum target, GLenum attachment, GLenum textarget,
4909 GLuint client_texture_id, GLint level, GLsizei samples) {
4910 if (samples > renderbuffer_manager()->max_samples()) {
4911 LOCAL_SET_GL_ERROR(
4912 GL_INVALID_VALUE,
4913 "glFramebufferTexture2DMultisample", "samples too large");
4914 return;
4915 }
4862 Framebuffer* framebuffer = GetFramebufferInfoForTarget(target); 4916 Framebuffer* framebuffer = GetFramebufferInfoForTarget(target);
4863 if (!framebuffer) { 4917 if (!framebuffer) {
4864 LOCAL_SET_GL_ERROR( 4918 LOCAL_SET_GL_ERROR(
4865 GL_INVALID_OPERATION, 4919 GL_INVALID_OPERATION,
4866 "glFramebufferTexture2D", "no framebuffer bound."); 4920 name, "no framebuffer bound.");
4867 return; 4921 return;
4868 } 4922 }
4869 GLuint service_id = 0; 4923 GLuint service_id = 0;
4870 TextureRef* texture_ref = NULL; 4924 TextureRef* texture_ref = NULL;
4871 if (client_texture_id) { 4925 if (client_texture_id) {
4872 texture_ref = GetTexture(client_texture_id); 4926 texture_ref = GetTexture(client_texture_id);
4873 if (!texture_ref) { 4927 if (!texture_ref) {
4874 LOCAL_SET_GL_ERROR( 4928 LOCAL_SET_GL_ERROR(
4875 GL_INVALID_OPERATION, 4929 GL_INVALID_OPERATION,
4876 "glFramebufferTexture2D", "unknown texture_ref"); 4930 name, "unknown texture_ref");
4877 return; 4931 return;
4878 } 4932 }
4879 service_id = texture_ref->service_id(); 4933 service_id = texture_ref->service_id();
4880 } 4934 }
4881 4935
4882 if (!texture_manager()->ValidForTarget(textarget, level, 0, 0, 1)) { 4936 if (!texture_manager()->ValidForTarget(textarget, level, 0, 0, 1)) {
4883 LOCAL_SET_GL_ERROR( 4937 LOCAL_SET_GL_ERROR(
4884 GL_INVALID_VALUE, 4938 GL_INVALID_VALUE,
4885 "glFramebufferTexture2D", "level out of range"); 4939 name, "level out of range");
4886 return; 4940 return;
4887 } 4941 }
4888 4942
4889 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("glFramebufferTexture2D"); 4943 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER(name);
4890 glFramebufferTexture2DEXT(target, attachment, textarget, service_id, level); 4944 if (0 == samples) {
4891 GLenum error = LOCAL_PEEK_GL_ERROR("glFramebufferTexture2D"); 4945 glFramebufferTexture2DEXT(target, attachment, textarget, service_id, level);
4946 } else {
4947 if (features().use_img_for_multisampled_render_to_texture) {
apatrick_chromium 2013/07/08 21:28:03 Does it need something like this? I can't find any
4948 glFramebufferTexture2DMultisampleIMG(target, attachment, textarget,
4949 service_id, level, samples);
4950 } else {
4951 glFramebufferTexture2DMultisampleEXT(target, attachment, textarget,
4952 service_id, level, samples);
4953 }
4954 }
4955 GLenum error = LOCAL_PEEK_GL_ERROR(name);
4892 if (error == GL_NO_ERROR) { 4956 if (error == GL_NO_ERROR) {
4893 framebuffer->AttachTexture(attachment, texture_ref, textarget, level); 4957 framebuffer->AttachTexture(attachment, texture_ref, textarget, level,
4958 samples);
4894 } 4959 }
4895 if (framebuffer == state_.bound_draw_framebuffer.get()) { 4960 if (framebuffer == state_.bound_draw_framebuffer.get()) {
4896 clear_state_dirty_ = true; 4961 clear_state_dirty_ = true;
4897 } 4962 }
4898 OnFboChanged(); 4963 OnFboChanged();
4899 } 4964 }
4900 4965
4901 void GLES2DecoderImpl::DoGetFramebufferAttachmentParameteriv( 4966 void GLES2DecoderImpl::DoGetFramebufferAttachmentParameteriv(
4902 GLenum target, GLenum attachment, GLenum pname, GLint* params) { 4967 GLenum target, GLenum attachment, GLenum pname, GLint* params) {
4903 Framebuffer* framebuffer = GetFramebufferInfoForTarget(target); 4968 Framebuffer* framebuffer = GetFramebufferInfoForTarget(target);
4904 if (!framebuffer) { 4969 if (!framebuffer) {
4905 LOCAL_SET_GL_ERROR( 4970 LOCAL_SET_GL_ERROR(
4906 GL_INVALID_OPERATION, 4971 GL_INVALID_OPERATION,
4907 "glFramebufferAttachmentParameteriv", "no framebuffer bound"); 4972 "glFramebufferAttachmentParameteriv", "no framebuffer bound");
4908 return; 4973 return;
4909 } 4974 }
4910 if (pname == GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME) { 4975 if (pname == GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME) {
4911 const Framebuffer::Attachment* attachment_object = 4976 const Framebuffer::Attachment* attachment_object =
4912 framebuffer->GetAttachment(attachment); 4977 framebuffer->GetAttachment(attachment);
4913 *params = attachment_object ? attachment_object->object_name() : 0; 4978 *params = attachment_object ? attachment_object->object_name() : 0;
4914 } else { 4979 } else {
4980 if (pname == GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT &&
4981 features().use_img_for_multisampled_render_to_texture) {
4982 pname = GL_TEXTURE_SAMPLES_IMG;
4983 }
4915 glGetFramebufferAttachmentParameterivEXT(target, attachment, pname, params); 4984 glGetFramebufferAttachmentParameterivEXT(target, attachment, pname, params);
4916 } 4985 }
4917 } 4986 }
4918 4987
4919 void GLES2DecoderImpl::DoGetRenderbufferParameteriv( 4988 void GLES2DecoderImpl::DoGetRenderbufferParameteriv(
4920 GLenum target, GLenum pname, GLint* params) { 4989 GLenum target, GLenum pname, GLint* params) {
4921 Renderbuffer* renderbuffer = 4990 Renderbuffer* renderbuffer =
4922 GetRenderbufferInfoForTarget(GL_RENDERBUFFER); 4991 GetRenderbufferInfoForTarget(GL_RENDERBUFFER);
4923 if (!renderbuffer) { 4992 if (!renderbuffer) {
4924 LOCAL_SET_GL_ERROR( 4993 LOCAL_SET_GL_ERROR(
4925 GL_INVALID_OPERATION, 4994 GL_INVALID_OPERATION,
4926 "glGetRenderbufferParameteriv", "no renderbuffer bound"); 4995 "glGetRenderbufferParameteriv", "no renderbuffer bound");
4927 return; 4996 return;
4928 } 4997 }
4929 switch (pname) { 4998 switch (pname) {
4930 case GL_RENDERBUFFER_INTERNAL_FORMAT: 4999 case GL_RENDERBUFFER_INTERNAL_FORMAT:
4931 *params = renderbuffer->internal_format(); 5000 *params = renderbuffer->internal_format();
4932 break; 5001 break;
4933 case GL_RENDERBUFFER_WIDTH: 5002 case GL_RENDERBUFFER_WIDTH:
4934 *params = renderbuffer->width(); 5003 *params = renderbuffer->width();
4935 break; 5004 break;
4936 case GL_RENDERBUFFER_HEIGHT: 5005 case GL_RENDERBUFFER_HEIGHT:
4937 *params = renderbuffer->height(); 5006 *params = renderbuffer->height();
4938 break; 5007 break;
5008 case GL_RENDERBUFFER_SAMPLES_EXT:
5009 if (features().use_img_for_multisampled_render_to_texture) {
5010 glGetRenderbufferParameterivEXT(target, GL_RENDERBUFFER_SAMPLES_IMG,
5011 params);
5012 } else {
5013 glGetRenderbufferParameterivEXT(target, GL_RENDERBUFFER_SAMPLES_EXT,
5014 params);
5015 }
4939 default: 5016 default:
4940 glGetRenderbufferParameterivEXT(target, pname, params); 5017 glGetRenderbufferParameterivEXT(target, pname, params);
4941 break; 5018 break;
4942 } 5019 }
4943 } 5020 }
4944 5021
4945 void GLES2DecoderImpl::DoBlitFramebufferEXT( 5022 void GLES2DecoderImpl::DoBlitFramebufferEXT(
4946 GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, 5023 GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
4947 GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, 5024 GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
4948 GLbitfield mask, GLenum filter) { 5025 GLbitfield mask, GLenum filter) {
(...skipping 15 matching lines...) Expand all
4964 } else { 5041 } else {
4965 glBlitFramebufferEXT( 5042 glBlitFramebufferEXT(
4966 srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); 5043 srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
4967 } 5044 }
4968 EnableDisable(GL_SCISSOR_TEST, state_.enable_flags.scissor_test); 5045 EnableDisable(GL_SCISSOR_TEST, state_.enable_flags.scissor_test);
4969 } 5046 }
4970 5047
4971 void GLES2DecoderImpl::DoRenderbufferStorageMultisample( 5048 void GLES2DecoderImpl::DoRenderbufferStorageMultisample(
4972 GLenum target, GLsizei samples, GLenum internalformat, 5049 GLenum target, GLsizei samples, GLenum internalformat,
4973 GLsizei width, GLsizei height) { 5050 GLsizei width, GLsizei height) {
4974 if (!features().chromium_framebuffer_multisample) { 5051 if (!features().chromium_framebuffer_multisample &&
5052 !features().multisampled_render_to_texture) {
4975 LOCAL_SET_GL_ERROR( 5053 LOCAL_SET_GL_ERROR(
4976 GL_INVALID_OPERATION, 5054 GL_INVALID_OPERATION,
4977 "glRenderbufferStorageMultisample", "function not available"); 5055 "glRenderbufferStorageMultisample", "function not available");
4978 return; 5056 return;
4979 } 5057 }
4980 5058
4981 Renderbuffer* renderbuffer = 5059 Renderbuffer* renderbuffer =
4982 GetRenderbufferInfoForTarget(GL_RENDERBUFFER); 5060 GetRenderbufferInfoForTarget(GL_RENDERBUFFER);
4983 if (!renderbuffer) { 5061 if (!renderbuffer) {
4984 LOCAL_SET_GL_ERROR( 5062 LOCAL_SET_GL_ERROR(
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
5017 "glRenderbufferStorageMultsample", "out of memory"); 5095 "glRenderbufferStorageMultsample", "out of memory");
5018 return; 5096 return;
5019 } 5097 }
5020 5098
5021 GLenum impl_format = RenderbufferManager:: 5099 GLenum impl_format = RenderbufferManager::
5022 InternalRenderbufferFormatToImplFormat(internalformat); 5100 InternalRenderbufferFormatToImplFormat(internalformat);
5023 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("glRenderbufferStorageMultisample"); 5101 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("glRenderbufferStorageMultisample");
5024 if (IsAngle()) { 5102 if (IsAngle()) {
5025 glRenderbufferStorageMultisampleANGLE( 5103 glRenderbufferStorageMultisampleANGLE(
5026 target, samples, impl_format, width, height); 5104 target, samples, impl_format, width, height);
5105 } else if (features().use_img_for_multisampled_render_to_texture) {
5106 glRenderbufferStorageMultisampleIMG(
5107 target, samples, impl_format, width, height);
5027 } else { 5108 } else {
5028 glRenderbufferStorageMultisampleEXT( 5109 glRenderbufferStorageMultisampleEXT(
5029 target, samples, impl_format, width, height); 5110 target, samples, impl_format, width, height);
5030 } 5111 }
5031 GLenum error = LOCAL_PEEK_GL_ERROR("glRenderbufferStorageMultisample"); 5112 GLenum error = LOCAL_PEEK_GL_ERROR("glRenderbufferStorageMultisample");
5032 if (error == GL_NO_ERROR) { 5113 if (error == GL_NO_ERROR) {
5033 // TODO(gman): If renderbuffers tracked which framebuffers they were 5114 // TODO(gman): If renderbuffers tracked which framebuffers they were
5034 // attached to we could just mark those framebuffers as not complete. 5115 // attached to we could just mark those framebuffers as not complete.
5035 framebuffer_manager()->IncFramebufferStateChangeCount(); 5116 framebuffer_manager()->IncFramebufferStateChangeCount();
5036 renderbuffer_manager()->SetInfo( 5117 renderbuffer_manager()->SetInfo(
(...skipping 5412 matching lines...) Expand 10 before | Expand all | Expand 10 after
10449 return error::kNoError; 10530 return error::kNoError;
10450 } 10531 }
10451 10532
10452 // Include the auto-generated part of this file. We split this because it means 10533 // Include the auto-generated part of this file. We split this because it means
10453 // we can easily edit the non-auto generated parts right here in this file 10534 // we can easily edit the non-auto generated parts right here in this file
10454 // instead of having to edit some template or the code generator. 10535 // instead of having to edit some template or the code generator.
10455 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" 10536 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h"
10456 10537
10457 } // namespace gles2 10538 } // namespace gles2
10458 } // namespace gpu 10539 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/framebuffer_manager_unittest.cc ('k') | gpu/command_buffer/service/gles2_cmd_decoder_autogen.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698