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

Side by Side Diff: src/gpu/effects/GrPorterDuffXferProcessor.cpp

Issue 2259113002: Relax check for gpu use of static src-over XP (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: nits 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2014 Google Inc. 2 * Copyright 2014 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 "effects/GrPorterDuffXferProcessor.h" 8 #include "effects/GrPorterDuffXferProcessor.h"
9 9
10 #include "GrBlend.h" 10 #include "GrBlend.h"
(...skipping 844 matching lines...) Expand 10 before | Expand all | Expand 10 after
855 } 855 }
856 856
857 GrXferProcessor* GrPorterDuffXPFactory::CreateSrcOverXferProcessor( 857 GrXferProcessor* GrPorterDuffXPFactory::CreateSrcOverXferProcessor(
858 const GrCaps& caps, 858 const GrCaps& caps,
859 const GrPipelineOptimizations& optimizations, 859 const GrPipelineOptimizations& optimizations,
860 bool hasMixedSamples, 860 bool hasMixedSamples,
861 const GrXferProcessor::DstTexture* dstTexture) { 861 const GrXferProcessor::DstTexture* dstTexture) {
862 if (optimizations.fOverrides.fUsePLSDstRead) { 862 if (optimizations.fOverrides.fUsePLSDstRead) {
863 return new ShaderPDXferProcessor(dstTexture, hasMixedSamples, SkXfermode ::kSrcOver_Mode); 863 return new ShaderPDXferProcessor(dstTexture, hasMixedSamples, SkXfermode ::kSrcOver_Mode);
864 } 864 }
865 if (!optimizations.fCoveragePOI.isFourChannelOutput() && 865
866 !(optimizations.fCoveragePOI.isSolidWhite() && 866 // We want to not make an xfer processor if possible. Thus for the simple ca se where we are not
867 !hasMixedSamples && 867 // doing lcd blending we will just use our global SimpleSrcOverXP. This slig htly differs from
868 optimizations.fColorPOI.isOpaque())) { 868 // the general case where we convert a src-over blend that has solid coverag e and an opaque
869 // color to src-mode, which allows disabling of blending.
870 if (!optimizations.fCoveragePOI.isFourChannelOutput()) {
869 // We return nullptr here, which our caller interprets as meaning "use S impleSrcOverXP". 871 // We return nullptr here, which our caller interprets as meaning "use S impleSrcOverXP".
870 // We don't simply return the address of that XP here because our caller would have to unref 872 // We don't simply return the address of that XP here because our caller would have to unref
871 // it and since it is a global object and GrProgramElement's ref-cnting system is not thread 873 // it and since it is a global object and GrProgramElement's ref-cnting system is not thread
872 // safe. 874 // safe.
873 return nullptr; 875 return nullptr;
874 } 876 }
875 877
876 BlendFormula blendFormula; 878 if (kRGBA_GrColorComponentFlags == optimizations.fColorPOI.validFlags() &&
877 if (optimizations.fCoveragePOI.isFourChannelOutput()) { 879 !caps.shaderCaps()->dualSourceBlendingSupport() &&
878 if (kRGBA_GrColorComponentFlags == optimizations.fColorPOI.validFlags() && 880 !caps.shaderCaps()->dstReadInShaderSupport()) {
879 !caps.shaderCaps()->dualSourceBlendingSupport() && 881 // If we don't have dual source blending or in shader dst reads, we fall
880 !caps.shaderCaps()->dstReadInShaderSupport()) { 882 // back to this trick for rendering SrcOver LCD text instead of doing a
881 // If we don't have dual source blending or in shader dst reads, we fall 883 // dst copy.
882 // back to this trick for rendering SrcOver LCD text instead of doin g a 884 SkASSERT(!dstTexture || !dstTexture->texture());
883 // dst copy. 885 return PDLCDXferProcessor::Create(SkXfermode::kSrcOver_Mode, optimizatio ns.fColorPOI);
884 SkASSERT(!dstTexture || !dstTexture->texture());
885 return PDLCDXferProcessor::Create(SkXfermode::kSrcOver_Mode, optimiz ations.fColorPOI);
886 }
887 blendFormula = get_lcd_blend_formula(optimizations.fCoveragePOI, SkXferm ode::kSrcOver_Mode);
888 } else {
889 blendFormula = get_blend_formula(optimizations.fColorPOI, optimizations. fCoveragePOI,
890 hasMixedSamples, SkXfermode::kSrcOver_M ode);
891 } 886 }
892 887
888 BlendFormula blendFormula;
889 blendFormula = get_lcd_blend_formula(optimizations.fCoveragePOI, SkXfermode: :kSrcOver_Mode);
893 if (blendFormula.hasSecondaryOutput() && !caps.shaderCaps()->dualSourceBlend ingSupport()) { 890 if (blendFormula.hasSecondaryOutput() && !caps.shaderCaps()->dualSourceBlend ingSupport()) {
894 return new ShaderPDXferProcessor(dstTexture, hasMixedSamples, SkXfermode ::kSrcOver_Mode); 891 return new ShaderPDXferProcessor(dstTexture, hasMixedSamples, SkXfermode ::kSrcOver_Mode);
895 } 892 }
896 893
897 SkASSERT(!dstTexture || !dstTexture->texture()); 894 SkASSERT(!dstTexture || !dstTexture->texture());
898 return new PorterDuffXferProcessor(blendFormula); 895 return new PorterDuffXferProcessor(blendFormula);
899 } 896 }
900 897
901 bool GrPorterDuffXPFactory::SrcOverWillNeedDstTexture(const GrCaps& caps, 898 bool GrPorterDuffXPFactory::SrcOverWillNeedDstTexture(const GrCaps& caps,
902 const GrPipelineOptimizatio ns& optimizations) { 899 const GrPipelineOptimizatio ns& optimizations) {
(...skipping 14 matching lines...) Expand all
917 SkXfermode::kSrcOver_Mode).hasSecondaryOutp ut(); 914 SkXfermode::kSrcOver_Mode).hasSecondaryOutp ut();
918 } 915 }
919 916
920 // We fallback on the shader XP when the blend formula would use dual source blending but we 917 // We fallback on the shader XP when the blend formula would use dual source blending but we
921 // don't have support for it. 918 // don't have support for it.
922 static const bool kHasMixedSamples = false; 919 static const bool kHasMixedSamples = false;
923 SkASSERT(!caps.usesMixedSamples()); // We never use mixed samples without du al source blending. 920 SkASSERT(!caps.usesMixedSamples()); // We never use mixed samples without du al source blending.
924 return get_blend_formula(optimizations.fColorPOI, optimizations.fCoveragePOI , 921 return get_blend_formula(optimizations.fColorPOI, optimizations.fCoveragePOI ,
925 kHasMixedSamples, SkXfermode::kSrcOver_Mode).hasSec ondaryOutput(); 922 kHasMixedSamples, SkXfermode::kSrcOver_Mode).hasSec ondaryOutput();
926 } 923 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698