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

Side by Side Diff: cc/output/shader.h

Issue 2610803002: The great shader refactor: Prepare to merge all vertex shaders. (Closed)
Patch Set: Merge Init and FillLocations Created 3 years, 11 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 | cc/output/shader.cc » ('j') | cc/output/shader.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CC_OUTPUT_SHADER_H_ 5 #ifndef CC_OUTPUT_SHADER_H_
6 #define CC_OUTPUT_SHADER_H_ 6 #define CC_OUTPUT_SHADER_H_
7 7
8 #include <string> 8 #include <string>
9 9
10 #include "base/macros.h" 10 #include "base/macros.h"
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 int* highp_threshold_cache, 106 int* highp_threshold_cache,
107 int highp_threshold_min, 107 int highp_threshold_min,
108 const gfx::Point& max_coordinate); 108 const gfx::Point& max_coordinate);
109 109
110 CC_EXPORT TexCoordPrecision TexCoordPrecisionRequired( 110 CC_EXPORT TexCoordPrecision TexCoordPrecisionRequired(
111 gpu::gles2::GLES2Interface* context, 111 gpu::gles2::GLES2Interface* context,
112 int *highp_threshold_cache, 112 int *highp_threshold_cache,
113 int highp_threshold_min, 113 int highp_threshold_min,
114 const gfx::Size& max_size); 114 const gfx::Size& max_size);
115 115
116 class VertexShaderPosTex { 116 class VertexShaderBase {
117 public: 117 public:
118 VertexShaderPosTex(); 118 VertexShaderBase();
119
120 void Init(gpu::gles2::GLES2Interface* context, 119 void Init(gpu::gles2::GLES2Interface* context,
121 unsigned program, 120 unsigned program,
122 int* base_uniform_index); 121 int* base_uniform_index);
123 std::string GetShaderString() const; 122 std::string GetShaderString() const;
124 static std::string GetShaderHead(); 123 void FillLocations(ShaderLocations* locations) const;
125 static std::string GetShaderBody();
126 124
127 int matrix_location() const { return matrix_location_; } 125 int tex_transform_location() const { return tex_transform_location_; }
128 126
129 private: 127 int vertex_tex_transform_location() const {
130 int matrix_location_; 128 return vertex_tex_transform_location_;
129 }
131 130
132 DISALLOW_COPY_AND_ASSIGN(VertexShaderPosTex); 131 int tex_matrix_location() const { return tex_matrix_location_; }
133 };
134 132
135 class VertexShaderPosTexYUVStretchOffset {
136 public:
137 VertexShaderPosTexYUVStretchOffset();
138
139 void Init(gpu::gles2::GLES2Interface* context,
140 unsigned program,
141 int* base_uniform_index);
142 std::string GetShaderString() const;
143 static std::string GetShaderHead();
144 static std::string GetShaderBody();
145
146 int matrix_location() const { return matrix_location_; }
147 int ya_tex_scale_location() const { return ya_tex_scale_location_; } 133 int ya_tex_scale_location() const { return ya_tex_scale_location_; }
148 int ya_tex_offset_location() const { return ya_tex_offset_location_; } 134 int ya_tex_offset_location() const { return ya_tex_offset_location_; }
149 int uv_tex_scale_location() const { return uv_tex_scale_location_; } 135 int uv_tex_scale_location() const { return uv_tex_scale_location_; }
150 int uv_tex_offset_location() const { return uv_tex_offset_location_; } 136 int uv_tex_offset_location() const { return uv_tex_offset_location_; }
151 137
152 private: 138 int matrix_location() const { return matrix_location_; }
153 int matrix_location_;
154 int ya_tex_scale_location_;
155 int ya_tex_offset_location_;
156 int uv_tex_scale_location_;
157 int uv_tex_offset_location_;
158 139
159 DISALLOW_COPY_AND_ASSIGN(VertexShaderPosTexYUVStretchOffset); 140 int vertex_opacity_location() const { return vertex_opacity_location_; }
141
142 int viewport_location() const { return viewport_location_; }
143 int edge_location() const { return edge_location_; }
144
145 int quad_location() const { return quad_location_; }
146
147 protected:
148 virtual std::string GetShaderSource() const = 0;
149
ccameron 2017/01/04 09:06:12 has_tex_transform_, has_vertex_tex_transform, has_
150 bool has_tex_transform_ = false;
151 int tex_transform_location_ = -1;
152
153 bool has_vertex_tex_transform_ = false;
154 int vertex_tex_transform_location_ = -1;
155
156 bool has_tex_matrix_ = false;
157 int tex_matrix_location_ = -1;
158
159 bool has_ya_uv_tex_scale_offset_ = false;
160 int ya_tex_scale_location_ = -1;
161 int ya_tex_offset_location_ = -1;
162 int uv_tex_scale_location_ = -1;
163 int uv_tex_offset_location_ = -1;
164
165 bool has_matrix_ = false;
166 int matrix_location_ = -1;
167
168 bool has_vertex_opacity_ = false;
169 int vertex_opacity_location_ = -1;
170
171 bool has_aa_ = false;
172 int viewport_location_ = -1;
173 int edge_location_ = -1;
174
175 bool has_quad_ = false;
176 int quad_location_ = -1;
160 }; 177 };
161 178
162 class VertexShaderPos { 179 class VertexShaderPosTex : public VertexShaderBase {
163 public: 180 public:
164 VertexShaderPos(); 181 VertexShaderPosTex() { has_matrix_ = true; }
165 182 std::string GetShaderSource() const override;
166 void Init(gpu::gles2::GLES2Interface* context,
167 unsigned program,
168 int* base_uniform_index);
169 std::string GetShaderString() const;
170 static std::string GetShaderHead();
171 static std::string GetShaderBody();
172
173 int matrix_location() const { return matrix_location_; }
174
175 private:
176 int matrix_location_;
177
178 DISALLOW_COPY_AND_ASSIGN(VertexShaderPos);
179 }; 183 };
180 184
181 class VertexShaderPosTexIdentity { 185 class VertexShaderPosTexYUVStretchOffset : public VertexShaderBase {
182 public: 186 public:
183 void Init(gpu::gles2::GLES2Interface* context, 187 VertexShaderPosTexYUVStretchOffset() {
184 unsigned program, 188 has_matrix_ = true;
185 int* base_uniform_index) {} 189 has_ya_uv_tex_scale_offset_ = true;
186 std::string GetShaderString() const; 190 }
187 static std::string GetShaderHead(); 191 std::string GetShaderSource() const override;
188 static std::string GetShaderBody();
189 }; 192 };
190 193
191 class VertexShaderPosTexTransform { 194 class VertexShaderPos : public VertexShaderBase {
192 public: 195 public:
193 VertexShaderPosTexTransform(); 196 VertexShaderPos() { has_matrix_ = true; }
194 197 std::string GetShaderSource() const override;
195 void Init(gpu::gles2::GLES2Interface* context,
196 unsigned program,
197 int* base_uniform_index);
198 std::string GetShaderString() const;
199 static std::string GetShaderHead();
200 static std::string GetShaderBody();
201 void FillLocations(ShaderLocations* locations) const;
202
203 int matrix_location() const { return matrix_location_; }
204 int tex_transform_location() const { return tex_transform_location_; }
205 int vertex_opacity_location() const { return vertex_opacity_location_; }
206
207 private:
208 int matrix_location_;
209 int tex_transform_location_;
210 int vertex_opacity_location_;
211
212 DISALLOW_COPY_AND_ASSIGN(VertexShaderPosTexTransform);
213 }; 198 };
214 199
215 class VertexShaderQuad { 200 class VertexShaderPosTexIdentity : public VertexShaderBase {
216 public: 201 public:
217 VertexShaderQuad(); 202 std::string GetShaderSource() const override;
218
219 void Init(gpu::gles2::GLES2Interface* context,
220 unsigned program,
221 int* base_uniform_index);
222 std::string GetShaderString() const;
223 static std::string GetShaderHead();
224 static std::string GetShaderBody();
225
226 int matrix_location() const { return matrix_location_; }
227 int viewport_location() const { return -1; }
228 int quad_location() const { return quad_location_; }
229 int edge_location() const { return -1; }
230
231 private:
232 int matrix_location_;
233 int quad_location_;
234
235 DISALLOW_COPY_AND_ASSIGN(VertexShaderQuad);
236 }; 203 };
237 204
238 class VertexShaderQuadAA { 205 class VertexShaderPosTexTransform : public VertexShaderBase {
239 public: 206 public:
240 VertexShaderQuadAA(); 207 VertexShaderPosTexTransform() {
241 208 has_matrix_ = true;
242 void Init(gpu::gles2::GLES2Interface* context, 209 has_tex_transform_ = true;
243 unsigned program, 210 has_vertex_opacity_ = true;
244 int* base_uniform_index); 211 }
245 std::string GetShaderString() const; 212 std::string GetShaderSource() const override;
246 static std::string GetShaderHead();
247 static std::string GetShaderBody();
248
249 int matrix_location() const { return matrix_location_; }
250 int viewport_location() const { return viewport_location_; }
251 int quad_location() const { return quad_location_; }
252 int edge_location() const { return edge_location_; }
253
254 private:
255 int matrix_location_;
256 int viewport_location_;
257 int quad_location_;
258 int edge_location_;
259
260 DISALLOW_COPY_AND_ASSIGN(VertexShaderQuadAA);
261 }; 213 };
262 214
263 215 class VertexShaderQuad : public VertexShaderBase {
264 class VertexShaderQuadTexTransformAA {
265 public: 216 public:
266 VertexShaderQuadTexTransformAA(); 217 VertexShaderQuad() {
267 218 has_matrix_ = true;
268 void Init(gpu::gles2::GLES2Interface* context, 219 has_quad_ = true;
269 unsigned program, 220 }
270 int* base_uniform_index); 221 std::string GetShaderSource() const override;
271 std::string GetShaderString() const;
272 static std::string GetShaderHead();
273 static std::string GetShaderBody();
274 void FillLocations(ShaderLocations* locations) const;
275
276 int matrix_location() const { return matrix_location_; }
277 int viewport_location() const { return viewport_location_; }
278 int quad_location() const { return quad_location_; }
279 int edge_location() const { return edge_location_; }
280 int tex_transform_location() const { return tex_transform_location_; }
281
282 private:
283 int matrix_location_;
284 int viewport_location_;
285 int quad_location_;
286 int edge_location_;
287 int tex_transform_location_;
288
289 DISALLOW_COPY_AND_ASSIGN(VertexShaderQuadTexTransformAA);
290 }; 222 };
291 223
292 class VertexShaderTile { 224 class VertexShaderQuadAA : public VertexShaderBase {
293 public: 225 public:
294 VertexShaderTile(); 226 VertexShaderQuadAA() {
295 227 has_matrix_ = true;
296 void Init(gpu::gles2::GLES2Interface* context, 228 has_aa_ = true;
297 unsigned program, 229 has_quad_ = true;
298 int* base_uniform_index);
299 std::string GetShaderString() const;
300 static std::string GetShaderHead();
301 static std::string GetShaderBody();
302
303 int matrix_location() const { return matrix_location_; }
304 int viewport_location() const { return -1; }
305 int quad_location() const { return quad_location_; }
306 int edge_location() const { return -1; }
307 int vertex_tex_transform_location() const {
308 return vertex_tex_transform_location_;
309 } 230 }
310 231 std::string GetShaderSource() const override;
311 private:
312 int matrix_location_;
313 int quad_location_;
314 int vertex_tex_transform_location_;
315
316 DISALLOW_COPY_AND_ASSIGN(VertexShaderTile);
317 }; 232 };
318 233
319 class VertexShaderTileAA { 234 class VertexShaderQuadTexTransformAA : public VertexShaderBase {
320 public: 235 public:
321 VertexShaderTileAA(); 236 VertexShaderQuadTexTransformAA() {
322 237 has_matrix_ = true;
323 void Init(gpu::gles2::GLES2Interface* context, 238 has_aa_ = true;
324 unsigned program, 239 has_quad_ = true;
325 int* base_uniform_index); 240 has_tex_transform_ = true;
326 std::string GetShaderString() const;
327 static std::string GetShaderHead();
328 static std::string GetShaderBody();
329
330 int matrix_location() const { return matrix_location_; }
331 int viewport_location() const { return viewport_location_; }
332 int quad_location() const { return quad_location_; }
333 int edge_location() const { return edge_location_; }
334 int vertex_tex_transform_location() const {
335 return vertex_tex_transform_location_;
336 } 241 }
337 242 std::string GetShaderSource() const override;
338 private:
339 int matrix_location_;
340 int viewport_location_;
341 int quad_location_;
342 int edge_location_;
343 int vertex_tex_transform_location_;
344
345 DISALLOW_COPY_AND_ASSIGN(VertexShaderTileAA);
346 }; 243 };
347 244
348 class VertexShaderVideoTransform { 245 class VertexShaderTile : public VertexShaderBase {
349 public: 246 public:
350 VertexShaderVideoTransform(); 247 VertexShaderTile() {
248 has_matrix_ = true;
249 has_quad_ = true;
250 has_vertex_tex_transform_ = true;
251 }
252 std::string GetShaderSource() const override;
253 };
351 254
352 void Init(gpu::gles2::GLES2Interface* context, 255 class VertexShaderTileAA : public VertexShaderBase {
353 unsigned program, 256 public:
354 int* base_uniform_index); 257 VertexShaderTileAA() {
355 std::string GetShaderString() const; 258 has_matrix_ = true;
356 static std::string GetShaderHead(); 259 has_quad_ = true;
357 static std::string GetShaderBody(); 260 has_vertex_tex_transform_ = true;
261 has_aa_ = true;
262 }
263 std::string GetShaderSource() const override;
264 };
358 265
359 int matrix_location() const { return matrix_location_; } 266 class VertexShaderVideoTransform : public VertexShaderBase {
360 int tex_matrix_location() const { return tex_matrix_location_; } 267 public:
361 268 VertexShaderVideoTransform() {
362 private: 269 has_matrix_ = true;
363 int matrix_location_; 270 has_tex_matrix_ = true;
364 int tex_matrix_location_; 271 }
365 272 std::string GetShaderSource() const override;
366 DISALLOW_COPY_AND_ASSIGN(VertexShaderVideoTransform);
367 }; 273 };
368 274
369 class FragmentShaderBase { 275 class FragmentShaderBase {
370 public: 276 public:
371 virtual void Init(gpu::gles2::GLES2Interface* context, 277 virtual void Init(gpu::gles2::GLES2Interface* context,
372 unsigned program, 278 unsigned program,
373 int* base_uniform_index); 279 int* base_uniform_index);
374 std::string GetShaderString(TexCoordPrecision precision, 280 std::string GetShaderString(TexCoordPrecision precision,
375 SamplerType sampler) const; 281 SamplerType sampler) const;
376 void FillLocations(ShaderLocations* locations) const; 282 void FillLocations(ShaderLocations* locations) const;
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after
676 FragmentShaderColorAA() { 582 FragmentShaderColorAA() {
677 input_color_type_ = INPUT_COLOR_SOURCE_UNIFORM; 583 input_color_type_ = INPUT_COLOR_SOURCE_UNIFORM;
678 has_aa_ = true; 584 has_aa_ = true;
679 frag_color_mode_ = FRAG_COLOR_MODE_DEFAULT; 585 frag_color_mode_ = FRAG_COLOR_MODE_DEFAULT;
680 } 586 }
681 }; 587 };
682 588
683 } // namespace cc 589 } // namespace cc
684 590
685 #endif // CC_OUTPUT_SHADER_H_ 591 #endif // CC_OUTPUT_SHADER_H_
OLDNEW
« no previous file with comments | « no previous file | cc/output/shader.cc » ('j') | cc/output/shader.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698