mirror of
https://github.com/cemu-project/Cemu.git
synced 2025-07-16 03:38:30 +12:00
"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.
182 lines
No EOL
4.6 KiB
C++
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) |