mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-08-04 16:32:39 +00:00
RendererVulkan
-> Presenter
This commit is contained in:
parent
e585330744
commit
7ff8124ce2
@ -657,8 +657,6 @@ set(VIDEO_CORE src/video_core/amdgpu/liverpool.cpp
|
|||||||
src/video_core/buffer_cache/word_manager.h
|
src/video_core/buffer_cache/word_manager.h
|
||||||
src/video_core/renderer_vulkan/liverpool_to_vk.cpp
|
src/video_core/renderer_vulkan/liverpool_to_vk.cpp
|
||||||
src/video_core/renderer_vulkan/liverpool_to_vk.h
|
src/video_core/renderer_vulkan/liverpool_to_vk.h
|
||||||
src/video_core/renderer_vulkan/renderer_vulkan.cpp
|
|
||||||
src/video_core/renderer_vulkan/renderer_vulkan.h
|
|
||||||
src/video_core/renderer_vulkan/vk_common.cpp
|
src/video_core/renderer_vulkan/vk_common.cpp
|
||||||
src/video_core/renderer_vulkan/vk_common.h
|
src/video_core/renderer_vulkan/vk_common.h
|
||||||
src/video_core/renderer_vulkan/vk_compute_pipeline.cpp
|
src/video_core/renderer_vulkan/vk_compute_pipeline.cpp
|
||||||
@ -677,6 +675,8 @@ set(VIDEO_CORE src/video_core/amdgpu/liverpool.cpp
|
|||||||
src/video_core/renderer_vulkan/vk_pipeline_common.h
|
src/video_core/renderer_vulkan/vk_pipeline_common.h
|
||||||
src/video_core/renderer_vulkan/vk_platform.cpp
|
src/video_core/renderer_vulkan/vk_platform.cpp
|
||||||
src/video_core/renderer_vulkan/vk_platform.h
|
src/video_core/renderer_vulkan/vk_platform.h
|
||||||
|
src/video_core/renderer_vulkan/vk_presenter.cpp
|
||||||
|
src/video_core/renderer_vulkan/vk_presenter.h
|
||||||
src/video_core/renderer_vulkan/vk_rasterizer.cpp
|
src/video_core/renderer_vulkan/vk_rasterizer.cpp
|
||||||
src/video_core/renderer_vulkan/vk_rasterizer.h
|
src/video_core/renderer_vulkan/vk_rasterizer.h
|
||||||
src/video_core/renderer_vulkan/vk_resource_pool.cpp
|
src/video_core/renderer_vulkan/vk_resource_pool.cpp
|
||||||
|
@ -19,10 +19,10 @@
|
|||||||
#include "core/platform.h"
|
#include "core/platform.h"
|
||||||
#include "video_core/amdgpu/liverpool.h"
|
#include "video_core/amdgpu/liverpool.h"
|
||||||
#include "video_core/amdgpu/pm4_cmds.h"
|
#include "video_core/amdgpu/pm4_cmds.h"
|
||||||
#include "video_core/renderer_vulkan/renderer_vulkan.h"
|
#include "video_core/renderer_vulkan/vk_presenter.h"
|
||||||
|
|
||||||
extern Frontend::WindowSDL* g_window;
|
extern Frontend::WindowSDL* g_window;
|
||||||
std::unique_ptr<Vulkan::RendererVulkan> renderer;
|
std::unique_ptr<Vulkan::Presenter> presenter;
|
||||||
std::unique_ptr<AmdGpu::Liverpool> liverpool;
|
std::unique_ptr<AmdGpu::Liverpool> liverpool;
|
||||||
|
|
||||||
namespace Libraries::GnmDriver {
|
namespace Libraries::GnmDriver {
|
||||||
@ -2743,9 +2743,9 @@ int PS4_SYSV_ABI Func_F916890425496553() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void RegisterlibSceGnmDriver(Core::Loader::SymbolsResolver* sym) {
|
void RegisterlibSceGnmDriver(Core::Loader::SymbolsResolver* sym) {
|
||||||
LOG_INFO(Lib_GnmDriver, "Initializing renderer");
|
LOG_INFO(Lib_GnmDriver, "Initializing presenter");
|
||||||
liverpool = std::make_unique<AmdGpu::Liverpool>();
|
liverpool = std::make_unique<AmdGpu::Liverpool>();
|
||||||
renderer = std::make_unique<Vulkan::RendererVulkan>(*g_window, liverpool.get());
|
presenter = std::make_unique<Vulkan::Presenter>(*g_window, liverpool.get());
|
||||||
|
|
||||||
const int result = sceKernelGetCompiledSdkVersion(&sdk_version);
|
const int result = sceKernelGetCompiledSdkVersion(&sdk_version);
|
||||||
if (result != ORBIS_OK) {
|
if (result != ORBIS_OK) {
|
||||||
|
@ -13,9 +13,9 @@
|
|||||||
#include "core/libraries/kernel/time_management.h"
|
#include "core/libraries/kernel/time_management.h"
|
||||||
#include "core/libraries/videoout/driver.h"
|
#include "core/libraries/videoout/driver.h"
|
||||||
#include "core/platform.h"
|
#include "core/platform.h"
|
||||||
#include "video_core/renderer_vulkan/renderer_vulkan.h"
|
#include "video_core/renderer_vulkan/vk_presenter.h"
|
||||||
|
|
||||||
extern std::unique_ptr<Vulkan::RendererVulkan> renderer;
|
extern std::unique_ptr<Vulkan::Presenter> presenter;
|
||||||
extern std::unique_ptr<AmdGpu::Liverpool> liverpool;
|
extern std::unique_ptr<AmdGpu::Liverpool> liverpool;
|
||||||
|
|
||||||
namespace Libraries::VideoOut {
|
namespace Libraries::VideoOut {
|
||||||
@ -136,7 +136,7 @@ int VideoOutDriver::RegisterBuffers(VideoOutPort* port, s32 startIndex, void* co
|
|||||||
.address_right = 0,
|
.address_right = 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
renderer->RegisterVideoOutSurface(group, address);
|
presenter->RegisterVideoOutSurface(group, address);
|
||||||
LOG_INFO(Lib_VideoOut, "buffers[{}] = {:#x}", i + startIndex, address);
|
LOG_INFO(Lib_VideoOut, "buffers[{}] = {:#x}", i + startIndex, address);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -164,9 +164,9 @@ int VideoOutDriver::UnregisterBuffers(VideoOutPort* port, s32 attributeIndex) {
|
|||||||
|
|
||||||
void VideoOutDriver::Flip(const Request& req) {
|
void VideoOutDriver::Flip(const Request& req) {
|
||||||
// Whatever the game is rendering show splash if it is active
|
// Whatever the game is rendering show splash if it is active
|
||||||
if (!renderer->ShowSplash(req.frame)) {
|
if (!presenter->ShowSplash(req.frame)) {
|
||||||
// Present the frame.
|
// Present the frame.
|
||||||
renderer->Present(req.frame);
|
presenter->Present(req.frame);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update flip status.
|
// Update flip status.
|
||||||
@ -201,8 +201,8 @@ void VideoOutDriver::Flip(const Request& req) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void VideoOutDriver::DrawBlankFrame() {
|
void VideoOutDriver::DrawBlankFrame() {
|
||||||
const auto empty_frame = renderer->PrepareBlankFrame(false);
|
const auto empty_frame = presenter->PrepareBlankFrame(false);
|
||||||
renderer->Present(empty_frame);
|
presenter->Present(empty_frame);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool VideoOutDriver::SubmitFlip(VideoOutPort* port, s32 index, s64 flip_arg,
|
bool VideoOutDriver::SubmitFlip(VideoOutPort* port, s32 index, s64 flip_arg,
|
||||||
@ -226,7 +226,7 @@ bool VideoOutDriver::SubmitFlip(VideoOutPort* port, s32 index, s64 flip_arg,
|
|||||||
// point VO surface is ready to be presented, and we will need have an actual state of
|
// point VO surface is ready to be presented, and we will need have an actual state of
|
||||||
// Vulkan image at the time of frame presentation.
|
// Vulkan image at the time of frame presentation.
|
||||||
liverpool->SendCommand([=, this]() {
|
liverpool->SendCommand([=, this]() {
|
||||||
renderer->FlushDraw();
|
presenter->FlushDraw();
|
||||||
SubmitFlipInternal(port, index, flip_arg, is_eop);
|
SubmitFlipInternal(port, index, flip_arg, is_eop);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
@ -240,11 +240,11 @@ void VideoOutDriver::SubmitFlipInternal(VideoOutPort* port, s32 index, s64 flip_
|
|||||||
bool is_eop /*= false*/) {
|
bool is_eop /*= false*/) {
|
||||||
Vulkan::Frame* frame;
|
Vulkan::Frame* frame;
|
||||||
if (index == -1) {
|
if (index == -1) {
|
||||||
frame = renderer->PrepareBlankFrame(is_eop);
|
frame = presenter->PrepareBlankFrame(is_eop);
|
||||||
} else {
|
} else {
|
||||||
const auto& buffer = port->buffer_slots[index];
|
const auto& buffer = port->buffer_slots[index];
|
||||||
const auto& group = port->groups[buffer.group_index];
|
const auto& group = port->groups[buffer.group_index];
|
||||||
frame = renderer->PrepareFrame(group, buffer.address_left, is_eop);
|
frame = presenter->PrepareFrame(group, buffer.address_left, is_eop);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::scoped_lock lock{mutex};
|
std::scoped_lock lock{mutex};
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
#include "imgui_internal.h"
|
#include "imgui_internal.h"
|
||||||
#include "sdl_window.h"
|
#include "sdl_window.h"
|
||||||
#include "texture_manager.h"
|
#include "texture_manager.h"
|
||||||
#include "video_core/renderer_vulkan/renderer_vulkan.h"
|
#include "video_core/renderer_vulkan/vk_presenter.h"
|
||||||
|
|
||||||
#include "imgui_fonts/notosansjp_regular.ttf.g.cpp"
|
#include "imgui_fonts/notosansjp_regular.ttf.g.cpp"
|
||||||
#include "imgui_fonts/proggyvector_regular.ttf.g.cpp"
|
#include "imgui_fonts/proggyvector_regular.ttf.g.cpp"
|
||||||
|
@ -11,13 +11,13 @@
|
|||||||
#include "shader_recompiler/info.h"
|
#include "shader_recompiler/info.h"
|
||||||
#include "shader_recompiler/recompiler.h"
|
#include "shader_recompiler/recompiler.h"
|
||||||
#include "shader_recompiler/runtime_info.h"
|
#include "shader_recompiler/runtime_info.h"
|
||||||
#include "video_core/renderer_vulkan/renderer_vulkan.h"
|
|
||||||
#include "video_core/renderer_vulkan/vk_instance.h"
|
#include "video_core/renderer_vulkan/vk_instance.h"
|
||||||
#include "video_core/renderer_vulkan/vk_pipeline_cache.h"
|
#include "video_core/renderer_vulkan/vk_pipeline_cache.h"
|
||||||
|
#include "video_core/renderer_vulkan/vk_presenter.h"
|
||||||
#include "video_core/renderer_vulkan/vk_scheduler.h"
|
#include "video_core/renderer_vulkan/vk_scheduler.h"
|
||||||
#include "video_core/renderer_vulkan/vk_shader_util.h"
|
#include "video_core/renderer_vulkan/vk_shader_util.h"
|
||||||
|
|
||||||
extern std::unique_ptr<Vulkan::RendererVulkan> renderer;
|
extern std::unique_ptr<Vulkan::Presenter> presenter;
|
||||||
|
|
||||||
namespace Vulkan {
|
namespace Vulkan {
|
||||||
|
|
||||||
@ -265,7 +265,7 @@ bool PipelineCache::RefreshGraphicsKey() {
|
|||||||
}
|
}
|
||||||
const auto base_format =
|
const auto base_format =
|
||||||
LiverpoolToVK::SurfaceFormat(col_buf.info.format, col_buf.NumFormat());
|
LiverpoolToVK::SurfaceFormat(col_buf.info.format, col_buf.NumFormat());
|
||||||
const bool is_vo_surface = renderer->IsVideoOutSurface(col_buf);
|
const bool is_vo_surface = presenter->IsVideoOutSurface(col_buf);
|
||||||
key.color_formats[remapped_cb] = LiverpoolToVK::AdjustColorBufferFormat(
|
key.color_formats[remapped_cb] = LiverpoolToVK::AdjustColorBufferFormat(
|
||||||
base_format, col_buf.info.comp_swap.Value(), false /*is_vo_surface*/);
|
base_format, col_buf.info.comp_swap.Value(), false /*is_vo_surface*/);
|
||||||
key.color_num_formats[remapped_cb] = col_buf.NumFormat();
|
key.color_num_formats[remapped_cb] = col_buf.NumFormat();
|
||||||
|
@ -4,19 +4,18 @@
|
|||||||
#include "common/config.h"
|
#include "common/config.h"
|
||||||
#include "common/debug.h"
|
#include "common/debug.h"
|
||||||
#include "common/singleton.h"
|
#include "common/singleton.h"
|
||||||
|
#include "core/debug_state.h"
|
||||||
|
#include "core/devtools/layer.h"
|
||||||
#include "core/file_format/splash.h"
|
#include "core/file_format/splash.h"
|
||||||
#include "core/libraries/system/systemservice.h"
|
#include "core/libraries/system/systemservice.h"
|
||||||
#include "imgui/renderer/imgui_core.h"
|
#include "imgui/renderer/imgui_core.h"
|
||||||
#include "sdl_window.h"
|
#include "sdl_window.h"
|
||||||
#include "video_core/renderer_vulkan/renderer_vulkan.h"
|
#include "video_core/renderer_vulkan/vk_presenter.h"
|
||||||
#include "video_core/renderer_vulkan/vk_rasterizer.h"
|
#include "video_core/renderer_vulkan/vk_rasterizer.h"
|
||||||
#include "video_core/texture_cache/image.h"
|
#include "video_core/texture_cache/image.h"
|
||||||
|
|
||||||
#include <vk_mem_alloc.h>
|
#include <vk_mem_alloc.h>
|
||||||
|
|
||||||
#include "core/debug_state.h"
|
|
||||||
#include "core/devtools/layer.h"
|
|
||||||
|
|
||||||
namespace Vulkan {
|
namespace Vulkan {
|
||||||
|
|
||||||
bool CanBlitToSwapchain(const vk::PhysicalDevice physical_device, vk::Format format) {
|
bool CanBlitToSwapchain(const vk::PhysicalDevice physical_device, vk::Format format) {
|
||||||
@ -92,7 +91,7 @@ bool CanBlitToSwapchain(const vk::PhysicalDevice physical_device, vk::Format for
|
|||||||
return MakeImageBlit(frame_width, frame_height, dst_width, dst_height, offset_x, offset_y);
|
return MakeImageBlit(frame_width, frame_height, dst_width, dst_height, offset_x, offset_y);
|
||||||
}
|
}
|
||||||
|
|
||||||
RendererVulkan::RendererVulkan(Frontend::WindowSDL& window_, AmdGpu::Liverpool* liverpool_)
|
Presenter::Presenter(Frontend::WindowSDL& window_, AmdGpu::Liverpool* liverpool_)
|
||||||
: window{window_}, liverpool{liverpool_},
|
: window{window_}, liverpool{liverpool_},
|
||||||
instance{window, Config::getGpuId(), Config::vkValidationEnabled(),
|
instance{window, Config::getGpuId(), Config::vkValidationEnabled(),
|
||||||
Config::vkCrashDiagnosticEnabled()},
|
Config::vkCrashDiagnosticEnabled()},
|
||||||
@ -120,7 +119,7 @@ RendererVulkan::RendererVulkan(Frontend::WindowSDL& window_, AmdGpu::Liverpool*
|
|||||||
ImGui::Layer::AddLayer(Common::Singleton<Core::Devtools::Layer>::Instance());
|
ImGui::Layer::AddLayer(Common::Singleton<Core::Devtools::Layer>::Instance());
|
||||||
}
|
}
|
||||||
|
|
||||||
RendererVulkan::~RendererVulkan() {
|
Presenter::~Presenter() {
|
||||||
ImGui::Layer::RemoveLayer(Common::Singleton<Core::Devtools::Layer>::Instance());
|
ImGui::Layer::RemoveLayer(Common::Singleton<Core::Devtools::Layer>::Instance());
|
||||||
draw_scheduler.Finish();
|
draw_scheduler.Finish();
|
||||||
const vk::Device device = instance.GetDevice();
|
const vk::Device device = instance.GetDevice();
|
||||||
@ -132,7 +131,7 @@ RendererVulkan::~RendererVulkan() {
|
|||||||
ImGui::Core::Shutdown(device);
|
ImGui::Core::Shutdown(device);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RendererVulkan::RecreateFrame(Frame* frame, u32 width, u32 height) {
|
void Presenter::RecreateFrame(Frame* frame, u32 width, u32 height) {
|
||||||
const vk::Device device = instance.GetDevice();
|
const vk::Device device = instance.GetDevice();
|
||||||
if (frame->image_view) {
|
if (frame->image_view) {
|
||||||
device.destroyImageView(frame->image_view);
|
device.destroyImageView(frame->image_view);
|
||||||
@ -194,7 +193,7 @@ void RendererVulkan::RecreateFrame(Frame* frame, u32 width, u32 height) {
|
|||||||
frame->height = height;
|
frame->height = height;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RendererVulkan::ShowSplash(Frame* frame /*= nullptr*/) {
|
bool Presenter::ShowSplash(Frame* frame /*= nullptr*/) {
|
||||||
const auto* splash = Common::Singleton<Splash>::Instance();
|
const auto* splash = Common::Singleton<Splash>::Instance();
|
||||||
if (splash->GetImageData().empty()) {
|
if (splash->GetImageData().empty()) {
|
||||||
return false;
|
return false;
|
||||||
@ -223,7 +222,7 @@ bool RendererVulkan::ShowSplash(Frame* frame /*= nullptr*/) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
Frame* RendererVulkan::PrepareFrameInternal(VideoCore::Image& image, bool is_eop) {
|
Frame* Presenter::PrepareFrameInternal(VideoCore::Image& image, bool is_eop) {
|
||||||
// Request a free presentation frame.
|
// Request a free presentation frame.
|
||||||
Frame* frame = GetRenderFrame();
|
Frame* frame = GetRenderFrame();
|
||||||
|
|
||||||
@ -309,7 +308,7 @@ Frame* RendererVulkan::PrepareFrameInternal(VideoCore::Image& image, bool is_eop
|
|||||||
return frame;
|
return frame;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RendererVulkan::Present(Frame* frame) {
|
void Presenter::Present(Frame* frame) {
|
||||||
// Recreate the swapchain if the window was resized.
|
// Recreate the swapchain if the window was resized.
|
||||||
if (window.getWidth() != swapchain.GetExtent().width ||
|
if (window.getWidth() != swapchain.GetExtent().width ||
|
||||||
window.getHeight() != swapchain.GetExtent().height) {
|
window.getHeight() != swapchain.GetExtent().height) {
|
||||||
@ -423,7 +422,7 @@ void RendererVulkan::Present(Frame* frame) {
|
|||||||
DebugState.IncFlipFrameNum();
|
DebugState.IncFlipFrameNum();
|
||||||
}
|
}
|
||||||
|
|
||||||
Frame* RendererVulkan::GetRenderFrame() {
|
Frame* Presenter::GetRenderFrame() {
|
||||||
// Wait for free presentation frames
|
// Wait for free presentation frames
|
||||||
Frame* frame;
|
Frame* frame;
|
||||||
{
|
{
|
@ -40,10 +40,10 @@ enum SchedulerType {
|
|||||||
|
|
||||||
class Rasterizer;
|
class Rasterizer;
|
||||||
|
|
||||||
class RendererVulkan {
|
class Presenter {
|
||||||
public:
|
public:
|
||||||
explicit RendererVulkan(Frontend::WindowSDL& window, AmdGpu::Liverpool* liverpool);
|
Presenter(Frontend::WindowSDL& window, AmdGpu::Liverpool* liverpool);
|
||||||
~RendererVulkan();
|
~Presenter();
|
||||||
|
|
||||||
Frame* PrepareFrame(const Libraries::VideoOut::BufferAttributeGroup& attribute,
|
Frame* PrepareFrame(const Libraries::VideoOut::BufferAttributeGroup& attribute,
|
||||||
VAddr cpu_address, bool is_eop) {
|
VAddr cpu_address, bool is_eop) {
|
Loading…
Reference in New Issue
Block a user