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

Unified Diff: cc/output/gl_renderer.h

Issue 2613903002: The great shader refactor: Move all programs to a common cache (Closed)
Patch Set: Incorporate review feedback 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | cc/output/gl_renderer.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/output/gl_renderer.h
diff --git a/cc/output/gl_renderer.h b/cc/output/gl_renderer.h
index 2af2c3091e04adaea2d2c0b298383a841be91659..99e39197009cb0a917c93109879db1ab38373f6b 100644
--- a/cc/output/gl_renderer.h
+++ b/cc/output/gl_renderer.h
@@ -294,69 +294,49 @@ class CC_EXPORT GLRenderer : public DirectRenderer {
// itself. Add any new programs here to GLRendererShaderTest.
// Tiled layer shaders.
- typedef ProgramBinding<VertexShaderTile, FragmentShaderRGBATexAlpha>
- TileProgram;
- typedef ProgramBinding<VertexShaderTileAA, FragmentShaderRGBATexClampAlphaAA>
- TileProgramAA;
- typedef ProgramBinding<VertexShaderTileAA,
- FragmentShaderRGBATexClampSwizzleAlphaAA>
- TileProgramSwizzleAA;
- typedef ProgramBinding<VertexShaderTile, FragmentShaderRGBATexOpaque>
- TileProgramOpaque;
- typedef ProgramBinding<VertexShaderTile, FragmentShaderRGBATexSwizzleAlpha>
- TileProgramSwizzle;
- typedef ProgramBinding<VertexShaderTile, FragmentShaderRGBATexSwizzleOpaque>
- TileProgramSwizzleOpaque;
+ typedef Program TileProgram;
+ typedef Program TileProgramAA;
+ typedef Program TileProgramSwizzleAA;
+ typedef Program TileProgramOpaque;
+ typedef Program TileProgramSwizzle;
+ typedef Program TileProgramSwizzleOpaque;
// Texture shaders.
- typedef ProgramBinding<VertexShaderPosTexTransform,
- FragmentShaderRGBATexVaryingAlpha> TextureProgram;
- typedef ProgramBinding<VertexShaderPosTexTransform,
- FragmentShaderRGBATexPremultiplyAlpha>
- NonPremultipliedTextureProgram;
- typedef ProgramBinding<VertexShaderPosTexTransform,
- FragmentShaderTexBackgroundVaryingAlpha>
- TextureBackgroundProgram;
- typedef ProgramBinding<VertexShaderPosTexTransform,
- FragmentShaderTexBackgroundPremultiplyAlpha>
- NonPremultipliedTextureBackgroundProgram;
+ typedef Program TextureProgram;
+ typedef Program NonPremultipliedTextureProgram;
+ typedef Program TextureBackgroundProgram;
+ typedef Program NonPremultipliedTextureBackgroundProgram;
// Render surface shaders.
- typedef ProgramBinding<VertexShaderPosTexTransform,
- FragmentShaderRGBATexAlpha> RenderPassProgram;
- typedef ProgramBinding<VertexShaderPosTexTransform,
- FragmentShaderRGBATexAlphaMask> RenderPassMaskProgram;
- typedef ProgramBinding<VertexShaderQuadTexTransformAA,
- FragmentShaderRGBATexAlphaAA> RenderPassProgramAA;
- typedef ProgramBinding<VertexShaderQuadTexTransformAA,
- FragmentShaderRGBATexAlphaMaskAA>
- RenderPassMaskProgramAA;
- typedef ProgramBinding<VertexShaderPosTexTransform,
- FragmentShaderRGBATexColorMatrixAlpha>
- RenderPassColorMatrixProgram;
- typedef ProgramBinding<VertexShaderQuadTexTransformAA,
- FragmentShaderRGBATexAlphaMaskColorMatrixAA>
- RenderPassMaskColorMatrixProgramAA;
- typedef ProgramBinding<VertexShaderQuadTexTransformAA,
- FragmentShaderRGBATexAlphaColorMatrixAA>
- RenderPassColorMatrixProgramAA;
- typedef ProgramBinding<VertexShaderPosTexTransform,
- FragmentShaderRGBATexAlphaMaskColorMatrix>
- RenderPassMaskColorMatrixProgram;
+ typedef Program RenderPassProgram;
+ typedef Program RenderPassMaskProgram;
+ typedef Program RenderPassProgramAA;
+ typedef Program RenderPassMaskProgramAA;
+ typedef Program RenderPassColorMatrixProgram;
+ typedef Program RenderPassMaskColorMatrixProgramAA;
+ typedef Program RenderPassColorMatrixProgramAA;
+ typedef Program RenderPassMaskColorMatrixProgram;
// Video shaders.
- typedef ProgramBinding<VertexShaderVideoTransform, FragmentShaderRGBATex>
- VideoStreamTextureProgram;
- typedef ProgramBinding<VertexShaderPosTexYUVStretchOffset,
- FragmentShaderYUVVideo> VideoYUVProgram;
+ typedef Program VideoStreamTextureProgram;
+ typedef ProgramBinding<VertexShaderBase, FragmentShaderYUVVideo>
+ VideoYUVProgram;
// Special purpose / effects shaders.
- typedef ProgramBinding<VertexShaderPos, FragmentShaderColor>
- DebugBorderProgram;
- typedef ProgramBinding<VertexShaderQuad, FragmentShaderColor>
- SolidColorProgram;
- typedef ProgramBinding<VertexShaderQuadAA, FragmentShaderColorAA>
- SolidColorProgramAA;
+ typedef Program DebugBorderProgram;
+ typedef Program SolidColorProgram;
+ typedef Program SolidColorProgramAA;
+
+ // If the requested program has not yet been initialized, this will initialize
+ // the program before returning it.
+ const Program* GetProgram(const ProgramKey& key);
+
+ // This will return nullptr if the requested program has not yet been
+ // initialized.
+ const Program* GetProgramIfInitialized(const ProgramKey& key) const;
+
+ std::unordered_map<ProgramKey, std::unique_ptr<Program>, ProgramKeyHash>
+ program_cache_;
const TileProgram* GetTileProgram(
TexCoordPrecision precision, SamplerType sampler);
@@ -426,71 +406,8 @@ class CC_EXPORT GLRenderer : public DirectRenderer {
const SolidColorProgram* GetSolidColorProgram();
const SolidColorProgramAA* GetSolidColorProgramAA();
- TileProgram
- tile_program_[LAST_TEX_COORD_PRECISION + 1][LAST_SAMPLER_TYPE + 1];
- TileProgramOpaque
- tile_program_opaque_[LAST_TEX_COORD_PRECISION + 1][LAST_SAMPLER_TYPE + 1];
- TileProgramAA
- tile_program_aa_[LAST_TEX_COORD_PRECISION + 1][LAST_SAMPLER_TYPE + 1];
- TileProgramSwizzle tile_program_swizzle_[LAST_TEX_COORD_PRECISION +
- 1][LAST_SAMPLER_TYPE + 1];
- TileProgramSwizzleOpaque
- tile_program_swizzle_opaque_[LAST_TEX_COORD_PRECISION +
- 1][LAST_SAMPLER_TYPE + 1];
- TileProgramSwizzleAA tile_program_swizzle_aa_[LAST_TEX_COORD_PRECISION +
- 1][LAST_SAMPLER_TYPE + 1];
-
- TextureProgram
- texture_program_[LAST_TEX_COORD_PRECISION + 1][LAST_SAMPLER_TYPE + 1];
- NonPremultipliedTextureProgram
- nonpremultiplied_texture_program_[LAST_TEX_COORD_PRECISION +
- 1][LAST_SAMPLER_TYPE + 1];
- TextureBackgroundProgram
- texture_background_program_[LAST_TEX_COORD_PRECISION +
- 1][LAST_SAMPLER_TYPE + 1];
- NonPremultipliedTextureBackgroundProgram
- nonpremultiplied_texture_background_program_[LAST_TEX_COORD_PRECISION +
- 1][LAST_SAMPLER_TYPE + 1];
-
- RenderPassProgram
- render_pass_program_[LAST_TEX_COORD_PRECISION + 1][LAST_BLEND_MODE + 1];
- RenderPassProgramAA render_pass_program_aa_[LAST_TEX_COORD_PRECISION +
- 1][LAST_BLEND_MODE + 1];
- RenderPassMaskProgram
- render_pass_mask_program_[LAST_TEX_COORD_PRECISION + 1]
- [LAST_SAMPLER_TYPE + 1]
- [LAST_BLEND_MODE + 1]
- [LAST_MASK_VALUE + 1];
- RenderPassMaskProgramAA
- render_pass_mask_program_aa_[LAST_TEX_COORD_PRECISION + 1]
- [LAST_SAMPLER_TYPE + 1]
- [LAST_BLEND_MODE + 1]
- [LAST_MASK_VALUE + 1];
- RenderPassColorMatrixProgram
- render_pass_color_matrix_program_[LAST_TEX_COORD_PRECISION +
- 1][LAST_BLEND_MODE + 1];
- RenderPassColorMatrixProgramAA
- render_pass_color_matrix_program_aa_[LAST_TEX_COORD_PRECISION +
- 1][LAST_BLEND_MODE + 1];
- RenderPassMaskColorMatrixProgram
- render_pass_mask_color_matrix_program_[LAST_TEX_COORD_PRECISION + 1]
- [LAST_SAMPLER_TYPE + 1]
- [LAST_BLEND_MODE + 1]
- [LAST_MASK_VALUE + 1];
- RenderPassMaskColorMatrixProgramAA
- render_pass_mask_color_matrix_program_aa_[LAST_TEX_COORD_PRECISION + 1]
- [LAST_SAMPLER_TYPE + 1]
- [LAST_BLEND_MODE + 1]
- [LAST_MASK_VALUE + 1];
-
VideoYUVProgram video_yuv_program_[LAST_TEX_COORD_PRECISION + 1]
[LAST_SAMPLER_TYPE + 1][2][2][2];
- VideoStreamTextureProgram
- video_stream_texture_program_[LAST_TEX_COORD_PRECISION + 1];
-
- DebugBorderProgram debug_border_program_;
- SolidColorProgram solid_color_program_;
- SolidColorProgramAA solid_color_program_aa_;
gpu::gles2::GLES2Interface* gl_;
gpu::ContextSupport* context_support_;
« no previous file with comments | « no previous file | cc/output/gl_renderer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698