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

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

Issue 2628713002: The great shader refactor: Use ProgramKey to initialize shaders (Closed)
Patch Set: 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 | « cc/output/program_binding.cc ('k') | no next file » | no next file with comments »
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/logging.h"
10 #include "base/macros.h" 11 #include "base/macros.h"
11 #include "cc/base/cc_export.h" 12 #include "cc/base/cc_export.h"
12 13
13 namespace gfx { 14 namespace gfx {
14 class Point; 15 class Point;
15 class Size; 16 class Size;
16 } 17 }
17 18
18 namespace gpu { 19 namespace gpu {
19 namespace gles2 { 20 namespace gles2 {
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
228 bool has_vertex_opacity_ = false; 229 bool has_vertex_opacity_ = false;
229 int vertex_opacity_location_ = -1; 230 int vertex_opacity_location_ = -1;
230 231
231 AAMode aa_mode_ = NO_AA; 232 AAMode aa_mode_ = NO_AA;
232 int viewport_location_ = -1; 233 int viewport_location_ = -1;
233 int edge_location_ = -1; 234 int edge_location_ = -1;
234 }; 235 };
235 236
236 class VertexShaderPosTex : public VertexShaderBase { 237 class VertexShaderPosTex : public VertexShaderBase {
237 public: 238 public:
238 void SetSubclassProperties() { 239 void CheckSubclassProperties() {
239 tex_coord_source_ = TEX_COORD_SOURCE_ATTRIBUTE; 240 DCHECK_EQ(tex_coord_source_, TEX_COORD_SOURCE_ATTRIBUTE);
240 has_matrix_ = true; 241 DCHECK_EQ(has_matrix_, true);
242
243 DCHECK_EQ(use_uniform_arrays_, false);
244 DCHECK_EQ(position_source_, POSITION_SOURCE_ATTRIBUTE);
245 DCHECK_EQ(tex_coord_transform_, TEX_COORD_TRANSFORM_NONE);
246 DCHECK_EQ(is_ya_uv_, false);
247 DCHECK_EQ(has_dummy_variables_, false);
248 DCHECK_EQ(has_vertex_opacity_, false);
249 DCHECK_EQ(aa_mode_, NO_AA);
241 } 250 }
242 }; 251 };
243 252
244 class VertexShaderPosTexYUVStretchOffset : public VertexShaderBase { 253 class VertexShaderPosTexYUVStretchOffset : public VertexShaderBase {
245 public: 254 public:
246 void SetSubclassProperties() { 255 void CheckSubclassProperties() {
247 tex_coord_source_ = TEX_COORD_SOURCE_ATTRIBUTE; 256 DCHECK_EQ(tex_coord_source_, TEX_COORD_SOURCE_ATTRIBUTE);
248 has_matrix_ = true; 257 DCHECK_EQ(has_matrix_, true);
249 is_ya_uv_ = true; 258 DCHECK_EQ(is_ya_uv_, true);
259
260 DCHECK_EQ(use_uniform_arrays_, false);
261 DCHECK_EQ(position_source_, POSITION_SOURCE_ATTRIBUTE);
262 DCHECK_EQ(tex_coord_transform_, TEX_COORD_TRANSFORM_NONE);
263 DCHECK_EQ(has_dummy_variables_, false);
264 DCHECK_EQ(has_vertex_opacity_, false);
265 DCHECK_EQ(aa_mode_, NO_AA);
250 } 266 }
251 }; 267 };
252 268
253 class VertexShaderPos : public VertexShaderBase { 269 class VertexShaderPos : public VertexShaderBase {
254 public: 270 public:
255 void SetSubclassProperties() { has_matrix_ = true; } 271 void CheckSubclassProperties() {
272 DCHECK_EQ(has_matrix_, true);
273
274 DCHECK_EQ(position_source_, POSITION_SOURCE_ATTRIBUTE);
275 DCHECK_EQ(tex_coord_source_, TEX_COORD_SOURCE_NONE);
276 DCHECK_EQ(tex_coord_transform_, TEX_COORD_TRANSFORM_NONE);
277 DCHECK_EQ(is_ya_uv_, false);
278 DCHECK_EQ(has_dummy_variables_, false);
279 DCHECK_EQ(has_vertex_opacity_, false);
280 DCHECK_EQ(aa_mode_, NO_AA);
281 DCHECK_EQ(use_uniform_arrays_, false);
282 }
256 }; 283 };
257 284
258 class VertexShaderPosTexTransform : public VertexShaderBase { 285 class VertexShaderPosTexTransform : public VertexShaderBase {
259 public: 286 public:
260 void SetSubclassProperties() { 287 void CheckSubclassProperties() {
261 tex_coord_source_ = TEX_COORD_SOURCE_ATTRIBUTE; 288 DCHECK_EQ(tex_coord_source_, TEX_COORD_SOURCE_ATTRIBUTE);
262 tex_coord_transform_ = TEX_COORD_TRANSFORM_VEC4; 289 DCHECK_EQ(tex_coord_transform_, TEX_COORD_TRANSFORM_VEC4);
263 has_matrix_ = true; 290 DCHECK_EQ(has_matrix_, true);
264 has_vertex_opacity_ = true; 291 DCHECK_EQ(has_vertex_opacity_, true);
265 use_uniform_arrays_ = true; 292 DCHECK_EQ(use_uniform_arrays_, true);
293
294 DCHECK_EQ(position_source_, POSITION_SOURCE_ATTRIBUTE);
295 DCHECK_EQ(is_ya_uv_, false);
296 DCHECK_EQ(has_dummy_variables_, false);
297 DCHECK_EQ(aa_mode_, NO_AA);
266 } 298 }
267 }; 299 };
268 300
269 class VertexShaderQuad : public VertexShaderBase { 301 class VertexShaderQuad : public VertexShaderBase {
270 public: 302 public:
271 void SetSubclassProperties() { 303 void CheckSubclassProperties() {
272 position_source_ = POSITION_SOURCE_ATTRIBUTE_INDEXED_UNIFORM; 304 DCHECK_EQ(position_source_, POSITION_SOURCE_ATTRIBUTE_INDEXED_UNIFORM);
273 has_matrix_ = true; 305 DCHECK_EQ(has_matrix_, true);
274 #if defined(OS_ANDROID) 306 #if defined(OS_ANDROID)
275 has_dummy_variables_ = true; 307 DCHECK_EQ(has_dummy_variables_, true);
276 #endif 308 #endif
309
310 DCHECK_EQ(use_uniform_arrays_, false);
311 DCHECK_EQ(tex_coord_source_, TEX_COORD_SOURCE_NONE);
312 DCHECK_EQ(tex_coord_transform_, TEX_COORD_TRANSFORM_NONE);
313 DCHECK_EQ(is_ya_uv_, false);
314 DCHECK_EQ(has_vertex_opacity_, false);
315 DCHECK_EQ(aa_mode_, NO_AA);
277 } 316 }
278 }; 317 };
279 318
280 class VertexShaderQuadAA : public VertexShaderBase { 319 class VertexShaderQuadAA : public VertexShaderBase {
281 public: 320 public:
282 void SetSubclassProperties() { 321 void CheckSubclassProperties() {
283 position_source_ = POSITION_SOURCE_ATTRIBUTE_INDEXED_UNIFORM; 322 DCHECK_EQ(position_source_, POSITION_SOURCE_ATTRIBUTE_INDEXED_UNIFORM);
284 has_matrix_ = true; 323 DCHECK_EQ(has_matrix_, true);
285 aa_mode_ = USE_AA; 324 DCHECK_EQ(aa_mode_, USE_AA);
325
326 DCHECK_EQ(use_uniform_arrays_, false);
327 DCHECK_EQ(tex_coord_source_, TEX_COORD_SOURCE_NONE);
328 DCHECK_EQ(tex_coord_transform_, TEX_COORD_TRANSFORM_NONE);
329 DCHECK_EQ(is_ya_uv_, false);
330 DCHECK_EQ(has_dummy_variables_, false);
331 DCHECK_EQ(has_vertex_opacity_, false);
286 } 332 }
287 }; 333 };
288 334
289 class VertexShaderQuadTexTransformAA : public VertexShaderBase { 335 class VertexShaderQuadTexTransformAA : public VertexShaderBase {
290 public: 336 public:
291 void SetSubclassProperties() { 337 void CheckSubclassProperties() {
292 position_source_ = POSITION_SOURCE_ATTRIBUTE_INDEXED_UNIFORM; 338 DCHECK_EQ(position_source_, POSITION_SOURCE_ATTRIBUTE_INDEXED_UNIFORM);
293 tex_coord_source_ = TEX_COORD_SOURCE_POSITION; 339 DCHECK_EQ(tex_coord_source_, TEX_COORD_SOURCE_POSITION);
294 tex_coord_transform_ = TEX_COORD_TRANSFORM_TRANSLATED_VEC4; 340 DCHECK_EQ(tex_coord_transform_, TEX_COORD_TRANSFORM_TRANSLATED_VEC4);
295 has_matrix_ = true; 341 DCHECK_EQ(has_matrix_, true);
296 aa_mode_ = USE_AA; 342 DCHECK_EQ(aa_mode_, USE_AA);
343
344 DCHECK_EQ(use_uniform_arrays_, false);
345 DCHECK_EQ(is_ya_uv_, false);
346 DCHECK_EQ(has_dummy_variables_, false);
347 DCHECK_EQ(has_vertex_opacity_, false);
297 } 348 }
298 }; 349 };
299 350
300 class VertexShaderTile : public VertexShaderBase { 351 class VertexShaderTile : public VertexShaderBase {
301 public: 352 public:
302 void SetSubclassProperties() { 353 void CheckSubclassProperties() {
303 position_source_ = POSITION_SOURCE_ATTRIBUTE_INDEXED_UNIFORM; 354 DCHECK_EQ(position_source_, POSITION_SOURCE_ATTRIBUTE_INDEXED_UNIFORM);
304 tex_coord_source_ = TEX_COORD_SOURCE_ATTRIBUTE; 355 DCHECK_EQ(tex_coord_source_, TEX_COORD_SOURCE_ATTRIBUTE);
305 tex_coord_transform_ = TEX_COORD_TRANSFORM_VEC4; 356 DCHECK_EQ(tex_coord_transform_, TEX_COORD_TRANSFORM_VEC4);
306 has_matrix_ = true; 357 DCHECK_EQ(has_matrix_, true);
358
359 DCHECK_EQ(use_uniform_arrays_, false);
360 DCHECK_EQ(is_ya_uv_, false);
361 DCHECK_EQ(has_dummy_variables_, false);
362 DCHECK_EQ(has_vertex_opacity_, false);
363 DCHECK_EQ(aa_mode_, NO_AA);
307 } 364 }
308 }; 365 };
309 366
310 class VertexShaderTileAA : public VertexShaderBase { 367 class VertexShaderTileAA : public VertexShaderBase {
311 public: 368 public:
312 void SetSubclassProperties() { 369 void CheckSubclassProperties() {
313 position_source_ = POSITION_SOURCE_ATTRIBUTE_INDEXED_UNIFORM; 370 DCHECK_EQ(position_source_, POSITION_SOURCE_ATTRIBUTE_INDEXED_UNIFORM);
314 tex_coord_source_ = TEX_COORD_SOURCE_POSITION; 371 DCHECK_EQ(tex_coord_source_, TEX_COORD_SOURCE_POSITION);
315 tex_coord_transform_ = TEX_COORD_TRANSFORM_VEC4; 372 DCHECK_EQ(tex_coord_transform_, TEX_COORD_TRANSFORM_VEC4);
316 has_matrix_ = true; 373 DCHECK_EQ(has_matrix_, true);
317 aa_mode_ = USE_AA; 374 DCHECK_EQ(aa_mode_, USE_AA);
375
376 DCHECK_EQ(use_uniform_arrays_, false);
377 DCHECK_EQ(is_ya_uv_, false);
378 DCHECK_EQ(has_dummy_variables_, false);
379 DCHECK_EQ(has_vertex_opacity_, false);
318 } 380 }
319 }; 381 };
320 382
321 class VertexShaderVideoTransform : public VertexShaderBase { 383 class VertexShaderVideoTransform : public VertexShaderBase {
322 public: 384 public:
323 void SetSubclassProperties() { 385 void CheckSubclassProperties() {
324 tex_coord_source_ = TEX_COORD_SOURCE_ATTRIBUTE; 386 DCHECK_EQ(tex_coord_source_, TEX_COORD_SOURCE_ATTRIBUTE);
325 tex_coord_transform_ = TEX_COORD_TRANSFORM_MATRIX; 387 DCHECK_EQ(tex_coord_transform_, TEX_COORD_TRANSFORM_MATRIX);
326 has_matrix_ = true; 388 DCHECK_EQ(has_matrix_, true);
389
390 DCHECK_EQ(use_uniform_arrays_, false);
391 DCHECK_EQ(position_source_, POSITION_SOURCE_ATTRIBUTE);
392 DCHECK_EQ(is_ya_uv_, false);
393 DCHECK_EQ(has_dummy_variables_, false);
394 DCHECK_EQ(has_vertex_opacity_, false);
395 DCHECK_EQ(aa_mode_, NO_AA);
327 } 396 }
328 }; 397 };
329 398
330 class FragmentShaderBase { 399 class FragmentShaderBase {
331 public: 400 public:
332 virtual void Init(gpu::gles2::GLES2Interface* context, 401 virtual void Init(gpu::gles2::GLES2Interface* context,
333 unsigned program, 402 unsigned program,
334 int* base_uniform_index); 403 int* base_uniform_index);
335 std::string GetShaderString() const; 404 std::string GetShaderString() const;
336 void FillLocations(ShaderLocations* locations) const; 405 void FillLocations(ShaderLocations* locations) const;
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
404 473
405 std::string GetHelperFunctions() const; 474 std::string GetHelperFunctions() const;
406 std::string GetBlendFunction() const; 475 std::string GetBlendFunction() const;
407 std::string GetBlendFunctionBodyForRGB() const; 476 std::string GetBlendFunctionBodyForRGB() const;
408 477
409 DISALLOW_COPY_AND_ASSIGN(FragmentShaderBase); 478 DISALLOW_COPY_AND_ASSIGN(FragmentShaderBase);
410 }; 479 };
411 480
412 class FragmentShaderRGBATexVaryingAlpha : public FragmentShaderBase { 481 class FragmentShaderRGBATexVaryingAlpha : public FragmentShaderBase {
413 public: 482 public:
414 void SetSubclassProperties() { 483 void CheckSubclassProperties() {
415 has_varying_alpha_ = true; 484 DCHECK_EQ(has_varying_alpha_, true);
416 frag_color_mode_ = FRAG_COLOR_MODE_DEFAULT; 485 DCHECK_EQ(frag_color_mode_, FRAG_COLOR_MODE_DEFAULT);
486
487 DCHECK_EQ(aa_mode_, NO_AA);
488 DCHECK_EQ(swizzle_mode_, NO_SWIZZLE);
489 DCHECK_EQ(premultiply_alpha_mode_, PREMULTIPLIED_ALPHA);
490 DCHECK_EQ(input_color_type_, INPUT_COLOR_SOURCE_RGBA_TEXTURE);
491 DCHECK_EQ(has_rgba_fragment_tex_transform_, false);
492 DCHECK_EQ(ignore_sampler_type_, false);
493 DCHECK_EQ(mask_mode_, NO_MASK);
494 DCHECK_EQ(has_color_matrix_, false);
495 DCHECK_EQ(has_uniform_alpha_, false);
496 DCHECK_EQ(has_background_color_, false);
417 } 497 }
418 }; 498 };
419 499
420 class FragmentShaderRGBATexPremultiplyAlpha : public FragmentShaderBase { 500 class FragmentShaderRGBATexPremultiplyAlpha : public FragmentShaderBase {
421 public: 501 public:
422 void SetSubclassProperties() { 502 void CheckSubclassProperties() {
423 has_varying_alpha_ = true; 503 DCHECK_EQ(has_varying_alpha_, true);
424 premultiply_alpha_mode_ = NON_PREMULTIPLIED_ALPHA; 504 DCHECK_EQ(premultiply_alpha_mode_, NON_PREMULTIPLIED_ALPHA);
425 frag_color_mode_ = FRAG_COLOR_MODE_DEFAULT; 505 DCHECK_EQ(frag_color_mode_, FRAG_COLOR_MODE_DEFAULT);
506
507 DCHECK_EQ(aa_mode_, NO_AA);
508 DCHECK_EQ(swizzle_mode_, NO_SWIZZLE);
509 DCHECK_EQ(input_color_type_, INPUT_COLOR_SOURCE_RGBA_TEXTURE);
510 DCHECK_EQ(has_rgba_fragment_tex_transform_, false);
511 DCHECK_EQ(ignore_sampler_type_, false);
512 DCHECK_EQ(mask_mode_, NO_MASK);
513 DCHECK_EQ(has_color_matrix_, false);
514 DCHECK_EQ(has_uniform_alpha_, false);
515 DCHECK_EQ(has_background_color_, false);
426 } 516 }
427 }; 517 };
428 518
429 class FragmentShaderTexBackgroundVaryingAlpha : public FragmentShaderBase { 519 class FragmentShaderTexBackgroundVaryingAlpha : public FragmentShaderBase {
430 public: 520 public:
431 void SetSubclassProperties() { 521 void CheckSubclassProperties() {
432 has_background_color_ = true; 522 DCHECK_EQ(has_background_color_, true);
433 has_varying_alpha_ = true; 523 DCHECK_EQ(has_varying_alpha_, true);
434 frag_color_mode_ = FRAG_COLOR_MODE_DEFAULT; 524 DCHECK_EQ(frag_color_mode_, FRAG_COLOR_MODE_DEFAULT);
525
526 DCHECK_EQ(aa_mode_, NO_AA);
527 DCHECK_EQ(swizzle_mode_, NO_SWIZZLE);
528 DCHECK_EQ(premultiply_alpha_mode_, PREMULTIPLIED_ALPHA);
529 DCHECK_EQ(input_color_type_, INPUT_COLOR_SOURCE_RGBA_TEXTURE);
530 DCHECK_EQ(has_rgba_fragment_tex_transform_, false);
531 DCHECK_EQ(ignore_sampler_type_, false);
532 DCHECK_EQ(mask_mode_, NO_MASK);
533 DCHECK_EQ(has_color_matrix_, false);
534 DCHECK_EQ(has_uniform_alpha_, false);
435 } 535 }
436 }; 536 };
437 537
438 class FragmentShaderTexBackgroundPremultiplyAlpha : public FragmentShaderBase { 538 class FragmentShaderTexBackgroundPremultiplyAlpha : public FragmentShaderBase {
439 public: 539 public:
440 void SetSubclassProperties() { 540 void CheckSubclassProperties() {
441 has_background_color_ = true; 541 DCHECK_EQ(has_background_color_, true);
442 has_varying_alpha_ = true; 542 DCHECK_EQ(has_varying_alpha_, true);
443 premultiply_alpha_mode_ = NON_PREMULTIPLIED_ALPHA; 543 DCHECK_EQ(premultiply_alpha_mode_, NON_PREMULTIPLIED_ALPHA);
444 frag_color_mode_ = FRAG_COLOR_MODE_DEFAULT; 544 DCHECK_EQ(frag_color_mode_, FRAG_COLOR_MODE_DEFAULT);
545
546 DCHECK_EQ(aa_mode_, NO_AA);
547 DCHECK_EQ(swizzle_mode_, NO_SWIZZLE);
548 DCHECK_EQ(input_color_type_, INPUT_COLOR_SOURCE_RGBA_TEXTURE);
549 DCHECK_EQ(has_rgba_fragment_tex_transform_, false);
550 DCHECK_EQ(ignore_sampler_type_, false);
551 DCHECK_EQ(mask_mode_, NO_MASK);
552 DCHECK_EQ(has_color_matrix_, false);
553 DCHECK_EQ(has_uniform_alpha_, false);
445 } 554 }
446 }; 555 };
447 556
448 class FragmentShaderRGBATexAlpha : public FragmentShaderBase { 557 class FragmentShaderRGBATexAlpha : public FragmentShaderBase {
449 public: 558 public:
450 void SetSubclassProperties() { 559 void CheckSubclassProperties() {
451 has_uniform_alpha_ = true; 560 DCHECK_EQ(has_uniform_alpha_, true);
452 frag_color_mode_ = FRAG_COLOR_MODE_APPLY_BLEND_MODE; 561 DCHECK_EQ(frag_color_mode_, FRAG_COLOR_MODE_APPLY_BLEND_MODE);
562
563 DCHECK_EQ(aa_mode_, NO_AA);
564 DCHECK_EQ(has_varying_alpha_, false);
565 DCHECK_EQ(swizzle_mode_, NO_SWIZZLE);
566 DCHECK_EQ(premultiply_alpha_mode_, PREMULTIPLIED_ALPHA);
567 DCHECK_EQ(input_color_type_, INPUT_COLOR_SOURCE_RGBA_TEXTURE);
568 DCHECK_EQ(has_rgba_fragment_tex_transform_, false);
569 DCHECK_EQ(ignore_sampler_type_, false);
570 DCHECK_EQ(mask_mode_, NO_MASK);
571 DCHECK_EQ(has_color_matrix_, false);
572 DCHECK_EQ(has_background_color_, false);
453 } 573 }
454 }; 574 };
455 575
456 class FragmentShaderRGBATexColorMatrixAlpha : public FragmentShaderBase { 576 class FragmentShaderRGBATexColorMatrixAlpha : public FragmentShaderBase {
457 public: 577 public:
458 void SetSubclassProperties() { 578 void CheckSubclassProperties() {
459 has_uniform_alpha_ = true; 579 DCHECK_EQ(has_uniform_alpha_, true);
460 has_color_matrix_ = true; 580 DCHECK_EQ(has_color_matrix_, true);
461 frag_color_mode_ = FRAG_COLOR_MODE_APPLY_BLEND_MODE; 581 DCHECK_EQ(frag_color_mode_, FRAG_COLOR_MODE_APPLY_BLEND_MODE);
582
583 DCHECK_EQ(aa_mode_, NO_AA);
584 DCHECK_EQ(has_varying_alpha_, false);
585 DCHECK_EQ(swizzle_mode_, NO_SWIZZLE);
586 DCHECK_EQ(premultiply_alpha_mode_, PREMULTIPLIED_ALPHA);
587 DCHECK_EQ(input_color_type_, INPUT_COLOR_SOURCE_RGBA_TEXTURE);
588 DCHECK_EQ(has_rgba_fragment_tex_transform_, false);
589 DCHECK_EQ(ignore_sampler_type_, false);
590 DCHECK_EQ(mask_mode_, NO_MASK);
591 DCHECK_EQ(has_background_color_, false);
462 } 592 }
463 }; 593 };
464 594
465 class FragmentShaderRGBATexOpaque : public FragmentShaderBase { 595 class FragmentShaderRGBATexOpaque : public FragmentShaderBase {
466 public: 596 public:
467 void SetSubclassProperties() { frag_color_mode_ = FRAG_COLOR_MODE_OPAQUE; } 597 void CheckSubclassProperties() {
598 DCHECK_EQ(frag_color_mode_, FRAG_COLOR_MODE_OPAQUE);
599
600 DCHECK_EQ(aa_mode_, NO_AA);
601 DCHECK_EQ(has_varying_alpha_, false);
602 DCHECK_EQ(swizzle_mode_, NO_SWIZZLE);
603 DCHECK_EQ(premultiply_alpha_mode_, PREMULTIPLIED_ALPHA);
604 DCHECK_EQ(input_color_type_, INPUT_COLOR_SOURCE_RGBA_TEXTURE);
605 DCHECK_EQ(has_rgba_fragment_tex_transform_, false);
606 DCHECK_EQ(ignore_sampler_type_, false);
607 DCHECK_EQ(mask_mode_, NO_MASK);
608 DCHECK_EQ(has_color_matrix_, false);
609 DCHECK_EQ(has_uniform_alpha_, false);
610 DCHECK_EQ(has_background_color_, false);
611 }
468 }; 612 };
469 613
470 class FragmentShaderRGBATex : public FragmentShaderBase { 614 class FragmentShaderRGBATex : public FragmentShaderBase {
471 public: 615 public:
472 void SetSubclassProperties() { frag_color_mode_ = FRAG_COLOR_MODE_DEFAULT; } 616 void CheckSubclassProperties() {
617 DCHECK_EQ(frag_color_mode_, FRAG_COLOR_MODE_DEFAULT);
618 DCHECK_EQ(sampler_type_, SAMPLER_TYPE_EXTERNAL_OES);
619
620 DCHECK_EQ(aa_mode_, NO_AA);
621 DCHECK_EQ(has_varying_alpha_, false);
622 DCHECK_EQ(swizzle_mode_, NO_SWIZZLE);
623 DCHECK_EQ(premultiply_alpha_mode_, PREMULTIPLIED_ALPHA);
624 DCHECK_EQ(input_color_type_, INPUT_COLOR_SOURCE_RGBA_TEXTURE);
625 DCHECK_EQ(has_rgba_fragment_tex_transform_, false);
626 DCHECK_EQ(ignore_sampler_type_, false);
627 DCHECK_EQ(mask_mode_, NO_MASK);
628 DCHECK_EQ(has_color_matrix_, false);
629 DCHECK_EQ(has_uniform_alpha_, false);
630 DCHECK_EQ(has_background_color_, false);
631 }
473 }; 632 };
474 633
475 // Swizzles the red and blue component of sampled texel with alpha. 634 // Swizzles the red and blue component of sampled texel with alpha.
476 class FragmentShaderRGBATexSwizzleAlpha : public FragmentShaderBase { 635 class FragmentShaderRGBATexSwizzleAlpha : public FragmentShaderBase {
477 public: 636 public:
478 void SetSubclassProperties() { 637 void CheckSubclassProperties() {
479 has_uniform_alpha_ = true; 638 DCHECK_EQ(has_uniform_alpha_, true);
480 swizzle_mode_ = DO_SWIZZLE; 639 DCHECK_EQ(swizzle_mode_, DO_SWIZZLE);
481 frag_color_mode_ = FRAG_COLOR_MODE_DEFAULT; 640 DCHECK_EQ(frag_color_mode_, FRAG_COLOR_MODE_DEFAULT);
641
642 DCHECK_EQ(aa_mode_, NO_AA);
643 DCHECK_EQ(has_varying_alpha_, false);
644 DCHECK_EQ(premultiply_alpha_mode_, PREMULTIPLIED_ALPHA);
645 DCHECK_EQ(input_color_type_, INPUT_COLOR_SOURCE_RGBA_TEXTURE);
646 DCHECK_EQ(has_rgba_fragment_tex_transform_, false);
647 DCHECK_EQ(ignore_sampler_type_, false);
648 DCHECK_EQ(mask_mode_, NO_MASK);
649 DCHECK_EQ(has_color_matrix_, false);
650 DCHECK_EQ(has_background_color_, false);
482 } 651 }
483 }; 652 };
484 653
485 // Swizzles the red and blue component of sampled texel without alpha. 654 // Swizzles the red and blue component of sampled texel without alpha.
486 class FragmentShaderRGBATexSwizzleOpaque : public FragmentShaderBase { 655 class FragmentShaderRGBATexSwizzleOpaque : public FragmentShaderBase {
487 public: 656 public:
488 void SetSubclassProperties() { 657 void CheckSubclassProperties() {
489 swizzle_mode_ = DO_SWIZZLE; 658 DCHECK_EQ(swizzle_mode_, DO_SWIZZLE);
490 frag_color_mode_ = FRAG_COLOR_MODE_OPAQUE; 659 DCHECK_EQ(frag_color_mode_, FRAG_COLOR_MODE_OPAQUE);
660
661 DCHECK_EQ(aa_mode_, NO_AA);
662 DCHECK_EQ(has_varying_alpha_, false);
663 DCHECK_EQ(premultiply_alpha_mode_, PREMULTIPLIED_ALPHA);
664 DCHECK_EQ(input_color_type_, INPUT_COLOR_SOURCE_RGBA_TEXTURE);
665 DCHECK_EQ(has_rgba_fragment_tex_transform_, false);
666 DCHECK_EQ(ignore_sampler_type_, false);
667 DCHECK_EQ(mask_mode_, NO_MASK);
668 DCHECK_EQ(has_color_matrix_, false);
669 DCHECK_EQ(has_uniform_alpha_, false);
670 DCHECK_EQ(has_background_color_, false);
491 } 671 }
492 }; 672 };
493 673
494 class FragmentShaderRGBATexAlphaAA : public FragmentShaderBase { 674 class FragmentShaderRGBATexAlphaAA : public FragmentShaderBase {
495 public: 675 public:
496 void SetSubclassProperties() { 676 void CheckSubclassProperties() {
497 aa_mode_ = USE_AA; 677 DCHECK_EQ(aa_mode_, USE_AA);
498 has_uniform_alpha_ = true; 678 DCHECK_EQ(has_uniform_alpha_, true);
499 frag_color_mode_ = FRAG_COLOR_MODE_APPLY_BLEND_MODE; 679 DCHECK_EQ(frag_color_mode_, FRAG_COLOR_MODE_APPLY_BLEND_MODE);
680
681 DCHECK_EQ(has_varying_alpha_, false);
682 DCHECK_EQ(swizzle_mode_, NO_SWIZZLE);
683 DCHECK_EQ(premultiply_alpha_mode_, PREMULTIPLIED_ALPHA);
684 DCHECK_EQ(input_color_type_, INPUT_COLOR_SOURCE_RGBA_TEXTURE);
685 DCHECK_EQ(has_rgba_fragment_tex_transform_, false);
686 DCHECK_EQ(ignore_sampler_type_, false);
687 DCHECK_EQ(mask_mode_, NO_MASK);
688 DCHECK_EQ(has_color_matrix_, false);
689 DCHECK_EQ(has_background_color_, false);
500 } 690 }
501 }; 691 };
502 692
503 class FragmentShaderRGBATexClampAlphaAA : public FragmentShaderBase { 693 class FragmentShaderRGBATexClampAlphaAA : public FragmentShaderBase {
504 public: 694 public:
505 void SetSubclassProperties() { 695 void CheckSubclassProperties() {
506 aa_mode_ = USE_AA; 696 DCHECK_EQ(aa_mode_, USE_AA);
507 has_uniform_alpha_ = true; 697 DCHECK_EQ(has_uniform_alpha_, true);
508 has_rgba_fragment_tex_transform_ = true; 698 DCHECK_EQ(has_rgba_fragment_tex_transform_, true);
509 frag_color_mode_ = FRAG_COLOR_MODE_DEFAULT; 699 DCHECK_EQ(frag_color_mode_, FRAG_COLOR_MODE_DEFAULT);
700
701 DCHECK_EQ(has_varying_alpha_, false);
702 DCHECK_EQ(swizzle_mode_, NO_SWIZZLE);
703 DCHECK_EQ(premultiply_alpha_mode_, PREMULTIPLIED_ALPHA);
704 DCHECK_EQ(input_color_type_, INPUT_COLOR_SOURCE_RGBA_TEXTURE);
705 DCHECK_EQ(ignore_sampler_type_, false);
706 DCHECK_EQ(mask_mode_, NO_MASK);
707 DCHECK_EQ(has_color_matrix_, false);
708 DCHECK_EQ(has_background_color_, false);
510 } 709 }
511 }; 710 };
512 711
513 // Swizzles the red and blue component of sampled texel. 712 // Swizzles the red and blue component of sampled texel.
514 class FragmentShaderRGBATexClampSwizzleAlphaAA : public FragmentShaderBase { 713 class FragmentShaderRGBATexClampSwizzleAlphaAA : public FragmentShaderBase {
515 public: 714 public:
516 void SetSubclassProperties() { 715 void CheckSubclassProperties() {
517 aa_mode_ = USE_AA; 716 DCHECK_EQ(aa_mode_, USE_AA);
518 has_uniform_alpha_ = true; 717 DCHECK_EQ(has_uniform_alpha_, true);
519 has_rgba_fragment_tex_transform_ = true; 718 DCHECK_EQ(has_rgba_fragment_tex_transform_, true);
520 swizzle_mode_ = DO_SWIZZLE; 719 DCHECK_EQ(swizzle_mode_, DO_SWIZZLE);
521 frag_color_mode_ = FRAG_COLOR_MODE_DEFAULT; 720 DCHECK_EQ(frag_color_mode_, FRAG_COLOR_MODE_DEFAULT);
721
722 DCHECK_EQ(has_varying_alpha_, false);
723 DCHECK_EQ(premultiply_alpha_mode_, PREMULTIPLIED_ALPHA);
724 DCHECK_EQ(input_color_type_, INPUT_COLOR_SOURCE_RGBA_TEXTURE);
725 DCHECK_EQ(ignore_sampler_type_, false);
726 DCHECK_EQ(mask_mode_, NO_MASK);
727 DCHECK_EQ(has_color_matrix_, false);
728 DCHECK_EQ(has_background_color_, false);
522 } 729 }
523 }; 730 };
524 731
525 class FragmentShaderRGBATexAlphaMask : public FragmentShaderBase { 732 class FragmentShaderRGBATexAlphaMask : public FragmentShaderBase {
526 public: 733 public:
527 void SetSubclassProperties() { 734 void CheckSubclassProperties() {
528 has_uniform_alpha_ = true; 735 DCHECK_EQ(has_uniform_alpha_, true);
529 mask_mode_ = HAS_MASK; 736 DCHECK_EQ(mask_mode_, HAS_MASK);
530 frag_color_mode_ = FRAG_COLOR_MODE_APPLY_BLEND_MODE; 737 DCHECK_EQ(frag_color_mode_, FRAG_COLOR_MODE_APPLY_BLEND_MODE);
531 ignore_sampler_type_ = true; 738 DCHECK_EQ(ignore_sampler_type_, true);
739
740 DCHECK_EQ(aa_mode_, NO_AA);
741 DCHECK_EQ(has_varying_alpha_, false);
742 DCHECK_EQ(swizzle_mode_, NO_SWIZZLE);
743 DCHECK_EQ(premultiply_alpha_mode_, PREMULTIPLIED_ALPHA);
744 DCHECK_EQ(input_color_type_, INPUT_COLOR_SOURCE_RGBA_TEXTURE);
745 DCHECK_EQ(has_rgba_fragment_tex_transform_, false);
746 DCHECK_EQ(has_color_matrix_, false);
747 DCHECK_EQ(has_background_color_, false);
532 } 748 }
533 }; 749 };
534 750
535 class FragmentShaderRGBATexAlphaMaskAA : public FragmentShaderBase { 751 class FragmentShaderRGBATexAlphaMaskAA : public FragmentShaderBase {
536 public: 752 public:
537 void SetSubclassProperties() { 753 void CheckSubclassProperties() {
538 aa_mode_ = USE_AA; 754 DCHECK_EQ(aa_mode_, USE_AA);
539 has_uniform_alpha_ = true; 755 DCHECK_EQ(has_uniform_alpha_, true);
540 mask_mode_ = HAS_MASK; 756 DCHECK_EQ(mask_mode_, HAS_MASK);
541 frag_color_mode_ = FRAG_COLOR_MODE_APPLY_BLEND_MODE; 757 DCHECK_EQ(frag_color_mode_, FRAG_COLOR_MODE_APPLY_BLEND_MODE);
542 ignore_sampler_type_ = true; 758 DCHECK_EQ(ignore_sampler_type_, true);
759
760 DCHECK_EQ(has_varying_alpha_, false);
761 DCHECK_EQ(swizzle_mode_, NO_SWIZZLE);
762 DCHECK_EQ(premultiply_alpha_mode_, PREMULTIPLIED_ALPHA);
763 DCHECK_EQ(input_color_type_, INPUT_COLOR_SOURCE_RGBA_TEXTURE);
764 DCHECK_EQ(has_rgba_fragment_tex_transform_, false);
765 DCHECK_EQ(has_color_matrix_, false);
766 DCHECK_EQ(has_background_color_, false);
543 } 767 }
544 }; 768 };
545 769
546 class FragmentShaderRGBATexAlphaMaskColorMatrixAA : public FragmentShaderBase { 770 class FragmentShaderRGBATexAlphaMaskColorMatrixAA : public FragmentShaderBase {
547 public: 771 public:
548 void SetSubclassProperties() { 772 void CheckSubclassProperties() {
549 aa_mode_ = USE_AA; 773 DCHECK_EQ(aa_mode_, USE_AA);
550 has_uniform_alpha_ = true; 774 DCHECK_EQ(has_uniform_alpha_, true);
551 mask_mode_ = HAS_MASK; 775 DCHECK_EQ(mask_mode_, HAS_MASK);
552 has_color_matrix_ = true; 776 DCHECK_EQ(has_color_matrix_, true);
553 frag_color_mode_ = FRAG_COLOR_MODE_APPLY_BLEND_MODE; 777 DCHECK_EQ(frag_color_mode_, FRAG_COLOR_MODE_APPLY_BLEND_MODE);
554 ignore_sampler_type_ = true; 778 DCHECK_EQ(ignore_sampler_type_, true);
779
780 DCHECK_EQ(has_varying_alpha_, false);
781 DCHECK_EQ(swizzle_mode_, NO_SWIZZLE);
782 DCHECK_EQ(premultiply_alpha_mode_, PREMULTIPLIED_ALPHA);
783 DCHECK_EQ(input_color_type_, INPUT_COLOR_SOURCE_RGBA_TEXTURE);
784 DCHECK_EQ(has_rgba_fragment_tex_transform_, false);
785 DCHECK_EQ(has_background_color_, false);
555 } 786 }
556 }; 787 };
557 788
558 class FragmentShaderRGBATexAlphaColorMatrixAA : public FragmentShaderBase { 789 class FragmentShaderRGBATexAlphaColorMatrixAA : public FragmentShaderBase {
559 public: 790 public:
560 void SetSubclassProperties() { 791 void CheckSubclassProperties() {
561 aa_mode_ = USE_AA; 792 DCHECK_EQ(aa_mode_, USE_AA);
562 has_uniform_alpha_ = true; 793 DCHECK_EQ(has_uniform_alpha_, true);
563 has_color_matrix_ = true; 794 DCHECK_EQ(has_color_matrix_, true);
564 frag_color_mode_ = FRAG_COLOR_MODE_APPLY_BLEND_MODE; 795 DCHECK_EQ(frag_color_mode_, FRAG_COLOR_MODE_APPLY_BLEND_MODE);
796
797 DCHECK_EQ(has_varying_alpha_, false);
798 DCHECK_EQ(swizzle_mode_, NO_SWIZZLE);
799 DCHECK_EQ(premultiply_alpha_mode_, PREMULTIPLIED_ALPHA);
800 DCHECK_EQ(input_color_type_, INPUT_COLOR_SOURCE_RGBA_TEXTURE);
801 DCHECK_EQ(has_rgba_fragment_tex_transform_, false);
802 DCHECK_EQ(ignore_sampler_type_, false);
803 DCHECK_EQ(mask_mode_, NO_MASK);
804 DCHECK_EQ(has_background_color_, false);
565 } 805 }
566 }; 806 };
567 807
568 class FragmentShaderRGBATexAlphaMaskColorMatrix : public FragmentShaderBase { 808 class FragmentShaderRGBATexAlphaMaskColorMatrix : public FragmentShaderBase {
569 public: 809 public:
570 void SetSubclassProperties() { 810 void CheckSubclassProperties() {
571 has_uniform_alpha_ = true; 811 DCHECK_EQ(has_uniform_alpha_, true);
572 mask_mode_ = HAS_MASK; 812 DCHECK_EQ(mask_mode_, HAS_MASK);
573 has_color_matrix_ = true; 813 DCHECK_EQ(has_color_matrix_, true);
574 frag_color_mode_ = FRAG_COLOR_MODE_APPLY_BLEND_MODE; 814 DCHECK_EQ(frag_color_mode_, FRAG_COLOR_MODE_APPLY_BLEND_MODE);
575 ignore_sampler_type_ = true; 815 DCHECK_EQ(ignore_sampler_type_, true);
576 } 816
577 }; 817 DCHECK_EQ(aa_mode_, NO_AA);
578 818 DCHECK_EQ(has_varying_alpha_, false);
819 DCHECK_EQ(swizzle_mode_, NO_SWIZZLE);
820 DCHECK_EQ(premultiply_alpha_mode_, PREMULTIPLIED_ALPHA);
821 DCHECK_EQ(input_color_type_, INPUT_COLOR_SOURCE_RGBA_TEXTURE);
822 DCHECK_EQ(has_rgba_fragment_tex_transform_, false);
823 DCHECK_EQ(has_background_color_, false);
824 }
825 };
826
579 class FragmentShaderYUVVideo : public FragmentShaderBase { 827 class FragmentShaderYUVVideo : public FragmentShaderBase {
580 public: 828 public:
581 FragmentShaderYUVVideo(); 829 FragmentShaderYUVVideo();
582 830
583 void SetSubclassProperties() {} 831 void CheckSubclassProperties() {}
584 832
585 void Init(gpu::gles2::GLES2Interface* context, 833 void Init(gpu::gles2::GLES2Interface* context,
586 unsigned program, 834 unsigned program,
587 int* base_uniform_index) override; 835 int* base_uniform_index) override;
588 int y_texture_location() const { return y_texture_location_; } 836 int y_texture_location() const { return y_texture_location_; }
589 int u_texture_location() const { return u_texture_location_; } 837 int u_texture_location() const { return u_texture_location_; }
590 int v_texture_location() const { return v_texture_location_; } 838 int v_texture_location() const { return v_texture_location_; }
591 int uv_texture_location() const { return uv_texture_location_; } 839 int uv_texture_location() const { return uv_texture_location_; }
592 int a_texture_location() const { return a_texture_location_; } 840 int a_texture_location() const { return a_texture_location_; }
593 int lut_texture_location() const { return lut_texture_location_; } 841 int lut_texture_location() const { return lut_texture_location_; }
(...skipping 27 matching lines...) Expand all
621 int yuv_matrix_location_ = -1; 869 int yuv_matrix_location_ = -1;
622 int yuv_adj_location_ = -1; 870 int yuv_adj_location_ = -1;
623 int ya_clamp_rect_location_ = -1; 871 int ya_clamp_rect_location_ = -1;
624 int uv_clamp_rect_location_ = -1; 872 int uv_clamp_rect_location_ = -1;
625 int resource_multiplier_location_ = -1; 873 int resource_multiplier_location_ = -1;
626 int resource_offset_location_ = -1; 874 int resource_offset_location_ = -1;
627 }; 875 };
628 876
629 class FragmentShaderColor : public FragmentShaderBase { 877 class FragmentShaderColor : public FragmentShaderBase {
630 public: 878 public:
631 void SetSubclassProperties() { 879 void CheckSubclassProperties() {
632 input_color_type_ = INPUT_COLOR_SOURCE_UNIFORM; 880 DCHECK_EQ(input_color_type_, INPUT_COLOR_SOURCE_UNIFORM);
633 frag_color_mode_ = FRAG_COLOR_MODE_DEFAULT; 881 DCHECK_EQ(frag_color_mode_, FRAG_COLOR_MODE_DEFAULT);
882
883 DCHECK_EQ(aa_mode_, NO_AA);
884 DCHECK_EQ(has_varying_alpha_, false);
885 DCHECK_EQ(swizzle_mode_, NO_SWIZZLE);
886 DCHECK_EQ(premultiply_alpha_mode_, PREMULTIPLIED_ALPHA);
887 DCHECK_EQ(has_rgba_fragment_tex_transform_, false);
888 DCHECK_EQ(ignore_sampler_type_, false);
889 DCHECK_EQ(mask_mode_, NO_MASK);
890 DCHECK_EQ(has_color_matrix_, false);
891 DCHECK_EQ(has_uniform_alpha_, false);
892 DCHECK_EQ(has_background_color_, false);
634 } 893 }
635 }; 894 };
636 895
637 class FragmentShaderColorAA : public FragmentShaderBase { 896 class FragmentShaderColorAA : public FragmentShaderBase {
638 public: 897 public:
639 void SetSubclassProperties() { 898 void CheckSubclassProperties() {
640 input_color_type_ = INPUT_COLOR_SOURCE_UNIFORM; 899 DCHECK_EQ(input_color_type_, INPUT_COLOR_SOURCE_UNIFORM);
641 aa_mode_ = USE_AA; 900 DCHECK_EQ(aa_mode_, USE_AA);
642 frag_color_mode_ = FRAG_COLOR_MODE_DEFAULT; 901 DCHECK_EQ(frag_color_mode_, FRAG_COLOR_MODE_DEFAULT);
902
903 DCHECK_EQ(has_varying_alpha_, false);
904 DCHECK_EQ(swizzle_mode_, NO_SWIZZLE);
905 DCHECK_EQ(premultiply_alpha_mode_, PREMULTIPLIED_ALPHA);
906 DCHECK_EQ(has_rgba_fragment_tex_transform_, false);
907 DCHECK_EQ(ignore_sampler_type_, false);
908 DCHECK_EQ(mask_mode_, NO_MASK);
909 DCHECK_EQ(has_color_matrix_, false);
910 DCHECK_EQ(has_uniform_alpha_, false);
911 DCHECK_EQ(has_background_color_, false);
643 } 912 }
644 }; 913 };
645 914
646 } // namespace cc 915 } // namespace cc
647 916
648 #endif // CC_OUTPUT_SHADER_H_ 917 #endif // CC_OUTPUT_SHADER_H_
OLDNEW
« no previous file with comments | « cc/output/program_binding.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698