nvnflinger/gpu: implement layer stack composition

This commit is contained in:
Liam
2024-01-22 12:40:50 -05:00
parent 10cf058518
commit a595e9e8a7
28 changed files with 470 additions and 253 deletions

View File

@@ -125,15 +125,15 @@ RendererOpenGL::RendererOpenGL(Core::TelemetrySession& telemetry_session_,
RendererOpenGL::~RendererOpenGL() = default;
void RendererOpenGL::SwapBuffers(const Tegra::FramebufferConfig* framebuffer) {
if (!framebuffer) {
void RendererOpenGL::Composite(std::span<const Tegra::FramebufferConfig> framebuffers) {
if (framebuffers.empty()) {
return;
}
RenderScreenshot(framebuffer);
RenderScreenshot(framebuffers);
state_tracker.BindFramebuffer(0);
blit_screen->DrawScreen(std::span(framebuffer, 1), emu_window.GetFramebufferLayout());
blit_screen->DrawScreen(framebuffers, emu_window.GetFramebufferLayout());
++m_current_frame;
@@ -159,7 +159,7 @@ void RendererOpenGL::AddTelemetryFields() {
telemetry_session.AddField(user_system, "GPU_OpenGL_Version", std::string(gl_version));
}
void RendererOpenGL::RenderScreenshot(const Tegra::FramebufferConfig* framebuffer) {
void RendererOpenGL::RenderScreenshot(std::span<const Tegra::FramebufferConfig> framebuffers) {
if (!renderer_settings.screenshot_requested) {
return;
}
@@ -181,7 +181,7 @@ void RendererOpenGL::RenderScreenshot(const Tegra::FramebufferConfig* framebuffe
glRenderbufferStorage(GL_RENDERBUFFER, GL_SRGB8, layout.width, layout.height);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, renderbuffer);
blit_screen->DrawScreen(std::span(framebuffer, 1), layout);
blit_screen->DrawScreen(framebuffers, layout);
glBindBuffer(GL_PIXEL_PACK_BUFFER, 0);
glPixelStorei(GL_PACK_ROW_LENGTH, 0);

View File

@@ -40,7 +40,7 @@ public:
std::unique_ptr<Core::Frontend::GraphicsContext> context_);
~RendererOpenGL() override;
void SwapBuffers(const Tegra::FramebufferConfig* framebuffer) override;
void Composite(std::span<const Tegra::FramebufferConfig> framebuffers) override;
VideoCore::RasterizerInterface* ReadRasterizer() override {
return &rasterizer;
@@ -52,7 +52,7 @@ public:
private:
void AddTelemetryFields();
void RenderScreenshot(const Tegra::FramebufferConfig* framebuffer);
void RenderScreenshot(std::span<const Tegra::FramebufferConfig> framebuffers);
Core::TelemetrySession& telemetry_session;
Core::Frontend::EmuWindow& emu_window;