From fe1790e72481d8f4a9994299979933a365405f26 Mon Sep 17 00:00:00 2001 From: Raph Levien Date: Sat, 16 May 2020 21:20:25 -0700 Subject: [PATCH] Fix bbox bug Bounding boxes were being calculated as way too large in the element processing. Also wire up counters so winit binary is happy. --- piet-gpu/bin/winit.rs | 5 ++--- piet-gpu/shader/elements.comp | 1 + piet-gpu/shader/elements.spv | Bin 43616 -> 43780 bytes 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/piet-gpu/bin/winit.rs b/piet-gpu/bin/winit.rs index 1c263bb..fd30fa3 100644 --- a/piet-gpu/bin/winit.rs +++ b/piet-gpu/bin/winit.rs @@ -37,7 +37,7 @@ fn main() -> Result<(), Error> { .map(|_| device.create_cmd_buf()) .collect::, Error>>()?; let query_pools = (0..NUM_FRAMES) - .map(|_| device.create_query_pool(6)) + .map(|_| device.create_query_pool(5)) .collect::, Error>>()?; let mut ctx = PietGpuRenderContext::new(); @@ -70,12 +70,11 @@ fn main() -> Result<(), Error> { let timestamps = device.reap_query_pool(query_pool).unwrap(); window.set_title(&format!( - "k1: {:.3}ms, k2s: {:.3}ms, k2f: {:.3}ms, k3: {:.3}ms, k4: {:.3}ms", + "e: {:.3}ms, b: {:.3}ms, c: {:.3}ms, f: {:.3}ms", timestamps[0] * 1e3, (timestamps[1] - timestamps[0]) * 1e3, (timestamps[2] - timestamps[1]) * 1e3, (timestamps[3] - timestamps[2]) * 1e3, - (timestamps[4] - timestamps[3]) * 1e3, )); } diff --git a/piet-gpu/shader/elements.comp b/piet-gpu/shader/elements.comp index 76d56b6..8f87b87 100644 --- a/piet-gpu/shader/elements.comp +++ b/piet-gpu/shader/elements.comp @@ -82,6 +82,7 @@ State combine_state(State a, State b) { c.translate.y = a.mat.y * b.translate.x + a.mat.w * b.translate.y + a.translate.y; c.linewidth = (b.flags & FLAG_SET_LINEWIDTH) == 0 ? a.linewidth : b.linewidth; c.flags = (a.flags & (FLAG_SET_LINEWIDTH | FLAG_SET_BBOX)) | b.flags; + c.flags |= (a.flags & FLAG_RESET_BBOX) >> 1; return c; } diff --git a/piet-gpu/shader/elements.spv b/piet-gpu/shader/elements.spv index a19b5f82bbdd333d0d9161ab31e49d2ab49648f2..7828aa4732cc2ea3c5291afc93f45b4af815d3c3 100644 GIT binary patch literal 43780 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 O*%GYo{9Hr1YxqAgC=VY1 delta 14524 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