From b73eabf4eb1d92a762358e44249da07846d22826 Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Mon, 22 Feb 2021 18:16:32 +0100 Subject: [PATCH] kernel4.comp: remove unused commands Signed-off-by: Elias Naur --- piet-gpu-types/src/ptcl.rs | 15 ---- piet-gpu/shader/coarse.spv | Bin 52300 -> 52252 bytes piet-gpu/shader/kernel4.comp | 19 +---- piet-gpu/shader/kernel4.spv | Bin 41884 -> 36872 bytes piet-gpu/shader/ptcl.h | 145 ++--------------------------------- 5 files changed, 9 insertions(+), 170 deletions(-) diff --git a/piet-gpu-types/src/ptcl.rs b/piet-gpu-types/src/ptcl.rs index 7e7d10c..a266eb5 100644 --- a/piet-gpu-types/src/ptcl.rs +++ b/piet-gpu-types/src/ptcl.rs @@ -3,15 +3,6 @@ use piet_gpu_derive::piet_gpu; piet_gpu! { #[gpu_write] mod ptcl { - struct CmdCircle { - center: [f32; 2], - radius: f32, - rgba_color: u32, - } - struct CmdLine { - start: [f32; 2], - end: [f32; 2], - } struct CmdStroke { // This is really a Ref, but we don't have cross-module // references. @@ -41,23 +32,17 @@ piet_gpu! { struct CmdSolid { rgba_color: u32, } - struct CmdSolidMask { - mask: f32, - } struct CmdJump { new_ref: u32, } enum Cmd { End, - Circle(CmdCircle), - Line(CmdLine), Fill(CmdFill), BeginClip(CmdBeginClip), BeginSolidClip(CmdBeginSolidClip), EndClip(CmdEndClip), Stroke(CmdStroke), Solid(CmdSolid), - SolidMask(CmdSolidMask), Jump(CmdJump), } } diff --git a/piet-gpu/shader/coarse.spv b/piet-gpu/shader/coarse.spv index 505c4f4073af8832db0a68569b0c614f7d0b183e..974e400ac3e80ab54ef2d6aaec0765a9b78b518f 100644 GIT binary patch literal 52252 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 BMauvH diff --git a/piet-gpu/shader/kernel4.comp b/piet-gpu/shader/kernel4.comp index 395ac80..23e6e40 100644 --- a/piet-gpu/shader/kernel4.comp +++ b/piet-gpu/shader/kernel4.comp @@ -117,17 +117,6 @@ void main() { break; } switch (tag) { - case Cmd_Circle: - CmdCircle circle = Cmd_Circle_read(cmd_alloc, cmd_ref); - vec4 fg_rgba = unpackUnorm4x8(circle.rgba_color).wzyx; - for (uint i = 0; i < CHUNK; i++) { - float dy = float(i * CHUNK_DY); - float r = length(vec2(xy.x, xy.y + dy) + vec2(0.5, 0.5) - circle.center.xy); - float alpha = clamp(0.5 + circle.radius - r, 0.0, 1.0); - // TODO: sRGB - rgb[i] = mix(rgb[i], fg_rgba.rgb, mask[i] * alpha * fg_rgba.a); - } - break; case Cmd_Stroke: // Calculate distance field from all the line segments in this tile. CmdStroke stroke = Cmd_Stroke_read(cmd_alloc, cmd_ref); @@ -145,7 +134,7 @@ void main() { } tile_seg_ref = seg.next; } while (tile_seg_ref.offset != 0); - fg_rgba = unpackUnorm4x8(stroke.rgba_color).wzyx; + vec4 fg_rgba = unpackUnorm4x8(stroke.rgba_color).wzyx; for (uint k = 0; k < CHUNK; k++) { float alpha = clamp(stroke.half_width + 0.5 - df[k], 0.0, 1.0); rgb[k] = mix(rgb[k], fg_rgba.rgb, mask[k] * alpha * fg_rgba.a); @@ -215,12 +204,6 @@ void main() { rgb[k] = mix(rgb[k], fg_rgba.rgb, mask[k] * fg_rgba.a); } break; - case Cmd_SolidMask: - CmdSolidMask solid_mask = Cmd_SolidMask_read(cmd_alloc, cmd_ref); - for (uint k = 0; k < CHUNK; k++) { - mask[k] = solid_mask.mask; - } - break; case Cmd_Jump: cmd_ref = CmdRef(Cmd_Jump_read(cmd_alloc, cmd_ref).new_ref); cmd_alloc.offset = cmd_ref.offset; diff --git a/piet-gpu/shader/kernel4.spv b/piet-gpu/shader/kernel4.spv index 3ccf21d60fb5df3f2f875314aa7d8c406d19a292..ede04e47f15021d19f8e1862a67069fe3eba757a 100644 GIT binary patch literal 36872 zcmb822b^A2wZ$*YBp@~Pjsc`Y=)Hy(Kp^xE!z7s`1CyCBnLy~h_ui#RlPXnuQ4~?Z zg8IY)q9S5J6s3v2|Nr~$nw$rJ7r2|cdv$>X056*xEx9uK@4s4QASWOHDb0A zL;M^;+KDk{r^YaP`+BGMc2Df~ zbanJ}_jYwm=^o^$;P9}1%zKIj3 zbq!P~vsH7!d%KS8=+tke>1%Dm|Mju`97BBDnX{^z)_pXi(LS8{sj8hD4R`OFHob?4 z&3@Fq8YXJ{R&!1#c6Rr4O|bp2YJT{X!H%1KI+rv1n4?-0KF~LP{N#=)T~k(?HqbwP z{J`p?9qj7U*Q!VBSQo}G{mB=B&&+eqYH9e9{oMmy|7)CP;-<7=x{Fc!tQD-Ma%Uae%DVvSaX zZ#`wg9s~V-hjs1VH4)la4|T7ZV;EMAf)DzFhx0!*uK|{=qd)DNy6ZW)vu9$*k=+vp zCeQSD@App{*V!??ucxoyan4t*jW!sYK%Eo*eKG6R9du*3jYXy@G1@8*XfyA&YAvwC zaUZPg~<~4Kt^HqDmXZn5Wz-RVd%>Qo2q&VK)shi^+R_)b{-N=(1 z8*`}URgQHZIAdt|X>%{Bc?~_=BdPZ@aUANkZo1|v52!IUDVFEh=U zBPt)<Z-r9V@r^!Ld#oj5}X-R2g^hWc}yCjeTShd&Xew5!LZ^?0WP6=Rs*_ z++&Nl#|_4vw>qVc+k9aD=V6U`QW5jyBIcQi>HY3M57`*!=|#*likRosG2N^GkC2U+ z=M*u|9gI1wx&XW<&-p#NCb4sx`&rFv=6-IkE{4~BjXf{->g(_3N!4tpHVfqlUSNF( z@SdpV^Yf^Vt_hPkDAC%`db?&c-XDkYCVe@)j{kqBHgm8;&g!MK&sn_;+}!80RadF| z>ew-!r)kHy=@Wh7bw9LMS7PIx`!Fi_?A6WGlf<4tl_!C24z|AS;Qr1d8$XB1XM>mH{7eg>IT3jhg<0NVN^Eez_&f{m`Wv+9!@VT4*gZpwsi+%nU zzF^aT@cb;&VqdIpmiH@>rHhu$No2DZgYbRUe~laB{?@<43%KfF2(-gwSU>zc&Fnzx4L{qkI6bxmrtIUiiE z??o;Ak`{jH5Z+c@0Z;$egQpzT;iI<^`wsZDfzJMcy5D=?UA+?;wgFs$=_=5PG2`0?fwKGSL1iV<7@mLm`_;^pZCE|iv6s{V=d#| z4&0a@HoxD@{C3EC?$g(Q*qHvl=~G=v``i(Ibn&fD?v>}gKA%V1y03R)_oU`~f!wRN zqpPQDN>}dy`S@O-&hbN^+Bq=URZyR;p)*Y8gwHj63hi)UjW$i2;U;%=PntY1)0lYe z*cy4%8zcHK^l^mBeu+LDed@sYo*2^qZ0gNX#WXnP*|Bx@_V&f#d(=*YId3)H&E-3z zn%8*d!rD3CrPge-7kE5B&ty!_-Tr9h9z3Llcee2Hb&Te_V|&#NpK(;j^zPmPdYHZO z{g-td)6+NZ-wvkZncnbsY{RM<;Bh_d%8qGM`LV5`9aU(}9EMd#qcz@42l_nz__bHZ zpq1l3b_j2)j)(j6p?#hO=4bOp{4an9cⅅ?+Q0#J%To+b6Wk5+g3fRPiOOtJ_j!Q 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 S+TL#gn}O}m?*wAM6Z|(|hEvJ_ literal 41884 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 a)?1reIfv$Jd%p$T4YohO6Nvpz@c#f(wA^k0 diff --git a/piet-gpu/shader/ptcl.h b/piet-gpu/shader/ptcl.h index 4587f8f..8e7d05e 100644 --- a/piet-gpu/shader/ptcl.h +++ b/piet-gpu/shader/ptcl.h @@ -2,14 +2,6 @@ // Code auto-generated by piet-gpu-derive -struct CmdCircleRef { - uint offset; -}; - -struct CmdLineRef { - uint offset; -}; - struct CmdStrokeRef { uint offset; }; @@ -34,10 +26,6 @@ struct CmdSolidRef { uint offset; }; -struct CmdSolidMaskRef { - uint offset; -}; - struct CmdJumpRef { uint offset; }; @@ -46,29 +34,6 @@ struct CmdRef { uint offset; }; -struct CmdCircle { - vec2 center; - float radius; - uint rgba_color; -}; - -#define CmdCircle_size 16 - -CmdCircleRef CmdCircle_index(CmdCircleRef ref, uint index) { - return CmdCircleRef(ref.offset + index * CmdCircle_size); -} - -struct CmdLine { - vec2 start; - vec2 end; -}; - -#define CmdLine_size 16 - -CmdLineRef CmdLine_index(CmdLineRef ref, uint index) { - return CmdLineRef(ref.offset + index * CmdLine_size); -} - struct CmdStroke { uint tile_ref; float half_width; @@ -134,16 +99,6 @@ CmdSolidRef CmdSolid_index(CmdSolidRef ref, uint index) { return CmdSolidRef(ref.offset + index * CmdSolid_size); } -struct CmdSolidMask { - float mask; -}; - -#define CmdSolidMask_size 4 - -CmdSolidMaskRef CmdSolidMask_index(CmdSolidMaskRef ref, uint index) { - return CmdSolidMaskRef(ref.offset + index * CmdSolidMask_size); -} - struct CmdJump { uint new_ref; }; @@ -155,63 +110,19 @@ CmdJumpRef CmdJump_index(CmdJumpRef ref, uint index) { } #define Cmd_End 0 -#define Cmd_Circle 1 -#define Cmd_Line 2 -#define Cmd_Fill 3 -#define Cmd_BeginClip 4 -#define Cmd_BeginSolidClip 5 -#define Cmd_EndClip 6 -#define Cmd_Stroke 7 -#define Cmd_Solid 8 -#define Cmd_SolidMask 9 -#define Cmd_Jump 10 -#define Cmd_size 20 +#define Cmd_Fill 1 +#define Cmd_BeginClip 2 +#define Cmd_BeginSolidClip 3 +#define Cmd_EndClip 4 +#define Cmd_Stroke 5 +#define Cmd_Solid 6 +#define Cmd_Jump 7 +#define Cmd_size 16 CmdRef Cmd_index(CmdRef ref, uint index) { return CmdRef(ref.offset + index * Cmd_size); } -CmdCircle CmdCircle_read(Alloc a, CmdCircleRef ref) { - uint ix = ref.offset >> 2; - uint raw0 = read_mem(a, ix + 0); - uint raw1 = read_mem(a, ix + 1); - uint raw2 = read_mem(a, ix + 2); - uint raw3 = read_mem(a, ix + 3); - CmdCircle s; - s.center = vec2(uintBitsToFloat(raw0), uintBitsToFloat(raw1)); - s.radius = uintBitsToFloat(raw2); - s.rgba_color = raw3; - return s; -} - -void CmdCircle_write(Alloc a, CmdCircleRef ref, CmdCircle s) { - uint ix = ref.offset >> 2; - write_mem(a, ix + 0, floatBitsToUint(s.center.x)); - write_mem(a, ix + 1, floatBitsToUint(s.center.y)); - write_mem(a, ix + 2, floatBitsToUint(s.radius)); - write_mem(a, ix + 3, s.rgba_color); -} - -CmdLine CmdLine_read(Alloc a, CmdLineRef ref) { - uint ix = ref.offset >> 2; - uint raw0 = read_mem(a, ix + 0); - uint raw1 = read_mem(a, ix + 1); - uint raw2 = read_mem(a, ix + 2); - uint raw3 = read_mem(a, ix + 3); - CmdLine s; - s.start = vec2(uintBitsToFloat(raw0), uintBitsToFloat(raw1)); - s.end = vec2(uintBitsToFloat(raw2), uintBitsToFloat(raw3)); - return s; -} - -void CmdLine_write(Alloc a, CmdLineRef ref, CmdLine s) { - uint ix = ref.offset >> 2; - write_mem(a, ix + 0, floatBitsToUint(s.start.x)); - write_mem(a, ix + 1, floatBitsToUint(s.start.y)); - write_mem(a, ix + 2, floatBitsToUint(s.end.x)); - write_mem(a, ix + 3, floatBitsToUint(s.end.y)); -} - CmdStroke CmdStroke_read(Alloc a, CmdStrokeRef ref) { uint ix = ref.offset >> 2; uint raw0 = read_mem(a, ix + 0); @@ -305,19 +216,6 @@ void CmdSolid_write(Alloc a, CmdSolidRef ref, CmdSolid s) { write_mem(a, ix + 0, s.rgba_color); } -CmdSolidMask CmdSolidMask_read(Alloc a, CmdSolidMaskRef ref) { - uint ix = ref.offset >> 2; - uint raw0 = read_mem(a, ix + 0); - CmdSolidMask s; - s.mask = uintBitsToFloat(raw0); - return s; -} - -void CmdSolidMask_write(Alloc a, CmdSolidMaskRef ref, CmdSolidMask s) { - uint ix = ref.offset >> 2; - write_mem(a, ix + 0, floatBitsToUint(s.mask)); -} - CmdJump CmdJump_read(Alloc a, CmdJumpRef ref) { uint ix = ref.offset >> 2; uint raw0 = read_mem(a, ix + 0); @@ -335,14 +233,6 @@ uint Cmd_tag(Alloc a, CmdRef ref) { return read_mem(a, ref.offset >> 2); } -CmdCircle Cmd_Circle_read(Alloc a, CmdRef ref) { - return CmdCircle_read(a, CmdCircleRef(ref.offset + 4)); -} - -CmdLine Cmd_Line_read(Alloc a, CmdRef ref) { - return CmdLine_read(a, CmdLineRef(ref.offset + 4)); -} - CmdFill Cmd_Fill_read(Alloc a, CmdRef ref) { return CmdFill_read(a, CmdFillRef(ref.offset + 4)); } @@ -367,10 +257,6 @@ CmdSolid Cmd_Solid_read(Alloc a, CmdRef ref) { return CmdSolid_read(a, CmdSolidRef(ref.offset + 4)); } -CmdSolidMask Cmd_SolidMask_read(Alloc a, CmdRef ref) { - return CmdSolidMask_read(a, CmdSolidMaskRef(ref.offset + 4)); -} - CmdJump Cmd_Jump_read(Alloc a, CmdRef ref) { return CmdJump_read(a, CmdJumpRef(ref.offset + 4)); } @@ -379,16 +265,6 @@ void Cmd_End_write(Alloc a, CmdRef ref) { write_mem(a, ref.offset >> 2, Cmd_End); } -void Cmd_Circle_write(Alloc a, CmdRef ref, CmdCircle s) { - write_mem(a, ref.offset >> 2, Cmd_Circle); - CmdCircle_write(a, CmdCircleRef(ref.offset + 4), s); -} - -void Cmd_Line_write(Alloc a, CmdRef ref, CmdLine s) { - write_mem(a, ref.offset >> 2, Cmd_Line); - CmdLine_write(a, CmdLineRef(ref.offset + 4), s); -} - void Cmd_Fill_write(Alloc a, CmdRef ref, CmdFill s) { write_mem(a, ref.offset >> 2, Cmd_Fill); CmdFill_write(a, CmdFillRef(ref.offset + 4), s); @@ -419,11 +295,6 @@ void Cmd_Solid_write(Alloc a, CmdRef ref, CmdSolid s) { CmdSolid_write(a, CmdSolidRef(ref.offset + 4), s); } -void Cmd_SolidMask_write(Alloc a, CmdRef ref, CmdSolidMask s) { - write_mem(a, ref.offset >> 2, Cmd_SolidMask); - CmdSolidMask_write(a, CmdSolidMaskRef(ref.offset + 4), s); -} - void Cmd_Jump_write(Alloc a, CmdRef ref, CmdJump s) { write_mem(a, ref.offset >> 2, Cmd_Jump); CmdJump_write(a, CmdJumpRef(ref.offset + 4), s);