Skip to content

Commit

Permalink
Bug 1447998 - Update webrender to commit 22493328352ba432a7cd89491d81…
Browse files Browse the repository at this point in the history
…bfaa19bc1bce. r=jrmuizel

MozReview-Commit-ID: 4krUpVqWkr
  • Loading branch information
staktrace committed Mar 28, 2018
1 parent 401033b commit 6ec6ee9
Show file tree
Hide file tree
Showing 24 changed files with 1,047 additions and 1,133 deletions.
62 changes: 35 additions & 27 deletions gfx/webrender/res/cs_clip_box_shadow.glsl
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ flat varying float vLayer;
flat varying vec4 vEdge;
flat varying vec4 vUvBounds_NoClamp;
flat varying float vClipMode;
flat varying int vStretchMode;

#define MODE_STRETCH 0
#define MODE_SIMPLE 1
Expand All @@ -21,14 +20,21 @@ flat varying int vStretchMode;
struct BoxShadowData {
vec2 src_rect_size;
float clip_mode;
int stretch_mode;
int stretch_mode_x;
int stretch_mode_y;
RectWithSize dest_rect;
};

BoxShadowData fetch_data(ivec2 address) {
vec4 data[2] = fetch_from_resource_cache_2_direct(address);
RectWithSize dest_rect = RectWithSize(data[1].xy, data[1].zw);
BoxShadowData bs_data = BoxShadowData(data[0].xy, data[0].z, int(data[0].w), dest_rect);
vec4 data[3] = fetch_from_resource_cache_3_direct(address);
RectWithSize dest_rect = RectWithSize(data[2].xy, data[2].zw);
BoxShadowData bs_data = BoxShadowData(
data[0].xy,
data[0].z,
int(data[1].x),
int(data[1].y),
dest_rect
);
return bs_data;
}

