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

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

Issue 649783003: Force input coverage to be only a byte in gpu shaders. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years, 1 month 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 | « src/gpu/gl/builders/GrGLProgramBuilder.h ('k') | src/gpu/gl/builders/GrGLVertexShaderBuilder.h » ('j') | 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 "GrGLProgramBuilder.h" 8 #include "GrGLProgramBuilder.h"
9 #include "gl/GrGLProgram.h" 9 #include "gl/GrGLProgram.h"
10 #include "gl/GrGLSLPrettyPrint.h" 10 #include "gl/GrGLSLPrettyPrint.h"
(...skipping 30 matching lines...) Expand all
41 GrGLProgramBuilder* pb = builder.get(); 41 GrGLProgramBuilder* pb = builder.get();
42 const GrGLProgramDescBuilder::GLKeyHeader& header = GrGLProgramDescBuilder:: GetHeader(pb->desc()); 42 const GrGLProgramDescBuilder::GLKeyHeader& header = GrGLProgramDescBuilder:: GetHeader(pb->desc());
43 43
44 // emit code to read the dst copy texture, if necessary 44 // emit code to read the dst copy texture, if necessary
45 if (GrGLFragmentShaderBuilder::kNoDstRead_DstReadKey != header.fDstReadKey 45 if (GrGLFragmentShaderBuilder::kNoDstRead_DstReadKey != header.fDstReadKey
46 && !gpu->glCaps().fbFetchSupport()) { 46 && !gpu->glCaps().fbFetchSupport()) {
47 pb->fFS.emitCodeToReadDstTexture(); 47 pb->fFS.emitCodeToReadDstTexture();
48 } 48 }
49 49
50 // get the initial color and coverage to feed into the first effect in each effect chain 50 // get the initial color and coverage to feed into the first effect in each effect chain
51 GrGLSLExpr4 inputColor, inputCoverage; 51 GrGLSLExpr4 inputColor;
52 GrGLSLExpr1 inputCoverage;
52 pb->setupUniformColorAndCoverageIfNeeded(&inputColor, &inputCoverage); 53 pb->setupUniformColorAndCoverageIfNeeded(&inputColor, &inputCoverage);
53 54
54 // if we have a vertex shader(we don't only if we are using NVPR or NVPR ES) , then we may have 55 // if we have a vertex shader(we don't only if we are using NVPR or NVPR ES) , then we may have
55 // to setup a few more things like builtin vertex attributes 56 // to setup a few more things like builtin vertex attributes
56 bool hasVertexShader = !(header.fUseNvpr && 57 bool hasVertexShader = !(header.fUseNvpr &&
57 gpu->glPathRendering()->texturingMode() == 58 gpu->glPathRendering()->texturingMode() ==
58 GrGLPathRendering::FixedFunction_TexturingMode); 59 GrGLPathRendering::FixedFunction_TexturingMode);
59 if (hasVertexShader) { 60 if (hasVertexShader) {
60 pb->fVS.setupLocalCoords(); 61 pb->fVS.setupLocalCoords();
61 pb->fVS.transformGLToSkiaCoords(); 62 pb->fVS.transformGLToSkiaCoords();
62 if (header.fEmitsPointSize) { 63 if (header.fEmitsPointSize) {
63 pb->fVS.codeAppend("gl_PointSize = 1.0;"); 64 pb->fVS.codeAppend("gl_PointSize = 1.0;");
64 } 65 }
65 if (GrProgramDesc::kAttribute_ColorInput == header.fColorInput) { 66 if (GrProgramDesc::kAttribute_ColorInput == header.fColorInput) {
66 pb->fVS.setupBuiltinVertexAttribute("Color", &inputColor); 67 pb->fVS.setupBuiltinVertexAttribute("Color", &inputColor);
67 } 68 }
68 if (GrProgramDesc::kAttribute_ColorInput == header.fCoverageInput) { 69 if (GrProgramDesc::kAttribute_ColorInput == header.fCoverageInput) {
69 pb->fVS.setupBuiltinVertexAttribute("Coverage", &inputCoverage); 70 pb->fVS.setupBuiltinVertexAttribute("Coverage", &inputCoverage);
70 } 71 }
71 } 72 }
72 73
73 pb->emitAndInstallProcs(optState, &inputColor, &inputCoverage); 74 // TODO: Once all stages can handle taking a float or vec4 and correctly han dling them we can
75 // remove this cast to a vec4.
76 GrGLSLExpr4 inputCoverageVec4 = GrGLSLExpr4::VectorCast(inputCoverage);
77
78 pb->emitAndInstallProcs(optState, &inputColor, &inputCoverageVec4);
74 79
75 if (hasVertexShader) { 80 if (hasVertexShader) {
76 pb->fVS.transformSkiaToGLCoords(); 81 pb->fVS.transformSkiaToGLCoords();
77 } 82 }
78 83
79 // write the secondary color output if necessary 84 // write the secondary color output if necessary
80 if (GrProgramDesc::kNone_SecondaryOutputType != header.fSecondaryOutputType) { 85 if (GrProgramDesc::kNone_SecondaryOutputType != header.fSecondaryOutputType) {
81 pb->fFS.enableSecondaryOutput(inputColor, inputCoverage); 86 pb->fFS.enableSecondaryOutput(inputColor, inputCoverageVec4);
82 } 87 }
83 88
84 pb->fFS.combineColorAndCoverage(inputColor, inputCoverage); 89 pb->fFS.combineColorAndCoverage(inputColor, inputCoverageVec4);
85 90
86 return pb->finalize(); 91 return pb->finalize();
87 } 92 }
88 93
89 GrGLProgramBuilder* 94 GrGLProgramBuilder*
90 GrGLProgramBuilder::CreateProgramBuilder(const GrOptDrawState& optState, 95 GrGLProgramBuilder::CreateProgramBuilder(const GrOptDrawState& optState,
91 GrGpu::DrawType drawType, 96 GrGpu::DrawType drawType,
92 bool hasGeometryProcessor, 97 bool hasGeometryProcessor,
93 GrGpuGL* gpu) { 98 GrGpuGL* gpu) {
94 const GrProgramDesc& desc = optState.programDesc(); 99 const GrProgramDesc& desc = optState.programDesc();
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
192 out->append(";\n"); 197 out->append(";\n");
193 } 198 }
194 } 199 }
195 } 200 }
196 201
197 const GrGLContextInfo& GrGLProgramBuilder::ctxInfo() const { 202 const GrGLContextInfo& GrGLProgramBuilder::ctxInfo() const {
198 return fGpu->ctxInfo(); 203 return fGpu->ctxInfo();
199 } 204 }
200 205
201 void GrGLProgramBuilder::setupUniformColorAndCoverageIfNeeded(GrGLSLExpr4* input Color, 206 void GrGLProgramBuilder::setupUniformColorAndCoverageIfNeeded(GrGLSLExpr4* input Color,
202 GrGLSLExpr4* input Coverage) { 207 GrGLSLExpr1* input Coverage) {
203 const GrProgramDesc::KeyHeader& header = this->header(); 208 const GrProgramDesc::KeyHeader& header = this->header();
204 if (GrProgramDesc::kUniform_ColorInput == header.fColorInput) { 209 if (GrProgramDesc::kUniform_ColorInput == header.fColorInput) {
205 const char* name; 210 const char* name;
206 fUniformHandles.fColorUni = 211 fUniformHandles.fColorUni =
207 this->addUniform(GrGLProgramBuilder::kFragment_Visibility, 212 this->addUniform(GrGLProgramBuilder::kFragment_Visibility,
208 kVec4f_GrSLType, 213 kVec4f_GrSLType,
209 "Color", 214 "Color",
210 &name); 215 &name);
211 *inputColor = GrGLSLExpr4(name); 216 *inputColor = GrGLSLExpr4(name);
212 } else if (GrProgramDesc::kAllOnes_ColorInput == header.fColorInput) { 217 } else if (GrProgramDesc::kAllOnes_ColorInput == header.fColorInput) {
213 *inputColor = GrGLSLExpr4(1); 218 *inputColor = GrGLSLExpr4(1);
214 } 219 }
215 if (GrProgramDesc::kUniform_ColorInput == header.fCoverageInput) { 220 if (GrProgramDesc::kUniform_ColorInput == header.fCoverageInput) {
216 const char* name; 221 const char* name;
217 fUniformHandles.fCoverageUni = 222 fUniformHandles.fCoverageUni =
218 this->addUniform(GrGLProgramBuilder::kFragment_Visibility, 223 this->addUniform(GrGLProgramBuilder::kFragment_Visibility,
219 kVec4f_GrSLType, 224 kFloat_GrSLType,
220 "Coverage", 225 "Coverage",
221 &name); 226 &name);
222 *inputCoverage = GrGLSLExpr4(name); 227 *inputCoverage = GrGLSLExpr1(name);
223 } else if (GrProgramDesc::kAllOnes_ColorInput == header.fCoverageInput) { 228 } else if (GrProgramDesc::kAllOnes_ColorInput == header.fCoverageInput) {
224 *inputCoverage = GrGLSLExpr4(1); 229 *inputCoverage = GrGLSLExpr1(1);
225 } 230 }
226 } 231 }
227 232
228 void GrGLProgramBuilder::emitAndInstallProcs(const GrOptDrawState& optState, 233 void GrGLProgramBuilder::emitAndInstallProcs(const GrOptDrawState& optState,
229 GrGLSLExpr4* inputColor, 234 GrGLSLExpr4* inputColor,
230 GrGLSLExpr4* inputCoverage) { 235 GrGLSLExpr4* inputCoverage) {
231 fFragmentProcessors.reset(SkNEW(GrGLInstalledFragProcs)); 236 fFragmentProcessors.reset(SkNEW(GrGLInstalledFragProcs));
232 int numProcs = optState.numFragmentStages(); 237 int numProcs = optState.numFragmentStages();
233 this->emitAndInstallFragProcs(0, optState.numColorStages(), inputColor); 238 this->emitAndInstallFragProcs(0, optState.numColorStages(), inputColor);
234 if (optState.hasGeometryProcessor()) { 239 if (optState.hasGeometryProcessor()) {
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
511 } 516 }
512 517
513 //////////////////////////////////////////////////////////////////////////////// /////////////////// 518 //////////////////////////////////////////////////////////////////////////////// ///////////////////
514 519
515 GrGLInstalledFragProcs::~GrGLInstalledFragProcs() { 520 GrGLInstalledFragProcs::~GrGLInstalledFragProcs() {
516 int numProcs = fProcs.count(); 521 int numProcs = fProcs.count();
517 for (int e = 0; e < numProcs; ++e) { 522 for (int e = 0; e < numProcs; ++e) {
518 SkDELETE(fProcs[e]); 523 SkDELETE(fProcs[e]);
519 } 524 }
520 } 525 }
OLDNEW
« no previous file with comments | « src/gpu/gl/builders/GrGLProgramBuilder.h ('k') | src/gpu/gl/builders/GrGLVertexShaderBuilder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698