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

Unified Diff: gpu/command_buffer/service/gles2_cmd_decoder.cc

Issue 851503003: Update from https://crrev.com/311076 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: gpu/command_buffer/service/gles2_cmd_decoder.cc
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc
index 7f9166e3ab9e2bbdd7d6c1872bd5dd43289c11c2..0870c36b889bcd266ba85c623819e3152fa514b6 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -2129,7 +2129,7 @@ bool BackTexture::AllocateStorage(
ScopedTextureBinder binder(state_, id_, GL_TEXTURE_2D);
uint32 image_size = 0;
GLES2Util::ComputeImageDataSizes(
- size.width(), size.height(), format, GL_UNSIGNED_BYTE, 8, &image_size,
+ size.width(), size.height(), 1, format, GL_UNSIGNED_BYTE, 8, &image_size,
NULL, NULL);
if (!memory_tracker_.EnsureGPUMemoryAvailable(image_size)) {
@@ -7682,7 +7682,7 @@ void GLES2DecoderImpl::FinishReadPixels(
}
}
GLES2Util::ComputeImageDataSizes(
- width, height, format, type, state_.pack_alignment, &pixels_size,
+ width, height, 1, format, type, state_.pack_alignment, &pixels_size,
NULL, NULL);
void* pixels = GetSharedMemoryAs<void*>(
c.pixels_shm_id, c.pixels_shm_offset, pixels_size);
@@ -7729,7 +7729,7 @@ void GLES2DecoderImpl::FinishReadPixels(
uint32 unpadded_row_size;
uint32 padded_row_size;
if (!GLES2Util::ComputeImageDataSizes(
- width, 2, format, type, state_.pack_alignment, &temp_size,
+ width, 2, 1, format, type, state_.pack_alignment, &temp_size,
&unpadded_row_size, &padded_row_size)) {
return;
}
@@ -7792,7 +7792,7 @@ error::Error GLES2DecoderImpl::HandleReadPixels(uint32 immediate_data_size,
typedef cmds::ReadPixels::Result Result;
uint32 pixels_size;
if (!GLES2Util::ComputeImageDataSizes(
- width, height, format, type, state_.pack_alignment, &pixels_size,
+ width, height, 1, format, type, state_.pack_alignment, &pixels_size,
NULL, NULL)) {
return error::kOutOfBounds;
}
@@ -7868,7 +7868,7 @@ error::Error GLES2DecoderImpl::HandleReadPixels(uint32 immediate_data_size,
uint32 unpadded_row_size;
uint32 padded_row_size;
if (!GLES2Util::ComputeImageDataSizes(
- width, 2, format, type, state_.pack_alignment, &temp_size,
+ width, 2, 1, format, type, state_.pack_alignment, &temp_size,
&unpadded_row_size, &padded_row_size)) {
LOCAL_SET_GL_ERROR(
GL_INVALID_VALUE, "glReadPixels", "dimensions out of range");
@@ -7878,8 +7878,8 @@ error::Error GLES2DecoderImpl::HandleReadPixels(uint32 immediate_data_size,
GLint dest_x_offset = std::max(-x, 0);
uint32 dest_row_offset;
if (!GLES2Util::ComputeImageDataSizes(
- dest_x_offset, 1, format, type, state_.pack_alignment, &dest_row_offset,
- NULL, NULL)) {
+ dest_x_offset, 1, 1, format, type, state_.pack_alignment,
+ &dest_row_offset, NULL, NULL)) {
LOCAL_SET_GL_ERROR(
GL_INVALID_VALUE, "glReadPixels", "dimensions out of range");
return error::kNoError;
@@ -8321,7 +8321,7 @@ bool GLES2DecoderImpl::ClearLevel(
uint32 size;
uint32 padded_row_size;
if (!GLES2Util::ComputeImageDataSizes(
- width, height, format, type, state_.unpack_alignment, &size,
+ width, height, 1, format, type, state_.unpack_alignment, &size,
NULL, &padded_row_size)) {
return false;
}
@@ -8339,7 +8339,7 @@ bool GLES2DecoderImpl::ClearLevel(
DCHECK_GT(padded_row_size, 0U);
tile_height = kMaxZeroSize / padded_row_size;
if (!GLES2Util::ComputeImageDataSizes(
- width, tile_height, format, type, state_.unpack_alignment, &size,
+ width, tile_height, 1, format, type, state_.unpack_alignment, &size,
NULL, NULL)) {
return false;
}
@@ -8775,8 +8775,8 @@ error::Error GLES2DecoderImpl::HandleTexImage2D(uint32 immediate_data_size,
uint32 pixels_shm_offset = static_cast<uint32>(c.pixels_shm_offset);
uint32 pixels_size;
if (!GLES2Util::ComputeImageDataSizes(
- width, height, format, type, state_.unpack_alignment, &pixels_size, NULL,
- NULL)) {
+ width, height, 1, format, type, state_.unpack_alignment, &pixels_size,
+ NULL, NULL)) {
return error::kOutOfBounds;
}
const void* pixels = NULL;
@@ -8800,6 +8800,51 @@ error::Error GLES2DecoderImpl::HandleTexImage2D(uint32 immediate_data_size,
return error::kNoError;
}
+error::Error GLES2DecoderImpl::HandleTexImage3D(uint32 immediate_data_size,
+ const void* cmd_data) {
+ // TODO(zmo): Unsafe ES3 API.
+ if (!unsafe_es3_apis_enabled())
+ return error::kUnknownCommand;
+
+ const gles2::cmds::TexImage3D& c =
+ *static_cast<const gles2::cmds::TexImage3D*>(cmd_data);
+ TRACE_EVENT2("gpu", "GLES2DecoderImpl::HandleTexImage3D",
+ "widthXheight", c.width * c.height, "depth", c.depth);
+ GLenum target = static_cast<GLenum>(c.target);
+ GLint level = static_cast<GLint>(c.level);
+ GLenum internal_format = static_cast<GLenum>(c.internalformat);
+ GLsizei width = static_cast<GLsizei>(c.width);
+ GLsizei height = static_cast<GLsizei>(c.height);
+ GLsizei depth = static_cast<GLsizei>(c.depth);
+ GLint border = static_cast<GLint>(c.border);
+ GLenum format = static_cast<GLenum>(c.format);
+ GLenum type = static_cast<GLenum>(c.type);
+ uint32 pixels_shm_id = static_cast<uint32>(c.pixels_shm_id);
+ uint32 pixels_shm_offset = static_cast<uint32>(c.pixels_shm_offset);
+ uint32 pixels_size;
+ if (!GLES2Util::ComputeImageDataSizes(
+ width, height, depth, format, type, state_.unpack_alignment, &pixels_size,
+ NULL, NULL)) {
+ return error::kOutOfBounds;
+ }
+ const void* pixels = NULL;
+ if (pixels_shm_id != 0 || pixels_shm_offset != 0) {
+ pixels = GetSharedMemoryAs<const void*>(
+ pixels_shm_id, pixels_shm_offset, pixels_size);
+ if (!pixels) {
+ return error::kOutOfBounds;
+ }
+ }
+
+ glTexImage3D(target, level, internal_format, width, height, depth, border,
+ format, type, pixels);
+
+ // This may be a slow command. Exit command processing to allow for
+ // context preemption and GPU watchdog checks.
+ ExitCommandProcessingEarly();
+ return error::kNoError;
+}
+
void GLES2DecoderImpl::DoCompressedTexSubImage2D(
GLenum target,
GLint level,
@@ -8934,8 +8979,8 @@ void GLES2DecoderImpl::DoCopyTexImage2D(
uint32 estimated_size = 0;
if (!GLES2Util::ComputeImageDataSizes(
- width, height, internal_format, GL_UNSIGNED_BYTE, state_.unpack_alignment,
- &estimated_size, NULL, NULL)) {
+ width, height, 1, internal_format, GL_UNSIGNED_BYTE,
+ state_.unpack_alignment, &estimated_size, NULL, NULL)) {
LOCAL_SET_GL_ERROR(
GL_OUT_OF_MEMORY, "glCopyTexImage2D", "dimensions too large");
return;
@@ -9108,7 +9153,7 @@ void GLES2DecoderImpl::DoCopyTexSubImage2D(
// some part was clipped so clear the sub rect.
uint32 pixels_size = 0;
if (!GLES2Util::ComputeImageDataSizes(
- width, height, format, type, state_.unpack_alignment, &pixels_size,
+ width, height, 1, format, type, state_.unpack_alignment, &pixels_size,
NULL, NULL)) {
LOCAL_SET_GL_ERROR(
GL_INVALID_VALUE, "glCopyTexSubImage2D", "dimensions too large");
@@ -9293,7 +9338,7 @@ error::Error GLES2DecoderImpl::HandleTexSubImage2D(uint32 immediate_data_size,
GLenum type = static_cast<GLenum>(c.type);
uint32 data_size;
if (!GLES2Util::ComputeImageDataSizes(
- width, height, format, type, state_.unpack_alignment, &data_size,
+ width, height, 1, format, type, state_.unpack_alignment, &data_size,
NULL, NULL)) {
return error::kOutOfBounds;
}
@@ -9303,6 +9348,48 @@ error::Error GLES2DecoderImpl::HandleTexSubImage2D(uint32 immediate_data_size,
target, level, xoffset, yoffset, width, height, format, type, pixels);
}
+// TODO(zmo): Remove the below stub once we add the real function binding.
+// Currently it's missing due to a gmock limitation.
+static void glTexSubImage3D(
+ GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
+ GLsizei height, GLsizei width, GLsizei depth, GLenum format, GLenum type,
+ const void* pixels) {
+ NOTIMPLEMENTED();
+}
+
+error::Error GLES2DecoderImpl::HandleTexSubImage3D(uint32 immediate_data_size,
+ const void* cmd_data) {
+ // TODO(zmo): Unsafe ES3 API.
+ if (!unsafe_es3_apis_enabled())
+ return error::kUnknownCommand;
+
+ const gles2::cmds::TexSubImage3D& c =
+ *static_cast<const gles2::cmds::TexSubImage3D*>(cmd_data);
+ TRACE_EVENT2("gpu", "GLES2DecoderImpl::HandleTexSubImage3D",
+ "widthXheight", c.width * c.height, "depth", c.depth);
+ GLenum target = static_cast<GLenum>(c.target);
+ GLint level = static_cast<GLint>(c.level);
+ GLint xoffset = static_cast<GLint>(c.xoffset);
+ GLint yoffset = static_cast<GLint>(c.yoffset);
+ GLint zoffset = static_cast<GLint>(c.zoffset);
+ GLsizei width = static_cast<GLsizei>(c.width);
+ GLsizei height = static_cast<GLsizei>(c.height);
+ GLsizei depth = static_cast<GLsizei>(c.depth);
+ GLenum format = static_cast<GLenum>(c.format);
+ GLenum type = static_cast<GLenum>(c.type);
+ uint32 data_size;
+ if (!GLES2Util::ComputeImageDataSizes(
+ width, height, depth, format, type, state_.unpack_alignment, &data_size,
+ NULL, NULL)) {
+ return error::kOutOfBounds;
+ }
+ const void* pixels = GetSharedMemoryAs<const void*>(
+ c.pixels_shm_id, c.pixels_shm_offset, data_size);
+ glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height,
+ depth, format, type, pixels);
+ return error::kNoError;
+}
+
error::Error GLES2DecoderImpl::HandleGetVertexAttribPointerv(
uint32 immediate_data_size,
const void* cmd_data) {
@@ -10702,7 +10789,7 @@ void GLES2DecoderImpl::DoTexStorage2DEXT(
for (int ii = 0; ii < levels; ++ii) {
uint32 level_size = 0;
if (!GLES2Util::ComputeImageDataSizes(
- level_width, level_height, format, type, state_.unpack_alignment,
+ level_width, level_height, 1, format, type, state_.unpack_alignment,
&estimated_size, NULL, NULL) ||
!SafeAddUint32(estimated_size, level_size, &estimated_size)) {
LOCAL_SET_GL_ERROR(
@@ -11317,8 +11404,8 @@ error::Error GLES2DecoderImpl::HandleAsyncTexImage2DCHROMIUM(
// TODO(epenner): Move this and copies of this memory validation
// into ValidateTexImage2D step.
if (!GLES2Util::ComputeImageDataSizes(
- width, height, format, type, state_.unpack_alignment, &pixels_size, NULL,
- NULL)) {
+ width, height, 1, format, type, state_.unpack_alignment, &pixels_size,
+ NULL, NULL)) {
return error::kOutOfBounds;
}
const void* pixels = NULL;
@@ -11422,7 +11509,7 @@ error::Error GLES2DecoderImpl::HandleAsyncTexSubImage2DCHROMIUM(
// into ValidateTexSubImage2D step.
uint32 data_size;
if (!GLES2Util::ComputeImageDataSizes(
- width, height, format, type, state_.unpack_alignment, &data_size,
+ width, height, 1, format, type, state_.unpack_alignment, &data_size,
NULL, NULL)) {
return error::kOutOfBounds;
}
« no previous file with comments | « gpu/command_buffer/service/gles2_cmd_clear_framebuffer.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