mirror of
https://github.com/libretro/RetroArch
synced 2025-04-01 04:20:27 +00:00
Fix some possible segfaults with HW render.
This commit is contained in:
parent
d1b204e63e
commit
4bcc566afb
6
driver.c
6
driver.c
@ -667,6 +667,12 @@ static void init_filter(bool rgb32)
|
|||||||
if (!*g_settings.video.filter_path)
|
if (!*g_settings.video.filter_path)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (g_extern.system.hw_render_callback.context_type)
|
||||||
|
{
|
||||||
|
RARCH_WARN("Cannot use CPU filters when hardware rendering is used.\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
RARCH_LOG("Loading bSNES filter from \"%s\"\n", g_settings.video.filter_path);
|
RARCH_LOG("Loading bSNES filter from \"%s\"\n", g_settings.video.filter_path);
|
||||||
g_extern.filter.lib = dylib_load(g_settings.video.filter_path);
|
g_extern.filter.lib = dylib_load(g_settings.video.filter_path);
|
||||||
if (!g_extern.filter.lib)
|
if (!g_extern.filter.lib)
|
||||||
|
28
retroarch.c
28
retroarch.c
@ -141,10 +141,18 @@ static void take_screenshot(void)
|
|||||||
|
|
||||||
bool ret = false;
|
bool ret = false;
|
||||||
|
|
||||||
if (g_settings.video.gpu_screenshot && driver.video->read_viewport && driver.video->viewport_info)
|
if (g_extern.frame_cache.data)
|
||||||
ret = take_screenshot_viewport();
|
{
|
||||||
else if (g_extern.frame_cache.data)
|
if ((g_settings.video.gpu_screenshot ||
|
||||||
ret = take_screenshot_raw();
|
(g_extern.frame_cache.data == RETRO_HW_FRAME_BUFFER_VALID)) &&
|
||||||
|
driver.video->read_viewport &&
|
||||||
|
driver.video->viewport_info)
|
||||||
|
ret = take_screenshot_viewport();
|
||||||
|
else if (g_extern.frame_cache.data && (g_extern.frame_cache.data != RETRO_HW_FRAME_BUFFER_VALID))
|
||||||
|
ret = take_screenshot_raw();
|
||||||
|
else
|
||||||
|
RARCH_ERR("Cannot take screenshot. GPU rendering is used and read_viewport is not supported.\n");
|
||||||
|
}
|
||||||
|
|
||||||
const char *msg = NULL;
|
const char *msg = NULL;
|
||||||
if (ret)
|
if (ret)
|
||||||
@ -329,10 +337,14 @@ void rarch_render_cached_frame(void)
|
|||||||
g_extern.recording = false;
|
g_extern.recording = false;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
const void *frame = g_extern.frame_cache.data;
|
||||||
|
if (frame == RETRO_HW_FRAME_BUFFER_VALID)
|
||||||
|
frame = NULL; // Dupe
|
||||||
|
|
||||||
// Not 100% safe, since the library might have
|
// Not 100% safe, since the library might have
|
||||||
// freed the memory, but no known implementations do this :D
|
// freed the memory, but no known implementations do this :D
|
||||||
// It would be really stupid at any rate ...
|
// It would be really stupid at any rate ...
|
||||||
video_frame(g_extern.frame_cache.data,
|
video_frame(frame,
|
||||||
g_extern.frame_cache.width,
|
g_extern.frame_cache.width,
|
||||||
g_extern.frame_cache.height,
|
g_extern.frame_cache.height,
|
||||||
g_extern.frame_cache.pitch);
|
g_extern.frame_cache.pitch);
|
||||||
@ -1291,6 +1303,12 @@ static void init_recording(void)
|
|||||||
if (!g_extern.recording)
|
if (!g_extern.recording)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (!g_settings.video.gpu_record && g_extern.system.hw_render_callback.context_type)
|
||||||
|
{
|
||||||
|
RARCH_WARN("Libretro core is hardware rendered. Must use post-shaded FFmpeg recording as well.\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
double fps = g_extern.system.av_info.timing.fps;
|
double fps = g_extern.system.av_info.timing.fps;
|
||||||
double samplerate = g_extern.system.av_info.timing.sample_rate;
|
double samplerate = g_extern.system.av_info.timing.sample_rate;
|
||||||
RARCH_LOG("Custom timing given: FPS: %.4f, Sample rate: %.4f\n", (float)fps, (float)samplerate);
|
RARCH_LOG("Custom timing given: FPS: %.4f, Sample rate: %.4f\n", (float)fps, (float)samplerate);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user