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

Side by Side Diff: src/gpu/gl/builders/GrGLFragmentShaderBuilder.cpp

Issue 582963002: Solo gp (Closed) Base URL: https://skia.googlesource.com/skia.git@no_peb
Patch Set: rebase Created 6 years, 3 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 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 "GrGLFragmentShaderBuilder.h" 8 #include "GrGLFragmentShaderBuilder.h"
9 #include "GrGLShaderStringBuilder.h" 9 #include "GrGLShaderStringBuilder.h"
10 #include "GrGLProgramBuilder.h" 10 #include "GrGLProgramBuilder.h"
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 const GrGLProgramDesc& desc ) 73 const GrGLProgramDesc& desc )
74 : INHERITED(program) 74 : INHERITED(program)
75 , fHasCustomColorOutput(false) 75 , fHasCustomColorOutput(false)
76 , fHasSecondaryOutput(false) 76 , fHasSecondaryOutput(false)
77 , fSetupFragPosition(false) 77 , fSetupFragPosition(false)
78 , fTopLeftFragPosRead(kTopLeftFragPosRead_FragPosKey == desc.getHeader().fFr agPosKey){ 78 , fTopLeftFragPosRead(kTopLeftFragPosRead_FragPosKey == desc.getHeader().fFr agPosKey){
79 } 79 }
80 80
81 const char* GrGLFragmentShaderBuilder::dstColor() { 81 const char* GrGLFragmentShaderBuilder::dstColor() {
82 if (fProgramBuilder->fCodeStage.inStageCode()) { 82 if (fProgramBuilder->fCodeStage.inStageCode()) {
83 const GrEffect* effect = fProgramBuilder->fCodeStage.effectStage()->getE ffect(); 83 const GrProcessor* effect = fProgramBuilder->fCodeStage.effectStage()->g etProcessor();
84 if (!effect->willReadDstColor()) { 84 // TODO GPs can't read dst color, and full program builder only returns a pointer to the
85 SkDEBUGFAIL("GrGLEffect asked for dst color but its generating GrEff ect " 85 // base fragment shader builder which does not have this function. Unfo rtunately,
86 // the code stage class only has a GrProcessor pointer so this is requir ed for the time
87 // being
88 if (!static_cast<const GrFragmentProcessor*>(effect)->willReadDstColor() ) {
89 SkDEBUGFAIL("GrGLProcessor asked for dst color but its generating Gr Processor "
86 "did not request access."); 90 "did not request access.");
87 return ""; 91 return "";
88 } 92 }
89 } 93 }
90 94
91 GrGpuGL* gpu = fProgramBuilder->gpu(); 95 GrGpuGL* gpu = fProgramBuilder->gpu();
92 if (gpu->glCaps().fbFetchSupport()) { 96 if (gpu->glCaps().fbFetchSupport()) {
93 this->addFeature(1 << (GrGLFragmentShaderBuilder::kLastGLSLPrivateFeatur e + 1), 97 this->addFeature(1 << (GrGLFragmentShaderBuilder::kLastGLSLPrivateFeatur e + 1),
94 gpu->glCaps().fbFetchExtensionString()); 98 gpu->glCaps().fbFetchExtensionString());
95 return gpu->glCaps().fbFetchColorName(); 99 return gpu->glCaps().fbFetchColorName();
(...skipping 16 matching lines...) Expand all
112 "GL_OES_standard_derivatives"); 116 "GL_OES_standard_derivatives");
113 } 117 }
114 return true; 118 return true;
115 } 119 }
116 default: 120 default:
117 SkFAIL("Unexpected GLSLFeature requested."); 121 SkFAIL("Unexpected GLSLFeature requested.");
118 return false; 122 return false;
119 } 123 }
120 } 124 }
121 125
122 SkString GrGLFragmentShaderBuilder::ensureFSCoords2D(const TransformedCoordsArra y& coords, int index) { 126 SkString GrGLFragmentShaderBuilder::ensureFSCoords2D(
127 const GrGLProcessor::TransformedCoordsArray& coords, int index) {
123 if (kVec3f_GrSLType != coords[index].getType()) { 128 if (kVec3f_GrSLType != coords[index].getType()) {
124 SkASSERT(kVec2f_GrSLType == coords[index].getType()); 129 SkASSERT(kVec2f_GrSLType == coords[index].getType());
125 return coords[index].getName(); 130 return coords[index].getName();
126 } 131 }
127 132
128 SkString coords2D("coords2D"); 133 SkString coords2D("coords2D");
129 if (0 != index) { 134 if (0 != index) {
130 coords2D.appendf("_%i", index); 135 coords2D.appendf("_%i", index);
131 } 136 }
132 this->codeAppendf("\tvec2 %s = %s.xy / %s.z;", 137 this->codeAppendf("\tvec2 %s = %s.xy / %s.z;",
133 coords2D.c_str(), coords[index].c_str(), coords[index].c_s tr()); 138 coords2D.c_str(), coords[index].c_str(), coords[index].c_s tr());
134 return coords2D; 139 return coords2D;
135 } 140 }
136 141
137 const char* GrGLFragmentShaderBuilder::fragmentPosition() { 142 const char* GrGLFragmentShaderBuilder::fragmentPosition() {
138 GrGLProgramBuilder::CodeStage* cs = &fProgramBuilder->fCodeStage; 143 GrGLProgramBuilder::CodeStage* cs = &fProgramBuilder->fCodeStage;
139 if (cs->inStageCode()) { 144 if (cs->inStageCode()) {
140 const GrEffect* effect = cs->effectStage()->getEffect(); 145 const GrProcessor* effect = cs->effectStage()->getProcessor();
141 if (!effect->willReadFragmentPosition()) { 146 if (!effect->willReadFragmentPosition()) {
142 SkDEBUGFAIL("GrGLEffect asked for frag position but its generating G rEffect " 147 SkDEBUGFAIL("GrGLProcessor asked for frag position but its generatin g GrProcessor "
143 "did not request access."); 148 "did not request access.");
144 return ""; 149 return "";
145 } 150 }
146 } 151 }
147 152
148 GrGpuGL* gpu = fProgramBuilder->gpu(); 153 GrGpuGL* gpu = fProgramBuilder->gpu();
149 // We only declare "gl_FragCoord" when we're in the case where we want to us e layout qualifiers 154 // We only declare "gl_FragCoord" when we're in the case where we want to us e layout qualifiers
150 // to reverse y. Otherwise it isn't necessary and whether the "in" qualifier appears in the 155 // to reverse y. Otherwise it isn't necessary and whether the "in" qualifier appears in the
151 // declaration varies in earlier GLSL specs. So it is simpler to omit it. 156 // declaration varies in earlier GLSL specs. So it is simpler to omit it.
152 if (fTopLeftFragPosRead) { 157 if (fTopLeftFragPosRead) {
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
354 dual_source_output_name()); 359 dual_source_output_name());
355 fHasSecondaryOutput = true; 360 fHasSecondaryOutput = true;
356 } 361 }
357 return dual_source_output_name(); 362 return dual_source_output_name();
358 } 363 }
359 364
360 const char* GrGLFragmentShaderBuilder::getColorOutputName() const { 365 const char* GrGLFragmentShaderBuilder::getColorOutputName() const {
361 return fHasCustomColorOutput ? declared_color_output_name() : "gl_FragColor" ; 366 return fHasCustomColorOutput ? declared_color_output_name() : "gl_FragColor" ;
362 } 367 }
363 368
OLDNEW
« no previous file with comments | « src/gpu/gl/builders/GrGLFragmentShaderBuilder.h ('k') | src/gpu/gl/builders/GrGLFullProgramBuilder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698