diff options
author | rodri <rgl@antares-labs.eu> | 2024-05-23 21:08:55 +0000 |
---|---|---|
committer | rodri <rgl@antares-labs.eu> | 2024-05-23 21:08:55 +0000 |
commit | 7739f20ce8608c0613552e430f31008705050bf1 (patch) | |
tree | cb636ae88fa0fe9fedabcb841215d597838de3e7 | |
parent | e2e203e6fa64a9e57c8d4ba4cea4deec89d8f0c1 (diff) | |
download | libgraphics-7739f20ce8608c0613552e430f31008705050bf1.tar.gz libgraphics-7739f20ce8608c0613552e430f31008705050bf1.tar.bz2 libgraphics-7739f20ce8608c0613552e430f31008705050bf1.zip |
replace the Framebufctl's Lock with a QLock.
this provides fair scheduling, minimizing contention.
-rw-r--r-- | fb.c | 12 | ||||
-rw-r--r-- | graphics.h | 2 | ||||
-rw-r--r-- | render.c | 1 |
3 files changed, 8 insertions, 7 deletions
@@ -13,10 +13,10 @@ framebufctl_draw(Framebufctl *ctl, Image *dst) { Framebuf *fb; - lock(ctl); + qlock(ctl); fb = ctl->getfb(ctl); loadimage(dst, rectaddpt(fb->r, dst->r.min), byteaddr(fb->cb, fb->r.min), bytesperline(fb->r, fb->cb->depth)*Dy(fb->r)); - unlock(ctl); + qunlock(ctl); } static void @@ -24,18 +24,18 @@ framebufctl_memdraw(Framebufctl *ctl, Memimage *dst) { Framebuf *fb; - lock(ctl); + qlock(ctl); fb = ctl->getfb(ctl); memimagedraw(dst, dst->r, fb->cb, ZP, nil, ZP, SoverD); - unlock(ctl); + qunlock(ctl); } static void framebufctl_swap(Framebufctl *ctl) { - lock(ctl); + qlock(ctl); ctl->idx ^= 1; - unlock(ctl); + qunlock(ctl); } static void @@ -217,7 +217,7 @@ struct Framebuf struct Framebufctl { - Lock; + QLock; Framebuf *fb[2]; /* double buffering */ uint idx; /* front buffer index */ @@ -123,6 +123,7 @@ rasterize(Rastertask *task) z = flerp(prim.v[0].p.z, prim.v[1].p.z, perc); depth = fclamp(z, 0, 1); + /* TODO get rid of the bounds check and make sure the clipping doesn't overflow */ if(!ptinrect(p, params->fb->r) || depth <= params->fb->zb[p.x + p.y*Dx(params->fb->r)]) goto discard; params->fb->zb[p.x + p.y*Dx(params->fb->r)] = depth; |