Common nn::gfx

Revision as of 20:35, 9 May 2023 by Watertoon (talk | contribs) (Correct enum class names and mark unofficial ones.)

Structures and enums from nn::gfx appearing across nn::gfx file formats and nn::g3d file formats. Notably the nn::gfx formats Bnsh and Bntx, as well as nn::g3d Bfres.

nn::gfx::MemoryPoolFlags

Flags denoting how a memory pool can be accessed.

Name (Unofficial) Value Description
CpuNoAccess 0x1 (1 << 0) Memory is unable to be mapped to CPU
CpuUncached 0x2 (1 << 1) Memory is coherent on CPU
CpuCached 0x4 (1 << 2) Memory is cached on CPU
GpuNoAccess 0x8 (1 << 3) Memory is unable to be read by the GPU
GpuUncached 0x10 (1 << 4) Memory is coherent on GPU
GpuCached 0x20 (1 << 5) Memory is cached on GPU
ShaderCode 0x40 (1 << 6) Memory is shader code for the GPU
Compressible 0x80 (1 << 7) ???
Physical 0x100 (1 << 8) ???
Virtual 0x200 (1 << 9) ???

nn::gfx::MemoryPoolInfo

Offset Size Type Description
0x0 0x4 u32 (nn::gfx::MemoryPoolFlags) MemoryPool flags
0x4 0x4 u32 Memory size
0x8 0x8 void * Memory pointer (must be 0x1000 aka page aligned)

nn::gfx::GpuAccessFlags

Flags denoting how a buffer or texture will be accessed.

Name (Unofficial) Value Description
VertexBuffer 0x4 (1 << 2) Vertex buffer
IndexBuffer 0x8 (1 << 3) Index buffer
UniformBuffer 0x10 (1 << 4) Uniform/Storage buffer
Texture 0x20 (1 << 5) Texture
TransferDestination 0x40 (1 << 6) Transfer destination
RenderTargetColor 0x80 (1 << 7) For render target colors
RenderTargetDepth 0x100 (1 << 8) For render target depths
IndirectDraw 0x200 (1 << 9) For indirect draw commands
DisplayTexture 0x400 (1 << 10) For present
Counter 0x800 (1 << 11) ???

nn::gfx::BufferInfo

Offset Size Type Description
0x0 0x4 u32 Buffer size
0x4 0x4 u32 (nn::gfx::GpuAccessFlags) GPU access flags
0x8 0x4 u32 Reserved
0xc 0x4 u32 Reserved

nn::gfx:::ImageStorageDimension

Name (Unofficial) Value Description
Type1D 0x1
Type2D 0x2
Type3D 0x3

nn::gfx::TileMode (Unofficial)

Name (Unofficial) Value Description
Optimal 0x0
Linear 0x1

nn::gfx::ChannelFormat

Name (Unofficial) Value Description
None 0x1
R8 0x2
R4G4B4A4 0x3
R5G5B5A1 0x5
A1B5G5R5 0x6
R5G6B5 0x7
B5G6R5 0x8
R8G8 0x9
R16 0xa
R8G8B8A8 0xb
B8G8R8A8 0xc
R9G9B9E5F 0xd
R10G10B10A2 0xe
R11G11B10F 0xf
R16G16 0x12
D24S8 0x13
R32 0x14
R16G16B16A16 0x15
D32FS8 0x16
R32G32 0x17
R32G32B32 0x18
R32G32B32A32 0x19
BC1 0x1a
BC2 0x1b
BC3 0x1c
BC4 0x1d
BC5 0x1e
BC6H 0x1f
BC7U 0x20
ASTC_4x4 0x2d
ASTC_5x4 0x2e
ASTC_5x5 0x2f
ASTC_6x5 0x30
ASTC_6x6 0x31
ASTC_8x5 0x32
ASTC_8x6 0x33
ASTC_8x8 0x34
ASTC_10x5 0x35
ASTC_10x6 0x26
ASTC_10x8 0x37
ASTC_10x10 0x38
ASTC_12x10 0x39
ASTC_12x12 0x3a
B5G5R5A1 0x3b

nn::gfx::TypeFormat

Name (Unofficial) Value Description
Unorm 0x1
Snorm 0x2
UInt 0x3
SInt 0x4
Float 0x5
SRGB 0x6
Depth 0x7
UScaled 0x8
SScaled 0x9
UFloat 0xa

nn::gfx::ImageFormat

Image formats are formed by a ChannelFormat and a TypeFormat. ImageFormat = (ChannelFormat << 8) | TypeFormat

