From bfe45774f16e958bf34ed0d58a1d31e2325df47d Mon Sep 17 00:00:00 2001 From: bunnei Date: Thu, 22 Mar 2018 21:04:30 -0400 Subject: video_core: Move FramebufferInfo to FramebufferConfig in GPU. --- src/core/hle/service/nvdrv/devices/nvdisp_disp0.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/core/hle/service') diff --git a/src/core/hle/service/nvdrv/devices/nvdisp_disp0.cpp b/src/core/hle/service/nvdrv/devices/nvdisp_disp0.cpp index 94530724e..7cd1d9306 100644 --- a/src/core/hle/service/nvdrv/devices/nvdisp_disp0.cpp +++ b/src/core/hle/service/nvdrv/devices/nvdisp_disp0.cpp @@ -26,14 +26,14 @@ void nvdisp_disp0::flip(u32 buffer_handle, u32 offset, u32 format, u32 width, u3 "Drawing from address %lx offset %08X Width %u Height %u Stride %u Format %u", addr, offset, width, height, stride, format); - using PixelFormat = RendererBase::FramebufferInfo::PixelFormat; + using PixelFormat = Tegra::FramebufferConfig::PixelFormat; using Flags = NVFlinger::BufferQueue::BufferTransformFlags; const bool flip_vertical = static_cast(transform) & static_cast(Flags::FlipV); - const RendererBase::FramebufferInfo framebuffer_info{ + const Tegra::FramebufferConfig framebuffer{ addr, offset, width, height, stride, static_cast(format), flip_vertical}; Core::System::GetInstance().perf_stats.EndGameFrame(); - VideoCore::g_renderer->SwapBuffers(framebuffer_info); + VideoCore::g_renderer->SwapBuffers(framebuffer); } } // namespace Devices -- cgit v1.2.3 From e12c2cf8c692bf7581dda96c601e30c2a969086c Mon Sep 17 00:00:00 2001 From: bunnei Date: Thu, 22 Mar 2018 23:18:04 -0400 Subject: nvdisp_disp0: Always flush and invalidate framebuffer region. - Workaround for texture forwarding until we have a better place. --- src/core/hle/service/nvdrv/devices/nvdisp_disp0.cpp | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'src/core/hle/service') diff --git a/src/core/hle/service/nvdrv/devices/nvdisp_disp0.cpp b/src/core/hle/service/nvdrv/devices/nvdisp_disp0.cpp index 7cd1d9306..db030a8e2 100644 --- a/src/core/hle/service/nvdrv/devices/nvdisp_disp0.cpp +++ b/src/core/hle/service/nvdrv/devices/nvdisp_disp0.cpp @@ -33,6 +33,13 @@ void nvdisp_disp0::flip(u32 buffer_handle, u32 offset, u32 format, u32 width, u3 addr, offset, width, height, stride, static_cast(format), flip_vertical}; Core::System::GetInstance().perf_stats.EndGameFrame(); + + // TODO(bunnei): The framebuffer region should only be flushed and invalidated if it is written + // to, not every frame. When we find the right place for this, the below line can be removed. + Memory::RasterizerFlushVirtualRegion(framebuffer.address, + framebuffer.width * framebuffer.height * 4, + Memory::FlushMode::FlushAndInvalidate); + VideoCore::g_renderer->SwapBuffers(framebuffer); } -- cgit v1.2.3 From ec4e1a3685d458147ac76f4cf53ea86632d0debd Mon Sep 17 00:00:00 2001 From: bunnei Date: Fri, 23 Mar 2018 14:58:27 -0400 Subject: renderer_opengl: Better handling of framebuffer transform flags. --- src/core/hle/service/nvdrv/devices/nvdisp_disp0.cpp | 4 +--- src/core/hle/service/nvflinger/buffer_queue.h | 2 ++ 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'src/core/hle/service') diff --git a/src/core/hle/service/nvdrv/devices/nvdisp_disp0.cpp b/src/core/hle/service/nvdrv/devices/nvdisp_disp0.cpp index db030a8e2..f6c2b24a8 100644 --- a/src/core/hle/service/nvdrv/devices/nvdisp_disp0.cpp +++ b/src/core/hle/service/nvdrv/devices/nvdisp_disp0.cpp @@ -27,10 +27,8 @@ void nvdisp_disp0::flip(u32 buffer_handle, u32 offset, u32 format, u32 width, u3 offset, width, height, stride, format); using PixelFormat = Tegra::FramebufferConfig::PixelFormat; - using Flags = NVFlinger::BufferQueue::BufferTransformFlags; - const bool flip_vertical = static_cast(transform) & static_cast(Flags::FlipV); const Tegra::FramebufferConfig framebuffer{ - addr, offset, width, height, stride, static_cast(format), flip_vertical}; + addr, offset, width, height, stride, static_cast(format), transform}; Core::System::GetInstance().perf_stats.EndGameFrame(); diff --git a/src/core/hle/service/nvflinger/buffer_queue.h b/src/core/hle/service/nvflinger/buffer_queue.h index 686eadca7..1de5767cb 100644 --- a/src/core/hle/service/nvflinger/buffer_queue.h +++ b/src/core/hle/service/nvflinger/buffer_queue.h @@ -47,6 +47,8 @@ public: ~BufferQueue() = default; enum class BufferTransformFlags : u32 { + /// No transform flags are set + Unset = 0x00, /// Flip source image horizontally (around the vertical axis) FlipH = 0x01, /// Flip source image vertically (around the horizontal axis) -- cgit v1.2.3 From 054393917e99d307eea0aabc78c0c6e5e709b2c7 Mon Sep 17 00:00:00 2001 From: bunnei Date: Fri, 23 Mar 2018 15:49:04 -0400 Subject: renderer_opengl: Fixes for properly flushing & rendering the framebuffer. --- src/core/hle/service/nvdrv/devices/nvdisp_disp0.cpp | 6 ------ 1 file changed, 6 deletions(-) (limited to 'src/core/hle/service') diff --git a/src/core/hle/service/nvdrv/devices/nvdisp_disp0.cpp b/src/core/hle/service/nvdrv/devices/nvdisp_disp0.cpp index f6c2b24a8..87b3a2d74 100644 --- a/src/core/hle/service/nvdrv/devices/nvdisp_disp0.cpp +++ b/src/core/hle/service/nvdrv/devices/nvdisp_disp0.cpp @@ -32,12 +32,6 @@ void nvdisp_disp0::flip(u32 buffer_handle, u32 offset, u32 format, u32 width, u3 Core::System::GetInstance().perf_stats.EndGameFrame(); - // TODO(bunnei): The framebuffer region should only be flushed and invalidated if it is written - // to, not every frame. When we find the right place for this, the below line can be removed. - Memory::RasterizerFlushVirtualRegion(framebuffer.address, - framebuffer.width * framebuffer.height * 4, - Memory::FlushMode::FlushAndInvalidate); - VideoCore::g_renderer->SwapBuffers(framebuffer); } -- cgit v1.2.3