From f381066a43330e4543c7735bfd613c604c75aa21 Mon Sep 17 00:00:00 2001 From: fincs Date: Mon, 10 Dec 2018 13:31:13 +0100 Subject: [PATCH] Add NvColorFormat enum --- nx/include/switch/nvidia/graphic_buffer.h | 2 +- nx/include/switch/nvidia/types.h | 230 ++++++++++++++++++++++ nx/source/display/framebuffer.c | 20 +- nx/source/display/gfx.c | 2 +- 4 files changed, 242 insertions(+), 12 deletions(-) diff --git a/nx/include/switch/nvidia/graphic_buffer.h b/nx/include/switch/nvidia/graphic_buffer.h index 4574c2ed..f046278c 100644 --- a/nx/include/switch/nvidia/graphic_buffer.h +++ b/nx/include/switch/nvidia/graphic_buffer.h @@ -5,7 +5,7 @@ typedef struct { u32 width; u32 height; - u64 color_format; + NvColorFormat color_format; NvLayout layout; u32 pitch; u32 unused; // usually this field contains the nvmap handle, but it's completely unused/overwritten during marshalling diff --git a/nx/include/switch/nvidia/types.h b/nx/include/switch/nvidia/types.h index 4ab28a94..4e93adc7 100644 --- a/nx/include/switch/nvidia/types.h +++ b/nx/include/switch/nvidia/types.h @@ -249,3 +249,233 @@ typedef enum { NvKind_Generic_16BX2 = 0xfe, NvKind_Invalid = 0xff, } NvKind; + +typedef enum { + NvColorFormat_Unspecified = 0x0000000000UL, + NvColorFormat_NonColor8 = 0x0009200408UL, + NvColorFormat_X4C4 = 0x0009200A10UL, + NvColorFormat_NonColor32 = 0x0100490508UL, + NvColorFormat_A8L8 = 0x0100490E10UL, + NvColorFormat_Float_A16L16 = 0x0100495D20UL, + NvColorFormat_A1B5G5R5 = 0x0100531410UL, + NvColorFormat_A4B4G4R4 = 0x0100531510UL, + NvColorFormat_A5B5G5R1 = 0x0100531810UL, + NvColorFormat_A2B10G10R10 = 0x0100532020UL, + NvColorFormat_A8B8G8R8 = 0x0100532120UL, + NvColorFormat_A16B16G16R16 = 0x0100532740UL, + NvColorFormat_Float_A16B16G16R16 = 0x0100536740UL, + NvColorFormat_A1R5G5B5 = 0x0100D11410UL, + NvColorFormat_A4R4G4B4 = 0x0100D11510UL, + NvColorFormat_A5R1G5B5 = 0x0100D11610UL, + NvColorFormat_A2R10G10B10 = 0x0100D12020UL, + NvColorFormat_A8R8G8B8 = 0x0100D12120UL, + NvColorFormat_A1 = 0x0101240101UL, + NvColorFormat_A2 = 0x0101240202UL, + NvColorFormat_A4 = 0x0101240304UL, + NvColorFormat_A8 = 0x0101240408UL, + NvColorFormat_A16 = 0x0101240A10UL, + NvColorFormat_A32 = 0x0101241C20UL, + NvColorFormat_Float_A16 = 0x0101244A10UL, + NvColorFormat_L4A4 = 0x0102000508UL, + NvColorFormat_L8A8 = 0x0102000E10UL, + NvColorFormat_B4G4R4A4 = 0x01060A1510UL, + NvColorFormat_B5G5R1A5 = 0x01060A1710UL, + NvColorFormat_B5G5R5A1 = 0x01060A1810UL, + NvColorFormat_B8G8R8A8 = 0x01060A2120UL, + NvColorFormat_B10G10R10A2 = 0x01060A2320UL, + NvColorFormat_R1G5B5A5 = 0x0106881410UL, + NvColorFormat_R4G4B4A4 = 0x0106881510UL, + NvColorFormat_R5G5B5A1 = 0x0106881810UL, + NvColorFormat_R8G8B8A8 = 0x0106882120UL, + NvColorFormat_R10G10B10A2 = 0x0106882320UL, + NvColorFormat_L1 = 0x010A000101UL, + NvColorFormat_L2 = 0x010A000202UL, + NvColorFormat_L4 = 0x010A000304UL, + NvColorFormat_L8 = 0x010A000408UL, + NvColorFormat_L16 = 0x010A000A10UL, + NvColorFormat_L32 = 0x010A001C20UL, + NvColorFormat_Float_L16 = 0x010A004A10UL, + NvColorFormat_B5G6R5 = 0x010A0A1210UL, + NvColorFormat_B6G5R5 = 0x010A0A1310UL, + NvColorFormat_B5G5R5X1 = 0x010A0A1810UL, + NvColorFormat_B8_G8_R8 = 0x010A0A1918UL, + NvColorFormat_B8G8R8X8 = 0x010A0A2120UL, + NvColorFormat_Float_B10G11R11 = 0x010A0A5E20UL, + NvColorFormat_X1B5G5R5 = 0x010A531410UL, + NvColorFormat_X8B8G8R8 = 0x010A532120UL, + NvColorFormat_X16B16G16R16 = 0x010A532740UL, + NvColorFormat_Float_X16B16G16R16 = 0x010A536740UL, + NvColorFormat_R3G3B2 = 0x010A880608UL, + NvColorFormat_R5G5B6 = 0x010A881110UL, + NvColorFormat_R5G6B5 = 0x010A881210UL, + NvColorFormat_R5G5B5X1 = 0x010A881810UL, + NvColorFormat_R8_G8_B8 = 0x010A881918UL, + NvColorFormat_R8G8B8X8 = 0x010A882120UL, + NvColorFormat_X1R5G5B5 = 0x010AD11410UL, + NvColorFormat_X8R8G8B8 = 0x010AD12120UL, + NvColorFormat_RG8 = 0x010B080E10UL, + NvColorFormat_R16G16 = 0x010B081D20UL, + NvColorFormat_Float_R16G16 = 0x010B085D20UL, + NvColorFormat_R8 = 0x010B200408UL, + NvColorFormat_R16 = 0x010B200A10UL, + NvColorFormat_Float_R16 = 0x010B204A10UL, + NvColorFormat_A2B10G10R10_sRGB = 0x0200532020UL, + NvColorFormat_A8B8G8R8_sRGB = 0x0200532120UL, + NvColorFormat_A16B16G16R16_sRGB = 0x0200532740UL, + NvColorFormat_A2R10G10B10_sRGB = 0x0200D12020UL, + NvColorFormat_B10G10R10A2_sRGB = 0x02060A2320UL, + NvColorFormat_R10G10B10A2_sRGB = 0x0206882320UL, + NvColorFormat_X8B8G8R8_sRGB = 0x020A532120UL, + NvColorFormat_X16B16G16R16_sRGB = 0x020A532740UL, + NvColorFormat_A2B10G10R10_709 = 0x0300532020UL, + NvColorFormat_A8B8G8R8_709 = 0x0300532120UL, + NvColorFormat_A16B16G16R16_709 = 0x0300532740UL, + NvColorFormat_A2R10G10B10_709 = 0x0300D12020UL, + NvColorFormat_B10G10R10A2_709 = 0x03060A2320UL, + NvColorFormat_R10G10B10A2_709 = 0x0306882320UL, + NvColorFormat_X8B8G8R8_709 = 0x030A532120UL, + NvColorFormat_X16B16G16R16_709 = 0x030A532740UL, + NvColorFormat_A2B10G10R10_709_Linear = 0x0400532020UL, + NvColorFormat_A8B8G8R8_709_Linear = 0x0400532120UL, + NvColorFormat_A16B16G16R16_709_Linear = 0x0400532740UL, + NvColorFormat_A2R10G10B10_709_Linear = 0x0400D12020UL, + NvColorFormat_B10G10R10A2_709_Linear = 0x04060A2320UL, + NvColorFormat_R10G10B10A2_709_Linear = 0x0406882320UL, + NvColorFormat_X8B8G8R8_709_Linear = 0x040A532120UL, + NvColorFormat_X16B16G16R16_709_Linear = 0x040A532740UL, + NvColorFormat_Float_A16B16G16R16_scRGB_Linear = 0x0500536740UL, + NvColorFormat_A2B10G10R10_2020 = 0x0600532020UL, + NvColorFormat_A8B8G8R8_2020 = 0x0600532120UL, + NvColorFormat_A16B16G16R16_2020 = 0x0600532740UL, + NvColorFormat_A2R10G10B10_2020 = 0x0600D12020UL, + NvColorFormat_B10G10R10A2_2020 = 0x06060A2320UL, + NvColorFormat_R10G10B10A2_2020 = 0x0606882320UL, + NvColorFormat_X8B8G8R8_2020 = 0x060A532120UL, + NvColorFormat_X16B16G16R16_2020 = 0x060A532740UL, + NvColorFormat_A2B10G10R10_2020_Linear = 0x0700532020UL, + NvColorFormat_A8B8G8R8_2020_Linear = 0x0700532120UL, + NvColorFormat_A16B16G16R16_2020_Linear = 0x0700532740UL, + NvColorFormat_Float_A16B16G16R16_2020_Linear = 0x0700536740UL, + NvColorFormat_A2R10G10B10_2020_Linear = 0x0700D12020UL, + NvColorFormat_B10G10R10A2_2020_Linear = 0x07060A2320UL, + NvColorFormat_R10G10B10A2_2020_Linear = 0x0706882320UL, + NvColorFormat_X8B8G8R8_2020_Linear = 0x070A532120UL, + NvColorFormat_X16B16G16R16_2020_Linear = 0x070A532740UL, + NvColorFormat_Float_A16B16G16R16_2020_PQ = 0x0800536740UL, + NvColorFormat_A4I4 = 0x0901210508UL, + NvColorFormat_A8I8 = 0x0901210E10UL, + NvColorFormat_I4A4 = 0x0903200508UL, + NvColorFormat_I8A8 = 0x0903200E10UL, + NvColorFormat_I1 = 0x0909200101UL, + NvColorFormat_I2 = 0x0909200202UL, + NvColorFormat_I4 = 0x0909200304UL, + NvColorFormat_I8 = 0x0909200408UL, + NvColorFormat_A8Y8U8V8 = 0x0A00D12120UL, + NvColorFormat_A16Y16U16V16 = 0x0A00D12740UL, + NvColorFormat_Y8U8V8A8 = 0x0A06882120UL, + NvColorFormat_V8_U8 = 0x0A080C0710UL, + NvColorFormat_V8U8 = 0x0A080C0E10UL, + NvColorFormat_V10U10 = 0x0A08142220UL, + NvColorFormat_V12U12 = 0x0A08142420UL, + NvColorFormat_V8 = 0x0A08240408UL, + NvColorFormat_V10 = 0x0A08240F10UL, + NvColorFormat_V12 = 0x0A08241010UL, + NvColorFormat_U8_V8 = 0x0A08440710UL, + NvColorFormat_U8V8 = 0x0A08440E10UL, + NvColorFormat_U10V10 = 0x0A08842220UL, + NvColorFormat_U12V12 = 0x0A08842420UL, + NvColorFormat_U8 = 0x0A09040408UL, + NvColorFormat_U10 = 0x0A09040F10UL, + NvColorFormat_U12 = 0x0A09041010UL, + NvColorFormat_Y8 = 0x0A09200408UL, + NvColorFormat_Y10 = 0x0A09200F10UL, + NvColorFormat_Y12 = 0x0A09201010UL, + NvColorFormat_YVYU = 0x0A0A500810UL, + NvColorFormat_VYUY = 0x0A0A500910UL, + NvColorFormat_YUYV = 0x0A0A880810UL, + NvColorFormat_UYVY = 0x0A0A880910UL, + NvColorFormat_Y8_U8_V8 = 0x0A0A881918UL, + NvColorFormat_V8_U8_RR = 0x0B080C0710UL, + NvColorFormat_V8U8_RR = 0x0B080C0E10UL, + NvColorFormat_V8_RR = 0x0B08240408UL, + NvColorFormat_U8_V8_RR = 0x0B08440710UL, + NvColorFormat_U8V8_RR = 0x0B08440E10UL, + NvColorFormat_U8_RR = 0x0B09040408UL, + NvColorFormat_Y8_RR = 0x0B09200408UL, + NvColorFormat_V8_U8_ER = 0x0C080C0710UL, + NvColorFormat_V8U8_ER = 0x0C080C0E10UL, + NvColorFormat_V8_ER = 0x0C08240408UL, + NvColorFormat_U8_V8_ER = 0x0C08440710UL, + NvColorFormat_U8V8_ER = 0x0C08440E10UL, + NvColorFormat_U8_ER = 0x0C09040408UL, + NvColorFormat_Y8_ER = 0x0C09200408UL, + NvColorFormat_V8_U8_709 = 0x0D080C0710UL, + NvColorFormat_V8U8_709 = 0x0D080C0E10UL, + NvColorFormat_V10U10_709 = 0x0D08142220UL, + NvColorFormat_V12U12_709 = 0x0D08142420UL, + NvColorFormat_V8_709 = 0x0D08240408UL, + NvColorFormat_V10_709 = 0x0D08240F10UL, + NvColorFormat_V12_709 = 0x0D08241010UL, + NvColorFormat_U8_V8_709 = 0x0D08440710UL, + NvColorFormat_U8V8_709 = 0x0D08440E10UL, + NvColorFormat_U10V10_709 = 0x0D08842220UL, + NvColorFormat_U12V12_709 = 0x0D08842420UL, + NvColorFormat_U8_709 = 0x0D09040408UL, + NvColorFormat_U10_709 = 0x0D09040F10UL, + NvColorFormat_U12_709 = 0x0D09041010UL, + NvColorFormat_Y8_709 = 0x0D09200408UL, + NvColorFormat_Y10_709 = 0x0D09200F10UL, + NvColorFormat_Y12_709 = 0x0D09201010UL, + NvColorFormat_V8_U8_709_ER = 0x0E080C0710UL, + NvColorFormat_V8U8_709_ER = 0x0E080C0E10UL, + NvColorFormat_V10U10_709_ER = 0x0E08142220UL, + NvColorFormat_V12U12_709_ER = 0x0E08142420UL, + NvColorFormat_V8_709_ER = 0x0E08240408UL, + NvColorFormat_V10_709_ER = 0x0E08240F10UL, + NvColorFormat_V12_709_ER = 0x0E08241010UL, + NvColorFormat_U8_V8_709_ER = 0x0E08440710UL, + NvColorFormat_U8V8_709_ER = 0x0E08440E10UL, + NvColorFormat_U10V10_709_ER = 0x0E08842220UL, + NvColorFormat_U12V12_709_ER = 0x0E08842420UL, + NvColorFormat_U8_709_ER = 0x0E09040408UL, + NvColorFormat_U10_709_ER = 0x0E09040F10UL, + NvColorFormat_U12_709_ER = 0x0E09041010UL, + NvColorFormat_Y8_709_ER = 0x0E09200408UL, + NvColorFormat_Y10_709_ER = 0x0E09200F10UL, + NvColorFormat_Y12_709_ER = 0x0E09201010UL, + NvColorFormat_V10U10_2020 = 0x0F08142220UL, + NvColorFormat_V12U12_2020 = 0x0F08142420UL, + NvColorFormat_V10_2020 = 0x0F08240F10UL, + NvColorFormat_V12_2020 = 0x0F08241010UL, + NvColorFormat_U10V10_2020 = 0x0F08842220UL, + NvColorFormat_U12V12_2020 = 0x0F08842420UL, + NvColorFormat_U10_2020 = 0x0F09040F10UL, + NvColorFormat_U12_2020 = 0x0F09041010UL, + NvColorFormat_Y10_2020 = 0x0F09200F10UL, + NvColorFormat_Y12_2020 = 0x0F09201010UL, + NvColorFormat_Bayer8RGGB = 0x1009200408UL, + NvColorFormat_Bayer16RGGB = 0x1009200A10UL, + NvColorFormat_BayerS16RGGB = 0x1009208A10UL, + NvColorFormat_X2Bayer14RGGB = 0x1009210B10UL, + NvColorFormat_X4Bayer12RGGB = 0x1009210C10UL, + NvColorFormat_X6Bayer10RGGB = 0x1009210D10UL, + NvColorFormat_Bayer8BGGR = 0x1109200408UL, + NvColorFormat_Bayer16BGGR = 0x1109200A10UL, + NvColorFormat_BayerS16BGGR = 0x1109208A10UL, + NvColorFormat_X2Bayer14BGGR = 0x1109210B10UL, + NvColorFormat_X4Bayer12BGGR = 0x1109210C10UL, + NvColorFormat_X6Bayer10BGGR = 0x1109210D10UL, + NvColorFormat_Bayer8GRBG = 0x1209200408UL, + NvColorFormat_Bayer16GRBG = 0x1209200A10UL, + NvColorFormat_BayerS16GRBG = 0x1209208A10UL, + NvColorFormat_X2Bayer14GRBG = 0x1209210B10UL, + NvColorFormat_X4Bayer12GRBG = 0x1209210C10UL, + NvColorFormat_X6Bayer10GRBG = 0x1209210D10UL, + NvColorFormat_Bayer8GBRG = 0x1309200408UL, + NvColorFormat_Bayer16GBRG = 0x1309200A10UL, + NvColorFormat_BayerS16GBRG = 0x1309208A10UL, + NvColorFormat_X2Bayer14GBRG = 0x1309210B10UL, + NvColorFormat_X4Bayer12GBRG = 0x1309210C10UL, + NvColorFormat_X6Bayer10GBRG = 0x1309210D10UL, + NvColorFormat_XYZ = 0x140A886640UL, +} NvColorFormat; diff --git a/nx/source/display/framebuffer.c b/nx/source/display/framebuffer.c index 5e889e4e..84be30c6 100644 --- a/nx/source/display/framebuffer.c +++ b/nx/source/display/framebuffer.c @@ -12,14 +12,14 @@ #include "display/framebuffer.h" #include "nvidia/graphic_buffer.h" -static const u64 g_nvColorFmtTable[] = { - 0x100532120, // PIXEL_FORMAT_RGBA_8888 - 0x10A532120, // PIXEL_FORMAT_RGBX_8888 - 0x10A881918, // PIXEL_FORMAT_RGB_888 <-- doesn't work - 0x10A881210, // PIXEL_FORMAT_RGB_565 - 0x100D12120, // PIXEL_FORMAT_BGRA_8888 - 0x106881810, // PIXEL_FORMAT_RGBA_5551 <-- doesn't work - 0x100531510, // PIXEL_FORMAT_RGBA_4444 +static const NvColorFormat g_nvColorFmtTable[] = { + NvColorFormat_A8B8G8R8, // PIXEL_FORMAT_RGBA_8888 + NvColorFormat_X8B8G8R8, // PIXEL_FORMAT_RGBX_8888 + NvColorFormat_R8_G8_B8, // PIXEL_FORMAT_RGB_888 <-- doesn't work + NvColorFormat_R5G6B5, // PIXEL_FORMAT_RGB_565 + NvColorFormat_A8R8G8B8, // PIXEL_FORMAT_BGRA_8888 + NvColorFormat_R5G5B5A1, // PIXEL_FORMAT_RGBA_5551 <-- doesn't work + NvColorFormat_A4B4G4R4, // PIXEL_FORMAT_RGBA_4444 }; Result framebufferCreate(Framebuffer* fb, NWindow *win, u32 width, u32 height, u32 format, u32 num_fbs) @@ -48,8 +48,8 @@ Result framebufferCreate(Framebuffer* fb, NWindow *win, u32 width, u32 height, u fb->win = win; fb->num_fbs = num_fbs; - const u64 colorfmt = g_nvColorFmtTable[format-1]; - const u32 bytes_per_pixel = (colorfmt >> 3) & 0x1F; + const NvColorFormat colorfmt = g_nvColorFmtTable[format-PIXEL_FORMAT_RGBA_8888]; + const u32 bytes_per_pixel = ((u64)colorfmt >> 3) & 0x1F; const u32 block_height_log2 = 4; // According to TRM this is the optimal value (SIXTEEN_GOBS) const u32 block_height = 8 * (1U << block_height_log2); diff --git a/nx/source/display/gfx.c b/nx/source/display/gfx.c index 5e68b0b4..2a2951f8 100644 --- a/nx/source/display/gfx.c +++ b/nx/source/display/gfx.c @@ -81,7 +81,7 @@ static NvGraphicBuffer g_gfx_GraphicBuffer = { .num_planes = 1, .planes = { { - .color_format = 0x100532120UL, // this is 'A8B8G8R8' according to symbols in official sw + .color_format = NvColorFormat_A8B8G8R8, .layout = NvLayout_BlockLinear, .kind = NvKind_Generic_16BX2, .block_height_log2 = 4, // i.e. block height is 16 which is the preferred value according to TRM