forked from suyu/suyu
6030c5ce41
We move the initialization of the renderer to the core class, while keeping the creation of it and any other specifics in video_core. This way we can ensure that the renderer is initialized and doesn't give unfettered access to the renderer. This also makes dependencies on types more explicit. For example, the GPU class doesn't need to depend on the existence of a renderer, it only needs to care about whether or not it has a rasterizer, but since it was accessing the global variable, it was also making the renderer a part of its dependency chain. By adjusting the interface, we can get rid of this dependency.
38 lines
1.5 KiB
C++
38 lines
1.5 KiB
C++
// Copyright 2018 yuzu emulator team
|
|
// Licensed under GPLv2 or any later version
|
|
// Refer to the license.txt file included.
|
|
|
|
#include "common/assert.h"
|
|
#include "common/logging/log.h"
|
|
#include "core/core.h"
|
|
#include "core/hle/service/nvdrv/devices/nvdisp_disp0.h"
|
|
#include "core/hle/service/nvdrv/devices/nvmap.h"
|
|
#include "video_core/renderer_base.h"
|
|
#include "video_core/video_core.h"
|
|
|
|
namespace Service::Nvidia::Devices {
|
|
|
|
u32 nvdisp_disp0::ioctl(Ioctl command, const std::vector<u8>& input, std::vector<u8>& output) {
|
|
UNIMPLEMENTED_MSG("Unimplemented ioctl");
|
|
return 0;
|
|
}
|
|
|
|
void nvdisp_disp0::flip(u32 buffer_handle, u32 offset, u32 format, u32 width, u32 height,
|
|
u32 stride, NVFlinger::BufferQueue::BufferTransformFlags transform,
|
|
const MathUtil::Rectangle<int>& crop_rect) {
|
|
VAddr addr = nvmap_dev->GetObjectAddress(buffer_handle);
|
|
LOG_WARNING(Service,
|
|
"Drawing from address {:X} offset {:08X} Width {} Height {} Stride {} Format {}",
|
|
addr, offset, width, height, stride, format);
|
|
|
|
using PixelFormat = Tegra::FramebufferConfig::PixelFormat;
|
|
const Tegra::FramebufferConfig framebuffer{
|
|
addr, offset, width, height, stride, static_cast<PixelFormat>(format),
|
|
transform, crop_rect};
|
|
|
|
auto& instance = Core::System::GetInstance();
|
|
instance.perf_stats.EndGameFrame();
|
|
instance.Renderer().SwapBuffers(framebuffer);
|
|
}
|
|
|
|
} // namespace Service::Nvidia::Devices
|