| 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 |