OLD | NEW |
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 "GrGLShaderBuilder.h" | 8 #include "GrGLShaderBuilder.h" |
9 #include "GrGLFullProgramBuilder.h" | 9 #include "GrGLProgramBuilder.h" |
10 #include "GrGLProgramBuilder.h" | 10 #include "GrGLProgramBuilder.h" |
11 #include "../GrGpuGL.h" | 11 #include "../GrGpuGL.h" |
12 #include "../GrGLShaderVar.h" | 12 #include "../GrGLShaderVar.h" |
13 | 13 |
14 namespace { | 14 namespace { |
15 inline const char* sample_function_name(GrSLType type, GrGLSLGeneration glslGen)
{ | 15 inline const char* sample_function_name(GrSLType type, GrGLSLGeneration glslGen)
{ |
16 if (kVec2f_GrSLType == type) { | 16 if (kVec2f_GrSLType == type) { |
17 return glslGen >= k130_GrGLSLGeneration ? "texture" : "texture2D"; | 17 return glslGen >= k130_GrGLSLGeneration ? "texture" : "texture2D"; |
18 } else { | 18 } else { |
19 SkASSERT(kVec3f_GrSLType == type); | 19 SkASSERT(kVec3f_GrSLType == type); |
(...skipping 26 matching lines...) Expand all Loading... |
46 mangledSwizzle[i] = alphaChar; | 46 mangledSwizzle[i] = alphaChar; |
47 } | 47 } |
48 mangledSwizzle[i] ='\0'; | 48 mangledSwizzle[i] ='\0'; |
49 swizzle = mangledSwizzle; | 49 swizzle = mangledSwizzle; |
50 } | 50 } |
51 // For shader prettiness we omit the swizzle rather than appending ".rgba". | 51 // For shader prettiness we omit the swizzle rather than appending ".rgba". |
52 if (memcmp(swizzle, "rgba", 4)) { | 52 if (memcmp(swizzle, "rgba", 4)) { |
53 out->appendf(".%s", swizzle); | 53 out->appendf(".%s", swizzle); |
54 } | 54 } |
55 } | 55 } |
56 static const int kVarsPerBlock = 8; | |
57 } | 56 } |
58 | 57 |
59 GrGLShaderBuilder::GrGLShaderBuilder(GrGLProgramBuilder* program) | 58 GrGLShaderBuilder::GrGLShaderBuilder(GrGLProgramBuilder* program) |
60 : fProgramBuilder(program) | 59 : fProgramBuilder(program) |
61 , fInputs(kVarsPerBlock) | 60 , fInputs(GrGLProgramBuilder::kVarsPerBlock) |
62 , fOutputs(kVarsPerBlock) | 61 , fOutputs(GrGLProgramBuilder::kVarsPerBlock) |
63 , fFeaturesAddedMask(0) { | 62 , fFeaturesAddedMask(0) { |
64 } | 63 } |
65 | 64 |
66 void GrGLShaderBuilder::declAppend(const GrGLShaderVar& var) { | 65 void GrGLShaderBuilder::declAppend(const GrGLShaderVar& var) { |
67 SkString tempDecl; | 66 SkString tempDecl; |
68 var.appendDecl(fProgramBuilder->ctxInfo(), &tempDecl); | 67 var.appendDecl(fProgramBuilder->ctxInfo(), &tempDecl); |
69 this->codeAppendf("%s;", tempDecl.c_str()); | 68 this->codeAppendf("%s;", tempDecl.c_str()); |
70 } | 69 } |
71 | 70 |
72 void GrGLShaderBuilder::emitFunction(GrSLType returnType, | 71 void GrGLShaderBuilder::emitFunction(GrSLType returnType, |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
136 } | 135 } |
137 } | 136 } |
138 | 137 |
139 void GrGLShaderBuilder::addFeature(uint32_t featureBit, const char* extensionNam
e) { | 138 void GrGLShaderBuilder::addFeature(uint32_t featureBit, const char* extensionNam
e) { |
140 if (!(featureBit & fFeaturesAddedMask)) { | 139 if (!(featureBit & fFeaturesAddedMask)) { |
141 fExtensions.appendf("#extension %s: require\n", extensionName); | 140 fExtensions.appendf("#extension %s: require\n", extensionName); |
142 fFeaturesAddedMask |= featureBit; | 141 fFeaturesAddedMask |= featureBit; |
143 } | 142 } |
144 } | 143 } |
145 | 144 |
| 145 void GrGLShaderBuilder::appendDecls(const VarArray& vars, SkString* out) const { |
| 146 for (int i = 0; i < vars.count(); ++i) { |
| 147 vars[i].appendDecl(fProgramBuilder->ctxInfo(), out); |
| 148 out->append(";\n"); |
| 149 } |
| 150 } |
| 151 |
146 void GrGLShaderBuilder::appendTextureLookup(const char* samplerName, | 152 void GrGLShaderBuilder::appendTextureLookup(const char* samplerName, |
147 const char* coordName, | 153 const char* coordName, |
148 uint32_t configComponentMask, | 154 uint32_t configComponentMask, |
149 const char* swizzle) { | 155 const char* swizzle) { |
150 append_texture_lookup(&fCode, | 156 append_texture_lookup(&fCode, |
151 fProgramBuilder->gpu(), | 157 fProgramBuilder->gpu(), |
152 samplerName, | 158 samplerName, |
153 coordName, | 159 coordName, |
154 configComponentMask, | 160 configComponentMask, |
155 swizzle, | 161 swizzle, |
156 kVec2f_GrSLType); | 162 kVec2f_GrSLType); |
157 } | 163 } |
158 | |
159 ////////////////////////////////////////////////////////////////////////////////
/////////////////// | |
160 GrGLFullShaderBuilder::GrGLFullShaderBuilder(GrGLFullProgramBuilder* program) | |
161 : INHERITED(program) | |
162 , fFullProgramBuilder(program) {} | |
OLD | NEW |