Skip to content

Use texture layers for render target allocations, remove render phases. #478

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Oct 26, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 7 additions & 5 deletions webrender/res/prim_shared.glsl
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@

#define MAX_STOPS_PER_ANGLE_GRADIENT 8

uniform sampler2DArray sCache;

#ifdef WR_VERTEX_SHADER

#define VECS_PER_LAYER 13
Expand Down Expand Up @@ -121,7 +123,7 @@ Layer fetch_layer(int index) {

struct Tile {
vec4 screen_origin_task_origin;
vec4 size;
vec4 size_target_index;
};

Tile fetch_tile(int index) {
Expand All @@ -130,7 +132,7 @@ Tile fetch_tile(int index) {
ivec2 uv = get_fetch_uv(index, VECS_PER_TILE);

tile.screen_origin_task_origin = texelFetchOffset(sRenderTasks, uv, 0, ivec2(0, 0));
tile.size = texelFetchOffset(sRenderTasks, uv, 0, ivec2(1, 0));
tile.size_target_index = texelFetchOffset(sRenderTasks, uv, 0, ivec2(1, 0));

return tile;
}
Expand Down Expand Up @@ -425,7 +427,7 @@ VertexInfo write_vertex(vec4 instance_rect,

vec2 clamped_pos = clamp(device_pos,
vec2(tile.screen_origin_task_origin.xy),
vec2(tile.screen_origin_task_origin.xy + tile.size.xy));
vec2(tile.screen_origin_task_origin.xy + tile.size_target_index.xy));

vec4 local_clamped_pos = layer.inv_transform * vec4(clamped_pos / uDevicePixelRatio, world_pos.z, 1);
local_clamped_pos.xyz /= local_clamped_pos.w;
Expand Down Expand Up @@ -479,11 +481,11 @@ TransformVertexInfo write_transform_vertex(vec4 instance_rect,

vec2 min_pos_clamped = clamp(min_pos * uDevicePixelRatio,
vec2(tile.screen_origin_task_origin.xy),
vec2(tile.screen_origin_task_origin.xy + tile.size.xy));
vec2(tile.screen_origin_task_origin.xy + tile.size_target_index.xy));

vec2 max_pos_clamped = clamp(max_pos * uDevicePixelRatio,
vec2(tile.screen_origin_task_origin.xy),
vec2(tile.screen_origin_task_origin.xy + tile.size.xy));
vec2(tile.screen_origin_task_origin.xy + tile.size_target_index.xy));

vec2 clamped_pos = mix(min_pos_clamped,
max_pos_clamped,
Expand Down
2 changes: 0 additions & 2 deletions webrender/res/ps_blend.fs.glsl
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@
* 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/. */

uniform sampler2D sCache;

vec3 rgbToHsv(vec3 c) {
float value = max(max(c.r, c.g), c.b);

Expand Down
2 changes: 1 addition & 1 deletion webrender/res/ps_blend.glsl
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@
* 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/. */

varying vec2 vUv;
varying vec3 vUv;
flat varying float vAmount;
flat varying int vOp;
9 changes: 5 additions & 4 deletions webrender/res/ps_blend.vs.glsl
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,13 @@ void main(void) {
src.screen_origin_task_origin.xy;

vec2 local_pos = mix(dest_origin,
dest_origin + src.size.xy,
dest_origin + src.size_target_index.xy,
aPosition.xy);

vec2 st0 = vec2(src.screen_origin_task_origin.zw) / 2048.0;
vec2 st1 = vec2(src.screen_origin_task_origin.zw + src.size.xy) / 2048.0;
vUv = mix(st0, st1, aPosition.xy);
vec2 texture_size = vec2(textureSize(sCache, 0));
vec2 st0 = src.screen_origin_task_origin.zw / texture_size;
vec2 st1 = (src.screen_origin_task_origin.zw + src.size_target_index.xy) / texture_size;
vUv = vec3(mix(st0, st1, aPosition.xy), src.size_target_index.z);

vOp = blend.src_id_target_id_op_amount.z;
vAmount = blend.src_id_target_id_op_amount.w / 65535.0;
Expand Down
2 changes: 0 additions & 2 deletions webrender/res/ps_composite.fs.glsl
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@
* 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/. */

uniform sampler2D sCache;

float gauss(float x, float sigma) {
if (sigma == 0.0)
return 1.0;
Expand Down
4 changes: 2 additions & 2 deletions webrender/res/ps_composite.glsl
Original file line number Diff line number Diff line change
Expand Up @@ -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/. */

varying vec2 vUv0;
varying vec2 vUv1;
varying vec3 vUv0;
varying vec3 vUv1;
flat varying vec4 vUv1Rect;
flat varying int vOp;
19 changes: 10 additions & 9 deletions webrender/res/ps_composite.vs.glsl
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,21 @@ void main(void) {
Tile dest = fetch_tile(composite.src0_src1_target_id_op.z);

vec2 local_pos = mix(dest.screen_origin_task_origin.zw,
dest.screen_origin_task_origin.zw + dest.size.xy,
dest.screen_origin_task_origin.zw + dest.size_target_index.xy,
aPosition.xy);

vec2 st0 = vec2(src0.screen_origin_task_origin.zw) / 2048.0;
vec2 st1 = vec2(src0.screen_origin_task_origin.zw + src0.size.xy) / 2048.0;
vUv0 = mix(st0, st1, aPosition.xy);
vec2 texture_size = vec2(textureSize(sCache, 0));
vec2 st0 = src0.screen_origin_task_origin.zw / texture_size;
vec2 st1 = (src0.screen_origin_task_origin.zw + src0.size_target_index.xy) / texture_size;
vUv0 = vec3(mix(st0, st1, aPosition.xy), src0.size_target_index.z);

st0 = vec2(src1.screen_origin_task_origin.zw) / 2048.0;
st1 = vec2(src1.screen_origin_task_origin.zw + src1.size.xy) / 2048.0;
st0 = vec2(src1.screen_origin_task_origin.zw) / texture_size;
st1 = vec2(src1.screen_origin_task_origin.zw + src1.size_target_index.xy) / texture_size;
vec2 local_virtual_pos = mix(dest.screen_origin_task_origin.xy,
dest.screen_origin_task_origin.xy + dest.size.xy,
dest.screen_origin_task_origin.xy + dest.size_target_index.xy,
aPosition.xy);
vec2 f = (local_virtual_pos - src1.screen_origin_task_origin.xy) / src1.size.xy;
vUv1 = mix(st0, st1, f);
vec2 f = (local_virtual_pos - src1.screen_origin_task_origin.xy) / src1.size_target_index.xy;
vUv1 = vec3(mix(st0, st1, f), src1.size_target_index.z);
vUv1Rect = vec4(st0, st1);

vOp = composite.src0_src1_target_id_op.w;
Expand Down
4 changes: 2 additions & 2 deletions webrender/src/debug_render.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

use debug_font_data;
use device::{Device, ProgramId, VAOId, TextureId, VertexFormat};
use device::{TextureFilter, VertexUsageHint};
use device::{TextureFilter, VertexUsageHint, TextureTarget};
use euclid::{Matrix4D, Point2D, Size2D, Rect};
use gleam::gl;
use internal_types::{ORTHO_NEAR_PLANE, ORTHO_FAR_PLANE, TextureSampler};
Expand Down Expand Up @@ -36,7 +36,7 @@ impl DebugRenderer {
let line_vao = device.create_vao(VertexFormat::DebugColor, None);
let tri_vao = device.create_vao(VertexFormat::DebugColor, None);

let font_texture_id = device.create_texture_ids(1)[0];
let font_texture_id = device.create_texture_ids(1, TextureTarget::Default)[0];
device.init_texture(font_texture_id,
debug_font_data::BMP_WIDTH,
debug_font_data::BMP_HEIGHT,
Expand Down
Loading