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

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: moved ahead to TOT 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 3087 matching lines...) Expand 10 before | Expand all | Expand 10 after
4354 } 4369 }
4355 4370
4356 bool GLES2DecoderImpl::GetNumValuesReturnedForGLGet( 4371 bool GLES2DecoderImpl::GetNumValuesReturnedForGLGet(
4357 GLenum pname, GLsizei* num_values) { 4372 GLenum pname, GLsizei* num_values) {
4358 if (state_.GetStateAsGLint(pname, NULL, num_values)) { 4373 if (state_.GetStateAsGLint(pname, NULL, num_values)) {
4359 return true; 4374 return true;
4360 } 4375 }
4361 return GetHelper(pname, NULL, num_values); 4376 return GetHelper(pname, NULL, num_values);
4362 } 4377 }
4363 4378
4379 GLenum GLES2DecoderImpl::AdjustGetPname(GLenum pname) {
4380 if (GL_MAX_SAMPLES == pname &&
4381 features().use_img_for_multisampled_render_to_texture) {
4382 return GL_MAX_SAMPLES_IMG;
4383 }
4384 return pname;
4385 }
4386
4364 void GLES2DecoderImpl::DoGetBooleanv(GLenum pname, GLboolean* params) { 4387 void GLES2DecoderImpl::DoGetBooleanv(GLenum pname, GLboolean* params) {
4365 DCHECK(params); 4388 DCHECK(params);
4366 GLsizei num_written = 0; 4389 GLsizei num_written = 0;
4367 if (GetNumValuesReturnedForGLGet(pname, &num_written)) { 4390 if (GetNumValuesReturnedForGLGet(pname, &num_written)) {
4368 scoped_ptr<GLint[]> values(new GLint[num_written]); 4391 scoped_ptr<GLint[]> values(new GLint[num_written]);
4369 if (!state_.GetStateAsGLint(pname, values.get(), &num_written)) { 4392 if (!state_.GetStateAsGLint(pname, values.get(), &num_written)) {
4370 GetHelper(pname, values.get(), &num_written); 4393 GetHelper(pname, values.get(), &num_written);
4371 } 4394 }
4372 for (GLsizei ii = 0; ii < num_written; ++ii) { 4395 for (GLsizei ii = 0; ii < num_written; ++ii) {
4373 params[ii] = static_cast<GLboolean>(values[ii]); 4396 params[ii] = static_cast<GLboolean>(values[ii]);
4374 } 4397 }
4375 } else { 4398 } else {
4399 pname = AdjustGetPname(pname);
4376 glGetBooleanv(pname, params); 4400 glGetBooleanv(pname, params);
4377 } 4401 }
4378 } 4402 }
4379 4403
4380 void GLES2DecoderImpl::DoGetFloatv(GLenum pname, GLfloat* params) { 4404 void GLES2DecoderImpl::DoGetFloatv(GLenum pname, GLfloat* params) {
4381 DCHECK(params); 4405 DCHECK(params);
4382 GLsizei num_written = 0; 4406 GLsizei num_written = 0;
4383 if (!state_.GetStateAsGLfloat(pname, params, &num_written)) { 4407 if (!state_.GetStateAsGLfloat(pname, params, &num_written)) {
4384 if (GetHelper(pname, NULL, &num_written)) { 4408 if (GetHelper(pname, NULL, &num_written)) {
4385 scoped_ptr<GLint[]> values(new GLint[num_written]); 4409 scoped_ptr<GLint[]> values(new GLint[num_written]);
4386 GetHelper(pname, values.get(), &num_written); 4410 GetHelper(pname, values.get(), &num_written);
4387 for (GLsizei ii = 0; ii < num_written; ++ii) { 4411 for (GLsizei ii = 0; ii < num_written; ++ii) {
4388 params[ii] = static_cast<GLfloat>(values[ii]); 4412 params[ii] = static_cast<GLfloat>(values[ii]);
4389 } 4413 }
4390 } else { 4414 } else {
4415 pname = AdjustGetPname(pname);
4391 glGetFloatv(pname, params); 4416 glGetFloatv(pname, params);
4392 } 4417 }
4393 } 4418 }
4394 } 4419 }
4395 4420
4396 void GLES2DecoderImpl::DoGetIntegerv(GLenum pname, GLint* params) { 4421 void GLES2DecoderImpl::DoGetIntegerv(GLenum pname, GLint* params) {
4397 DCHECK(params); 4422 DCHECK(params);
4398 GLsizei num_written; 4423 GLsizei num_written;
4399 if (!state_.GetStateAsGLint(pname, params, &num_written) && 4424 if (!state_.GetStateAsGLint(pname, params, &num_written) &&
4400 !GetHelper(pname, params, &num_written)) { 4425 !GetHelper(pname, params, &num_written)) {
4426 pname = AdjustGetPname(pname);
4401 glGetIntegerv(pname, params); 4427 glGetIntegerv(pname, params);
4402 } 4428 }
4403 } 4429 }
4404 4430
4405 void GLES2DecoderImpl::DoGetProgramiv( 4431 void GLES2DecoderImpl::DoGetProgramiv(
4406 GLuint program_id, GLenum pname, GLint* params) { 4432 GLuint program_id, GLenum pname, GLint* params) {
4407 Program* program = GetProgramInfoNotShader(program_id, "glGetProgramiv"); 4433 Program* program = GetProgramInfoNotShader(program_id, "glGetProgramiv");
4408 if (!program) { 4434 if (!program) {
4409 return; 4435 return;
4410 } 4436 }
(...skipping 455 matching lines...) Expand 10 before | Expand all | Expand 10 after
4866 GLenum completeness = framebuffer->IsPossiblyComplete(); 4892 GLenum completeness = framebuffer->IsPossiblyComplete();
4867 if (completeness != GL_FRAMEBUFFER_COMPLETE) { 4893 if (completeness != GL_FRAMEBUFFER_COMPLETE) {
4868 return completeness; 4894 return completeness;
4869 } 4895 }
4870 return framebuffer->GetStatus(texture_manager(), target); 4896 return framebuffer->GetStatus(texture_manager(), target);
4871 } 4897 }
4872 4898
4873 void GLES2DecoderImpl::DoFramebufferTexture2D( 4899 void GLES2DecoderImpl::DoFramebufferTexture2D(
4874 GLenum target, GLenum attachment, GLenum textarget, 4900 GLenum target, GLenum attachment, GLenum textarget,
4875 GLuint client_texture_id, GLint level) { 4901 GLuint client_texture_id, GLint level) {
4902 DoFramebufferTexture2DCommon(
4903 "glFramebufferTexture2D", target, attachment,
4904 textarget, client_texture_id, level, 0);
4905 }
4906
4907 void GLES2DecoderImpl::DoFramebufferTexture2DMultisample(
4908 GLenum target, GLenum attachment, GLenum textarget,
4909 GLuint client_texture_id, GLint level, GLsizei samples) {
4910 if (!features().multisampled_render_to_texture) {
4911 LOCAL_SET_GL_ERROR(
4912 GL_INVALID_OPERATION,
4913 "glFramebufferTexture2DMultisample", "function not available");
4914 return;
4915 }
4916 DoFramebufferTexture2DCommon(
4917 "glFramebufferTexture2DMultisample", target, attachment,
4918 textarget, client_texture_id, level, samples);
4919 }
4920
4921 void GLES2DecoderImpl::DoFramebufferTexture2DCommon(
4922 const char* name, GLenum target, GLenum attachment, GLenum textarget,
4923 GLuint client_texture_id, GLint level, GLsizei samples) {
4924 if (samples > renderbuffer_manager()->max_samples()) {
4925 LOCAL_SET_GL_ERROR(
4926 GL_INVALID_VALUE,
4927 "glFramebufferTexture2DMultisample", "samples too large");
4928 return;
4929 }
4876 Framebuffer* framebuffer = GetFramebufferInfoForTarget(target); 4930 Framebuffer* framebuffer = GetFramebufferInfoForTarget(target);
4877 if (!framebuffer) { 4931 if (!framebuffer) {
4878 LOCAL_SET_GL_ERROR( 4932 LOCAL_SET_GL_ERROR(
4879 GL_INVALID_OPERATION, 4933 GL_INVALID_OPERATION,
4880 "glFramebufferTexture2D", "no framebuffer bound."); 4934 name, "no framebuffer bound.");
4881 return; 4935 return;
4882 } 4936 }
4883 GLuint service_id = 0; 4937 GLuint service_id = 0;
4884 TextureRef* texture_ref = NULL; 4938 TextureRef* texture_ref = NULL;
4885 if (client_texture_id) { 4939 if (client_texture_id) {
4886 texture_ref = GetTexture(client_texture_id); 4940 texture_ref = GetTexture(client_texture_id);
4887 if (!texture_ref) { 4941 if (!texture_ref) {
4888 LOCAL_SET_GL_ERROR( 4942 LOCAL_SET_GL_ERROR(
4889 GL_INVALID_OPERATION, 4943 GL_INVALID_OPERATION,
4890 "glFramebufferTexture2D", "unknown texture_ref"); 4944 name, "unknown texture_ref");
4891 return; 4945 return;
4892 } 4946 }
4893 service_id = texture_ref->service_id(); 4947 service_id = texture_ref->service_id();
4894 } 4948 }
4895 4949
4896 if (!texture_manager()->ValidForTarget(textarget, level, 0, 0, 1)) { 4950 if (!texture_manager()->ValidForTarget(textarget, level, 0, 0, 1)) {
4897 LOCAL_SET_GL_ERROR( 4951 LOCAL_SET_GL_ERROR(
4898 GL_INVALID_VALUE, 4952 GL_INVALID_VALUE,
4899 "glFramebufferTexture2D", "level out of range"); 4953 name, "level out of range");
4900 return; 4954 return;
4901 } 4955 }
4902 4956
4903 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("glFramebufferTexture2D"); 4957 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER(name);
4904 glFramebufferTexture2DEXT(target, attachment, textarget, service_id, level); 4958 if (0 == samples) {
4905 GLenum error = LOCAL_PEEK_GL_ERROR("glFramebufferTexture2D"); 4959 glFramebufferTexture2DEXT(target, attachment, textarget, service_id, level);
4960 } else {
4961 if (features().use_img_for_multisampled_render_to_texture) {
4962 glFramebufferTexture2DMultisampleIMG(target, attachment, textarget,
4963 service_id, level, samples);
4964 } else {
4965 glFramebufferTexture2DMultisampleEXT(target, attachment, textarget,
4966 service_id, level, samples);
4967 }
4968 }
4969 GLenum error = LOCAL_PEEK_GL_ERROR(name);
4906 if (error == GL_NO_ERROR) { 4970 if (error == GL_NO_ERROR) {
4907 framebuffer->AttachTexture(attachment, texture_ref, textarget, level); 4971 framebuffer->AttachTexture(attachment, texture_ref, textarget, level,
4972 samples);
4908 } 4973 }
4909 if (framebuffer == state_.bound_draw_framebuffer.get()) { 4974 if (framebuffer == state_.bound_draw_framebuffer.get()) {
4910 clear_state_dirty_ = true; 4975 clear_state_dirty_ = true;
4911 } 4976 }
4912 OnFboChanged(); 4977 OnFboChanged();
4913 } 4978 }
4914 4979
4915 void GLES2DecoderImpl::DoGetFramebufferAttachmentParameteriv( 4980 void GLES2DecoderImpl::DoGetFramebufferAttachmentParameteriv(
4916 GLenum target, GLenum attachment, GLenum pname, GLint* params) { 4981 GLenum target, GLenum attachment, GLenum pname, GLint* params) {
4917 Framebuffer* framebuffer = GetFramebufferInfoForTarget(target); 4982 Framebuffer* framebuffer = GetFramebufferInfoForTarget(target);
4918 if (!framebuffer) { 4983 if (!framebuffer) {
4919 LOCAL_SET_GL_ERROR( 4984 LOCAL_SET_GL_ERROR(
4920 GL_INVALID_OPERATION, 4985 GL_INVALID_OPERATION,
4921 "glFramebufferAttachmentParameteriv", "no framebuffer bound"); 4986 "glFramebufferAttachmentParameteriv", "no framebuffer bound");
4922 return; 4987 return;
4923 } 4988 }
4924 if (pname == GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME) { 4989 if (pname == GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME) {
4925 const Framebuffer::Attachment* attachment_object = 4990 const Framebuffer::Attachment* attachment_object =
4926 framebuffer->GetAttachment(attachment); 4991 framebuffer->GetAttachment(attachment);
4927 *params = attachment_object ? attachment_object->object_name() : 0; 4992 *params = attachment_object ? attachment_object->object_name() : 0;
4928 } else { 4993 } else {
4994 if (pname == GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT &&
4995 features().use_img_for_multisampled_render_to_texture) {
4996 pname = GL_TEXTURE_SAMPLES_IMG;
4997 }
4929 glGetFramebufferAttachmentParameterivEXT(target, attachment, pname, params); 4998 glGetFramebufferAttachmentParameterivEXT(target, attachment, pname, params);
4930 } 4999 }
4931 } 5000 }
4932 5001
4933 void GLES2DecoderImpl::DoGetRenderbufferParameteriv( 5002 void GLES2DecoderImpl::DoGetRenderbufferParameteriv(
4934 GLenum target, GLenum pname, GLint* params) { 5003 GLenum target, GLenum pname, GLint* params) {
4935 Renderbuffer* renderbuffer = 5004 Renderbuffer* renderbuffer =
4936 GetRenderbufferInfoForTarget(GL_RENDERBUFFER); 5005 GetRenderbufferInfoForTarget(GL_RENDERBUFFER);
4937 if (!renderbuffer) { 5006 if (!renderbuffer) {
4938 LOCAL_SET_GL_ERROR( 5007 LOCAL_SET_GL_ERROR(
4939 GL_INVALID_OPERATION, 5008 GL_INVALID_OPERATION,
4940 "glGetRenderbufferParameteriv", "no renderbuffer bound"); 5009 "glGetRenderbufferParameteriv", "no renderbuffer bound");
4941 return; 5010 return;
4942 } 5011 }
4943 switch (pname) { 5012 switch (pname) {
4944 case GL_RENDERBUFFER_INTERNAL_FORMAT: 5013 case GL_RENDERBUFFER_INTERNAL_FORMAT:
4945 *params = renderbuffer->internal_format(); 5014 *params = renderbuffer->internal_format();
4946 break; 5015 break;
4947 case GL_RENDERBUFFER_WIDTH: 5016 case GL_RENDERBUFFER_WIDTH:
4948 *params = renderbuffer->width(); 5017 *params = renderbuffer->width();
4949 break; 5018 break;
4950 case GL_RENDERBUFFER_HEIGHT: 5019 case GL_RENDERBUFFER_HEIGHT:
4951 *params = renderbuffer->height(); 5020 *params = renderbuffer->height();
4952 break; 5021 break;
5022 case GL_RENDERBUFFER_SAMPLES_EXT:
5023 if (features().use_img_for_multisampled_render_to_texture) {
5024 glGetRenderbufferParameterivEXT(target, GL_RENDERBUFFER_SAMPLES_IMG,
5025 params);
5026 } else {
5027 glGetRenderbufferParameterivEXT(target, GL_RENDERBUFFER_SAMPLES_EXT,
5028 params);
5029 }
4953 default: 5030 default:
4954 glGetRenderbufferParameterivEXT(target, pname, params); 5031 glGetRenderbufferParameterivEXT(target, pname, params);
4955 break; 5032 break;
4956 } 5033 }
4957 } 5034 }
4958 5035
4959 void GLES2DecoderImpl::DoBlitFramebufferEXT( 5036 void GLES2DecoderImpl::DoBlitFramebufferEXT(
4960 GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, 5037 GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
4961 GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, 5038 GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
4962 GLbitfield mask, GLenum filter) { 5039 GLbitfield mask, GLenum filter) {
(...skipping 15 matching lines...) Expand all
4978 } else { 5055 } else {
4979 glBlitFramebufferEXT( 5056 glBlitFramebufferEXT(
4980 srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); 5057 srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
4981 } 5058 }
4982 EnableDisable(GL_SCISSOR_TEST, state_.enable_flags.scissor_test); 5059 EnableDisable(GL_SCISSOR_TEST, state_.enable_flags.scissor_test);
4983 } 5060 }
4984 5061
4985 void GLES2DecoderImpl::DoRenderbufferStorageMultisample( 5062 void GLES2DecoderImpl::DoRenderbufferStorageMultisample(
4986 GLenum target, GLsizei samples, GLenum internalformat, 5063 GLenum target, GLsizei samples, GLenum internalformat,
4987 GLsizei width, GLsizei height) { 5064 GLsizei width, GLsizei height) {
4988 if (!features().chromium_framebuffer_multisample) { 5065 if (!features().chromium_framebuffer_multisample &&
5066 !features().multisampled_render_to_texture) {
4989 LOCAL_SET_GL_ERROR( 5067 LOCAL_SET_GL_ERROR(
4990 GL_INVALID_OPERATION, 5068 GL_INVALID_OPERATION,
4991 "glRenderbufferStorageMultisample", "function not available"); 5069 "glRenderbufferStorageMultisample", "function not available");
4992 return; 5070 return;
4993 } 5071 }
4994 5072
4995 Renderbuffer* renderbuffer = 5073 Renderbuffer* renderbuffer =
4996 GetRenderbufferInfoForTarget(GL_RENDERBUFFER); 5074 GetRenderbufferInfoForTarget(GL_RENDERBUFFER);
4997 if (!renderbuffer) { 5075 if (!renderbuffer) {
4998 LOCAL_SET_GL_ERROR( 5076 LOCAL_SET_GL_ERROR(
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
5031 "glRenderbufferStorageMultsample", "out of memory"); 5109 "glRenderbufferStorageMultsample", "out of memory");
5032 return; 5110 return;
5033 } 5111 }
5034 5112
5035 GLenum impl_format = RenderbufferManager:: 5113 GLenum impl_format = RenderbufferManager::
5036 InternalRenderbufferFormatToImplFormat(internalformat); 5114 InternalRenderbufferFormatToImplFormat(internalformat);
5037 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("glRenderbufferStorageMultisample"); 5115 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("glRenderbufferStorageMultisample");
5038 if (IsAngle()) { 5116 if (IsAngle()) {
5039 glRenderbufferStorageMultisampleANGLE( 5117 glRenderbufferStorageMultisampleANGLE(
5040 target, samples, impl_format, width, height); 5118 target, samples, impl_format, width, height);
5119 } else if (features().use_img_for_multisampled_render_to_texture) {
5120 glRenderbufferStorageMultisampleIMG(
5121 target, samples, impl_format, width, height);
5041 } else { 5122 } else {
5042 glRenderbufferStorageMultisampleEXT( 5123 glRenderbufferStorageMultisampleEXT(
5043 target, samples, impl_format, width, height); 5124 target, samples, impl_format, width, height);
5044 } 5125 }
5045 GLenum error = LOCAL_PEEK_GL_ERROR("glRenderbufferStorageMultisample"); 5126 GLenum error = LOCAL_PEEK_GL_ERROR("glRenderbufferStorageMultisample");
5046 if (error == GL_NO_ERROR) { 5127 if (error == GL_NO_ERROR) {
5047 // TODO(gman): If renderbuffers tracked which framebuffers they were 5128 // TODO(gman): If renderbuffers tracked which framebuffers they were
5048 // attached to we could just mark those framebuffers as not complete. 5129 // attached to we could just mark those framebuffers as not complete.
5049 framebuffer_manager()->IncFramebufferStateChangeCount(); 5130 framebuffer_manager()->IncFramebufferStateChangeCount();
5050 renderbuffer_manager()->SetInfo( 5131 renderbuffer_manager()->SetInfo(
(...skipping 5417 matching lines...) Expand 10 before | Expand all | Expand 10 after
10468 return error::kNoError; 10549 return error::kNoError;
10469 } 10550 }
10470 10551
10471 // Include the auto-generated part of this file. We split this because it means 10552 // Include the auto-generated part of this file. We split this because it means
10472 // we can easily edit the non-auto generated parts right here in this file 10553 // we can easily edit the non-auto generated parts right here in this file
10473 // instead of having to edit some template or the code generator. 10554 // instead of having to edit some template or the code generator.
10474 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" 10555 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h"
10475 10556
10476 } // namespace gles2 10557 } // namespace gles2
10477 } // namespace gpu 10558 } // 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