OLD | NEW |
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 "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/strings/string_number_conversions.h" | 8 #include "base/strings/string_number_conversions.h" |
9 #include "gpu/command_buffer/common/gles2_cmd_format.h" | 9 #include "gpu/command_buffer/common/gles2_cmd_format.h" |
10 #include "gpu/command_buffer/common/gles2_cmd_utils.h" | 10 #include "gpu/command_buffer/common/gles2_cmd_utils.h" |
(...skipping 1186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1197 init.gl_version = "3.0"; | 1197 init.gl_version = "3.0"; |
1198 InitDecoder(init); | 1198 InitDecoder(init); |
1199 | 1199 |
1200 { | 1200 { |
1201 BindTexture cmd1; | 1201 BindTexture cmd1; |
1202 cmd1.Init(GL_TEXTURE_2D, 0); | 1202 cmd1.Init(GL_TEXTURE_2D, 0); |
1203 EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, 0)); | 1203 EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, 0)); |
1204 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd1)); | 1204 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd1)); |
1205 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 1205 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
1206 | 1206 |
1207 TexParameterfv cmd2; | 1207 GLfloat data = GL_NEAREST; |
| 1208 TexParameterfvImmediate& cmd2 = |
| 1209 *GetImmediateAs<TexParameterfvImmediate>(); |
1208 cmd2.Init(GL_TEXTURE_2D, | 1210 cmd2.Init(GL_TEXTURE_2D, |
1209 GL_TEXTURE_MAG_FILTER, | 1211 GL_TEXTURE_MAG_FILTER, |
1210 shared_memory_id_, | 1212 &data); |
1211 shared_memory_offset_); | 1213 EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd2, sizeof(data))); |
1212 GetSharedMemoryAs<GLfloat*>()[0] = GL_NEAREST; | |
1213 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2)); | |
1214 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); | 1214 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); |
1215 } | 1215 } |
1216 | 1216 |
1217 { | 1217 { |
1218 BindTexture cmd1; | 1218 BindTexture cmd1; |
1219 cmd1.Init(GL_TEXTURE_CUBE_MAP, 0); | 1219 cmd1.Init(GL_TEXTURE_CUBE_MAP, 0); |
1220 EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_CUBE_MAP, 0)); | 1220 EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_CUBE_MAP, 0)); |
1221 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd1)); | 1221 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd1)); |
1222 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 1222 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
1223 | 1223 |
1224 TexParameterfv cmd2; | 1224 GLfloat data = GL_NEAREST; |
| 1225 TexParameterfvImmediate& cmd2 = |
| 1226 *GetImmediateAs<TexParameterfvImmediate>(); |
1225 cmd2.Init(GL_TEXTURE_CUBE_MAP, | 1227 cmd2.Init(GL_TEXTURE_CUBE_MAP, |
1226 GL_TEXTURE_MAG_FILTER, | 1228 GL_TEXTURE_MAG_FILTER, |
1227 shared_memory_id_, | 1229 &data); |
1228 shared_memory_offset_); | 1230 EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd2, sizeof(data))); |
1229 GetSharedMemoryAs<GLfloat*>()[0] = GL_NEAREST; | |
1230 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2)); | |
1231 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); | 1231 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); |
1232 } | 1232 } |
1233 } | 1233 } |
1234 | 1234 |
1235 TEST_P(GLES2DecoderManualInitTest, NoDefaultTexParameteriv) { | 1235 TEST_P(GLES2DecoderManualInitTest, NoDefaultTexParameteriv) { |
1236 InitState init; | 1236 InitState init; |
1237 init.gl_version = "3.0"; | 1237 init.gl_version = "3.0"; |
1238 InitDecoder(init); | 1238 InitDecoder(init); |
1239 | 1239 |
1240 { | 1240 { |
1241 BindTexture cmd1; | 1241 BindTexture cmd1; |
1242 cmd1.Init(GL_TEXTURE_2D, 0); | 1242 cmd1.Init(GL_TEXTURE_2D, 0); |
1243 EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, 0)); | 1243 EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, 0)); |
1244 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd1)); | 1244 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd1)); |
1245 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 1245 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
1246 | 1246 |
1247 TexParameteriv cmd2; | 1247 GLfloat data = GL_NEAREST; |
| 1248 TexParameterfvImmediate& cmd2 = |
| 1249 *GetImmediateAs<TexParameterfvImmediate>(); |
1248 cmd2.Init(GL_TEXTURE_2D, | 1250 cmd2.Init(GL_TEXTURE_2D, |
1249 GL_TEXTURE_MAG_FILTER, | 1251 GL_TEXTURE_MAG_FILTER, |
1250 shared_memory_id_, | 1252 &data); |
1251 shared_memory_offset_); | 1253 EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd2, sizeof(data))); |
1252 GetSharedMemoryAs<GLint*>()[0] = GL_NEAREST; | |
1253 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2)); | |
1254 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); | 1254 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); |
1255 } | 1255 } |
1256 | 1256 |
1257 { | 1257 { |
1258 BindTexture cmd1; | 1258 BindTexture cmd1; |
1259 cmd1.Init(GL_TEXTURE_CUBE_MAP, 0); | 1259 cmd1.Init(GL_TEXTURE_CUBE_MAP, 0); |
1260 EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_CUBE_MAP, 0)); | 1260 EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_CUBE_MAP, 0)); |
1261 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd1)); | 1261 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd1)); |
1262 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 1262 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
1263 | 1263 |
1264 TexParameteriv cmd2; | 1264 GLfloat data = GL_NEAREST; |
| 1265 TexParameterfvImmediate& cmd2 = |
| 1266 *GetImmediateAs<TexParameterfvImmediate>(); |
1265 cmd2.Init(GL_TEXTURE_CUBE_MAP, | 1267 cmd2.Init(GL_TEXTURE_CUBE_MAP, |
1266 GL_TEXTURE_MAG_FILTER, | 1268 GL_TEXTURE_MAG_FILTER, |
1267 shared_memory_id_, | 1269 &data); |
1268 shared_memory_offset_); | 1270 EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd2, sizeof(data))); |
1269 GetSharedMemoryAs<GLint*>()[0] = GL_NEAREST; | |
1270 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2)); | |
1271 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); | 1271 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); |
1272 } | 1272 } |
1273 } | 1273 } |
1274 | 1274 |
1275 TEST_P(GLES2DecoderManualInitTest, NoDefaultTexImage2D) { | 1275 TEST_P(GLES2DecoderManualInitTest, NoDefaultTexImage2D) { |
1276 InitState init; | 1276 InitState init; |
1277 init.gl_version = "3.0"; | 1277 init.gl_version = "3.0"; |
1278 InitDecoder(init); | 1278 InitDecoder(init); |
1279 | 1279 |
1280 BindTexture cmd1; | 1280 BindTexture cmd1; |
(...skipping 564 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1845 TexParameteri cmd; | 1845 TexParameteri cmd; |
1846 cmd.Init( | 1846 cmd.Init( |
1847 GL_TEXTURE_2D, GL_TEXTURE_USAGE_ANGLE, GL_FRAMEBUFFER_ATTACHMENT_ANGLE); | 1847 GL_TEXTURE_2D, GL_TEXTURE_USAGE_ANGLE, GL_FRAMEBUFFER_ATTACHMENT_ANGLE); |
1848 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 1848 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
1849 EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); | 1849 EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); |
1850 } | 1850 } |
1851 | 1851 |
1852 TEST_P(GLES2DecoderTest, ProduceAndConsumeTextureCHROMIUM) { | 1852 TEST_P(GLES2DecoderTest, ProduceAndConsumeTextureCHROMIUM) { |
1853 Mailbox mailbox = Mailbox::Generate(); | 1853 Mailbox mailbox = Mailbox::Generate(); |
1854 | 1854 |
1855 memcpy(shared_memory_address_, mailbox.name, sizeof(mailbox.name)); | |
1856 | |
1857 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); | 1855 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); |
1858 DoTexImage2D( | 1856 DoTexImage2D( |
1859 GL_TEXTURE_2D, 0, GL_RGBA, 3, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0); | 1857 GL_TEXTURE_2D, 0, GL_RGBA, 3, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0); |
1860 DoTexImage2D( | 1858 DoTexImage2D( |
1861 GL_TEXTURE_2D, 1, GL_RGBA, 2, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0); | 1859 GL_TEXTURE_2D, 1, GL_RGBA, 2, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0); |
1862 TextureRef* texture_ref = | 1860 TextureRef* texture_ref = |
1863 group().texture_manager()->GetTexture(client_texture_id_); | 1861 group().texture_manager()->GetTexture(client_texture_id_); |
1864 ASSERT_TRUE(texture_ref != NULL); | 1862 ASSERT_TRUE(texture_ref != NULL); |
1865 Texture* texture = texture_ref->texture(); | 1863 Texture* texture = texture_ref->texture(); |
1866 EXPECT_EQ(kServiceTextureId, texture->service_id()); | 1864 EXPECT_EQ(kServiceTextureId, texture->service_id()); |
1867 | 1865 |
1868 ProduceTextureCHROMIUM produce_cmd; | 1866 ProduceTextureCHROMIUMImmediate& produce_cmd = |
1869 produce_cmd.Init(GL_TEXTURE_2D, kSharedMemoryId, kSharedMemoryOffset); | 1867 *GetImmediateAs<ProduceTextureCHROMIUMImmediate>(); |
1870 EXPECT_EQ(error::kNoError, ExecuteCmd(produce_cmd)); | 1868 produce_cmd.Init(GL_TEXTURE_2D, mailbox.name); |
| 1869 EXPECT_EQ(error::kNoError, |
| 1870 ExecuteImmediateCmd(produce_cmd, sizeof(mailbox.name))); |
1871 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 1871 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
1872 | 1872 |
1873 // Texture didn't change. | 1873 // Texture didn't change. |
1874 GLsizei width; | 1874 GLsizei width; |
1875 GLsizei height; | 1875 GLsizei height; |
1876 GLenum type; | 1876 GLenum type; |
1877 GLenum internal_format; | 1877 GLenum internal_format; |
1878 | 1878 |
1879 EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height)); | 1879 EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height)); |
1880 EXPECT_EQ(3, width); | 1880 EXPECT_EQ(3, width); |
(...skipping 17 matching lines...) Expand all Loading... |
1898 .WillOnce(SetArgumentPointee<1>(kNewServiceId)) | 1898 .WillOnce(SetArgumentPointee<1>(kNewServiceId)) |
1899 .RetiresOnSaturation(); | 1899 .RetiresOnSaturation(); |
1900 DoBindTexture(GL_TEXTURE_2D, kNewClientId, kNewServiceId); | 1900 DoBindTexture(GL_TEXTURE_2D, kNewClientId, kNewServiceId); |
1901 | 1901 |
1902 // Assigns and binds original service size texture ID. | 1902 // Assigns and binds original service size texture ID. |
1903 EXPECT_CALL(*gl_, DeleteTextures(1, _)).Times(1).RetiresOnSaturation(); | 1903 EXPECT_CALL(*gl_, DeleteTextures(1, _)).Times(1).RetiresOnSaturation(); |
1904 EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, kServiceTextureId)) | 1904 EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, kServiceTextureId)) |
1905 .Times(1) | 1905 .Times(1) |
1906 .RetiresOnSaturation(); | 1906 .RetiresOnSaturation(); |
1907 | 1907 |
1908 memcpy(shared_memory_address_, mailbox.name, sizeof(mailbox.name)); | 1908 ConsumeTextureCHROMIUMImmediate& consume_cmd = |
1909 ConsumeTextureCHROMIUM consume_cmd; | 1909 *GetImmediateAs<ConsumeTextureCHROMIUMImmediate>(); |
1910 consume_cmd.Init(GL_TEXTURE_2D, kSharedMemoryId, kSharedMemoryOffset); | 1910 consume_cmd.Init(GL_TEXTURE_2D, mailbox.name); |
1911 EXPECT_EQ(error::kNoError, ExecuteCmd(consume_cmd)); | 1911 EXPECT_EQ(error::kNoError, |
| 1912 ExecuteImmediateCmd(consume_cmd, sizeof(mailbox.name))); |
1912 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 1913 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
1913 | 1914 |
1914 // Texture is redefined. | 1915 // Texture is redefined. |
1915 EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height)); | 1916 EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height)); |
1916 EXPECT_EQ(3, width); | 1917 EXPECT_EQ(3, width); |
1917 EXPECT_EQ(1, height); | 1918 EXPECT_EQ(1, height); |
1918 EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 0, &type, &internal_format)); | 1919 EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 0, &type, &internal_format)); |
1919 EXPECT_EQ(static_cast<GLenum>(GL_RGBA), internal_format); | 1920 EXPECT_EQ(static_cast<GLenum>(GL_RGBA), internal_format); |
1920 EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type); | 1921 EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type); |
1921 | 1922 |
(...skipping 799 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2721 // TODO(gman): CompressedTexSubImage2DImmediate | 2722 // TODO(gman): CompressedTexSubImage2DImmediate |
2722 | 2723 |
2723 // TODO(gman): TexImage2D | 2724 // TODO(gman): TexImage2D |
2724 | 2725 |
2725 // TODO(gman): TexImage2DImmediate | 2726 // TODO(gman): TexImage2DImmediate |
2726 | 2727 |
2727 // TODO(gman): TexSubImage2DImmediate | 2728 // TODO(gman): TexSubImage2DImmediate |
2728 | 2729 |
2729 } // namespace gles2 | 2730 } // namespace gles2 |
2730 } // namespace gpu | 2731 } // namespace gpu |
OLD | NEW |