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

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

Issue 1168213003: gpu: Make sure we restore scissor rect after clearing a texture level. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: enable scissor test in UnClearedAttachmentsGetClearedOnClear 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 1894 matching lines...) Expand 10 before | Expand all | Expand 10 after
1905 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0); 1905 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
1906 DoBindFramebuffer( 1906 DoBindFramebuffer(
1907 GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId); 1907 GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
1908 DoFramebufferTexture2D(GL_FRAMEBUFFER, 1908 DoFramebufferTexture2D(GL_FRAMEBUFFER,
1909 GL_COLOR_ATTACHMENT0, 1909 GL_COLOR_ATTACHMENT0,
1910 GL_TEXTURE_2D, 1910 GL_TEXTURE_2D,
1911 kFBOClientTextureId, 1911 kFBOClientTextureId,
1912 kFBOServiceTextureId, 1912 kFBOServiceTextureId,
1913 0, 1913 0,
1914 GL_NO_ERROR); 1914 GL_NO_ERROR);
1915 DoEnableDisable(GL_SCISSOR_TEST, false);
1916 DoScissor(0, 0, 1, 1);
1915 1917
1916 // Setup "render from" texture. 1918 // Setup "render from" texture.
1917 SetupTexture(); 1919 SetupTexture();
1918 1920
1919 SetupExpectationsForFramebufferClearing(GL_FRAMEBUFFER, // target 1921 SetupExpectationsForFramebufferClearing(GL_FRAMEBUFFER, // target
1920 GL_COLOR_BUFFER_BIT, // clear bits 1922 GL_COLOR_BUFFER_BIT, // clear bits
1921 0, 1923 0, 0, 0,
1922 0, 1924 0, // color
1923 0, 1925 0, // stencil
1924 0, // color 1926 1.0f, // depth
1925 0, // stencil 1927 false, // scissor test
1926 1.0f, // depth 1928 0, 0, 1, 1);
1927 false); // scissor test
1928 1929
1929 SetupExpectationsForApplyingDirtyState(false, // Framebuffer is RGB 1930 SetupExpectationsForApplyingDirtyState(false, // Framebuffer is RGB
1930 false, // Framebuffer has depth 1931 false, // Framebuffer has depth
1931 false, // Framebuffer has stencil 1932 false, // Framebuffer has stencil
1932 0x1111, // color bits 1933 0x1111, // color bits
1933 false, // depth mask 1934 false, // depth mask
1934 false, // depth enabled 1935 false, // depth enabled
1935 0, // front stencil mask 1936 0, // front stencil mask
1936 0, // back stencil mask 1937 0, // back stencil mask
1937 false); // stencil enabled 1938 false); // stencil enabled
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
1996 DoBindFramebuffer( 1997 DoBindFramebuffer(
1997 GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId); 1998 GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
1998 DoRenderbufferStorage( 1999 DoRenderbufferStorage(
1999 GL_RENDERBUFFER, GL_RGBA4, GL_RGBA, 100, 50, GL_NO_ERROR); 2000 GL_RENDERBUFFER, GL_RGBA4, GL_RGBA, 100, 50, GL_NO_ERROR);
2000 DoFramebufferRenderbuffer(GL_FRAMEBUFFER, 2001 DoFramebufferRenderbuffer(GL_FRAMEBUFFER,
2001 GL_COLOR_ATTACHMENT0, 2002 GL_COLOR_ATTACHMENT0,
2002 GL_RENDERBUFFER, 2003 GL_RENDERBUFFER,
2003 client_renderbuffer_id_, 2004 client_renderbuffer_id_,
2004 kServiceRenderbufferId, 2005 kServiceRenderbufferId,
2005 GL_NO_ERROR); 2006 GL_NO_ERROR);
2007 DoEnableDisable(GL_SCISSOR_TEST, false);
2008 DoScissor(0, 0, 1, 1);
2006 2009
2007 SetupExpectationsForFramebufferClearing(GL_FRAMEBUFFER, // target 2010 SetupExpectationsForFramebufferClearing(GL_FRAMEBUFFER, // target
2008 GL_COLOR_BUFFER_BIT, // clear bits 2011 GL_COLOR_BUFFER_BIT, // clear bits
2009 0, 2012 0, 0, 0,
2010 0, 2013 0, // color
2011 0, 2014 0, // stencil
2012 0, // color 2015 1.0f, // depth
2013 0, // stencil 2016 false, // scissor test
2014 1.0f, // depth 2017 0, 0, 1, 1);
2015 false); // scissor test
2016 2018
2017 AddExpectationsForSimulatedAttrib0(kNumVertices, 0); 2019 AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
2018 SetupExpectationsForApplyingDirtyState(false, // Framebuffer is RGB 2020 SetupExpectationsForApplyingDirtyState(false, // Framebuffer is RGB
2019 false, // Framebuffer has depth 2021 false, // Framebuffer has depth
2020 false, // Framebuffer has stencil 2022 false, // Framebuffer has stencil
2021 0x1111, // color bits 2023 0x1111, // color bits
2022 false, // depth mask 2024 false, // depth mask
2023 false, // depth enabled 2025 false, // depth enabled
2024 0, // front stencil mask 2026 0, // front stencil mask
2025 0, // back stencil mask 2027 0, // back stencil mask
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
2131 GL_DEPTH_COMPONENT, 2133 GL_DEPTH_COMPONENT,
2132 1, 2134 1,
2133 1, 2135 1,
2134 GL_NO_ERROR); 2136 GL_NO_ERROR);
2135 DoFramebufferRenderbuffer(GL_FRAMEBUFFER, 2137 DoFramebufferRenderbuffer(GL_FRAMEBUFFER,
2136 GL_DEPTH_ATTACHMENT, 2138 GL_DEPTH_ATTACHMENT,
2137 GL_RENDERBUFFER, 2139 GL_RENDERBUFFER,
2138 client_renderbuffer_id_, 2140 client_renderbuffer_id_,
2139 kServiceRenderbufferId, 2141 kServiceRenderbufferId,
2140 GL_NO_ERROR); 2142 GL_NO_ERROR);
2141 2143 DoEnableDisable(GL_SCISSOR_TEST, false);
2144 DoScissor(0, 0, 1, 1);
2142 SetupTexture(); 2145 SetupTexture();
2143 SetupExpectationsForFramebufferClearing( 2146 SetupExpectationsForFramebufferClearing(
2144 GL_FRAMEBUFFER, // target 2147 GL_FRAMEBUFFER, // target
2145 GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT, // clear bits 2148 GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT, // clear bits
2146 0, 2149 0, 0, 0,
2147 0, 2150 0, // color
2148 0, 2151 0, // stencil
2149 0, // color 2152 1.0f, // depth
2150 0, // stencil 2153 false, // scissor test
2151 1.0f, // depth 2154 0, 0, 1, 1);
2152 false); // scissor test
2153 2155
2154 AddExpectationsForSimulatedAttrib0(kNumVertices, 0); 2156 AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
2155 SetupExpectationsForApplyingDirtyState(false, // Framebuffer is RGB 2157 SetupExpectationsForApplyingDirtyState(false, // Framebuffer is RGB
2156 true, // Framebuffer has depth 2158 true, // Framebuffer has depth
2157 false, // Framebuffer has stencil 2159 false, // Framebuffer has stencil
2158 0x1111, // color bits 2160 0x1111, // color bits
2159 true, // depth mask 2161 true, // depth mask
2160 false, // depth enabled 2162 false, // depth enabled
2161 0, // front stencil mask 2163 0, // front stencil mask
2162 0, // back stencil mask 2164 0, // back stencil mask
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
2263 level, 2265 level,
2264 GL_DEPTH_COMPONENT, 2266 GL_DEPTH_COMPONENT,
2265 1, 2267 1,
2266 1, 2268 1,
2267 0, 2269 0,
2268 GL_DEPTH_COMPONENT, 2270 GL_DEPTH_COMPONENT,
2269 GL_UNSIGNED_INT, 2271 GL_UNSIGNED_INT,
2270 0, 2272 0,
2271 0); 2273 0);
2272 2274
2273 // Disable GL_SCISSOR_TEST to make sure we enable it in the clear, 2275 // Set scissor rect and disable GL_SCISSOR_TEST to make sure we enable it in
2274 // then disable it again. 2276 // the clear, then disable it and restore the rect again.
2277 DoScissor(0, 0, 32, 32);
2275 DoEnableDisable(GL_SCISSOR_TEST, false); 2278 DoEnableDisable(GL_SCISSOR_TEST, false);
2276 2279
2277 EXPECT_CALL(*gl_, GenFramebuffersEXT(1, _)).Times(1).RetiresOnSaturation(); 2280 EXPECT_CALL(*gl_, GenFramebuffersEXT(1, _)).Times(1).RetiresOnSaturation();
2278 EXPECT_CALL(*gl_, BindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, _)) 2281 EXPECT_CALL(*gl_, BindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, _))
2279 .Times(1) 2282 .Times(1)
2280 .RetiresOnSaturation(); 2283 .RetiresOnSaturation();
2281 2284
2282 EXPECT_CALL(*gl_, 2285 EXPECT_CALL(*gl_,
2283 FramebufferTexture2DEXT(GL_DRAW_FRAMEBUFFER_EXT, 2286 FramebufferTexture2DEXT(GL_DRAW_FRAMEBUFFER_EXT,
2284 attachment, 2287 attachment,
2285 target, 2288 target,
2286 kServiceTextureId, 2289 kServiceTextureId,
2287 level)) 2290 level))
2288 .Times(1) 2291 .Times(1)
2289 .RetiresOnSaturation(); 2292 .RetiresOnSaturation();
2290 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_DRAW_FRAMEBUFFER_EXT)) 2293 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_DRAW_FRAMEBUFFER_EXT))
2291 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) 2294 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
2292 .RetiresOnSaturation(); 2295 .RetiresOnSaturation();
2293 2296
2294 EXPECT_CALL(*gl_, ClearStencil(0)).Times(1).RetiresOnSaturation(); 2297 EXPECT_CALL(*gl_, ClearStencil(0)).Times(1).RetiresOnSaturation();
2295 SetupExpectationsForStencilMask(GLES2Decoder::kDefaultStencilMask, 2298 SetupExpectationsForStencilMask(GLES2Decoder::kDefaultStencilMask,
2296 GLES2Decoder::kDefaultStencilMask); 2299 GLES2Decoder::kDefaultStencilMask);
2297 EXPECT_CALL(*gl_, ClearDepth(1.0f)).Times(1).RetiresOnSaturation(); 2300 EXPECT_CALL(*gl_, ClearDepth(1.0f)).Times(1).RetiresOnSaturation();
2298 SetupExpectationsForDepthMask(true); 2301 SetupExpectationsForDepthMask(true);
2299 EXPECT_CALL(*gl_, Scissor(0.0f, 0.0f, 1.0f, 1.0f)) 2302 SetupExpectationsForEnableDisable(GL_SCISSOR_TEST, true);
2300 .Times(1) 2303 EXPECT_CALL(*gl_, Scissor(0, 0, 1, 1)).Times(1).RetiresOnSaturation();
2301 .RetiresOnSaturation();
2302 2304
2303 EXPECT_CALL(*gl_, Clear(GL_DEPTH_BUFFER_BIT)).Times(1).RetiresOnSaturation(); 2305 EXPECT_CALL(*gl_, Clear(GL_DEPTH_BUFFER_BIT)).Times(1).RetiresOnSaturation();
2304 2306
2305 EXPECT_CALL(*gl_, Disable(GL_SCISSOR_TEST)).Times(1).RetiresOnSaturation(); 2307 SetupExpectationsForRestoreClearState(0.0f, 0.0f, 0.0f, 0.0f, 0, 1.0f, false,
2306 SetupExpectationsForRestoreClearState(0.0f, 0.0f, 0.0f, 0.0f, 0, 1.0f, true); 2308 0, 0, 32, 32);
2307 2309
2308 EXPECT_CALL(*gl_, DeleteFramebuffersEXT(1, _)).Times(1).RetiresOnSaturation(); 2310 EXPECT_CALL(*gl_, DeleteFramebuffersEXT(1, _)).Times(1).RetiresOnSaturation();
2309 EXPECT_CALL(*gl_, BindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, 0)) 2311 EXPECT_CALL(*gl_, BindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, 0))
2310 .Times(1) 2312 .Times(1)
2311 .RetiresOnSaturation(); 2313 .RetiresOnSaturation();
2312 2314
2313 SetupExpectationsForApplyingDefaultDirtyState(); 2315 SetupExpectationsForApplyingDefaultDirtyState();
2314 EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices)) 2316 EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
2315 .Times(1) 2317 .Times(1)
2316 .RetiresOnSaturation(); 2318 .RetiresOnSaturation();
2317 DrawArrays cmd; 2319 DrawArrays cmd;
2318 cmd.Init(GL_TRIANGLES, 0, kNumVertices); 2320 cmd.Init(GL_TRIANGLES, 0, kNumVertices);
2319 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 2321 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2320 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 2322 EXPECT_EQ(GL_NO_ERROR, GetGLError());
2321 } 2323 }
2322 2324
2323 } // namespace gles2 2325 } // namespace gles2
2324 } // namespace gpu 2326 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698