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

Unified Diff: cc/output/shader.cc

Issue 1852923002: Enable sampling from DXGI NV12 formats in GLRenderer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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/shader.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/output/shader.cc
diff --git a/cc/output/shader.cc b/cc/output/shader.cc
index 75cac6cbfd61f1c35250ab96e70b822eb621a04a..2adc9a7e1fd7247290d63a41d6fb78a3bbac4b5a 100644
--- a/cc/output/shader.cc
+++ b/cc/output/shader.cc
@@ -2092,6 +2092,72 @@ std::string FragmentShaderYUVVideo::GetShaderBody() {
});
}
+FragmentShaderNV12Video::FragmentShaderNV12Video()
+ : y_texture_location_(-1),
+ uv_texture_location_(-1),
+ alpha_location_(-1),
+ yuv_matrix_location_(-1),
+ yuv_adj_location_(-1),
+ ya_clamp_rect_location_(-1),
+ uv_clamp_rect_location_(-1) {}
+
+void FragmentShaderNV12Video::Init(GLES2Interface* context,
+ unsigned program,
+ int* base_uniform_index) {
+ static const char* uniforms[] = {
+ "y_texture", "uv_texture", "alpha", "yuv_matrix",
+ "yuv_adj", "ya_clamp_rect", "uv_clamp_rect"};
+ int locations[arraysize(uniforms)];
+
+ GetProgramUniformLocations(context, program, arraysize(uniforms), uniforms,
+ locations, base_uniform_index);
+ y_texture_location_ = locations[0];
+ uv_texture_location_ = locations[1];
+ alpha_location_ = locations[2];
+ yuv_matrix_location_ = locations[3];
+ yuv_adj_location_ = locations[4];
+ ya_clamp_rect_location_ = locations[5];
+ uv_clamp_rect_location_ = locations[6];
+}
+
+std::string FragmentShaderNV12Video::GetShaderString(
+ TexCoordPrecision precision,
+ SamplerType sampler) const {
+ return FRAGMENT_SHADER(GetShaderHead(), GetShaderBody());
+}
+
+std::string FragmentShaderNV12Video::GetShaderHead() {
+ return SHADER0([]() {
+ precision mediump float;
+ precision mediump int;
+ varying TexCoordPrecision vec2 v_yaTexCoord;
+ varying TexCoordPrecision vec2 v_uvTexCoord;
+ uniform SamplerType y_texture;
+ uniform SamplerType uv_texture;
+ uniform float alpha;
+ uniform vec3 yuv_adj;
+ uniform mat3 yuv_matrix;
+ uniform vec4 ya_clamp_rect;
+ uniform vec4 uv_clamp_rect;
+ });
+}
+
+std::string FragmentShaderNV12Video::GetShaderBody() {
+ return SHADER0([]() {
+ void main() {
+ vec2 ya_clamped =
+ max(ya_clamp_rect.xy, min(ya_clamp_rect.zw, v_yaTexCoord));
+ float y_raw = TextureLookup(y_texture, ya_clamped).x;
+ vec2 uv_clamped =
+ max(uv_clamp_rect.xy, min(uv_clamp_rect.zw, v_uvTexCoord));
+ vec2 uv_unsigned = TextureLookup(uv_texture, uv_clamped).xy;
+ vec3 yuv = vec3(y_raw, uv_unsigned) + yuv_adj;
+ vec3 rgb = yuv_matrix * yuv;
+ gl_FragColor = vec4(rgb, 1.0) * alpha;
+ }
+ });
+}
+
FragmentShaderYUVAVideo::FragmentShaderYUVAVideo()
: y_texture_location_(-1),
u_texture_location_(-1),
« no previous file with comments | « cc/output/shader.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698