summaryrefslogtreecommitdiff
path: root/apps/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugins')
-rw-r--r--apps/plugins/doom/i_video.c2
-rw-r--r--apps/plugins/lib/grey.h6
-rw-r--r--apps/plugins/lib/grey_core.c21
-rw-r--r--apps/plugins/mpegplayer/stream_mgr.c2
-rw-r--r--apps/plugins/test_fps.c2
-rw-r--r--apps/plugins/zxbox/zxbox.c5
6 files changed, 26 insertions, 12 deletions
diff --git a/apps/plugins/doom/i_video.c b/apps/plugins/doom/i_video.c
index ce4b670..2e98ce9 100644
--- a/apps/plugins/doom/i_video.c
+++ b/apps/plugins/doom/i_video.c
@@ -696,7 +696,7 @@ void I_InitGraphics(void)
#ifndef HAVE_LCD_COLOR
gbuf=malloc(GREYBUFSIZE);
- grey_init(rb, gbuf, GREYBUFSIZE, 0, LCD_WIDTH, LCD_HEIGHT, NULL);
+ grey_init(rb, gbuf, GREYBUFSIZE, GREY_ON_COP, LCD_WIDTH, LCD_HEIGHT, NULL);
/* switch on greyscale overlay */
grey_show(true);
#endif
diff --git a/apps/plugins/lib/grey.h b/apps/plugins/lib/grey.h
index 3f7be44..95dca6b 100644
--- a/apps/plugins/lib/grey.h
+++ b/apps/plugins/lib/grey.h
@@ -45,8 +45,10 @@
#define GREY_INFO_STRUCT_IRAM struct _grey_info _grey_info IBSS_ATTR;
/* Features you can request on library init (ORed together): */
-#define GREY_BUFFERED 0x0001
-#define GREY_RAWMAPPED 0x0002
+#define GREY_BUFFERED 0x0001 /* Use a chunky buffer */
+#define GREY_RAWMAPPED 0x0002 /* No gamma & LCD linearisation */
+#define GREY_ON_COP 0x0004 /* Run ISR on COP (PP targets) */
+ /* TODO: only usable in conjunction with GREY_INFO_STRUCT_IRAM atm */
/* Library initialisation and release */
bool grey_init(struct plugin_api* newrb, unsigned char *gbuf, long gbuf_size,
diff --git a/apps/plugins/lib/grey_core.c b/apps/plugins/lib/grey_core.c
index 20c33a6..1326599 100644
--- a/apps/plugins/lib/grey_core.c
+++ b/apps/plugins/lib/grey_core.c
@@ -495,11 +495,12 @@ bool grey_init(struct plugin_api* newrb, unsigned char *gbuf, long gbuf_size,
#endif
plane_size = _GREY_MULUQ(width, height);
-#ifdef CPU_COLDFIRE
- plane_size += (-plane_size) & 0xf; /* All buffers should be line aligned */
+#if defined(CPU_COLDFIRE) /* Buffers should be line aligned */ \
+ || defined(CPU_PP) && (NUM_CORES > 1) /* Buffers must be cache line aligned */
+ plane_size += (-plane_size) & 0xf;
buftaken = (-(long)gbuf) & 0xf;
-#else
- buftaken = (-(long)gbuf) & 3; /* All buffers must be long aligned. */
+#else /* Buffers must be 32 bit aligned. */
+ buftaken = (-(long)gbuf) & 3;
#endif
gbuf += buftaken;
@@ -509,6 +510,10 @@ bool grey_init(struct plugin_api* newrb, unsigned char *gbuf, long gbuf_size,
gbuf += plane_size;
buftaken += plane_size;
}
+#if NUM_CORES > 1 /* Values and phases must be uncached when running on COP */
+ if (features & GREY_ON_COP)
+ gbuf = UNCACHED_ADDR(gbuf);
+#endif
_grey_info.values = gbuf;
gbuf += plane_size;
_grey_info.phases = gbuf;
@@ -602,8 +607,14 @@ void grey_show(bool enable)
#ifdef NEED_BOOST
_grey_info.rb->cpu_boost(true);
#endif
+#if NUM_CORES > 1
+ _grey_info.rb->timer_register(1, NULL, TIMER_FREQ / LCD_SCANRATE,
+ 1, _timer_isr,
+ (_grey_info.flags & GREY_ON_COP) ? COP : CPU);
+#else
_grey_info.rb->timer_register(1, NULL, TIMER_FREQ / LCD_SCANRATE, 1,
- _timer_isr IF_COP(, CPU));
+ _timer_isr);
+#endif
#endif /* !SIMULATOR */
_grey_info.rb->screen_dump_set_hook(grey_screendump_hook);
}
diff --git a/apps/plugins/mpegplayer/stream_mgr.c b/apps/plugins/mpegplayer/stream_mgr.c
index b962c5b..778ed0d 100644
--- a/apps/plugins/mpegplayer/stream_mgr.c
+++ b/apps/plugins/mpegplayer/stream_mgr.c
@@ -1005,7 +1005,7 @@ int stream_init(void)
graymem = mem;
#endif
- success = grey_init(rb, graymem, memsize, GREY_BUFFERED,
+ success = grey_init(rb, graymem, memsize, GREY_BUFFERED|GREY_ON_COP,
LCD_WIDTH, LCD_HEIGHT, &graysize);
/* This can run on another processor - align size */
diff --git a/apps/plugins/test_fps.c b/apps/plugins/test_fps.c
index a312c13..da61a4f 100644
--- a/apps/plugins/test_fps.c
+++ b/apps/plugins/test_fps.c
@@ -286,7 +286,7 @@ static void time_greyscale(void)
int fps, load;
gbuf = (unsigned char *) rb->plugin_get_buffer(&gbuf_size);
- if (!grey_init(rb, gbuf, gbuf_size, 0, LCD_WIDTH, LCD_HEIGHT, NULL))
+ if (!grey_init(rb, gbuf, gbuf_size, GREY_ON_COP, LCD_WIDTH, LCD_HEIGHT, NULL))
{
log_text("greylib: out of memory.");
return;
diff --git a/apps/plugins/zxbox/zxbox.c b/apps/plugins/zxbox/zxbox.c
index 198aeec..3d94981 100644
--- a/apps/plugins/zxbox/zxbox.c
+++ b/apps/plugins/zxbox/zxbox.c
@@ -74,9 +74,10 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
/* get the remainder of the plugin buffer */
gbuf = (unsigned char *) rb->plugin_get_buffer(&gbuf_size);
#ifdef USE_BUFFERED_GREY
- grey_init(rb, gbuf, gbuf_size, GREY_BUFFERED, LCD_WIDTH, LCD_HEIGHT, NULL);
+ grey_init(rb, gbuf, gbuf_size, GREY_BUFFERED|GREY_ON_COP, LCD_WIDTH,
+ LCD_HEIGHT, NULL);
#else
- grey_init(rb, gbuf, gbuf_size, 0, LCD_WIDTH, LCD_HEIGHT, NULL);
+ grey_init(rb, gbuf, gbuf_size, GREY_ON_COP, LCD_WIDTH, LCD_HEIGHT, NULL);
#endif /* USE_BUFFERED_GREY */
/* switch on greyscale overlay */
grey_show(true);