summaryrefslogtreecommitdiffstats
path: root/gfx/wr/webrender/res/render_task.glsl
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/wr/webrender/res/render_task.glsl')
-rw-r--r--gfx/wr/webrender/res/render_task.glsl118
1 files changed, 118 insertions, 0 deletions
diff --git a/gfx/wr/webrender/res/render_task.glsl b/gfx/wr/webrender/res/render_task.glsl
new file mode 100644
index 0000000000..54582cd9ad
--- /dev/null
+++ b/gfx/wr/webrender/res/render_task.glsl
@@ -0,0 +1,118 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * 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/. */
+
+
+#ifdef WR_VERTEX_SHADER
+#define VECS_PER_RENDER_TASK 2U
+
+uniform HIGHP_SAMPLER_FLOAT sampler2D sRenderTasks;
+
+struct RenderTaskCommonData {
+ RectWithSize task_rect;
+ float texture_layer_index;
+};
+
+struct RenderTaskData {
+ RenderTaskCommonData common_data;
+ vec3 user_data;
+};
+
+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));
+
+ RectWithSize task_rect = RectWithSize(
+ texel0.xy,
+ texel0.zw
+ );
+
+ RenderTaskCommonData common_data = RenderTaskCommonData(
+ task_rect,
+ texel1.x
+ );
+
+ RenderTaskData data = RenderTaskData(
+ common_data,
+ texel1.yzw
+ );
+
+ return data;
+}
+
+RenderTaskCommonData fetch_render_task_common_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));
+
+ RectWithSize task_rect = RectWithSize(
+ texel0.xy,
+ texel0.zw
+ );
+
+ RenderTaskCommonData data = RenderTaskCommonData(
+ task_rect,
+ texel1.x
+ );
+
+ return data;
+}
+
+#define PIC_TYPE_IMAGE 1
+#define PIC_TYPE_TEXT_SHADOW 2
+
+/*
+ The dynamic picture that this brush exists on. Right now, it
+ contains minimal information. In the future, it will describe
+ the transform mode of primitives on this picture, among other things.
+ */
+struct PictureTask {
+ RenderTaskCommonData common_data;
+ float device_pixel_scale;
+ vec2 content_origin;
+};
+
+PictureTask fetch_picture_task(int address) {
+ RenderTaskData task_data = fetch_render_task_data(address);
+
+ PictureTask task = PictureTask(
+ task_data.common_data,
+ task_data.user_data.x,
+ task_data.user_data.yz
+ );
+
+ return task;
+}
+
+#define CLIP_TASK_EMPTY 0x7FFF
+
+struct ClipArea {
+ RenderTaskCommonData common_data;
+ float device_pixel_scale;
+ vec2 screen_origin;
+};
+
+ClipArea fetch_clip_area(int index) {
+ ClipArea area;
+
+ if (index >= CLIP_TASK_EMPTY) {
+ RectWithSize rect = RectWithSize(vec2(0.0), vec2(0.0));
+
+ area.common_data = RenderTaskCommonData(rect, 0.0);
+ area.device_pixel_scale = 0.0;
+ area.screen_origin = vec2(0.0);
+ } else {
+ RenderTaskData task_data = fetch_render_task_data(index);
+
+ area.common_data = task_data.common_data;
+ area.device_pixel_scale = task_data.user_data.x;
+ area.screen_origin = task_data.user_data.yz;
+ }
+
+ return area;
+}
+
+#endif //WR_VERTEX_SHADER