Chromium Code Reviews

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

Issue 2190543005: Command buffer: feedback loop detection for CopyTexSubImage3D (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Command buffer: feedback loop detection for CopyTexSubImage3D Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff |
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 1195 matching lines...)
1206 cmd.Init(kTarget, kLevel, kXoffset, kYoffset, kZoffset, 1206 cmd.Init(kTarget, kLevel, kXoffset, kYoffset, kZoffset,
1207 kX, kY, kWidth + 1, kHeight); 1207 kX, kY, kWidth + 1, kHeight);
1208 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 1208 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1209 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); 1209 EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
1210 cmd.Init(kTarget, kLevel, kXoffset, kYoffset, kZoffset, 1210 cmd.Init(kTarget, kLevel, kXoffset, kYoffset, kZoffset,
1211 kX, kY, kWidth, kHeight + 1); 1211 kX, kY, kWidth, kHeight + 1);
1212 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 1212 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1213 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); 1213 EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
1214 } 1214 }
1215 1215
1216 TEST_P(GLES3DecoderTest, CopyTexSubImage3DFeedbackLoops) {
1217 const GLenum kTarget = GL_TEXTURE_3D;
1218 const GLint kInternalFormat = GL_RGB8;
1219 const GLint kXoffset = 0;
1220 const GLint kYoffset = 0;
1221 const GLint kZoffset = 0;
1222 const GLint kX = 0;
1223 const GLint kY = 0;
1224 const GLsizei kWidth = 2;
1225 const GLsizei kHeight = 2;
1226 const GLsizei kDepth = 2;
1227 const GLsizei kBorder = 0;
1228 const GLenum kFormat = GL_RGB;
1229 const GLenum kType = GL_UNSIGNED_BYTE;
1230 GLint kLevel;
1231 GLint kLayer;
1232
1233 DoBindTexture(kTarget, client_texture_id_, kServiceTextureId);
1234 DoBindFramebuffer(
1235 GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
1236
1237 cmds::FramebufferTextureLayer tex_layer;
1238 CopyTexSubImage3D cmd;
Zhenyao Mo 2016/07/28 14:51:37 This is weird. Why one has namespace cmds and the
yunchao 2016/07/28 15:53:06 cmds namespace is not necessary. removed
1239
1240 // The source and the target for CopyTexSubImage3D are the same 3d texture.
1241 // But level of 3D texture != level of read attachment in fbo.
1242 kLevel = 0;
1243 kLayer = 0; // kZoffset is 0
1244 EXPECT_CALL(*gl_, FramebufferTextureLayer(GL_FRAMEBUFFER,
1245 GL_COLOR_ATTACHMENT0,
1246 kServiceTextureId, kLayer, kLevel))
1247 .Times(1)
1248 .RetiresOnSaturation();
1249 DoTexImage3D(kTarget, kLevel, kInternalFormat, kWidth, kHeight, kDepth,
1250 kBorder, kFormat, kType, kSharedMemoryId, kSharedMemoryOffset);
1251 tex_layer.Init(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, client_texture_id_,
1252 kLevel, kLayer);
1253 EXPECT_EQ(error::kNoError, ExecuteCmd(tex_layer));
1254 EXPECT_EQ(GL_NO_ERROR, GetGLError());
1255
1256 kLevel = 1;
1257 DoTexImage3D(kTarget, kLevel, kInternalFormat, kWidth, kHeight, kDepth,
1258 kBorder, kFormat, kType, kSharedMemoryId, kSharedMemoryOffset);
1259 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(_))
1260 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
1261 .RetiresOnSaturation();
1262 EXPECT_CALL(*gl_,
1263 CopyTexSubImage3D(kTarget, kLevel, kXoffset, kYoffset, kZoffset,
1264 kX, kY, kWidth, kHeight))
1265 .Times(1)
1266 .RetiresOnSaturation();
1267 cmd.Init(kTarget, kLevel, kXoffset, kYoffset, kZoffset,
1268 kX, kY, kWidth, kHeight);
1269 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1270 EXPECT_EQ(GL_NO_ERROR, GetGLError());
1271
1272 // The source and the target for CopyTexSubImage3D are the same 3d texture.
1273 // But zoffset of 3D texture != layer of read attachment in fbo.
1274 kLevel = 0;
1275 kLayer = 1; // kZoffset is 0
1276 EXPECT_CALL(*gl_, FramebufferTextureLayer(GL_FRAMEBUFFER,
1277 GL_COLOR_ATTACHMENT0,
1278 kServiceTextureId, kLevel, kLayer))
1279 .Times(1)
1280 .RetiresOnSaturation();
1281 DoTexImage3D(kTarget, kLevel, kInternalFormat, kWidth, kHeight, kDepth,
Zhenyao Mo 2016/07/28 14:51:37 You don't need to re-setup the texture again.
yunchao 2016/07/28 15:53:06 Done.
1282 kBorder, kFormat, kType, kSharedMemoryId, kSharedMemoryOffset);
1283 tex_layer.Init(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, client_texture_id_,
1284 kLevel, kLayer);
1285 EXPECT_EQ(error::kNoError, ExecuteCmd(tex_layer));
1286 EXPECT_EQ(GL_NO_ERROR, GetGLError());
1287
1288 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(_))
1289 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
1290 .RetiresOnSaturation();
1291 EXPECT_CALL(*gl_,
1292 CopyTexSubImage3D(kTarget, kLevel, kXoffset, kYoffset, kZoffset,
1293 kX, kY, kWidth, kHeight))
1294 .Times(1)
1295 .RetiresOnSaturation();
1296 cmd.Init(kTarget, kLevel, kXoffset, kYoffset, kZoffset,
1297 kX, kY, kWidth, kHeight);
1298 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1299 EXPECT_EQ(GL_NO_ERROR, GetGLError());
1300
1301 // The source and the target for CopyTexSubImage3D are the same 3d texture.
1302 // And level / zoffset of 3D texture equal to level / layer of read attachment
1303 // in fbo.
1304 kLevel = 1;
1305 kLayer = 0; // kZoffset is 0
1306 EXPECT_CALL(*gl_, FramebufferTextureLayer(GL_FRAMEBUFFER,
1307 GL_COLOR_ATTACHMENT0,
1308 kServiceTextureId, kLevel, kLayer))
1309 .Times(1)
1310 .RetiresOnSaturation();
1311 DoTexImage3D(kTarget, kLevel, kInternalFormat, kWidth, kHeight, kDepth,
Zhenyao Mo 2016/07/28 14:51:37 Same here.
yunchao 2016/07/28 15:53:06 Done.
1312 kBorder, kFormat, kType, kSharedMemoryId, kSharedMemoryOffset);
1313 tex_layer.Init(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, client_texture_id_,
1314 kLevel, kLayer);
1315 EXPECT_EQ(error::kNoError, ExecuteCmd(tex_layer));
1316 EXPECT_EQ(GL_NO_ERROR, GetGLError());
1317
1318 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(_))
1319 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
1320 .RetiresOnSaturation();
1321 cmd.Init(kTarget, kLevel, kXoffset, kYoffset, kZoffset,
1322 kX, kY, kWidth, kHeight);
1323 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1324 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
1325 }
1326
qiankun 2016/07/28 13:59:31 Extra new-line.
1327
1216 TEST_P(GLES3DecoderTest, CompressedTexImage3DFailsWithBadImageSize) { 1328 TEST_P(GLES3DecoderTest, CompressedTexImage3DFailsWithBadImageSize) {
1217 const uint32_t kBucketId = 123; 1329 const uint32_t kBucketId = 123;
1218 const GLenum kTarget = GL_TEXTURE_2D_ARRAY; 1330 const GLenum kTarget = GL_TEXTURE_2D_ARRAY;
1219 const GLint kLevel = 0; 1331 const GLint kLevel = 0;
1220 const GLenum kInternalFormat = GL_COMPRESSED_RGBA8_ETC2_EAC; 1332 const GLenum kInternalFormat = GL_COMPRESSED_RGBA8_ETC2_EAC;
1221 const GLsizei kWidth = 4; 1333 const GLsizei kWidth = 4;
1222 const GLsizei kHeight = 8; 1334 const GLsizei kHeight = 8;
1223 const GLsizei kDepth = 4; 1335 const GLsizei kDepth = 4;
1224 CommonDecoder::Bucket* bucket = decoder_->CreateBucket(kBucketId); 1336 CommonDecoder::Bucket* bucket = decoder_->CreateBucket(kBucketId);
1225 ASSERT_TRUE(bucket != NULL); 1337 ASSERT_TRUE(bucket != NULL);
(...skipping 2993 matching lines...)
4219 // TODO(gman): CompressedTexSubImage2DImmediate 4331 // TODO(gman): CompressedTexSubImage2DImmediate
4220 4332
4221 // TODO(gman): TexImage2D 4333 // TODO(gman): TexImage2D
4222 4334
4223 // TODO(gman): TexImage2DImmediate 4335 // TODO(gman): TexImage2DImmediate
4224 4336
4225 // TODO(gman): TexSubImage2DImmediate 4337 // TODO(gman): TexSubImage2DImmediate
4226 4338
4227 } // namespace gles2 4339 } // namespace gles2
4228 } // namespace gpu 4340 } // namespace gpu
OLDNEW

Powered by Google App Engine