From 6f707c4c62d12764e931d4ebe8317c829bba7fe8 Mon Sep 17 00:00:00 2001 From: Raph Levien Date: Wed, 23 Jun 2021 11:50:51 -0700 Subject: [PATCH] Start work on gradients WIP. Most of the GPU-side work should be done (though it's not tested end-to-end and it's certainly possible I missed something), but still needs work on encoding side. --- piet-gpu-hal/src/vulkan.rs | 64 ++++++-------- piet-gpu-types/src/annotated.rs | 10 +++ piet-gpu-types/src/ptcl.rs | 8 ++ piet-gpu-types/src/scene.rs | 8 +- piet-gpu/bin/android.rs | 4 +- piet-gpu/shader/annotated.h | 71 +++++++++++++++- piet-gpu/shader/backdrop.spv | Bin 12224 -> 12224 bytes piet-gpu/shader/backdrop_lg.spv | Bin 12256 -> 12256 bytes piet-gpu/shader/binning.comp | 1 + piet-gpu/shader/binning.spv | Bin 15988 -> 16012 bytes piet-gpu/shader/build.ninja | 3 - piet-gpu/shader/coarse.comp | 18 ++++ piet-gpu/shader/coarse.spv | Bin 57588 -> 65436 bytes piet-gpu/shader/elements.comp | 25 ++++++ piet-gpu/shader/elements.spv | Bin 70948 -> 79716 bytes piet-gpu/shader/kernel4.comp | 39 ++++----- piet-gpu/shader/kernel4.spv | Bin 37584 -> 41512 bytes piet-gpu/shader/ptcl.h | 59 +++++++++++-- piet-gpu/shader/scene.h | 55 +++++++++--- piet-gpu/shader/setup.h | 2 + piet-gpu/shader/tile_alloc.spv | Bin 14764 -> 14780 bytes piet-gpu/src/gradient.rs | 145 ++++++++++++++++++++++++++++++++ piet-gpu/src/lib.rs | 46 +++++----- piet-gpu/src/render_ctx.rs | 16 +++- 24 files changed, 466 insertions(+), 108 deletions(-) create mode 100644 piet-gpu/src/gradient.rs diff --git a/piet-gpu-hal/src/vulkan.rs b/piet-gpu-hal/src/vulkan.rs index 9111900..96cbc54 100644 --- a/piet-gpu-hal/src/vulkan.rs +++ b/piet-gpu-hal/src/vulkan.rs @@ -104,7 +104,6 @@ pub struct PipelineBuilder { bindings: Vec, binding_flags: Vec, max_textures: u32, - has_descriptor_indexing: bool, } pub struct DescriptorSetBuilder { @@ -644,7 +643,6 @@ impl crate::backend::Device for VkDevice { bindings: Vec::new(), binding_flags: Vec::new(), max_textures: 0, - has_descriptor_indexing: self.gpu_info.has_descriptor_indexing, } } @@ -1090,23 +1088,21 @@ impl crate::backend::PipelineBuilder for PipelineBuilder { } } - fn add_textures(&mut self, max_textures: u32) { + fn add_textures(&mut self, n_images: u32) { let start = self.bindings.len() as u32; - self.bindings.push( - vk::DescriptorSetLayoutBinding::builder() - .binding(start) - .descriptor_type(vk::DescriptorType::STORAGE_IMAGE) - .descriptor_count(max_textures) - .stage_flags(vk::ShaderStageFlags::COMPUTE) - .build(), - ); - let flags = if self.has_descriptor_indexing { - vk::DescriptorBindingFlags::VARIABLE_DESCRIPTOR_COUNT - } else { - Default::default() - }; - self.binding_flags.push(flags); - self.max_textures += max_textures; + for i in 0..n_images { + self.bindings.push( + vk::DescriptorSetLayoutBinding::builder() + .binding(start + i) + .descriptor_type(vk::DescriptorType::STORAGE_IMAGE) + .descriptor_count(1) + .stage_flags(vk::ShaderStageFlags::COMPUTE) + .build(), + ); + self.binding_flags + .push(vk::DescriptorBindingFlags::default()); + } + self.max_textures += n_images; } unsafe fn create_compute_pipeline( @@ -1195,11 +1191,11 @@ impl crate::backend::DescriptorSetBuilder for DescriptorSetBuilder { .build(), ); } - if pipeline.max_textures > 0 { + if !self.textures.is_empty() { descriptor_pool_sizes.push( vk::DescriptorPoolSize::builder() .ty(vk::DescriptorType::STORAGE_IMAGE) - .descriptor_count(pipeline.max_textures) + .descriptor_count(self.textures.len() as u32) .build(), ); } @@ -1211,15 +1207,11 @@ impl crate::backend::DescriptorSetBuilder for DescriptorSetBuilder { )?; let descriptor_set_layouts = [pipeline.descriptor_set_layout]; - let counts = &[pipeline.max_textures]; - let variable_info = vk::DescriptorSetVariableDescriptorCountAllocateInfo::builder() - .descriptor_counts(counts); let descriptor_sets = device .allocate_descriptor_sets( &vk::DescriptorSetAllocateInfo::builder() .descriptor_pool(descriptor_pool) - .set_layouts(&descriptor_set_layouts) - .push_next(&mut variable_info.build()), + .set_layouts(&descriptor_set_layouts), ) .unwrap(); let mut binding = 0; @@ -1240,6 +1232,7 @@ impl crate::backend::DescriptorSetBuilder for DescriptorSetBuilder { ); binding += 1; } + // maybe chain images and textures together; they're basically identical now for image in &self.images { device.update_descriptor_sets( &[vk::WriteDescriptorSet::builder() @@ -1256,28 +1249,21 @@ impl crate::backend::DescriptorSetBuilder for DescriptorSetBuilder { ); binding += 1; } - if !self.textures.is_empty() { - let infos = self - .textures - .iter() - .map(|texture| { - vk::DescriptorImageInfo::builder() - .sampler(self.sampler) - .image_view(*texture) - .image_layout(vk::ImageLayout::GENERAL) - .build() - }) - .collect::>(); + for image in &self.textures { device.update_descriptor_sets( &[vk::WriteDescriptorSet::builder() .dst_set(descriptor_sets[0]) .dst_binding(binding) .descriptor_type(vk::DescriptorType::STORAGE_IMAGE) - .image_info(&infos) + .image_info(&[vk::DescriptorImageInfo::builder() + .sampler(vk::Sampler::null()) + .image_view(*image) + .image_layout(vk::ImageLayout::GENERAL) + .build()]) .build()], &[], ); - //binding += 1; + binding += 1; } Ok(DescriptorSet { descriptor_set: descriptor_sets[0], diff --git a/piet-gpu-types/src/annotated.rs b/piet-gpu-types/src/annotated.rs index 1bf3e9a..90e54bc 100644 --- a/piet-gpu-types/src/annotated.rs +++ b/piet-gpu-types/src/annotated.rs @@ -17,6 +17,15 @@ piet_gpu! { linewidth: f32, rgba_color: u32, } + struct AnnoLinGradient { + bbox: [f32; 4], + // For stroked fills. + linewidth: f32, + index: u32, + line_x: f32, + line_y: f32, + line_c: f32, + } struct AnnoBeginClip { bbox: [f32; 4], linewidth: f32, @@ -27,6 +36,7 @@ piet_gpu! { enum Annotated { Nop, Color(TagFlags, AnnoColor), + LinGradient(TagFlags, AnnoLinGradient), Image(TagFlags, AnnoImage), BeginClip(TagFlags, AnnoBeginClip), EndClip(AnnoEndClip), diff --git a/piet-gpu-types/src/ptcl.rs b/piet-gpu-types/src/ptcl.rs index 41cebc7..e8c29c3 100644 --- a/piet-gpu-types/src/ptcl.rs +++ b/piet-gpu-types/src/ptcl.rs @@ -17,6 +17,13 @@ piet_gpu! { struct CmdColor { rgba_color: u32, } + struct CmdLinGrad { + index: u32, + // line equation for gradient + line_x: f32, + line_y: f32, + line_c: f32, + } struct CmdImage { index: u32, offset: [i16; 2], @@ -34,6 +41,7 @@ piet_gpu! { Solid, Alpha(CmdAlpha), Color(CmdColor), + LinGrad(CmdLinGrad), Image(CmdImage), BeginClip, EndClip, diff --git a/piet-gpu-types/src/scene.rs b/piet-gpu-types/src/scene.rs index c4a9b9a..03f71ec 100644 --- a/piet-gpu-types/src/scene.rs +++ b/piet-gpu-types/src/scene.rs @@ -25,6 +25,11 @@ piet_gpu! { struct FillColor { rgba_color: u32, } + struct FillLinGradient { + index: u32, + p0: [f32; 2], + p1: [f32; 2], + } struct FillImage { index: u32, offset: [i16; 2], @@ -51,11 +56,12 @@ piet_gpu! { Cubic(CubicSeg), FillColor(FillColor), + FillLinGradient(FillLinGradient), + FillImage(FillImage), SetLineWidth(SetLineWidth), Transform(Transform), BeginClip(Clip), EndClip(Clip), - FillImage(FillImage), SetFillMode(SetFillMode), } } diff --git a/piet-gpu/bin/android.rs b/piet-gpu/bin/android.rs index d3a2aa3..ac9ffa7 100644 --- a/piet-gpu/bin/android.rs +++ b/piet-gpu/bin/android.rs @@ -4,7 +4,7 @@ //! //! Requires the [cargo-apk] tool. //! [cargo-apk]: https://crates.io/crates/cargo-apk - +/* use raw_window_handle::android::AndroidHandle; use raw_window_handle::{HasRawWindowHandle, RawWindowHandle}; @@ -175,3 +175,5 @@ impl GfxState { } } } +*/ +fn main() {} diff --git a/piet-gpu/shader/annotated.h b/piet-gpu/shader/annotated.h index 6b18155..b833574 100644 --- a/piet-gpu/shader/annotated.h +++ b/piet-gpu/shader/annotated.h @@ -10,6 +10,10 @@ struct AnnoColorRef { uint offset; }; +struct AnnoLinGradientRef { + uint offset; +}; + struct AnnoBeginClipRef { uint offset; }; @@ -47,6 +51,21 @@ AnnoColorRef AnnoColor_index(AnnoColorRef ref, uint index) { return AnnoColorRef(ref.offset + index * AnnoColor_size); } +struct AnnoLinGradient { + vec4 bbox; + float linewidth; + uint index; + float line_x; + float line_y; + float line_c; +}; + +#define AnnoLinGradient_size 36 + +AnnoLinGradientRef AnnoLinGradient_index(AnnoLinGradientRef ref, uint index) { + return AnnoLinGradientRef(ref.offset + index * AnnoLinGradient_size); +} + struct AnnoBeginClip { vec4 bbox; float linewidth; @@ -70,10 +89,11 @@ AnnoEndClipRef AnnoEndClip_index(AnnoEndClipRef ref, uint index) { #define Annotated_Nop 0 #define Annotated_Color 1 -#define Annotated_Image 2 -#define Annotated_BeginClip 3 -#define Annotated_EndClip 4 -#define Annotated_size 32 +#define Annotated_LinGradient 2 +#define Annotated_Image 3 +#define Annotated_BeginClip 4 +#define Annotated_EndClip 5 +#define Annotated_size 40 AnnotatedRef Annotated_index(AnnotatedRef ref, uint index) { return AnnotatedRef(ref.offset + index * Annotated_size); @@ -137,6 +157,40 @@ void AnnoColor_write(Alloc a, AnnoColorRef ref, AnnoColor s) { write_mem(a, ix + 5, s.rgba_color); } +AnnoLinGradient AnnoLinGradient_read(Alloc a, AnnoLinGradientRef 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); + uint raw4 = read_mem(a, ix + 4); + uint raw5 = read_mem(a, ix + 5); + uint raw6 = read_mem(a, ix + 6); + uint raw7 = read_mem(a, ix + 7); + uint raw8 = read_mem(a, ix + 8); + AnnoLinGradient s; + s.bbox = vec4(uintBitsToFloat(raw0), uintBitsToFloat(raw1), uintBitsToFloat(raw2), uintBitsToFloat(raw3)); + s.linewidth = uintBitsToFloat(raw4); + s.index = raw5; + s.line_x = uintBitsToFloat(raw6); + s.line_y = uintBitsToFloat(raw7); + s.line_c = uintBitsToFloat(raw8); + return s; +} + +void AnnoLinGradient_write(Alloc a, AnnoLinGradientRef ref, AnnoLinGradient s) { + uint ix = ref.offset >> 2; + write_mem(a, ix + 0, floatBitsToUint(s.bbox.x)); + write_mem(a, ix + 1, floatBitsToUint(s.bbox.y)); + write_mem(a, ix + 2, floatBitsToUint(s.bbox.z)); + write_mem(a, ix + 3, floatBitsToUint(s.bbox.w)); + write_mem(a, ix + 4, floatBitsToUint(s.linewidth)); + write_mem(a, ix + 5, s.index); + write_mem(a, ix + 6, floatBitsToUint(s.line_x)); + write_mem(a, ix + 7, floatBitsToUint(s.line_y)); + write_mem(a, ix + 8, floatBitsToUint(s.line_c)); +} + AnnoBeginClip AnnoBeginClip_read(Alloc a, AnnoBeginClipRef ref) { uint ix = ref.offset >> 2; uint raw0 = read_mem(a, ix + 0); @@ -187,6 +241,10 @@ AnnoColor Annotated_Color_read(Alloc a, AnnotatedRef ref) { return AnnoColor_read(a, AnnoColorRef(ref.offset + 4)); } +AnnoLinGradient Annotated_LinGradient_read(Alloc a, AnnotatedRef ref) { + return AnnoLinGradient_read(a, AnnoLinGradientRef(ref.offset + 4)); +} + AnnoImage Annotated_Image_read(Alloc a, AnnotatedRef ref) { return AnnoImage_read(a, AnnoImageRef(ref.offset + 4)); } @@ -208,6 +266,11 @@ void Annotated_Color_write(Alloc a, AnnotatedRef ref, uint flags, AnnoColor s) { AnnoColor_write(a, AnnoColorRef(ref.offset + 4), s); } +void Annotated_LinGradient_write(Alloc a, AnnotatedRef ref, uint flags, AnnoLinGradient s) { + write_mem(a, ref.offset >> 2, (flags << 16) | Annotated_LinGradient); + AnnoLinGradient_write(a, AnnoLinGradientRef(ref.offset + 4), s); +} + void Annotated_Image_write(Alloc a, AnnotatedRef ref, uint flags, AnnoImage s) { write_mem(a, ref.offset >> 2, (flags << 16) | Annotated_Image); AnnoImage_write(a, AnnoImageRef(ref.offset + 4), s); diff --git a/piet-gpu/shader/backdrop.spv b/piet-gpu/shader/backdrop.spv index 6458f4bf2a338e54838dc375dc576c83c73e91e9..6fad4fff357fc37975a5d414c45641dd523c062b 100644 GIT binary patch delta 29 jcmX>Qe;|H?3_qjBW?BArHcn;+28M?~%(8i{sIU|OfqMr+ delta 29 jcmX>Qe;|H?3_qj7W?BArHclo628M?~%)EK6sIU|OfWHSg diff --git a/piet-gpu/shader/backdrop_lg.spv b/piet-gpu/shader/backdrop_lg.spv index 794165472ee1c4e5f27c20b55f14169e1188e045..2ecb31f14f008600374f7300da484dec5116d410 100644 GIT binary patch delta 29 jcmaD5{~&&Y3_qjBW?BB_Y@Eyt3=9u}m}T=>QDG?niyH^R delta 29 jcmaD5{~&&Y3_qj7W?BB_Y@AFC3=9u}n0fPAQDG?nieCq~ diff --git a/piet-gpu/shader/binning.comp b/piet-gpu/shader/binning.comp index b5e2dab..313310e 100644 --- a/piet-gpu/shader/binning.comp +++ b/piet-gpu/shader/binning.comp @@ -57,6 +57,7 @@ void main() { int x0 = 0, y0 = 0, x1 = 0, y1 = 0; switch (tag) { case Annotated_Color: + case Annotated_LinGradient: case Annotated_Image: case Annotated_BeginClip: case Annotated_EndClip: diff --git a/piet-gpu/shader/binning.spv b/piet-gpu/shader/binning.spv index 05abf0c2617887e638fcfe29a9a777e58ae4d255..516cc1d1428f71e86ae8529f9f726ccc040cf99a 100644 GIT binary patch delta 4690 zcmZvfdvI0N6~^}sxe)>ZBq3CyCKf@!cdZY6Akm88qlJP6A2f{+G=(Izz>Lo5oYwK5 z&h#JWI*#L`PqkKUHBGI3SE-NIXDy}LTHA{6R#a3Jv{-+?le6@|cxHCi_kC;awb$Nj z-*a!?y5yUeHjSv8vPVjl)R;!5uM9Tb)wt;TN=khfclC9zU6rb-A>9M-S>4mu)4#53 z`M~=Abt$2bNE^_5b6lS`fR!EiV0rC;(NhoqC)%3suXgtpbDoQs zg1@+nzaed@^^Km?`3~y9`gL8s7rAPE8d0}vmXW*h#@+b1+NRO%y%Tp+4}qWG+h1g@ zrla7ll5e`$Ung4cii=paniduQd^fqjnwAvWz{-_tdpH!U>#i*u(^eI&80s6du~Jzx z)H!yjzB0YGZNjSTTK3Yx>;v&PV7~)z#~uf7278M2@V)u_UvMLMJhlV=O5syCUcRN! z^lvS&bId;vch)>eKhX-XzFIRck&%naszgIVc#b9Cio8+ zKKgGi{Mr*zeU>lqL&#ObLe6gi&u0u$z(^+E3N}XlU6RUgWSHE=#3aiLyAAACYbFa7xt%&7KR1s zj{@%mdtzH@aRck8pFs>>3O<`*KrDP0*o9rl-TWM^W;;B3eQFW^3$R-7UxMc`ZYfUk zS72k*-(i0C8-S0;s`J+jHIG#siGB;7%ZNqg;rkufBaR~P2CGGp`qb=yodbW`n_DU&i^1D=V?ZYZ!(zXv-@>ovO%dq2ZR{{w|zYnfizKY-0~M{yQ^1gni@ zxPAG(40D+qJo&@P4o<9O^VHmA1mVOkh?-7=hzn*gWxZe*vtvnYk|fB3Nx!T2f7W zBEAG^!Rj#JIjovD!I$&PV71f0F5<5K16MD0lJmGZujV)BHN3AfV#e!W_MB(kihYBz zg<+go}4quaR!PPyEx3NARhx#^#n#Tdo@}yG`Y=#XCr&bn!LemOUGF-Nv4H~R?}6360gki(A3QNGPi@0NJ0XhW8F4=E=jZc(l=m5N z_oyfttsbqbps5dHBCZbZ()v6%zv0!q^2dYg!R0Mj+79Md(e*7HE7o67qO5}Vtp*cnEe=P79!rsO%|(JfbaGF z!R2pBdHAM+Pi2kSDI1Z0T`E}BG^~lVewR(h&S3cHpIP{|k?cV5RU`|35PUv7elZ;k zH%8qJ$PZwcdwWJwNlZQzY_j+^It;F+-;eU);C}q^x%(8{81=|;1o+BQj!(nY;?^Ds zcAk3XP4PFfVk~kr_-YaaKL&10d{@l^x8OHUU&I{?)@M$CXUoHP99S**@!;!y`Ngl@ z6A%p25tn8*SUtX2=74=XMtvtT)NGkJlAi=FFLpAV#nNTP3-L2>wWX~8VF9NgI8kT( zIG77ok9M32R&$4)Sa~cu5A3Pk#v)$k`Ea!;{&cX9#p^qbary%OSiK|?odGscRC^{| z&9_X%d=_4A$>-qyd^odKIixw0MdU)TrAGHZ4_0&K*oK{!T&jqV(CV3Qo9^85QTxbba zEpjXat1U5k+Vz}0+jnp~e+#9vs%2k(W?BPRZX_%hrWbzhUK zu|AnsOy??wqJ@YfQ6IScZj^_wAM6__iX4EeMUnc{yf2YkE1!X7tqD0$m^Lh==|fi> H_H5G!ADk~n delta 4794 zcmZvfd2p816~^zE4M+gN1SnveFc{H_d$pp1#43W8Di-%8h7cq|5~jioozZz)$A3E0 z|31cXTCHpA-a=E?E>x>xEx3W&)-EZjP&3T^ZoO|xM%X{B9 z-@k6hwWF%5rVdM~lH|=t-$Op`mrkn-Npw zc;|C}KJM0XPs4--yHNX9t!(dJ?Wi@Ws%j`p&WG*CN9@N(@5dX)7=Yh+zTbWfeZNeEbtnq%wpMaCG`Lya(BN7(w354_!HsuA3tpFl#&YZU=FA<9Fs(aU$=%K1 zrg2AuYu(M@`rXOkr@|Li@HTj7!P{8j^I6f&23GTYJcZ_7-VVOJ@LkLP8g~bpx|!WZ`QB8O z?!@jX>@H$|4F3tupZ>cGzjkJ-$?^g2f!sJKG?P1+ zm}Gfj_k*3P+~OYqn>z}B5Ue&BpQZFuNH6V%Vg-H%Hb^~^tOc*3MUr)3weJ*teh#*u zy8AH^+fQqvS&;rH@E2fLY&*MK$N1?Xh`~M@7t;)gfgc7tumd@pN5E=shfA+dE#e;q zs|9}yJePJ~v67F2jZxoC|Lj))e=e)eU((cER&gZyHFyp!29<~JH(-}Iid+v?iz4-@ zx&M({3(xYy;b0z;$^+!yzClszD9+XjcX00rS4r&sAhzF=VDo4_cu!%UruozVOySpB zxQBQ{>FkszSz9d6vp6@FRCJlAijH9x=EqQsbpl+c>+E>A* zjYIny*jItQjWxBJajv2(>OyEE#~;Ct6s7$MtQOm^PmTWB&^EcECVw3p+xeFY?4^Dk z>oS9<#P`bI;0IuhH%`C(eI@9NV*U-R0B=JD`4e;54bbpD(LaS&(q9$ZJvL>}kq zgM7n2MEQUgJw5_EXQQ@Zx6`)Lj5CYe82uv{;oo3OaWl-}b^0H;x);DstUs4SeFsg= z)w|`ifblv0ycSF{uOLe(l7hxrV`dY;Eez%W=F-3ah3^V^V!wcID!K20X9^P$6g|R|vHm>5 z>XT?{9$~QsdPENbFT}>9;8FY{ntEIpUjnPeTP5;ncd{jnouy`ogAY)V9UR0$reOV9 zh%qfRH472%OQjsEIWzD5so*)}afQ}k<>5ORd}iUh5i8%DSpQalNwvP~reP1I`SSri ztnh0i*_Xj434S&wOST~oB+9r1i`-wHz?j^CxV;s8>cVgW`OmX z)Q@y|_)Y?=1wR>lGdbe(_>?O4-yj`vXl80`X+ONaatTqOl53k&kZ@~S$Fjim0odebv{9Lew$5~ha zRx>V(St)wjqdILQ_$GL8;KA4ALb$IO2SnXVjnnl0M!D`{Z0(=OC>z|Fk-ThaLS#*G{ z)Z|xU<>EzHlZiXA?XH_ef!L;($f=|PGWuHhpf!TXz_yp}=fApqNp8*`ZIT!!{ diff --git a/piet-gpu/shader/build.ninja b/piet-gpu/shader/build.ninja index b73da2e..c1fcc92 100644 --- a/piet-gpu/shader/build.ninja +++ b/piet-gpu/shader/build.ninja @@ -24,6 +24,3 @@ build backdrop_lg.spv: glsl backdrop.comp | annotated.h tile.h setup.h build coarse.spv: glsl coarse.comp | annotated.h bins.h ptcl.h setup.h build kernel4.spv: glsl kernel4.comp | ptcl.h setup.h - -build kernel4_idx.spv: glsl kernel4.comp | ptcl.h setup.h - flags = -DENABLE_IMAGE_INDICES diff --git a/piet-gpu/shader/coarse.comp b/piet-gpu/shader/coarse.comp index 731da97..e402e9e 100644 --- a/piet-gpu/shader/coarse.comp +++ b/piet-gpu/shader/coarse.comp @@ -229,6 +229,7 @@ void main() { switch (tag) { case Annotated_Color: case Annotated_Image: + case Annotated_LinGradient: case Annotated_BeginClip: case Annotated_EndClip: // We have one "path" for each element, even if the element isn't @@ -344,6 +345,23 @@ void main() { Cmd_Color_write(cmd_alloc, cmd_ref, CmdColor(fill.rgba_color)); cmd_ref.offset += 4 + CmdColor_size; break; + case Annotated_LinGradient: + // TODO: process and write linear gradient + tile = Tile_read(read_tile_alloc(element_ref_ix, mem_ok), TileRef(sh_tile_base[element_ref_ix] + + (sh_tile_stride[element_ref_ix] * tile_y + tile_x) * Tile_size)); + AnnoLinGradient lin = Annotated_LinGradient_read(conf.anno_alloc, ref); + if (!alloc_cmd(cmd_alloc, cmd_ref, cmd_limit)) { + break; + } + write_fill(cmd_alloc, cmd_ref, tag.flags, tile, fill.linewidth); + CmdLinGrad cmd_lin; + cmd_lin.index = lin.index; + cmd_lin.line_x = lin.line_x; + cmd_lin.line_y = lin.line_y; + cmd_lin.line_c = lin.line_c; + Cmd_LinGrad_write(cmd_alloc, cmd_ref, cmd_lin); + cmd_ref.offset += 4 + CmdLinGrad_size; + break; case Annotated_Image: tile = Tile_read(read_tile_alloc(element_ref_ix, mem_ok), TileRef(sh_tile_base[element_ref_ix] + (sh_tile_stride[element_ref_ix] * tile_y + tile_x) * Tile_size)); diff --git a/piet-gpu/shader/coarse.spv b/piet-gpu/shader/coarse.spv index 5570675da63893e21c5db0bbe1ee5128bd9c62b0..4352ba1c0085293cfb55b9dcfc0e26d43fc085d5 100644 GIT binary patch literal 65436 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 yDbHGX8|?R^#r3?0inSN%UExGY)# literal 57588 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 literal 70948 zcmbrn1-xC=)xEtT_Xc-&cY?bIcXtaRxe0+7NpN>7?(Xhhp+Ipd#i2m4;=awe;eD z<5E8W>7dtjHte^~CY!9Y;adF$j2zi-^qBpIcJ&)NWO!G`S5zz6^3U0Nbw$C}J zH)PGW=o;MJr<$*^eRfpyz-zzO?vVQ$$*yv@$lW6&7dP%i)%@Vvzu%~?{sWWZ*uGjR z;@hj558rlvoz;Ti&Gza)u*^rzSDDYk@Y=7{zuZ^yktZMXle>3EF44|!QE=V9M}A}b z9-H4H_$EJwSFN$vu0saY3A#Vke2vYovsw}!KW*lq<|{eM%N*s&G5%hyBQbQcla~P} zW{;#JvV!fb_3u?Jjek4u-qmv8wb_qrj2Jp%6n;>0>TK!aGWQkW-M%fq-j$lKQG<8w z-*13H+BvO^*6rIPscyA9D|1@O7_Gh7yIQqwyWX(=gS(2H)P0pXtpPV;%NK0!YQD0c zqdBKz+fH1q4exIIKXOd(W7m5v{FCFl;4QkwxNWx?GH}dprfEOwzQ*>`yILP!`fAr# z-Pb+_pzh@K+K9UJ?U7b#pu=)aH>6#1+XTGjsQ$x84;nFQn2GVSKXqSYbL*@&hj;se z-Ct_HhV>r<@7?0g-56sI?LVdq?7rKIy1Q+UM7!1QEM4O*@o(qYQEdZWW9X2Pre|() zUt@FYsJ4UaqppwK*RH#c*w@vn5c5^sqZBWhmD|&gA%dFPdvEzMW_z`;Xa;_r1M_vzdEyM{11T zwLZFQa7<|J_~T(~oujqIGwdw1));!sP)0xYtT+?D_E|AabwPKV)?I3@`5ukxyWf`9 zXYWBvQI=@cgBB-f_y4^mZtdsuy5sk%&IgZf>AkCqsQV5dJ|gdkP)5_)(#2!fqqDjM z-t7z4Pt8|3*O$Oum*!lnyDsH>x0>rRwx1cQtKi-J^y@JPWAFBJ`(NbVn$4zOOv>Iv zmgt_3%ju&(#l3k2b$jl6Rab&DH`jp8qj~?N?rUt$oz->lZeOr-qvore8@2yAH@#cF z&P~sIt?8><(7NOP7juzZn{(09$IeCfJlsh9%)?Fg&l{$5ax=I+593w0)j4#ZTg7#& z&DYqu=w00bH|K7DxbvaztDFzD=6v|6==bP7V*D3l@9vNMn&a=b)pOAPtk|o%n|?C> z--0v#-+{9a?x}OB&)nAN9gn)Nv19M7?uDCo?b{l+ny-wzlTV5d!3)3tVsvABZ;q|D zII`|_{S)yst_Q#w*Ms1U>ybJKkK%!?QMK1e-PhQ0%~(AJH{X_TzxKQFf4(vkxs@@W zf{TmuS2m>k?s57_-cNwrd3RJ#f^$ae_h)!}95YoffXC+6I?4Wv`TRd}YlRqlvGl1A z4*PwEzLMXw;Nwa?7QSNGVMjcfbA9DsZEbNWpF{{px3@2LI_ zF8Ase@a&PV!QJ=Z#rHAlzQ&HJcl9m2^wsXVtNY4*q}+YdTI24|z%y1qqm}Ld!;+S+ zja4m8t?M<*$O`qUexRSs!;j#s<4@rBxW})?CBe}iS^fGC9z3dRun51_SBssDY8>n% z`;QtkWXzBe!~3=OX(!*qc6PTLiTjX!yBiVPb{+pqyYai*xf1nPj@{p5ayR^|?PjVb zK_4(;*sgx$Y~|bI?log?)y+HA`ULr}ZfRTdHW7XGZ;hi@H8FVC7M`e@0z9n$$bMbz z?^Tn*|M+m@+)s{gd%h>HrU4J`8q@kdyY(3%E&q#@j5RgwM~`t{JE|GMtVjQ0t(-cl znHzj=_(omBMvU6eJ=wdG`{JAJe%Zs(HK})v8s%4Tcz3q^Jfu)Dxq zRt1mhzt3X0!#k_K@GS;(4ewfguR&_YQ}Z=io!S^{)S5BYYscUuZO7cW%{fWie9Jap zvdw!{JHXp}w^ua`oLu&7`_;L0RC~91ciaQoygTlpZC=OisE%s$rPA*SZSL2et(;GT zr{8P9>Gy`VUw6N^wt08IceQzUzkg`+?tbrY^X`5hZu7d|j_Qdv_v>2n=%}7)^JSCQ z%kbp&B{+F~+xDyT>Q((*_;s+r@f#mJb`5!^(dKpjJcocM{@g{o`FphMRV`BZEmQcd z(8G^C)8^gtvu2xj&(C^o-aS7Xw|V#cY|-Z3>#`j@`3(nWT%+24-RrVXn|JqnV4HXM zdsv&-{r0MkfhX>n;KV(*?bki87kB&huC4_0U0T2X!w0q>(9~;oH+p%^-q+xdHu%#G z{&IuA+29{E_-76NO@sf^gYzVgo0W`jJn-24z|$vq>zL}krpIe(?myob+Fwa@jgou4 z>(5qezo$@py-$SZ%l$ifJAU^%Ow;Dw>o8-Rcd!3!ZQi~9bGLc-^|3&kcV8ciw0V7f z@SLR0mrMW4xB2qntG4;#E~xpfRdW-RZ%}g+ly6pZ6O?aLa}#u|JHfMWjt95rwO93S zH}0rD0hjyXvj+dX!M|zn?;8C31|Nr;%`$$k2JdL_i5h&82A{OSr)lu%8hrW&pSi(j zZSdI|e9;D9yup{~!FyFp!Lxr??qTD+Y4Ft=e4Peguff-E@XZ>0iw57a!FOozof>@S z2JdR{!41A!gAZ-+;SD~b2j{zRc;@QB9=49^;08aW!H;h6V;lUq20x|2Piyeg8~nTm zzo5Y{Z15`@{Hg}Ox(Dx7T?^0HZ|h;}sP1U+I~)9-2EVt#?`!Z!8vL;af4sq;Y4GP7 z{P_ldt-)V!@HZO#-3EWZ!9Qs5&l~*T4gN)gf7jqYH29AV-pPmG@{AgJ=2H&H>hc)={2H&f}_i6Bb8~nfqKe)jUY4D>O z{Fnwmw!u$r@Y5Uoj0Qiy!7ps^iyHi@2EV4kuWj&~8~oM=zpV%FRow~CUcI-6t)sfX z!T;3Yk2Uxc4gO?Ce>eCSJ$SEb0=|43 z(7KoFtorcat>^RlUe)$!K3DhNZwK($GptwD58iIuQSAfvITfK=zWes@?Wj(K@5%G; z*iUNMuZ0irw?TFL>w4Jvz8F4qpLXnL8@5;AW9oLVHf-;~2l3^B`M=-8#&i{?yS}ZGmavc zUe$(Z>3c`;h%vjhKGZnIF8J7W?x+U$;GNY-c-OxC8gX>%XNs-4J-CNYM|D_(AKu_c z!Tm-ob8|w&eo}*<+~BA6;JvH!;X_A^*rVUB{RiyP{kBskwK zF3`iTqgtp3@2nPukJ)X=Xus>to>;7hPe-*x58kU<#y0hNxoi(xXSD*n=lR-EtO@v^7QyA2ftb?02bhU&HgwFq<&C--Qh4$Q-j9zw7|}dk_8j3a0%VKE49)H)hDt zu2!42jgRvcm+0W#IA&u^JZ_^a-TT!)9*)l2SjCs)k-Pi%S<=Wc1BS+s{>M{qXBAU- z8@6KApJ%c$qz{MLdX`ZeJWCJgo{RPuM9!I-uK~=FweJfD)td8n47fZ`Pi*j$8~oG; zKNDWQcb?U--__s`HTdHV{$ztc)!@&<%lG2v8upJH{M!cqslk6~@Np*WIUk*HuZ#BF zbyU53*!hkP-ddm9$@!feE%yUc^ziSfmVsxRJO8US>}xgnIt{*F58hdA1aDopLx#Df zS>KLo>@K%o9K74nNmK=BN;ongm*Wf2L_$dv3S`Xe?odw_3-@o-6(E9bKIi20Z zr+0N8yp>bo=-ge3p1dyW(T4lu27kE0A8qi*d+^TcDR>v(2e-3o&(&Xg`1G!xg}3r5 z9L@jr9)2Cw-y8hh9=x;q5Z<~z{S9wxT{^2zqt%C;alh-)uA}<7!THI3_w~6B{&R7N zd5(DYtjlWWnbKTvU(r14)Ji|kIW^Ceb(m}0dcGOg=Sp*eeTC1_rY*i2_ObnTbU#a) z9v}P6v!&!=e6_^)Ia3*5J_l{h$^OR2v5fC`*S@BqtcyK-x)yJLx2-+>#fPvx+Q`c` za@#mB=4f2IG6%mKFLRWeW9;6OvmDh-6vv$Rqq*R|)bjq*)XIM2=h*dgJ)+r{+Qfxs zu4o+GA0h9bfZ} zeQF|b*$~e^p;EQ5{`$;81n12@qP6voYFaeo%k6K*nj7CWHols1ojD|{YmHOn0Ed8yTmVIB)oC+;WHC$`WwTCG>PE@8e^zwTcNg@`-)(>KHB^<9%;84*mi2JZ(r)! zDdSL_m({7&GB0a@ZL4nVHL2BBqZoT#>cn0TY-}}c>r*?&w%dSOu8%hV+(g=K3bvh^ zIc!F4yAFzLvpKa|=4A`8n(d6W4RvB|3pSRTw(Y2GYYy8}%k|N=Gj-ba1KUnb+b-1F zY}cP!u8;Y2QEQ8R5LnH9sQ>QN?w#=AVE01!D6s1qzBkzQ3f~{>T!kMDcD&(-gB?fs zao{xyej<36nmd+L!RG2UbQ-neRGXEn@^tFVt@T`#j4iceIs;u_+Z*Q`YU8MREuKs5 zp3$z&elMa;YOebo)QM}%J8QeTG4G;IOxtQVroUHB%s+yS zsiy5-YGWGjK5A`h#=D<7@ocBvHjhvz-lJgKsLcU-j5=+!O+ayM+MfOuoAasdrC+g` zzj?gguqBUo(38izVDnI$m0sVY_IfRgz7{pd`#!a8^tGQ4sFS<#v^(BUsBLGPPpNIA zX5ODsr;Rqpn|5D=)9xFv?bKY$Z>gR43=g zJ#W!xvRcdaIThS~v@gJTCZwJYZ5D9u9o@Iy`pQqNa& z{THmUF|=FvLF513{)y~?U_qO-Xj$6&P6H?>a(p@{b_t9#JwKUu_ zHhe|6dpx`^+yX;9I~aDfo8qNo(Gh`T%&=QhqSpwKTr`FnHEZek9!a zcRcgZP^_MOzNYbk1^)%UQo%b3He110B!Fv|_N&1^`{kEkT{&Js7WUkdGhx> zzYl`jm%9DSeV(9Zy!C5rABlG~+PZN4wflW={Fi1E+J9HwezlrsFS=Gcpk066b*p%0 z`T5T=&dP4|vzE9l+JCLs*3VA1G0y|3y*|{;OYY~V@|rmU?mfEx$JRDuJFdRy%aSBR z>E@roF?WyqEBN&Ag~`zM_4AnX=y`2fhCO3{&V?`c#J4D3C+1`)O71hHaPzyb;KqBP;KqBX!5=BO>+AEQ#M9qr zNa5Ojjuful=SU@gv%!6iRN8%xRC1pqmE31XCHL7;xa0FVQMlv#rQqh{MH0LIJ|_y- z?sKA&`>d$sGd8%-ied-0o)v`~&*w!Y_nA@2eP$Hy{Q1nN0J3gNig?qp4bE0sjzV+-PT)WRM z!hw~~F2arPvx{)=;e2)xZazM{2)BQqU4+}8&o094&u16mz{+PA;r8dVi*WA&eRdIU ze?Geiw?CgsT|wji=4N zy`NG`-!p^N5@QyynxCOJWh^t2&#Z8D+k5{dx4pKxz-rpO_mVG9-`)?;4W5EH>W;(x zI}g}3m?<$NFpfT7Y^%iZAU8)pqNQWnr)}ZlN#tK_9T1^Woad z=cgFU*y6NZ1Z>;zMQeU|J&%jQ)yywrUjm-7dtWI}`=!9fb6iVO%a><$owKFEes;5s zHhsMBRL|Tk3wG|*Gk42_ojY@}ALn=lu(~n4SCxxbq&9|q>bDYj65{EjEiqRH8`JUI zPOh(W?0h><)*06-V8@mHwJKQ6?>20&O|4u*=R5uN1>2wBO=JwKYp2-W`{@>U-ofio zn)`m;T2K4+;I^}m^{F?YtWD9+m~wr@-k*CNo8LxY$7k&x+k|>kiZAV()pqNQe{--g zvd6XntDQ(p_n3TRim{9>Zk`F|>DacUG{?48t*5`O;r90sZTgbeHelyk{XqKjyx113 zeiJ_K`|ZHSQTP1Yf!de(Y1^KnW`5%2vlF3zPF7wee_j#jWZ9{ z|Jyq4j;%Q_d!VT&hoNBOW_-iIj!!@PlYR-e>IUelG@n}1aqULzS ziSrw9#&ZH#p7ERr?j)YN`J6Whc>Y-fSJXLH}`Z=Y)VrOnx3`?#LCo{#5%)iQ7Afqgk| z+Rmk@Id9^`xd3dOoNE_?)m$h0Js+$lzKGiRj{9P;v8;Wcxs>`ciZAV#*LG`j@L9?w zVEt?-P7YUs?Z-Z@pq6L8t^zw>>Y1Ob!I>ZJiE|BDn{k{^d2H8$)w0j71FN}??z0=f zzRXqI^_1UH%vGE?H-nSwO<;NU*)3rAnYuaLO0A~d`<2_kXHlzbzmZza*xK&^t7*HP zS{~b7;E}cMPHK7H5AFv0eqbAIw%1qPwaA=1o{Z!7;Br3x09SL}osU0)eK{Z6?xCnT zAL7KhADsEP4=m4o{0ZziqHazPP^)D=9t1ld>e}z6R?C-_5!s$bNv$7dvA5^&r_=< zpO?Yrlk4NJV6~hluY!HKAGEzf`5VQti;d$RehqAF`*7{#&Xeu+wM~5A0PCag>(uht z-U27in_zj?_ieE2Ya4CpOTFyNJ~O_*gD;|FzTW|>Wxchj#s6KfTIS=)#aezbwS8YoojLd# z?6{2e6}3FJZ^5h8wr{BAnV;{#&W~-h+5Ssv^|b#1oY>!k)7`!YvuQ&QB-QJmP*fSa+WMN`lIpAM|nhyHE1KDkT}Uz=K6#xMg|-SPU2LLS>p zV8^A+=N0nUW&!K3&1V<#?DJW{?sMB{)5kdK&Sl1At<66d;~Z$49qf3my+@mqdM=7D z?Q_?5>&)vsU}NOFfO)}c`Mya$2gO*%7N_m}VB2O~3xYFdpRvfDKfg0u7(55_XPfx< z0joQXg{bA3heg27gK@O!<8vH!+xz~vICv&vYV#S5Jh?3iHaBfcP|J;NyQQ>I+eVu{ zi&Cp6_Htk~Z9dPDd!72sdwK9~)au%o(MEBsRMm?7$6Wm!nS54)t3QB`*ZRs}wS3m} znUGq}f>puOQJ#?x0?en*Uep^B+D!R~t~X6xD{*j&CDs_lxZ_r<;K@r<;Q1 zj&~mXHwO=;RyY4msMXBh&-Pn_)sp|*_-+MPkI&ZNEovWQ$n}YR8*nqmwrJ|{*{=5S zz0bVuXL~gDP02;RBY20pOw6d&c7i)!i%^Vd8~qY@XRx{DJymX-*!zLat?YLfxO#m0 z*FNPO?24wI+y;P~xeY{1ZpO5Yeu>)!Hn)85BDYQKgTT$)2BWFRXE(4h^4*GDAMI4t z5dPye;ddw5f4jrg8uX-m3JsU0<#=zb`l#d=SNb;9O)sc-u08W{DA?T1C3AKdTs`l1hij*J zcI30jk=iLoP!45W#y$#cd~H5g@%NrbgVmjzeW~T%s~k&x9Hq?D{`W&WzP4>v$33Ce z2-ltWZ_tjRI5uO;^)rV3o&>f(Z6{L8Grm*6o{id0rj~1ak9Mblooj8UQp=a;8upAk z9sDJ={TkD@`nV1oQ@d{KP#eqlk+Z>zQjB#LwcLH-?;XzpkEB-DekQeA*8E(sTGr0J zbRJwiKIenYHFF@>C-w`##wgE>3*qYVxv2Ij`?(lRJ!i%x;O3ceDH>DXI?s%08~qaZ zGO)SjJd@id_RGP|+^#@VkI$90kLQka>Kt5!rk>oc1~+rN1}(W6(>D4g?zLcZ%XucZ zP3+f!&8_VBdboOgZU7r2=b2m|?Nrr`{AWH&d7j+_SC7xlU}NMwlj{@vEns7m=h>}r z_4wQdHb%}fxjxR9=h^Mxz7)^1JE?tno~hqK`8~ybE4Gd2+1+6Kbzj~^Ezf!OTd?Pu zx;c2B{SIsnInU(!d0p72@$D!6e*l;M@|t_tlvnRmzXTOhA%e6TNe+I8m+n%JBYx6w&3)s1~-BZ-^oM%siJ*f0^@;rrura*$og2sU zCR{x}Z-I@G^FgkUcB<-a{^LF^&xgOm)#LLH*cdq<OIUnM0o%7*yaCzNjk9lqU3!C=L$G^emUY-wMz}0g;dPJv=zwyGq1IfBo;<(Sp1zB*v1F%ORa8Soz!X>--KYba_uI9tH)m5L zmXf^Bz5&8Gva#Xfy)ckSoGe+IZdzM{=oYoyYx&4gxKU-6r{*7Vzy&jRK% z3z{*FVH)-#qBrj;iNmUa)P|({?_vdDw^7Y1+=OUid9g_~m<6`&bZNTl!cC zY+Lms>V6jn+qbrf8Jq3;fa#7*`EIJv7pZl>H_|6@7X>>%+B1iXft};LN6Gc`x^myT zN8PJglO@2-eYPZ;dVH1wm+L0iCw(qm+ta6fm-;hg`n1lOx*RxXm47Cpye^lAYd1Da zP^|zqzw*6oMKtxCsVjli$}@FkxcVA=F_bfP6}a)Wd8R%>{8ho~UW5L2R-QApFSyLp zec+k8x;~VgscV4Md?oKS;j2-y*X8;d!+zHW+n@ceMJ?CnnYu1GXX-j&xwh-Dtq*oB zY_}e@JZI_#;HU7hUt`)@of%P zE7xudxO#lH1aC&knJU*uyMI1zE3h$g&$T-JZ4FnC&o*FVG`hCR!#790YFevxCvp<8uhOTsOHs>GROqo<8L{m(!

RyA( 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 ro7?s$-rb1l1V6v5_<0)M2ewT1wj-< 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 literal 37584 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 diff --git a/piet-gpu/shader/ptcl.h b/piet-gpu/shader/ptcl.h index 6267fc5..936c431 100644 --- a/piet-gpu/shader/ptcl.h +++ b/piet-gpu/shader/ptcl.h @@ -14,6 +14,10 @@ struct CmdColorRef { uint offset; }; +struct CmdLinGradRef { + uint offset; +}; + struct CmdImageRef { uint offset; }; @@ -62,6 +66,19 @@ CmdColorRef CmdColor_index(CmdColorRef ref, uint index) { return CmdColorRef(ref.offset + index * CmdColor_size); } +struct CmdLinGrad { + uint index; + float line_x; + float line_y; + float line_c; +}; + +#define CmdLinGrad_size 16 + +CmdLinGradRef CmdLinGrad_index(CmdLinGradRef ref, uint index) { + return CmdLinGradRef(ref.offset + index * CmdLinGrad_size); +} + struct CmdImage { uint index; ivec2 offset; @@ -99,11 +116,12 @@ CmdJumpRef CmdJump_index(CmdJumpRef ref, uint index) { #define Cmd_Solid 3 #define Cmd_Alpha 4 #define Cmd_Color 5 -#define Cmd_Image 6 -#define Cmd_BeginClip 7 -#define Cmd_EndClip 8 -#define Cmd_Jump 9 -#define Cmd_size 12 +#define Cmd_LinGrad 6 +#define Cmd_Image 7 +#define Cmd_BeginClip 8 +#define Cmd_EndClip 9 +#define Cmd_Jump 10 +#define Cmd_size 20 CmdRef Cmd_index(CmdRef ref, uint index) { return CmdRef(ref.offset + index * Cmd_size); @@ -159,6 +177,28 @@ void CmdColor_write(Alloc a, CmdColorRef ref, CmdColor s) { write_mem(a, ix + 0, s.rgba_color); } +CmdLinGrad CmdLinGrad_read(Alloc a, CmdLinGradRef 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); + CmdLinGrad s; + s.index = raw0; + s.line_x = uintBitsToFloat(raw1); + s.line_y = uintBitsToFloat(raw2); + s.line_c = uintBitsToFloat(raw3); + return s; +} + +void CmdLinGrad_write(Alloc a, CmdLinGradRef ref, CmdLinGrad s) { + uint ix = ref.offset >> 2; + write_mem(a, ix + 0, s.index); + write_mem(a, ix + 1, floatBitsToUint(s.line_x)); + write_mem(a, ix + 2, floatBitsToUint(s.line_y)); + write_mem(a, ix + 3, floatBitsToUint(s.line_c)); +} + CmdImage CmdImage_read(Alloc a, CmdImageRef ref) { uint ix = ref.offset >> 2; uint raw0 = read_mem(a, ix + 0); @@ -222,6 +262,10 @@ CmdColor Cmd_Color_read(Alloc a, CmdRef ref) { return CmdColor_read(a, CmdColorRef(ref.offset + 4)); } +CmdLinGrad Cmd_LinGrad_read(Alloc a, CmdRef ref) { + return CmdLinGrad_read(a, CmdLinGradRef(ref.offset + 4)); +} + CmdImage Cmd_Image_read(Alloc a, CmdRef ref) { return CmdImage_read(a, CmdImageRef(ref.offset + 4)); } @@ -258,6 +302,11 @@ void Cmd_Color_write(Alloc a, CmdRef ref, CmdColor s) { CmdColor_write(a, CmdColorRef(ref.offset + 4), s); } +void Cmd_LinGrad_write(Alloc a, CmdRef ref, CmdLinGrad s) { + write_mem(a, ref.offset >> 2, Cmd_LinGrad); + CmdLinGrad_write(a, CmdLinGradRef(ref.offset + 4), s); +} + void Cmd_Image_write(Alloc a, CmdRef ref, CmdImage s) { write_mem(a, ref.offset >> 2, Cmd_Image); CmdImage_write(a, CmdImageRef(ref.offset + 4), s); diff --git a/piet-gpu/shader/scene.h b/piet-gpu/shader/scene.h index 38c2549..254d4aa 100644 --- a/piet-gpu/shader/scene.h +++ b/piet-gpu/shader/scene.h @@ -18,6 +18,10 @@ struct FillColorRef { uint offset; }; +struct FillLinGradientRef { + uint offset; +}; + struct FillImageRef { uint offset; }; @@ -88,6 +92,18 @@ FillColorRef FillColor_index(FillColorRef ref, uint index) { return FillColorRef(ref.offset + index * FillColor_size); } +struct FillLinGradient { + uint index; + vec2 p0; + vec2 p1; +}; + +#define FillLinGradient_size 20 + +FillLinGradientRef FillLinGradient_index(FillLinGradientRef ref, uint index) { + return FillLinGradientRef(ref.offset + index * FillLinGradient_size); +} + struct FillImage { uint index; ivec2 offset; @@ -145,12 +161,13 @@ SetFillModeRef SetFillMode_index(SetFillModeRef ref, uint index) { #define Element_Quad 2 #define Element_Cubic 3 #define Element_FillColor 4 -#define Element_SetLineWidth 5 -#define Element_Transform 6 -#define Element_BeginClip 7 -#define Element_EndClip 8 -#define Element_FillImage 9 -#define Element_SetFillMode 10 +#define Element_FillLinGradient 5 +#define Element_FillImage 6 +#define Element_SetLineWidth 7 +#define Element_Transform 8 +#define Element_BeginClip 9 +#define Element_EndClip 10 +#define Element_SetFillMode 11 #define Element_size 36 ElementRef Element_index(ElementRef ref, uint index) { @@ -215,6 +232,20 @@ FillColor FillColor_read(FillColorRef ref) { return s; } +FillLinGradient FillLinGradient_read(FillLinGradientRef ref) { + uint ix = ref.offset >> 2; + uint raw0 = scene[ix + 0]; + uint raw1 = scene[ix + 1]; + uint raw2 = scene[ix + 2]; + uint raw3 = scene[ix + 3]; + uint raw4 = scene[ix + 4]; + FillLinGradient s; + s.index = raw0; + s.p0 = vec2(uintBitsToFloat(raw1), uintBitsToFloat(raw2)); + s.p1 = vec2(uintBitsToFloat(raw3), uintBitsToFloat(raw4)); + return s; +} + FillImage FillImage_read(FillImageRef ref) { uint ix = ref.offset >> 2; uint raw0 = scene[ix + 0]; @@ -287,6 +318,14 @@ FillColor Element_FillColor_read(ElementRef ref) { return FillColor_read(FillColorRef(ref.offset + 4)); } +FillLinGradient Element_FillLinGradient_read(ElementRef ref) { + return FillLinGradient_read(FillLinGradientRef(ref.offset + 4)); +} + +FillImage Element_FillImage_read(ElementRef ref) { + return FillImage_read(FillImageRef(ref.offset + 4)); +} + SetLineWidth Element_SetLineWidth_read(ElementRef ref) { return SetLineWidth_read(SetLineWidthRef(ref.offset + 4)); } @@ -303,10 +342,6 @@ Clip Element_EndClip_read(ElementRef ref) { return Clip_read(ClipRef(ref.offset + 4)); } -FillImage Element_FillImage_read(ElementRef ref) { - return FillImage_read(FillImageRef(ref.offset + 4)); -} - SetFillMode Element_SetFillMode_read(ElementRef ref) { return SetFillMode_read(SetFillModeRef(ref.offset + 4)); } diff --git a/piet-gpu/shader/setup.h b/piet-gpu/shader/setup.h index 3ed1690..cfe5f28 100644 --- a/piet-gpu/shader/setup.h +++ b/piet-gpu/shader/setup.h @@ -28,6 +28,8 @@ #define LG_N_TILE (7 + LG_WG_FACTOR) #define N_SLICE (N_TILE / 32) +#define GRADIENT_WIDTH 512 + struct Config { uint n_elements; // paths uint n_pathseg; diff --git a/piet-gpu/shader/tile_alloc.spv b/piet-gpu/shader/tile_alloc.spv index 4a39f9681edd50628c16a2a020454641fdf51f1f..12165b5ba50b9b1997874de77a0371e3a5cb2604 100644 GIT binary patch delta 3306 zcmZveS!`8R6o&U{?=8cn2o#D1l%Wb$icnF35KTxlhz}|}_#~-U!ULg-(vtXKa*X=o zBe{=;S49d4UKIyWCMTRw#G#7dfQrTu85QgIUCzcM;Uv53|Npi3T5IpUZqHfYy|ufs zzOHpZ2uTD2;7=E(u{-2%#7nLSN`r zd3@w~y!n5;7+T;xD|*UZol91%y7z3(OVMf-behqe^@JEQUgu zS$%BCz9gAdT|D%*Lef^*Fk*T7B()b=KNWuiwinLvgmLio*r-i_Z-5tYtIy5&#!S<{ zIm51r@wTE3%<)&`jLd&W*bnJvf&o4Qn_xJ@1oFO2)8ELZxVXw8pihw=qj&DOGz16Z{=`2FwpC3qxOUBCb3)GRb6&|cusYU>Z->$87d ze9(yu4{Q)YzXGdy3hvZq{~E5oHsjxb)!gM_tdF}?|CXWVF2%-OjQ>0Eo!A(+f&Afn zL>;|MGSLrUwKCY<#6a3(VL)xp5wOYKq4P~*AwOY#EW|lKGSnITA8)R zISKYLj=mF&Gj@l8Br(t_uz})l@HANME*8gb{|j!n>x=9D2CIA7$FXwH*2Lx@**RaC zSZ96Qj!q}VK>vUZV4$N|dGs;0ro|Rc;I^-NoKpv0gBIu1XLHoufN!57*zQ|ocerpc zwgFLxiG5AV#RIS=68oAo;2gTdHG{xYv9;GKSikf739iqCzUBsl)fRzcp(V6b$L$m_ zAIA`|qKo{D7|K}9qWGUe?i{=57W84@jx6Z%Ebuh=aCChOiDUPT0IT`Lf|}sG^0W7(V*jGQT#)y27(GNEEIFTWb7aPX#k6sQV+7U(PVN$;5GO zJJ@0)p9VH|e1%*Ec8tU<&xv1R7Q3%mwC p0q%U~>37$jfQ4#fVb_As71qY0>kt%sbH}QdKi0|BBW=5e{R{b@oy`CM delta 3283 zcmZ{mS!|S56vyvOXUZ}ZDTN{hrGQAaAl3y#j3y)~;)4o4nMmqDcpy|!S`r^jK4X0K zfsC)bDwaiHRE#3Bskm>T;(~R7T(tB-cNfFi%8pV?b3;D6yAT>H`$`j% z;peF>=kd}1;>B!90;)@%q9(dyk7!WI9@Q3zfC@JjEn z=IZ0a_T+Lis|$zUUdXjq){k74^z#%POc);uVJ)^1s@4u)hb_R>uTS~#(!jL1(!`j@*;(mTDXgz8&X@S&L6v_m^_K} z1nV&Jahy+q{hZ?1^sQm3oe23FzLA*K@G>zc(V|a#1A83%2JplTe;Vwb*<4Yt$tIRp zhqya~2^9>A394W>=yQ&8u`?{Eg`Wl6l=c{fw_u-Vg;3cxu`PK4X!u5IdIh(F)x45E zoBTPJ+e{-KK;KTR%c~mO*#^!&&&zOg?O2TIlMK7F<`2R+276JZ?`vN=)tFGUFb!s*m3uyoAQo8?3eC~0t|GVU#;t+fT z&R@|}utUEAU%>}hYf}C-Sk0&W7VF2SRR4yh=2MDIyb%9);JdLguXpPpn)+H|tn)qi zV8Wj=#HWdgv`53BTF?(*i~EFbu!xQPg!N-1#{9@qvk~!`kgH*}c=SJmJ6N;1>Na@@ zoa?I0p4yW90+h!80>6R{SGU|@tRKti`;Db$IdLrUJJ?&YE`7#7z-ndon&&v!k9qVR zW1Y^0q?Sk$6P*B?D1I?dg4OO}bNmjRg8LoN7x(=MR(IM*v2xGW!Zu5>zkOwL)qUIo zod(53XTT;f(GjdX`p$vX(mNd3TD!jLF(!w$IunymW7K^Be~$`aZ{Gsy*ESBt77=w= z*xyRIxDjh1@gS@TXK_p1GZ@^7HQqS=#+@a(J`4IoHw3J<02~_~ik9fOgPF|5Q35Nv z$#;n+)+#o|{}gg#yhgX8UjXh(lP*gWPlt~{*EgR$-hY2t)%?VUM#A~kPih_6v4Vki zH;2Gc;Ate&=j(u6-!1rB!8WGPR|B~xf(c{za~sxI3is)E*74G6ZDJ#~Eze_nk$g*v z$1)Dw#)>l@4_4bwQVaU-q2?)gv=@U9_+45w0VLa*K6g7#fxK!#xFiDT^QO{*Jb!188_ma~asC;#c@`urca>-Q<_BOk-Mc+}jDZt;nZ= z%^iO&rh|=9_tdz&Ntgkt-CjC!qZjc?G4q j&uXLE*w{7TdSjjSOLZ-RVt?iU)v^aTrFybs*NDFWAlIK$ diff --git a/piet-gpu/src/gradient.rs b/piet-gpu/src/gradient.rs new file mode 100644 index 0000000..a5c52b8 --- /dev/null +++ b/piet-gpu/src/gradient.rs @@ -0,0 +1,145 @@ +// Copyright 2021 The piet-gpu authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Also licensed under MIT license, at your choice. + +//! Implementation of gradients. + +use std::collections::hash_map::{Entry, HashMap}; + +use piet::{Color, FixedLinearGradient, GradientStop}; + +#[derive(Clone)] +pub struct BakedGradient { + ramp: Vec, +} + +#[derive(Clone)] +pub struct LinearGradient { + start: [f32; 2], + end: [f32; 2], + ramp_id: u32, +} + +#[derive(Default)] +pub struct RampCache { + ramps: Vec, + map: HashMap, +} + +#[derive(Clone, Hash, PartialEq, Eq)] +struct GradientRamp(Vec); + +pub const N_SAMPLES: usize = 512; +// TODO: make this dynamic +pub const N_GRADIENTS: usize = 256; + +#[derive(Clone, Copy)] +struct PremulRgba([f64; 4]); + +impl PremulRgba { + fn from_color(c: &Color) -> PremulRgba { + let rgba = c.as_rgba(); + let a = rgba.3; + // TODO: sRGB nonlinearity? This is complicated. + PremulRgba([rgba.0 * a, rgba.1 * a, rgba.2 * a, a]) + } + + fn to_u32(&self) -> u32 { + let z = self.0; + Color::rgba(z[0], z[1], z[2], z[3]).as_rgba_u32() + } + + fn lerp(&self, other: PremulRgba, t: f64) -> PremulRgba { + fn l(a: f64, b: f64, t: f64) -> f64 { + a * (1.0 - t) + b * t + } + let a = self.0; + let b = other.0; + PremulRgba([l(a[0], b[0], t), l(a[1], b[1], t), l(a[2], b[2], t), l(a[2], b[3], t)]) + } +} + +impl GradientRamp { + fn from_stops(stops: &[GradientStop]) -> GradientRamp { + let mut last_u = 0.0; + let mut last_c = PremulRgba::from_color(&stops[0].color); + let mut this_u = last_u; + let mut this_c = last_c; + let mut j = 0; + let v = (0..N_SAMPLES).map(|i| { + let u = (i as f64) / 255.0; + while u > this_u { + last_u = this_u; + last_c = this_c; + if let Some(s) = stops.get(j + 1) { + this_u = s.pos as f64; + this_c = PremulRgba::from_color(&s.color); + j += 1; + } else { + break; + } + } + let du = this_u - last_u; + let c = if du < 1e-9 { + this_c + } else { + last_c.lerp(this_c, (u - last_u) / du) + }; + c.to_u32() + }).collect(); + GradientRamp(v) + } +} + +impl RampCache { + /// Add a gradient ramp to the cache. + /// + /// Currently there is no eviction, so if the gradient is animating, there may + /// be resource leaks. In order to support lifetime management, the signature + /// should probably change so it returns a ref-counted handle, so that eviction + /// is deferred until the last handle is dropped. + /// + /// This function is pretty expensive, but the result is lightweight. + fn add_ramp(&mut self, ramp: &[GradientStop]) -> usize { + let ramp = GradientRamp::from_stops(ramp); + match self.map.entry(ramp) { + Entry::Occupied(o) => *o.get(), + Entry::Vacant(v) => { + let idx = self.ramps.len(); + self.ramps.push(v.key().clone()); + v.insert(idx); + idx + } + } + } + + pub fn add_linear_gradient(&mut self, lin: &FixedLinearGradient) -> LinearGradient { + let ramp_id = self.add_ramp(&lin.stops); + LinearGradient { + ramp_id: ramp_id as u32, + start: crate::render_ctx::to_f32_2(lin.start), + end: crate::render_ctx::to_f32_2(lin.end), + } + } +} + + +#[cfg(test)] +mod test { + #[test] + fn it_works() { + println!("it works!"); + } +} diff --git a/piet-gpu/src/lib.rs b/piet-gpu/src/lib.rs index d1c1dd6..9cba9e6 100644 --- a/piet-gpu/src/lib.rs +++ b/piet-gpu/src/lib.rs @@ -1,3 +1,4 @@ +mod gradient; mod pico_svg; mod render_ctx; mod text; @@ -248,6 +249,8 @@ pub struct Renderer { // Keep a reference to the image so that it is not destroyed. _bg_image: Image, + + gradients: Image, } impl Renderer { @@ -351,22 +354,14 @@ impl Renderer { let bg_image = Self::make_test_bg_image(&session); - let k4_code = if session.gpu_info().has_descriptor_indexing { - ShaderCode::Spv(include_bytes!("../shader/kernel4_idx.spv")) - } else { - println!("doing non-indexed k4"); - ShaderCode::Spv(include_bytes!("../shader/kernel4.spv")) - }; - // This is an arbitrary limit on the number of textures that can be referenced by - // the fine rasterizer. To set it for real, we probably want to pay attention both - // to the device limit (maxDescriptorSetSampledImages) but also to the number of - // images encoded (I believe there's an cost when allocating descriptor pools). If - // it can't be satisfied, then for compatibility we'll probably want to fall back - // to an atlasing approach. - // - // However, we're adding only one texture for now. Avoid a harmless Vulkan validation - // error by using a tight bound. - let max_textures = 1; + let gradients = Self::make_gradient_image(&session); + + let k4_code = ShaderCode::Spv(include_bytes!("../shader/kernel4.spv")); + // This is a bit of a stand-in for future development. For now, we assume one + // atlas image for all images, and another image for the gradients. In the future, + // on GPUs that support it, we will probably want to go to descriptor indexing in + // order to cut down on allocation and copying for the atlas image. + let max_textures = 2; let k4_pipeline = session .pipeline_builder() .add_buffers(2) @@ -377,7 +372,7 @@ impl Renderer { .descriptor_set_builder() .add_buffers(&[&memory_buf_dev, &config_buf]) .add_images(&[&image_dev]) - .add_textures(&[&bg_image]) + .add_textures(&[&bg_image, &gradients]) .build(&session, &k4_pipeline)?; Ok(Renderer { @@ -405,6 +400,7 @@ impl Renderer { n_paths, n_pathseg, _bg_image: bg_image, + gradients: gradients, }) } @@ -417,6 +413,12 @@ impl Renderer { ImageLayout::Undefined, ImageLayout::General, ); + // TODO: make gradient upload optional, only if it's changed + cmd_buf.image_barrier( + &self.gradients, + ImageLayout::Undefined, + ImageLayout::General, + ); cmd_buf.reset_query_pool(&query_pool); cmd_buf.write_timestamp(&query_pool, 0); cmd_buf.dispatch( @@ -492,9 +494,7 @@ impl Renderer { if format != ImageFormat::RgbaPremul { return Err("unsupported image format".into()); } - let host_upload = BufferUsage::MAP_WRITE | BufferUsage::COPY_SRC; - let mut buffer = session.create_buffer(buf.len() as u64, host_upload)?; - buffer.write(buf)?; + let buffer = session.create_buffer_init(&buf, BufferUsage::COPY_SRC)?; let image = session.create_image2d(width.try_into()?, height.try_into()?)?; let mut cmd_buf = session.cmd_buf()?; cmd_buf.begin(); @@ -528,4 +528,10 @@ impl Renderer { } Self::make_image(session, WIDTH, HEIGHT, &buf, ImageFormat::RgbaPremul).unwrap() } + + fn make_gradient_image(session: &Session) -> Image { + unsafe { + session.create_image2d(gradient::N_SAMPLES as u32, gradient::N_GRADIENTS as u32).unwrap() + } + } } diff --git a/piet-gpu/src/render_ctx.rs b/piet-gpu/src/render_ctx.rs index fe1c4ff..bc5660e 100644 --- a/piet-gpu/src/render_ctx.rs +++ b/piet-gpu/src/render_ctx.rs @@ -14,6 +14,7 @@ use piet_gpu_types::scene::{ Clip, CubicSeg, Element, FillColor, LineSeg, QuadSeg, SetFillMode, SetLineWidth, Transform, }; +use crate::gradient::{LinearGradient, RampCache}; use crate::text::Font; pub use crate::text::{PathEncoder, PietGpuText, PietGpuTextLayout, PietGpuTextLayoutBuilder}; @@ -38,12 +39,14 @@ pub struct PietGpuRenderContext { cur_transform: Affine, state_stack: Vec, clip_stack: Vec, + + ramp_cache: RampCache, } #[derive(Clone)] pub enum PietGpuBrush { Solid(u32), - Gradient, + LinGradient(LinearGradient), } #[derive(Default)] @@ -92,6 +95,7 @@ impl PietGpuRenderContext { cur_transform: Affine::default(), state_stack: Vec::new(), clip_stack: Vec::new(), + ramp_cache: RampCache::default(), } } @@ -148,8 +152,14 @@ impl RenderContext for PietGpuRenderContext { PietGpuBrush::Solid(premul.as_rgba_u32()) } - fn gradient(&mut self, _gradient: impl Into) -> Result { - Ok(Self::Brush::Gradient) + fn gradient(&mut self, gradient: impl Into) -> Result { + match gradient.into() { + FixedGradient::Linear(lin) => { + let lin = self.ramp_cache.add_linear_gradient(&lin); + Ok(PietGpuBrush::LinGradient(lin)) + } + _ => todo!("don't do radial gradients yet"), + } } fn clear(&mut self, _color: Color) {}