aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2016-11-04 03:11:32 -0500
committerGitHub <noreply@github.com>2016-11-04 03:11:32 -0500
commit651e40f33eff08f836b76024b77bddc77089490c (patch)
treef66c3852464fc5f4019e6c0e708ca2f7d73d91f0
parent0c6a277b099683e8cb87630fb6483bc89ed09aa4 (diff)
parent2843f069334932dbf0b3a087fd53300f349390fb (diff)
downloadservo-651e40f33eff08f836b76024b77bddc77089490c.tar.gz
servo-651e40f33eff08f836b76024b77bddc77089490c.zip
Auto merge of #14057 - glennw:update-wr-keys, r=metajack
Update WR, add some key mappings, bind Ctrl-F12 to WR profiler. <!-- Reviewable:start --> This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/14057) <!-- Reviewable:end -->
-rw-r--r--components/compositing/compositor.rs20
-rw-r--r--components/layout/webrender_helpers.rs2
-rw-r--r--components/servo/Cargo.lock4
-rw-r--r--ports/cef/Cargo.lock4
-rw-r--r--ports/glutin/window.rs13
-rw-r--r--resources/shaders/clip_shared.glsl3
-rw-r--r--resources/shaders/prim_shared.glsl18
-rw-r--r--resources/shaders/ps_angle_gradient.vs.glsl6
-rw-r--r--resources/shaders/ps_border.vs.glsl7
-rw-r--r--resources/shaders/ps_box_shadow.vs.glsl4
-rw-r--r--resources/shaders/ps_gradient.vs.glsl5
-rw-r--r--resources/shaders/ps_gradient_clip.vs.glsl5
-rw-r--r--resources/shaders/ps_image.vs.glsl11
-rw-r--r--resources/shaders/ps_text_run.vs.glsl2
-rw-r--r--resources/shaders/shared.glsl2
15 files changed, 63 insertions, 43 deletions
diff --git a/components/compositing/compositor.rs b/components/compositing/compositor.rs
index dca6d253e56..70292acee1b 100644
--- a/components/compositing/compositor.rs
+++ b/components/compositing/compositor.rs
@@ -18,7 +18,7 @@ use gleam::gl::types::{GLint, GLsizei};
use image::{DynamicImage, ImageFormat, RgbImage};
use ipc_channel::ipc::{self, IpcSender, IpcSharedMemory};
use ipc_channel::router::ROUTER;
-use msg::constellation_msg::{Key, KeyModifiers, KeyState};
+use msg::constellation_msg::{Key, KeyModifiers, KeyState, CONTROL};
use msg::constellation_msg::{PipelineId, PipelineIndex, PipelineNamespaceId, TraversalDirection};
use net_traits::image::base::{Image, PixelFormat};
use profile_traits::mem::{self, Reporter, ReporterRequest};
@@ -1302,7 +1302,23 @@ impl<Window: WindowMethods> IOCompositor<Window> {
}
}
- fn on_key_event(&self, ch: Option<char>, key: Key, state: KeyState, modifiers: KeyModifiers) {
+ fn on_key_event(&mut self,
+ ch: Option<char>,
+ key: Key,
+ state: KeyState,
+ modifiers: KeyModifiers) {
+ // Steal a few key events for webrender debug options.
+ if modifiers.contains(CONTROL) && state == KeyState::Pressed {
+ match key {
+ Key::F12 => {
+ let profiler_enabled = self.webrender.get_profiler_enabled();
+ self.webrender.set_profiler_enabled(!profiler_enabled);
+ return;
+ }
+ _ => {}
+ }
+ }
+
let msg = ConstellationMsg::KeyEvent(ch, key, state, modifiers);
if let Err(e) = self.constellation_chan.send(msg) {
warn!("Sending key event to constellation failed ({}).", e);
diff --git a/components/layout/webrender_helpers.rs b/components/layout/webrender_helpers.rs
index d58a346867c..8d32029daa8 100644
--- a/components/layout/webrender_helpers.rs
+++ b/components/layout/webrender_helpers.rs
@@ -523,8 +523,6 @@ impl WebRenderFrameBuilder {
stacking_context: &mut webrender_traits::StackingContext)
-> DisplayListId {
let id = api.next_display_list_id();
- stacking_context.has_stacking_contexts = stacking_context.has_stacking_contexts ||
- display_list.descriptor().has_stacking_contexts;
stacking_context.display_lists.push(id);
self.display_lists.push((id, display_list));
id
diff --git a/components/servo/Cargo.lock b/components/servo/Cargo.lock
index 291bae77ee7..b39ab6cb89e 100644
--- a/components/servo/Cargo.lock
+++ b/components/servo/Cargo.lock
@@ -2762,7 +2762,7 @@ dependencies = [
[[package]]
name = "webrender"
version = "0.8.0"
-source = "git+https://github.com/servo/webrender#2be67987a0ff7bdd4820b65283e6fc1604cc301c"
+source = "git+https://github.com/servo/webrender#8b53081a3de714f8c1296e20658fabe4e75a6244"
dependencies = [
"app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"bincode 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -2787,7 +2787,7 @@ dependencies = [
[[package]]
name = "webrender_traits"
version = "0.8.0"
-source = "git+https://github.com/servo/webrender#2be67987a0ff7bdd4820b65283e6fc1604cc301c"
+source = "git+https://github.com/servo/webrender#8b53081a3de714f8c1296e20658fabe4e75a6244"
dependencies = [
"app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"byteorder 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
diff --git a/ports/cef/Cargo.lock b/ports/cef/Cargo.lock
index 6ba7b681ec4..ffedda6fa19 100644
--- a/ports/cef/Cargo.lock
+++ b/ports/cef/Cargo.lock
@@ -2620,7 +2620,7 @@ dependencies = [
[[package]]
name = "webrender"
version = "0.8.0"
-source = "git+https://github.com/servo/webrender#2be67987a0ff7bdd4820b65283e6fc1604cc301c"
+source = "git+https://github.com/servo/webrender#8b53081a3de714f8c1296e20658fabe4e75a6244"
dependencies = [
"app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"bincode 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -2645,7 +2645,7 @@ dependencies = [
[[package]]
name = "webrender_traits"
version = "0.8.0"
-source = "git+https://github.com/servo/webrender#2be67987a0ff7bdd4820b65283e6fc1604cc301c"
+source = "git+https://github.com/servo/webrender#8b53081a3de714f8c1296e20658fabe4e75a6244"
dependencies = [
"app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"byteorder 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
diff --git a/ports/glutin/window.rs b/ports/glutin/window.rs
index 082fff0bb15..f473b5915c1 100644
--- a/ports/glutin/window.rs
+++ b/ports/glutin/window.rs
@@ -703,6 +703,19 @@ impl Window {
VirtualKeyCode::Tab => Ok(Key::Tab),
VirtualKeyCode::Subtract => Ok(Key::Minus),
+ VirtualKeyCode::F1 => Ok(Key::F1),
+ VirtualKeyCode::F2 => Ok(Key::F2),
+ VirtualKeyCode::F3 => Ok(Key::F3),
+ VirtualKeyCode::F4 => Ok(Key::F4),
+ VirtualKeyCode::F5 => Ok(Key::F5),
+ VirtualKeyCode::F6 => Ok(Key::F6),
+ VirtualKeyCode::F7 => Ok(Key::F7),
+ VirtualKeyCode::F8 => Ok(Key::F8),
+ VirtualKeyCode::F9 => Ok(Key::F9),
+ VirtualKeyCode::F10 => Ok(Key::F10),
+ VirtualKeyCode::F11 => Ok(Key::F11),
+ VirtualKeyCode::F12 => Ok(Key::F12),
+
VirtualKeyCode::NavigateBackward => Ok(Key::NavigateBackward),
VirtualKeyCode::NavigateForward => Ok(Key::NavigateForward),
_ => Err(()),
diff --git a/resources/shaders/clip_shared.glsl b/resources/shaders/clip_shared.glsl
index 981ccb3020b..2c1993b1fa5 100644
--- a/resources/shaders/clip_shared.glsl
+++ b/resources/shaders/clip_shared.glsl
@@ -16,7 +16,8 @@ void write_clip(ClipInfo clip) {
clip.bottom_right.outer_inner_radius.x,
clip.bottom_left.outer_inner_radius.x);
//TODO: interpolate the final mask UV
- vClipMaskUvRect = clip.mask_info.uv_rect;
+ vec2 texture_size = textureSize(sMask, 0);
+ vClipMaskUvRect = clip.mask_info.uv_rect / texture_size.xyxy;
vClipMaskLocalRect = clip.mask_info.local_rect; //TODO: transform
}
#endif
diff --git a/resources/shaders/prim_shared.glsl b/resources/shaders/prim_shared.glsl
index c273ee1fad5..d6248030646 100644
--- a/resources/shaders/prim_shared.glsl
+++ b/resources/shaders/prim_shared.glsl
@@ -254,7 +254,8 @@ struct PrimitiveInstance {
int render_task_index;
int layer_index;
int clip_address;
- ivec3 user_data;
+ int sub_index;
+ ivec2 user_data;
};
PrimitiveInstance fetch_instance(int index) {
@@ -270,7 +271,8 @@ PrimitiveInstance fetch_instance(int index) {
pi.render_task_index = data0.z;
pi.layer_index = data0.w;
pi.clip_address = data1.x;
- pi.user_data = data1.yzw;
+ pi.sub_index = data1.y;
+ pi.user_data = data1.zw;
return pi;
}
@@ -302,7 +304,10 @@ struct Primitive {
vec4 local_clip_rect;
int prim_index;
int clip_index;
- ivec3 user_data;
+ // when sending multiple primitives of the same type (e.g. border segments)
+ // this index allows the vertex shader to recognize the difference
+ int sub_index;
+ ivec2 user_data;
};
Primitive load_primitive(int index) {
@@ -318,8 +323,9 @@ Primitive load_primitive(int index) {
prim.local_clip_rect = pg.local_clip_rect;
prim.prim_index = pi.specific_prim_index;
- prim.user_data = pi.user_data;
prim.clip_index = pi.clip_address;
+ prim.sub_index = pi.sub_index;
+ prim.user_data = pi.user_data;
return prim;
}
@@ -588,7 +594,6 @@ struct Image {
vec4 st_rect; // Location of the image texture in the texture atlas.
vec4 stretch_size_and_tile_spacing; // Size of the actual image and amount of space between
// tiled instances of this image.
- bool has_pixel_coords;
};
Image fetch_image(int index) {
@@ -599,9 +604,6 @@ Image fetch_image(int index) {
image.st_rect = texelFetchOffset(sData32, uv, 0, ivec2(0, 0));
image.stretch_size_and_tile_spacing = texelFetchOffset(sData32, uv, 0, ivec2(1, 0));
- image.has_pixel_coords = image.st_rect.z < 0.0;
- image.st_rect.z = abs(image.st_rect.z);
-
return image;
}
diff --git a/resources/shaders/ps_angle_gradient.vs.glsl b/resources/shaders/ps_angle_gradient.vs.glsl
index eda47f8b219..e1c91b544f8 100644
--- a/resources/shaders/ps_angle_gradient.vs.glsl
+++ b/resources/shaders/ps_angle_gradient.vs.glsl
@@ -12,7 +12,7 @@ void main(void) {
prim.layer,
prim.tile);
- vStopCount = int(prim.user_data.y);
+ vStopCount = int(prim.user_data.x);
vPos = vi.local_clamped_pos;
// Snap the start/end points to device pixel units.
@@ -24,10 +24,8 @@ void main(void) {
vStartPoint = floor(0.5 + gradient.start_end_point.xy * uDevicePixelRatio) / uDevicePixelRatio;
vEndPoint = floor(0.5 + gradient.start_end_point.zw * uDevicePixelRatio) / uDevicePixelRatio;
- int stop_index = int(prim.user_data.x);
-
for (int i=0 ; i < vStopCount ; ++i) {
- GradientStop stop = fetch_gradient_stop(stop_index + i);
+ GradientStop stop = fetch_gradient_stop(prim.sub_index + i);
vColors[i] = stop.color;
vOffsets[i/4][i%4] = stop.offset.x;
}
diff --git a/resources/shaders/ps_border.vs.glsl b/resources/shaders/ps_border.vs.glsl
index b20fc11662e..feafb695467 100644
--- a/resources/shaders/ps_border.vs.glsl
+++ b/resources/shaders/ps_border.vs.glsl
@@ -6,6 +6,7 @@
void main(void) {
Primitive prim = load_primitive(gl_InstanceID);
Border border = fetch_border(prim.prim_index);
+ int sub_part = prim.sub_index;
vec2 tl_outer = prim.local_rect.xy;
vec2 tl_inner = tl_outer + vec2(max(border.radii[0].x, border.widths.x),
@@ -27,7 +28,7 @@ void main(void) {
-max(border.radii[1].w, border.widths.w));
vec4 segment_rect;
- switch (prim.user_data.x) {
+ switch (sub_part) {
case PST_TOP_LEFT:
segment_rect = vec4(tl_outer, tl_inner - tl_outer);
break;
@@ -92,9 +93,6 @@ void main(void) {
vLocalRect = prim.local_rect;
#endif
- float x0, y0, x1, y1;
- int sub_part = prim.user_data.x;
-
switch (sub_part) {
case PST_LEFT:
vBorderStyle = int(border.style.x);
@@ -150,6 +148,7 @@ void main(void) {
break;
}
+ float x0, y0, x1, y1;
switch (sub_part) {
// These are the layer tile part PrimitivePart as uploaded by the tiling.rs
case PST_TOP_LEFT:
diff --git a/resources/shaders/ps_box_shadow.vs.glsl b/resources/shaders/ps_box_shadow.vs.glsl
index 930aef9062e..6b45af72d65 100644
--- a/resources/shaders/ps_box_shadow.vs.glsl
+++ b/resources/shaders/ps_box_shadow.vs.glsl
@@ -6,14 +6,14 @@
void main(void) {
Primitive prim = load_primitive(gl_InstanceID);
BoxShadow bs = fetch_boxshadow(prim.prim_index);
- vec4 segment_rect = fetch_instance_geometry(prim.user_data.x + prim.user_data.y);
+ vec4 segment_rect = fetch_instance_geometry(prim.sub_index);
VertexInfo vi = write_vertex(segment_rect,
prim.local_clip_rect,
prim.layer,
prim.tile);
- RenderTaskData child_task = fetch_render_task(prim.user_data.z);
+ RenderTaskData child_task = fetch_render_task(prim.user_data.x);
vUv.z = child_task.data1.x;
// Constant offsets to inset from bilinear filtering border.
diff --git a/resources/shaders/ps_gradient.vs.glsl b/resources/shaders/ps_gradient.vs.glsl
index 3056dec3505..a5e6bb0f3d4 100644
--- a/resources/shaders/ps_gradient.vs.glsl
+++ b/resources/shaders/ps_gradient.vs.glsl
@@ -7,9 +7,8 @@ void main(void) {
Primitive prim = load_primitive(gl_InstanceID);
Gradient gradient = fetch_gradient(prim.prim_index);
- int stop_index = prim.user_data.x + prim.user_data.y;
- GradientStop g0 = fetch_gradient_stop(stop_index + 0);
- GradientStop g1 = fetch_gradient_stop(stop_index + 1);
+ GradientStop g0 = fetch_gradient_stop(prim.sub_index + 0);
+ GradientStop g1 = fetch_gradient_stop(prim.sub_index + 1);
vec4 segment_rect;
switch (int(gradient.kind.x)) {
diff --git a/resources/shaders/ps_gradient_clip.vs.glsl b/resources/shaders/ps_gradient_clip.vs.glsl
index 0c926503259..62e7caeb7f7 100644
--- a/resources/shaders/ps_gradient_clip.vs.glsl
+++ b/resources/shaders/ps_gradient_clip.vs.glsl
@@ -7,9 +7,8 @@ void main(void) {
Primitive prim = load_primitive(gl_InstanceID);
Gradient gradient = fetch_gradient(prim.prim_index);
- int stop_index = prim.user_data.x + prim.user_data.y;
- GradientStop g0 = fetch_gradient_stop(stop_index + 0);
- GradientStop g1 = fetch_gradient_stop(stop_index + 1);
+ GradientStop g0 = fetch_gradient_stop(prim.sub_index + 0);
+ GradientStop g1 = fetch_gradient_stop(prim.sub_index + 1);
vec4 segment_rect;
switch (int(gradient.kind.x)) {
diff --git a/resources/shaders/ps_image.vs.glsl b/resources/shaders/ps_image.vs.glsl
index cb0500583a6..b4e7a3e80af 100644
--- a/resources/shaders/ps_image.vs.glsl
+++ b/resources/shaders/ps_image.vs.glsl
@@ -23,14 +23,9 @@ void main(void) {
#endif
// vUv will contain how many times this image has wrapped around the image size.
- vec2 st0 = image.st_rect.xy;
- vec2 st1 = image.st_rect.zw;
-
- if (image.has_pixel_coords) {
- vec2 texture_size = vec2(textureSize(sDiffuse, 0));
- st0 /= texture_size;
- st1 /= texture_size;
- }
+ vec2 texture_size = vec2(textureSize(sDiffuse, 0));
+ vec2 st0 = image.st_rect.xy / texture_size;
+ vec2 st1 = image.st_rect.zw / texture_size;
vTextureSize = st1 - st0;
vTextureOffset = st0;
diff --git a/resources/shaders/ps_text_run.vs.glsl b/resources/shaders/ps_text_run.vs.glsl
index aaba359966d..3a6e009447e 100644
--- a/resources/shaders/ps_text_run.vs.glsl
+++ b/resources/shaders/ps_text_run.vs.glsl
@@ -6,7 +6,7 @@
void main(void) {
Primitive prim = load_primitive(gl_InstanceID);
TextRun text = fetch_text_run(prim.prim_index);
- Glyph glyph = fetch_glyph(prim.user_data.x + prim.user_data.y);
+ Glyph glyph = fetch_glyph(prim.sub_index);
vec4 local_rect = vec4(glyph.offset.xy, (glyph.uv_rect.zw - glyph.uv_rect.xy) / uDevicePixelRatio);
#ifdef WR_FEATURE_TRANSFORM
diff --git a/resources/shaders/shared.glsl b/resources/shaders/shared.glsl
index d5202d62484..ffa16a1d770 100644
--- a/resources/shaders/shared.glsl
+++ b/resources/shaders/shared.glsl
@@ -25,7 +25,6 @@
#define varying in
// Uniform inputs
- uniform sampler2D sMask;
// Fragment shader outputs
out vec4 oFragColor;
@@ -35,6 +34,7 @@
// Shared shader uniforms
//======================================================================================
uniform sampler2D sDiffuse;
+uniform sampler2D sMask;
//======================================================================================
// Interpolator definitions