Chromium Code Reviews| Index: gpu/command_buffer/common/gles2_cmd_utils.cc |
| diff --git a/gpu/command_buffer/common/gles2_cmd_utils.cc b/gpu/command_buffer/common/gles2_cmd_utils.cc |
| index 8b547fa2455f68e447ec69ab26fec23e01dd7f16..1e8a49be5f02310220de4935c8dcd97daabd13f0 100644 |
| --- a/gpu/command_buffer/common/gles2_cmd_utils.cc |
| +++ b/gpu/command_buffer/common/gles2_cmd_utils.cc |
| @@ -543,28 +543,21 @@ bool GLES2Util::ComputeImageDataSizes( |
| if (!SafeMultiplyUint32(height, depth, &num_of_rows)) { |
| return false; |
| } |
| - if (num_of_rows > 1) { |
| - uint32 temp; |
| - if (!SafeAddUint32(row_size, unpack_alignment - 1, &temp)) { |
| - return false; |
| - } |
| - uint32 padded_row_size = (temp / unpack_alignment) * unpack_alignment; |
| - uint32 size_of_all_but_last_row; |
| - if (!SafeMultiplyUint32((num_of_rows - 1), padded_row_size, |
| - &size_of_all_but_last_row)) { |
| - return false; |
| - } |
| - if (!SafeAddUint32(size_of_all_but_last_row, row_size, size)) { |
| - return false; |
| - } |
| - if (ret_padded_row_size) { |
| - *ret_padded_row_size = padded_row_size; |
| - } |
| - } else { |
| - *size = row_size; |
| - if (ret_padded_row_size) { |
| - *ret_padded_row_size = row_size; |
| - } |
| + uint32 temp; |
| + if (!SafeAddUint32(row_size, unpack_alignment - 1, &temp)) { |
| + return false; |
| + } |
| + uint32 padded_row_size = (temp / unpack_alignment) * unpack_alignment; |
| + uint32 size_of_all_but_last_row; |
| + if (!SafeMultiplyUint32((num_of_rows - 1), padded_row_size, |
| + &size_of_all_but_last_row)) { |
| + return false; |
| + } |
| + if (!SafeAddUint32(size_of_all_but_last_row, row_size, size)) { |
| + return false; |
| + } |
| + if (ret_padded_row_size) { |
| + *ret_padded_row_size = padded_row_size; |
| } |
| if (ret_unpadded_row_size) { |
| *ret_unpadded_row_size = row_size; |
| @@ -573,6 +566,49 @@ bool GLES2Util::ComputeImageDataSizes( |
| return true; |
| } |
| +bool GLES2Util::ComputeImageDataSizes( |
| + int width, int height, int depth, int format, int type, |
| + const PixelStoreParams& params, |
| + uint32_t* size, uint32_t* unpadded_row_size, |
| + uint32_t* padded_row_size, uint32_t* skip_size) { |
| + int actual_width = params.row_length > 0 ? params.row_length : width; |
|
piman
2015/12/08 00:06:10
So, technically, the code (whether client-side, or
Zhenyao Mo
2015/12/08 23:39:17
Done.
However, I think we still need the ContextS
|
| + int actual_height = params.image_height > 0 ? params.image_height : height; |
| + if (!ComputeImageDataSizes(actual_width, actual_height, depth, format, type, |
| + params.alignment, |
| + size, unpadded_row_size, padded_row_size)) { |
| + return false; |
| + } |
| + |
| + uint32 total_skip_size = 0; |
| + if (params.skip_images > 0) { |
| + uint32 image_size; |
| + if (!SafeMultiplyUint32(actual_height, *padded_row_size, &image_size)) |
| + return false; |
| + if (!SafeMultiplyUint32(image_size, params.skip_images, &total_skip_size)) |
| + return false; |
| + } |
| + if (params.skip_rows > 0) { |
| + uint32 temp; |
| + if (!SafeMultiplyUint32(*padded_row_size, params.skip_rows, &temp)) |
| + return false; |
| + if (!SafeAddUint32(total_skip_size, temp, &total_skip_size)) |
| + return false; |
| + } |
| + if (params.skip_pixels > 0) { |
| + uint32 bytes_per_group = ComputeImageGroupSize(format, type); |
| + uint32 temp; |
| + if (!SafeMultiplyUint32(bytes_per_group, params.skip_pixels, &temp)) |
| + return false; |
| + if (!SafeAddUint32(total_skip_size, temp, &total_skip_size)) |
| + return false; |
| + } |
| + if (!SafeAddUint32(*size, total_skip_size, size)) |
|
piman
2015/12/08 00:06:10
I think this is more confusing than useful. Only |
Zhenyao Mo
2015/12/08 23:39:17
OK, I won't write into size, but we still wanna ch
|
| + return false; |
| + if (skip_size) |
| + *skip_size = total_skip_size; |
| + return true; |
| +} |
| + |
| size_t GLES2Util::RenderbufferBytesPerPixel(int format) { |
| switch (format) { |
| case GL_STENCIL_INDEX8: |