From 2ac26a1f9e8445d1de7ce90953b871227bd17872 Mon Sep 17 00:00:00 2001 From: milang Date: Thu, 29 Aug 2019 09:51:19 +0200 Subject: [PATCH] add clear with dma --- src/render/zbuffer.c | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/src/render/zbuffer.c b/src/render/zbuffer.c index cfd6fab..4b9e4eb 100644 --- a/src/render/zbuffer.c +++ b/src/render/zbuffer.c @@ -2,6 +2,7 @@ #include #include +#include #include #include #include @@ -18,25 +19,31 @@ static const int size_char = size_uint32 * sizeof(uint32_t); static int32_t *zbuffer = (void *)0x88080000 - ((size_char / 32) * 32 + 1); -GALIGNED(32) GSECTION(".rodata") static const int32_t clearval[8]={render_max_dist,render_max_dist,render_max_dist,render_max_dist,render_max_dist,render_max_dist,render_max_dist,render_max_dist}; + +// gint doesn't provide any prototype for that function which is implemented +extern void dma_memset(void *dst, uint32_t l, size_t size); void render_zbuffer_clear() { - uint32_t indice = 0; + uint32_t indice = 0; + + if (isSH3()) + for (indice = 0; indice < size_uint32; indice ++) + zbuffer[indice] = render_max_dist; + else + dma_memset(zbuffer, render_max_dist, size_char); - for (indice = 0; indice < size_uint32; indice ++) - zbuffer[indice] = render_max_dist; } bool render_zbuffer_set_px(uint32_t x, uint32_t y, uint32_t dist) { - const int indice = x * render_height + y; - - if (zbuffer[indice]>dist && dist>=render_min_dist && dist<=render_max_dist) - { - zbuffer[indice] = dist; - return true; - } - - return false; + const int indice = x * render_height + y; + + if (zbuffer[indice]>dist && dist>=render_min_dist && dist<=render_max_dist) + { + zbuffer[indice] = dist; + return true; + } + + return false; } \ No newline at end of file