From 4a6c020317ed6e296e0e49387519a276afbe38d7 Mon Sep 17 00:00:00 2001 From: Dan Glastonbury Date: Thu, 6 Sep 2018 13:21:15 +1000 Subject: [PATCH] add ANGLE specific removals of flat varying --- webrender/res/base.glsl | 16 ++++++++++++++++ webrender/res/brush_blend.glsl | 10 +++++----- webrender/res/brush_image.glsl | 10 +++++----- webrender/res/brush_linear_gradient.glsl | 12 ++++++------ webrender/res/brush_mix_blend.glsl | 2 +- webrender/res/brush_radial_gradient.glsl | 14 +++++++------- webrender/res/brush_solid.glsl | 2 +- webrender/res/brush_yuv_image.glsl | 12 ++++++------ webrender/res/cs_blur.glsl | 8 ++++---- webrender/res/cs_border_segment.glsl | 24 ++++++++++++------------ webrender/res/cs_clip_box_shadow.glsl | 10 +++++----- webrender/res/cs_clip_image.glsl | 6 +++--- webrender/res/cs_clip_line.glsl | 8 ++++---- webrender/res/cs_clip_rectangle.glsl | 10 +++++----- webrender/res/prim_shared.glsl | 2 +- webrender/res/ps_split_composite.glsl | 4 ++-- webrender/res/ps_text_run.glsl | 6 +++--- webrender/res/transform.glsl | 2 +- webrender/src/device/gl.rs | 13 ++++++++++++- 19 files changed, 99 insertions(+), 72 deletions(-) diff --git a/webrender/res/base.glsl b/webrender/res/base.glsl index 22b17144bf..f59f1dea16 100644 --- a/webrender/res/base.glsl +++ b/webrender/res/base.glsl @@ -35,3 +35,19 @@ precision highp float; #define varying in #endif + +#ifdef WR_RENDERER_ANGLE + #ifdef WR_VERTEX_SHADER + #define flat_varying out + #endif + #ifdef WR_FRAGMENT_SHADER + #define flat_varying in + #endif +#else // !WR_RENDERER_ANGLE + #ifdef WR_VERTEX_SHADER + #define flat_varying flat out + #endif + #ifdef WR_FRAGMENT_SHADER + #define flat_varying flat in + #endif +#endif diff --git a/webrender/res/brush_blend.glsl b/webrender/res/brush_blend.glsl index 5445e7d70d..1ce7e106ec 100644 --- a/webrender/res/brush_blend.glsl +++ b/webrender/res/brush_blend.glsl @@ -8,11 +8,11 @@ varying vec3 vUv; -flat varying float vAmount; -flat varying int vOp; -flat varying mat3 vColorMat; -flat varying vec3 vColorOffset; -flat varying vec4 vUvClipBounds; +flat_varying float vAmount; +flat_varying int vOp; +flat_varying mat3 vColorMat; +flat_varying vec3 vColorOffset; +flat_varying vec4 vUvClipBounds; #ifdef WR_VERTEX_SHADER diff --git a/webrender/res/brush_image.glsl b/webrender/res/brush_image.glsl index 1ebc5a1da8..cf1ac50d34 100644 --- a/webrender/res/brush_image.glsl +++ b/webrender/res/brush_image.glsl @@ -14,15 +14,15 @@ varying vec2 vLocalPos; // W is 1 when perspective interpolation is enabled. varying vec4 vUv; // Normalized bounds of the source image in the texture. -flat varying vec4 vUvBounds; +flat_varying vec4 vUvBounds; // Normalized bounds of the source image in the texture, adjusted to avoid // sampling artifacts. -flat varying vec4 vUvSampleBounds; +flat_varying vec4 vUvSampleBounds; #ifdef WR_FEATURE_ALPHA_PASS -flat varying vec4 vColor; -flat varying vec2 vMaskSwizzle; -flat varying vec2 vTileRepeat; +flat_varying vec4 vColor; +flat_varying vec2 vMaskSwizzle; +flat_varying vec2 vTileRepeat; #endif #ifdef WR_VERTEX_SHADER diff --git a/webrender/res/brush_linear_gradient.glsl b/webrender/res/brush_linear_gradient.glsl index 7499c71715..26e8d7d403 100644 --- a/webrender/res/brush_linear_gradient.glsl +++ b/webrender/res/brush_linear_gradient.glsl @@ -6,21 +6,21 @@ #include shared,prim_shared,brush -flat varying int vGradientAddress; -flat varying float vGradientRepeat; +flat_varying int vGradientAddress; +flat_varying float vGradientRepeat; -flat varying vec2 vScaledDir; -flat varying vec2 vStartPoint; +flat_varying vec2 vScaledDir; +flat_varying vec2 vStartPoint; // Size of the gradient pattern's rectangle, used to compute horizontal and vertical // repetitions. Not to be confused with another kind of repetition of the pattern // which happens along the gradient stops. -flat varying vec2 vRepeatedSize; +flat_varying vec2 vRepeatedSize; varying vec2 vPos; #ifdef WR_FEATURE_ALPHA_PASS varying vec2 vLocalPos; -flat varying vec2 vTileRepeat; +flat_varying vec2 vTileRepeat; #endif #ifdef WR_VERTEX_SHADER diff --git a/webrender/res/brush_mix_blend.glsl b/webrender/res/brush_mix_blend.glsl index aec357a54b..61cc1dc548 100644 --- a/webrender/res/brush_mix_blend.glsl +++ b/webrender/res/brush_mix_blend.glsl @@ -8,7 +8,7 @@ varying vec3 vSrcUv; varying vec3 vBackdropUv; -flat varying int vOp; +flat_varying int vOp; #ifdef WR_VERTEX_SHADER diff --git a/webrender/res/brush_radial_gradient.glsl b/webrender/res/brush_radial_gradient.glsl index 6169213bc1..0b19eee54d 100644 --- a/webrender/res/brush_radial_gradient.glsl +++ b/webrender/res/brush_radial_gradient.glsl @@ -6,19 +6,19 @@ #include shared,prim_shared,brush -flat varying int vGradientAddress; -flat varying float vGradientRepeat; +flat_varying int vGradientAddress; +flat_varying float vGradientRepeat; -flat varying vec2 vCenter; -flat varying float vStartRadius; -flat varying float vEndRadius; +flat_varying vec2 vCenter; +flat_varying float vStartRadius; +flat_varying float vEndRadius; varying vec2 vPos; -flat varying vec2 vRepeatedSize; +flat_varying vec2 vRepeatedSize; #ifdef WR_FEATURE_ALPHA_PASS varying vec2 vLocalPos; -flat varying vec2 vTileRepeat; +flat_varying vec2 vTileRepeat; #endif #ifdef WR_VERTEX_SHADER diff --git a/webrender/res/brush_solid.glsl b/webrender/res/brush_solid.glsl index 6b66282a4c..8736228ad2 100644 --- a/webrender/res/brush_solid.glsl +++ b/webrender/res/brush_solid.glsl @@ -6,7 +6,7 @@ #include shared,prim_shared,brush -flat varying vec4 vColor; +flat_varying vec4 vColor; #ifdef WR_FEATURE_ALPHA_PASS varying vec2 vLocalPos; diff --git a/webrender/res/brush_yuv_image.glsl b/webrender/res/brush_yuv_image.glsl index 88093c3a84..6cfcdc6e7a 100644 --- a/webrender/res/brush_yuv_image.glsl +++ b/webrender/res/brush_yuv_image.glsl @@ -23,22 +23,22 @@ varying vec2 vLocalPos; #if defined (WR_FEATURE_YUV_PLANAR) varying vec3 vUv_Y; - flat varying vec4 vUvBounds_Y; + flat_varying vec4 vUvBounds_Y; varying vec3 vUv_U; - flat varying vec4 vUvBounds_U; + flat_varying vec4 vUvBounds_U; varying vec3 vUv_V; - flat varying vec4 vUvBounds_V; + flat_varying vec4 vUvBounds_V; #elif defined (WR_FEATURE_YUV_NV12) varying vec3 vUv_Y; - flat varying vec4 vUvBounds_Y; + flat_varying vec4 vUvBounds_Y; varying vec3 vUv_UV; - flat varying vec4 vUvBounds_UV; + flat_varying vec4 vUvBounds_UV; #elif defined (WR_FEATURE_YUV_INTERLEAVED) varying vec3 vUv_YUV; - flat varying vec4 vUvBounds_YUV; + flat_varying vec4 vUvBounds_YUV; #endif #ifdef WR_FEATURE_TEXTURE_RECT diff --git a/webrender/res/cs_blur.glsl b/webrender/res/cs_blur.glsl index f089f913d8..9ad9a801a1 100644 --- a/webrender/res/cs_blur.glsl +++ b/webrender/res/cs_blur.glsl @@ -5,10 +5,10 @@ #include shared,prim_shared varying vec3 vUv; -flat varying vec4 vUvRect; -flat varying vec2 vOffsetScale; -flat varying float vSigma; -flat varying int vBlurRadius; +flat_varying vec4 vUvRect; +flat_varying vec2 vOffsetScale; +flat_varying float vSigma; +flat_varying int vBlurRadius; #ifdef WR_VERTEX_SHADER // Applies a separable gaussian blur in one direction, as specified diff --git a/webrender/res/cs_border_segment.glsl b/webrender/res/cs_border_segment.glsl index 7a6de880ba..e709acd93b 100644 --- a/webrender/res/cs_border_segment.glsl +++ b/webrender/res/cs_border_segment.glsl @@ -6,36 +6,36 @@ // For edges, the colors are the same. For corners, these // are the colors of each edge making up the corner. -flat varying vec4 vColor00; -flat varying vec4 vColor01; -flat varying vec4 vColor10; -flat varying vec4 vColor11; +flat_varying vec4 vColor00; +flat_varying vec4 vColor01; +flat_varying vec4 vColor10; +flat_varying vec4 vColor11; // A point + tangent defining the line where the edge // transition occurs. Used for corners only. -flat varying vec4 vColorLine; +flat_varying vec4 vColorLine; // x = segment, y = styles, z = edge axes, w = clip mode -flat varying ivec4 vConfig; +flat_varying ivec4 vConfig; // xy = Local space position of the clip center. // zw = Scale the rect origin by this to get the outer // corner from the segment rectangle. -flat varying vec4 vClipCenter_Sign; +flat_varying vec4 vClipCenter_Sign; // An outer and inner elliptical radii for border // corner clipping. -flat varying vec4 vClipRadii; +flat_varying vec4 vClipRadii; // Reference point for determine edge clip lines. -flat varying vec4 vEdgeReference; +flat_varying vec4 vEdgeReference; // Stores widths/2 and widths/3 to save doing this in FS. -flat varying vec4 vPartialWidths; +flat_varying vec4 vPartialWidths; // Clipping parameters for dot or dash. -flat varying vec4 vClipParams1; -flat varying vec4 vClipParams2; +flat_varying vec4 vClipParams1; +flat_varying vec4 vClipParams2; // Local space position varying vec2 vPos; diff --git a/webrender/res/cs_clip_box_shadow.glsl b/webrender/res/cs_clip_box_shadow.glsl index b431e4262c..b4def6d6bc 100644 --- a/webrender/res/cs_clip_box_shadow.glsl +++ b/webrender/res/cs_clip_box_shadow.glsl @@ -6,11 +6,11 @@ varying vec3 vPos; varying vec2 vUv; -flat varying vec4 vUvBounds; -flat varying float vLayer; -flat varying vec4 vEdge; -flat varying vec4 vUvBounds_NoClamp; -flat varying float vClipMode; +flat_varying vec4 vUvBounds; +flat_varying float vLayer; +flat_varying vec4 vEdge; +flat_varying vec4 vUvBounds_NoClamp; +flat_varying float vClipMode; #define MODE_STRETCH 0 #define MODE_SIMPLE 1 diff --git a/webrender/res/cs_clip_image.glsl b/webrender/res/cs_clip_image.glsl index 5c9221c12c..5c328e65ed 100644 --- a/webrender/res/cs_clip_image.glsl +++ b/webrender/res/cs_clip_image.glsl @@ -7,9 +7,9 @@ varying vec3 vPos; varying vec3 vClipMaskImageUv; -flat varying vec4 vClipMaskUvRect; -flat varying vec4 vClipMaskUvInnerRect; -flat varying float vLayer; +flat_varying vec4 vClipMaskUvRect; +flat_varying vec4 vClipMaskUvInnerRect; +flat_varying float vLayer; #ifdef WR_VERTEX_SHADER struct ImageMaskData { diff --git a/webrender/res/cs_clip_line.glsl b/webrender/res/cs_clip_line.glsl index 16091767d9..58bb731070 100644 --- a/webrender/res/cs_clip_line.glsl +++ b/webrender/res/cs_clip_line.glsl @@ -11,10 +11,10 @@ varying vec3 vLocalPos; -flat varying int vStyle; -flat varying float vAxisSelect; -flat varying vec4 vParams; -flat varying vec2 vLocalOrigin; +flat_varying int vStyle; +flat_varying float vAxisSelect; +flat_varying vec4 vParams; +flat_varying vec2 vLocalOrigin; #ifdef WR_VERTEX_SHADER diff --git a/webrender/res/cs_clip_rectangle.glsl b/webrender/res/cs_clip_rectangle.glsl index 410ded9bbf..888a2eead0 100644 --- a/webrender/res/cs_clip_rectangle.glsl +++ b/webrender/res/cs_clip_rectangle.glsl @@ -5,11 +5,11 @@ #include shared,clip_shared,ellipse varying vec3 vPos; -flat varying float vClipMode; -flat varying vec4 vClipCenter_Radius_TL; -flat varying vec4 vClipCenter_Radius_TR; -flat varying vec4 vClipCenter_Radius_BL; -flat varying vec4 vClipCenter_Radius_BR; +flat_varying float vClipMode; +flat_varying vec4 vClipCenter_Radius_TL; +flat_varying vec4 vClipCenter_Radius_TR; +flat_varying vec4 vClipCenter_Radius_BL; +flat_varying vec4 vClipCenter_Radius_BR; #ifdef WR_VERTEX_SHADER struct ClipRect { diff --git a/webrender/res/prim_shared.glsl b/webrender/res/prim_shared.glsl index 616ec34f0c..c9911498d4 100644 --- a/webrender/res/prim_shared.glsl +++ b/webrender/res/prim_shared.glsl @@ -26,7 +26,7 @@ vec2 clamp_rect(vec2 pt, RectWithSize rect) { } // TODO: convert back to RectWithEndPoint if driver issues are resolved, if ever. -flat varying vec4 vClipMaskUvBounds; +flat_varying vec4 vClipMaskUvBounds; // XY and W are homogeneous coordinates, Z is the layer index varying vec4 vClipMaskUv; diff --git a/webrender/res/ps_split_composite.glsl b/webrender/res/ps_split_composite.glsl index 2a90e9f28c..d5df3d6a38 100644 --- a/webrender/res/ps_split_composite.glsl +++ b/webrender/res/ps_split_composite.glsl @@ -5,8 +5,8 @@ #include shared,prim_shared varying vec3 vUv; -flat varying vec4 vUvTaskBounds; -flat varying vec4 vUvSampleBounds; +flat_varying vec4 vUvTaskBounds; +flat_varying vec4 vUvSampleBounds; #ifdef WR_VERTEX_SHADER struct SplitGeometry { diff --git a/webrender/res/ps_text_run.glsl b/webrender/res/ps_text_run.glsl index fe53d711cc..f3be7156d5 100644 --- a/webrender/res/ps_text_run.glsl +++ b/webrender/res/ps_text_run.glsl @@ -4,10 +4,10 @@ #include shared,prim_shared -flat varying vec4 vColor; +flat_varying vec4 vColor; varying vec3 vUv; -flat varying vec4 vUvBorder; -flat varying vec2 vMaskSwizzle; +flat_varying vec4 vUvBorder; +flat_varying vec2 vMaskSwizzle; #ifdef WR_FEATURE_GLYPH_TRANSFORM varying vec4 vUvClip; diff --git a/webrender/res/transform.glsl b/webrender/res/transform.glsl index 0cb940999d..6018cc09ab 100644 --- a/webrender/res/transform.glsl +++ b/webrender/res/transform.glsl @@ -2,7 +2,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -flat varying vec4 vTransformBounds; +flat_varying vec4 vTransformBounds; #ifdef WR_VERTEX_SHADER diff --git a/webrender/src/device/gl.rs b/webrender/src/device/gl.rs index 3a115ae91c..fe42a5563c 100644 --- a/webrender/src/device/gl.rs +++ b/webrender/src/device/gl.rs @@ -54,6 +54,7 @@ const GL_FORMAT_BGRA_GLES: gl::GLuint = gl::BGRA_EXT; const SHADER_VERSION_GL: &str = "#version 150\n"; const SHADER_VERSION_GLES: &str = "#version 300 es\n"; +const SHADER_RENDERER_ANGLE: &str = "#define WR_RENDERER_ANGLE\n"; const SHADER_KIND_VERTEX: &str = "#define WR_VERTEX_SHADER\n"; const SHADER_KIND_FRAGMENT: &str = "#define WR_FRAGMENT_SHADER\n"; const SHADER_IMPORT: &str = "#include "; @@ -192,6 +193,7 @@ pub fn build_shader_strings( features: &str, base_filename: &str, override_path: &Option, + is_angle: bool, ) -> (String, String) { // Construct a list of strings to be passed to the shader compiler. let mut vs_source = String::new(); @@ -206,6 +208,12 @@ pub fn build_shader_strings( vs_source.push_str(&name_string); fs_source.push_str(&name_string); + // Define a constant dependig on where we are compiling for ANGLE or not. + if is_angle { + vs_source.push_str(SHADER_RENDERER_ANGLE); + fs_source.push_str(SHADER_RENDERER_ANGLE); + } + // Define a constant depending on whether we are compiling VS or FS. vs_source.push_str(SHADER_KIND_VERTEX); fs_source.push_str(SHADER_KIND_FRAGMENT); @@ -1418,12 +1426,15 @@ impl Device { debug_assert!(self.inside_frame); let gl_version_string = get_shader_version(&*self.gl); - + // TODO(djg): Should this be contains()? + let is_angle = self.renderer_name.starts_with("ANGLE"); + let (vs_source, fs_source) = build_shader_strings( gl_version_string, features, base_filename, &self.resource_override_path, + is_angle, ); let sources = ProgramSources::new(self.renderer_name.clone(), vs_source, fs_source);