mirror of
https://github.com/libretro/RetroArch
synced 2025-03-30 07:20:36 +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)
|
||||
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);
|
||||
g_extern.filter.lib = dylib_load(g_settings.video.filter_path);
|
||||
if (!g_extern.filter.lib)
|
||||
|
28
retroarch.c
28
retroarch.c
@ -141,10 +141,18 @@ static void take_screenshot(void)
|
||||
|
||||
bool ret = false;
|
||||
|
||||
if (g_settings.video.gpu_screenshot && driver.video->read_viewport && driver.video->viewport_info)
|
||||
ret = take_screenshot_viewport();
|
||||
else if (g_extern.frame_cache.data)
|
||||
ret = take_screenshot_raw();
|
||||
if (g_extern.frame_cache.data)
|
||||
{
|
||||
if ((g_settings.video.gpu_screenshot ||
|
||||
(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;
|
||||
if (ret)
|
||||
@ -329,10 +337,14 @@ void rarch_render_cached_frame(void)
|
||||
g_extern.recording = false;
|
||||
#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
|
||||
// freed the memory, but no known implementations do this :D
|
||||
// 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.height,
|
||||
g_extern.frame_cache.pitch);
|
||||
@ -1291,6 +1303,12 @@ static void init_recording(void)
|
||||
if (!g_extern.recording)
|
||||
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 samplerate = g_extern.system.av_info.timing.sample_rate;
|
||||
RARCH_LOG("Custom timing given: FPS: %.4f, Sample rate: %.4f\n", (float)fps, (float)samplerate);
|
||||
|
Loading…
x
Reference in New Issue
Block a user