Name (Unofficial) Value Description
R8_Unorm
R8_Snorm
R8_UInt
R8_SInt
R4G4B4A4_Unorm
R5G5B5A1_Unorm
A1B5G5R5_Unorm
R5G6B5_Unorm
B5G6R5_Unorm
R8G8_Unorm
R8G8_Snorm
R8G8_UInt
R8G8_SInt
R16_Unorm
R16_Snorm
R16_UInt
R16_SInt
R16_Float
Z16_Depth
R8G8B8A8_Unorm
R8G8B8A8_Snorm
R8G8B8A8_UInt
R8G8B8A8_SInt
R8G8B8A8_SRGB
B8G8R8A8_Unorm
B8G8R8A8_SRGB
R9G9B9E5F_SharedFloat
R10G10B10A2_Unorm
R10G10B10A2_UInt
R11G11B10F_Float
R16G16_Unorm
R16G16_Snorm
R16G16_UInt
R16G16_SInt
R16G16_Float
D24S8_Depth
R32_UInt
R32_SInt
R32_Float
D32F_Depth
R16G16B16A16_Unorm
R16G16B16A16_Snorm
R16G16B16A16_UInt
R16G16B16A16_SInt
R16G16B16A16_Float
D32FS8_Depth
R32G32_UInt
R32G32_SInt
R32G32_Float
R32G32B32_UInt
R32G32B32_SInt
R32G32B32_Float
R32G32B32A32_UInt
R32G32B32A32_SInt
R32G32B32A32_Float
BC1_Unorm
BC1_SRGB
BC2_Unorm
BC2_SRGB
BC3_Unorm
BC3_SRGB
BC4_Unorm
BC4_Snorm
BC5_Unorm
BC5_Snorm
BC6H_SF16
BC6H_UF16
BC7U_Unorm
BC7U_SRGB
ASTC_4X4_Unorm
ASTC_4X4_SRGB
ASTC_5X4_Unorm
ASTC_5X4_SRGB
ASTC_5X5_Unorm
ASTC_5X5_SRGB
ASTC_6X5_Unorm
ASTC_6X5_SRGB
ASTC_6X6_Unorm
ASTC_6X6_SRGB
ASTC_8X5_Unorm
ASTC_8X5_SRGB
ASTC_8X6_Unorm
ASTC_8X6_SRGB
ASTC_8X8_Unorm
ASTC_8X8_SRGB
ASTC_10X5_Unorm
ASTC_10X5_SRGB
ASTC_10X6_Unorm
ASTC_10X6_SRGB
ASTC_10X8_Unorm
ASTC_10X8_SRGB
ASTC_10X10_Unorm
ASTC_10X10_SRGB
ASTC_12X10_Unorm
ASTC_12X10_SRGB
ASTC_12X12_Unorm
ASTC_12X12_SRGB
B5G5R5A1_Unorm

nn::gfx::TextureInfo

Offset Size Type Description
0x0:0 1 bit u8 Is Packaged Texture
0x0:1 1 bit u8 Is Sparse Binding
0x0:2 1 bit u8 Is Sparse
0x0:3 1 bit u8 Is ResTexture
0x0:4 4 bit u8 Reserved
0x1 0x1 u8 Storage dimension (nn::gfx::ImageStorageDimension)
0x2 0x2 u16 Tile mode (nn::gfx::TileMode)
0x4 0x2 u16 Swizzle (???)
0x6 0x2 u16 Mip levels
0x8 0x2 u16 Sample count
0xa 0x2 u16 Reserved
0xc 0x4 u32 Image format (nn::gfx::ImageFormat)
0x10 0x4 u32 Gpu access flags (nn::gfx::GpuAccessFlags)
0x14 0x4 u32 Width
0x18 0x4 u32 Height
0x1c 0x4 u32 Depth
0x20 0x4 u32 Array layers
0x24 0x4 u32 Packaged texture layout (???)

nn::gfx::TextureAddressMode

Name (Unofficial) Value Description
Repeat 0x0
MirrorRepeat 0x1
ClampToEdge 0x2
ClampToBorder 0x3
MirrorClampToBorder 0x4

nn::gfx::ComparisonFunction

Name (Unofficial) Value Description
Never 0x0
LessThan 0x1
Equal 0x2
LessThanEqual 0x3
GreateThan 0x4
NotEqual 0x5
GreaterThanEqual 0x6
Always 0x7

nn::gfx::BorderColor (Unofficial)

Name (Unofficial) Value Description
White 0x0
TransparentBlack 0x1
Black 0x2

nn::gfx::MipMapFilter (Unofficial)

Name (Unofficial) Value Description
None 0x0
Nearest 0x1
Linear 0x2

nn::gfx::MagFilter (Unofficial)

Name (Unofficial) Value Description
Invalid 0x0
Nearest 0x1
Linear 0x2

nn::gfx::MinFilter (Unofficial)

Name (Unofficial) Value Description
Invalid 0x0
Nearest 0x1
Linear 0x2

nn::gfx::ReductionFilter (Unofficial)

Name (Unofficial) Value Description
Average 0x0
Min 0x1
Max 0x2

nn::gfx::SamplerInfo

Offset Size Type Description
0x0 0x1 u8 Wrap Mode U (nn::gfx::TextureAddressMode)
0x1 0x1 u8 Wrap Mode V (nn::gfx::TextureAddressMode)
0x2 0x1 u8 Wrap Mode W (nn::gfx::TextureAddressMode)
0x3 0x1 u8 CompareOp (nn::gfx::ComparisonFunction)
0x4 0x1 u8 Border color (nn::gfx::BorderColor)
0x5 0x1 u8 Max anisotropy
0x6:0 2 bit u16 MipMap filter (nn::gfx::MipMapFilter)
0x6:2 2 bit u16 Mag filter (nn::gfx::MagFilter)
0x6:4 2 bit u16 Min filter (nn::gfx::MinFilter)
0x6:6 1 bit u16 Enable anisotropy
0x6:7 1 bit u16 Enable CompareOp
0x6:8 2 bit u16 Reduction filter (nn::gfx::ReductionFilter)
0x6:a 6 bit u16 Reserved
0x8 0x4 Float Lod clamp min
0xc 0x4 Float Lod clamp max
0x10 0x4 Float Lod bias
0x14 0x4 u32 Reserved
0x18 0x4 u32 Reserved
0x1c 0x4 u32 Reserved

Gfx Embed File

Offset Size Type Description
0x0 0x8 void * Offset to file
0x8 0x4 u32 Size of file
0xc 0x4 u32 ???

Gfx User Data Type

Name (Unofficial) Value Description
S32 0x0
Float 0x1
Strin 0x2
Byte 0x3 Used for arbitrary binary data (other files)

Gfx User Data

Offset Size Type Description
0x0 0x8 cosnt char * User data name
0x8 0x8 void * User data (can be nullptr)
0x10 0x4 s32 User data entries
0x14 0x1 u8 User Data Type
0x15 0x2b u8[0x2b] Reserved