Quellcode durchsuchen

hle: nvflinger: Move PixelFormat to its own header.

bunnei vor 4 Jahren
Ursprung
Commit
d456b9d554

+ 1 - 0
src/core/CMakeLists.txt

@@ -539,6 +539,7 @@ add_library(core STATIC
     hle/service/nvflinger/buffer_queue.h
     hle/service/nvflinger/nvflinger.cpp
     hle/service/nvflinger/nvflinger.h
+    hle/service/nvflinger/pixel_format.h
     hle/service/nvflinger/status.h
     hle/service/nvflinger/ui/fence.h
     hle/service/nvflinger/ui/graphic_buffer.h

+ 4 - 6
src/core/hle/service/nvdrv/devices/nvdisp_disp0.cpp

@@ -38,18 +38,16 @@ NvResult nvdisp_disp0::Ioctl3(DeviceFD fd, Ioctl command, const std::vector<u8>&
 void nvdisp_disp0::OnOpen(DeviceFD fd) {}
 void nvdisp_disp0::OnClose(DeviceFD fd) {}
 
-void nvdisp_disp0::flip(u32 buffer_handle, u32 offset, u32 format, u32 width, u32 height,
-                        u32 stride, NVFlinger::BufferQueue::BufferTransformFlags transform,
+void nvdisp_disp0::flip(u32 buffer_handle, u32 offset, android::PixelFormat format, u32 width,
+                        u32 height, u32 stride, android::BufferTransformFlags transform,
                         const Common::Rectangle<int>& crop_rect) {
     const VAddr addr = nvmap_dev->GetObjectAddress(buffer_handle);
     LOG_TRACE(Service,
               "Drawing from address {:X} offset {:08X} Width {} Height {} Stride {} Format {}",
               addr, offset, width, height, stride, format);
 
-    const auto pixel_format = static_cast<Tegra::FramebufferConfig::PixelFormat>(format);
-    const auto transform_flags = static_cast<Tegra::FramebufferConfig::TransformFlags>(transform);
-    const Tegra::FramebufferConfig framebuffer{addr,   offset,       width,           height,
-                                               stride, pixel_format, transform_flags, crop_rect};
+    const Tegra::FramebufferConfig framebuffer{addr,   offset, width,     height,
+                                               stride, format, transform, crop_rect};
 
     system.GetPerfStats().EndSystemFrame();
     system.GPU().SwapBuffers(&framebuffer);

+ 3 - 2
src/core/hle/service/nvdrv/devices/nvdisp_disp0.h

@@ -10,6 +10,7 @@
 #include "common/math_util.h"
 #include "core/hle/service/nvdrv/devices/nvdevice.h"
 #include "core/hle/service/nvflinger/buffer_queue.h"
+#include "core/hle/service/nvflinger/pixel_format.h"
 
 namespace Service::Nvidia::Devices {
 
@@ -31,8 +32,8 @@ public:
     void OnClose(DeviceFD fd) override;
 
     /// Performs a screen flip, drawing the buffer pointed to by the handle.
-    void flip(u32 buffer_handle, u32 offset, u32 format, u32 width, u32 height, u32 stride,
-              NVFlinger::BufferQueue::BufferTransformFlags transform,
+    void flip(u32 buffer_handle, u32 offset, android::PixelFormat format, u32 width, u32 height,
+              u32 stride, android::BufferTransformFlags transform,
               const Common::Rectangle<int>& crop_rect);
 
 private:

+ 21 - 0
src/core/hle/service/nvflinger/pixel_format.h

@@ -0,0 +1,21 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+// Copyright 2021 yuzu Emulator Project
+
+#pragma once
+
+#include "common/common_types.h"
+
+namespace android {
+
+enum class PixelFormat : u32 {
+    NoFormat = 0,
+    Rgba8888 = 1,
+    Rgbx8888 = 2,
+    Rgb888 = 3,
+    Rgb565 = 4,
+    Bgra8888 = 5,
+    Rgba5551 = 6,
+    Rgba4444 = 7,
+};
+
+} // namespace android

+ 2 - 2
src/core/hle/service/nvflinger/ui/graphic_buffer.h

@@ -44,7 +44,7 @@ public:
         return buffer_id;
     }
 
-    constexpr u32 ExternalFormat() const {
+    constexpr PixelFormat ExternalFormat() const {
         return external_format;
     }
 
@@ -89,7 +89,7 @@ private:
     INSERT_PADDING_WORDS(3);
     u32 buffer_id{};
     INSERT_PADDING_WORDS(6);
-    u32 external_format{};
+    PixelFormat external_format{};
     INSERT_PADDING_WORDS(10);
     u32 handle{};
     u32 offset{};

+ 3 - 7
src/video_core/framebuffer_config.h

@@ -6,18 +6,14 @@
 
 #include "common/common_types.h"
 #include "common/math_util.h"
+#include "core/hle/service/nvflinger/pixel_format.h"
 
 namespace Tegra {
+
 /**
  * Struct describing framebuffer configuration
  */
 struct FramebufferConfig {
-    enum class PixelFormat : u32 {
-        A8B8G8R8_UNORM = 1,
-        RGB565_UNORM = 4,
-        B8G8R8A8_UNORM = 5,
-    };
-
     enum class TransformFlags : u32 {
         /// No transform flags are set
         Unset = 0x00,
@@ -38,9 +34,9 @@ struct FramebufferConfig {
     u32 width{};
     u32 height{};
     u32 stride{};
-    PixelFormat pixel_format{};
 
     TransformFlags transform_flags{};
+    android::PixelFormat pixel_format{};
     Common::Rectangle<int> crop_rect;
 };
 

+ 4 - 4
src/video_core/renderer_opengl/renderer_opengl.cpp

@@ -323,12 +323,12 @@ void RendererOpenGL::ConfigureFramebufferTexture(TextureInfo& texture,
 
     GLint internal_format;
     switch (framebuffer.pixel_format) {
-    case Tegra::FramebufferConfig::PixelFormat::A8B8G8R8_UNORM:
+    case android::PixelFormat::Rgba8888:
         internal_format = GL_RGBA8;
         texture.gl_format = GL_RGBA;
         texture.gl_type = GL_UNSIGNED_INT_8_8_8_8_REV;
         break;
-    case Tegra::FramebufferConfig::PixelFormat::RGB565_UNORM:
+    case android::PixelFormat::Rgb565:
         internal_format = GL_RGB565;
         texture.gl_format = GL_RGB;
         texture.gl_type = GL_UNSIGNED_SHORT_5_6_5;
@@ -464,8 +464,8 @@ void RendererOpenGL::DrawScreen(const Layout::FramebufferLayout& layout) {
     const auto& texcoords = screen_info.display_texcoords;
     auto left = texcoords.left;
     auto right = texcoords.right;
-    if (framebuffer_transform_flags != Tegra::FramebufferConfig::TransformFlags::Unset) {
-        if (framebuffer_transform_flags == Tegra::FramebufferConfig::TransformFlags::FlipV) {
+    if (framebuffer_transform_flags != android::BufferTransformFlags::Unset) {
+        if (framebuffer_transform_flags == android::BufferTransformFlags::FlipV) {
             // Flip the framebuffer vertically
             left = texcoords.right;
             right = texcoords.left;

+ 2 - 2
src/video_core/renderer_opengl/renderer_opengl.h

@@ -46,7 +46,7 @@ struct TextureInfo {
     GLsizei height;
     GLenum gl_format;
     GLenum gl_type;
-    Tegra::FramebufferConfig::PixelFormat pixel_format;
+    android::PixelFormat pixel_format;
 };
 
 /// Structure used for storing information about the display target for the Switch screen
@@ -135,7 +135,7 @@ private:
     std::vector<u8> gl_framebuffer_data;
 
     /// Used for transforming the framebuffer orientation
-    Tegra::FramebufferConfig::TransformFlags framebuffer_transform_flags{};
+    android::BufferTransformFlags framebuffer_transform_flags{};
     Common::Rectangle<int> framebuffer_crop_rect;
 };
 

+ 5 - 5
src/video_core/renderer_vulkan/vk_blit_screen.cpp

@@ -94,11 +94,11 @@ std::size_t GetSizeInBytes(const Tegra::FramebufferConfig& framebuffer) {
 
 VkFormat GetFormat(const Tegra::FramebufferConfig& framebuffer) {
     switch (framebuffer.pixel_format) {
-    case Tegra::FramebufferConfig::PixelFormat::A8B8G8R8_UNORM:
+    case android::PixelFormat::Rgba8888:
         return VK_FORMAT_A8B8G8R8_UNORM_PACK32;
-    case Tegra::FramebufferConfig::PixelFormat::RGB565_UNORM:
+    case android::PixelFormat::Rgb565:
         return VK_FORMAT_R5G6B5_UNORM_PACK16;
-    case Tegra::FramebufferConfig::PixelFormat::B8G8R8A8_UNORM:
+    case android::PixelFormat::Bgra8888:
         return VK_FORMAT_B8G8R8A8_UNORM;
     default:
         UNIMPLEMENTED_MSG("Unknown framebuffer pixel format: {}",
@@ -1390,9 +1390,9 @@ void VKBlitScreen::SetVertexData(BufferData& data, const Tegra::FramebufferConfi
     auto right = texcoords.right;
 
     switch (framebuffer_transform_flags) {
-    case Tegra::FramebufferConfig::TransformFlags::Unset:
+    case android::BufferTransformFlags::Unset:
         break;
-    case Tegra::FramebufferConfig::TransformFlags::FlipV:
+    case android::BufferTransformFlags::FlipV:
         // Flip the framebuffer vertically
         left = texcoords.right;
         right = texcoords.left;

+ 4 - 4
src/video_core/surface.cpp

@@ -190,13 +190,13 @@ PixelFormat PixelFormatFromRenderTargetFormat(Tegra::RenderTargetFormat format)
     }
 }
 
-PixelFormat PixelFormatFromGPUPixelFormat(Tegra::FramebufferConfig::PixelFormat format) {
+PixelFormat PixelFormatFromGPUPixelFormat(android::PixelFormat format) {
     switch (format) {
-    case Tegra::FramebufferConfig::PixelFormat::A8B8G8R8_UNORM:
+    case android::PixelFormat::Rgba8888:
         return PixelFormat::A8B8G8R8_UNORM;
-    case Tegra::FramebufferConfig::PixelFormat::RGB565_UNORM:
+    case android::PixelFormat::Rgb565:
         return PixelFormat::R5G6B5_UNORM;
-    case Tegra::FramebufferConfig::PixelFormat::B8G8R8A8_UNORM:
+    case android::PixelFormat::Bgra8888:
         return PixelFormat::B8G8R8A8_UNORM;
     default:
         UNIMPLEMENTED_MSG("Unimplemented format={}", format);

+ 1 - 1
src/video_core/surface.h

@@ -460,7 +460,7 @@ PixelFormat PixelFormatFromDepthFormat(Tegra::DepthFormat format);
 
 PixelFormat PixelFormatFromRenderTargetFormat(Tegra::RenderTargetFormat format);
 
-PixelFormat PixelFormatFromGPUPixelFormat(Tegra::FramebufferConfig::PixelFormat format);
+PixelFormat PixelFormatFromGPUPixelFormat(android::PixelFormat format);
 
 SurfaceType GetFormatType(PixelFormat pixel_format);