Remove unnecessary C bridge functions

This commit is contained in:
sergystepanov 2025-05-18 12:46:32 +03:00
parent 817a19c757
commit 02210f1f8d
3 changed files with 35 additions and 81 deletions

View file

@ -36,14 +36,12 @@ void core_log_cgo(enum retro_log_level level, const char *fmt, ...) {
coreLog(level, msg);
}
void bridge_retro_init(void *f) {
core_log_cgo(RETRO_LOG_DEBUG, "Initialization...\n");
void bridge_call(void *f) {
((void (*)(void)) f)();
}
void bridge_retro_deinit(void *f) {
core_log_cgo(RETRO_LOG_DEBUG, "Deinitialiazation...\n");
((void (*)(void)) f)();
void bridge_set_callback(void *f, void *callback) {
((void (*)(void *))f)(callback);
}
unsigned bridge_retro_api_version(void *f) {
@ -62,44 +60,14 @@ bool bridge_retro_set_environment(void *f, void *callback) {
return ((bool (*)(retro_environment_t)) f)((retro_environment_t) callback);
}
void bridge_retro_set_video_refresh(void *f, void *callback) {
((bool (*)(retro_video_refresh_t)) f)((retro_video_refresh_t) callback);
}
void bridge_retro_set_input_poll(void *f, void *callback) {
((bool (*)(retro_input_poll_t)) f)((retro_input_poll_t) callback);
}
void bridge_retro_set_input_state(void *f, void *callback) {
((bool (*)(retro_input_state_t)) f)((retro_input_state_t) callback);
}
void bridge_retro_set_audio_sample(void *f, void *callback) {
((bool (*)(retro_audio_sample_t)) f)((retro_audio_sample_t) callback);
}
void bridge_retro_set_audio_sample_batch(void *f, void *callback) {
((bool (*)(retro_audio_sample_batch_t)) f)((retro_audio_sample_batch_t) callback);
((int16_t (*)(retro_input_state_t)) f)((retro_input_state_t) callback);
}
bool bridge_retro_load_game(void *f, struct retro_game_info *gi) {
core_log_cgo(RETRO_LOG_DEBUG, "Loading the game...\n");
return ((bool (*)(struct retro_game_info *)) f)(gi);
}
void bridge_retro_unload_game(void *f) {
core_log_cgo(RETRO_LOG_DEBUG, "Unloading the game...\n");
((void (*)(void)) f)();
}
void bridge_retro_reset(void *f) {
((void (*)(void)) f)();
}
void bridge_retro_run(void *f) {
((void (*)(void)) f)();
}
size_t bridge_retro_get_memory_size(void *f, unsigned id) {
return ((size_t (*)(unsigned)) f)(id);
}
@ -173,8 +141,6 @@ void core_video_refresh_cgo(void *data, unsigned width, unsigned height, size_t
}
void core_input_poll_cgo() {
void coreInputPoll();
coreInputPoll();
}
int16_t core_input_state_cgo(unsigned port, unsigned device, unsigned index, unsigned id) {
@ -182,16 +148,16 @@ int16_t core_input_state_cgo(unsigned port, unsigned device, unsigned index, uns
return coreInputState(port, device, index, id);
}
void core_audio_sample_cgo(int16_t left, int16_t right) {
void coreAudioSample(int16_t, int16_t);
coreAudioSample(left, right);
}
size_t core_audio_sample_batch_cgo(const int16_t *data, size_t frames) {
size_t coreAudioSampleBatch(const int16_t *, size_t);
return coreAudioSampleBatch(data, frames);
}
void core_audio_sample_cgo(int16_t left, int16_t right) {
int16_t frame[2] = { left, right };
core_audio_sample_batch_cgo(frame, 1);
}
uintptr_t core_get_current_framebuffer_cgo() {
uintptr_t coreGetCurrentFramebuffer();
return coreGetCurrentFramebuffer();

View file

@ -49,8 +49,9 @@ type Nanoarch struct {
serializeSize C.size_t
Stopped atomic.Bool
sys struct {
av C.struct_retro_system_av_info
i C.struct_retro_system_info
av C.struct_retro_system_av_info
i C.struct_retro_system_info
api C.unsigned
}
tickTime int64
cSaveDirectory *C.char
@ -213,7 +214,7 @@ func (n *Nanoarch) CoreLoad(meta Metadata) {
retroInit = loadFunction(coreLib, "retro_init")
retroDeinit = loadFunction(coreLib, "retro_deinit")
//retroAPIVersion = loadFunction(coreLib, "retro_api_version")
retroAPIVersion = loadFunction(coreLib, "retro_api_version")
retroGetSystemInfo = loadFunction(coreLib, "retro_get_system_info")
retroGetSystemAVInfo = loadFunction(coreLib, "retro_get_system_av_info")
retroSetEnvironment = loadFunction(coreLib, "retro_set_environment")
@ -234,22 +235,24 @@ func (n *Nanoarch) CoreLoad(meta Metadata) {
retroGetMemoryData = loadFunction(coreLib, "retro_get_memory_data")
C.bridge_retro_set_environment(retroSetEnvironment, C.core_environment_cgo)
C.bridge_retro_set_video_refresh(retroSetVideoRefresh, C.core_video_refresh_cgo)
C.bridge_retro_set_input_poll(retroSetInputPoll, C.core_input_poll_cgo)
C.bridge_retro_set_input_state(retroSetInputState, C.core_input_state_cgo)
C.bridge_retro_set_audio_sample(retroSetAudioSample, C.core_audio_sample_cgo)
C.bridge_retro_set_audio_sample_batch(retroSetAudioSampleBatch, C.core_audio_sample_batch_cgo)
C.bridge_set_callback(retroSetVideoRefresh, C.core_video_refresh_cgo)
C.bridge_set_callback(retroSetInputPoll, C.core_input_poll_cgo)
C.bridge_set_callback(retroSetAudioSample, C.core_audio_sample_cgo)
C.bridge_set_callback(retroSetAudioSampleBatch, C.core_audio_sample_batch_cgo)
if n.LibCo {
C.same_thread(retroInit)
} else {
C.bridge_retro_init(retroInit)
C.bridge_call(retroInit)
}
n.sys.api = C.bridge_retro_api_version(retroAPIVersion)
C.bridge_retro_get_system_info(retroGetSystemInfo, &n.sys.i)
n.log.Debug().Msgf("System >>> %v (%v) [%v] nfp: %v",
n.log.Info().Msgf("System >>> %v (%v) [%v] nfp: %v, api: %v",
C.GoString(n.sys.i.library_name), C.GoString(n.sys.i.library_version),
C.GoString(n.sys.i.valid_extensions), bool(n.sys.i.need_fullpath))
C.GoString(n.sys.i.valid_extensions), bool(n.sys.i.need_fullpath),
uint(n.sys.api))
}
func (n *Nanoarch) LoadGame(path string) error {
@ -367,8 +370,8 @@ func (n *Nanoarch) Shutdown() {
}
})
}
C.bridge_retro_unload_game(retroUnloadGame)
C.bridge_retro_deinit(retroDeinit)
C.bridge_call(retroUnloadGame)
C.bridge_call(retroDeinit)
if n.Video.gl.enabled {
thread.Main(func() {
deinitVideo()
@ -390,7 +393,7 @@ func (n *Nanoarch) Shutdown() {
}
func (n *Nanoarch) Reset() {
C.bridge_retro_reset(retroReset)
C.bridge_call(retroReset)
}
func (n *Nanoarch) Run() {
@ -404,7 +407,7 @@ func (n *Nanoarch) Run() {
n.log.Error().Err(err).Msg("ctx bind fail")
}
}
C.bridge_retro_run(retroRun)
C.bridge_call(retroRun)
if n.Video.gl.enabled {
runtime.UnlockOSThread()
}
@ -553,19 +556,19 @@ func RestoreSaveRAM(st State) {
}
}
// getMemorySize returns memory region size.
func getMemorySize(id C.uint) uint {
// memorySize returns memory region size.
func memorySize(id C.uint) uint {
return uint(C.bridge_retro_get_memory_size(retroGetMemorySize, id))
}
// getMemoryData returns a pointer to memory data.
func getMemoryData(id C.uint) unsafe.Pointer {
// memoryData returns a pointer to memory data.
func memoryData(id C.uint) unsafe.Pointer {
return C.bridge_retro_get_memory_data(retroGetMemoryData, id)
}
// ptSaveRam return SRAM memory pointer if core supports it or nil.
func ptSaveRAM() *mem {
ptr, size := getMemoryData(C.RETRO_MEMORY_SAVE_RAM), getMemorySize(C.RETRO_MEMORY_SAVE_RAM)
ptr, size := memoryData(C.RETRO_MEMORY_SAVE_RAM), memorySize(C.RETRO_MEMORY_SAVE_RAM)
if ptr == nil || size == 0 {
return nil
}
@ -595,7 +598,7 @@ func (m Metadata) HasHack(h string) bool {
}
var (
//retroAPIVersion unsafe.Pointer
retroAPIVersion unsafe.Pointer
retroDeinit unsafe.Pointer
retroGetSystemAVInfo unsafe.Pointer
retroGetSystemInfo unsafe.Pointer
@ -669,9 +672,6 @@ func coreVideoRefresh(data unsafe.Pointer, width, height uint, packed uint) {
Nan0.Handlers.OnVideo(data_, int32(dt), FrameInfo{W: width, H: height, Stride: packed})
}
//export coreInputPoll
func coreInputPoll() {}
//export coreInputState
func coreInputState(port C.unsigned, device C.unsigned, index C.unsigned, id C.unsigned) C.int16_t {
//Nan0.log.Debug().Msgf("%v %v %v %v", port, device, index, id)
@ -725,12 +725,6 @@ func coreInputState(port C.unsigned, device C.unsigned, index C.unsigned, id C.u
return Released
}
//export coreAudioSample
func coreAudioSample(l, r C.int16_t) {
frame := []C.int16_t{l, r}
coreAudioSampleBatch(unsafe.Pointer(&frame), 1)
}
//export coreAudioSampleBatch
func coreAudioSampleBatch(data unsafe.Pointer, frames C.size_t) C.size_t {
if Nan0.Stopped.Load() {

View file

@ -1,8 +1,10 @@
#ifndef FRONTEND_H__
#define FRONTEND_H__
void bridge_call(void *f);
void bridge_set_callback(void *f, void *callback);
bool bridge_retro_load_game(void *f, struct retro_game_info *gi);
void bridge_retro_unload_game(void *f);
bool bridge_retro_serialize(void *f, void *data, size_t size);
size_t bridge_retro_serialize_size(void *f);
bool bridge_retro_unserialize(void *f, void *data, size_t size);
@ -11,18 +13,10 @@ unsigned bridge_retro_api_version(void *f);
size_t bridge_retro_get_memory_size(void *f, unsigned id);
void *bridge_retro_get_memory_data(void *f, unsigned id);
void bridge_context_reset(retro_hw_context_reset_t f);
void bridge_retro_deinit(void *f);
void bridge_retro_get_system_av_info(void *f, struct retro_system_av_info *si);
void bridge_retro_get_system_info(void *f, struct retro_system_info *si);
void bridge_retro_init(void *f);
void bridge_retro_reset(void *f);
void bridge_retro_run(void *f);
void bridge_retro_set_audio_sample(void *f, void *callback);
void bridge_retro_set_audio_sample_batch(void *f, void *callback);
void bridge_retro_set_controller_port_device(void *f, unsigned port, unsigned device);
void bridge_retro_set_input_poll(void *f, void *callback);
void bridge_retro_set_input_state(void *f, void *callback);
void bridge_retro_set_video_refresh(void *f, void *callback);
void bridge_retro_keyboard_callback(void *f, bool down, unsigned keycode, uint32_t character, uint16_t keyModifiers);
bool core_environment_cgo(unsigned cmd, void *data);