Bug 1609136 - Fix cs_border_solid attribute names r=jrmuizel
authorDzmitry Malyshau <dmalyshau@mozilla.com>
Tue, 14 Jan 2020 17:54:56 +0000
changeset 510229 5bd86c86aa88b170d7f5774a211bff47d306a174
parent 510228 c9e030967f2de8dd82a251f79c590392dae15402
child 510230 2c381bb89f530f6d45ba51e0ffeac41141f83521
push id37015
push usercbrindusan@mozilla.com
push dateWed, 15 Jan 2020 04:16:28 +0000
treeherdermozilla-central@2ee6c4c25052 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersjrmuizel
bugs1609136
milestone74.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1609136 - Fix cs_border_solid attribute names r=jrmuizel Differential Revision: https://phabricator.services.mozilla.com/D59876
gfx/wr/webrender/res/cs_border_solid.glsl
gfx/wr/webrender/src/device/gl.rs
--- a/gfx/wr/webrender/res/cs_border_solid.glsl
+++ b/gfx/wr/webrender/res/cs_border_solid.glsl
@@ -47,18 +47,18 @@ varying vec2 vPos;
 
 in vec2 aTaskOrigin;
 in vec4 aRect;
 in vec4 aColor0;
 in vec4 aColor1;
 in int aFlags;
 in vec2 aWidths;
 in vec2 aRadii;
-in vec4 aHorizontallyAdjacentCorner;
-in vec4 aVerticallyAdjacentCorner;
+in vec4 aClipParams1;
+in vec4 aClipParams2;
 
 vec2 get_outer_corner_scale(int segment) {
     vec2 p;
 
     switch (segment) {
         case SEGMENT_TOP_LEFT:
             p = vec2(0.0, 0.0);
             break;
@@ -107,26 +107,26 @@ void main(void) {
 
     vColor0 = aColor0;
     vColor1 = aColor1;
     vClipCenter_Sign = vec4(outer + clip_sign * aRadii, clip_sign);
     vClipRadii = vec4(aRadii, max(aRadii - aWidths, 0.0));
     vColorLine = vec4(outer, aWidths.y * -clip_sign.y, aWidths.x * clip_sign.x);
 
     vec2 horizontal_clip_sign = vec2(-clip_sign.x, clip_sign.y);
-    vHorizontalClipCenter_Sign = vec4(aHorizontallyAdjacentCorner.xy +
-                                      horizontal_clip_sign * aHorizontallyAdjacentCorner.zw,
+    vHorizontalClipCenter_Sign = vec4(aClipParams1.xy +
+                                      horizontal_clip_sign * aClipParams1.zw,
                                       horizontal_clip_sign);
-    vHorizontalClipRadii = aHorizontallyAdjacentCorner.zw;
+    vHorizontalClipRadii = aClipParams1.zw;
 
     vec2 vertical_clip_sign = vec2(clip_sign.x, -clip_sign.y);
-    vVerticalClipCenter_Sign = vec4(aVerticallyAdjacentCorner.xy +
-                                    vertical_clip_sign * aVerticallyAdjacentCorner.zw,
+    vVerticalClipCenter_Sign = vec4(aClipParams2.xy +
+                                    vertical_clip_sign * aClipParams2.zw,
                                     vertical_clip_sign);
-    vVerticalClipRadii = aVerticallyAdjacentCorner.zw;
+    vVerticalClipRadii = aClipParams2.zw;
 
     gl_Position = uTransform * vec4(aTaskOrigin + aRect.xy + vPos, 0.0, 1.0);
 }
 #endif
 
 #ifdef WR_FRAGMENT_SHADER
 void main(void) {
     float aa_range = compute_aa_range(vPos);
--- a/gfx/wr/webrender/src/device/gl.rs
+++ b/gfx/wr/webrender/src/device/gl.rs
@@ -1965,16 +1965,34 @@ impl Device {
 
             if self.cached_programs.is_some() {
                 self.gl.program_parameter_i(program.id, gl::PROGRAM_BINARY_RETRIEVABLE_HINT, gl::TRUE as gl::GLint);
             }
 
             // Link!
             self.gl.link_program(program.id);
 
+            if cfg!(debug_assertions) {
+                // Check that all our overrides worked
+                for (i, attr) in descriptor
+                    .vertex_attributes
+                    .iter()
+                    .chain(descriptor.instance_attributes.iter())
+                    .enumerate()
+                {
+                    //Note: we can't assert here because the driver may optimize out some of the
+                    // vertex attributes legitimately, returning their location to be -1.
+                    let location = self.gl.get_attrib_location(program.id, attr.name);
+                    if location != i as gl::GLint {
+                        warn!("Attribute {:?} is not found in the shader {}. Expected at {}, found at {}",
+                            attr, program.source_info.base_filename, i, location);
+                    }
+                }
+            }
+
             // GL recommends detaching and deleting shaders once the link
             // is complete (whether successful or not). This allows the driver
             // to free any memory associated with the parsing and compilation.
             self.gl.detach_shader(program.id, vs_id);
             self.gl.detach_shader(program.id, fs_id);
             self.gl.delete_shader(vs_id);
             self.gl.delete_shader(fs_id);