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

Side by Side Diff: src/gpu/gl/GrGLGpu.cpp

Issue 2251573002: Implement difference clip rects with window rectangles (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 4 years, 4 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 /* 1 /*
2 * Copyright 2011 Google Inc. 2 * Copyright 2011 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "GrGLGpu.h" 8 #include "GrGLGpu.h"
9 #include "GrGLBuffer.h" 9 #include "GrGLBuffer.h"
10 #include "GrGLGLSL.h" 10 #include "GrGLGLSL.h"
(...skipping 545 matching lines...) Expand 10 before | Expand all | Expand 10 after
556 fHWBufferTextures[b].fKnownBound = false; 556 fHWBufferTextures[b].fKnownBound = false;
557 } 557 }
558 } 558 }
559 559
560 if (resetBits & kBlend_GrGLBackendState) { 560 if (resetBits & kBlend_GrGLBackendState) {
561 fHWBlendState.invalidate(); 561 fHWBlendState.invalidate();
562 } 562 }
563 563
564 if (resetBits & kView_GrGLBackendState) { 564 if (resetBits & kView_GrGLBackendState) {
565 fHWScissorSettings.invalidate(); 565 fHWScissorSettings.invalidate();
566 fHWWindows.invalidate();
566 fHWViewport.invalidate(); 567 fHWViewport.invalidate();
567 } 568 }
568 569
569 if (resetBits & kStencil_GrGLBackendState) { 570 if (resetBits & kStencil_GrGLBackendState) {
570 fHWStencilSettings.invalidate(); 571 fHWStencilSettings.invalidate();
571 fHWStencilTestEnabled = kUnknown_TriState; 572 fHWStencilTestEnabled = kUnknown_TriState;
572 } 573 }
573 574
574 // Vertex 575 // Vertex
575 if (resetBits & kVertex_GrGLBackendState) { 576 if (resetBits & kVertex_GrGLBackendState) {
(...skipping 1412 matching lines...) Expand 10 before | Expand all | Expand 10 after
1988 fHWScissorSettings.fEnabled = kYes_TriState; 1989 fHWScissorSettings.fEnabled = kYes_TriState;
1989 } 1990 }
1990 return; 1991 return;
1991 } 1992 }
1992 } 1993 }
1993 1994
1994 // See fall through note above 1995 // See fall through note above
1995 this->disableScissor(); 1996 this->disableScissor();
1996 } 1997 }
1997 1998
1999 void GrGLGpu::flushWindowRectangles(const GrWindowRectangles& windows, const GrG LRenderTarget* rt) {
2000 SkASSERT(windows.count() <= this->caps()->maxWindowRectangles());
2001 if (!this->caps()->maxWindowRectangles() ||
2002 fHWWindows.areEqual(rt->origin(), rt->getViewport(), windows)) {
2003 return;
2004 }
2005
2006 const SkIRect* skwindows = windows.data();
2007 SkAutoSTMalloc<8, GrGLIRect> glwindows(windows.count());
2008 for (int i = 0; i < windows.count(); ++i) {
2009 glwindows[i].setRelativeTo(rt->getViewport(), skwindows[i], rt->origin() );
2010 }
2011
2012 typedef GrWindowRectangles::Mode Mode;
2013 GrGLenum glmode = Mode::kExclusive == windows.mode() ? GR_GL_EXCLUSIVE : GR_ GL_INCLUSIVE;
2014 GL_CALL(WindowRectangles(glmode, windows.count(), glwindows[0].asInts()));
2015
2016 fHWWindows.set(rt->origin(), rt->getViewport(), windows);
2017 SkASSERT(fHWWindows.areDisabled() || rt->renderFBOID()); // Can't use window rects on-screen.
2018 }
2019
2020 void GrGLGpu::disableWindowRectangles() {
2021 if (!this->caps()->maxWindowRectangles() || fHWWindows.areDisabled()) {
2022 return;
2023 }
2024 GL_CALL(WindowRectangles(GR_GL_EXCLUSIVE, 0, nullptr));
2025 fHWWindows.setDisabled();
2026 }
2027
1998 void GrGLGpu::flushMinSampleShading(float minSampleShading) { 2028 void GrGLGpu::flushMinSampleShading(float minSampleShading) {
1999 if (fHWMinSampleShading != minSampleShading) { 2029 if (fHWMinSampleShading != minSampleShading) {
2000 if (minSampleShading > 0.0) { 2030 if (minSampleShading > 0.0) {
2001 GL_CALL(Enable(GR_GL_SAMPLE_SHADING)); 2031 GL_CALL(Enable(GR_GL_SAMPLE_SHADING));
2002 GL_CALL(MinSampleShading(minSampleShading)); 2032 GL_CALL(MinSampleShading(minSampleShading));
2003 } 2033 }
2004 else { 2034 else {
2005 GL_CALL(Disable(GR_GL_SAMPLE_SHADING)); 2035 GL_CALL(Disable(GR_GL_SAMPLE_SHADING));
2006 } 2036 }
2007 fHWMinSampleShading = minSampleShading; 2037 fHWMinSampleShading = minSampleShading;
(...skipping 27 matching lines...) Expand all
2035 const GrSwizzle& swizzle = this->glCaps().glslCaps()->configOutputSwizzl e( 2065 const GrSwizzle& swizzle = this->glCaps().glslCaps()->configOutputSwizzl e(
2036 pipeline.getRenderTarget()->config()); 2066 pipeline.getRenderTarget()->config());
2037 this->flushBlend(blendInfo, swizzle); 2067 this->flushBlend(blendInfo, swizzle);
2038 } 2068 }
2039 2069
2040 program->setData(primProc, pipeline); 2070 program->setData(primProc, pipeline);
2041 2071
2042 GrGLRenderTarget* glRT = static_cast<GrGLRenderTarget*>(pipeline.getRenderTa rget()); 2072 GrGLRenderTarget* glRT = static_cast<GrGLRenderTarget*>(pipeline.getRenderTa rget());
2043 this->flushStencil(pipeline.getStencil()); 2073 this->flushStencil(pipeline.getStencil());
2044 this->flushScissor(pipeline.getScissorState(), glRT->getViewport(), glRT->or igin()); 2074 this->flushScissor(pipeline.getScissorState(), glRT->getViewport(), glRT->or igin());
2075 this->flushWindowRectangles(pipeline.getWindowRectangles(), glRT);
2045 this->flushHWAAState(glRT, pipeline.isHWAntialiasState(), !pipeline.getStenc il().isDisabled()); 2076 this->flushHWAAState(glRT, pipeline.isHWAntialiasState(), !pipeline.getStenc il().isDisabled());
2046 2077
2047 // This must come after textures are flushed because a texture may need 2078 // This must come after textures are flushed because a texture may need
2048 // to be msaa-resolved (which will modify bound FBO state). 2079 // to be msaa-resolved (which will modify bound FBO state).
2049 this->flushRenderTarget(glRT, nullptr, pipeline.getDisableOutputConversionTo SRGB()); 2080 this->flushRenderTarget(glRT, nullptr, pipeline.getDisableOutputConversionTo SRGB());
2050 2081
2051 return true; 2082 return true;
2052 } 2083 }
2053 2084
2054 void GrGLGpu::setupGeometry(const GrPrimitiveProcessor& primProc, 2085 void GrGLGpu::setupGeometry(const GrPrimitiveProcessor& primProc,
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
2164 this->handleDirtyContext(); 2195 this->handleDirtyContext();
2165 2196
2166 // parent class should never let us get here with no RT 2197 // parent class should never let us get here with no RT
2167 SkASSERT(target); 2198 SkASSERT(target);
2168 GrGLRenderTarget* glRT = static_cast<GrGLRenderTarget*>(target); 2199 GrGLRenderTarget* glRT = static_cast<GrGLRenderTarget*>(target);
2169 2200
2170 this->flushRenderTarget(glRT, &rect); 2201 this->flushRenderTarget(glRT, &rect);
2171 GrScissorState scissorState; 2202 GrScissorState scissorState;
2172 scissorState.set(rect); 2203 scissorState.set(rect);
2173 this->flushScissor(scissorState, glRT->getViewport(), glRT->origin()); 2204 this->flushScissor(scissorState, glRT->getViewport(), glRT->origin());
2205 this->disableWindowRectangles();
2174 2206
2175 GrGLfloat r, g, b, a; 2207 GrGLfloat r, g, b, a;
2176 static const GrGLfloat scale255 = 1.f / 255.f; 2208 static const GrGLfloat scale255 = 1.f / 255.f;
2177 a = GrColorUnpackA(color) * scale255; 2209 a = GrColorUnpackA(color) * scale255;
2178 GrGLfloat scaleRGB = scale255; 2210 GrGLfloat scaleRGB = scale255;
2179 r = GrColorUnpackR(color) * scaleRGB; 2211 r = GrColorUnpackR(color) * scaleRGB;
2180 g = GrColorUnpackG(color) * scaleRGB; 2212 g = GrColorUnpackG(color) * scaleRGB;
2181 b = GrColorUnpackB(color) * scaleRGB; 2213 b = GrColorUnpackB(color) * scaleRGB;
2182 2214
2183 GL_CALL(ColorMask(GR_GL_TRUE, GR_GL_TRUE, GR_GL_TRUE, GR_GL_TRUE)); 2215 GL_CALL(ColorMask(GR_GL_TRUE, GR_GL_TRUE, GR_GL_TRUE, GR_GL_TRUE));
2184 fHWWriteToColor = kYes_TriState; 2216 fHWWriteToColor = kYes_TriState;
2185 GL_CALL(ClearColor(r, g, b, a)); 2217 GL_CALL(ClearColor(r, g, b, a));
2186 GL_CALL(Clear(GR_GL_COLOR_BUFFER_BIT)); 2218 GL_CALL(Clear(GR_GL_COLOR_BUFFER_BIT));
2187 } 2219 }
2188 2220
2189 void GrGLGpu::clearStencil(GrRenderTarget* target) { 2221 void GrGLGpu::clearStencil(GrRenderTarget* target) {
2190 if (nullptr == target) { 2222 if (nullptr == target) {
2191 return; 2223 return;
2192 } 2224 }
2193 GrGLRenderTarget* glRT = static_cast<GrGLRenderTarget*>(target); 2225 GrGLRenderTarget* glRT = static_cast<GrGLRenderTarget*>(target);
2194 this->flushRenderTarget(glRT, &SkIRect::EmptyIRect()); 2226 this->flushRenderTarget(glRT, &SkIRect::EmptyIRect());
2195 2227
2196 this->disableScissor(); 2228 this->disableScissor();
2229 this->disableWindowRectangles();
2197 2230
2198 GL_CALL(StencilMask(0xffffffff)); 2231 GL_CALL(StencilMask(0xffffffff));
2199 GL_CALL(ClearStencil(0)); 2232 GL_CALL(ClearStencil(0));
2200 GL_CALL(Clear(GR_GL_STENCIL_BUFFER_BIT)); 2233 GL_CALL(Clear(GR_GL_STENCIL_BUFFER_BIT));
2201 fHWStencilSettings.invalidate(); 2234 fHWStencilSettings.invalidate();
2202 } 2235 }
2203 2236
2204 void GrGLGpu::clearStencilClip(const SkIRect& rect, bool insideClip, GrRenderTar get* target) { 2237 void GrGLGpu::clearStencilClip(const SkIRect& rect, bool insideClip, GrRenderTar get* target) {
2205 SkASSERT(target); 2238 SkASSERT(target);
2206 this->handleDirtyContext(); 2239 this->handleDirtyContext();
(...skipping 19 matching lines...) Expand all
2226 value = (1 << (stencilBitCount - 1)); 2259 value = (1 << (stencilBitCount - 1));
2227 } else { 2260 } else {
2228 value = 0; 2261 value = 0;
2229 } 2262 }
2230 GrGLRenderTarget* glRT = static_cast<GrGLRenderTarget*>(target); 2263 GrGLRenderTarget* glRT = static_cast<GrGLRenderTarget*>(target);
2231 this->flushRenderTarget(glRT, &SkIRect::EmptyIRect()); 2264 this->flushRenderTarget(glRT, &SkIRect::EmptyIRect());
2232 2265
2233 GrScissorState scissorState; 2266 GrScissorState scissorState;
2234 scissorState.set(rect); 2267 scissorState.set(rect);
2235 this->flushScissor(scissorState, glRT->getViewport(), glRT->origin()); 2268 this->flushScissor(scissorState, glRT->getViewport(), glRT->origin());
2269 this->disableWindowRectangles();
2236 2270
2237 GL_CALL(StencilMask((uint32_t) clipStencilMask)); 2271 GL_CALL(StencilMask((uint32_t) clipStencilMask));
2238 GL_CALL(ClearStencil(value)); 2272 GL_CALL(ClearStencil(value));
2239 GL_CALL(Clear(GR_GL_STENCIL_BUFFER_BIT)); 2273 GL_CALL(Clear(GR_GL_STENCIL_BUFFER_BIT));
2240 fHWStencilSettings.invalidate(); 2274 fHWStencilSettings.invalidate();
2241 } 2275 }
2242 2276
2243 static bool read_pixels_pays_for_y_flip(GrRenderTarget* renderTarget, const GrGL Caps& caps, 2277 static bool read_pixels_pays_for_y_flip(GrRenderTarget* renderTarget, const GrGL Caps& caps,
2244 int width, int height, GrPixelConfig co nfig, 2278 int width, int height, GrPixelConfig co nfig,
2245 size_t rowBytes) { 2279 size_t rowBytes) {
(...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after
2596 } 2630 }
2597 2631
2598 void GrGLGpu::finishDrawTarget() { 2632 void GrGLGpu::finishDrawTarget() {
2599 if (fPLSHasBeenUsed) { 2633 if (fPLSHasBeenUsed) {
2600 /* There is an ARM driver bug where if we use PLS, and then draw a frame which does not 2634 /* There is an ARM driver bug where if we use PLS, and then draw a frame which does not
2601 * use PLS, it leaves garbage all over the place. As a workaround, we us e PLS in a 2635 * use PLS, it leaves garbage all over the place. As a workaround, we us e PLS in a
2602 * trivial way every frame. And since we use it every frame, there's nev er a point at which 2636 * trivial way every frame. And since we use it every frame, there's nev er a point at which
2603 * it becomes safe to stop using this workaround once we start. 2637 * it becomes safe to stop using this workaround once we start.
2604 */ 2638 */
2605 this->disableScissor(); 2639 this->disableScissor();
2640 this->disableWindowRectangles();
2606 // using PLS in the presence of MSAA results in GL_INVALID_OPERATION 2641 // using PLS in the presence of MSAA results in GL_INVALID_OPERATION
2607 this->flushHWAAState(nullptr, false, false); 2642 this->flushHWAAState(nullptr, false, false);
2608 SkASSERT(!fHWPLSEnabled); 2643 SkASSERT(!fHWPLSEnabled);
2609 SkASSERT(fMSAAEnabled != kYes_TriState); 2644 SkASSERT(fMSAAEnabled != kYes_TriState);
2610 GL_CALL(Enable(GR_GL_SHADER_PIXEL_LOCAL_STORAGE)); 2645 GL_CALL(Enable(GR_GL_SHADER_PIXEL_LOCAL_STORAGE));
2611 this->stampPLSSetupRect(SkRect::MakeXYWH(-100.0f, -100.0f, 0.01f, 0.01f) ); 2646 this->stampPLSSetupRect(SkRect::MakeXYWH(-100.0f, -100.0f, 0.01f, 0.01f) );
2612 GL_CALL(Disable(GR_GL_SHADER_PIXEL_LOCAL_STORAGE)); 2647 GL_CALL(Disable(GR_GL_SHADER_PIXEL_LOCAL_STORAGE));
2613 } 2648 }
2614 } 2649 }
2615 2650
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
2745 } while ((nonIdxMesh = iter.next())); 2780 } while ((nonIdxMesh = iter.next()));
2746 } 2781 }
2747 2782
2748 if (fHWPLSEnabled && plsState == GrPixelLocalStorageState::kFinish_GrPixelLo calStorageState) { 2783 if (fHWPLSEnabled && plsState == GrPixelLocalStorageState::kFinish_GrPixelLo calStorageState) {
2749 // PLS draws always involve multiple draws, finishing up with a non-PLS 2784 // PLS draws always involve multiple draws, finishing up with a non-PLS
2750 // draw that writes to the color buffer. That draw ends up here; we wait 2785 // draw that writes to the color buffer. That draw ends up here; we wait
2751 // until after it is complete to actually disable PLS. 2786 // until after it is complete to actually disable PLS.
2752 GL_CALL(Disable(GR_GL_SHADER_PIXEL_LOCAL_STORAGE)); 2787 GL_CALL(Disable(GR_GL_SHADER_PIXEL_LOCAL_STORAGE));
2753 fHWPLSEnabled = false; 2788 fHWPLSEnabled = false;
2754 this->disableScissor(); 2789 this->disableScissor();
2790 this->disableWindowRectangles();
2755 } 2791 }
2756 2792
2757 #if SWAP_PER_DRAW 2793 #if SWAP_PER_DRAW
2758 glFlush(); 2794 glFlush();
2759 #if defined(SK_BUILD_FOR_MAC) 2795 #if defined(SK_BUILD_FOR_MAC)
2760 aglSwapBuffers(aglGetCurrentContext()); 2796 aglSwapBuffers(aglGetCurrentContext());
2761 int set_a_break_pt_here = 9; 2797 int set_a_break_pt_here = 9;
2762 aglSwapBuffers(aglGetCurrentContext()); 2798 aglSwapBuffers(aglGetCurrentContext());
2763 #elif defined(SK_BUILD_FOR_WIN32) 2799 #elif defined(SK_BUILD_FOR_WIN32)
2764 SwapBuf(); 2800 SwapBuf();
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
2841 // the bound DRAW FBO ID. 2877 // the bound DRAW FBO ID.
2842 fHWBoundRenderTargetUniqueID = SK_InvalidUniqueID; 2878 fHWBoundRenderTargetUniqueID = SK_InvalidUniqueID;
2843 const GrGLIRect& vp = rt->getViewport(); 2879 const GrGLIRect& vp = rt->getViewport();
2844 const SkIRect dirtyRect = rt->getResolveRect(); 2880 const SkIRect dirtyRect = rt->getResolveRect();
2845 2881
2846 if (GrGLCaps::kES_Apple_MSFBOType == this->glCaps().msFBOType()) { 2882 if (GrGLCaps::kES_Apple_MSFBOType == this->glCaps().msFBOType()) {
2847 // Apple's extension uses the scissor as the blit bounds. 2883 // Apple's extension uses the scissor as the blit bounds.
2848 GrScissorState scissorState; 2884 GrScissorState scissorState;
2849 scissorState.set(dirtyRect); 2885 scissorState.set(dirtyRect);
2850 this->flushScissor(scissorState, vp, rt->origin()); 2886 this->flushScissor(scissorState, vp, rt->origin());
2887 this->disableWindowRectangles();
2851 GL_CALL(ResolveMultisampleFramebuffer()); 2888 GL_CALL(ResolveMultisampleFramebuffer());
2852 } else { 2889 } else {
2853 GrGLIRect r; 2890 GrGLIRect r;
2854 r.setRelativeTo(vp, dirtyRect.fLeft, dirtyRect.fTop, 2891 r.setRelativeTo(vp, dirtyRect.fLeft, dirtyRect.fTop,
2855 dirtyRect.width(), dirtyRect.height(), target->o rigin()); 2892 dirtyRect.width(), dirtyRect.height(), target->o rigin());
2856 2893
2857 int right = r.fLeft + r.fWidth; 2894 int right = r.fLeft + r.fWidth;
2858 int top = r.fBottom + r.fHeight; 2895 int top = r.fBottom + r.fHeight;
2859 2896
2860 // BlitFrameBuffer respects the scissor, so disable it. 2897 // BlitFrameBuffer respects the scissor, so disable it.
2861 this->disableScissor(); 2898 this->disableScissor();
2899 this->disableWindowRectangles();
2862 GL_CALL(BlitFramebuffer(r.fLeft, r.fBottom, right, top, 2900 GL_CALL(BlitFramebuffer(r.fLeft, r.fBottom, right, top,
2863 r.fLeft, r.fBottom, right, top, 2901 r.fLeft, r.fBottom, right, top,
2864 GR_GL_COLOR_BUFFER_BIT, GR_GL_NEAREST)); 2902 GR_GL_COLOR_BUFFER_BIT, GR_GL_NEAREST));
2865 } 2903 }
2866 } 2904 }
2867 rt->flagAsResolved(); 2905 rt->flagAsResolved();
2868 } 2906 }
2869 } 2907 }
2870 2908
2871 namespace { 2909 namespace {
(...skipping 1212 matching lines...) Expand 10 before | Expand all | Expand 10 after
4084 GL_CALL(Uniform4fv(fWireRectProgram.fRectUniform, 1, edges)); 4122 GL_CALL(Uniform4fv(fWireRectProgram.fRectUniform, 1, edges));
4085 GL_CALL(Uniform4fv(fWireRectProgram.fColorUniform, 1, channels)); 4123 GL_CALL(Uniform4fv(fWireRectProgram.fColorUniform, 1, channels));
4086 4124
4087 GrXferProcessor::BlendInfo blendInfo; 4125 GrXferProcessor::BlendInfo blendInfo;
4088 blendInfo.reset(); 4126 blendInfo.reset();
4089 this->flushBlend(blendInfo, GrSwizzle::RGBA()); 4127 this->flushBlend(blendInfo, GrSwizzle::RGBA());
4090 this->flushColorWrite(true); 4128 this->flushColorWrite(true);
4091 this->flushDrawFace(GrDrawFace::kBoth); 4129 this->flushDrawFace(GrDrawFace::kBoth);
4092 this->flushHWAAState(glRT, false, false); 4130 this->flushHWAAState(glRT, false, false);
4093 this->disableScissor(); 4131 this->disableScissor();
4132 this->disableWindowRectangles();
4094 GrStencilSettings stencil; 4133 GrStencilSettings stencil;
4095 stencil.setDisabled(); 4134 stencil.setDisabled();
4096 this->flushStencil(stencil); 4135 this->flushStencil(stencil);
4097 4136
4098 GL_CALL(DrawArrays(GR_GL_LINE_LOOP, 0, 4)); 4137 GL_CALL(DrawArrays(GR_GL_LINE_LOOP, 0, 4));
4099 } 4138 }
4100 4139
4101 4140
4102 bool GrGLGpu::copySurfaceAsDraw(GrSurface* dst, 4141 bool GrGLGpu::copySurfaceAsDraw(GrSurface* dst,
4103 GrSurface* src, 4142 GrSurface* src,
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
4172 sx1 - sx0, sy1 - sy0, sx0, sy0)); 4211 sx1 - sx0, sy1 - sy0, sx0, sy0));
4173 GL_CALL(Uniform1i(fCopyPrograms[progIdx].fTextureUniform, 0)); 4212 GL_CALL(Uniform1i(fCopyPrograms[progIdx].fTextureUniform, 0));
4174 4213
4175 GrXferProcessor::BlendInfo blendInfo; 4214 GrXferProcessor::BlendInfo blendInfo;
4176 blendInfo.reset(); 4215 blendInfo.reset();
4177 this->flushBlend(blendInfo, GrSwizzle::RGBA()); 4216 this->flushBlend(blendInfo, GrSwizzle::RGBA());
4178 this->flushColorWrite(true); 4217 this->flushColorWrite(true);
4179 this->flushDrawFace(GrDrawFace::kBoth); 4218 this->flushDrawFace(GrDrawFace::kBoth);
4180 this->flushHWAAState(nullptr, false, false); 4219 this->flushHWAAState(nullptr, false, false);
4181 this->disableScissor(); 4220 this->disableScissor();
4221 this->disableWindowRectangles();
4182 GrStencilSettings stencil; 4222 GrStencilSettings stencil;
4183 stencil.setDisabled(); 4223 stencil.setDisabled();
4184 this->flushStencil(stencil); 4224 this->flushStencil(stencil);
4185 4225
4186 GL_CALL(DrawArrays(GR_GL_TRIANGLE_STRIP, 0, 4)); 4226 GL_CALL(DrawArrays(GR_GL_TRIANGLE_STRIP, 0, 4));
4187 this->unbindTextureFBOForCopy(GR_GL_FRAMEBUFFER, dst); 4227 this->unbindTextureFBOForCopy(GR_GL_FRAMEBUFFER, dst);
4188 this->didWriteToSurface(dst, &dstRect); 4228 this->didWriteToSurface(dst, &dstRect);
4189 4229
4190 return true; 4230 return true;
4191 } 4231 }
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
4256 src->origin()); 4296 src->origin());
4257 dstGLRect.setRelativeTo(dstVP, 4297 dstGLRect.setRelativeTo(dstVP,
4258 dstRect.fLeft, 4298 dstRect.fLeft,
4259 dstRect.fTop, 4299 dstRect.fTop,
4260 dstRect.width(), 4300 dstRect.width(),
4261 dstRect.height(), 4301 dstRect.height(),
4262 dst->origin()); 4302 dst->origin());
4263 4303
4264 // BlitFrameBuffer respects the scissor, so disable it. 4304 // BlitFrameBuffer respects the scissor, so disable it.
4265 this->disableScissor(); 4305 this->disableScissor();
4306 this->disableWindowRectangles();
4266 4307
4267 GrGLint srcY0; 4308 GrGLint srcY0;
4268 GrGLint srcY1; 4309 GrGLint srcY1;
4269 // Does the blit need to y-mirror or not? 4310 // Does the blit need to y-mirror or not?
4270 if (src->origin() == dst->origin()) { 4311 if (src->origin() == dst->origin()) {
4271 srcY0 = srcGLRect.fBottom; 4312 srcY0 = srcGLRect.fBottom;
4272 srcY1 = srcGLRect.fBottom + srcGLRect.fHeight; 4313 srcY1 = srcGLRect.fBottom + srcGLRect.fHeight;
4273 } else { 4314 } else {
4274 srcY0 = srcGLRect.fBottom + srcGLRect.fHeight; 4315 srcY0 = srcGLRect.fBottom + srcGLRect.fHeight;
4275 srcY1 = srcGLRect.fBottom; 4316 srcY1 = srcGLRect.fBottom;
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
4380 attribs->disableUnusedArrays(this, 0x1); 4421 attribs->disableUnusedArrays(this, 0x1);
4381 4422
4382 // Set "simple" state once: 4423 // Set "simple" state once:
4383 GrXferProcessor::BlendInfo blendInfo; 4424 GrXferProcessor::BlendInfo blendInfo;
4384 blendInfo.reset(); 4425 blendInfo.reset();
4385 this->flushBlend(blendInfo, GrSwizzle::RGBA()); 4426 this->flushBlend(blendInfo, GrSwizzle::RGBA());
4386 this->flushColorWrite(true); 4427 this->flushColorWrite(true);
4387 this->flushDrawFace(GrDrawFace::kBoth); 4428 this->flushDrawFace(GrDrawFace::kBoth);
4388 this->flushHWAAState(nullptr, false, false); 4429 this->flushHWAAState(nullptr, false, false);
4389 this->disableScissor(); 4430 this->disableScissor();
4431 this->disableWindowRectangles();
4390 GrStencilSettings stencil; 4432 GrStencilSettings stencil;
4391 stencil.setDisabled(); 4433 stencil.setDisabled();
4392 this->flushStencil(stencil); 4434 this->flushStencil(stencil);
4393 4435
4394 // Do all the blits: 4436 // Do all the blits:
4395 width = texture->width(); 4437 width = texture->width();
4396 height = texture->height(); 4438 height = texture->height();
4397 GrGLIRect viewport; 4439 GrGLIRect viewport;
4398 viewport.fLeft = 0; 4440 viewport.fLeft = 0;
4399 viewport.fBottom = 0; 4441 viewport.fBottom = 0;
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
4613 if (GR_GL_TEXTURE_EXTERNAL == glTexture->target() || 4655 if (GR_GL_TEXTURE_EXTERNAL == glTexture->target() ||
4614 GR_GL_TEXTURE_RECTANGLE == glTexture->target()) { 4656 GR_GL_TEXTURE_RECTANGLE == glTexture->target()) {
4615 copyParams->fFilter = GrTextureParams::kNone_FilterMode; 4657 copyParams->fFilter = GrTextureParams::kNone_FilterMode;
4616 copyParams->fWidth = texture->width(); 4658 copyParams->fWidth = texture->width();
4617 copyParams->fHeight = texture->height(); 4659 copyParams->fHeight = texture->height();
4618 return true; 4660 return true;
4619 } 4661 }
4620 } 4662 }
4621 return false; 4663 return false;
4622 } 4664 }
OLDNEW
« src/gpu/GrWindowRectangles.h ('K') | « src/gpu/gl/GrGLGpu.h ('k') | src/gpu/gl/GrGLIRect.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698