mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-21 01:05:45 +00:00
Bug 1594091 - Unify text and brush instance attribute decoding. r=gw
Depends on D51883 Differential Revision: https://phabricator.services.mozilla.com/D51884 --HG-- extra : moz-landing-system : lando
This commit is contained in:
parent
eff2972112
commit
9393a43660
@ -29,25 +29,21 @@ void brush_vs(
|
||||
|
||||
void main(void) {
|
||||
// Load the brush instance from vertex attributes.
|
||||
int prim_header_address = aData.x;
|
||||
int render_task_index = aData.y >> 16;
|
||||
int clip_address = aData.y & 0xffff;
|
||||
int segment_index = aData.z & 0xffff;
|
||||
int edge_flags = (aData.z >> 16) & 0xff;
|
||||
int brush_flags = (aData.z >> 24) & 0xff;
|
||||
int segment_user_data = aData.w;
|
||||
PrimitiveHeader ph = fetch_prim_header(prim_header_address);
|
||||
Instance instance = decode_instance_attributes();
|
||||
int edge_flags = (instance.flags >> 16) & 0xff;
|
||||
int brush_flags = (instance.flags >> 24) & 0xff;
|
||||
PrimitiveHeader ph = fetch_prim_header(instance.prim_header_address);
|
||||
|
||||
// Fetch the segment of this brush primitive we are drawing.
|
||||
vec4 segment_data;
|
||||
RectWithSize segment_rect;
|
||||
if (segment_index == INVALID_SEGMENT_INDEX) {
|
||||
if (instance.segment_index == INVALID_SEGMENT_INDEX) {
|
||||
segment_rect = ph.local_rect;
|
||||
segment_data = vec4(0.0);
|
||||
} else {
|
||||
int segment_address = ph.specific_prim_address +
|
||||
VECS_PER_SPECIFIC_BRUSH +
|
||||
segment_index * VECS_PER_SEGMENT;
|
||||
instance.segment_index * VECS_PER_SEGMENT;
|
||||
|
||||
vec4[2] segment_info = fetch_from_gpu_cache_2(segment_address);
|
||||
segment_rect = RectWithSize(segment_info[0].xy, segment_info[0].zw);
|
||||
@ -58,8 +54,8 @@ void main(void) {
|
||||
VertexInfo vi;
|
||||
|
||||
// Fetch the dynamic picture that we are drawing on.
|
||||
PictureTask pic_task = fetch_picture_task(render_task_index);
|
||||
ClipArea clip_area = fetch_clip_area(clip_address);
|
||||
PictureTask pic_task = fetch_picture_task(instance.picture_task_address);
|
||||
ClipArea clip_area = fetch_clip_area(instance.clip_address);
|
||||
|
||||
Transform transform = fetch_transform(ph.transform_id);
|
||||
|
||||
@ -117,7 +113,7 @@ void main(void) {
|
||||
ph.local_rect,
|
||||
segment_rect,
|
||||
ph.user_data,
|
||||
segment_user_data,
|
||||
instance.user_data,
|
||||
transform.m,
|
||||
pic_task,
|
||||
brush_flags,
|
||||
|
@ -50,6 +50,29 @@ in ivec4 aData;
|
||||
#define VECS_PER_PRIM_HEADER_F 2U
|
||||
#define VECS_PER_PRIM_HEADER_I 2U
|
||||
|
||||
struct Instance
|
||||
{
|
||||
int prim_header_address;
|
||||
int picture_task_address;
|
||||
int clip_address;
|
||||
int segment_index;
|
||||
int flags;
|
||||
int user_data;
|
||||
};
|
||||
|
||||
Instance decode_instance_attributes() {
|
||||
Instance instance;
|
||||
|
||||
instance.prim_header_address = aData.x;
|
||||
instance.picture_task_address = aData.y >> 16;
|
||||
instance.clip_address = aData.y & 0xffff;
|
||||
instance.segment_index = aData.z & 0xffff;
|
||||
instance.flags = aData.z & 0xffff0000;
|
||||
instance.user_data = aData.w;
|
||||
|
||||
return instance;
|
||||
}
|
||||
|
||||
struct PrimitiveHeader {
|
||||
RectWithSize local_rect;
|
||||
RectWithSize local_clip_rect;
|
||||
|
@ -174,19 +174,17 @@ VertexInfo write_text_vertex(RectWithSize local_clip_rect,
|
||||
}
|
||||
|
||||
void main(void) {
|
||||
int prim_header_address = aData.x;
|
||||
int render_task_index = aData.y >> 16;
|
||||
int clip_address = aData.y & 0xffff;
|
||||
int glyph_index = aData.z & 0xffff;
|
||||
int subpx_dir = (aData.z >> 24) & 0xff;
|
||||
int color_mode = (aData.z >> 16) & 0xff;
|
||||
int resource_address = aData.w;
|
||||
Instance instance = decode_instance_attributes();
|
||||
|
||||
int glyph_index = instance.segment_index;
|
||||
int subpx_dir = (instance.flags >> 24) & 0xff;
|
||||
int color_mode = (instance.flags >> 16) & 0xff;
|
||||
int resource_address = instance.user_data;
|
||||
|
||||
PrimitiveHeader ph = fetch_prim_header(prim_header_address);
|
||||
PrimitiveHeader ph = fetch_prim_header(instance.prim_header_address);
|
||||
Transform transform = fetch_transform(ph.transform_id);
|
||||
ClipArea clip_area = fetch_clip_area(clip_address);
|
||||
PictureTask task = fetch_picture_task(render_task_index);
|
||||
ClipArea clip_area = fetch_clip_area(instance.clip_address);
|
||||
PictureTask task = fetch_picture_task(instance.picture_task_address);
|
||||
|
||||
int raster_space = ph.user_data.w;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user