diff --git a/gfx/common/metal_common.m b/gfx/common/metal_common.m index ff6182a19b..2cf53961bd 100644 --- a/gfx/common/metal_common.m +++ b/gfx/common/metal_common.m @@ -752,9 +752,7 @@ typedef struct MTLALIGN(16) - (void)setSize:(CGSize)size { if (CGSizeEqualToSize(_size, size)) - { return; - } _size = size; @@ -763,9 +761,9 @@ typedef struct MTLALIGN(16) if (_format != RPixelFormatBGRA8Unorm && _format != RPixelFormatBGRX8Unorm) { MTLTextureDescriptor *td = [MTLTextureDescriptor texture2DDescriptorWithPixelFormat:MTLPixelFormatR16Uint - width:(NSUInteger)size.width - height:(NSUInteger)size.height - mipmapped:NO]; + width:(NSUInteger)size.width + height:(NSUInteger)size.height + mipmapped:NO]; _src = [_context.device newTextureWithDescriptor:td]; } } @@ -778,15 +776,13 @@ typedef struct MTLALIGN(16) - (void)setFrame:(CGRect)frame { if (CGRectEqualToRect(_frame, frame)) - { return; - } _frame = frame; // update vertices CGPoint o = frame.origin; - CGSize s = frame.size; + CGSize s = frame.size; CGFloat l = o.x; CGFloat t = o.y; @@ -809,7 +805,8 @@ typedef struct MTLALIGN(16) - (void)_convertFormat { - if (_format == RPixelFormatBGRA8Unorm || _format == RPixelFormatBGRX8Unorm) + if ( _format == RPixelFormatBGRA8Unorm + || _format == RPixelFormatBGRX8Unorm) return; if (!_srcDirty) @@ -873,25 +870,21 @@ typedef struct MTLALIGN(16) { if (_shader && (_engine.frame.output_size.x != _viewport->width || _engine.frame.output_size.y != _viewport->height)) - { resize_render_targets = YES; - } _engine.frame.viewport.originX = _viewport->x; _engine.frame.viewport.originY = _viewport->y; - _engine.frame.viewport.width = _viewport->width; - _engine.frame.viewport.height = _viewport->height; - _engine.frame.viewport.znear = 0.0f; - _engine.frame.viewport.zfar = 1.0f; - _engine.frame.output_size.x = _viewport->width; - _engine.frame.output_size.y = _viewport->height; - _engine.frame.output_size.z = 1.0f / _viewport->width; - _engine.frame.output_size.w = 1.0f / _viewport->height; + _engine.frame.viewport.width = _viewport->width; + _engine.frame.viewport.height = _viewport->height; + _engine.frame.viewport.znear = 0.0f; + _engine.frame.viewport.zfar = 1.0f; + _engine.frame.output_size.x = _viewport->width; + _engine.frame.output_size.y = _viewport->height; + _engine.frame.output_size.z = 1.0f / _viewport->width; + _engine.frame.output_size.w = 1.0f / _viewport->height; if (resize_render_targets) - { [self _updateRenderTargets]; - } [self _updateHistory]; @@ -922,16 +915,15 @@ typedef struct MTLALIGN(16) - (void)_initHistory { + int i; MTLTextureDescriptor *td = [MTLTextureDescriptor texture2DDescriptorWithPixelFormat:MTLPixelFormatBGRA8Unorm - width:(NSUInteger)_size.width - height:(NSUInteger)_size.height - mipmapped:false]; + width:(NSUInteger)_size.width + height:(NSUInteger)_size.height + mipmapped:false]; td.usage = MTLTextureUsageShaderRead | MTLTextureUsageShaderWrite | MTLTextureUsageRenderTarget; - for (int i = 0; i < _shader->history_size + 1; i++) - { + for (i = 0; i < _shader->history_size + 1; i++) [self _initTexture:&_engine.frame.texture[i] withDescriptor:td]; - } init_history = NO; } @@ -948,15 +940,14 @@ typedef struct MTLALIGN(16) - (void)drawWithContext:(Context *)ctx { + unsigned i; _texture = _engine.frame.texture[0].view; [self _convertFormat]; if (!_shader || _shader->passes == 0) - { return; - } - for (unsigned i = 0; i < _shader->passes; i++) + for (i = 0; i < _shader->passes; i++) { if (_shader->pass[i].feedback) { diff --git a/retroarch.c b/retroarch.c index 98adc6b4d5..6a199a70bf 100644 --- a/retroarch.c +++ b/retroarch.c @@ -28364,10 +28364,9 @@ void audio_driver_set_buffer_size(size_t bufsize) p_rarch->audio_driver_buffer_size = bufsize; } -static void audio_driver_monitor_adjust_system_rates( +static float audio_driver_monitor_adjust_system_rates( struct rarch_state *p_rarch) { - float timing_skew; settings_t *settings = p_rarch->configuration_settings; bool vrr_runloop_enable = settings->bools.vrr_runloop_enable; const float target_video_sync_rate = @@ -28376,19 +28375,13 @@ static void audio_driver_monitor_adjust_system_rates( struct retro_system_av_info *av_info = &p_rarch->video_driver_av_info; const struct retro_system_timing *info = (const struct retro_system_timing*)&av_info->timing; - - if (info->sample_rate <= 0.0) - return; - - timing_skew = + float timing_skew = fabs(1.0f - info->fps / target_video_sync_rate); - p_rarch->audio_driver_input = info->sample_rate; + float ret = info->sample_rate; if (timing_skew <= max_timing_skew && !vrr_runloop_enable) - p_rarch->audio_driver_input *= target_video_sync_rate / info->fps; - - RARCH_LOG("[Audio]: Set audio input rate to: %.2f Hz.\n", - p_rarch->audio_driver_input); + ret *= target_video_sync_rate / info->fps; + return ret; } #ifdef HAVE_REWIND @@ -32627,10 +32620,20 @@ static void camera_driver_find_driver(struct rarch_state *p_rarch) static void driver_adjust_system_rates(struct rarch_state *p_rarch) { - settings_t *settings = p_rarch->configuration_settings; - - audio_driver_monitor_adjust_system_rates(p_rarch); - + settings_t *settings = p_rarch->configuration_settings; + struct retro_system_av_info *av_info = &p_rarch->video_driver_av_info; + const struct retro_system_timing *info = + (const struct retro_system_timing*)&av_info->timing; + + if (info->sample_rate > 0.0) + { + p_rarch->audio_driver_input = + audio_driver_monitor_adjust_system_rates(p_rarch); + + RARCH_LOG("[Audio]: Set audio input rate to: %.2f Hz.\n", + p_rarch->audio_driver_input); + } + p_rarch->runloop_force_nonblock = false; video_driver_monitor_adjust_system_rates(p_rarch);