From 90774f1f46305a91ed99b770b301aedf6688dbe0 Mon Sep 17 00:00:00 2001 From: Raph Levien Date: Mon, 7 Mar 2022 12:49:59 -0800 Subject: [PATCH] Regenerate generated shaders This just runs ninja on the piet-gpu/shaders on a Windows machine, so translated shaders match the existing pipeline. At some point, we'll rework this to reduce friction. --- piet-gpu/shader/gen/binning.msl | 10 +- piet-gpu/shader/gen/coarse.dxil | Bin 10696 -> 10776 bytes piet-gpu/shader/gen/coarse.hlsl | 478 ++++++++++++--------- piet-gpu/shader/gen/coarse.msl | 14 +- piet-gpu/shader/gen/draw_leaf.dxil | Bin 6860 -> 6988 bytes piet-gpu/shader/gen/draw_leaf.hlsl | 232 +++++++---- piet-gpu/shader/gen/kernel4.dxil | Bin 9872 -> 14236 bytes piet-gpu/shader/gen/kernel4.hlsl | 578 +++++++++++++++++++++++--- piet-gpu/shader/gen/kernel4.msl | 6 +- piet-gpu/shader/gen/kernel4_gray.dxil | Bin 9808 -> 14140 bytes piet-gpu/shader/gen/kernel4_gray.hlsl | 576 ++++++++++++++++++++++--- piet-gpu/shader/gen/kernel4_gray.msl | 171 ++++---- piet-gpu/shader/gen/kernel4_gray.spv | Bin 58196 -> 58140 bytes piet-gpu/shader/gen/tile_alloc.dxil | Bin 5048 -> 5048 bytes piet-gpu/shader/gen/tile_alloc.hlsl | 77 ++-- 15 files changed, 1607 insertions(+), 535 deletions(-) diff --git a/piet-gpu/shader/gen/binning.msl b/piet-gpu/shader/gen/binning.msl index 3bf96da..0e3b6c8 100644 --- a/piet-gpu/shader/gen/binning.msl +++ b/piet-gpu/shader/gen/binning.msl @@ -220,7 +220,7 @@ void BinInstance_write(thread const Alloc& a, thread const BinInstanceRef& ref, kernel void main0(constant uint* spvBufferSizeConstants [[buffer(25)]], device Memory& v_94 [[buffer(0)]], const device ConfigBuf& v_202 [[buffer(1)]], uint3 gl_WorkGroupID [[threadgroup_position_in_grid]], uint3 gl_LocalInvocationID [[thread_position_in_threadgroup]]) { threadgroup uint bitmaps[8][256]; - threadgroup bool sh_alloc_failed; + threadgroup short sh_alloc_failed; threadgroup uint count[8][256]; threadgroup Alloc sh_chunk_alloc[256]; constant uint& v_94BufferSize = spvBufferSizeConstants[0]; @@ -232,7 +232,7 @@ kernel void main0(constant uint* spvBufferSizeConstants [[buffer(25)]], device M } if (gl_LocalInvocationID.x == 0u) { - sh_alloc_failed = false; + sh_alloc_failed = short(false); } threadgroup_barrier(mem_flags::mem_threadgroup); uint element_ix = (my_partition * 256u) + gl_LocalInvocationID.x; @@ -331,7 +331,7 @@ kernel void main0(constant uint* spvBufferSizeConstants [[buffer(25)]], device M sh_chunk_alloc[gl_LocalInvocationID.x] = chunk_alloc; if (chunk.failed) { - sh_alloc_failed = true; + sh_alloc_failed = short(true); } } uint out_ix = (v_202.conf.bin_alloc.offset >> uint(2)) + (((my_partition * 256u) + gl_LocalInvocationID.x) * 2u); @@ -347,13 +347,13 @@ kernel void main0(constant uint* spvBufferSizeConstants [[buffer(25)]], device M write_mem(param_16, param_17, param_18, v_94, v_94BufferSize); threadgroup_barrier(mem_flags::mem_threadgroup); bool _687; - if (!sh_alloc_failed) + if (!bool(sh_alloc_failed)) { _687 = v_94.mem_error != 0u; } else { - _687 = sh_alloc_failed; + _687 = bool(sh_alloc_failed); } if (_687) { diff --git a/piet-gpu/shader/gen/coarse.dxil b/piet-gpu/shader/gen/coarse.dxil index 0599eb8f4206c5f32603d9b8a756e810417f692a..c7e16821183bf2940240eea3306260f4bc3b5772 100644 GIT binary patch delta 6356 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 B{!0J= delta 6275 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 uint(2); uint tag_and_flags = read_mem(param, param_1); - AnnotatedTag _636 = { tag_and_flags & 65535u, tag_and_flags >> uint(16) }; - return _636; + AnnotatedTag _717 = { tag_and_flags & 65535u, tag_and_flags >> uint(16) }; + return _717; } Path Path_read(Alloc a, PathRef ref) @@ -289,8 +310,8 @@ Path Path_read(Alloc a, PathRef ref) uint raw2 = read_mem(param_4, param_5); Path s; s.bbox = uint4(raw0 & 65535u, raw0 >> uint(16), raw1 & 65535u, raw1 >> uint(16)); - TileRef _734 = { raw2 }; - s.tiles = _734; + TileRef _825 = { raw2 }; + s.tiles = _825; return s; } @@ -300,11 +321,11 @@ void write_tile_alloc(uint el_ix, Alloc a) Alloc read_tile_alloc(uint el_ix, bool mem_ok) { - uint _1055; - _283.GetDimensions(_1055); - _1055 = (_1055 - 8) / 4; + uint _1169; + _308.GetDimensions(_1169); + _1169 = (_1169 - 8) / 4; uint param = 0u; - uint param_1 = uint(int(_1055) * 4); + uint param_1 = uint(int(_1169) * 4); bool param_2 = mem_ok; return new_alloc(param, param_1, param_2); } @@ -318,9 +339,9 @@ Tile Tile_read(Alloc a, TileRef ref) Alloc param_2 = a; uint param_3 = ix + 1u; uint raw1 = read_mem(param_2, param_3); - TileSegRef _759 = { raw0 }; + TileSegRef _850 = { raw0 }; Tile s; - s.tile = _759; + s.tile = _850; s.backdrop = int(raw1); return s; } @@ -355,30 +376,30 @@ AnnoColor AnnoColor_read(Alloc a, AnnoColorRef ref) AnnoColor Annotated_Color_read(Alloc a, AnnotatedRef ref) { - AnnoColorRef _642 = { ref.offset + 4u }; + AnnoColorRef _723 = { ref.offset + 4u }; Alloc param = a; - AnnoColorRef param_1 = _642; + AnnoColorRef param_1 = _723; return AnnoColor_read(param, param_1); } MallocResult malloc(uint size) { - uint _289; - _283.InterlockedAdd(0, size, _289); - uint offset = _289; - uint _296; - _283.GetDimensions(_296); - _296 = (_296 - 8) / 4; + uint _314; + _308.InterlockedAdd(0, size, _314); + uint offset = _314; + uint _321; + _308.GetDimensions(_321); + _321 = (_321 - 8) / 4; MallocResult r; - r.failed = (offset + size) > uint(int(_296) * 4); + r.failed = (offset + size) > uint(int(_321) * 4); uint param = offset; uint param_1 = size; bool param_2 = !r.failed; r.alloc = new_alloc(param, param_1, param_2); if (r.failed) { - uint _318; - _283.InterlockedMax(4, 1u, _318); + uint _343; + _308.InterlockedMax(4, 1u, _343); return r; } return r; @@ -392,7 +413,7 @@ void write_mem(Alloc alloc, uint offset, uint val) { return; } - _283.Store(offset * 4 + 8, val); + _308.Store(offset * 4 + 8, val); } void CmdJump_write(Alloc a, CmdJumpRef ref, CmdJump s) @@ -410,9 +431,9 @@ void Cmd_Jump_write(Alloc a, CmdRef ref, CmdJump s) uint param_1 = ref.offset >> uint(2); uint param_2 = 10u; write_mem(param, param_1, param_2); - CmdJumpRef _1048 = { ref.offset + 4u }; + CmdJumpRef _1162 = { ref.offset + 4u }; Alloc param_3 = a; - CmdJumpRef param_4 = _1048; + CmdJumpRef param_4 = _1162; CmdJump param_5 = s; CmdJump_write(param_3, param_4, param_5); } @@ -424,21 +445,21 @@ bool alloc_cmd(inout Alloc cmd_alloc, inout CmdRef cmd_ref, inout uint cmd_limit return true; } uint param = 1024u; - MallocResult _1076 = malloc(param); - MallocResult new_cmd = _1076; + MallocResult _1190 = malloc(param); + MallocResult new_cmd = _1190; if (new_cmd.failed) { return false; } - CmdJump _1086 = { new_cmd.alloc.offset }; - CmdJump jump = _1086; + CmdJump _1200 = { new_cmd.alloc.offset }; + CmdJump jump = _1200; Alloc param_1 = cmd_alloc; CmdRef param_2 = cmd_ref; CmdJump param_3 = jump; Cmd_Jump_write(param_1, param_2, param_3); cmd_alloc = new_cmd.alloc; - CmdRef _1098 = { cmd_alloc.offset }; - cmd_ref = _1098; + CmdRef _1212 = { cmd_alloc.offset }; + cmd_ref = _1212; cmd_limit = (cmd_alloc.offset + 1024u) - 60u; return true; } @@ -467,9 +488,9 @@ void Cmd_Fill_write(Alloc a, CmdRef ref, CmdFill s) uint param_1 = ref.offset >> uint(2); uint param_2 = 1u; write_mem(param, param_1, param_2); - CmdFillRef _932 = { ref.offset + 4u }; + CmdFillRef _1036 = { ref.offset + 4u }; Alloc param_3 = a; - CmdFillRef param_4 = _932; + CmdFillRef param_4 = _1036; CmdFill param_5 = s; CmdFill_write(param_3, param_4, param_5); } @@ -501,9 +522,9 @@ void Cmd_Stroke_write(Alloc a, CmdRef ref, CmdStroke s) uint param_1 = ref.offset >> uint(2); uint param_2 = 2u; write_mem(param, param_1, param_2); - CmdStrokeRef _950 = { ref.offset + 4u }; + CmdStrokeRef _1054 = { ref.offset + 4u }; Alloc param_3 = a; - CmdStrokeRef param_4 = _950; + CmdStrokeRef param_4 = _1054; CmdStroke param_5 = s; CmdStroke_write(param_3, param_4, param_5); } @@ -515,8 +536,8 @@ void write_fill(Alloc alloc, inout CmdRef cmd_ref, uint flags, Tile tile, float { if (tile.tile.offset != 0u) { - CmdFill _1122 = { tile.tile.offset, tile.backdrop }; - CmdFill cmd_fill = _1122; + CmdFill _1236 = { tile.tile.offset, tile.backdrop }; + CmdFill cmd_fill = _1236; Alloc param_1 = alloc; CmdRef param_2 = cmd_ref; CmdFill param_3 = cmd_fill; @@ -533,8 +554,8 @@ void write_fill(Alloc alloc, inout CmdRef cmd_ref, uint flags, Tile tile, float } else { - CmdStroke _1152 = { tile.tile.offset, 0.5f * linewidth }; - CmdStroke cmd_stroke = _1152; + CmdStroke _1266 = { tile.tile.offset, 0.5f * linewidth }; + CmdStroke cmd_stroke = _1266; Alloc param_6 = alloc; CmdRef param_7 = cmd_ref; CmdStroke param_8 = cmd_stroke; @@ -558,9 +579,9 @@ void Cmd_Color_write(Alloc a, CmdRef ref, CmdColor s) uint param_1 = ref.offset >> uint(2); uint param_2 = 5u; write_mem(param, param_1, param_2); - CmdColorRef _976 = { ref.offset + 4u }; + CmdColorRef _1080 = { ref.offset + 4u }; Alloc param_3 = a; - CmdColorRef param_4 = _976; + CmdColorRef param_4 = _1080; CmdColor param_5 = s; CmdColor_write(param_3, param_4, param_5); } @@ -607,9 +628,9 @@ AnnoLinGradient AnnoLinGradient_read(Alloc a, AnnoLinGradientRef ref) AnnoLinGradient Annotated_LinGradient_read(Alloc a, AnnotatedRef ref) { - AnnoLinGradientRef _652 = { ref.offset + 4u }; + AnnoLinGradientRef _733 = { ref.offset + 4u }; Alloc param = a; - AnnoLinGradientRef param_1 = _652; + AnnoLinGradientRef param_1 = _733; return AnnoLinGradient_read(param, param_1); } @@ -640,9 +661,9 @@ void Cmd_LinGrad_write(Alloc a, CmdRef ref, CmdLinGrad s) uint param_1 = ref.offset >> uint(2); uint param_2 = 6u; write_mem(param, param_1, param_2); - CmdLinGradRef _994 = { ref.offset + 4u }; + CmdLinGradRef _1098 = { ref.offset + 4u }; Alloc param_3 = a; - CmdLinGradRef param_4 = _994; + CmdLinGradRef param_4 = _1098; CmdLinGrad param_5 = s; CmdLinGrad_write(param_3, param_4, param_5); } @@ -681,9 +702,9 @@ AnnoImage AnnoImage_read(Alloc a, AnnoImageRef ref) AnnoImage Annotated_Image_read(Alloc a, AnnotatedRef ref) { - AnnoImageRef _662 = { ref.offset + 4u }; + AnnoImageRef _743 = { ref.offset + 4u }; Alloc param = a; - AnnoImageRef param_1 = _662; + AnnoImageRef param_1 = _743; return AnnoImage_read(param, param_1); } @@ -706,9 +727,9 @@ void Cmd_Image_write(Alloc a, CmdRef ref, CmdImage s) uint param_1 = ref.offset >> uint(2); uint param_2 = 7u; write_mem(param, param_1, param_2); - CmdImageRef _1012 = { ref.offset + 4u }; + CmdImageRef _1116 = { ref.offset + 4u }; Alloc param_3 = a; - CmdImageRef param_4 = _1012; + CmdImageRef param_4 = _1116; CmdImage param_5 = s; CmdImage_write(param_3, param_4, param_5); } @@ -721,12 +742,58 @@ void Cmd_BeginClip_write(Alloc a, CmdRef ref) write_mem(param, param_1, param_2); } -void Cmd_EndClip_write(Alloc a, CmdRef ref) +AnnoEndClip AnnoEndClip_read(Alloc a, AnnoEndClipRef ref) +{ + uint ix = ref.offset >> uint(2); + Alloc param = a; + uint param_1 = ix + 0u; + uint raw0 = read_mem(param, param_1); + Alloc param_2 = a; + uint param_3 = ix + 1u; + uint raw1 = read_mem(param_2, param_3); + Alloc param_4 = a; + uint param_5 = ix + 2u; + uint raw2 = read_mem(param_4, param_5); + Alloc param_6 = a; + uint param_7 = ix + 3u; + uint raw3 = read_mem(param_6, param_7); + Alloc param_8 = a; + uint param_9 = ix + 4u; + uint raw4 = read_mem(param_8, param_9); + AnnoEndClip s; + s.bbox = float4(asfloat(raw0), asfloat(raw1), asfloat(raw2), asfloat(raw3)); + s.blend = raw4; + return s; +} + +AnnoEndClip Annotated_EndClip_read(Alloc a, AnnotatedRef ref) +{ + AnnoEndClipRef _753 = { ref.offset + 4u }; + Alloc param = a; + AnnoEndClipRef param_1 = _753; + return AnnoEndClip_read(param, param_1); +} + +void CmdEndClip_write(Alloc a, CmdEndClipRef ref, CmdEndClip s) +{ + uint ix = ref.offset >> uint(2); + Alloc param = a; + uint param_1 = ix + 0u; + uint param_2 = s.blend; + write_mem(param, param_1, param_2); +} + +void Cmd_EndClip_write(Alloc a, CmdRef ref, CmdEndClip s) { Alloc param = a; uint param_1 = ref.offset >> uint(2); uint param_2 = 9u; write_mem(param, param_1, param_2); + CmdEndClipRef _1143 = { ref.offset + 4u }; + Alloc param_3 = a; + CmdEndClipRef param_4 = _1143; + CmdEndClip param_5 = s; + CmdEndClip_write(param_3, param_4, param_5); } void Cmd_End_write(Alloc a, CmdRef ref) @@ -739,25 +806,25 @@ void Cmd_End_write(Alloc a, CmdRef ref) void comp_main() { - uint width_in_bins = ((_1169.Load(8) + 16u) - 1u) / 16u; + uint width_in_bins = ((_1283.Load(8) + 16u) - 1u) / 16u; uint bin_ix = (width_in_bins * gl_WorkGroupID.y) + gl_WorkGroupID.x; uint partition_ix = 0u; - uint n_partitions = ((_1169.Load(0) + 256u) - 1u) / 256u; + uint n_partitions = ((_1283.Load(0) + 256u) - 1u) / 256u; uint th_ix = gl_LocalInvocationID.x; uint bin_tile_x = 16u * gl_WorkGroupID.x; uint bin_tile_y = 16u * gl_WorkGroupID.y; uint tile_x = gl_LocalInvocationID.x % 16u; uint tile_y = gl_LocalInvocationID.x / 16u; - uint this_tile_ix = (((bin_tile_y + tile_y) * _1169.Load(8)) + bin_tile_x) + tile_x; - Alloc _1234; - _1234.offset = _1169.Load(24); + uint this_tile_ix = (((bin_tile_y + tile_y) * _1283.Load(8)) + bin_tile_x) + tile_x; + Alloc _1348; + _1348.offset = _1283.Load(24); Alloc param; - param.offset = _1234.offset; + param.offset = _1348.offset; uint param_1 = this_tile_ix * 1024u; uint param_2 = 1024u; Alloc cmd_alloc = slice_mem(param, param_1, param_2); - CmdRef _1243 = { cmd_alloc.offset }; - CmdRef cmd_ref = _1243; + CmdRef _1357 = { cmd_alloc.offset }; + CmdRef cmd_ref = _1357; uint cmd_limit = (cmd_ref.offset + 1024u) - 60u; uint clip_depth = 0u; uint clip_zero_depth = 0u; @@ -765,17 +832,17 @@ void comp_main() uint wr_ix = 0u; uint part_start_ix = 0u; uint ready_ix = 0u; - bool mem_ok = _283.Load(4) == 0u; + bool mem_ok = _308.Load(4) == 0u; Alloc param_3; Alloc param_5; - uint _1448; + uint _1562; uint element_ix; AnnotatedRef ref; Alloc param_14; Alloc param_16; uint tile_count; Alloc param_23; - uint _1770; + uint _1887; Alloc param_29; Tile tile_1; AnnoColor fill; @@ -783,40 +850,41 @@ void comp_main() Alloc param_52; CmdLinGrad cmd_lin; Alloc param_69; + Alloc param_95; while (true) { for (uint i = 0u; i < 8u; i++) { sh_bitmaps[i][th_ix] = 0u; } - bool _1500; + bool _1614; for (;;) { if ((ready_ix == wr_ix) && (partition_ix < n_partitions)) { part_start_ix = ready_ix; uint count = 0u; - bool _1298 = th_ix < 256u; - bool _1306; - if (_1298) + bool _1412 = th_ix < 256u; + bool _1420; + if (_1412) { - _1306 = (partition_ix + th_ix) < n_partitions; + _1420 = (partition_ix + th_ix) < n_partitions; } else { - _1306 = _1298; + _1420 = _1412; } - if (_1306) + if (_1420) { - uint in_ix = (_1169.Load(20) >> uint(2)) + ((((partition_ix + th_ix) * 256u) + bin_ix) * 2u); - Alloc _1323; - _1323.offset = _1169.Load(20); - param_3.offset = _1323.offset; + uint in_ix = (_1283.Load(20) >> uint(2)) + ((((partition_ix + th_ix) * 256u) + bin_ix) * 2u); + Alloc _1437; + _1437.offset = _1283.Load(20); + param_3.offset = _1437.offset; uint param_4 = in_ix; count = read_mem(param_3, param_4); - Alloc _1334; - _1334.offset = _1169.Load(20); - param_5.offset = _1334.offset; + Alloc _1448; + _1448.offset = _1283.Load(20); + param_5.offset = _1448.offset; uint param_6 = in_ix + 1u; uint offset = read_mem(param_5, param_6); uint param_7 = offset; @@ -862,16 +930,16 @@ void comp_main() } if (part_ix > 0u) { - _1448 = sh_part_count[part_ix - 1u]; + _1562 = sh_part_count[part_ix - 1u]; } else { - _1448 = part_start_ix; + _1562 = part_start_ix; } - ix -= _1448; + ix -= _1562; Alloc bin_alloc = sh_part_elements[part_ix]; - BinInstanceRef _1467 = { bin_alloc.offset }; - BinInstanceRef inst_ref = _1467; + BinInstanceRef _1581 = { bin_alloc.offset }; + BinInstanceRef inst_ref = _1581; BinInstanceRef param_10 = inst_ref; uint param_11 = ix; Alloc param_12 = bin_alloc; @@ -881,16 +949,16 @@ void comp_main() } GroupMemoryBarrierWithGroupSync(); wr_ix = min((rd_ix + 256u), ready_ix); - bool _1490 = (wr_ix - rd_ix) < 256u; - if (_1490) + bool _1604 = (wr_ix - rd_ix) < 256u; + if (_1604) { - _1500 = (wr_ix < ready_ix) || (partition_ix < n_partitions); + _1614 = (wr_ix < ready_ix) || (partition_ix < n_partitions); } else { - _1500 = _1490; + _1614 = _1604; } - if (_1500) + if (_1614) { continue; } @@ -903,11 +971,11 @@ void comp_main() if ((th_ix + rd_ix) < wr_ix) { element_ix = sh_elements[th_ix]; - AnnotatedRef _1521 = { _1169.Load(32) + (element_ix * 40u) }; - ref = _1521; - Alloc _1524; - _1524.offset = _1169.Load(32); - param_14.offset = _1524.offset; + AnnotatedRef _1635 = { _1283.Load(32) + (element_ix * 40u) }; + ref = _1635; + Alloc _1638; + _1638.offset = _1283.Load(32); + param_14.offset = _1638.offset; AnnotatedRef param_15 = ref; tag = Annotated_tag(param_14, param_15).tag; } @@ -919,13 +987,13 @@ void comp_main() case 4u: case 5u: { - uint drawmonoid_base = (_1169.Load(44) >> uint(2)) + (2u * element_ix); - uint path_ix = _283.Load(drawmonoid_base * 4 + 8); - PathRef _1553 = { _1169.Load(16) + (path_ix * 12u) }; - Alloc _1556; - _1556.offset = _1169.Load(16); - param_16.offset = _1556.offset; - PathRef param_17 = _1553; + uint drawmonoid_base = (_1283.Load(44) >> uint(2)) + (2u * element_ix); + uint path_ix = _308.Load(drawmonoid_base * 4 + 8); + PathRef _1667 = { _1283.Load(16) + (path_ix * 12u) }; + Alloc _1670; + _1670.offset = _1283.Load(16); + param_16.offset = _1670.offset; + PathRef param_17 = _1667; Path path = Path_read(param_16, param_17); uint stride = path.bbox.z - path.bbox.x; sh_tile_stride[th_ix] = stride; @@ -980,22 +1048,23 @@ void comp_main() el_ix = probe_1; } } - AnnotatedRef _1755 = { _1169.Load(32) + (sh_elements[el_ix] * 40u) }; - AnnotatedRef ref_1 = _1755; - Alloc _1759; - _1759.offset = _1169.Load(32); - param_23.offset = _1759.offset; + AnnotatedRef _1869 = { _1283.Load(32) + (sh_elements[el_ix] * 40u) }; + AnnotatedRef ref_1 = _1869; + Alloc _1874; + _1874.offset = _1283.Load(32); + param_23.offset = _1874.offset; AnnotatedRef param_24 = ref_1; - uint tag_1 = Annotated_tag(param_23, param_24).tag; + AnnotatedTag anno_tag = Annotated_tag(param_23, param_24); + uint tag_1 = anno_tag.tag; if (el_ix > 0u) { - _1770 = sh_tile_count[el_ix - 1u]; + _1887 = sh_tile_count[el_ix - 1u]; } else { - _1770 = 0u; + _1887 = 0u; } - uint seq_ix = ix_1 - _1770; + uint seq_ix = ix_1 - _1887; uint width = sh_tile_width[el_ix]; uint x = sh_tile_x0[el_ix] + (seq_ix % width); uint y = sh_tile_y0[el_ix] + (seq_ix / width); @@ -1004,29 +1073,47 @@ void comp_main() { uint param_25 = el_ix; bool param_26 = mem_ok; - TileRef _1822 = { sh_tile_base[el_ix] + (((sh_tile_stride[el_ix] * y) + x) * 8u) }; + TileRef _1939 = { sh_tile_base[el_ix] + (((sh_tile_stride[el_ix] * y) + x) * 8u) }; Alloc param_27 = read_tile_alloc(param_25, param_26); - TileRef param_28 = _1822; + TileRef param_28 = _1939; Tile tile = Tile_read(param_27, param_28); bool is_clip = (tag_1 == 4u) || (tag_1 == 5u); - bool _1834 = tile.tile.offset != 0u; - bool _1843; - if (!_1834) + bool _1951 = tile.tile.offset != 0u; + bool _1960; + if (!_1951) { - _1843 = (tile.backdrop == 0) == is_clip; + _1960 = (tile.backdrop == 0) == is_clip; } else { - _1843 = _1834; + _1960 = _1951; } - include_tile = _1843; + bool _1972; + if (!_1960) + { + bool _1971; + if (is_clip) + { + _1971 = (anno_tag.flags & 2u) != 0u; + } + else + { + _1971 = is_clip; + } + _1972 = _1971; + } + else + { + _1972 = _1960; + } + include_tile = _1972; } if (include_tile) { uint el_slice = el_ix / 32u; uint el_mask = 1u << (el_ix & 31u); - uint _1863; - InterlockedOr(sh_bitmaps[el_slice][(y * 16u) + x], el_mask, _1863); + uint _1992; + InterlockedOr(sh_bitmaps[el_slice][(y * 16u) + x], el_mask, _1992); } } GroupMemoryBarrierWithGroupSync(); @@ -1050,11 +1137,11 @@ void comp_main() uint element_ref_ix = (slice_ix * 32u) + uint(int(firstbitlow(bitmap))); uint element_ix_1 = sh_elements[element_ref_ix]; bitmap &= (bitmap - 1u); - AnnotatedRef _1917 = { _1169.Load(32) + (element_ix_1 * 40u) }; - ref = _1917; - Alloc _1922; - _1922.offset = _1169.Load(32); - param_29.offset = _1922.offset; + AnnotatedRef _2046 = { _1283.Load(32) + (element_ix_1 * 40u) }; + ref = _2046; + Alloc _2050; + _2050.offset = _1283.Load(32); + param_29.offset = _2050.offset; AnnotatedRef param_30 = ref; AnnotatedTag tag_2 = Annotated_tag(param_29, param_30); if (clip_zero_depth == 0u) @@ -1065,23 +1152,23 @@ void comp_main() { uint param_31 = element_ref_ix; bool param_32 = mem_ok; - TileRef _1958 = { sh_tile_base[element_ref_ix] + (((sh_tile_stride[element_ref_ix] * tile_y) + tile_x) * 8u) }; + TileRef _2086 = { sh_tile_base[element_ref_ix] + (((sh_tile_stride[element_ref_ix] * tile_y) + tile_x) * 8u) }; Alloc param_33 = read_tile_alloc(param_31, param_32); - TileRef param_34 = _1958; + TileRef param_34 = _2086; tile_1 = Tile_read(param_33, param_34); - Alloc _1965; - _1965.offset = _1169.Load(32); - param_35.offset = _1965.offset; + Alloc _2093; + _2093.offset = _1283.Load(32); + param_35.offset = _2093.offset; AnnotatedRef param_36 = ref; fill = Annotated_Color_read(param_35, param_36); Alloc param_37 = cmd_alloc; CmdRef param_38 = cmd_ref; uint param_39 = cmd_limit; - bool _1977 = alloc_cmd(param_37, param_38, param_39); + bool _2105 = alloc_cmd(param_37, param_38, param_39); cmd_alloc = param_37; cmd_ref = param_38; cmd_limit = param_39; - if (!_1977) + if (!_2105) { break; } @@ -1092,10 +1179,10 @@ void comp_main() float param_44 = fill.linewidth; write_fill(param_40, param_41, param_42, param_43, param_44); cmd_ref = param_41; - CmdColor _2001 = { fill.rgba_color }; + CmdColor _2129 = { fill.rgba_color }; Alloc param_45 = cmd_alloc; CmdRef param_46 = cmd_ref; - CmdColor param_47 = _2001; + CmdColor param_47 = _2129; Cmd_Color_write(param_45, param_46, param_47); cmd_ref.offset += 8u; break; @@ -1104,23 +1191,23 @@ void comp_main() { uint param_48 = element_ref_ix; bool param_49 = mem_ok; - TileRef _2030 = { sh_tile_base[element_ref_ix] + (((sh_tile_stride[element_ref_ix] * tile_y) + tile_x) * 8u) }; + TileRef _2158 = { sh_tile_base[element_ref_ix] + (((sh_tile_stride[element_ref_ix] * tile_y) + tile_x) * 8u) }; Alloc param_50 = read_tile_alloc(param_48, param_49); - TileRef param_51 = _2030; + TileRef param_51 = _2158; tile_1 = Tile_read(param_50, param_51); - Alloc _2037; - _2037.offset = _1169.Load(32); - param_52.offset = _2037.offset; + Alloc _2165; + _2165.offset = _1283.Load(32); + param_52.offset = _2165.offset; AnnotatedRef param_53 = ref; AnnoLinGradient lin = Annotated_LinGradient_read(param_52, param_53); Alloc param_54 = cmd_alloc; CmdRef param_55 = cmd_ref; uint param_56 = cmd_limit; - bool _2049 = alloc_cmd(param_54, param_55, param_56); + bool _2177 = alloc_cmd(param_54, param_55, param_56); cmd_alloc = param_54; cmd_ref = param_55; cmd_limit = param_56; - if (!_2049) + if (!_2177) { break; } @@ -1146,23 +1233,23 @@ void comp_main() { uint param_65 = element_ref_ix; bool param_66 = mem_ok; - TileRef _2114 = { sh_tile_base[element_ref_ix] + (((sh_tile_stride[element_ref_ix] * tile_y) + tile_x) * 8u) }; + TileRef _2242 = { sh_tile_base[element_ref_ix] + (((sh_tile_stride[element_ref_ix] * tile_y) + tile_x) * 8u) }; Alloc param_67 = read_tile_alloc(param_65, param_66); - TileRef param_68 = _2114; + TileRef param_68 = _2242; tile_1 = Tile_read(param_67, param_68); - Alloc _2121; - _2121.offset = _1169.Load(32); - param_69.offset = _2121.offset; + Alloc _2249; + _2249.offset = _1283.Load(32); + param_69.offset = _2249.offset; AnnotatedRef param_70 = ref; AnnoImage fill_img = Annotated_Image_read(param_69, param_70); Alloc param_71 = cmd_alloc; CmdRef param_72 = cmd_ref; uint param_73 = cmd_limit; - bool _2133 = alloc_cmd(param_71, param_72, param_73); + bool _2261 = alloc_cmd(param_71, param_72, param_73); cmd_alloc = param_71; cmd_ref = param_72; cmd_limit = param_73; - if (!_2133) + if (!_2261) { break; } @@ -1173,10 +1260,10 @@ void comp_main() float param_78 = fill_img.linewidth; write_fill(param_74, param_75, param_76, param_77, param_78); cmd_ref = param_75; - CmdImage _2159 = { fill_img.index, fill_img.offset }; + CmdImage _2287 = { fill_img.index, fill_img.offset }; Alloc param_79 = cmd_alloc; CmdRef param_80 = cmd_ref; - CmdImage param_81 = _2159; + CmdImage param_81 = _2287; Cmd_Image_write(param_79, param_80, param_81); cmd_ref.offset += 12u; break; @@ -1185,21 +1272,21 @@ void comp_main() { uint param_82 = element_ref_ix; bool param_83 = mem_ok; - TileRef _2188 = { sh_tile_base[element_ref_ix] + (((sh_tile_stride[element_ref_ix] * tile_y) + tile_x) * 8u) }; + TileRef _2316 = { sh_tile_base[element_ref_ix] + (((sh_tile_stride[element_ref_ix] * tile_y) + tile_x) * 8u) }; Alloc param_84 = read_tile_alloc(param_82, param_83); - TileRef param_85 = _2188; + TileRef param_85 = _2316; tile_1 = Tile_read(param_84, param_85); - bool _2194 = tile_1.tile.offset == 0u; - bool _2200; - if (_2194) + bool _2322 = tile_1.tile.offset == 0u; + bool _2328; + if (_2322) { - _2200 = tile_1.backdrop == 0; + _2328 = tile_1.backdrop == 0; } else { - _2200 = _2194; + _2328 = _2322; } - if (_2200) + if (_2328) { clip_zero_depth = clip_depth + 1u; } @@ -1208,11 +1295,11 @@ void comp_main() Alloc param_86 = cmd_alloc; CmdRef param_87 = cmd_ref; uint param_88 = cmd_limit; - bool _2212 = alloc_cmd(param_86, param_87, param_88); + bool _2340 = alloc_cmd(param_86, param_87, param_88); cmd_alloc = param_86; cmd_ref = param_87; cmd_limit = param_88; - if (!_2212) + if (!_2340) { break; } @@ -1228,33 +1315,40 @@ void comp_main() { uint param_91 = element_ref_ix; bool param_92 = mem_ok; - TileRef _2249 = { sh_tile_base[element_ref_ix] + (((sh_tile_stride[element_ref_ix] * tile_y) + tile_x) * 8u) }; + TileRef _2377 = { sh_tile_base[element_ref_ix] + (((sh_tile_stride[element_ref_ix] * tile_y) + tile_x) * 8u) }; Alloc param_93 = read_tile_alloc(param_91, param_92); - TileRef param_94 = _2249; + TileRef param_94 = _2377; tile_1 = Tile_read(param_93, param_94); + Alloc _2384; + _2384.offset = _1283.Load(32); + param_95.offset = _2384.offset; + AnnotatedRef param_96 = ref; + AnnoEndClip end_clip = Annotated_EndClip_read(param_95, param_96); clip_depth--; - Alloc param_95 = cmd_alloc; - CmdRef param_96 = cmd_ref; - uint param_97 = cmd_limit; - bool _2261 = alloc_cmd(param_95, param_96, param_97); - cmd_alloc = param_95; - cmd_ref = param_96; - cmd_limit = param_97; - if (!_2261) + Alloc param_97 = cmd_alloc; + CmdRef param_98 = cmd_ref; + uint param_99 = cmd_limit; + bool _2398 = alloc_cmd(param_97, param_98, param_99); + cmd_alloc = param_97; + cmd_ref = param_98; + cmd_limit = param_99; + if (!_2398) { break; } - Alloc param_98 = cmd_alloc; - CmdRef param_99 = cmd_ref; - uint param_100 = 0u; - Tile param_101 = tile_1; - float param_102 = 0.0f; - write_fill(param_98, param_99, param_100, param_101, param_102); - cmd_ref = param_99; - Alloc param_103 = cmd_alloc; - CmdRef param_104 = cmd_ref; - Cmd_EndClip_write(param_103, param_104); - cmd_ref.offset += 4u; + Alloc param_100 = cmd_alloc; + CmdRef param_101 = cmd_ref; + uint param_102 = 0u; + Tile param_103 = tile_1; + float param_104 = 0.0f; + write_fill(param_100, param_101, param_102, param_103, param_104); + cmd_ref = param_101; + CmdEndClip _2419 = { end_clip.blend }; + Alloc param_105 = cmd_alloc; + CmdRef param_106 = cmd_ref; + CmdEndClip param_107 = _2419; + Cmd_EndClip_write(param_105, param_106, param_107); + cmd_ref.offset += 8u; break; } } @@ -1287,21 +1381,21 @@ void comp_main() break; } } - bool _2326 = (bin_tile_x + tile_x) < _1169.Load(8); - bool _2335; - if (_2326) + bool _2467 = (bin_tile_x + tile_x) < _1283.Load(8); + bool _2476; + if (_2467) { - _2335 = (bin_tile_y + tile_y) < _1169.Load(12); + _2476 = (bin_tile_y + tile_y) < _1283.Load(12); } else { - _2335 = _2326; + _2476 = _2467; } - if (_2335) + if (_2476) { - Alloc param_105 = cmd_alloc; - CmdRef param_106 = cmd_ref; - Cmd_End_write(param_105, param_106); + Alloc param_108 = cmd_alloc; + CmdRef param_109 = cmd_ref; + Cmd_End_write(param_108, param_109); } } diff --git a/piet-gpu/shader/gen/coarse.msl b/piet-gpu/shader/gen/coarse.msl index 21bd30c..1422ff1 100644 --- a/piet-gpu/shader/gen/coarse.msl +++ b/piet-gpu/shader/gen/coarse.msl @@ -7,6 +7,13 @@ using namespace metal; +// Implementation of the GLSL findLSB() function +template +inline T spvFindLSB(T x) +{ + return select(ctz(x), T(-1), x == T(0)); +} + struct Alloc { uint offset; @@ -244,13 +251,6 @@ struct ConfigBuf constant uint3 gl_WorkGroupSize [[maybe_unused]] = uint3(256u, 1u, 1u); -// Implementation of the GLSL findLSB() function -template -inline T spvFindLSB(T x) -{ - return select(ctz(x), T(-1), x == T(0)); -} - static inline __attribute__((always_inline)) Alloc slice_mem(thread const Alloc& a, thread const uint& offset, thread const uint& size) { diff --git a/piet-gpu/shader/gen/draw_leaf.dxil b/piet-gpu/shader/gen/draw_leaf.dxil index d901a802b4806388b14f6739da46a28cf504fcf2..d1567c93c46ff164f6eb4fc925deb9416dce9ff7 100644 GIT binary patch delta 3487 zcma)9dsGu=7N40+-T^`&WH4$T5QzjK1S(>SonUy%YNS!oS{)FSW07Kutx_aUB_c`? z1bl7d0|kmal?7|1XlajHt2@EW_Uu1BJOA97oBQ4So8SF? zcfPn@am}Bh$x2*&xzZ1zCdpdjptcnohFokA0Duf(^^6(RA_f3dR>yxY%b)`Q22g<; z#BZ9cv1ok?8P-}VLn=Y z=#Uur5(W+PLoHog*Dx2@+m0Z?4NQo;C6#thVm~ecg4RbXUx^j+lB=!R`3$Vzt+@d^ z*c9IS==k{VcDNesKEMfwYVsM}c=OwaOT9%u*K;h_YPzfziBMVG*1g2-#YVOn~Ugc*#c_9i+GSWs+ zkgwaLdl0+fv|8PL?MPVQJLnTyZ6OK<=rq~UTa znX_FEVI>j@FiegCI%anpXWzm&O3%m5DwLm57*F zZX57V8MzANYlpzZ z=ln3qhM2e*L}YTU3F?N2P%0|VBJyxqb(IK0FbZDxZQ-)}X>ce9?*Jdd6wDQmW4#ib zs%*%^4qyW~fO0vu53pUUk;3hiV!*tbc81CF9lR5cP!YYCo>?VEU(0kUwA!F2pH2Jc%Zl;eG|+N~Hx(fE7sMiPrESXItw(Cu0c=)cJy*$XUo*%IR03@Kd)^yNUDe0viaBHaRY&@tzW~GG#U`a?c(xe@MN+cdT>a}BD>-O4l zubp^lfl_z|v96GTL7a`jbM$kS#@T2G?g+}2X1OtTjKl_Tc!uQ=T~?%AqV&-LmI3-# z1nH@z+?!nitBf@M#J~zSPnk39*&ImLfMy}A%63{ZoCB}c+DU&_meaBjj>&cnWVqnh zkX)Xs37zSEpNOu8J;jX8IUX&h>Y4K-qT*f&z*ZuK$RNZ?XT0Bgyn(4~LPuBA2HDeo*s6}0)$U8&jJx7Lw(%6I~h(-#z^fTWHT%a#=sC7gV@{HozGVr zG`66VOt8q98B`0GZdS8Ns-s3v=tH5ud5C4#cA+x&8^ddGE9e;lSttAj;r_1A^Amx! z_F8Hb_)*JU$O~qn&nMgW08vDT+)!S5i0KG&iETg%m6Sff%-Ve{uc^&`;ex@R0t0Gg z$GZNgLMgD10Pd}-n2%Dz?kC22x=;H|PqecMjXeilCl?g<$CgP^&jNX3EJ@ivQ++xa zD>o1?cpvp4;m2j2jDWuJpwG;tc(FlM-=KTN^F7!C^Zb_o%E_zJzF+6KaIPYU3|Z*+ zkL`PbI8S}~sGcl45)wBq9rcu5ka#Pg_L!`fwlL6jIsCf)PwW-xzKYl;qwlWH)RR)5 z%?omT63tIG2CE{JcWqU{<)s;nyD>SKM<_#O!zs#_w`{#F1yj#-ZmJUtoAg?^a%P*q znL==t|Lo)|rV(T#SO{`L_i^Tz2bkN6k1rxQc#&WA72~#tgI3?sf6@5QzW6!;r|SUG z!k1bcwGPwYhJT43N!dA4UZ7hvN!N)*B^^Kk^A|!4K7<$y#~5XJvQ3m&Hl9*8dgVOS zk)(IhE0I{w7^#y!l?WYWjNdv%zZr#RSa{u5kyquT6_fNW@b8kT6#Z0r;n-Z@P3KPB zs-_S+!RFl+_4q$4pA@}#D7v_n*U>mZCj3<@HVM^MhJ+`T+!dZ5BmJ}x$pN9!nkpr( zM|xp5jA?(eNtHPU4^MTK7Uvc?MCJKD_(>tJh;K6XOeAAcLd4oBfD8@Ve>C+Sc&;aO zo8KHV^haxjAqAffeOg3@)>WNzZik~hp=abDTDvyMKeTiuj~Yu`^&ONaS=sbQ(fz*T z8z4{=zu z_!r5c_NrONQWuxV5Go1~Pdl}t)~dgo50BZQgj+4_I3sIJlfs!nj8%Zmk6&JmE!`b| zs3zX1ufD)eFtXg5FJ*>#*-NnjyJzHeWOfD!m_KQHYhLXOn9+9-=wU1{`kQHlNbsf9 zWmu>)K(g#n=(2)wEi|gS4=2COyo8@nU5zcXB;2Y=a8xUp7`r(DiO%Arsx@hf;NDW6DoZ z&*3-{1t!zI8_MOYb($ny*|-w>p_8nXu`)R?1`p9)demII9&;KN7fQjHMe6FL@g*V0I9Sm=^t>q1M(kQ~{kGW}O|ldYsyk zbdKfKd~&4z{Pj7;vy7e`MUN_MRS;e$QFuk)&^I=C1n!l(S#9q0V@I=qH?6It=qC;+ zw(=$_?1~E~6d%0%BTz8+JXx)IsLhpzE1>pCR{MC`ye`szmfb#_Hmq3DK9$}+krw^2 z*RMBpE@>Z0b1Q1vA6K+LxEcW>wVTHXeA9=edy${2!W`|Db6~t^u`M#Y2;>G`9P|m# zsy{o$6*Qr1i@ka&i59%hyq341{=IlXX7evaf+oY-DGgZ8esq`4^uGVMjcNAq_KG$bs>4547NF}DIKFx$K zk^PIJsCs!8&L@@(z0*?JK7vP)-*cBGqYak!M@mCf(w`Mc57=I%1jR^CDjd#pL(WQ< z)3Aj9J6YqZ%lRN3Rry}Eajsg1i1u-&jW_XzqfM#%TXURUv)Cl;R=k2iIK!mqPpQ6Z5*V+qIvU)LkJ_6MjVW;h*_ThRmAll D;kdcN delta 3360 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 BvLgTh diff --git a/piet-gpu/shader/gen/draw_leaf.hlsl b/piet-gpu/shader/gen/draw_leaf.hlsl index 0ca5843..1f2f78b 100644 --- a/piet-gpu/shader/gen/draw_leaf.hlsl +++ b/piet-gpu/shader/gen/draw_leaf.hlsl @@ -41,6 +41,17 @@ struct FillImage int2 offset; }; +struct ClipRef +{ + uint offset; +}; + +struct Clip +{ + float4 bbox; + uint blend; +}; + struct ElementTag { uint tag; @@ -102,6 +113,7 @@ struct AnnoBeginClip { float4 bbox; float linewidth; + uint blend; }; struct AnnoEndClipRef @@ -112,6 +124,7 @@ struct AnnoEndClipRef struct AnnoEndClip { float4 bbox; + uint blend; }; struct AnnotatedRef @@ -148,14 +161,14 @@ struct Config static const uint3 gl_WorkGroupSize = uint3(256u, 1u, 1u); -static const DrawMonoid _348 = { 0u, 0u }; -static const DrawMonoid _372 = { 1u, 0u }; -static const DrawMonoid _374 = { 1u, 1u }; +static const DrawMonoid _413 = { 0u, 0u }; +static const DrawMonoid _437 = { 1u, 0u }; +static const DrawMonoid _439 = { 1u, 1u }; -RWByteAddressBuffer _187 : register(u0, space0); -ByteAddressBuffer _211 : register(t2, space0); -ByteAddressBuffer _934 : register(t3, space0); -ByteAddressBuffer _968 : register(t1, space0); +RWByteAddressBuffer _199 : register(u0, space0); +ByteAddressBuffer _223 : register(t2, space0); +ByteAddressBuffer _1020 : register(t3, space0); +ByteAddressBuffer _1054 : register(t1, space0); static uint3 gl_WorkGroupID; static uint3 gl_LocalInvocationID; @@ -171,9 +184,9 @@ groupshared DrawMonoid sh_scratch[256]; ElementTag Element_tag(ElementRef ref) { - uint tag_and_flags = _211.Load((ref.offset >> uint(2)) * 4 + 0); - ElementTag _321 = { tag_and_flags & 65535u, tag_and_flags >> uint(16) }; - return _321; + uint tag_and_flags = _223.Load((ref.offset >> uint(2)) * 4 + 0); + ElementTag _378 = { tag_and_flags & 65535u, tag_and_flags >> uint(16) }; + return _378; } DrawMonoid map_tag(uint tag_word) @@ -184,24 +197,24 @@ DrawMonoid map_tag(uint tag_word) case 5u: case 6u: { - return _372; + return _437; } case 9u: case 10u: { - return _374; + return _439; } default: { - return _348; + return _413; } } } ElementRef Element_index(ElementRef ref, uint index) { - ElementRef _200 = { ref.offset + (index * 36u) }; - return _200; + ElementRef _212 = { ref.offset + (index * 36u) }; + return _212; } DrawMonoid combine_tag_monoid(DrawMonoid a, DrawMonoid b) @@ -214,13 +227,13 @@ DrawMonoid combine_tag_monoid(DrawMonoid a, DrawMonoid b) DrawMonoid tag_monoid_identity() { - return _348; + return _413; } FillColor FillColor_read(FillColorRef ref) { uint ix = ref.offset >> uint(2); - uint raw0 = _211.Load((ix + 0u) * 4 + 0); + uint raw0 = _223.Load((ix + 0u) * 4 + 0); FillColor s; s.rgba_color = raw0; return s; @@ -228,8 +241,8 @@ FillColor FillColor_read(FillColorRef ref) FillColor Element_FillColor_read(ElementRef ref) { - FillColorRef _327 = { ref.offset + 4u }; - FillColorRef param = _327; + FillColorRef _384 = { ref.offset + 4u }; + FillColorRef param = _384; return FillColor_read(param); } @@ -246,7 +259,7 @@ void write_mem(Alloc alloc, uint offset, uint val) { return; } - _187.Store(offset * 4 + 8, val); + _199.Store(offset * 4 + 8, val); } void AnnoColor_write(Alloc a, AnnoColorRef ref, AnnoColor s) @@ -284,9 +297,9 @@ void Annotated_Color_write(Alloc a, AnnotatedRef ref, uint flags, AnnoColor s) uint param_1 = ref.offset >> uint(2); uint param_2 = (flags << uint(16)) | 1u; write_mem(param, param_1, param_2); - AnnoColorRef _735 = { ref.offset + 4u }; + AnnoColorRef _818 = { ref.offset + 4u }; Alloc param_3 = a; - AnnoColorRef param_4 = _735; + AnnoColorRef param_4 = _818; AnnoColor param_5 = s; AnnoColor_write(param_3, param_4, param_5); } @@ -294,11 +307,11 @@ void Annotated_Color_write(Alloc a, AnnotatedRef ref, uint flags, AnnoColor s) FillLinGradient FillLinGradient_read(FillLinGradientRef ref) { uint ix = ref.offset >> uint(2); - uint raw0 = _211.Load((ix + 0u) * 4 + 0); - uint raw1 = _211.Load((ix + 1u) * 4 + 0); - uint raw2 = _211.Load((ix + 2u) * 4 + 0); - uint raw3 = _211.Load((ix + 3u) * 4 + 0); - uint raw4 = _211.Load((ix + 4u) * 4 + 0); + uint raw0 = _223.Load((ix + 0u) * 4 + 0); + uint raw1 = _223.Load((ix + 1u) * 4 + 0); + uint raw2 = _223.Load((ix + 2u) * 4 + 0); + uint raw3 = _223.Load((ix + 3u) * 4 + 0); + uint raw4 = _223.Load((ix + 4u) * 4 + 0); FillLinGradient s; s.index = raw0; s.p0 = float2(asfloat(raw1), asfloat(raw2)); @@ -308,8 +321,8 @@ FillLinGradient FillLinGradient_read(FillLinGradientRef ref) FillLinGradient Element_FillLinGradient_read(ElementRef ref) { - FillLinGradientRef _335 = { ref.offset + 4u }; - FillLinGradientRef param = _335; + FillLinGradientRef _392 = { ref.offset + 4u }; + FillLinGradientRef param = _392; return FillLinGradient_read(param); } @@ -360,9 +373,9 @@ void Annotated_LinGradient_write(Alloc a, AnnotatedRef ref, uint flags, AnnoLinG uint param_1 = ref.offset >> uint(2); uint param_2 = (flags << uint(16)) | 2u; write_mem(param, param_1, param_2); - AnnoLinGradientRef _756 = { ref.offset + 4u }; + AnnoLinGradientRef _839 = { ref.offset + 4u }; Alloc param_3 = a; - AnnoLinGradientRef param_4 = _756; + AnnoLinGradientRef param_4 = _839; AnnoLinGradient param_5 = s; AnnoLinGradient_write(param_3, param_4, param_5); } @@ -370,8 +383,8 @@ void Annotated_LinGradient_write(Alloc a, AnnotatedRef ref, uint flags, AnnoLinG FillImage FillImage_read(FillImageRef ref) { uint ix = ref.offset >> uint(2); - uint raw0 = _211.Load((ix + 0u) * 4 + 0); - uint raw1 = _211.Load((ix + 1u) * 4 + 0); + uint raw0 = _223.Load((ix + 0u) * 4 + 0); + uint raw1 = _223.Load((ix + 1u) * 4 + 0); FillImage s; s.index = raw0; s.offset = int2(int(raw1 << uint(16)) >> 16, int(raw1) >> 16); @@ -380,8 +393,8 @@ FillImage FillImage_read(FillImageRef ref) FillImage Element_FillImage_read(ElementRef ref) { - FillImageRef _343 = { ref.offset + 4u }; - FillImageRef param = _343; + FillImageRef _400 = { ref.offset + 4u }; + FillImageRef param = _400; return FillImage_read(param); } @@ -424,13 +437,33 @@ void Annotated_Image_write(Alloc a, AnnotatedRef ref, uint flags, AnnoImage s) uint param_1 = ref.offset >> uint(2); uint param_2 = (flags << uint(16)) | 3u; write_mem(param, param_1, param_2); - AnnoImageRef _777 = { ref.offset + 4u }; + AnnoImageRef _860 = { ref.offset + 4u }; Alloc param_3 = a; - AnnoImageRef param_4 = _777; + AnnoImageRef param_4 = _860; AnnoImage param_5 = s; AnnoImage_write(param_3, param_4, param_5); } +Clip Clip_read(ClipRef ref) +{ + uint ix = ref.offset >> uint(2); + uint raw0 = _223.Load((ix + 0u) * 4 + 0); + uint raw1 = _223.Load((ix + 1u) * 4 + 0); + uint raw2 = _223.Load((ix + 2u) * 4 + 0); + uint raw3 = _223.Load((ix + 3u) * 4 + 0); + Clip s; + s.bbox = float4(asfloat(raw0), asfloat(raw1), asfloat(raw2), asfloat(raw3)); + s.blend = _223.Load((ix + 4u) * 4 + 0); + return s; +} + +Clip Element_BeginClip_read(ElementRef ref) +{ + ClipRef _408 = { ref.offset + 4u }; + ClipRef param = _408; + return Clip_read(param); +} + void AnnoBeginClip_write(Alloc a, AnnoBeginClipRef ref, AnnoBeginClip s) { uint ix = ref.offset >> uint(2); @@ -454,6 +487,10 @@ void AnnoBeginClip_write(Alloc a, AnnoBeginClipRef ref, AnnoBeginClip s) uint param_13 = ix + 4u; uint param_14 = asuint(s.linewidth); write_mem(param_12, param_13, param_14); + Alloc param_15 = a; + uint param_16 = ix + 5u; + uint param_17 = s.blend; + write_mem(param_15, param_16, param_17); } void Annotated_BeginClip_write(Alloc a, AnnotatedRef ref, uint flags, AnnoBeginClip s) @@ -462,9 +499,9 @@ void Annotated_BeginClip_write(Alloc a, AnnotatedRef ref, uint flags, AnnoBeginC uint param_1 = ref.offset >> uint(2); uint param_2 = (flags << uint(16)) | 4u; write_mem(param, param_1, param_2); - AnnoBeginClipRef _798 = { ref.offset + 4u }; + AnnoBeginClipRef _881 = { ref.offset + 4u }; Alloc param_3 = a; - AnnoBeginClipRef param_4 = _798; + AnnoBeginClipRef param_4 = _881; AnnoBeginClip param_5 = s; AnnoBeginClip_write(param_3, param_4, param_5); } @@ -488,17 +525,21 @@ void AnnoEndClip_write(Alloc a, AnnoEndClipRef ref, AnnoEndClip s) uint param_10 = ix + 3u; uint param_11 = asuint(s.bbox.w); write_mem(param_9, param_10, param_11); + Alloc param_12 = a; + uint param_13 = ix + 4u; + uint param_14 = s.blend; + write_mem(param_12, param_13, param_14); } -void Annotated_EndClip_write(Alloc a, AnnotatedRef ref, AnnoEndClip s) +void Annotated_EndClip_write(Alloc a, AnnotatedRef ref, uint flags, AnnoEndClip s) { Alloc param = a; uint param_1 = ref.offset >> uint(2); - uint param_2 = 5u; + uint param_2 = (flags << uint(16)) | 5u; write_mem(param, param_1, param_2); - AnnoEndClipRef _816 = { ref.offset + 4u }; + AnnoEndClipRef _902 = { ref.offset + 4u }; Alloc param_3 = a; - AnnoEndClipRef param_4 = _816; + AnnoEndClipRef param_4 = _902; AnnoEndClip param_5 = s; AnnoEndClip_write(param_3, param_4, param_5); } @@ -506,8 +547,8 @@ void Annotated_EndClip_write(Alloc a, AnnotatedRef ref, AnnoEndClip s) void comp_main() { uint ix = gl_GlobalInvocationID.x * 8u; - ElementRef _834 = { ix * 36u }; - ElementRef ref = _834; + ElementRef _920 = { ix * 36u }; + ElementRef ref = _920; ElementRef param = ref; uint tag_word = Element_tag(param).tag; uint param_1 = tag_word; @@ -544,11 +585,11 @@ void comp_main() DrawMonoid row = tag_monoid_identity(); if (gl_WorkGroupID.x > 0u) { - DrawMonoid _940; - _940.path_ix = _934.Load((gl_WorkGroupID.x - 1u) * 8 + 0); - _940.clip_ix = _934.Load((gl_WorkGroupID.x - 1u) * 8 + 4); - row.path_ix = _940.path_ix; - row.clip_ix = _940.clip_ix; + DrawMonoid _1026; + _1026.path_ix = _1020.Load((gl_WorkGroupID.x - 1u) * 8 + 0); + _1026.clip_ix = _1020.Load((gl_WorkGroupID.x - 1u) * 8 + 4); + row.path_ix = _1026.path_ix; + row.clip_ix = _1026.clip_ix; } if (gl_LocalInvocationID.x > 0u) { @@ -557,10 +598,10 @@ void comp_main() row = combine_tag_monoid(param_10, param_11); } uint out_ix = gl_GlobalInvocationID.x * 8u; - uint out_base = (_968.Load(44) >> uint(2)) + (out_ix * 2u); - uint clip_out_base = _968.Load(48) >> uint(2); - AnnotatedRef _989 = { _968.Load(32) + (out_ix * 40u) }; - AnnotatedRef out_ref = _989; + uint out_base = (_1054.Load(44) >> uint(2)) + (out_ix * 2u); + uint clip_out_base = _1054.Load(48) >> uint(2); + AnnotatedRef _1075 = { _1054.Load(32) + (out_ix * 40u) }; + AnnotatedRef out_ref = _1075; float4 mat; float2 translate; AnnoColor anno_fill; @@ -570,9 +611,9 @@ void comp_main() AnnoImage anno_img; Alloc param_28; AnnoBeginClip anno_begin_clip; - Alloc param_32; + Alloc param_33; AnnoEndClip anno_end_clip; - Alloc param_36; + Alloc param_38; for (uint i_2 = 0u; i_2 < 8u; i_2++) { DrawMonoid m = row; @@ -582,8 +623,8 @@ void comp_main() DrawMonoid param_13 = local[i_2 - 1u]; m = combine_tag_monoid(param_12, param_13); } - _187.Store((out_base + (i_2 * 2u)) * 4 + 8, m.path_ix); - _187.Store(((out_base + (i_2 * 2u)) + 1u) * 4 + 8, m.clip_ix); + _199.Store((out_base + (i_2 * 2u)) * 4 + 8, m.path_ix); + _199.Store(((out_base + (i_2 * 2u)) + 1u) * 4 + 8, m.clip_ix); ElementRef param_14 = ref; uint param_15 = i_2; ElementRef this_ref = Element_index(param_14, param_15); @@ -591,22 +632,22 @@ void comp_main() tag_word = Element_tag(param_16).tag; if ((((tag_word == 4u) || (tag_word == 5u)) || (tag_word == 6u)) || (tag_word == 9u)) { - uint bbox_offset = (_968.Load(40) >> uint(2)) + (6u * m.path_ix); - float bbox_l = float(_187.Load(bbox_offset * 4 + 8)) - 32768.0f; - float bbox_t = float(_187.Load((bbox_offset + 1u) * 4 + 8)) - 32768.0f; - float bbox_r = float(_187.Load((bbox_offset + 2u) * 4 + 8)) - 32768.0f; - float bbox_b = float(_187.Load((bbox_offset + 3u) * 4 + 8)) - 32768.0f; + uint bbox_offset = (_1054.Load(40) >> uint(2)) + (6u * m.path_ix); + float bbox_l = float(_199.Load(bbox_offset * 4 + 8)) - 32768.0f; + float bbox_t = float(_199.Load((bbox_offset + 1u) * 4 + 8)) - 32768.0f; + float bbox_r = float(_199.Load((bbox_offset + 2u) * 4 + 8)) - 32768.0f; + float bbox_b = float(_199.Load((bbox_offset + 3u) * 4 + 8)) - 32768.0f; float4 bbox = float4(bbox_l, bbox_t, bbox_r, bbox_b); - float linewidth = asfloat(_187.Load((bbox_offset + 4u) * 4 + 8)); + float linewidth = asfloat(_199.Load((bbox_offset + 4u) * 4 + 8)); uint fill_mode = uint(linewidth >= 0.0f); if ((linewidth >= 0.0f) || (tag_word == 5u)) { - uint trans_ix = _187.Load((bbox_offset + 5u) * 4 + 8); - uint t = (_968.Load(36) >> uint(2)) + (6u * trans_ix); - mat = asfloat(uint4(_187.Load(t * 4 + 8), _187.Load((t + 1u) * 4 + 8), _187.Load((t + 2u) * 4 + 8), _187.Load((t + 3u) * 4 + 8))); + uint trans_ix = _199.Load((bbox_offset + 5u) * 4 + 8); + uint t = (_1054.Load(36) >> uint(2)) + (6u * trans_ix); + mat = asfloat(uint4(_199.Load(t * 4 + 8), _199.Load((t + 1u) * 4 + 8), _199.Load((t + 2u) * 4 + 8), _199.Load((t + 3u) * 4 + 8))); if (tag_word == 5u) { - translate = asfloat(uint2(_187.Load((t + 4u) * 4 + 8), _187.Load((t + 5u) * 4 + 8))); + translate = asfloat(uint2(_199.Load((t + 4u) * 4 + 8), _199.Load((t + 5u) * 4 + 8))); } } if (linewidth >= 0.0f) @@ -623,9 +664,9 @@ void comp_main() anno_fill.bbox = bbox; anno_fill.linewidth = linewidth; anno_fill.rgba_color = fill.rgba_color; - Alloc _1203; - _1203.offset = _968.Load(32); - param_18.offset = _1203.offset; + Alloc _1288; + _1288.offset = _1054.Load(32); + param_18.offset = _1288.offset; AnnotatedRef param_19 = out_ref; uint param_20 = fill_mode; AnnoColor param_21 = anno_fill; @@ -648,9 +689,9 @@ void comp_main() anno_lin.line_x = line_x; anno_lin.line_y = line_y; anno_lin.line_c = -((p0.x * line_x) + (p0.y * line_y)); - Alloc _1299; - _1299.offset = _968.Load(32); - param_23.offset = _1299.offset; + Alloc _1384; + _1384.offset = _1054.Load(32); + param_23.offset = _1384.offset; AnnotatedRef param_24 = out_ref; uint param_25 = fill_mode; AnnoLinGradient param_26 = anno_lin; @@ -665,9 +706,9 @@ void comp_main() anno_img.linewidth = linewidth; anno_img.index = fill_img.index; anno_img.offset = fill_img.offset; - Alloc _1327; - _1327.offset = _968.Load(32); - param_28.offset = _1327.offset; + Alloc _1412; + _1412.offset = _1054.Load(32); + param_28.offset = _1412.offset; AnnotatedRef param_29 = out_ref; uint param_30 = fill_mode; AnnoImage param_31 = anno_img; @@ -676,15 +717,19 @@ void comp_main() } case 9u: { + ElementRef param_32 = this_ref; + Clip begin_clip = Element_BeginClip_read(param_32); anno_begin_clip.bbox = bbox; anno_begin_clip.linewidth = 0.0f; - Alloc _1344; - _1344.offset = _968.Load(32); - param_32.offset = _1344.offset; - AnnotatedRef param_33 = out_ref; - uint param_34 = 0u; - AnnoBeginClip param_35 = anno_begin_clip; - Annotated_BeginClip_write(param_32, param_33, param_34, param_35); + anno_begin_clip.blend = begin_clip.blend; + uint flags = uint(begin_clip.blend != 3u) << uint(1); + Alloc _1442; + _1442.offset = _1054.Load(32); + param_33.offset = _1442.offset; + AnnotatedRef param_34 = out_ref; + uint param_35 = flags; + AnnoBeginClip param_36 = anno_begin_clip; + Annotated_BeginClip_write(param_33, param_34, param_35, param_36); break; } } @@ -693,13 +738,18 @@ void comp_main() { if (tag_word == 10u) { + ElementRef param_37 = this_ref; + Clip end_clip = Element_BeginClip_read(param_37); anno_end_clip.bbox = float4(-1000000000.0f, -1000000000.0f, 1000000000.0f, 1000000000.0f); - Alloc _1368; - _1368.offset = _968.Load(32); - param_36.offset = _1368.offset; - AnnotatedRef param_37 = out_ref; - AnnoEndClip param_38 = anno_end_clip; - Annotated_EndClip_write(param_36, param_37, param_38); + anno_end_clip.blend = end_clip.blend; + uint flags_1 = uint(end_clip.blend != 3u) << uint(1); + Alloc _1480; + _1480.offset = _1054.Load(32); + param_38.offset = _1480.offset; + AnnotatedRef param_39 = out_ref; + uint param_40 = flags_1; + AnnoEndClip param_41 = anno_end_clip; + Annotated_EndClip_write(param_38, param_39, param_40, param_41); } } if ((tag_word == 9u) || (tag_word == 10u)) @@ -709,7 +759,7 @@ void comp_main() { path_ix = m.path_ix; } - _187.Store((clip_out_base + m.clip_ix) * 4 + 8, path_ix); + _199.Store((clip_out_base + m.clip_ix) * 4 + 8, path_ix); } out_ref.offset += 40u; } diff --git a/piet-gpu/shader/gen/kernel4.dxil b/piet-gpu/shader/gen/kernel4.dxil index 0a14cfadf9936eadd03840634476303ab713f906..c0c27c9109628203e890e8e82c8e455a8a8f5520 100644 GIT binary patch literal 14236 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 literal 9872 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 F{RiR3cw+zn diff --git a/piet-gpu/shader/gen/kernel4.hlsl b/piet-gpu/shader/gen/kernel4.hlsl index 9457d14..21bd083 100644 --- a/piet-gpu/shader/gen/kernel4.hlsl +++ b/piet-gpu/shader/gen/kernel4.hlsl @@ -69,6 +69,16 @@ struct CmdAlpha float alpha; }; +struct CmdEndClipRef +{ + uint offset; +}; + +struct CmdEndClip +{ + uint blend; +}; + struct CmdJumpRef { uint offset; @@ -132,8 +142,8 @@ struct Config static const uint3 gl_WorkGroupSize = uint3(8u, 4u, 1u); -RWByteAddressBuffer _202 : register(u0, space0); -ByteAddressBuffer _723 : register(t1, space0); +RWByteAddressBuffer _278 : register(u0, space0); +ByteAddressBuffer _1521 : register(t1, space0); RWTexture2D image_atlas : register(u3, space0); RWTexture2D gradients : register(u4, space0); RWTexture2D image : register(u2, space0); @@ -160,8 +170,8 @@ float4 spvUnpackUnorm4x8(uint value) Alloc slice_mem(Alloc a, uint offset, uint size) { - Alloc _215 = { a.offset + offset }; - return _215; + Alloc _291 = { a.offset + offset }; + return _291; } bool touch_mem(Alloc alloc, uint offset) @@ -177,7 +187,7 @@ uint read_mem(Alloc alloc, uint offset) { return 0u; } - uint v = _202.Load(offset * 4 + 8); + uint v = _278.Load(offset * 4 + 8); return v; } @@ -186,8 +196,8 @@ CmdTag Cmd_tag(Alloc a, CmdRef ref) Alloc param = a; uint param_1 = ref.offset >> uint(2); uint tag_and_flags = read_mem(param, param_1); - CmdTag _432 = { tag_and_flags & 65535u, tag_and_flags >> uint(16) }; - return _432; + CmdTag _525 = { tag_and_flags & 65535u, tag_and_flags >> uint(16) }; + return _525; } CmdStroke CmdStroke_read(Alloc a, CmdStrokeRef ref) @@ -207,9 +217,9 @@ CmdStroke CmdStroke_read(Alloc a, CmdStrokeRef ref) CmdStroke Cmd_Stroke_read(Alloc a, CmdRef ref) { - CmdStrokeRef _449 = { ref.offset + 4u }; + CmdStrokeRef _542 = { ref.offset + 4u }; Alloc param = a; - CmdStrokeRef param_1 = _449; + CmdStrokeRef param_1 = _542; return CmdStroke_read(param, param_1); } @@ -245,8 +255,8 @@ TileSeg TileSeg_read(Alloc a, TileSegRef ref) s.origin = float2(asfloat(raw0), asfloat(raw1)); s._vector = float2(asfloat(raw2), asfloat(raw3)); s.y_edge = asfloat(raw4); - TileSegRef _572 = { raw5 }; - s.next = _572; + TileSegRef _675 = { raw5 }; + s.next = _675; return s; } @@ -272,9 +282,9 @@ CmdFill CmdFill_read(Alloc a, CmdFillRef ref) CmdFill Cmd_Fill_read(Alloc a, CmdRef ref) { - CmdFillRef _439 = { ref.offset + 4u }; + CmdFillRef _532 = { ref.offset + 4u }; Alloc param = a; - CmdFillRef param_1 = _439; + CmdFillRef param_1 = _532; return CmdFill_read(param, param_1); } @@ -291,9 +301,9 @@ CmdAlpha CmdAlpha_read(Alloc a, CmdAlphaRef ref) CmdAlpha Cmd_Alpha_read(Alloc a, CmdRef ref) { - CmdAlphaRef _459 = { ref.offset + 4u }; + CmdAlphaRef _552 = { ref.offset + 4u }; Alloc param = a; - CmdAlphaRef param_1 = _459; + CmdAlphaRef param_1 = _552; return CmdAlpha_read(param, param_1); } @@ -310,9 +320,9 @@ CmdColor CmdColor_read(Alloc a, CmdColorRef ref) CmdColor Cmd_Color_read(Alloc a, CmdRef ref) { - CmdColorRef _469 = { ref.offset + 4u }; + CmdColorRef _562 = { ref.offset + 4u }; Alloc param = a; - CmdColorRef param_1 = _469; + CmdColorRef param_1 = _562; return CmdColor_read(param, param_1); } @@ -356,9 +366,9 @@ CmdLinGrad CmdLinGrad_read(Alloc a, CmdLinGradRef ref) CmdLinGrad Cmd_LinGrad_read(Alloc a, CmdRef ref) { - CmdLinGradRef _479 = { ref.offset + 4u }; + CmdLinGradRef _572 = { ref.offset + 4u }; Alloc param = a; - CmdLinGradRef param_1 = _479; + CmdLinGradRef param_1 = _572; return CmdLinGrad_read(param, param_1); } @@ -379,9 +389,9 @@ CmdImage CmdImage_read(Alloc a, CmdImageRef ref) CmdImage Cmd_Image_read(Alloc a, CmdRef ref) { - CmdImageRef _489 = { ref.offset + 4u }; + CmdImageRef _582 = { ref.offset + 4u }; Alloc param = a; - CmdImageRef param_1 = _489; + CmdImageRef param_1 = _582; return CmdImage_read(param, param_1); } @@ -394,10 +404,10 @@ void fillImage(out float4 spvReturnValue[8], uint2 xy, CmdImage cmd_img) int2 uv = int2(xy + chunk_offset(param)) + cmd_img.offset; float4 fg_rgba = image_atlas[uv]; float3 param_1 = fg_rgba.xyz; - float3 _695 = fromsRGB(param_1); - fg_rgba.x = _695.x; - fg_rgba.y = _695.y; - fg_rgba.z = _695.z; + float3 _1493 = fromsRGB(param_1); + fg_rgba.x = _1493.x; + fg_rgba.y = _1493.y; + fg_rgba.z = _1493.z; rgba[i] = fg_rgba; } spvReturnValue = rgba; @@ -418,6 +428,438 @@ uint packsRGB(inout float4 rgba) return spvPackUnorm4x8(rgba.wzyx); } +CmdEndClip CmdEndClip_read(Alloc a, CmdEndClipRef ref) +{ + uint ix = ref.offset >> uint(2); + Alloc param = a; + uint param_1 = ix + 0u; + uint raw0 = read_mem(param, param_1); + CmdEndClip s; + s.blend = raw0; + return s; +} + +CmdEndClip Cmd_EndClip_read(Alloc a, CmdRef ref) +{ + CmdEndClipRef _592 = { ref.offset + 4u }; + Alloc param = a; + CmdEndClipRef param_1 = _592; + return CmdEndClip_read(param, param_1); +} + +float3 screen(float3 cb, float3 cs) +{ + return (cb + cs) - (cb * cs); +} + +float3 hard_light(float3 cb, float3 cs) +{ + float3 param = cb; + float3 param_1 = (cs * 2.0f) - 1.0f.xxx; + return lerp(screen(param, param_1), (cb * 2.0f) * cs, float3(bool3(cs.x <= 0.5f.xxx.x, cs.y <= 0.5f.xxx.y, cs.z <= 0.5f.xxx.z))); +} + +float color_dodge(float cb, float cs) +{ + if (cb == 0.0f) + { + return 0.0f; + } + else + { + if (cs == 1.0f) + { + return 1.0f; + } + else + { + return min(1.0f, cb / (1.0f - cs)); + } + } +} + +float color_burn(float cb, float cs) +{ + if (cb == 1.0f) + { + return 1.0f; + } + else + { + if (cs == 0.0f) + { + return 0.0f; + } + else + { + return 1.0f - min(1.0f, (1.0f - cb) / cs); + } + } +} + +float3 soft_light(float3 cb, float3 cs) +{ + float3 d = lerp(sqrt(cb), ((((cb * 16.0f) - 12.0f.xxx) * cb) + 4.0f.xxx) * cb, float3(bool3(cb.x <= 0.25f.xxx.x, cb.y <= 0.25f.xxx.y, cb.z <= 0.25f.xxx.z))); + return lerp(cb + (((cs * 2.0f) - 1.0f.xxx) * (d - cb)), cb - (((1.0f.xxx - (cs * 2.0f)) * cb) * (1.0f.xxx - cb)), float3(bool3(cs.x <= 0.5f.xxx.x, cs.y <= 0.5f.xxx.y, cs.z <= 0.5f.xxx.z))); +} + +float sat(float3 c) +{ + return max(c.x, max(c.y, c.z)) - min(c.x, min(c.y, c.z)); +} + +void set_sat_inner(inout float cmin, inout float cmid, inout float cmax, float s) +{ + if (cmax > cmin) + { + cmid = ((cmid - cmin) * s) / (cmax - cmin); + cmax = s; + } + else + { + cmid = 0.0f; + cmax = 0.0f; + } + cmin = 0.0f; +} + +float3 set_sat(inout float3 c, float s) +{ + if (c.x <= c.y) + { + if (c.y <= c.z) + { + float param = c.x; + float param_1 = c.y; + float param_2 = c.z; + float param_3 = s; + set_sat_inner(param, param_1, param_2, param_3); + c.x = param; + c.y = param_1; + c.z = param_2; + } + else + { + if (c.x <= c.z) + { + float param_4 = c.x; + float param_5 = c.z; + float param_6 = c.y; + float param_7 = s; + set_sat_inner(param_4, param_5, param_6, param_7); + c.x = param_4; + c.z = param_5; + c.y = param_6; + } + else + { + float param_8 = c.z; + float param_9 = c.x; + float param_10 = c.y; + float param_11 = s; + set_sat_inner(param_8, param_9, param_10, param_11); + c.z = param_8; + c.x = param_9; + c.y = param_10; + } + } + } + else + { + if (c.x <= c.z) + { + float param_12 = c.y; + float param_13 = c.x; + float param_14 = c.z; + float param_15 = s; + set_sat_inner(param_12, param_13, param_14, param_15); + c.y = param_12; + c.x = param_13; + c.z = param_14; + } + else + { + if (c.y <= c.z) + { + float param_16 = c.y; + float param_17 = c.z; + float param_18 = c.x; + float param_19 = s; + set_sat_inner(param_16, param_17, param_18, param_19); + c.y = param_16; + c.z = param_17; + c.x = param_18; + } + else + { + float param_20 = c.z; + float param_21 = c.y; + float param_22 = c.x; + float param_23 = s; + set_sat_inner(param_20, param_21, param_22, param_23); + c.z = param_20; + c.y = param_21; + c.x = param_22; + } + } + } + return c; +} + +float lum(float3 c) +{ + float3 f = float3(0.300000011920928955078125f, 0.589999973773956298828125f, 0.10999999940395355224609375f); + return dot(c, f); +} + +float3 clip_color(inout float3 c) +{ + float3 param = c; + float L = lum(param); + float n = min(c.x, min(c.y, c.z)); + float x = max(c.x, max(c.y, c.z)); + if (n < 0.0f) + { + c = L.xxx + (((c - L.xxx) * L) / (L - n).xxx); + } + if (x > 1.0f) + { + c = L.xxx + (((c - L.xxx) * (1.0f - L)) / (x - L).xxx); + } + return c; +} + +float3 set_lum(float3 c, float l) +{ + float3 param = c; + float3 param_1 = c + (l - lum(param)).xxx; + float3 _901 = clip_color(param_1); + return _901; +} + +float3 mix_blend(float3 cb, float3 cs, uint mode) +{ + float3 b = 0.0f.xxx; + switch (mode) + { + case 1u: + { + b = cb * cs; + break; + } + case 2u: + { + float3 param = cb; + float3 param_1 = cs; + b = screen(param, param_1); + break; + } + case 3u: + { + float3 param_2 = cs; + float3 param_3 = cb; + b = hard_light(param_2, param_3); + break; + } + case 4u: + { + b = min(cb, cs); + break; + } + case 5u: + { + b = max(cb, cs); + break; + } + case 6u: + { + float param_4 = cb.x; + float param_5 = cs.x; + float param_6 = cb.y; + float param_7 = cs.y; + float param_8 = cb.z; + float param_9 = cs.z; + b = float3(color_dodge(param_4, param_5), color_dodge(param_6, param_7), color_dodge(param_8, param_9)); + break; + } + case 7u: + { + float param_10 = cb.x; + float param_11 = cs.x; + float param_12 = cb.y; + float param_13 = cs.y; + float param_14 = cb.z; + float param_15 = cs.z; + b = float3(color_burn(param_10, param_11), color_burn(param_12, param_13), color_burn(param_14, param_15)); + break; + } + case 8u: + { + float3 param_16 = cb; + float3 param_17 = cs; + b = hard_light(param_16, param_17); + break; + } + case 9u: + { + float3 param_18 = cb; + float3 param_19 = cs; + b = soft_light(param_18, param_19); + break; + } + case 10u: + { + b = abs(cb - cs); + break; + } + case 11u: + { + b = (cb + cs) - ((cb * 2.0f) * cs); + break; + } + case 12u: + { + float3 param_20 = cb; + float3 param_21 = cs; + float param_22 = sat(param_20); + float3 _1192 = set_sat(param_21, param_22); + float3 param_23 = cb; + float3 param_24 = _1192; + float param_25 = lum(param_23); + b = set_lum(param_24, param_25); + break; + } + case 13u: + { + float3 param_26 = cs; + float3 param_27 = cb; + float param_28 = sat(param_26); + float3 _1206 = set_sat(param_27, param_28); + float3 param_29 = cb; + float3 param_30 = _1206; + float param_31 = lum(param_29); + b = set_lum(param_30, param_31); + break; + } + case 14u: + { + float3 param_32 = cb; + float3 param_33 = cs; + float param_34 = lum(param_32); + b = set_lum(param_33, param_34); + break; + } + case 15u: + { + float3 param_35 = cs; + float3 param_36 = cb; + float param_37 = lum(param_35); + b = set_lum(param_36, param_37); + break; + } + default: + { + b = cs; + break; + } + } + return b; +} + +float4 mix_compose(float3 cb, float3 cs, float ab, float as, uint mode) +{ + float fa = 0.0f; + float fb = 0.0f; + switch (mode) + { + case 1u: + { + fa = 1.0f; + fb = 0.0f; + break; + } + case 2u: + { + fa = 0.0f; + fb = 1.0f; + break; + } + case 3u: + { + fa = 1.0f; + fb = 1.0f - as; + break; + } + case 4u: + { + fa = 1.0f - ab; + fb = 1.0f; + break; + } + case 5u: + { + fa = ab; + fb = 0.0f; + break; + } + case 6u: + { + fa = 0.0f; + fb = as; + break; + } + case 7u: + { + fa = 1.0f - ab; + fb = 0.0f; + break; + } + case 8u: + { + fa = 0.0f; + fb = 1.0f - as; + break; + } + case 9u: + { + fa = ab; + fb = 1.0f - as; + break; + } + case 10u: + { + fa = 1.0f - ab; + fb = as; + break; + } + case 11u: + { + fa = 1.0f - ab; + fb = 1.0f - as; + break; + } + case 12u: + { + fa = 1.0f; + fb = 1.0f; + break; + } + case 13u: + { + return float4(max(0.0f.xxxx, ((1.0f.xxxx - (float4(cs, as) * as)) + 1.0f.xxxx) - (float4(cb, ab) * ab)).xyz, max(0.0f, ((1.0f - as) + 1.0f) - ab)); + } + case 14u: + { + return float4(min(1.0f.xxxx, (float4(cs, as) * as) + (float4(cb, ab) * ab)).xyz, min(1.0f, as + ab)); + } + default: + { + break; + } + } + return (float4(cs, as) * (as * fa)) + (float4(cb, ab) * (ab * fb)); +} + CmdJump CmdJump_read(Alloc a, CmdJumpRef ref) { uint ix = ref.offset >> uint(2); @@ -431,24 +873,24 @@ CmdJump CmdJump_read(Alloc a, CmdJumpRef ref) CmdJump Cmd_Jump_read(Alloc a, CmdRef ref) { - CmdJumpRef _499 = { ref.offset + 4u }; + CmdJumpRef _602 = { ref.offset + 4u }; Alloc param = a; - CmdJumpRef param_1 = _499; + CmdJumpRef param_1 = _602; return CmdJump_read(param, param_1); } void comp_main() { - uint tile_ix = (gl_WorkGroupID.y * _723.Load(8)) + gl_WorkGroupID.x; - Alloc _738; - _738.offset = _723.Load(24); + uint tile_ix = (gl_WorkGroupID.y * _1521.Load(8)) + gl_WorkGroupID.x; + Alloc _1536; + _1536.offset = _1521.Load(24); Alloc param; - param.offset = _738.offset; + param.offset = _1536.offset; uint param_1 = tile_ix * 1024u; uint param_2 = 1024u; Alloc cmd_alloc = slice_mem(param, param_1, param_2); - CmdRef _747 = { cmd_alloc.offset }; - CmdRef cmd_ref = _747; + CmdRef _1545 = { cmd_alloc.offset }; + CmdRef cmd_ref = _1545; uint2 xy_uint = uint2(gl_LocalInvocationID.x + (16u * gl_WorkGroupID.x), gl_LocalInvocationID.y + (16u * gl_WorkGroupID.y)); float2 xy = float2(xy_uint); float4 rgba[8]; @@ -457,7 +899,7 @@ void comp_main() rgba[i] = 0.0f.xxxx; } uint clip_depth = 0u; - bool mem_ok = _202.Load(4) == 0u; + bool mem_ok = _278.Load(4) == 0u; float df[8]; TileSegRef tile_seg_ref; float area[8]; @@ -482,8 +924,8 @@ void comp_main() { df[k] = 1000000000.0f; } - TileSegRef _842 = { stroke.tile_ref }; - tile_seg_ref = _842; + TileSegRef _1638 = { stroke.tile_ref }; + tile_seg_ref = _1638; do { uint param_7 = tile_seg_ref.offset; @@ -519,8 +961,8 @@ void comp_main() { area[k_3] = float(fill.backdrop); } - TileSegRef _964 = { fill.tile_ref }; - tile_seg_ref = _964; + TileSegRef _1758 = { fill.tile_ref }; + tile_seg_ref = _1758; do { uint param_15 = tile_seg_ref.offset; @@ -609,10 +1051,10 @@ void comp_main() int x = int(round(clamp(my_d, 0.0f, 1.0f) * 511.0f)); float4 fg_rgba = gradients[int2(x, int(lin.index))]; float3 param_29 = fg_rgba.xyz; - float3 _1298 = fromsRGB(param_29); - fg_rgba.x = _1298.x; - fg_rgba.y = _1298.y; - fg_rgba.z = _1298.z; + float3 _2092 = fromsRGB(param_29); + fg_rgba.x = _2092.x; + fg_rgba.y = _2092.y; + fg_rgba.z = _2092.z; rgba[k_9] = fg_rgba; } cmd_ref.offset += 20u; @@ -625,9 +1067,9 @@ void comp_main() CmdImage fill_img = Cmd_Image_read(param_30, param_31); uint2 param_32 = xy_uint; CmdImage param_33 = fill_img; - float4 _1327[8]; - fillImage(_1327, param_32, param_33); - float4 img[8] = _1327; + float4 _2121[8]; + fillImage(_2121, param_32, param_33); + float4 img[8] = _2121; for (uint k_10 = 0u; k_10 < 8u; k_10++) { float4 fg_k_1 = img[k_10] * area[k_10]; @@ -642,8 +1084,8 @@ void comp_main() { uint d_2 = min(clip_depth, 127u); float4 param_34 = float4(rgba[k_11]); - uint _1390 = packsRGB(param_34); - blend_stack[d_2][k_11] = _1390; + uint _2184 = packsRGB(param_34); + blend_stack[d_2][k_11] = _2184; rgba[k_11] = 0.0f.xxxx; } clip_depth++; @@ -652,24 +1094,44 @@ void comp_main() } case 9u: { + Alloc param_35 = cmd_alloc; + CmdRef param_36 = cmd_ref; + CmdEndClip end_clip = Cmd_EndClip_read(param_35, param_36); + uint blend_mode = end_clip.blend >> uint(8); + uint comp_mode = end_clip.blend & 255u; clip_depth--; for (uint k_12 = 0u; k_12 < 8u; k_12++) { uint d_3 = min(clip_depth, 127u); - uint param_35 = blend_stack[d_3][k_12]; - float4 bg = unpacksRGB(param_35); + uint param_37 = blend_stack[d_3][k_12]; + float4 bg = unpacksRGB(param_37); float4 fg_1 = rgba[k_12] * area[k_12]; - rgba[k_12] = (bg * (1.0f - fg_1.w)) + fg_1; + float3 param_38 = bg.xyz; + float3 param_39 = fg_1.xyz; + uint param_40 = blend_mode; + float3 blend = mix_blend(param_38, param_39, param_40); + float4 _2251 = fg_1; + float _2255 = fg_1.w; + float3 _2262 = lerp(_2251.xyz, blend, float((_2255 * bg.w) > 0.0f).xxx); + fg_1.x = _2262.x; + fg_1.y = _2262.y; + fg_1.z = _2262.z; + float3 param_41 = bg.xyz; + float3 param_42 = fg_1.xyz; + float param_43 = bg.w; + float param_44 = fg_1.w; + uint param_45 = comp_mode; + rgba[k_12] = mix_compose(param_41, param_42, param_43, param_44, param_45); } - cmd_ref.offset += 4u; + cmd_ref.offset += 8u; break; } case 10u: { - Alloc param_36 = cmd_alloc; - CmdRef param_37 = cmd_ref; - CmdRef _1453 = { Cmd_Jump_read(param_36, param_37).new_ref }; - cmd_ref = _1453; + Alloc param_46 = cmd_alloc; + CmdRef param_47 = cmd_ref; + CmdRef _2299 = { Cmd_Jump_read(param_46, param_47).new_ref }; + cmd_ref = _2299; cmd_alloc.offset = cmd_ref.offset; break; } @@ -677,9 +1139,9 @@ void comp_main() } for (uint i_1 = 0u; i_1 < 8u; i_1++) { - uint param_38 = i_1; - float3 param_39 = rgba[i_1].xyz; - image[int2(xy_uint + chunk_offset(param_38))] = float4(tosRGB(param_39), rgba[i_1].w); + uint param_48 = i_1; + float3 param_49 = rgba[i_1].xyz; + image[int2(xy_uint + chunk_offset(param_48))] = float4(tosRGB(param_49), rgba[i_1].w); } } diff --git a/piet-gpu/shader/gen/kernel4.msl b/piet-gpu/shader/gen/kernel4.msl index b58218c..9a8fbd0 100644 --- a/piet-gpu/shader/gen/kernel4.msl +++ b/piet-gpu/shader/gen/kernel4.msl @@ -511,7 +511,7 @@ float3 hard_light(thread const float3& cb, thread const float3& cs) { float3 param = cb; float3 param_1 = (cs * 2.0) - float3(1.0); - return mix(screen(param, param_1), (cb * 2.0) * cs, select(float3(0.0), float3(1.0), cs <= float3(0.5))); + return mix(screen(param, param_1), (cb * 2.0) * cs, float3(cs <= float3(0.5))); } static inline __attribute__((always_inline)) @@ -557,8 +557,8 @@ float color_burn(thread const float& cb, thread const float& cs) static inline __attribute__((always_inline)) float3 soft_light(thread const float3& cb, thread const float3& cs) { - float3 d = mix(sqrt(cb), ((((cb * 16.0) - float3(12.0)) * cb) + float3(4.0)) * cb, select(float3(0.0), float3(1.0), cb <= float3(0.25))); - return mix(cb + (((cs * 2.0) - float3(1.0)) * (d - cb)), cb - (((float3(1.0) - (cs * 2.0)) * cb) * (float3(1.0) - cb)), select(float3(0.0), float3(1.0), cs <= float3(0.5))); + float3 d = mix(sqrt(cb), ((((cb * 16.0) - float3(12.0)) * cb) + float3(4.0)) * cb, float3(cb <= float3(0.25))); + return mix(cb + (((cs * 2.0) - float3(1.0)) * (d - cb)), cb - (((float3(1.0) - (cs * 2.0)) * cb) * (float3(1.0) - cb)), float3(cs <= float3(0.5))); } static inline __attribute__((always_inline)) diff --git a/piet-gpu/shader/gen/kernel4_gray.dxil b/piet-gpu/shader/gen/kernel4_gray.dxil index f3bd028fbd66f475e8d8e6d61b968fddfa1dd9b9..18c4b7eab4faa745a72e49be704b48803ad300d8 100644 GIT binary patch literal 14140 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⁡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 diff --git a/piet-gpu/shader/gen/kernel4_gray.hlsl b/piet-gpu/shader/gen/kernel4_gray.hlsl index 5ff97fb..7dc2e01 100644 --- a/piet-gpu/shader/gen/kernel4_gray.hlsl +++ b/piet-gpu/shader/gen/kernel4_gray.hlsl @@ -69,6 +69,16 @@ struct CmdAlpha float alpha; }; +struct CmdEndClipRef +{ + uint offset; +}; + +struct CmdEndClip +{ + uint blend; +}; + struct CmdJumpRef { uint offset; @@ -132,8 +142,8 @@ struct Config static const uint3 gl_WorkGroupSize = uint3(8u, 4u, 1u); -RWByteAddressBuffer _202 : register(u0, space0); -ByteAddressBuffer _723 : register(t1, space0); +RWByteAddressBuffer _278 : register(u0, space0); +ByteAddressBuffer _1521 : register(t1, space0); RWTexture2D image_atlas : register(u3, space0); RWTexture2D gradients : register(u4, space0); RWTexture2D image : register(u2, space0); @@ -160,8 +170,8 @@ float4 spvUnpackUnorm4x8(uint value) Alloc slice_mem(Alloc a, uint offset, uint size) { - Alloc _215 = { a.offset + offset }; - return _215; + Alloc _291 = { a.offset + offset }; + return _291; } bool touch_mem(Alloc alloc, uint offset) @@ -177,7 +187,7 @@ uint read_mem(Alloc alloc, uint offset) { return 0u; } - uint v = _202.Load(offset * 4 + 8); + uint v = _278.Load(offset * 4 + 8); return v; } @@ -186,8 +196,8 @@ CmdTag Cmd_tag(Alloc a, CmdRef ref) Alloc param = a; uint param_1 = ref.offset >> uint(2); uint tag_and_flags = read_mem(param, param_1); - CmdTag _432 = { tag_and_flags & 65535u, tag_and_flags >> uint(16) }; - return _432; + CmdTag _525 = { tag_and_flags & 65535u, tag_and_flags >> uint(16) }; + return _525; } CmdStroke CmdStroke_read(Alloc a, CmdStrokeRef ref) @@ -207,9 +217,9 @@ CmdStroke CmdStroke_read(Alloc a, CmdStrokeRef ref) CmdStroke Cmd_Stroke_read(Alloc a, CmdRef ref) { - CmdStrokeRef _449 = { ref.offset + 4u }; + CmdStrokeRef _542 = { ref.offset + 4u }; Alloc param = a; - CmdStrokeRef param_1 = _449; + CmdStrokeRef param_1 = _542; return CmdStroke_read(param, param_1); } @@ -245,8 +255,8 @@ TileSeg TileSeg_read(Alloc a, TileSegRef ref) s.origin = float2(asfloat(raw0), asfloat(raw1)); s._vector = float2(asfloat(raw2), asfloat(raw3)); s.y_edge = asfloat(raw4); - TileSegRef _572 = { raw5 }; - s.next = _572; + TileSegRef _675 = { raw5 }; + s.next = _675; return s; } @@ -272,9 +282,9 @@ CmdFill CmdFill_read(Alloc a, CmdFillRef ref) CmdFill Cmd_Fill_read(Alloc a, CmdRef ref) { - CmdFillRef _439 = { ref.offset + 4u }; + CmdFillRef _532 = { ref.offset + 4u }; Alloc param = a; - CmdFillRef param_1 = _439; + CmdFillRef param_1 = _532; return CmdFill_read(param, param_1); } @@ -291,9 +301,9 @@ CmdAlpha CmdAlpha_read(Alloc a, CmdAlphaRef ref) CmdAlpha Cmd_Alpha_read(Alloc a, CmdRef ref) { - CmdAlphaRef _459 = { ref.offset + 4u }; + CmdAlphaRef _552 = { ref.offset + 4u }; Alloc param = a; - CmdAlphaRef param_1 = _459; + CmdAlphaRef param_1 = _552; return CmdAlpha_read(param, param_1); } @@ -310,9 +320,9 @@ CmdColor CmdColor_read(Alloc a, CmdColorRef ref) CmdColor Cmd_Color_read(Alloc a, CmdRef ref) { - CmdColorRef _469 = { ref.offset + 4u }; + CmdColorRef _562 = { ref.offset + 4u }; Alloc param = a; - CmdColorRef param_1 = _469; + CmdColorRef param_1 = _562; return CmdColor_read(param, param_1); } @@ -356,9 +366,9 @@ CmdLinGrad CmdLinGrad_read(Alloc a, CmdLinGradRef ref) CmdLinGrad Cmd_LinGrad_read(Alloc a, CmdRef ref) { - CmdLinGradRef _479 = { ref.offset + 4u }; + CmdLinGradRef _572 = { ref.offset + 4u }; Alloc param = a; - CmdLinGradRef param_1 = _479; + CmdLinGradRef param_1 = _572; return CmdLinGrad_read(param, param_1); } @@ -379,9 +389,9 @@ CmdImage CmdImage_read(Alloc a, CmdImageRef ref) CmdImage Cmd_Image_read(Alloc a, CmdRef ref) { - CmdImageRef _489 = { ref.offset + 4u }; + CmdImageRef _582 = { ref.offset + 4u }; Alloc param = a; - CmdImageRef param_1 = _489; + CmdImageRef param_1 = _582; return CmdImage_read(param, param_1); } @@ -394,10 +404,10 @@ void fillImage(out float4 spvReturnValue[8], uint2 xy, CmdImage cmd_img) int2 uv = int2(xy + chunk_offset(param)) + cmd_img.offset; float4 fg_rgba = image_atlas[uv]; float3 param_1 = fg_rgba.xyz; - float3 _695 = fromsRGB(param_1); - fg_rgba.x = _695.x; - fg_rgba.y = _695.y; - fg_rgba.z = _695.z; + float3 _1493 = fromsRGB(param_1); + fg_rgba.x = _1493.x; + fg_rgba.y = _1493.y; + fg_rgba.z = _1493.z; rgba[i] = fg_rgba; } spvReturnValue = rgba; @@ -418,6 +428,438 @@ uint packsRGB(inout float4 rgba) return spvPackUnorm4x8(rgba.wzyx); } +CmdEndClip CmdEndClip_read(Alloc a, CmdEndClipRef ref) +{ + uint ix = ref.offset >> uint(2); + Alloc param = a; + uint param_1 = ix + 0u; + uint raw0 = read_mem(param, param_1); + CmdEndClip s; + s.blend = raw0; + return s; +} + +CmdEndClip Cmd_EndClip_read(Alloc a, CmdRef ref) +{ + CmdEndClipRef _592 = { ref.offset + 4u }; + Alloc param = a; + CmdEndClipRef param_1 = _592; + return CmdEndClip_read(param, param_1); +} + +float3 screen(float3 cb, float3 cs) +{ + return (cb + cs) - (cb * cs); +} + +float3 hard_light(float3 cb, float3 cs) +{ + float3 param = cb; + float3 param_1 = (cs * 2.0f) - 1.0f.xxx; + return lerp(screen(param, param_1), (cb * 2.0f) * cs, float3(bool3(cs.x <= 0.5f.xxx.x, cs.y <= 0.5f.xxx.y, cs.z <= 0.5f.xxx.z))); +} + +float color_dodge(float cb, float cs) +{ + if (cb == 0.0f) + { + return 0.0f; + } + else + { + if (cs == 1.0f) + { + return 1.0f; + } + else + { + return min(1.0f, cb / (1.0f - cs)); + } + } +} + +float color_burn(float cb, float cs) +{ + if (cb == 1.0f) + { + return 1.0f; + } + else + { + if (cs == 0.0f) + { + return 0.0f; + } + else + { + return 1.0f - min(1.0f, (1.0f - cb) / cs); + } + } +} + +float3 soft_light(float3 cb, float3 cs) +{ + float3 d = lerp(sqrt(cb), ((((cb * 16.0f) - 12.0f.xxx) * cb) + 4.0f.xxx) * cb, float3(bool3(cb.x <= 0.25f.xxx.x, cb.y <= 0.25f.xxx.y, cb.z <= 0.25f.xxx.z))); + return lerp(cb + (((cs * 2.0f) - 1.0f.xxx) * (d - cb)), cb - (((1.0f.xxx - (cs * 2.0f)) * cb) * (1.0f.xxx - cb)), float3(bool3(cs.x <= 0.5f.xxx.x, cs.y <= 0.5f.xxx.y, cs.z <= 0.5f.xxx.z))); +} + +float sat(float3 c) +{ + return max(c.x, max(c.y, c.z)) - min(c.x, min(c.y, c.z)); +} + +void set_sat_inner(inout float cmin, inout float cmid, inout float cmax, float s) +{ + if (cmax > cmin) + { + cmid = ((cmid - cmin) * s) / (cmax - cmin); + cmax = s; + } + else + { + cmid = 0.0f; + cmax = 0.0f; + } + cmin = 0.0f; +} + +float3 set_sat(inout float3 c, float s) +{ + if (c.x <= c.y) + { + if (c.y <= c.z) + { + float param = c.x; + float param_1 = c.y; + float param_2 = c.z; + float param_3 = s; + set_sat_inner(param, param_1, param_2, param_3); + c.x = param; + c.y = param_1; + c.z = param_2; + } + else + { + if (c.x <= c.z) + { + float param_4 = c.x; + float param_5 = c.z; + float param_6 = c.y; + float param_7 = s; + set_sat_inner(param_4, param_5, param_6, param_7); + c.x = param_4; + c.z = param_5; + c.y = param_6; + } + else + { + float param_8 = c.z; + float param_9 = c.x; + float param_10 = c.y; + float param_11 = s; + set_sat_inner(param_8, param_9, param_10, param_11); + c.z = param_8; + c.x = param_9; + c.y = param_10; + } + } + } + else + { + if (c.x <= c.z) + { + float param_12 = c.y; + float param_13 = c.x; + float param_14 = c.z; + float param_15 = s; + set_sat_inner(param_12, param_13, param_14, param_15); + c.y = param_12; + c.x = param_13; + c.z = param_14; + } + else + { + if (c.y <= c.z) + { + float param_16 = c.y; + float param_17 = c.z; + float param_18 = c.x; + float param_19 = s; + set_sat_inner(param_16, param_17, param_18, param_19); + c.y = param_16; + c.z = param_17; + c.x = param_18; + } + else + { + float param_20 = c.z; + float param_21 = c.y; + float param_22 = c.x; + float param_23 = s; + set_sat_inner(param_20, param_21, param_22, param_23); + c.z = param_20; + c.y = param_21; + c.x = param_22; + } + } + } + return c; +} + +float lum(float3 c) +{ + float3 f = float3(0.300000011920928955078125f, 0.589999973773956298828125f, 0.10999999940395355224609375f); + return dot(c, f); +} + +float3 clip_color(inout float3 c) +{ + float3 param = c; + float L = lum(param); + float n = min(c.x, min(c.y, c.z)); + float x = max(c.x, max(c.y, c.z)); + if (n < 0.0f) + { + c = L.xxx + (((c - L.xxx) * L) / (L - n).xxx); + } + if (x > 1.0f) + { + c = L.xxx + (((c - L.xxx) * (1.0f - L)) / (x - L).xxx); + } + return c; +} + +float3 set_lum(float3 c, float l) +{ + float3 param = c; + float3 param_1 = c + (l - lum(param)).xxx; + float3 _901 = clip_color(param_1); + return _901; +} + +float3 mix_blend(float3 cb, float3 cs, uint mode) +{ + float3 b = 0.0f.xxx; + switch (mode) + { + case 1u: + { + b = cb * cs; + break; + } + case 2u: + { + float3 param = cb; + float3 param_1 = cs; + b = screen(param, param_1); + break; + } + case 3u: + { + float3 param_2 = cs; + float3 param_3 = cb; + b = hard_light(param_2, param_3); + break; + } + case 4u: + { + b = min(cb, cs); + break; + } + case 5u: + { + b = max(cb, cs); + break; + } + case 6u: + { + float param_4 = cb.x; + float param_5 = cs.x; + float param_6 = cb.y; + float param_7 = cs.y; + float param_8 = cb.z; + float param_9 = cs.z; + b = float3(color_dodge(param_4, param_5), color_dodge(param_6, param_7), color_dodge(param_8, param_9)); + break; + } + case 7u: + { + float param_10 = cb.x; + float param_11 = cs.x; + float param_12 = cb.y; + float param_13 = cs.y; + float param_14 = cb.z; + float param_15 = cs.z; + b = float3(color_burn(param_10, param_11), color_burn(param_12, param_13), color_burn(param_14, param_15)); + break; + } + case 8u: + { + float3 param_16 = cb; + float3 param_17 = cs; + b = hard_light(param_16, param_17); + break; + } + case 9u: + { + float3 param_18 = cb; + float3 param_19 = cs; + b = soft_light(param_18, param_19); + break; + } + case 10u: + { + b = abs(cb - cs); + break; + } + case 11u: + { + b = (cb + cs) - ((cb * 2.0f) * cs); + break; + } + case 12u: + { + float3 param_20 = cb; + float3 param_21 = cs; + float param_22 = sat(param_20); + float3 _1192 = set_sat(param_21, param_22); + float3 param_23 = cb; + float3 param_24 = _1192; + float param_25 = lum(param_23); + b = set_lum(param_24, param_25); + break; + } + case 13u: + { + float3 param_26 = cs; + float3 param_27 = cb; + float param_28 = sat(param_26); + float3 _1206 = set_sat(param_27, param_28); + float3 param_29 = cb; + float3 param_30 = _1206; + float param_31 = lum(param_29); + b = set_lum(param_30, param_31); + break; + } + case 14u: + { + float3 param_32 = cb; + float3 param_33 = cs; + float param_34 = lum(param_32); + b = set_lum(param_33, param_34); + break; + } + case 15u: + { + float3 param_35 = cs; + float3 param_36 = cb; + float param_37 = lum(param_35); + b = set_lum(param_36, param_37); + break; + } + default: + { + b = cs; + break; + } + } + return b; +} + +float4 mix_compose(float3 cb, float3 cs, float ab, float as, uint mode) +{ + float fa = 0.0f; + float fb = 0.0f; + switch (mode) + { + case 1u: + { + fa = 1.0f; + fb = 0.0f; + break; + } + case 2u: + { + fa = 0.0f; + fb = 1.0f; + break; + } + case 3u: + { + fa = 1.0f; + fb = 1.0f - as; + break; + } + case 4u: + { + fa = 1.0f - ab; + fb = 1.0f; + break; + } + case 5u: + { + fa = ab; + fb = 0.0f; + break; + } + case 6u: + { + fa = 0.0f; + fb = as; + break; + } + case 7u: + { + fa = 1.0f - ab; + fb = 0.0f; + break; + } + case 8u: + { + fa = 0.0f; + fb = 1.0f - as; + break; + } + case 9u: + { + fa = ab; + fb = 1.0f - as; + break; + } + case 10u: + { + fa = 1.0f - ab; + fb = as; + break; + } + case 11u: + { + fa = 1.0f - ab; + fb = 1.0f - as; + break; + } + case 12u: + { + fa = 1.0f; + fb = 1.0f; + break; + } + case 13u: + { + return float4(max(0.0f.xxxx, ((1.0f.xxxx - (float4(cs, as) * as)) + 1.0f.xxxx) - (float4(cb, ab) * ab)).xyz, max(0.0f, ((1.0f - as) + 1.0f) - ab)); + } + case 14u: + { + return float4(min(1.0f.xxxx, (float4(cs, as) * as) + (float4(cb, ab) * ab)).xyz, min(1.0f, as + ab)); + } + default: + { + break; + } + } + return (float4(cs, as) * (as * fa)) + (float4(cb, ab) * (ab * fb)); +} + CmdJump CmdJump_read(Alloc a, CmdJumpRef ref) { uint ix = ref.offset >> uint(2); @@ -431,24 +873,24 @@ CmdJump CmdJump_read(Alloc a, CmdJumpRef ref) CmdJump Cmd_Jump_read(Alloc a, CmdRef ref) { - CmdJumpRef _499 = { ref.offset + 4u }; + CmdJumpRef _602 = { ref.offset + 4u }; Alloc param = a; - CmdJumpRef param_1 = _499; + CmdJumpRef param_1 = _602; return CmdJump_read(param, param_1); } void comp_main() { - uint tile_ix = (gl_WorkGroupID.y * _723.Load(8)) + gl_WorkGroupID.x; - Alloc _738; - _738.offset = _723.Load(24); + uint tile_ix = (gl_WorkGroupID.y * _1521.Load(8)) + gl_WorkGroupID.x; + Alloc _1536; + _1536.offset = _1521.Load(24); Alloc param; - param.offset = _738.offset; + param.offset = _1536.offset; uint param_1 = tile_ix * 1024u; uint param_2 = 1024u; Alloc cmd_alloc = slice_mem(param, param_1, param_2); - CmdRef _747 = { cmd_alloc.offset }; - CmdRef cmd_ref = _747; + CmdRef _1545 = { cmd_alloc.offset }; + CmdRef cmd_ref = _1545; uint2 xy_uint = uint2(gl_LocalInvocationID.x + (16u * gl_WorkGroupID.x), gl_LocalInvocationID.y + (16u * gl_WorkGroupID.y)); float2 xy = float2(xy_uint); float4 rgba[8]; @@ -457,7 +899,7 @@ void comp_main() rgba[i] = 0.0f.xxxx; } uint clip_depth = 0u; - bool mem_ok = _202.Load(4) == 0u; + bool mem_ok = _278.Load(4) == 0u; float df[8]; TileSegRef tile_seg_ref; float area[8]; @@ -482,8 +924,8 @@ void comp_main() { df[k] = 1000000000.0f; } - TileSegRef _842 = { stroke.tile_ref }; - tile_seg_ref = _842; + TileSegRef _1638 = { stroke.tile_ref }; + tile_seg_ref = _1638; do { uint param_7 = tile_seg_ref.offset; @@ -519,8 +961,8 @@ void comp_main() { area[k_3] = float(fill.backdrop); } - TileSegRef _964 = { fill.tile_ref }; - tile_seg_ref = _964; + TileSegRef _1758 = { fill.tile_ref }; + tile_seg_ref = _1758; do { uint param_15 = tile_seg_ref.offset; @@ -609,10 +1051,10 @@ void comp_main() int x = int(round(clamp(my_d, 0.0f, 1.0f) * 511.0f)); float4 fg_rgba = gradients[int2(x, int(lin.index))]; float3 param_29 = fg_rgba.xyz; - float3 _1298 = fromsRGB(param_29); - fg_rgba.x = _1298.x; - fg_rgba.y = _1298.y; - fg_rgba.z = _1298.z; + float3 _2092 = fromsRGB(param_29); + fg_rgba.x = _2092.x; + fg_rgba.y = _2092.y; + fg_rgba.z = _2092.z; rgba[k_9] = fg_rgba; } cmd_ref.offset += 20u; @@ -625,9 +1067,9 @@ void comp_main() CmdImage fill_img = Cmd_Image_read(param_30, param_31); uint2 param_32 = xy_uint; CmdImage param_33 = fill_img; - float4 _1327[8]; - fillImage(_1327, param_32, param_33); - float4 img[8] = _1327; + float4 _2121[8]; + fillImage(_2121, param_32, param_33); + float4 img[8] = _2121; for (uint k_10 = 0u; k_10 < 8u; k_10++) { float4 fg_k_1 = img[k_10] * area[k_10]; @@ -642,8 +1084,8 @@ void comp_main() { uint d_2 = min(clip_depth, 127u); float4 param_34 = float4(rgba[k_11]); - uint _1390 = packsRGB(param_34); - blend_stack[d_2][k_11] = _1390; + uint _2184 = packsRGB(param_34); + blend_stack[d_2][k_11] = _2184; rgba[k_11] = 0.0f.xxxx; } clip_depth++; @@ -652,24 +1094,44 @@ void comp_main() } case 9u: { + Alloc param_35 = cmd_alloc; + CmdRef param_36 = cmd_ref; + CmdEndClip end_clip = Cmd_EndClip_read(param_35, param_36); + uint blend_mode = end_clip.blend >> uint(8); + uint comp_mode = end_clip.blend & 255u; clip_depth--; for (uint k_12 = 0u; k_12 < 8u; k_12++) { uint d_3 = min(clip_depth, 127u); - uint param_35 = blend_stack[d_3][k_12]; - float4 bg = unpacksRGB(param_35); + uint param_37 = blend_stack[d_3][k_12]; + float4 bg = unpacksRGB(param_37); float4 fg_1 = rgba[k_12] * area[k_12]; - rgba[k_12] = (bg * (1.0f - fg_1.w)) + fg_1; + float3 param_38 = bg.xyz; + float3 param_39 = fg_1.xyz; + uint param_40 = blend_mode; + float3 blend = mix_blend(param_38, param_39, param_40); + float4 _2251 = fg_1; + float _2255 = fg_1.w; + float3 _2262 = lerp(_2251.xyz, blend, float((_2255 * bg.w) > 0.0f).xxx); + fg_1.x = _2262.x; + fg_1.y = _2262.y; + fg_1.z = _2262.z; + float3 param_41 = bg.xyz; + float3 param_42 = fg_1.xyz; + float param_43 = bg.w; + float param_44 = fg_1.w; + uint param_45 = comp_mode; + rgba[k_12] = mix_compose(param_41, param_42, param_43, param_44, param_45); } - cmd_ref.offset += 4u; + cmd_ref.offset += 8u; break; } case 10u: { - Alloc param_36 = cmd_alloc; - CmdRef param_37 = cmd_ref; - CmdRef _1453 = { Cmd_Jump_read(param_36, param_37).new_ref }; - cmd_ref = _1453; + Alloc param_46 = cmd_alloc; + CmdRef param_47 = cmd_ref; + CmdRef _2299 = { Cmd_Jump_read(param_46, param_47).new_ref }; + cmd_ref = _2299; cmd_alloc.offset = cmd_ref.offset; break; } @@ -677,8 +1139,8 @@ void comp_main() } for (uint i_1 = 0u; i_1 < 8u; i_1++) { - uint param_38 = i_1; - image[int2(xy_uint + chunk_offset(param_38))] = rgba[i_1].w.x; + uint param_48 = i_1; + image[int2(xy_uint + chunk_offset(param_48))] = rgba[i_1].w.x; } } diff --git a/piet-gpu/shader/gen/kernel4_gray.msl b/piet-gpu/shader/gen/kernel4_gray.msl index a318ed7..38506dd 100644 --- a/piet-gpu/shader/gen/kernel4_gray.msl +++ b/piet-gpu/shader/gen/kernel4_gray.msl @@ -454,10 +454,10 @@ spvUnsafeArray fillImage(thread const uint2& xy, thread const CmdImag int2 uv = int2(xy + chunk_offset(param)) + cmd_img.offset; float4 fg_rgba = image_atlas.read(uint2(uv)); float3 param_1 = fg_rgba.xyz; - float3 _1495 = fromsRGB(param_1); - fg_rgba.x = _1495.x; - fg_rgba.y = _1495.y; - fg_rgba.z = _1495.z; + float3 _1493 = fromsRGB(param_1); + fg_rgba.x = _1493.x; + fg_rgba.y = _1493.y; + fg_rgba.z = _1493.z; rgba[i] = fg_rgba; } return rgba; @@ -511,7 +511,7 @@ float3 hard_light(thread const float3& cb, thread const float3& cs) { float3 param = cb; float3 param_1 = (cs * 2.0) - float3(1.0); - return mix(screen(param, param_1), (cb * 2.0) * cs, select(float3(0.0), float3(1.0), cs <= float3(0.5))); + return mix(screen(param, param_1), (cb * 2.0) * cs, float3(cs <= float3(0.5))); } static inline __attribute__((always_inline)) @@ -557,8 +557,8 @@ float color_burn(thread const float& cb, thread const float& cs) static inline __attribute__((always_inline)) float3 soft_light(thread const float3& cb, thread const float3& cs) { - float3 d = mix(sqrt(cb), ((((cb * 16.0) - float3(12.0)) * cb) + float3(4.0)) * cb, select(float3(0.0), float3(1.0), cb <= float3(0.25))); - return mix(cb + (((cs * 2.0) - float3(1.0)) * (d - cb)), cb - (((float3(1.0) - (cs * 2.0)) * cb) * (float3(1.0) - cb)), select(float3(0.0), float3(1.0), cs <= float3(0.5))); + float3 d = mix(sqrt(cb), ((((cb * 16.0) - float3(12.0)) * cb) + float3(4.0)) * cb, float3(cb <= float3(0.25))); + return mix(cb + (((cs * 2.0) - float3(1.0)) * (d - cb)), cb - (((float3(1.0) - (cs * 2.0)) * cb) * (float3(1.0) - cb)), float3(cs <= float3(0.5))); } static inline __attribute__((always_inline)) @@ -568,103 +568,103 @@ float sat(thread const float3& c) } static inline __attribute__((always_inline)) -void SetSatInner(thread float& Cmin, thread float& Cmid, thread float& Cmax, thread const float& s) +void set_sat_inner(thread float& cmin, thread float& cmid, thread float& cmax, thread const float& s) { - if (Cmax > Cmin) + if (cmax > cmin) { - Cmid = ((Cmid - Cmin) * s) / (Cmax - Cmin); - Cmax = s; + cmid = ((cmid - cmin) * s) / (cmax - cmin); + cmax = s; } else { - Cmid = 0.0; - Cmax = 0.0; + cmid = 0.0; + cmax = 0.0; } - Cmin = 0.0; + cmin = 0.0; } static inline __attribute__((always_inline)) -float3 set_sat(thread float3& C, thread const float& s) +float3 set_sat(thread float3& c, thread const float& s) { - if (C.x <= C.y) + if (c.x <= c.y) { - if (C.y <= C.z) + if (c.y <= c.z) { - float param = C.x; - float param_1 = C.y; - float param_2 = C.z; + float param = c.x; + float param_1 = c.y; + float param_2 = c.z; float param_3 = s; - SetSatInner(param, param_1, param_2, param_3); - C.x = param; - C.y = param_1; - C.z = param_2; + set_sat_inner(param, param_1, param_2, param_3); + c.x = param; + c.y = param_1; + c.z = param_2; } else { - if (C.x <= C.z) + if (c.x <= c.z) { - float param_4 = C.x; - float param_5 = C.z; - float param_6 = C.y; + float param_4 = c.x; + float param_5 = c.z; + float param_6 = c.y; float param_7 = s; - SetSatInner(param_4, param_5, param_6, param_7); - C.x = param_4; - C.z = param_5; - C.y = param_6; + set_sat_inner(param_4, param_5, param_6, param_7); + c.x = param_4; + c.z = param_5; + c.y = param_6; } else { - float param_8 = C.z; - float param_9 = C.x; - float param_10 = C.y; + float param_8 = c.z; + float param_9 = c.x; + float param_10 = c.y; float param_11 = s; - SetSatInner(param_8, param_9, param_10, param_11); - C.z = param_8; - C.x = param_9; - C.y = param_10; + set_sat_inner(param_8, param_9, param_10, param_11); + c.z = param_8; + c.x = param_9; + c.y = param_10; } } } else { - if (C.x <= C.z) + if (c.x <= c.z) { - float param_12 = C.y; - float param_13 = C.x; - float param_14 = C.z; + float param_12 = c.y; + float param_13 = c.x; + float param_14 = c.z; float param_15 = s; - SetSatInner(param_12, param_13, param_14, param_15); - C.y = param_12; - C.x = param_13; - C.z = param_14; + set_sat_inner(param_12, param_13, param_14, param_15); + c.y = param_12; + c.x = param_13; + c.z = param_14; } else { - if (C.y <= C.z) + if (c.y <= c.z) { - float param_16 = C.y; - float param_17 = C.z; - float param_18 = C.x; + float param_16 = c.y; + float param_17 = c.z; + float param_18 = c.x; float param_19 = s; - SetSatInner(param_16, param_17, param_18, param_19); - C.y = param_16; - C.z = param_17; - C.x = param_18; + set_sat_inner(param_16, param_17, param_18, param_19); + c.y = param_16; + c.z = param_17; + c.x = param_18; } else { - float param_20 = C.z; - float param_21 = C.y; - float param_22 = C.x; + float param_20 = c.z; + float param_21 = c.y; + float param_22 = c.x; float param_23 = s; - SetSatInner(param_20, param_21, param_22, param_23); - C.z = param_20; - C.y = param_21; - C.x = param_22; + set_sat_inner(param_20, param_21, param_22, param_23); + c.z = param_20; + c.y = param_21; + c.x = param_22; } } } - return C; + return c; } static inline __attribute__((always_inline)) @@ -696,10 +696,9 @@ static inline __attribute__((always_inline)) float3 set_lum(thread const float3& c, thread const float& l) { float3 param = c; - float d = l - lum(param); - float3 param_1 = c + float3(d); - float3 _903 = clip_color(param_1); - return _903; + float3 param_1 = c + float3(l - lum(param)); + float3 _901 = clip_color(param_1); + return _901; } static inline __attribute__((always_inline)) @@ -788,9 +787,9 @@ float3 mix_blend(thread const float3& cb, thread const float3& cs, thread const float3 param_20 = cb; float3 param_21 = cs; float param_22 = sat(param_20); - float3 _1194 = set_sat(param_21, param_22); + float3 _1192 = set_sat(param_21, param_22); float3 param_23 = cb; - float3 param_24 = _1194; + float3 param_24 = _1192; float param_25 = lum(param_23); b = set_lum(param_24, param_25); break; @@ -800,9 +799,9 @@ float3 mix_blend(thread const float3& cb, thread const float3& cs, thread const float3 param_26 = cs; float3 param_27 = cb; float param_28 = sat(param_26); - float3 _1208 = set_sat(param_27, param_28); + float3 _1206 = set_sat(param_27, param_28); float3 param_29 = cb; - float3 param_30 = _1208; + float3 param_30 = _1206; float param_31 = lum(param_29); b = set_lum(param_30, param_31); break; @@ -947,11 +946,11 @@ CmdJump Cmd_Jump_read(thread const Alloc& a, thread const CmdRef& ref, device Me return CmdJump_read(param, param_1, v_278); } -kernel void main0(device Memory& v_278 [[buffer(0)]], const device ConfigBuf& _1523 [[buffer(1)]], texture2d image [[texture(2)]], texture2d image_atlas [[texture(3)]], texture2d gradients [[texture(4)]], uint3 gl_WorkGroupID [[threadgroup_position_in_grid]], uint3 gl_LocalInvocationID [[thread_position_in_threadgroup]]) +kernel void main0(device Memory& v_278 [[buffer(0)]], const device ConfigBuf& _1521 [[buffer(1)]], texture2d image [[texture(2)]], texture2d image_atlas [[texture(3)]], texture2d gradients [[texture(4)]], uint3 gl_WorkGroupID [[threadgroup_position_in_grid]], uint3 gl_LocalInvocationID [[thread_position_in_threadgroup]]) { - uint tile_ix = (gl_WorkGroupID.y * _1523.conf.width_in_tiles) + gl_WorkGroupID.x; + uint tile_ix = (gl_WorkGroupID.y * _1521.conf.width_in_tiles) + gl_WorkGroupID.x; Alloc param; - param.offset = _1523.conf.ptcl_alloc.offset; + param.offset = _1521.conf.ptcl_alloc.offset; uint param_1 = tile_ix * 1024u; uint param_2 = 1024u; Alloc cmd_alloc = slice_mem(param, param_1, param_2); @@ -1114,10 +1113,10 @@ kernel void main0(device Memory& v_278 [[buffer(0)]], const device ConfigBuf& _1 int x = int(round(fast::clamp(my_d, 0.0, 1.0) * 511.0)); float4 fg_rgba = gradients.read(uint2(int2(x, int(lin.index)))); float3 param_29 = fg_rgba.xyz; - float3 _2094 = fromsRGB(param_29); - fg_rgba.x = _2094.x; - fg_rgba.y = _2094.y; - fg_rgba.z = _2094.z; + float3 _2092 = fromsRGB(param_29); + fg_rgba.x = _2092.x; + fg_rgba.y = _2092.y; + fg_rgba.z = _2092.z; rgba[k_9] = fg_rgba; } cmd_ref.offset += 20u; @@ -1146,8 +1145,8 @@ kernel void main0(device Memory& v_278 [[buffer(0)]], const device ConfigBuf& _1 { uint d_2 = min(clip_depth, 127u); float4 param_34 = float4(rgba[k_11]); - uint _2186 = packsRGB(param_34); - blend_stack[d_2][k_11] = _2186; + uint _2184 = packsRGB(param_34); + blend_stack[d_2][k_11] = _2184; rgba[k_11] = float4(0.0); } clip_depth++; @@ -1172,12 +1171,12 @@ kernel void main0(device Memory& v_278 [[buffer(0)]], const device ConfigBuf& _1 float3 param_39 = fg_1.xyz; uint param_40 = blend_mode; float3 blend = mix_blend(param_38, param_39, param_40); - float4 _2253 = fg_1; - float _2257 = fg_1.w; - float3 _2264 = mix(_2253.xyz, blend, float3(float((_2257 * bg.w) > 0.0))); - fg_1.x = _2264.x; - fg_1.y = _2264.y; - fg_1.z = _2264.z; + float4 _2251 = fg_1; + float _2255 = fg_1.w; + float3 _2262 = mix(_2251.xyz, blend, float3(float((_2255 * bg.w) > 0.0))); + fg_1.x = _2262.x; + fg_1.y = _2262.y; + fg_1.z = _2262.z; float3 param_41 = bg.xyz; float3 param_42 = fg_1.xyz; float param_43 = bg.w; diff --git a/piet-gpu/shader/gen/kernel4_gray.spv b/piet-gpu/shader/gen/kernel4_gray.spv index eb7385f46e6c9526b283e8c0bc720983f4a311c4..305facd37bcdecad54e3d5b664d19ddda0cca853 100644 GIT binary patch literal 58140 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 literal 58196 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 AQUCw| diff --git a/piet-gpu/shader/gen/tile_alloc.dxil b/piet-gpu/shader/gen/tile_alloc.dxil index d69db16005e41c4d04ccba4f03161ff131490b28..fdc60a1f645c09f247843f8a74a8e61f1ac5b605 100644 GIT binary patch delta 37 tcmdm?zC&HaCBn)1)ARC5>y-zdo>Jfb>bjqo&qk3b7N(?(%>^tT`~XK#5C8xG delta 37 tcmdm?zC&HaCBn&huAIfKmJT5nhyw^1aDg()Fxa{-G7KL8Y%4c-6% diff --git a/piet-gpu/shader/gen/tile_alloc.hlsl b/piet-gpu/shader/gen/tile_alloc.hlsl index 97e1c23..1c9d04b 100644 --- a/piet-gpu/shader/gen/tile_alloc.hlsl +++ b/piet-gpu/shader/gen/tile_alloc.hlsl @@ -17,6 +17,7 @@ struct AnnoEndClipRef struct AnnoEndClip { float4 bbox; + uint blend; }; struct AnnotatedRef @@ -76,7 +77,7 @@ struct Config static const uint3 gl_WorkGroupSize = uint3(256u, 1u, 1u); RWByteAddressBuffer _92 : register(u0, space0); -ByteAddressBuffer _305 : register(t1, space0); +ByteAddressBuffer _314 : register(t1, space0); static uint3 gl_LocalInvocationID; static uint3 gl_GlobalInvocationID; @@ -111,8 +112,8 @@ AnnotatedTag Annotated_tag(Alloc a, AnnotatedRef ref) Alloc param = a; uint param_1 = ref.offset >> uint(2); uint tag_and_flags = read_mem(param, param_1); - AnnotatedTag _236 = { tag_and_flags & 65535u, tag_and_flags >> uint(16) }; - return _236; + AnnotatedTag _246 = { tag_and_flags & 65535u, tag_and_flags >> uint(16) }; + return _246; } AnnoEndClip AnnoEndClip_read(Alloc a, AnnoEndClipRef ref) @@ -130,16 +131,20 @@ AnnoEndClip AnnoEndClip_read(Alloc a, AnnoEndClipRef ref) Alloc param_6 = a; uint param_7 = ix + 3u; uint raw3 = read_mem(param_6, param_7); + Alloc param_8 = a; + uint param_9 = ix + 4u; + uint raw4 = read_mem(param_8, param_9); AnnoEndClip s; s.bbox = float4(asfloat(raw0), asfloat(raw1), asfloat(raw2), asfloat(raw3)); + s.blend = raw4; return s; } AnnoEndClip Annotated_EndClip_read(Alloc a, AnnotatedRef ref) { - AnnoEndClipRef _243 = { ref.offset + 4u }; + AnnoEndClipRef _252 = { ref.offset + 4u }; Alloc param = a; - AnnoEndClipRef param_1 = _243; + AnnoEndClipRef param_1 = _252; return AnnoEndClip_read(param, param_1); } @@ -211,17 +216,17 @@ void comp_main() { uint th_ix = gl_LocalInvocationID.x; uint element_ix = gl_GlobalInvocationID.x; - PathRef _312 = { _305.Load(16) + (element_ix * 12u) }; - PathRef path_ref = _312; - AnnotatedRef _321 = { _305.Load(32) + (element_ix * 40u) }; - AnnotatedRef ref = _321; + PathRef _321 = { _314.Load(16) + (element_ix * 12u) }; + PathRef path_ref = _321; + AnnotatedRef _330 = { _314.Load(32) + (element_ix * 40u) }; + AnnotatedRef ref = _330; uint tag = 0u; - if (element_ix < _305.Load(0)) + if (element_ix < _314.Load(0)) { - Alloc _332; - _332.offset = _305.Load(32); + Alloc _341; + _341.offset = _314.Load(32); Alloc param; - param.offset = _332.offset; + param.offset = _341.offset; AnnotatedRef param_1 = ref; tag = Annotated_tag(param, param_1).tag; } @@ -237,10 +242,10 @@ void comp_main() case 4u: case 5u: { - Alloc _350; - _350.offset = _305.Load(32); + Alloc _359; + _359.offset = _314.Load(32); Alloc param_2; - param_2.offset = _350.offset; + param_2.offset = _359.offset; AnnotatedRef param_3 = ref; AnnoEndClip clip = Annotated_EndClip_read(param_2, param_3); x0 = int(floor(clip.bbox.x * 0.0625f)); @@ -250,10 +255,10 @@ void comp_main() break; } } - x0 = clamp(x0, 0, int(_305.Load(8))); - y0 = clamp(y0, 0, int(_305.Load(12))); - x1 = clamp(x1, 0, int(_305.Load(8))); - y1 = clamp(y1, 0, int(_305.Load(12))); + x0 = clamp(x0, 0, int(_314.Load(8))); + y0 = clamp(y0, 0, int(_314.Load(12))); + x1 = clamp(x1, 0, int(_314.Load(8))); + y1 = clamp(y1, 0, int(_314.Load(12))); Path path; path.bbox = uint4(uint(x0), uint(y0), uint(x1), uint(y1)); uint tile_count = uint((x1 - x0) * (y1 - y0)); @@ -276,46 +281,46 @@ void comp_main() if (th_ix == 255u) { uint param_4 = total_tile_count * 8u; - MallocResult _476 = malloc(param_4); - sh_tile_alloc = _476; + MallocResult _485 = malloc(param_4); + sh_tile_alloc = _485; } GroupMemoryBarrierWithGroupSync(); MallocResult alloc_start = sh_tile_alloc; - bool _487; + bool _496; if (!alloc_start.failed) { - _487 = _92.Load(4) != 0u; + _496 = _92.Load(4) != 0u; } else { - _487 = alloc_start.failed; + _496 = alloc_start.failed; } - if (_487) + if (_496) { return; } - if (element_ix < _305.Load(0)) + if (element_ix < _314.Load(0)) { - uint _500; + uint _509; if (th_ix > 0u) { - _500 = sh_tile_count[th_ix - 1u]; + _509 = sh_tile_count[th_ix - 1u]; } else { - _500 = 0u; + _509 = 0u; } - uint tile_subix = _500; + uint tile_subix = _509; Alloc param_5 = alloc_start.alloc; uint param_6 = 8u * tile_subix; uint param_7 = 8u * tile_count; Alloc tiles_alloc = slice_mem(param_5, param_6, param_7); - TileRef _522 = { tiles_alloc.offset }; - path.tiles = _522; - Alloc _527; - _527.offset = _305.Load(16); + TileRef _531 = { tiles_alloc.offset }; + path.tiles = _531; + Alloc _536; + _536.offset = _314.Load(16); Alloc param_8; - param_8.offset = _527.offset; + param_8.offset = _536.offset; PathRef param_9 = path_ref; Path param_10 = path; Path_write(param_8, param_9, param_10);