OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 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 #ifndef GrGLSLProgramBuilder_DEFINED | 8 #ifndef GrGLSLProgramBuilder_DEFINED |
9 #define GrGLSLProgramBuilder_DEFINED | 9 #define GrGLSLProgramBuilder_DEFINED |
10 | 10 |
11 #include "GrGeometryProcessor.h" | 11 #include "GrGeometryProcessor.h" |
12 #include "GrGpu.h" | 12 #include "GrGpu.h" |
13 #include "gl/builders/GrGLFragmentShaderBuilder.h" | 13 #include "glsl/GrGLSLFragmentShaderBuilder.h" |
14 #include "gl/builders/GrGLGeometryShaderBuilder.h" | 14 #include "glsl/GrGLSLGeometryShaderBuilder.h" |
15 #include "gl/builders/GrGLVertexShaderBuilder.h" | |
16 #include "glsl/GrGLSLProgramDataManager.h" | 15 #include "glsl/GrGLSLProgramDataManager.h" |
| 16 #include "glsl/GrGLSLVertexShaderBuilder.h" |
17 | 17 |
18 class GrGLSLCaps; | 18 class GrGLSLCaps; |
19 class GrGLSLShaderVar; | 19 class GrGLSLShaderVar; |
20 | 20 |
| 21 // Enough precision to represent 1 / 2048 accurately in printf |
| 22 #define GR_SIGNIFICANT_POW2_DECIMAL_DIG 11 |
| 23 |
21 class GrGLSLUniformBuilder { | 24 class GrGLSLUniformBuilder { |
22 public: | 25 public: |
23 enum ShaderVisibility { | 26 enum ShaderVisibility { |
24 kVertex_Visibility = 1 << kVertex_GrShaderType, | 27 kVertex_Visibility = 1 << kVertex_GrShaderType, |
25 kGeometry_Visibility = 1 << kGeometry_GrShaderType, | 28 kGeometry_Visibility = 1 << kGeometry_GrShaderType, |
26 kFragment_Visibility = 1 << kFragment_GrShaderType, | 29 kFragment_Visibility = 1 << kFragment_GrShaderType, |
27 }; | 30 }; |
28 | 31 |
29 virtual ~GrGLSLUniformBuilder() {} | 32 virtual ~GrGLSLUniformBuilder() {} |
30 | 33 |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
104 | 107 |
105 Varying fVarying; | 108 Varying fVarying; |
106 | 109 |
107 private: | 110 private: |
108 GrSLType fType; | 111 GrSLType fType; |
109 const char* fVsOut; | 112 const char* fVsOut; |
110 const char* fGsIn; | 113 const char* fGsIn; |
111 const char* fGsOut; | 114 const char* fGsOut; |
112 const char* fFsIn; | 115 const char* fFsIn; |
113 | 116 |
114 friend class GrGLVertexBuilder; | 117 friend class GrGLSLVertexBuilder; |
115 friend class GrGLGeometryBuilder; | 118 friend class GrGLSLGeometryBuilder; |
116 friend class GrGLXferBuilder; | 119 friend class GrGLSLXferBuilder; |
117 friend class GrGLFragmentShaderBuilder; | 120 friend class GrGLSLFragmentShaderBuilder; |
118 }; | 121 }; |
119 | 122 |
120 struct GrGLSLVertToFrag : public GrGLSLVarying { | 123 struct GrGLSLVertToFrag : public GrGLSLVarying { |
121 GrGLSLVertToFrag(GrSLType type) | 124 GrGLSLVertToFrag(GrSLType type) |
122 : GrGLSLVarying(type, kVertToFrag_Varying) {} | 125 : GrGLSLVarying(type, kVertToFrag_Varying) {} |
123 }; | 126 }; |
124 | 127 |
125 struct GrGLSLVertToGeo : public GrGLSLVarying { | 128 struct GrGLSLVertToGeo : public GrGLSLVarying { |
126 GrGLSLVertToGeo(GrSLType type) | 129 GrGLSLVertToGeo(GrSLType type) |
127 : GrGLSLVarying(type, kVertToGeo_Varying) {} | 130 : GrGLSLVarying(type, kVertToGeo_Varying) {} |
(...skipping 28 matching lines...) Expand all Loading... |
156 | 159 |
157 /* | 160 /* |
158 * Creates a fragment shader varying that can be referred to. | 161 * Creates a fragment shader varying that can be referred to. |
159 * Comparable to GrGLSLUniformBuilder::addUniform(). | 162 * Comparable to GrGLSLUniformBuilder::addUniform(). |
160 */ | 163 */ |
161 virtual SeparableVaryingHandle addSeparableVarying( | 164 virtual SeparableVaryingHandle addSeparableVarying( |
162 const char* name, GrGLSLVertToFrag*, | 165 const char* name, GrGLSLVertToFrag*, |
163 GrSLPrecision fsPrecision = kDefault_GrSLPrecision) = 0; | 166 GrSLPrecision fsPrecision = kDefault_GrSLPrecision) = 0; |
164 | 167 |
165 // TODO rename getFragmentBuilder | 168 // TODO rename getFragmentBuilder |
166 virtual GrGLFragmentBuilder* getFragmentShaderBuilder() = 0; | 169 virtual GrGLSLFragmentBuilder* getFragmentShaderBuilder() = 0; |
167 virtual GrGLVertexBuilder* getVertexShaderBuilder() = 0; | 170 virtual GrGLSLVertexBuilder* getVertexShaderBuilder() = 0; |
168 | 171 |
169 /* | 172 /* |
170 * *NOTE* NO MEMBERS ALLOWED, MULTIPLE INHERITANCE | 173 * *NOTE* NO MEMBERS ALLOWED, MULTIPLE INHERITANCE |
171 */ | 174 */ |
172 }; | 175 }; |
173 | 176 |
174 | 177 |
175 /* a specializations for FPs. Lets the user add uniforms and FS code */ | 178 /* a specializations for FPs. Lets the user add uniforms and FS code */ |
176 class GrGLSLFPBuilder : public virtual GrGLSLUniformBuilder { | 179 class GrGLSLFPBuilder : public virtual GrGLSLUniformBuilder { |
177 public: | 180 public: |
178 virtual GrGLFragmentBuilder* getFragmentShaderBuilder() = 0; | 181 virtual GrGLSLFragmentBuilder* getFragmentShaderBuilder() = 0; |
179 | 182 |
180 /* | 183 /* |
181 * *NOTE* NO MEMBERS ALLOWED, MULTIPLE INHERITANCE | 184 * *NOTE* NO MEMBERS ALLOWED, MULTIPLE INHERITANCE |
182 */ | 185 */ |
183 }; | 186 }; |
184 | 187 |
185 /* a specializations for XPs. Lets the user add uniforms and FS code */ | 188 /* a specializations for XPs. Lets the user add uniforms and FS code */ |
186 class GrGLSLXPBuilder : public virtual GrGLSLUniformBuilder { | 189 class GrGLSLXPBuilder : public virtual GrGLSLUniformBuilder { |
187 public: | 190 public: |
188 virtual GrGLXPFragmentBuilder* getFragmentShaderBuilder() = 0; | 191 virtual GrGLSLXPFragmentBuilder* getFragmentShaderBuilder() = 0; |
189 | 192 |
190 /* | 193 /* |
191 * *NOTE* NO MEMBERS ALLOWED, MULTIPLE INHERITANCE | 194 * *NOTE* NO MEMBERS ALLOWED, MULTIPLE INHERITANCE |
192 */ | 195 */ |
193 }; | 196 }; |
194 | 197 |
195 class GrGLSLProgramBuilder : public GrGLSLGPBuilder, | 198 class GrGLSLProgramBuilder : public GrGLSLGPBuilder, |
196 public GrGLSLFPBuilder, | 199 public GrGLSLFPBuilder, |
197 public GrGLSLXPBuilder { | 200 public GrGLSLXPBuilder { |
198 public: | 201 public: |
199 typedef GrGpu::DrawArgs DrawArgs; | 202 typedef GrGpu::DrawArgs DrawArgs; |
200 | 203 |
201 GrGLXPFragmentBuilder* getFragmentShaderBuilder() override { return &fFS; } | 204 GrGLSLXPFragmentBuilder* getFragmentShaderBuilder() override { return &fFS;
} |
202 GrGLVertexBuilder* getVertexShaderBuilder() override { return &fVS; } | 205 GrGLSLVertexBuilder* getVertexShaderBuilder() override { return &fVS; } |
203 | 206 |
204 // Handles for program uniforms (other than per-effect uniforms) | 207 // Handles for program uniforms (other than per-effect uniforms) |
205 struct BuiltinUniformHandles { | 208 struct BuiltinUniformHandles { |
206 UniformHandle fRTAdjustmentUni; | 209 UniformHandle fRTAdjustmentUni; |
207 | 210 |
208 // We use the render target height to provide a y-down frag coord when s
pecifying | 211 // We use the render target height to provide a y-down frag coord when s
pecifying |
209 // origin_upper_left is not supported. | 212 // origin_upper_left is not supported. |
210 UniformHandle fRTHeightUni; | 213 UniformHandle fRTHeightUni; |
211 }; | 214 }; |
212 | 215 |
(...skipping 20 matching lines...) Expand all Loading... |
233 const char* rtAdjustment() const { return "rtAdjustment"; } | 236 const char* rtAdjustment() const { return "rtAdjustment"; } |
234 | 237 |
235 // Generates a name for a variable. The generated string will be name prefix
ed by the prefix | 238 // Generates a name for a variable. The generated string will be name prefix
ed by the prefix |
236 // char (unless the prefix is '\0'). It also will mangle the name to be stag
e-specific unless | 239 // char (unless the prefix is '\0'). It also will mangle the name to be stag
e-specific unless |
237 // explicitly asked not to. | 240 // explicitly asked not to. |
238 void nameVariable(SkString* out, char prefix, const char* name, bool mangle
= true); | 241 void nameVariable(SkString* out, char prefix, const char* name, bool mangle
= true); |
239 | 242 |
240 // number of each input/output type in a single allocation block, used by ma
ny builders | 243 // number of each input/output type in a single allocation block, used by ma
ny builders |
241 static const int kVarsPerBlock; | 244 static const int kVarsPerBlock; |
242 | 245 |
243 GrGLVertexBuilder fVS; | 246 GrGLSLVertexBuilder fVS; |
244 GrGLGeometryBuilder fGS; | 247 GrGLSLGeometryBuilder fGS; |
245 GrGLFragmentShaderBuilder fFS; | 248 GrGLSLFragmentShaderBuilder fFS; |
246 int fStageIndex; | 249 int fStageIndex; |
247 | 250 |
248 BuiltinUniformHandles fUniformHandles; | 251 BuiltinUniformHandles fUniformHandles; |
249 | 252 |
250 const DrawArgs& fArgs; | 253 const DrawArgs& fArgs; |
251 | 254 |
252 private: | 255 private: |
253 virtual void onAppendUniformDecls(ShaderVisibility visibility, SkString* out
) const = 0; | 256 virtual void onAppendUniformDecls(ShaderVisibility visibility, SkString* out
) const = 0; |
254 | 257 |
255 friend class GrGLShaderBuilder; | 258 friend class GrGLSLShaderBuilder; |
256 friend class GrGLVertexBuilder; | 259 friend class GrGLSLVertexBuilder; |
257 friend class GrGLFragmentShaderBuilder; | 260 friend class GrGLSLFragmentShaderBuilder; |
258 friend class GrGLGeometryBuilder; | 261 friend class GrGLSLGeometryBuilder; |
259 }; | 262 }; |
260 | 263 |
261 #endif | 264 #endif |
OLD | NEW |