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

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

Issue 1309743005: command_buffer: Implement EXT_blend_func_extended (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@new-05-path-fragment-input-gen
Patch Set: Created 5 years, 3 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 <cmath> 10 #include <cmath>
(...skipping 1252 matching lines...) Expand 10 before | Expand all | Expand 10 after
1263 // Creates a vertex attrib manager for the given vertex array. 1263 // Creates a vertex attrib manager for the given vertex array.
1264 scoped_refptr<VertexAttribManager> CreateVertexAttribManager( 1264 scoped_refptr<VertexAttribManager> CreateVertexAttribManager(
1265 GLuint client_id, 1265 GLuint client_id,
1266 GLuint service_id, 1266 GLuint service_id,
1267 bool client_visible) { 1267 bool client_visible) {
1268 return vertex_array_manager()->CreateVertexAttribManager( 1268 return vertex_array_manager()->CreateVertexAttribManager(
1269 client_id, service_id, group_->max_vertex_attribs(), client_visible); 1269 client_id, service_id, group_->max_vertex_attribs(), client_visible);
1270 } 1270 }
1271 1271
1272 void DoBindAttribLocation(GLuint client_id, GLuint index, const char* name); 1272 void DoBindAttribLocation(GLuint client_id, GLuint index, const char* name);
1273
1274 error::Error DoBindFragDataLocation(GLuint program_id,
1275 GLuint colorName,
1276 const char* name);
1277
1278 error::Error DoBindFragDataLocationIndexed(GLuint program_id,
1279 GLuint colorName,
1280 GLuint index,
1281 const char* name);
1282
1273 void DoBindUniformLocationCHROMIUM( 1283 void DoBindUniformLocationCHROMIUM(
1274 GLuint client_id, GLint location, const char* name); 1284 GLuint client_id, GLint location, const char* name);
1275 1285
1276 error::Error GetAttribLocationHelper( 1286 error::Error GetAttribLocationHelper(
1277 GLuint client_id, uint32 location_shm_id, uint32 location_shm_offset, 1287 GLuint client_id, uint32 location_shm_id, uint32 location_shm_offset,
1278 const std::string& name_str); 1288 const std::string& name_str);
1279 1289
1280 error::Error GetUniformLocationHelper( 1290 error::Error GetUniformLocationHelper(
1281 GLuint client_id, uint32 location_shm_id, uint32 location_shm_offset, 1291 GLuint client_id, uint32 location_shm_id, uint32 location_shm_offset,
1282 const std::string& name_str); 1292 const std::string& name_str);
1283 1293
1284 error::Error GetFragDataLocationHelper( 1294 error::Error GetFragDataLocationHelper(
1285 GLuint client_id, uint32 location_shm_id, uint32 location_shm_offset, 1295 GLuint client_id, uint32 location_shm_id, uint32 location_shm_offset,
1286 const std::string& name_str); 1296 const std::string& name_str);
1287 1297
1298 error::Error GetFragDataIndexHelper(GLuint program_id,
1299 uint32 index_shm_id,
1300 uint32 index_shm_offset,
1301 const std::string& name_str);
1302
1288 // Wrapper for glShaderSource. 1303 // Wrapper for glShaderSource.
1289 void DoShaderSource( 1304 void DoShaderSource(
1290 GLuint client_id, GLsizei count, const char** data, const GLint* length); 1305 GLuint client_id, GLsizei count, const char** data, const GLint* length);
1291 1306
1292 // Wrapper for glTransformFeedbackVaryings. 1307 // Wrapper for glTransformFeedbackVaryings.
1293 void DoTransformFeedbackVaryings( 1308 void DoTransformFeedbackVaryings(
1294 GLuint client_program_id, GLsizei count, const char* const* varyings, 1309 GLuint client_program_id, GLsizei count, const char* const* varyings,
1295 GLenum buffer_mode); 1310 GLenum buffer_mode);
1296 1311
1297 // Clear any textures used by the current program. 1312 // Clear any textures used by the current program.
(...skipping 1942 matching lines...) Expand 10 before | Expand all | Expand 10 after
3240 resources.MaxVaryingVectors = group_->max_varying_vectors(); 3255 resources.MaxVaryingVectors = group_->max_varying_vectors();
3241 resources.MaxVertexTextureImageUnits = 3256 resources.MaxVertexTextureImageUnits =
3242 group_->max_vertex_texture_image_units(); 3257 group_->max_vertex_texture_image_units();
3243 resources.MaxCombinedTextureImageUnits = group_->max_texture_units(); 3258 resources.MaxCombinedTextureImageUnits = group_->max_texture_units();
3244 resources.MaxTextureImageUnits = group_->max_texture_image_units(); 3259 resources.MaxTextureImageUnits = group_->max_texture_image_units();
3245 resources.MaxFragmentUniformVectors = 3260 resources.MaxFragmentUniformVectors =
3246 group_->max_fragment_uniform_vectors(); 3261 group_->max_fragment_uniform_vectors();
3247 resources.MaxDrawBuffers = group_->max_draw_buffers(); 3262 resources.MaxDrawBuffers = group_->max_draw_buffers();
3248 resources.MaxExpressionComplexity = 256; 3263 resources.MaxExpressionComplexity = 256;
3249 resources.MaxCallStackDepth = 256; 3264 resources.MaxCallStackDepth = 256;
3265 resources.MaxDualSourceDrawBuffers = group_->max_dual_source_draw_buffers();
3250 3266
3251 GLint range[2] = { 0, 0 }; 3267 GLint range[2] = { 0, 0 };
3252 GLint precision = 0; 3268 GLint precision = 0;
3253 GetShaderPrecisionFormatImpl(GL_FRAGMENT_SHADER, GL_HIGH_FLOAT, 3269 GetShaderPrecisionFormatImpl(GL_FRAGMENT_SHADER, GL_HIGH_FLOAT,
3254 range, &precision); 3270 range, &precision);
3255 resources.FragmentPrecisionHigh = 3271 resources.FragmentPrecisionHigh =
3256 PrecisionMeetsSpecForHighpFloat(range[0], range[1], precision); 3272 PrecisionMeetsSpecForHighpFloat(range[0], range[1], precision);
3257 3273
3258 if (IsWebGLContext()) { 3274 if (IsWebGLContext()) {
3259 resources.OES_standard_derivatives = derivatives_explicitly_enabled_; 3275 resources.OES_standard_derivatives = derivatives_explicitly_enabled_;
(...skipping 12 matching lines...) Expand all
3272 resources.OES_EGL_image_external = 3288 resources.OES_EGL_image_external =
3273 features().oes_egl_image_external ? 1 : 0; 3289 features().oes_egl_image_external ? 1 : 0;
3274 resources.EXT_draw_buffers = 3290 resources.EXT_draw_buffers =
3275 features().ext_draw_buffers ? 1 : 0; 3291 features().ext_draw_buffers ? 1 : 0;
3276 resources.EXT_frag_depth = 3292 resources.EXT_frag_depth =
3277 features().ext_frag_depth ? 1 : 0; 3293 features().ext_frag_depth ? 1 : 0;
3278 resources.EXT_shader_texture_lod = 3294 resources.EXT_shader_texture_lod =
3279 features().ext_shader_texture_lod ? 1 : 0; 3295 features().ext_shader_texture_lod ? 1 : 0;
3280 resources.NV_draw_buffers = 3296 resources.NV_draw_buffers =
3281 features().nv_draw_buffers ? 1 : 0; 3297 features().nv_draw_buffers ? 1 : 0;
3298 resources.EXT_blend_func_extended =
3299 features().ext_blend_func_extended ? 1 : 0;
3282 } 3300 }
3283 3301
3284 ShShaderSpec shader_spec; 3302 ShShaderSpec shader_spec;
3285 switch (context_type_) { 3303 switch (context_type_) {
3286 case CONTEXT_TYPE_WEBGL1: 3304 case CONTEXT_TYPE_WEBGL1:
3287 shader_spec = SH_WEBGL_SPEC; 3305 shader_spec = SH_WEBGL_SPEC;
3288 break; 3306 break;
3289 case CONTEXT_TYPE_WEBGL2: 3307 case CONTEXT_TYPE_WEBGL2:
3290 shader_spec = SH_WEBGL2_SPEC; 3308 shader_spec = SH_WEBGL2_SPEC;
3291 break; 3309 break;
(...skipping 2150 matching lines...) Expand 10 before | Expand all | Expand 10 after
5442 *params = 0; 5460 *params = 0;
5443 } 5461 }
5444 } 5462 }
5445 return true; 5463 return true;
5446 case GL_BIND_GENERATES_RESOURCE_CHROMIUM: 5464 case GL_BIND_GENERATES_RESOURCE_CHROMIUM:
5447 *num_written = 1; 5465 *num_written = 1;
5448 if (params) { 5466 if (params) {
5449 params[0] = group_->bind_generates_resource() ? 1 : 0; 5467 params[0] = group_->bind_generates_resource() ? 1 : 0;
5450 } 5468 }
5451 return true; 5469 return true;
5470 case GL_MAX_DUAL_SOURCE_DRAW_BUFFERS:
5471 *num_written = 1;
5472 if (params) {
5473 params[0] = group_->max_dual_source_draw_buffers();
5474 }
5475 return true;
5452 default: 5476 default:
5453 if (pname >= GL_DRAW_BUFFER0_ARB && 5477 if (pname >= GL_DRAW_BUFFER0_ARB &&
5454 pname < GL_DRAW_BUFFER0_ARB + group_->max_draw_buffers()) { 5478 pname < GL_DRAW_BUFFER0_ARB + group_->max_draw_buffers()) {
5455 *num_written = 1; 5479 *num_written = 1;
5456 if (params) { 5480 if (params) {
5457 Framebuffer* framebuffer = 5481 Framebuffer* framebuffer =
5458 GetFramebufferInfoForTarget(GL_FRAMEBUFFER); 5482 GetFramebufferInfoForTarget(GL_FRAMEBUFFER);
5459 if (framebuffer) { 5483 if (framebuffer) {
5460 params[0] = framebuffer->GetDrawBuffer(pname); 5484 params[0] = framebuffer->GetDrawBuffer(pname);
5461 } else { // backbuffer 5485 } else { // backbuffer
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
5622 return error::kInvalidArguments; 5646 return error::kInvalidArguments;
5623 } 5647 }
5624 std::string name_str; 5648 std::string name_str;
5625 if (!bucket->GetAsString(&name_str)) { 5649 if (!bucket->GetAsString(&name_str)) {
5626 return error::kInvalidArguments; 5650 return error::kInvalidArguments;
5627 } 5651 }
5628 DoBindAttribLocation(program, index, name_str.c_str()); 5652 DoBindAttribLocation(program, index, name_str.c_str());
5629 return error::kNoError; 5653 return error::kNoError;
5630 } 5654 }
5631 5655
5656 error::Error GLES2DecoderImpl::DoBindFragDataLocation(GLuint program_id,
5657 GLuint colorName,
5658 const char* name) {
5659 if (!unsafe_es3_apis_enabled())
Zhenyao Mo 2015/08/31 21:12:30 No need for this as the extension can be applied t
Kimmo Kinnunen 2015/09/24 13:16:27 No, these functions are not specified in ext_bfe f
5660 return error::kUnknownCommand;
5661
5662 const char kFunctionName[] = "glBindFragDataLocationEXT";
5663 if (!StringIsValidForGLES(name)) {
5664 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, kFunctionName, "Invalid character");
5665 return error::kNoError;
5666 }
5667 if (ProgramManager::IsInvalidPrefix(name, strlen(name))) {
5668 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, kFunctionName, "reserved prefix");
5669 return error::kNoError;
5670 }
5671 if (colorName >= group_->max_draw_buffers()) {
5672 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, kFunctionName,
5673 "colorName out of range");
5674 return error::kNoError;
5675 }
5676 Program* program = GetProgramInfoNotShader(program_id, kFunctionName);
5677 if (!program) {
5678 return error::kNoError;
5679 }
5680 DCHECK(!IsWebGLContext());
5681 // Note: the name is passed directly, since names are never hashed for
5682 // non-WebGL context. Also the
5683 // potential built-in names can not be controlled by the client, since they
5684 // will be overridden if
5685 // used.
5686 glBindFragDataLocation(program->service_id(), colorName, name);
5687 return error::kNoError;
5688 }
5689 error::Error GLES2DecoderImpl::HandleBindFragDataLocationEXTBucket(
5690 uint32 immediate_data_size,
5691 const void* cmd_data) {
5692 const gles2::cmds::BindFragDataLocationEXTBucket& c =
5693 *static_cast<const gles2::cmds::BindFragDataLocationEXTBucket*>(cmd_data);
5694 GLuint program = static_cast<GLuint>(c.program);
5695 GLuint colorNumber = static_cast<GLint>(c.colorNumber);
5696 Bucket* bucket = GetBucket(c.name_bucket_id);
5697 if (!bucket || bucket->size() == 0) {
5698 return error::kInvalidArguments;
5699 }
5700 std::string name_str;
5701 if (!bucket->GetAsString(&name_str)) {
5702 return error::kInvalidArguments;
5703 }
5704 return DoBindFragDataLocation(program, colorNumber, name_str.c_str());
5705 }
5706
5707 error::Error GLES2DecoderImpl::DoBindFragDataLocationIndexed(GLuint program_id,
5708 GLuint colorName,
5709 GLuint index,
5710 const char* name) {
5711 if (!unsafe_es3_apis_enabled())
Zhenyao Mo 2015/08/31 21:12:30 No need for this.
Kimmo Kinnunen 2015/09/24 13:16:27 Not specified for ES2. For this usecase, ES2 versi
5712 return error::kUnknownCommand;
5713
5714 const char kFunctionName[] = "glBindFragDataLocationIndexEXT";
5715 if (!StringIsValidForGLES(name)) {
5716 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, kFunctionName, "Invalid character");
5717 return error::kNoError;
5718 }
5719 if (ProgramManager::IsInvalidPrefix(name, strlen(name))) {
5720 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, kFunctionName, "reserved prefix");
5721 return error::kNoError;
5722 }
5723 if ((index == 0 && colorName >= group_->max_draw_buffers()) ||
5724 (index == 1 && colorName >= group_->max_dual_source_draw_buffers())) {
Zhenyao Mo 2015/08/31 21:12:30 I think it should be index >= 1 instead of index =
Kimmo Kinnunen 2015/09/24 13:16:27 Nope. In the extension, it says index must be 0 or
5725 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, kFunctionName,
5726 "colorName out of range for the color index");
5727 return error::kNoError;
5728 }
5729 Program* program = GetProgramInfoNotShader(program_id, kFunctionName);
5730 if (!program) {
5731 return error::kNoError;
5732 }
5733 DCHECK(!IsWebGLContext());
5734 // Note: the name is passed directly, since names are never hashed for
5735 // non-WebGL context. Also the
5736 // potential built-in names can not be controlled by the client, since they
5737 // will be overridden if
5738 // used.
5739 glBindFragDataLocationIndexed(program->service_id(), colorName, index, name);
5740 return error::kNoError;
5741 }
5742
5743 error::Error GLES2DecoderImpl::HandleBindFragDataLocationIndexedEXTBucket(
5744 uint32 immediate_data_size,
5745 const void* cmd_data) {
5746 const gles2::cmds::BindFragDataLocationIndexedEXTBucket& c =
5747 *static_cast<const gles2::cmds::BindFragDataLocationIndexedEXTBucket*>(
5748 cmd_data);
5749 GLuint program = static_cast<GLuint>(c.program);
5750 GLuint colorNumber = static_cast<GLint>(c.colorNumber);
5751 GLuint index = static_cast<GLint>(c.index);
5752 Bucket* bucket = GetBucket(c.name_bucket_id);
5753 if (!bucket || bucket->size() == 0) {
5754 return error::kInvalidArguments;
5755 }
5756 std::string name_str;
5757 if (!bucket->GetAsString(&name_str)) {
5758 return error::kInvalidArguments;
5759 }
5760 return DoBindFragDataLocationIndexed(program, colorNumber, index,
5761 name_str.c_str());
5762 }
5763
5632 void GLES2DecoderImpl::DoBindUniformLocationCHROMIUM( 5764 void GLES2DecoderImpl::DoBindUniformLocationCHROMIUM(
5633 GLuint program_id, GLint location, const char* name) { 5765 GLuint program_id, GLint location, const char* name) {
5634 if (!StringIsValidForGLES(name)) { 5766 if (!StringIsValidForGLES(name)) {
5635 LOCAL_SET_GL_ERROR( 5767 LOCAL_SET_GL_ERROR(
5636 GL_INVALID_VALUE, 5768 GL_INVALID_VALUE,
5637 "glBindUniformLocationCHROMIUM", "Invalid character"); 5769 "glBindUniformLocationCHROMIUM", "Invalid character");
5638 return; 5770 return;
5639 } 5771 }
5640 if (ProgramManager::IsInvalidPrefix(name, strlen(name))) { 5772 if (ProgramManager::IsInvalidPrefix(name, strlen(name))) {
5641 LOCAL_SET_GL_ERROR( 5773 LOCAL_SET_GL_ERROR(
(...skipping 3533 matching lines...) Expand 10 before | Expand all | Expand 10 after
9175 result->SetNumResults(count); 9307 result->SetNumResults(count);
9176 } else { 9308 } else {
9177 LOCAL_SET_GL_ERROR(error, "GetUniformIndices", ""); 9309 LOCAL_SET_GL_ERROR(error, "GetUniformIndices", "");
9178 } 9310 }
9179 return error::kNoError; 9311 return error::kNoError;
9180 } 9312 }
9181 9313
9182 error::Error GLES2DecoderImpl::GetFragDataLocationHelper( 9314 error::Error GLES2DecoderImpl::GetFragDataLocationHelper(
9183 GLuint client_id, uint32 location_shm_id, uint32 location_shm_offset, 9315 GLuint client_id, uint32 location_shm_id, uint32 location_shm_offset,
9184 const std::string& name_str) { 9316 const std::string& name_str) {
9317 const char kFunctionName[] = "glGetFragDataLocation";
9185 GLint* location = GetSharedMemoryAs<GLint*>( 9318 GLint* location = GetSharedMemoryAs<GLint*>(
9186 location_shm_id, location_shm_offset, sizeof(GLint)); 9319 location_shm_id, location_shm_offset, sizeof(GLint));
9187 if (!location) { 9320 if (!location) {
9188 return error::kOutOfBounds; 9321 return error::kOutOfBounds;
9189 } 9322 }
9190 // Require the client to init this incase the context is lost and we are no 9323 // Require the client to init this incase the context is lost and we are no
9191 // longer executing commands. 9324 // longer executing commands.
9192 if (*location != -1) { 9325 if (*location != -1) {
9193 return error::kGenericError; 9326 return error::kGenericError;
9194 } 9327 }
9195 Program* program = GetProgramInfoNotShader( 9328 Program* program = GetProgramInfoNotShader(client_id, kFunctionName);
9196 client_id, "glGetFragDataLocation");
9197 if (!program) { 9329 if (!program) {
9198 return error::kNoError; 9330 return error::kNoError;
9199 } 9331 }
9200 *location = glGetFragDataLocation(program->service_id(), name_str.c_str()); 9332 if (!program->IsValid()) {
9333 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, kFunctionName,
9334 "program not linked");
9335 return error::kNoError;
9336 }
9337
9338 *location = program->GetFragDataLocation(name_str);
9201 return error::kNoError; 9339 return error::kNoError;
9202 } 9340 }
9203 9341
9204 error::Error GLES2DecoderImpl::HandleGetFragDataLocation( 9342 error::Error GLES2DecoderImpl::HandleGetFragDataLocation(
9205 uint32 immediate_data_size, 9343 uint32 immediate_data_size,
9206 const void* cmd_data) { 9344 const void* cmd_data) {
9207 if (!unsafe_es3_apis_enabled()) 9345 if (!unsafe_es3_apis_enabled())
9208 return error::kUnknownCommand; 9346 return error::kUnknownCommand;
9209 const gles2::cmds::GetFragDataLocation& c = 9347 const gles2::cmds::GetFragDataLocation& c =
9210 *static_cast<const gles2::cmds::GetFragDataLocation*>(cmd_data); 9348 *static_cast<const gles2::cmds::GetFragDataLocation*>(cmd_data);
9211 Bucket* bucket = GetBucket(c.name_bucket_id); 9349 Bucket* bucket = GetBucket(c.name_bucket_id);
9212 if (!bucket) { 9350 if (!bucket) {
9213 return error::kInvalidArguments; 9351 return error::kInvalidArguments;
9214 } 9352 }
9215 std::string name_str; 9353 std::string name_str;
9216 if (!bucket->GetAsString(&name_str)) { 9354 if (!bucket->GetAsString(&name_str)) {
9217 return error::kInvalidArguments; 9355 return error::kInvalidArguments;
9218 } 9356 }
9219 return GetFragDataLocationHelper( 9357 return GetFragDataLocationHelper(
9220 c.program, c.location_shm_id, c.location_shm_offset, name_str); 9358 c.program, c.location_shm_id, c.location_shm_offset, name_str);
9221 } 9359 }
9222 9360
9361 error::Error GLES2DecoderImpl::GetFragDataIndexHelper(
9362 GLuint program_id,
9363 uint32 index_shm_id,
9364 uint32 index_shm_offset,
9365 const std::string& name_str) {
9366 const char kFunctionName[] = "glGetFragDataIndexEXT";
9367 GLint* index =
9368 GetSharedMemoryAs<GLint*>(index_shm_id, index_shm_offset, sizeof(GLint));
9369 if (!index) {
9370 return error::kOutOfBounds;
9371 }
9372 // Require the client to init this incase the context is lost and we are no
9373 // longer executing commands.
9374 if (*index != -1) {
9375 return error::kGenericError;
9376 }
9377 Program* program = GetProgramInfoNotShader(program_id, kFunctionName);
9378 if (!program) {
9379 return error::kNoError;
9380 }
9381 if (!program->IsValid()) {
9382 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, kFunctionName,
9383 "program not linked");
9384 return error::kNoError;
9385 }
9386
9387 *index = program->GetFragDataIndex(name_str);
9388 return error::kNoError;
9389 }
9390
9391 error::Error GLES2DecoderImpl::HandleGetFragDataIndexEXT(
9392 uint32 immediate_data_size,
9393 const void* cmd_data) {
9394 if (!unsafe_es3_apis_enabled())
9395 return error::kUnknownCommand;
9396 const gles2::cmds::GetFragDataIndexEXT& c =
9397 *static_cast<const gles2::cmds::GetFragDataIndexEXT*>(cmd_data);
9398 Bucket* bucket = GetBucket(c.name_bucket_id);
9399 if (!bucket) {
9400 return error::kInvalidArguments;
9401 }
9402 std::string name_str;
9403 if (!bucket->GetAsString(&name_str)) {
9404 return error::kInvalidArguments;
9405 }
9406 return GetFragDataIndexHelper(c.program, c.index_shm_id, c.index_shm_offset,
9407
Zhenyao Mo 2015/08/31 21:12:30 nit: remove the empty line.
Kimmo Kinnunen 2015/09/24 13:16:27 Done.
9408 name_str);
9409 }
9410
9223 error::Error GLES2DecoderImpl::HandleGetUniformBlockIndex( 9411 error::Error GLES2DecoderImpl::HandleGetUniformBlockIndex(
9224 uint32 immediate_data_size, const void* cmd_data) { 9412 uint32 immediate_data_size, const void* cmd_data) {
9225 if (!unsafe_es3_apis_enabled()) 9413 if (!unsafe_es3_apis_enabled())
9226 return error::kUnknownCommand; 9414 return error::kUnknownCommand;
9227 const gles2::cmds::GetUniformBlockIndex& c = 9415 const gles2::cmds::GetUniformBlockIndex& c =
9228 *static_cast<const gles2::cmds::GetUniformBlockIndex*>(cmd_data); 9416 *static_cast<const gles2::cmds::GetUniformBlockIndex*>(cmd_data);
9229 Bucket* bucket = GetBucket(c.name_bucket_id); 9417 Bucket* bucket = GetBucket(c.name_bucket_id);
9230 if (!bucket) { 9418 if (!bucket) {
9231 return error::kInvalidArguments; 9419 return error::kInvalidArguments;
9232 } 9420 }
(...skipping 6311 matching lines...) Expand 10 before | Expand all | Expand 10 after
15544 return error::kNoError; 15732 return error::kNoError;
15545 } 15733 }
15546 15734
15547 // Include the auto-generated part of this file. We split this because it means 15735 // Include the auto-generated part of this file. We split this because it means
15548 // we can easily edit the non-auto generated parts right here in this file 15736 // we can easily edit the non-auto generated parts right here in this file
15549 // instead of having to edit some template or the code generator. 15737 // instead of having to edit some template or the code generator.
15550 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" 15738 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h"
15551 15739
15552 } // namespace gles2 15740 } // namespace gles2
15553 } // namespace gpu 15741 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698