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

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

Issue 1034093002: Merge: gpu: Use GetUniformSetup computed result size. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@2272
Patch Set: Created 5 years, 9 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 1612 matching lines...) Expand 10 before | Expand all | Expand 10 after
1623 default: 1623 default:
1624 NOTREACHED(); 1624 NOTREACHED();
1625 break; 1625 break;
1626 } 1626 }
1627 return renderbuffer; 1627 return renderbuffer;
1628 } 1628 }
1629 1629
1630 // Validates the program and location for a glGetUniform call and returns 1630 // Validates the program and location for a glGetUniform call and returns
1631 // a SizeResult setup to receive the result. Returns true if glGetUniform 1631 // a SizeResult setup to receive the result. Returns true if glGetUniform
1632 // should be called. 1632 // should be called.
1633 bool GetUniformSetup( 1633 bool GetUniformSetup(GLuint program,
1634 GLuint program, GLint fake_location, 1634 GLint fake_location,
1635 uint32 shm_id, uint32 shm_offset, 1635 uint32 shm_id,
1636 error::Error* error, GLint* real_location, GLuint* service_id, 1636 uint32 shm_offset,
1637 void** result, GLenum* result_type); 1637 error::Error* error,
1638 GLint* real_location,
1639 GLuint* service_id,
1640 void** result,
1641 GLenum* result_type,
1642 GLsizei* result_size);
1638 1643
1639 void MaybeExitOnContextLost(); 1644 void MaybeExitOnContextLost();
1640 bool WasContextLost() override; 1645 bool WasContextLost() override;
1641 bool WasContextLostByRobustnessExtension() override; 1646 bool WasContextLostByRobustnessExtension() override;
1642 void LoseContext(uint32 reset_status) override; 1647 void LoseContext(uint32 reset_status) override;
1643 1648
1644 #if defined(OS_MACOSX) 1649 #if defined(OS_MACOSX)
1645 void ReleaseIOSurfaceForTexture(GLuint texture_id); 1650 void ReleaseIOSurfaceForTexture(GLuint texture_id);
1646 #endif 1651 #endif
1647 1652
(...skipping 7775 matching lines...) Expand 10 before | Expand all | Expand 10 after
9423 LOCAL_SET_GL_ERROR( 9428 LOCAL_SET_GL_ERROR(
9424 GL_INVALID_VALUE, "glGetVertexAttribPointerv", "index out of range."); 9429 GL_INVALID_VALUE, "glGetVertexAttribPointerv", "index out of range.");
9425 return error::kNoError; 9430 return error::kNoError;
9426 } 9431 }
9427 result->SetNumResults(1); 9432 result->SetNumResults(1);
9428 *result->GetData() = 9433 *result->GetData() =
9429 state_.vertex_attrib_manager->GetVertexAttrib(index)->offset(); 9434 state_.vertex_attrib_manager->GetVertexAttrib(index)->offset();
9430 return error::kNoError; 9435 return error::kNoError;
9431 } 9436 }
9432 9437
9433 bool GLES2DecoderImpl::GetUniformSetup( 9438 bool GLES2DecoderImpl::GetUniformSetup(GLuint program_id,
9434 GLuint program_id, GLint fake_location, 9439 GLint fake_location,
9435 uint32 shm_id, uint32 shm_offset, 9440 uint32 shm_id,
9436 error::Error* error, GLint* real_location, 9441 uint32 shm_offset,
9437 GLuint* service_id, void** result_pointer, GLenum* result_type) { 9442 error::Error* error,
9443 GLint* real_location,
9444 GLuint* service_id,
9445 void** result_pointer,
9446 GLenum* result_type,
9447 GLsizei* result_size) {
9438 DCHECK(error); 9448 DCHECK(error);
9439 DCHECK(service_id); 9449 DCHECK(service_id);
9440 DCHECK(result_pointer); 9450 DCHECK(result_pointer);
9441 DCHECK(result_type); 9451 DCHECK(result_type);
9442 DCHECK(real_location); 9452 DCHECK(real_location);
9443 *error = error::kNoError; 9453 *error = error::kNoError;
9444 // Make sure we have enough room for the result on failure. 9454 // Make sure we have enough room for the result on failure.
9445 SizedResult<GLint>* result; 9455 SizedResult<GLint>* result;
9446 result = GetSharedMemoryAs<SizedResult<GLint>*>( 9456 result = GetSharedMemoryAs<SizedResult<GLint>*>(
9447 shm_id, shm_offset, SizedResult<GLint>::ComputeSize(0)); 9457 shm_id, shm_offset, SizedResult<GLint>::ComputeSize(0));
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
9479 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "glGetUniform", "unknown type"); 9489 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "glGetUniform", "unknown type");
9480 return false; 9490 return false;
9481 } 9491 }
9482 result = GetSharedMemoryAs<SizedResult<GLint>*>( 9492 result = GetSharedMemoryAs<SizedResult<GLint>*>(
9483 shm_id, shm_offset, SizedResult<GLint>::ComputeSizeFromBytes(size)); 9493 shm_id, shm_offset, SizedResult<GLint>::ComputeSizeFromBytes(size));
9484 if (!result) { 9494 if (!result) {
9485 *error = error::kOutOfBounds; 9495 *error = error::kOutOfBounds;
9486 return false; 9496 return false;
9487 } 9497 }
9488 result->size = size; 9498 result->size = size;
9499 *result_size = size;
9489 *result_type = type; 9500 *result_type = type;
9490 return true; 9501 return true;
9491 } 9502 }
9492 9503
9493 error::Error GLES2DecoderImpl::HandleGetUniformiv(uint32 immediate_data_size, 9504 error::Error GLES2DecoderImpl::HandleGetUniformiv(uint32 immediate_data_size,
9494 const void* cmd_data) { 9505 const void* cmd_data) {
9495 const gles2::cmds::GetUniformiv& c = 9506 const gles2::cmds::GetUniformiv& c =
9496 *static_cast<const gles2::cmds::GetUniformiv*>(cmd_data); 9507 *static_cast<const gles2::cmds::GetUniformiv*>(cmd_data);
9497 GLuint program = c.program; 9508 GLuint program = c.program;
9498 GLint fake_location = c.location; 9509 GLint fake_location = c.location;
9499 GLuint service_id; 9510 GLuint service_id;
9500 GLenum result_type; 9511 GLenum result_type;
9512 GLsizei result_size;
9501 GLint real_location = -1; 9513 GLint real_location = -1;
9502 Error error; 9514 Error error;
9503 void* result; 9515 void* result;
9504 if (GetUniformSetup( 9516 if (GetUniformSetup(program, fake_location, c.params_shm_id,
9505 program, fake_location, c.params_shm_id, c.params_shm_offset, 9517 c.params_shm_offset, &error, &real_location, &service_id,
9506 &error, &real_location, &service_id, &result, &result_type)) { 9518 &result, &result_type, &result_size)) {
9507 glGetUniformiv( 9519 glGetUniformiv(
9508 service_id, real_location, 9520 service_id, real_location,
9509 static_cast<cmds::GetUniformiv::Result*>(result)->GetData()); 9521 static_cast<cmds::GetUniformiv::Result*>(result)->GetData());
9510 } 9522 }
9511 return error; 9523 return error;
9512 } 9524 }
9513 9525
9514 error::Error GLES2DecoderImpl::HandleGetUniformfv(uint32 immediate_data_size, 9526 error::Error GLES2DecoderImpl::HandleGetUniformfv(uint32 immediate_data_size,
9515 const void* cmd_data) { 9527 const void* cmd_data) {
9516 const gles2::cmds::GetUniformfv& c = 9528 const gles2::cmds::GetUniformfv& c =
9517 *static_cast<const gles2::cmds::GetUniformfv*>(cmd_data); 9529 *static_cast<const gles2::cmds::GetUniformfv*>(cmd_data);
9518 GLuint program = c.program; 9530 GLuint program = c.program;
9519 GLint fake_location = c.location; 9531 GLint fake_location = c.location;
9520 GLuint service_id; 9532 GLuint service_id;
9521 GLint real_location = -1; 9533 GLint real_location = -1;
9522 Error error; 9534 Error error;
9523 typedef cmds::GetUniformfv::Result Result; 9535 typedef cmds::GetUniformfv::Result Result;
9524 Result* result; 9536 Result* result;
9525 GLenum result_type; 9537 GLenum result_type;
9526 if (GetUniformSetup( 9538 GLsizei result_size;
9527 program, fake_location, c.params_shm_id, c.params_shm_offset, 9539 if (GetUniformSetup(program, fake_location, c.params_shm_id,
9528 &error, &real_location, &service_id, 9540 c.params_shm_offset, &error, &real_location, &service_id,
9529 reinterpret_cast<void**>(&result), &result_type)) { 9541 reinterpret_cast<void**>(&result), &result_type,
9542 &result_size)) {
9530 if (result_type == GL_BOOL || result_type == GL_BOOL_VEC2 || 9543 if (result_type == GL_BOOL || result_type == GL_BOOL_VEC2 ||
9531 result_type == GL_BOOL_VEC3 || result_type == GL_BOOL_VEC4) { 9544 result_type == GL_BOOL_VEC3 || result_type == GL_BOOL_VEC4) {
9532 GLsizei num_values = result->GetNumResults(); 9545 GLsizei num_values = result_size / sizeof(Result::Type);
9533 scoped_ptr<GLint[]> temp(new GLint[num_values]); 9546 scoped_ptr<GLint[]> temp(new GLint[num_values]);
9534 glGetUniformiv(service_id, real_location, temp.get()); 9547 glGetUniformiv(service_id, real_location, temp.get());
9535 GLfloat* dst = result->GetData(); 9548 GLfloat* dst = result->GetData();
9536 for (GLsizei ii = 0; ii < num_values; ++ii) { 9549 for (GLsizei ii = 0; ii < num_values; ++ii) {
9537 dst[ii] = (temp[ii] != 0); 9550 dst[ii] = (temp[ii] != 0);
9538 } 9551 }
9539 } else { 9552 } else {
9540 glGetUniformfv(service_id, real_location, result->GetData()); 9553 glGetUniformfv(service_id, real_location, result->GetData());
9541 } 9554 }
9542 } 9555 }
(...skipping 2099 matching lines...) Expand 10 before | Expand all | Expand 10 after
11642 } 11655 }
11643 } 11656 }
11644 11657
11645 // Include the auto-generated part of this file. We split this because it means 11658 // Include the auto-generated part of this file. We split this because it means
11646 // we can easily edit the non-auto generated parts right here in this file 11659 // we can easily edit the non-auto generated parts right here in this file
11647 // instead of having to edit some template or the code generator. 11660 // instead of having to edit some template or the code generator.
11648 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" 11661 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h"
11649 11662
11650 } // namespace gles2 11663 } // namespace gles2
11651 } // namespace gpu 11664 } // namespace gpu
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698