Cemu/src/Cafe/HW/Latte/Core/LatteConst.h
Exzap 731713de3a OpenGL: Remove "-legacy" flag
"Intel legacy mode" was a special mode to workaround various Intel OpenGL driver limitations during the earlier years of Cemu. It's been unmaintained for years and no longer serves a purpose.

If we ever bring back compatibility with ancient Intel GPUs it should be done in a more structured way than a blunt yes/no flag.
2024-03-14 03:11:04 +01:00

182 lines
No EOL
4.6 KiB
C++

#pragma once
#include "Cafe/HW/Latte/ISA/LatteReg.h"
// todo - this file contains legacy C-style defines, modernize and merge into LatteReg.h
// GPU7/Latte hardware info
#define LATTE_NUM_GPR 128
#define LATTE_NUM_STREAMOUT_BUFFER 4
#define LATTE_NUM_COLOR_TARGET 8
#define LATTE_NUM_MAX_TEX_UNITS 18 // number of available texture units per shader stage (this might be higher than 18? BotW is the only game which uses more than 16?)
#define LATTE_NUM_MAX_UNIFORM_BUFFERS 16 // number of supported uniform buffer binding locations
#define LATTE_VS_ATTRIBUTE_LIMIT 32 // todo: verify
#define LATTE_NUM_MAX_ATTRIBUTE_LOCATIONS 256 // should this be 128 since there are only 128 GPRs?
#define LATTE_MAX_VERTEX_BUFFERS 16
// Cemu-specific constants
#define LATTE_CEMU_PS_TEX_UNIT_BASE 0
#define LATTE_CEMU_VS_TEX_UNIT_BASE 32
#define LATTE_CEMU_GS_TEX_UNIT_BASE 64
// vertex formats
#define FMT_INVALID 0x00
#define FMT_8 0x01
#define FMT_4_4 0x02
#define FMT_3_3_2 0x03
#define FMT_16 0x05
#define FMT_16_FLOAT 0x06
#define FMT_8_8 0x07
#define FMT_5_6_5 0x08
#define FMT_6_5_5 0x09
#define FMT_1_5_5_5 0x0A
#define FMT_4_4_4_4 0x0B
#define FMT_5_5_5_1 0x0C
#define FMT_32 0x0D
#define FMT_32_FLOAT 0x0E
#define FMT_16_16 0x0F
#define FMT_16_16_FLOAT 0x10
#define FMT_8_24 0x11
#define FMT_8_24_FLOAT 0x12
#define FMT_24_8 0x13
#define FMT_24_8_FLOAT 0x14
#define FMT_10_11_11 0x15
#define FMT_10_11_11_FLOAT 0x16
#define FMT_11_11_10 0x17
#define FMT_11_11_10_FLOAT 0x18
#define FMT_2_10_10_10 0x19
#define FMT_8_8_8_8 0x1A
#define FMT_10_10_10_2 0x1B
#define FMT_X24_8_32_FLOAT 0x1C
#define FMT_32_32 0x1D
#define FMT_32_32_FLOAT 0x1E
#define FMT_16_16_16_16 0x1F
#define FMT_16_16_16_16_FLOAT 0x20
#define FMT_32_32_32_32 0x22
#define FMT_32_32_32_32_FLOAT 0x23
#define FMT_1 0x25
#define FMT_GB_GR 0x27
#define FMT_BG_RG 0x28
#define FMT_32_AS_8 0x29
#define FMT_32_AS_8_8 0x2A
#define FMT_5_9_9_9_SHAREDEXP 0x2B
#define FMT_8_8_8 0x2C
#define FMT_16_16_16 0x2D
#define FMT_16_16_16_FLOAT 0x2E
#define FMT_32_32_32 0x2F
#define FMT_32_32_32_FLOAT 0x30
#define LATTE_NFA_2 2
#define LATTE_NFA_3 3
#define LATTE_VTX_UNSIGNED 0
#define LATTE_VTX_SIGNED 1
// OpenGL constants
#define GLVENDOR_UNKNOWN (0)
#define GLVENDOR_AMD (1) // AMD/ATI
#define GLVENDOR_NVIDIA (2)
#define GLVENDOR_INTEL (5)
#define GLVENDOR_APPLE (6)
// decompiler
#define LATTE_DECOMPILER_DTYPE_UNDETERMINED (0) // data type is unknown
#define LATTE_DECOMPILER_DTYPE_UNSIGNED_INT (1) // 32bit unsigned integer
#define LATTE_DECOMPILER_DTYPE_SIGNED_INT (2) // 32bit signed integer
#define LATTE_DECOMPILER_DTYPE_FLOAT (3) // 32bit IEEE float
#define LATTE_DECOMPILER_UNIFORM_MODE_NONE (0) // no uniform access at all
#define LATTE_DECOMPILER_UNIFORM_MODE_REMAPPED (1) // use remapped uniform array
#define LATTE_DECOMPILER_UNIFORM_MODE_FULL_CFILE (2) // load full cfile (uniform registers)
#define LATTE_DECOMPILER_UNIFORM_MODE_FULL_CBANK (3) // load full uniform banks (uniform buffers)
#define LATTE_ANALYZER_IMPORT_INDEX_PARAM_MAX (0xFF)
#define LATTE_ANALYZER_IMPORT_INDEX_SPIPOSITION (0x40000000) // gl_FragCoord
#define LATTE_DECOMPILER_SAMPLER_NONE (0xFF)
using LattePrimitiveMode = Latte::LATTE_VGT_PRIMITIVE_TYPE::E_PRIMITIVE_TYPE;
using LatteIndexType = Latte::LATTE_VGT_DMA_INDEX_TYPE::E_INDEX_TYPE;
namespace LatteConst
{
enum class ShaderType : uint32
{
Reserved = 0,
// shaders for drawing
FirstRender = 1,
Vertex = 1,
Pixel = 2,
Geometry = 3,
LastRender = 3,
// compute shader
Compute = 4,
TotalCount = 5
};
enum class VertexFetchNFA
{
NUM_FORMAT_NORMALIZED,
NUM_FORMAT_INT,
NUM_FORMAT_SCALED,
};
enum class VertexFetchEndianMode
{
SWAP_NONE = 0, // little endian
SWAP_U16 = 1, // U16 big endian
SWAP_U32 = 2, // U32 big endian
// helper for GX2 API
SWAP_DEFAULT = 3,
};
enum class VertexFetchFormat : uint32
{
// some formats are for texture fetches only
VTX_FMT_INVALID = 0x00,
VTX_FMT_8 = 0x01,
VTX_FMT_8_8 = 0x07,
VTX_FMT_8_8_8 = 0x2C,
VTX_FMT_8_8_8_8 = 0x1A,
VTX_FMT_32_32 = 0x1D,
VTX_FMT_32_32_FLOAT = 0x1E,
VTX_FMT_16_16_16 = 0x2D,
VTX_FMT_16_16_16_FLOAT = 0x2E,
VTX_FMT_32_32_32 = 0x2F,
VTX_FMT_32_32_32_FLOAT = 0x30
};
enum class VertexFetchDstSel : uint8
{
X = 0,
Y = 1,
Z = 2,
W = 3,
CONST_0F = 4,
CONST_1F = 5,
UNUSED = 6,
MASKED = 7
};
// used in VTX_WORD0
enum VertexFetchType2 : uint8
{
VERTEX_DATA = 0,
INSTANCE_DATA = 1,
NO_INDEX_OFFSET_DATA = 2,
};
};
#define LATTE_MAX_REGISTER (0x10000)