| Index: gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers.cc
|
| diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers.cc b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers.cc
|
| index a1398ed00face271b0ae54410cde388f2c2989b6..b6d5c8dd73be1bd1cfea2bd3824ec069934d9625 100644
|
| --- a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers.cc
|
| +++ b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers.cc
|
| @@ -846,15 +846,20 @@ error::Error GLES2DecoderPassthroughImpl::HandleReadPixels(
|
| GLsizei height = static_cast<GLsizei>(c.height);
|
| GLenum format = static_cast<GLenum>(c.format);
|
| GLenum type = static_cast<GLenum>(c.type);
|
| + uint32_t pixels_shm_id = c.pixels_shm_id;
|
| + uint32_t pixels_shm_offset = c.pixels_shm_offset;
|
|
|
| uint8_t* pixels = nullptr;
|
| unsigned int buffer_size = 0;
|
| if (c.pixels_shm_id != 0) {
|
| pixels = GetSharedMemoryAndSizeAs<uint8_t*>(
|
| - c.pixels_shm_id, c.pixels_shm_offset, 0, &buffer_size);
|
| + pixels_shm_id, pixels_shm_offset, 0, &buffer_size);
|
| if (!pixels) {
|
| return error::kOutOfBounds;
|
| }
|
| + } else {
|
| + pixels =
|
| + reinterpret_cast<uint8_t*>(static_cast<intptr_t>(pixels_shm_offset));
|
| }
|
|
|
| GLsizei bufsize = buffer_size;
|
| @@ -940,22 +945,19 @@ error::Error GLES2DecoderPassthroughImpl::HandleTexImage2D(
|
| unsigned int buffer_size = 0;
|
| const void* pixels = nullptr;
|
|
|
| - if (pixels_shm_id != 0 || pixels_shm_offset != 0) {
|
| + if (pixels_shm_id != 0) {
|
| pixels = GetSharedMemoryAndSizeAs<uint8_t*>(
|
| pixels_shm_id, pixels_shm_offset, 0, &buffer_size);
|
| if (!pixels) {
|
| return error::kOutOfBounds;
|
| }
|
| + } else {
|
| + pixels =
|
| + reinterpret_cast<const void*>(static_cast<intptr_t>(pixels_shm_offset));
|
| }
|
|
|
| - error::Error error =
|
| - DoTexImage2D(target, level, internal_format, width, height, border,
|
| - format, type, buffer_size, pixels);
|
| - if (error != error::kNoError) {
|
| - return error;
|
| - }
|
| -
|
| - return error::kNoError;
|
| + return DoTexImage2D(target, level, internal_format, width, height, border,
|
| + format, type, buffer_size, pixels);
|
| }
|
|
|
| error::Error GLES2DecoderPassthroughImpl::HandleTexImage3D(
|
| @@ -978,22 +980,19 @@ error::Error GLES2DecoderPassthroughImpl::HandleTexImage3D(
|
| unsigned int buffer_size = 0;
|
| const void* pixels = nullptr;
|
|
|
| - if (pixels_shm_id != 0 || pixels_shm_offset != 0) {
|
| + if (pixels_shm_id != 0) {
|
| pixels = GetSharedMemoryAndSizeAs<uint8_t*>(
|
| pixels_shm_id, pixels_shm_offset, 0, &buffer_size);
|
| if (!pixels) {
|
| return error::kOutOfBounds;
|
| }
|
| + } else {
|
| + pixels =
|
| + reinterpret_cast<const void*>(static_cast<intptr_t>(pixels_shm_offset));
|
| }
|
|
|
| - error::Error error =
|
| - DoTexImage3D(target, level, internal_format, width, height, depth, border,
|
| - format, type, buffer_size, pixels);
|
| - if (error != error::kNoError) {
|
| - return error;
|
| - }
|
| -
|
| - return error::kNoError;
|
| + return DoTexImage3D(target, level, internal_format, width, height, depth,
|
| + border, format, type, buffer_size, pixels);
|
| }
|
|
|
| error::Error GLES2DecoderPassthroughImpl::HandleTexSubImage2D(
|
| @@ -1015,22 +1014,19 @@ error::Error GLES2DecoderPassthroughImpl::HandleTexSubImage2D(
|
| unsigned int buffer_size = 0;
|
| const void* pixels = nullptr;
|
|
|
| - if (pixels_shm_id != 0 || pixels_shm_offset != 0) {
|
| + if (pixels_shm_id != 0) {
|
| pixels = GetSharedMemoryAndSizeAs<uint8_t*>(
|
| pixels_shm_id, pixels_shm_offset, 0, &buffer_size);
|
| if (!pixels) {
|
| return error::kOutOfBounds;
|
| }
|
| + } else {
|
| + pixels =
|
| + reinterpret_cast<const void*>(static_cast<intptr_t>(pixels_shm_offset));
|
| }
|
|
|
| - error::Error error =
|
| - DoTexSubImage2D(target, level, xoffset, yoffset, width, height, format,
|
| - type, buffer_size, pixels);
|
| - if (error != error::kNoError) {
|
| - return error;
|
| - }
|
| -
|
| - return error::kNoError;
|
| + return DoTexSubImage2D(target, level, xoffset, yoffset, width, height, format,
|
| + type, buffer_size, pixels);
|
| }
|
|
|
| error::Error GLES2DecoderPassthroughImpl::HandleTexSubImage3D(
|
| @@ -1054,22 +1050,19 @@ error::Error GLES2DecoderPassthroughImpl::HandleTexSubImage3D(
|
| unsigned int buffer_size = 0;
|
| const void* pixels = nullptr;
|
|
|
| - if (pixels_shm_id != 0 || pixels_shm_offset != 0) {
|
| + if (pixels_shm_id != 0) {
|
| pixels = GetSharedMemoryAndSizeAs<uint8_t*>(
|
| pixels_shm_id, pixels_shm_offset, 0, &buffer_size);
|
| if (!pixels) {
|
| return error::kOutOfBounds;
|
| }
|
| + } else {
|
| + pixels =
|
| + reinterpret_cast<const void*>(static_cast<intptr_t>(pixels_shm_offset));
|
| }
|
|
|
| - error::Error error =
|
| - DoTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height,
|
| - depth, format, type, buffer_size, pixels);
|
| - if (error != error::kNoError) {
|
| - return error;
|
| - }
|
| -
|
| - return error::kNoError;
|
| + return DoTexSubImage3D(target, level, xoffset, yoffset, zoffset, width,
|
| + height, depth, format, type, buffer_size, pixels);
|
| }
|
|
|
| error::Error GLES2DecoderPassthroughImpl::HandleUniformBlockBinding(
|
| @@ -2518,8 +2511,8 @@ error::Error GLES2DecoderPassthroughImpl::HandleCompressedTexImage2DBucket(
|
| uint32_t image_size = bucket->size();
|
| const void* data = bucket->GetData(0, image_size);
|
| DCHECK(data || !image_size);
|
| - return DoCompressedTexImage2D(
|
| - target, level, internal_format, width, height, border, image_size, data);
|
| + return DoCompressedTexImage2D(target, level, internal_format, width, height,
|
| + border, image_size, image_size, data);
|
| }
|
|
|
| error::Error GLES2DecoderPassthroughImpl::HandleCompressedTexImage2D(
|
| @@ -2533,11 +2526,24 @@ error::Error GLES2DecoderPassthroughImpl::HandleCompressedTexImage2D(
|
| GLsizei height = static_cast<GLsizei>(c.height);
|
| GLint border = static_cast<GLint>(c.border);
|
| GLsizei image_size = static_cast<GLsizei>(c.imageSize);
|
| - // TODO(geofflang): Handle PIXEL_UNPACK_BUFFER case.
|
| - const void* data = GetSharedMemoryAs<const void*>(
|
| - c.data_shm_id, c.data_shm_offset, image_size);
|
| - return DoCompressedTexImage2D(
|
| - target, level, internal_format, width, height, border, image_size, data);
|
| + uint32_t data_shm_id = c.data_shm_id;
|
| + uint32_t data_shm_offset = c.data_shm_offset;
|
| +
|
| + unsigned int data_size = 0;
|
| + const void* data = nullptr;
|
| + if (data_shm_id != 0) {
|
| + data = GetSharedMemoryAndSizeAs<const void*>(data_shm_id, data_shm_offset,
|
| + image_size, &data_size);
|
| + if (data == nullptr) {
|
| + return error::kOutOfBounds;
|
| + }
|
| + } else {
|
| + data =
|
| + reinterpret_cast<const void*>(static_cast<intptr_t>(data_shm_offset));
|
| + }
|
| +
|
| + return DoCompressedTexImage2D(target, level, internal_format, width, height,
|
| + border, image_size, data_size, data);
|
| }
|
|
|
| error::Error GLES2DecoderPassthroughImpl::HandleCompressedTexSubImage2DBucket(
|
| @@ -2559,8 +2565,9 @@ error::Error GLES2DecoderPassthroughImpl::HandleCompressedTexSubImage2DBucket(
|
| uint32_t image_size = bucket->size();
|
| const void* data = bucket->GetData(0, image_size);
|
| DCHECK(data || !image_size);
|
| - return DoCompressedTexSubImage2D(
|
| - target, level, xoffset, yoffset, width, height, format, image_size, data);
|
| + return DoCompressedTexSubImage2D(target, level, xoffset, yoffset, width,
|
| + height, format, image_size, image_size,
|
| + data);
|
| }
|
|
|
| error::Error GLES2DecoderPassthroughImpl::HandleCompressedTexSubImage2D(
|
| @@ -2576,11 +2583,24 @@ error::Error GLES2DecoderPassthroughImpl::HandleCompressedTexSubImage2D(
|
| GLsizei height = static_cast<GLsizei>(c.height);
|
| GLenum format = static_cast<GLenum>(c.format);
|
| GLsizei image_size = static_cast<GLsizei>(c.imageSize);
|
| - // TODO(geofflang): Handle PIXEL_UNPACK_BUFFER case.
|
| - const void* data = GetSharedMemoryAs<const void*>(
|
| - c.data_shm_id, c.data_shm_offset, image_size);
|
| - return DoCompressedTexSubImage2D(
|
| - target, level, xoffset, yoffset, width, height, format, image_size, data);
|
| + uint32_t data_shm_id = c.data_shm_id;
|
| + uint32_t data_shm_offset = c.data_shm_offset;
|
| +
|
| + unsigned int data_size = 0;
|
| + const void* data = nullptr;
|
| + if (data_shm_id != 0) {
|
| + data = GetSharedMemoryAndSizeAs<const void*>(data_shm_id, data_shm_offset,
|
| + image_size, &data_size);
|
| + if (data == nullptr) {
|
| + return error::kOutOfBounds;
|
| + }
|
| + } else {
|
| + data =
|
| + reinterpret_cast<const void*>(static_cast<intptr_t>(data_shm_offset));
|
| + }
|
| +
|
| + return DoCompressedTexSubImage2D(target, level, xoffset, yoffset, width,
|
| + height, format, image_size, data_size, data);
|
| }
|
|
|
| error::Error GLES2DecoderPassthroughImpl::HandleCompressedTexImage3DBucket(
|
| @@ -2603,7 +2623,7 @@ error::Error GLES2DecoderPassthroughImpl::HandleCompressedTexImage3DBucket(
|
| const void* data = bucket->GetData(0, image_size);
|
| DCHECK(data || !image_size);
|
| return DoCompressedTexImage3D(target, level, internal_format, width, height,
|
| - depth, border, image_size, data);
|
| + depth, border, image_size, image_size, data);
|
| }
|
|
|
| error::Error GLES2DecoderPassthroughImpl::HandleCompressedTexImage3D(
|
| @@ -2618,11 +2638,24 @@ error::Error GLES2DecoderPassthroughImpl::HandleCompressedTexImage3D(
|
| GLsizei depth = static_cast<GLsizei>(c.depth);
|
| GLint border = static_cast<GLint>(c.border);
|
| GLsizei image_size = static_cast<GLsizei>(c.imageSize);
|
| - // TODO(geofflang): Handle PIXEL_UNPACK_BUFFER case.
|
| - const void* data = GetSharedMemoryAs<const void*>(
|
| - c.data_shm_id, c.data_shm_offset, image_size);
|
| + uint32_t data_shm_id = c.data_shm_id;
|
| + uint32_t data_shm_offset = c.data_shm_offset;
|
| +
|
| + unsigned int data_size = 0;
|
| + const void* data = nullptr;
|
| + if (data_shm_id != 0) {
|
| + data = GetSharedMemoryAndSizeAs<const void*>(data_shm_id, data_shm_offset,
|
| + image_size, &data_size);
|
| + if (data == nullptr) {
|
| + return error::kOutOfBounds;
|
| + }
|
| + } else {
|
| + data =
|
| + reinterpret_cast<const void*>(static_cast<intptr_t>(data_shm_offset));
|
| + }
|
| +
|
| return DoCompressedTexImage3D(target, level, internal_format, width, height,
|
| - depth, border, image_size, data);
|
| + depth, border, image_size, data_size, data);
|
| }
|
|
|
| error::Error GLES2DecoderPassthroughImpl::HandleCompressedTexSubImage3DBucket(
|
| @@ -2646,9 +2679,9 @@ error::Error GLES2DecoderPassthroughImpl::HandleCompressedTexSubImage3DBucket(
|
| uint32_t image_size = bucket->size();
|
| const void* data = bucket->GetData(0, image_size);
|
| DCHECK(data || !image_size);
|
| - return DoCompressedTexSubImage3D(
|
| - target, level, xoffset, yoffset, zoffset, width, height, depth,
|
| - format, image_size, data);
|
| + return DoCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset,
|
| + width, height, depth, format, image_size,
|
| + image_size, data);
|
| }
|
|
|
| error::Error GLES2DecoderPassthroughImpl::HandleCompressedTexSubImage3D(
|
| @@ -2666,12 +2699,25 @@ error::Error GLES2DecoderPassthroughImpl::HandleCompressedTexSubImage3D(
|
| GLsizei depth = static_cast<GLsizei>(c.depth);
|
| GLenum format = static_cast<GLenum>(c.format);
|
| GLsizei image_size = static_cast<GLsizei>(c.imageSize);
|
| - // TODO(geofflang): Handle PIXEL_UNPACK_BUFFER case.
|
| - const void* data = GetSharedMemoryAs<const void*>(
|
| - c.data_shm_id, c.data_shm_offset, image_size);
|
| - return DoCompressedTexSubImage3D(
|
| - target, level, xoffset, yoffset, zoffset, width, height, depth,
|
| - format, image_size, data);
|
| + uint32_t data_shm_id = c.data_shm_id;
|
| + uint32_t data_shm_offset = c.data_shm_offset;
|
| +
|
| + unsigned int data_size = 0;
|
| + const void* data = nullptr;
|
| + if (data_shm_id != 0) {
|
| + data = GetSharedMemoryAndSizeAs<const void*>(data_shm_id, data_shm_offset,
|
| + image_size, &data_size);
|
| + if (data == nullptr) {
|
| + return error::kOutOfBounds;
|
| + }
|
| + } else {
|
| + data =
|
| + reinterpret_cast<const void*>(static_cast<intptr_t>(data_shm_offset));
|
| + }
|
| +
|
| + return DoCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset,
|
| + width, height, depth, format, image_size,
|
| + data_size, data);
|
| }
|
|
|
| } // namespace gles2
|
|
|