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

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

Issue 1154053002: gpu: Use a rectangle to keep track of the cleared area of each texture level. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: restore scissor state in GLES2DecoderImpl::ClearLevel and update GLES2DecoderManualInitTest.DrawCle… Created 5 years, 6 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 unified diff | Download patch
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 "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 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError()); 96 EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
97 EXPECT_FALSE( 97 EXPECT_FALSE(
98 texture->GetLevelSize(GL_TEXTURE_2D, 2, &width, &height, nullptr)); 98 texture->GetLevelSize(GL_TEXTURE_2D, 2, &width, &height, nullptr));
99 } 99 }
100 100
101 TEST_P(GLES2DecoderTest, GenerateMipmapClearsUnclearedTexture) { 101 TEST_P(GLES2DecoderTest, GenerateMipmapClearsUnclearedTexture) {
102 EXPECT_CALL(*gl_, GenerateMipmapEXT(_)).Times(0); 102 EXPECT_CALL(*gl_, GenerateMipmapEXT(_)).Times(0);
103 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 103 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
104 DoTexImage2D( 104 DoTexImage2D(
105 GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0); 105 GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
106 SetupClearTextureExpectations(kServiceTextureId, 106 SetupClearTextureExpectations(kServiceTextureId, kServiceTextureId,
107 kServiceTextureId, 107 GL_TEXTURE_2D, GL_TEXTURE_2D, 0, GL_RGBA,
108 GL_TEXTURE_2D, 108 GL_RGBA, GL_UNSIGNED_BYTE, 0, 0, 2, 2);
109 GL_TEXTURE_2D,
110 0,
111 GL_RGBA,
112 GL_RGBA,
113 GL_UNSIGNED_BYTE,
114 2,
115 2);
116 EXPECT_CALL(*gl_, GenerateMipmapEXT(GL_TEXTURE_2D)); 109 EXPECT_CALL(*gl_, GenerateMipmapEXT(GL_TEXTURE_2D));
117 EXPECT_CALL(*gl_, GetError()) 110 EXPECT_CALL(*gl_, GetError())
118 .WillOnce(Return(GL_NO_ERROR)) 111 .WillOnce(Return(GL_NO_ERROR))
119 .WillOnce(Return(GL_NO_ERROR)) 112 .WillOnce(Return(GL_NO_ERROR))
120 .RetiresOnSaturation(); 113 .RetiresOnSaturation();
121 GenerateMipmap cmd; 114 GenerateMipmap cmd;
122 cmd.Init(GL_TEXTURE_2D); 115 cmd.Init(GL_TEXTURE_2D);
123 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 116 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
124 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 117 EXPECT_EQ(GL_NO_ERROR, GetGLError());
125 } 118 }
126 119
127 // Same as GenerateMipmapClearsUnclearedTexture, but with workaround 120 // Same as GenerateMipmapClearsUnclearedTexture, but with workaround
128 // |set_texture_filters_before_generating_mipmap|. 121 // |set_texture_filters_before_generating_mipmap|.
129 TEST_P(GLES2DecoderManualInitTest, SetTextureFiltersBeforeGenerateMipmap) { 122 TEST_P(GLES2DecoderManualInitTest, SetTextureFiltersBeforeGenerateMipmap) {
130 base::CommandLine command_line(0, NULL); 123 base::CommandLine command_line(0, NULL);
131 command_line.AppendSwitchASCII( 124 command_line.AppendSwitchASCII(
132 switches::kGpuDriverBugWorkarounds, 125 switches::kGpuDriverBugWorkarounds,
133 base::IntToString(gpu::SET_TEXTURE_FILTER_BEFORE_GENERATING_MIPMAP)); 126 base::IntToString(gpu::SET_TEXTURE_FILTER_BEFORE_GENERATING_MIPMAP));
134 InitState init; 127 InitState init;
135 init.bind_generates_resource = true; 128 init.bind_generates_resource = true;
136 InitDecoderWithCommandLine(init, &command_line); 129 InitDecoderWithCommandLine(init, &command_line);
137 130
138 EXPECT_CALL(*gl_, GenerateMipmapEXT(_)).Times(0); 131 EXPECT_CALL(*gl_, GenerateMipmapEXT(_)).Times(0);
139 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 132 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
140 DoTexImage2D( 133 DoTexImage2D(
141 GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0); 134 GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
142 SetupClearTextureExpectations(kServiceTextureId, 135 SetupClearTextureExpectations(kServiceTextureId, kServiceTextureId,
143 kServiceTextureId, 136 GL_TEXTURE_2D, GL_TEXTURE_2D, 0, GL_RGBA,
144 GL_TEXTURE_2D, 137 GL_RGBA, GL_UNSIGNED_BYTE, 0, 0, 2, 2);
145 GL_TEXTURE_2D,
146 0,
147 GL_RGBA,
148 GL_RGBA,
149 GL_UNSIGNED_BYTE,
150 2,
151 2);
152 EXPECT_CALL( 138 EXPECT_CALL(
153 *gl_, 139 *gl_,
154 TexParameteri( 140 TexParameteri(
155 GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST)) 141 GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST))
156 .Times(1) 142 .Times(1)
157 .RetiresOnSaturation(); 143 .RetiresOnSaturation();
158 EXPECT_CALL(*gl_, GenerateMipmapEXT(GL_TEXTURE_2D)); 144 EXPECT_CALL(*gl_, GenerateMipmapEXT(GL_TEXTURE_2D));
159 EXPECT_CALL( 145 EXPECT_CALL(
160 *gl_, 146 *gl_,
161 TexParameteri( 147 TexParameteri(
(...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after
504 cmd.Init(GL_TEXTURE_2D, 490 cmd.Init(GL_TEXTURE_2D,
505 0, 491 0,
506 GL_RGBA, 492 GL_RGBA,
507 kWidth, 493 kWidth,
508 kHeight, 494 kHeight,
509 GL_RGBA, 495 GL_RGBA,
510 GL_UNSIGNED_BYTE, 496 GL_UNSIGNED_BYTE,
511 kSharedMemoryId, 497 kSharedMemoryId,
512 kSharedMemoryOffset); 498 kSharedMemoryOffset);
513 } else { 499 } else {
514 SetupClearTextureExpectations(kServiceTextureId,
515 kServiceTextureId,
516 GL_TEXTURE_2D,
517 GL_TEXTURE_2D,
518 0,
519 GL_RGBA,
520 GL_RGBA,
521 GL_UNSIGNED_BYTE,
522 kWidth,
523 kHeight);
524 cmd.Init(GL_TEXTURE_2D, 500 cmd.Init(GL_TEXTURE_2D,
525 0, 501 0,
526 GL_RGBA, 502 GL_RGBA,
527 kWidth, 503 kWidth,
528 kHeight, 504 kHeight,
529 GL_RGBA, 505 GL_RGBA,
530 GL_UNSIGNED_BYTE, 506 GL_UNSIGNED_BYTE,
531 0, 507 0,
532 0); 508 0);
533 } 509 }
(...skipping 1235 matching lines...) Expand 10 before | Expand all | Expand 10 after
1769 init.gl_version = "opengl es 2.0"; 1745 init.gl_version = "opengl es 2.0";
1770 init.has_alpha = true; 1746 init.has_alpha = true;
1771 init.has_depth = true; 1747 init.has_depth = true;
1772 init.request_alpha = true; 1748 init.request_alpha = true;
1773 init.request_depth = true; 1749 init.request_depth = true;
1774 InitDecoder(init); 1750 InitDecoder(init);
1775 1751
1776 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 1752 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
1777 DoTexImage2D( 1753 DoTexImage2D(
1778 GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0); 1754 GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
1779 SetupClearTextureExpectations(kServiceTextureId, 1755 SetupClearTextureExpectations(kServiceTextureId, kServiceTextureId,
1780 kServiceTextureId, 1756 GL_TEXTURE_2D, GL_TEXTURE_2D, 0, GL_RGBA,
1781 GL_TEXTURE_2D, 1757 GL_RGBA, GL_UNSIGNED_BYTE, 0, 1, 2, 1);
1782 GL_TEXTURE_2D, 1758 EXPECT_CALL(*gl_, TexSubImage2D(GL_TEXTURE_2D, 0, 0, _, _, 1, GL_RGBA,
1783 0, 1759 GL_UNSIGNED_BYTE, shared_memory_address_))
1784 GL_RGBA, 1760 .Times(2)
1785 GL_RGBA,
1786 GL_UNSIGNED_BYTE,
1787 2,
1788 2);
1789 EXPECT_CALL(*gl_,
1790 TexSubImage2D(GL_TEXTURE_2D,
1791 0,
1792 1,
1793 1,
1794 1,
1795 1,
1796 GL_RGBA,
1797 GL_UNSIGNED_BYTE,
1798 shared_memory_address_))
1799 .Times(1)
1800 .RetiresOnSaturation(); 1761 .RetiresOnSaturation();
1801 TexSubImage2D cmd; 1762 TexSubImage2D cmd;
1802 cmd.Init(GL_TEXTURE_2D, 1763 cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 2, 1, GL_RGBA, GL_UNSIGNED_BYTE,
1803 0, 1764 kSharedMemoryId, kSharedMemoryOffset, GL_FALSE);
1804 1, 1765 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1805 1, 1766 cmd.Init(GL_TEXTURE_2D, 0, 0, 1, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE,
1806 1, 1767 kSharedMemoryId, kSharedMemoryOffset, GL_FALSE);
1807 1,
1808 GL_RGBA,
1809 GL_UNSIGNED_BYTE,
1810 kSharedMemoryId,
1811 kSharedMemoryOffset,
1812 GL_FALSE);
1813 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 1768 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1814 // Test if we call it again it does not clear. 1769 // Test if we call it again it does not clear.
1815 EXPECT_CALL(*gl_, 1770 EXPECT_CALL(*gl_, TexSubImage2D(GL_TEXTURE_2D, 0, 0, 1, 1, 1, GL_RGBA,
1816 TexSubImage2D(GL_TEXTURE_2D, 1771 GL_UNSIGNED_BYTE, shared_memory_address_))
1817 0,
1818 1,
1819 1,
1820 1,
1821 1,
1822 GL_RGBA,
1823 GL_UNSIGNED_BYTE,
1824 shared_memory_address_))
1825 .Times(1) 1772 .Times(1)
1826 .RetiresOnSaturation(); 1773 .RetiresOnSaturation();
1827 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 1774 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1828 } 1775 }
1829 1776
1830 TEST_P(GLES2DecoderTest, TexSubImage2DDoesNotClearAfterTexImage2DNULLThenData) { 1777 TEST_P(GLES2DecoderTest, TexSubImage2DDoesNotClearAfterTexImage2DNULLThenData) {
1831 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 1778 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
1832 DoTexImage2D( 1779 DoTexImage2D(
1833 GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0); 1780 GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
1834 DoTexImage2D(GL_TEXTURE_2D, 1781 DoTexImage2D(GL_TEXTURE_2D,
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
1971 GL_UNSIGNED_BYTE, 1918 GL_UNSIGNED_BYTE,
1972 kSharedMemoryId, 1919 kSharedMemoryId,
1973 kSharedMemoryOffset); 1920 kSharedMemoryOffset);
1974 // Put in no data. 1921 // Put in no data.
1975 TexImage2D tex_cmd; 1922 TexImage2D tex_cmd;
1976 tex_cmd.Init( 1923 tex_cmd.Init(
1977 GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0); 1924 GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
1978 // It won't actually call TexImage2D, just mark it as uncleared. 1925 // It won't actually call TexImage2D, just mark it as uncleared.
1979 EXPECT_EQ(error::kNoError, ExecuteCmd(tex_cmd)); 1926 EXPECT_EQ(error::kNoError, ExecuteCmd(tex_cmd));
1980 // Next call to TexSubImage2d should clear. 1927 // Next call to TexSubImage2d should clear.
1981 SetupClearTextureExpectations(kServiceTextureId, 1928 SetupClearTextureExpectations(kServiceTextureId, kServiceTextureId,
1982 kServiceTextureId, 1929 GL_TEXTURE_2D, GL_TEXTURE_2D, 0, GL_RGBA,
1983 GL_TEXTURE_2D, 1930 GL_RGBA, GL_UNSIGNED_BYTE, 0, 1, 2, 1);
1984 GL_TEXTURE_2D, 1931 EXPECT_CALL(*gl_, TexSubImage2D(GL_TEXTURE_2D, 0, 0, _, _, 1, GL_RGBA,
1985 0, 1932 GL_UNSIGNED_BYTE, shared_memory_address_))
1986 GL_RGBA, 1933 .Times(2)
1987 GL_RGBA,
1988 GL_UNSIGNED_BYTE,
1989 2,
1990 2);
1991 EXPECT_CALL(*gl_,
1992 TexSubImage2D(GL_TEXTURE_2D,
1993 0,
1994 1,
1995 1,
1996 1,
1997 1,
1998 GL_RGBA,
1999 GL_UNSIGNED_BYTE,
2000 shared_memory_address_))
2001 .Times(1)
2002 .RetiresOnSaturation(); 1934 .RetiresOnSaturation();
2003 TexSubImage2D cmd; 1935 TexSubImage2D cmd;
2004 cmd.Init(GL_TEXTURE_2D, 1936 cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 2, 1, GL_RGBA, GL_UNSIGNED_BYTE,
2005 0, 1937 kSharedMemoryId, kSharedMemoryOffset, GL_FALSE);
2006 1, 1938 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2007 1, 1939 cmd.Init(GL_TEXTURE_2D, 0, 0, 1, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE,
2008 1, 1940 kSharedMemoryId, kSharedMemoryOffset, GL_FALSE);
2009 1,
2010 GL_RGBA,
2011 GL_UNSIGNED_BYTE,
2012 kSharedMemoryId,
2013 kSharedMemoryOffset,
2014 GL_FALSE);
2015 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 1941 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2016 } 1942 }
2017 1943
2018 TEST_P(GLES2DecoderTest, CopyTexImage2DMarksTextureAsCleared) { 1944 TEST_P(GLES2DecoderTest, CopyTexImage2DMarksTextureAsCleared) {
2019 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 1945 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
2020 1946
2021 TextureManager* manager = group().texture_manager(); 1947 TextureManager* manager = group().texture_manager();
2022 TextureRef* texture_ref = manager->GetTexture(client_texture_id_); 1948 TextureRef* texture_ref = manager->GetTexture(client_texture_id_);
2023 ASSERT_TRUE(texture_ref != NULL); 1949 ASSERT_TRUE(texture_ref != NULL);
2024 Texture* texture = texture_ref->texture(); 1950 Texture* texture = texture_ref->texture();
2025 1951
2026 EXPECT_CALL(*gl_, GetError()) 1952 EXPECT_CALL(*gl_, GetError())
2027 .WillOnce(Return(GL_NO_ERROR)) 1953 .WillOnce(Return(GL_NO_ERROR))
2028 .RetiresOnSaturation(); 1954 .RetiresOnSaturation();
2029 EXPECT_CALL(*gl_, CopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, 1, 1, 0)) 1955 EXPECT_CALL(*gl_, CopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, 1, 1, 0))
2030 .Times(1) 1956 .Times(1)
2031 .RetiresOnSaturation(); 1957 .RetiresOnSaturation();
2032 EXPECT_CALL(*gl_, GetError()) 1958 EXPECT_CALL(*gl_, GetError())
2033 .WillOnce(Return(GL_NO_ERROR)) 1959 .WillOnce(Return(GL_NO_ERROR))
2034 .RetiresOnSaturation(); 1960 .RetiresOnSaturation();
2035 CopyTexImage2D cmd; 1961 CopyTexImage2D cmd;
2036 cmd.Init(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, 1, 1); 1962 cmd.Init(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, 1, 1);
2037 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 1963 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2038 1964
2039 EXPECT_TRUE(texture->SafeToRenderFrom()); 1965 EXPECT_TRUE(texture->SafeToRenderFrom());
2040 } 1966 }
2041 1967
2042 TEST_P(GLES2DecoderTest, CopyTexSubImage2DClearsUnclearedTexture) { 1968 TEST_P(GLES2DecoderTest, CopyTexSubImage2DTwiceMarksTextureAsCleared) {
2043 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 1969 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
2044 DoTexImage2D( 1970 DoTexImage2D(
2045 GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0); 1971 GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
2046 1972
2047 SetupClearTextureExpectations(kServiceTextureId, 1973 // This will initialize the top part.
2048 kServiceTextureId, 1974 {
2049 GL_TEXTURE_2D, 1975 EXPECT_CALL(*gl_, CopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 2, 1))
2050 GL_TEXTURE_2D, 1976 .Times(1)
2051 0, 1977 .RetiresOnSaturation();
2052 GL_RGBA, 1978 CopyTexSubImage2D cmd;
2053 GL_RGBA, 1979 cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 2, 1);
2054 GL_UNSIGNED_BYTE, 1980 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2055 2, 1981 }
2056 2); 1982
2057 EXPECT_CALL(*gl_, CopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 1, 1)) 1983 // This will initialize the bottom part.
2058 .Times(1) 1984 {
2059 .RetiresOnSaturation(); 1985 EXPECT_CALL(*gl_, CopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 1, 0, 0, 2, 1))
2060 CopyTexSubImage2D cmd; 1986 .Times(1)
2061 cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 1, 1); 1987 .RetiresOnSaturation();
2062 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 1988 CopyTexSubImage2D cmd;
1989 cmd.Init(GL_TEXTURE_2D, 0, 0, 1, 0, 0, 2, 1);
1990 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1991 }
2063 1992
2064 TextureManager* manager = group().texture_manager(); 1993 TextureManager* manager = group().texture_manager();
2065 TextureRef* texture_ref = manager->GetTexture(client_texture_id_); 1994 TextureRef* texture_ref = manager->GetTexture(client_texture_id_);
1995 ASSERT_TRUE(texture_ref != NULL);
1996 Texture* texture = texture_ref->texture();
1997 EXPECT_TRUE(texture->SafeToRenderFrom());
1998 }
1999
2000 TEST_P(GLES2DecoderTest, CopyTexSubImage2DTwiceClearsUnclearedTexture) {
2001 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
2002 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0,
2003 0);
2004
2005 // This will initialize the top part.
2006 {
2007 EXPECT_CALL(*gl_, CopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 2, 1))
2008 .Times(1)
2009 .RetiresOnSaturation();
2010 CopyTexSubImage2D cmd;
2011 cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 2, 1);
2012 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2013 }
2014
2015 SetupClearTextureExpectations(kServiceTextureId, kServiceTextureId,
2016 GL_TEXTURE_2D, GL_TEXTURE_2D, 0, GL_RGBA,
2017 GL_RGBA, GL_UNSIGNED_BYTE, 0, 1, 2, 1);
2018
2019 // This will clear the bottom part as a rectangle is not sufficient to keep
2020 // track of the initialized area.
2021 {
2022 EXPECT_CALL(*gl_, CopyTexSubImage2D(GL_TEXTURE_2D, 0, 1, 1, 0, 0, 1, 1))
2023 .Times(1)
2024 .RetiresOnSaturation();
2025 CopyTexSubImage2D cmd;
2026 cmd.Init(GL_TEXTURE_2D, 0, 1, 1, 0, 0, 1, 1);
2027 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2028 }
2029
2030 TextureManager* manager = group().texture_manager();
2031 TextureRef* texture_ref = manager->GetTexture(client_texture_id_);
2066 ASSERT_TRUE(texture_ref != NULL); 2032 ASSERT_TRUE(texture_ref != NULL);
2067 Texture* texture = texture_ref->texture(); 2033 Texture* texture = texture_ref->texture();
2068 EXPECT_TRUE(texture->SafeToRenderFrom()); 2034 EXPECT_TRUE(texture->SafeToRenderFrom());
2069 } 2035 }
2070 2036
2071 TEST_P(GLES2DecoderTest, CopyTexSubImage2DClearsUnclearedBackBufferSizedTexture) { 2037 TEST_P(GLES2DecoderTest, CopyTexSubImage2DClearsUnclearedBackBufferSizedTexture) {
2072 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 2038 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
2073 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, kBackBufferWidth, kBackBufferHeight, 2039 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, kBackBufferWidth, kBackBufferHeight,
2074 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0); 2040 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
2075 2041
(...skipping 597 matching lines...) Expand 10 before | Expand all | Expand 10 after
2673 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 0) == image.get()); 2639 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 0) == image.get());
2674 2640
2675 // ClearLevel should use glTexSubImage2D to avoid unbinding GLImage. 2641 // ClearLevel should use glTexSubImage2D to avoid unbinding GLImage.
2676 EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, kServiceTextureId)) 2642 EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, kServiceTextureId))
2677 .Times(2) 2643 .Times(2)
2678 .RetiresOnSaturation(); 2644 .RetiresOnSaturation();
2679 EXPECT_CALL(*gl_, TexSubImage2D(target, level, xoffset, yoffset, width, 2645 EXPECT_CALL(*gl_, TexSubImage2D(target, level, xoffset, yoffset, width,
2680 height, format, type, _)) 2646 height, format, type, _))
2681 .Times(1) 2647 .Times(1)
2682 .RetiresOnSaturation(); 2648 .RetiresOnSaturation();
2683 GetDecoder()->ClearLevel(texture, target, level, format, format, type, width, 2649 GetDecoder()->ClearLevel(texture, target, level, format, type, 0, 0, width,
2684 height, false); 2650 height);
2685 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 0) == image.get()); 2651 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 0) == image.get());
2686 } 2652 }
2687 2653
2688 TEST_P(GLES2DecoderTest, ReleaseTexImage2DCHROMIUM) { 2654 TEST_P(GLES2DecoderTest, ReleaseTexImage2DCHROMIUM) {
2689 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 2655 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
2690 DoTexImage2D( 2656 DoTexImage2D(
2691 GL_TEXTURE_2D, 0, GL_RGBA, 3, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0); 2657 GL_TEXTURE_2D, 0, GL_RGBA, 3, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
2692 TextureRef* texture_ref = 2658 TextureRef* texture_ref =
2693 group().texture_manager()->GetTexture(client_texture_id_); 2659 group().texture_manager()->GetTexture(client_texture_id_);
2694 ASSERT_TRUE(texture_ref != NULL); 2660 ASSERT_TRUE(texture_ref != NULL);
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
2888 init.has_alpha = true; 2854 init.has_alpha = true;
2889 init.has_depth = true; 2855 init.has_depth = true;
2890 init.request_alpha = true; 2856 init.request_alpha = true;
2891 init.request_depth = true; 2857 init.request_depth = true;
2892 init.bind_generates_resource = true; 2858 init.bind_generates_resource = true;
2893 InitDecoder(init); 2859 InitDecoder(init);
2894 2860
2895 TextureRef* texture_ref = GetTexture(client_texture_id_); 2861 TextureRef* texture_ref = GetTexture(client_texture_id_);
2896 scoped_refptr<MockGLImage> image(new MockGLImage); 2862 scoped_refptr<MockGLImage> image(new MockGLImage);
2897 group().texture_manager()->SetTarget(texture_ref, GL_TEXTURE_EXTERNAL_OES); 2863 group().texture_manager()->SetTarget(texture_ref, GL_TEXTURE_EXTERNAL_OES);
2898 group().texture_manager()->SetLevelInfo(texture_ref, 2864 group().texture_manager()->SetLevelInfo(texture_ref, GL_TEXTURE_EXTERNAL_OES,
2899 GL_TEXTURE_EXTERNAL_OES, 2865 0, GL_RGBA, 0, 0, 1, 0, GL_RGBA,
2900 0, 2866 GL_UNSIGNED_BYTE, gfx::Rect());
2901 GL_RGBA,
2902 0,
2903 0,
2904 1,
2905 0,
2906 GL_RGBA,
2907 GL_UNSIGNED_BYTE,
2908 true);
2909 group().texture_manager()->SetLevelImage( 2867 group().texture_manager()->SetLevelImage(
2910 texture_ref, GL_TEXTURE_EXTERNAL_OES, 0, image.get()); 2868 texture_ref, GL_TEXTURE_EXTERNAL_OES, 0, image.get());
2911 2869
2912 DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId); 2870 DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId);
2913 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 2871 EXPECT_EQ(GL_NO_ERROR, GetGLError());
2914 2872
2915 SetupSamplerExternalProgram(); 2873 SetupSamplerExternalProgram();
2916 SetupIndexBuffer(); 2874 SetupIndexBuffer();
2917 AddExpectationsForSimulatedAttrib0(kMaxValidIndex + 1, 0); 2875 AddExpectationsForSimulatedAttrib0(kMaxValidIndex + 1, 0);
2918 SetupExpectationsForApplyingDefaultDirtyState(); 2876 SetupExpectationsForApplyingDefaultDirtyState();
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
3051 DoTexImage2D(GL_TEXTURE_2D, 3009 DoTexImage2D(GL_TEXTURE_2D,
3052 0, 3010 0,
3053 GL_RGBA32F, 3011 GL_RGBA32F,
3054 kWidth, 3012 kWidth,
3055 kHeight, 3013 kHeight,
3056 0, 3014 0,
3057 GL_RGBA, 3015 GL_RGBA,
3058 GL_FLOAT, 3016 GL_FLOAT,
3059 0, 3017 0,
3060 0); 3018 0);
3061 SetupClearTextureExpectations(kServiceTextureId, 3019 SetupClearTextureExpectations(kServiceTextureId, kServiceTextureId,
3062 kServiceTextureId, 3020 GL_TEXTURE_2D, GL_TEXTURE_2D, 0, GL_RGBA32F,
3063 GL_TEXTURE_2D, 3021 GL_RGBA, GL_FLOAT, 0, kHeight - 1, kWidth, 1);
3064 GL_TEXTURE_2D, 3022 EXPECT_CALL(*gl_, TexSubImage2D(GL_TEXTURE_2D, 0, 0, _, _, _, GL_RGBA,
3065 0, 3023 GL_FLOAT, shared_memory_address_))
3066 GL_RGBA32F, 3024 .Times(2)
3067 GL_RGBA,
3068 GL_FLOAT,
3069 kWidth,
3070 kHeight);
3071 EXPECT_CALL(*gl_,
3072 TexSubImage2D(GL_TEXTURE_2D,
3073 0,
3074 1,
3075 0,
3076 kWidth - 1,
3077 kHeight,
3078 GL_RGBA,
3079 GL_FLOAT,
3080 shared_memory_address_))
3081 .Times(1)
3082 .RetiresOnSaturation(); 3025 .RetiresOnSaturation();
3083 TexSubImage2D cmd; 3026 TexSubImage2D cmd;
3084 cmd.Init(GL_TEXTURE_2D, 3027 cmd.Init(GL_TEXTURE_2D, 0, 0, 0, kWidth, kHeight - 1, GL_RGBA, GL_FLOAT,
3085 0, 3028 kSharedMemoryId, kSharedMemoryOffset, GL_FALSE);
3086 1, 3029 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
3087 0, 3030 cmd.Init(GL_TEXTURE_2D, 0, 0, kHeight - 1, kWidth - 1, 1, GL_RGBA, GL_FLOAT,
3088 kWidth - 1, 3031 kSharedMemoryId, kSharedMemoryOffset, GL_FALSE);
3089 kHeight,
3090 GL_RGBA,
3091 GL_FLOAT,
3092 kSharedMemoryId,
3093 kSharedMemoryOffset,
3094 GL_FALSE);
3095 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 3032 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
3096 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 3033 EXPECT_EQ(GL_NO_ERROR, GetGLError());
3097 } 3034 }
3098 3035
3099 TEST_P(GLES2DecoderManualInitTest, TexImage2DFloatConvertsFormatDesktop) { 3036 TEST_P(GLES2DecoderManualInitTest, TexImage2DFloatConvertsFormatDesktop) {
3100 InitState init; 3037 InitState init;
3101 init.extensions = "GL_ARB_texture_float"; 3038 init.extensions = "GL_ARB_texture_float";
3102 InitDecoder(init); 3039 InitDecoder(init);
3103 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 3040 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
3104 DoTexImage2D( 3041 DoTexImage2D(
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
3292 // TODO(gman): CompressedTexSubImage2DImmediate 3229 // TODO(gman): CompressedTexSubImage2DImmediate
3293 3230
3294 // TODO(gman): TexImage2D 3231 // TODO(gman): TexImage2D
3295 3232
3296 // TODO(gman): TexImage2DImmediate 3233 // TODO(gman): TexImage2DImmediate
3297 3234
3298 // TODO(gman): TexSubImage2DImmediate 3235 // TODO(gman): TexSubImage2DImmediate
3299 3236
3300 } // namespace gles2 3237 } // namespace gles2
3301 } // namespace gpu 3238 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698