Expand All @@ -46,53 +52,55 @@ void main(void) {
vLayer = res.layer;
vPos = vi.local_pos;
vClipMode = bs_data.clip_mode;
vStretchMode = bs_data.stretch_mode;

vec2 uv0 = res.uv_rect.p0;
vec2 uv1 = res.uv_rect.p1;

vec2 texture_size = vec2(textureSize(sColor0, 0));
vec2 local_pos = vPos.xy / vPos.z;

switch (bs_data.stretch_mode) {
switch (bs_data.stretch_mode_x) {
case MODE_STRETCH: {
vEdge.xy = vec2(0.5);
vEdge.zw = (bs_data.dest_rect.size / bs_data.src_rect_size) - vec2(0.5);
vUv = (local_pos - bs_data.dest_rect.p0) / bs_data.src_rect_size;
vEdge.x = 0.5;
vEdge.z = (bs_data.dest_rect.size.x / bs_data.src_rect_size.x) - 0.5;
vUv.x = (local_pos.x - bs_data.dest_rect.p0.x) / bs_data.src_rect_size.x;
break;
}
case MODE_SIMPLE:
default: {
vec2 f = (local_pos - bs_data.dest_rect.p0) / bs_data.dest_rect.size;
vUv = mix(uv0, uv1, f) / texture_size;
vEdge.xz = vec2(1.0);
vUv.x = (local_pos.x - bs_data.dest_rect.p0.x) / bs_data.dest_rect.size.x;
break;
}
}

vUvBounds = vec4(uv0 + vec2(0.5), uv1 - vec2(0.5)) / texture_size.xyxy;
vUvBounds_NoClamp = vec4(uv0, uv1) / texture_size.xyxy;
}
#endif

#ifdef WR_FRAGMENT_SHADER
void main(void) {
vec2 local_pos = vPos.xy / vPos.z;
vec2 uv;

switch (vStretchMode) {
switch (bs_data.stretch_mode_y) {
case MODE_STRETCH: {
uv = clamp(vUv.xy, vec2(0.0), vEdge.xy);
uv += max(vec2(0.0), vUv.xy - vEdge.zw);
uv = mix(vUvBounds_NoClamp.xy, vUvBounds_NoClamp.zw, uv);
vEdge.y = 0.5;
vEdge.w = (bs_data.dest_rect.size.y / bs_data.src_rect_size.y) - 0.5;
vUv.y = (local_pos.y - bs_data.dest_rect.p0.y) / bs_data.src_rect_size.y;
break;
}
case MODE_SIMPLE:
default: {
uv = vUv.xy;
vEdge.yw = vec2(1.0);
vUv.y = (local_pos.y - bs_data.dest_rect.p0.y) / bs_data.dest_rect.size.y;
break;
}
}

vUvBounds = vec4(uv0 + vec2(0.5), uv1 - vec2(0.5)) / texture_size.xyxy;
vUvBounds_NoClamp = vec4(uv0, uv1) / texture_size.xyxy;
}
#endif

#ifdef WR_FRAGMENT_SHADER
void main(void) {
vec2 local_pos = vPos.xy / vPos.z;

vec2 uv = clamp(vUv.xy, vec2(0.0), vEdge.xy);
uv += max(vec2(0.0), vUv.xy - vEdge.zw);
uv = mix(vUvBounds_NoClamp.xy, vUvBounds_NoClamp.zw, uv);
uv = clamp(uv, vUvBounds.xy, vUvBounds.zw);

float in_shadow_rect = point_inside_rect(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,10 @@
* 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/. */

#define VECS_PER_SPECIFIC_BRUSH 2
#include shared,prim_shared,clip_shared

#include shared,prim_shared,brush
varying vec3 vLocalPos;

varying vec2 vLocalPos;

flat varying vec4 vColor;
flat varying int vStyle;
flat varying float vAxisSelect;
flat varying vec4 vParams;
Expand All @@ -19,59 +16,58 @@ flat varying vec2 vLocalOrigin;
#define LINE_ORIENTATION_VERTICAL 0
#define LINE_ORIENTATION_HORIZONTAL 1

struct Line {
vec4 color;
struct LineDecorationData {
RectWithSize local_rect;
float wavyLineThickness;
float style;
float orientation;
};

Line fetch_line(int address) {
vec4 data[2] = fetch_from_resource_cache_2(address);
return Line(data[0], data[1].x, data[1].y, data[1].z);
LineDecorationData fetch_data(ivec2 address) {
vec4 data[2] = fetch_from_resource_cache_2_direct(address);
RectWithSize local_rect = RectWithSize(data[0].xy, data[0].zw);
LineDecorationData line_data = LineDecorationData(
local_rect,
data[1].x,
data[1].y,
data[1].z
);
return line_data;
}

void brush_vs(
VertexInfo vi,
int prim_address,
RectWithSize local_rect,
ivec3 user_data,
PictureTask pic_task
) {
vLocalPos = vi.local_pos;
void main(void) {
ClipMaskInstance cmi = fetch_clip_item();
ClipArea area = fetch_clip_area(cmi.render_task_address);
ClipScrollNode scroll_node = fetch_clip_scroll_node(cmi.scroll_node_id);
LineDecorationData data = fetch_data(cmi.clip_data_address);

// Note: `line` name is reserved in HLSL
Line line_prim = fetch_line(prim_address);
ClipVertexInfo vi = write_clip_tile_vertex(data.local_rect,
scroll_node,
area);

switch (int(abs(pic_task.pic_kind_and_raster_mode))) {
case PIC_TYPE_TEXT_SHADOW:
vColor = pic_task.color;
break;
default:
vColor = line_prim.color;
break;
}

vLocalPos = vi.local_pos;

vec2 pos, size;

switch (int(line_prim.orientation)) {
switch (int(data.orientation)) {
case LINE_ORIENTATION_HORIZONTAL:
vAxisSelect = 0.0;
pos = local_rect.p0;
size = local_rect.size;
pos = data.local_rect.p0;
size = data.local_rect.size;
break;
case LINE_ORIENTATION_VERTICAL:
vAxisSelect = 1.0;
pos = local_rect.p0.yx;
size = local_rect.size.yx;
pos = data.local_rect.p0.yx;
size = data.local_rect.size.yx;
break;
default:
vAxisSelect = 0.0;
pos = size = vec2(0.0);
}

vLocalOrigin = pos;
vStyle = int(line_prim.style);
vStyle = int(data.style);

switch (vStyle) {
case LINE_STYLE_SOLID: {
Expand All @@ -98,7 +94,7 @@ void brush_vs(
}
case LINE_STYLE_WAVY: {
// This logic copied from gecko to get the same results
float line_thickness = max(line_prim.wavyLineThickness, 1.0);
float line_thickness = max(data.wavyLineThickness, 1.0);
// Difference in height between peaks and troughs
// (and since slopes are 45 degrees, the length of each slope)
float slope_length = size.y - line_thickness;
Expand All @@ -121,9 +117,9 @@ void brush_vs(

#define MAGIC_WAVY_LINE_AA_SNAP 0.5

vec4 brush_fs() {
void main(void) {
// Find the appropriate distance to apply the step over.
vec2 local_pos = vLocalPos;
vec2 local_pos = vLocalPos.xy / vLocalPos.z;
float aa_range = compute_aa_range(local_pos);
float alpha = 1.0;

Expand Down Expand Up @@ -200,6 +196,6 @@ vec4 brush_fs() {
default: break;
}

return vColor * alpha;
oFragColor = vec4(alpha);
}
#endif
13 changes: 3 additions & 10 deletions gfx/webrender/res/prim_shared.glsl
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ vec4[2] fetch_from_resource_cache_2(int address) {

#define VECS_PER_CLIP_SCROLL_NODE 9
#define VECS_PER_LOCAL_CLIP_RECT 1
#define VECS_PER_RENDER_TASK 3
#define VECS_PER_RENDER_TASK 2
#define VECS_PER_PRIM_HEADER 2
#define VECS_PER_TEXT_RUN 3
#define VECS_PER_GRADIENT_STOP 2
Expand Down Expand Up @@ -203,15 +203,13 @@ struct RenderTaskCommonData {
struct RenderTaskData {
RenderTaskCommonData common_data;
vec3 data1;
vec4 data2;
};

RenderTaskData fetch_render_task_data(int index) {
ivec2 uv = get_fetch_uv(index, VECS_PER_RENDER_TASK);

vec4 texel0 = TEXEL_FETCH(sRenderTasks, uv, 0, ivec2(0, 0));
vec4 texel1 = TEXEL_FETCH(sRenderTasks, uv, 0, ivec2(1, 0));
vec4 texel2 = TEXEL_FETCH(sRenderTasks, uv, 0, ivec2(2, 0));

RectWithSize task_rect = RectWithSize(
texel0.xy,
Expand All @@ -225,8 +223,7 @@ RenderTaskData fetch_render_task_data(int index) {

RenderTaskData data = RenderTaskData(
common_data,
texel1.yzw,
texel2
texel1.yzw
);

return data;
Expand Down Expand Up @@ -262,18 +259,14 @@ RenderTaskCommonData fetch_render_task_common_data(int index) {
struct PictureTask {
RenderTaskCommonData common_data;
vec2 content_origin;
float pic_kind_and_raster_mode;
vec4 color;
};

PictureTask fetch_picture_task(int address) {
RenderTaskData task_data = fetch_render_task_data(address);

PictureTask task = PictureTask(
task_data.common_data,
task_data.data1.xy,
task_data.data1.z,
task_data.data2
task_data.data1.xy
);

return task;
Expand Down
Loading

0 comments on commit 6ec6ee9

Please sign in to comment.