MCPcopy Create free account
hub / github.com/crosire/reshade / on_present

Method on_present

source/runtime.cpp:586–880  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

584 log::message(log::level::info, "Destroyed runtime environment on runtime %p ('%s').", this, _config_path.u8string().c_str());
585}
586void reshade::runtime::on_present()
587{
588 if (!_is_initialized)
589 return;
590
591#if RESHADE_ADDON
592 _is_in_present_call = true;
593#endif
594
595 api::command_list *const cmd_list = _graphics_queue->get_immediate_command_list();
596
597 capture_state(cmd_list, _app_state);
598
599 uint32_t back_buffer_index = (_back_buffer_resolved != 0 ? 2 : 0) + _swapchain->get_current_back_buffer_index() * 2;
600 const api::resource back_buffer_resource = _device->get_resource_from_view(_back_buffer_targets[back_buffer_index]);
601
602 // Resolve MSAA back buffer if MSAA is active or copy when format conversion is required
603 if (_back_buffer_resolved != 0)
604 {
605 if (_back_buffer_samples == 1)
606 {
607 cmd_list->barrier(back_buffer_resource, api::resource_usage::present, api::resource_usage::copy_source);
608 cmd_list->copy_texture_region(back_buffer_resource, 0, nullptr, _back_buffer_resolved, 0, nullptr);
609 cmd_list->barrier(_back_buffer_resolved, api::resource_usage::copy_dest, api::resource_usage::render_target);
610 }
611 else
612 {
613 cmd_list->barrier(back_buffer_resource, api::resource_usage::present, api::resource_usage::resolve_source);
614 cmd_list->resolve_texture_region(back_buffer_resource, 0, nullptr, _back_buffer_resolved, 0, 0, 0, 0, _back_buffer_format);
615 cmd_list->barrier(_back_buffer_resolved, api::resource_usage::resolve_dest, api::resource_usage::render_target);
616 }
617 }
618
619 // Lock input so it cannot be modified by other threads while we are reading it here
620 std::unique_lock<std::recursive_mutex> input_lock;
621 if (_input != nullptr)
622 input_lock = _input->lock();
623
624 update_effects();
625
626 _current_time = std::chrono::system_clock::now();
627
628 if (_should_save_screenshot && _screenshot_save_before && _effects_enabled && !_effects_rendered_this_frame)
629 save_screenshot("Before");
630
631 if (!is_loading() && !_techniques.empty())
632 {
633 if (_back_buffer_resolved != 0)
634 {
635 runtime::render_effects(cmd_list, _back_buffer_targets[0], _back_buffer_targets[1]);
636 }
637 else
638 {
639 cmd_list->barrier(back_buffer_resource, api::resource_usage::present, api::resource_usage::render_target);
640 runtime::render_effects(cmd_list, _back_buffer_targets[back_buffer_index], _back_buffer_targets[back_buffer_index + 1]);
641 cmd_list->barrier(back_buffer_resource, api::resource_usage::render_target, api::resource_usage::present);
642 }
643 }

Callers 2

Calls 15

is_loadingFunction · 0.85
set_uniform_valueFunction · 0.85
lockMethod · 0.80
supports_toggle_keyMethod · 0.80
barrierMethod · 0.45
copy_texture_regionMethod · 0.45
is_key_pressedMethod · 0.45
annotation_as_stringMethod · 0.45

Tested by

no test coverage detected