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

Unified Diff: cc/output/program_binding.h

Issue 2622053005: The great shader refactor: Merge YUV shader class (Closed)
Patch Set: Rebase 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 | « cc/output/gl_renderer_unittest.cc ('k') | cc/output/program_binding.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/output/program_binding.h
diff --git a/cc/output/program_binding.h b/cc/output/program_binding.h
index d99ec72f4b9406d8d755138d2ebe1bb7d66c47a4..a95587f8554a0e49509b2356b01d9107f3a05208 100644
--- a/cc/output/program_binding.h
+++ b/cc/output/program_binding.h
@@ -61,6 +61,7 @@ enum ProgramType {
PROGRAM_TYPE_TEXTURE,
PROGRAM_TYPE_RENDER_PASS,
PROGRAM_TYPE_VIDEO_STREAM,
+ PROGRAM_TYPE_YUV_VIDEO,
};
class CC_EXPORT ProgramKey {
@@ -89,14 +90,18 @@ class CC_EXPORT ProgramKey {
bool mask_for_background,
bool has_color_matrix);
static ProgramKey VideoStream(TexCoordPrecision precision);
+ static ProgramKey YUVVideo(TexCoordPrecision precision,
+ SamplerType sampler,
+ bool use_alpha_texture,
+ bool use_nv12,
+ bool use_color_lut);
bool operator==(const ProgramKey& other) const;
private:
ProgramKey();
friend struct ProgramKeyHash;
- template <class VertexShader, class FragmentShader>
- friend class ProgramBinding;
+ friend class Program;
ProgramType type_ = PROGRAM_TYPE_DEBUG_BORDER;
TexCoordPrecision precision_ = TEX_COORD_PRECISION_NA;
@@ -112,6 +117,10 @@ class CC_EXPORT ProgramKey {
MaskMode mask_mode_ = NO_MASK;
bool mask_for_background_ = false;
bool has_color_matrix_ = false;
+
+ bool use_alpha_texture_ = false;
+ bool use_nv12_ = false;
+ bool use_color_lut_ = false;
};
struct ProgramKeyHash {
@@ -127,14 +136,16 @@ struct ProgramKeyHash {
(static_cast<size_t>(key.has_background_color_) << 20) ^
(static_cast<size_t>(key.mask_mode_) << 21) ^
(static_cast<size_t>(key.mask_for_background_) << 22) ^
- (static_cast<size_t>(key.has_color_matrix_) << 23);
+ (static_cast<size_t>(key.has_color_matrix_) << 23) ^
+ (static_cast<size_t>(key.use_alpha_texture_) << 24) ^
+ (static_cast<size_t>(key.use_nv12_) << 25) ^
+ (static_cast<size_t>(key.use_color_lut_) << 26);
}
};
-template <class VertexShader, class FragmentShader>
-class ProgramBinding : public ProgramBindingBase {
+class Program : public ProgramBindingBase {
public:
- ProgramBinding() {}
+ Program() {}
void Initialize(ContextProvider* context_provider, const ProgramKey& key) {
// Set parameters that are common to all sub-classes.
@@ -167,29 +178,13 @@ class ProgramBinding : public ProgramBindingBase {
case PROGRAM_TYPE_VIDEO_STREAM:
InitializeVideoStreamProgram(key);
break;
+ case PROGRAM_TYPE_YUV_VIDEO:
+ InitializeYUVVideo(key);
+ break;
}
InitializeInternal(context_provider);
}
- void InitializeVideoYUV(ContextProvider* context_provider,
- TexCoordPrecision precision,
- SamplerType sampler,
- bool use_alpha_plane,
- bool use_nv12,
- bool use_color_lut) {
- vertex_shader_.tex_coord_source_ = TEX_COORD_SOURCE_ATTRIBUTE;
- vertex_shader_.has_matrix_ = true;
- vertex_shader_.is_ya_uv_ = true;
-
- fragment_shader_.use_alpha_texture_ = use_alpha_plane;
- fragment_shader_.use_nv12_ = use_nv12;
- fragment_shader_.use_color_lut_ = use_color_lut;
- fragment_shader_.tex_coord_precision_ = precision;
- fragment_shader_.sampler_type_ = sampler;
-
- InitializeInternal(context_provider);
- }
-
const VertexShader& vertex_shader() const { return vertex_shader_; }
const FragmentShader& fragment_shader() const { return fragment_shader_; }
@@ -251,6 +246,40 @@ class ProgramBinding : public ProgramBindingBase {
int color_offset_location() const {
return fragment_shader_.color_offset_location_;
}
+ int y_texture_location() const {
+ return fragment_shader_.y_texture_location_;
+ }
+ int u_texture_location() const {
+ return fragment_shader_.u_texture_location_;
+ }
+ int v_texture_location() const {
+ return fragment_shader_.v_texture_location_;
+ }
+ int uv_texture_location() const {
+ return fragment_shader_.uv_texture_location_;
+ }
+ int a_texture_location() const {
+ return fragment_shader_.a_texture_location_;
+ }
+ int lut_texture_location() const {
+ return fragment_shader_.lut_texture_location_;
+ }
+ int yuv_matrix_location() const {
+ return fragment_shader_.yuv_matrix_location_;
+ }
+ int yuv_adj_location() const { return fragment_shader_.yuv_adj_location_; }
+ int ya_clamp_rect_location() const {
+ return fragment_shader_.ya_clamp_rect_location_;
+ }
+ int uv_clamp_rect_location() const {
+ return fragment_shader_.uv_clamp_rect_location_;
+ }
+ int resource_multiplier_location() const {
+ return fragment_shader_.resource_multiplier_location_;
+ }
+ int resource_offset_location() const {
+ return fragment_shader_.resource_offset_location_;
+ }
private:
void InitializeDebugBorderProgram() {
@@ -346,10 +375,18 @@ class ProgramBinding : public ProgramBindingBase {
vertex_shader_.tex_coord_source_ = TEX_COORD_SOURCE_ATTRIBUTE;
vertex_shader_.tex_coord_transform_ = TEX_COORD_TRANSFORM_MATRIX;
vertex_shader_.has_matrix_ = true;
+ DCHECK_EQ(key.sampler_, SAMPLER_TYPE_EXTERNAL_OES);
+ }
+
+ void InitializeYUVVideo(const ProgramKey& key) {
+ vertex_shader_.tex_coord_source_ = TEX_COORD_SOURCE_ATTRIBUTE;
+ vertex_shader_.has_matrix_ = true;
+ vertex_shader_.is_ya_uv_ = true;
- fragment_shader_.tex_coord_precision_ = key.precision_;
- fragment_shader_.sampler_type_ = SAMPLER_TYPE_EXTERNAL_OES;
- fragment_shader_.frag_color_mode_ = FRAG_COLOR_MODE_DEFAULT;
+ fragment_shader_.input_color_type_ = INPUT_COLOR_SOURCE_YUV_TEXTURES;
+ fragment_shader_.use_alpha_texture_ = key.use_alpha_texture_;
+ fragment_shader_.use_nv12_ = key.use_nv12_;
+ fragment_shader_.use_color_lut_ = key.use_color_lut_;
}
void InitializeInternal(ContextProvider* context_provider) {
@@ -384,11 +421,9 @@ class ProgramBinding : public ProgramBindingBase {
VertexShader vertex_shader_;
FragmentShader fragment_shader_;
- DISALLOW_COPY_AND_ASSIGN(ProgramBinding);
+ DISALLOW_COPY_AND_ASSIGN(Program);
};
-typedef ProgramBinding<VertexShaderBase, FragmentShaderBase> Program;
-
} // namespace cc
#endif // CC_OUTPUT_PROGRAM_BINDING_H_
« no previous file with comments | « cc/output/gl_renderer_unittest.cc ('k') | cc/output/program_binding.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698