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

Unified Diff: gpu/command_buffer/client/gles2_implementation_unittest.cc

Issue 1785483002: Handle UNPACK_SKIP_* and PACK_SKIP_* parameters on the client side. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « gpu/command_buffer/client/gles2_implementation.cc ('k') | gpu/command_buffer/service/context_state.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gpu/command_buffer/client/gles2_implementation_unittest.cc
diff --git a/gpu/command_buffer/client/gles2_implementation_unittest.cc b/gpu/command_buffer/client/gles2_implementation_unittest.cc
index 8d50686bb7518c6d50b8c340fca4cbdd7df16dfc..3bacee23e9edaf65f9bcafad0520a388e8fad637 100644
--- a/gpu/command_buffer/client/gles2_implementation_unittest.cc
+++ b/gpu/command_buffer/client/gles2_implementation_unittest.cc
@@ -2502,7 +2502,7 @@ TEST_F(GLES2ImplementationTest, TexImage2DViaTexSubImage2D) {
pixels.get() + kHeight / 2 * padded_row_size, mem2.ptr));
}
-TEST_F(GLES2ImplementationTest, SubImageUnpack) {
+TEST_F(GLES2ImplementationTest, SubImage2DUnpack) {
static const GLint unpack_alignments[] = { 1, 2, 4, 8 };
static const GLenum kFormat = GL_RGB;
@@ -2527,58 +2527,84 @@ TEST_F(GLES2ImplementationTest, SubImageUnpack) {
static const GLint kTexSubYOffset = 103;
struct {
- cmds::PixelStorei pixel_store_i[4];
+ cmds::PixelStorei pixel_store_i;
cmds::TexImage2D tex_image_2d;
} texImageExpected;
struct {
- cmds::PixelStorei pixel_store_i[4];
+ cmds::PixelStorei pixel_store_i;
cmds::TexImage2D tex_image_2d;
cmds::TexSubImage2D tex_sub_image_2d;
} texSubImageExpected;
- uint32_t src_size;
- ASSERT_TRUE(GLES2Util::ComputeImageDataSizes(
- kSrcWidth, kSrcSubImageY1, 1, kFormat, kType, 8, &src_size, NULL, NULL));
+ uint32_t pixel_size;
+ PixelStoreParams pixel_params;
+ // Makes sure the pixels size is large enough for all tests.
+ pixel_params.alignment = 8;
+ ASSERT_TRUE(GLES2Util::ComputeImageDataSizesES3(
+ kSrcWidth, kSrcSubImageY1, 1, kFormat, kType,
+ pixel_params, &pixel_size, nullptr, nullptr, nullptr, nullptr));
scoped_ptr<uint8_t[]> src_pixels;
- src_pixels.reset(new uint8_t[src_size]);
- for (size_t i = 0; i < src_size; ++i) {
- src_pixels[i] = static_cast<int8_t>(i);
+ src_pixels.reset(new uint8_t[pixel_size]);
+ for (size_t i = 0; i < pixel_size; ++i) {
+ src_pixels[i] = static_cast<uint8_t>(i % 255);
}
for (int sub = 0; sub < 2; ++sub) {
for (size_t a = 0; a < arraysize(unpack_alignments); ++a) {
- GLint alignment = unpack_alignments[a];
- uint32_t size;
- uint32_t unpadded_row_size;
- uint32_t padded_row_size;
- ASSERT_TRUE(GLES2Util::ComputeImageDataSizes(
- kSrcSubImageWidth, kSrcSubImageHeight, 1, kFormat, kType, alignment,
- &size, &unpadded_row_size, &padded_row_size));
- ASSERT_TRUE(size <= MaxTransferBufferSize());
- ExpectedMemoryInfo mem = GetExpectedMemory(size);
-
const void* commands = GetPut();
+
+ GLint alignment = unpack_alignments[a];
gl_->PixelStorei(GL_UNPACK_ALIGNMENT, alignment);
- gl_->PixelStorei(GL_UNPACK_ROW_LENGTH_EXT, kSrcWidth);
- gl_->PixelStorei(GL_UNPACK_SKIP_PIXELS_EXT, kSrcSubImageX0);
- gl_->PixelStorei(GL_UNPACK_SKIP_ROWS_EXT, kSrcSubImageY0);
+ gl_->PixelStorei(GL_UNPACK_ROW_LENGTH, kSrcWidth);
+ gl_->PixelStorei(GL_UNPACK_SKIP_PIXELS, kSrcSubImageX0);
+ gl_->PixelStorei(GL_UNPACK_SKIP_ROWS, kSrcSubImageY0);
+
+ uint32_t client_size;
+ uint32_t client_unpadded_row_size;
+ uint32_t client_padded_row_size;
+ uint32_t client_skip_size;
+ {
+ PixelStoreParams params;
+ params.alignment = alignment;
+ params.row_length = kSrcWidth;
+ params.skip_pixels = kSrcSubImageX0;
+ params.skip_rows = kSrcSubImageY0;
+ ASSERT_TRUE(GLES2Util::ComputeImageDataSizesES3(
+ kSrcSubImageWidth, kSrcSubImageHeight, 1, kFormat, kType, params,
+ &client_size, &client_unpadded_row_size, &client_padded_row_size,
+ &client_skip_size, nullptr));
+ ASSERT_TRUE(client_size + client_skip_size <= pixel_size);
+ }
+
+ uint32_t service_size;
+ uint32_t service_unpadded_row_size;
+ uint32_t service_padded_row_size;
+ uint32_t service_skip_size;
+ {
+ PixelStoreParams params;
+ // For pixels we send to service side, we already applied all unpack
+ // parameters except for UNPACK_ALIGNMENT.
+ params.alignment = alignment;
+ ASSERT_TRUE(GLES2Util::ComputeImageDataSizesES3(
+ kSrcSubImageWidth, kSrcSubImageHeight, 1, kFormat, kType, params,
+ &service_size, &service_unpadded_row_size, &service_padded_row_size,
+ &service_skip_size, nullptr));
+ ASSERT_TRUE(service_size <= MaxTransferBufferSize());
+ ASSERT_TRUE(service_skip_size == 0);
+ ASSERT_TRUE(client_unpadded_row_size == service_unpadded_row_size);
+ }
+
+ ExpectedMemoryInfo mem = GetExpectedMemory(service_size);
if (sub) {
gl_->TexImage2D(
GL_TEXTURE_2D, kLevel, kFormat, kTexWidth, kTexHeight, kBorder,
- kFormat, kType, NULL);
+ kFormat, kType, nullptr);
gl_->TexSubImage2D(
GL_TEXTURE_2D, kLevel, kTexSubXOffset, kTexSubYOffset,
kSrcSubImageWidth, kSrcSubImageHeight, kFormat, kType,
src_pixels.get());
- texSubImageExpected.pixel_store_i[0].Init(
- GL_UNPACK_ALIGNMENT, alignment);
- texSubImageExpected.pixel_store_i[1].Init(
- GL_UNPACK_ROW_LENGTH_EXT, kSrcWidth);
- texSubImageExpected.pixel_store_i[2].Init(
- GL_UNPACK_SKIP_PIXELS_EXT, kSrcSubImageX0);
- texSubImageExpected.pixel_store_i[3].Init(
- GL_UNPACK_SKIP_ROWS_EXT, kSrcSubImageY0);
+ texSubImageExpected.pixel_store_i.Init(GL_UNPACK_ALIGNMENT, alignment);
texSubImageExpected.tex_image_2d.Init(
GL_TEXTURE_2D, kLevel, kFormat, kTexWidth, kTexHeight,
kFormat, kType, 0, 0);
@@ -2586,37 +2612,25 @@ TEST_F(GLES2ImplementationTest, SubImageUnpack) {
GL_TEXTURE_2D, kLevel, kTexSubXOffset, kTexSubYOffset,
kSrcSubImageWidth, kSrcSubImageHeight, kFormat, kType, mem.id,
mem.offset, GL_FALSE);
- EXPECT_EQ(0, memcmp(
- &texSubImageExpected, commands, sizeof(texSubImageExpected)));
+ EXPECT_EQ(0, memcmp(&texSubImageExpected, commands,
+ sizeof(texSubImageExpected)));
} else {
gl_->TexImage2D(
GL_TEXTURE_2D, kLevel, kFormat,
kSrcSubImageWidth, kSrcSubImageHeight, kBorder, kFormat, kType,
src_pixels.get());
- texImageExpected.pixel_store_i[0].Init(GL_UNPACK_ALIGNMENT, alignment);
- texImageExpected.pixel_store_i[1].Init(
- GL_UNPACK_ROW_LENGTH_EXT, kSrcWidth);
- texImageExpected.pixel_store_i[2].Init(
- GL_UNPACK_SKIP_PIXELS_EXT, kSrcSubImageX0);
- texImageExpected.pixel_store_i[3].Init(
- GL_UNPACK_SKIP_ROWS_EXT, kSrcSubImageY0);
+ texImageExpected.pixel_store_i.Init(GL_UNPACK_ALIGNMENT, alignment);
texImageExpected.tex_image_2d.Init(
GL_TEXTURE_2D, kLevel, kFormat, kSrcSubImageWidth,
kSrcSubImageHeight, kFormat, kType, mem.id, mem.offset);
- EXPECT_EQ(0, memcmp(
- &texImageExpected, commands, sizeof(texImageExpected)));
+ EXPECT_EQ(0, memcmp(&texImageExpected, commands,
+ sizeof(texImageExpected)));
}
- uint32_t src_padded_row_size;
- ASSERT_TRUE(GLES2Util::ComputeImagePaddedRowSize(
- kSrcWidth, kFormat, kType, alignment, &src_padded_row_size));
- uint32_t bytes_per_group =
- GLES2Util::ComputeImageGroupSize(kFormat, kType);
for (int y = 0; y < kSrcSubImageHeight; ++y) {
- const uint8_t* src_row = src_pixels.get() +
- (kSrcSubImageY0 + y) * src_padded_row_size +
- bytes_per_group * kSrcSubImageX0;
- const uint8_t* dst_row = mem.ptr + y * padded_row_size;
- EXPECT_EQ(0, memcmp(src_row, dst_row, unpadded_row_size));
+ const uint8_t* src_row =
+ src_pixels.get() + client_skip_size + y * client_padded_row_size;
+ const uint8_t* dst_row = mem.ptr + y * service_padded_row_size;
+ EXPECT_EQ(0, memcmp(src_row, dst_row, service_unpadded_row_size));
}
ClearCommands();
}
« no previous file with comments | « gpu/command_buffer/client/gles2_implementation.cc ('k') | gpu/command_buffer/service/context_state.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698