
#pragma once

enum GX2SurfaceDim {
	GX2_SURFACE_DIM_TEXTURE_1D,
	GX2_SURFACE_DIM_TEXTURE_2D,
	GX2_SURFACE_DIM_TEXTURE_3D,
	GX2_SURFACE_DIM_TEXTURE_CUBE,
	GX2_SURFACE_DIM_TEXTURE_1D_ARRAY,
	GX2_SURFACE_DIM_TEXTURE_2D_ARRAY,
	GX2_SURFACE_DIM_TEXTURE_2D_MSAA,
	GX2_SURFACE_DIM_TEXTURE_2D_MSAA_ARRAY
};

enum GX2AAMode {
	GX2_AA_MODE_1X,
	GX2_AA_MODE_2X,
	GX2_AA_MODE_4X,
	GX2_AA_MODE_8X
};

enum GX2TileMode {
	GX2_TILE_MODE_DEFAULT,
	GX2_TILE_MODE_LINEAR_ALIGNED,
	GX2_TILE_MODE_TILED_1D_THIN1,
	GX2_TILE_MODE_TILED_1D_THICK,
	GX2_TILE_MODE_TILED_2D_THIN1,
	GX2_TILE_MODE_TILED_2D_THIN2,
	GX2_TILE_MODE_TILED_2D_THIN4,
	GX2_TILE_MODE_TILED_2D_THICK,
	GX2_TILE_MODE_TILED_2B_THIN1,
	GX2_TILE_MODE_TILED_2B_THIN2,
	GX2_TILE_MODE_TILED_2B_THIN4,
	GX2_TILE_MODE_TILED_2B_THICK,
	GX2_TILE_MODE_TILED_3D_THIN1,
	GX2_TILE_MODE_TILED_3D_THICK,
	GX2_TILE_MODE_TILED_3B_THIN1,
	GX2_TILE_MODE_TILED_3B_THICK,
	GX2_TILE_MODE_LINEAR_SPECIAL
};

enum GX2SurfaceUse {
	GX2_SURFACE_USE_NONE = 0,
	GX2_SURFACE_USE_TEXTURE = 1,
	GX2_SURFACE_USE_COLOR_BUFFER = 2,
	GX2_SURFACE_USE_DEPTH_BUFFER = 4,
	GX2_SURFACE_USE_SCAN_BUFFER = 8
};

enum GX2SurfaceFormat {
	GX2_SURFACE_FORMAT_INVALID = 0,
	
	GX2_SURFACE_FORMAT_UNORM_R4_G4 = 0x2,
	GX2_SURFACE_FORMAT_UNORM_R4_G4_B4_A4 = 0xB,
	GX2_SURFACE_FORMAT_UNORM_R8 = 0x1,
	GX2_SURFACE_FORMAT_UNORM_R8_G8 = 0x7,
	GX2_SURFACE_FORMAT_UNORM_R8_G8_B8_A8 = 0x1A,
	GX2_SURFACE_FORMAT_UNORM_R16 = 0x5,
	GX2_SURFACE_FORMAT_UNORM_R16_G16 = 0xF,
	GX2_SURFACE_FORMAT_UNORM_R16_G16_B16_A16 = 0x1F,
	GX2_SURFACE_FORMAT_UNORM_R5_G6_B5 = 0x8,
	GX2_SURFACE_FORMAT_UNORM_R5_G5_B5_A1 = 0xA,
	GX2_SURFACE_FORMAT_UNORM_A1_B5_G5_R5 = 0xC,
	GX2_SURFACE_FORMAT_UNORM_R24_X8 = 0x11,
	GX2_SURFACE_FORMAT_UNORM_A2_B10_G10_R10 = 0x1B,
	GX2_SURFACE_FORMAT_UNORM_R10_G10_B10_A2 = 0x19,
	GX2_SURFACE_FORMAT_UNORM_BC1 = 0x31,
	GX2_SURFACE_FORMAT_UNORM_BC2 = 0x32,
	GX2_SURFACE_FORMAT_UNORM_BC3 = 0x33,
	GX2_SURFACE_FORMAT_UNORM_BC4 = 0x34,
	GX2_SURFACE_FORMAT_UNORM_BC5 = 0x35,
	GX2_SURFACE_FORMAT_UNORM_NV12 = 0x81,
	
	GX2_SURFACE_FORMAT_UINT_R8 = 0x101,
	GX2_SURFACE_FORMAT_UINT_R8_G8 = 0x107,
	GX2_SURFACE_FORMAT_UINT_R8_G8_B8_A8 = 0x11A,
	GX2_SURFACE_FORMAT_UINT_R16 = 0x105,
	GX2_SURFACE_FORMAT_UINT_R16_G16 = 0x10F,
	GX2_SURFACE_FORMAT_UINT_R16_G16_B16_A16 = 0x11F,
	GX2_SURFACE_FORMAT_UINT_R32 = 0x10D,
	GX2_SURFACE_FORMAT_UINT_R32_G32 = 0x11D,
	GX2_SURFACE_FORMAT_UINT_R32_G32_B32_A32 = 0x122,
	GX2_SURFACE_FORMAT_UINT_A2_B10_G10_R10 = 0x11B,
	GX2_SURFACE_FORMAT_UINT_R10_G10_B10_A2 = 0x119,
	GX2_SURFACE_FORMAT_UINT_X24_G8 = 0x111,
	GX2_SURFACE_FORMAT_UINT_G8_X24 = 0x11C,
	
	GX2_SURFACE_FORMAT_SNORM_R8 = 0x201,
	GX2_SURFACE_FORMAT_SNORM_R8_G8 = 0x207,
	GX2_SURFACE_FORMAT_SNORM_R8_G8_B8_A8 = 0x21A,
	GX2_SURFACE_FORMAT_SNORM_R16 = 0x205,
	GX2_SURFACE_FORMAT_SNORM_R16_G16 = 0x20F,
	GX2_SURFACE_FORMAT_SNORM_R16_G16_B16_A16 = 0x21F,
	GX2_SURFACE_FORMAT_SNORM_R10_G10_B10_A2 = 0x219,
	GX2_SURFACE_FORMAT_SNORM_BC4 = 0x234,
	GX2_SURFACE_FORMAT_SNORM_BC5 = 0x235,
	
	GX2_SURFACE_FORMAT_SINT_R8 = 0x301,
	GX2_SURFACE_FORMAT_SINT_R8_G8 = 0x307,
	GX2_SURFACE_FORMAT_SINT_R8_G8_B8_A8 = 0x31A,
	GX2_SURFACE_FORMAT_SINT_R16 = 0x305,
	GX2_SURFACE_FORMAT_SINT_R16_G16 = 0x30F,
	GX2_SURFACE_FORMAT_SINT_R16_G16_B16_A16 = 0x31F,
	GX2_SURFACE_FORMAT_SINT_R32 = 0x30D,
	GX2_SURFACE_FORMAT_SINT_R32_G32 = 0x31D,
	GX2_SURFACE_FORMAT_SINT_R32_G32_B32_A32 = 0x322,
	GX2_SURFACE_FORMAT_SINT_R10_G10_B10_A2 = 0x319,
	
	GX2_SURFACE_FORMAT_SRGB_R8_G8_B8_A8 = 0x41A,
	GX2_SURFACE_FORMAT_SRGB_BC1 = 0x431,
	GX2_SURFACE_FORMAT_SRGB_BC2 = 0x432,
	GX2_SURFACE_FORMAT_SRGB_BC3 = 0x433,
	
	GX2_SURFACE_FORMAT_FLOAT_R32 = 0x80E,
	GX2_SURFACE_FORMAT_FLOAT_R32_G32 = 0x81E,
	GX2_SURFACE_FORMAT_FLOAT_R32_G32_B32_A32 = 0x823,
	GX2_SURFACE_FORMAT_FLOAT_R16 = 0x806,
	GX2_SURFACE_FORMAT_FLOAT_R16_G16 = 0x810,
	GX2_SURFACE_FORMAT_FLOAT_R16_G16_B16_A16 = 0x820,
	GX2_SURFACE_FORMAT_FLOAT_R11_G11_B10 = 0x816,
	GX2_SURFACE_FORMAT_FLOAT_D24_S8 = 0x811,
	GX2_SURFACE_FORMAT_FLOAT_X8_X24 = 0x81C
};

enum GX2ShaderMode {
	GX2_SHADER_MODE_UNIFORM_REGISTER,
	GX2_SHADER_MODE_UNIFORM_BLOCK,
	GX2_SHADER_MODE_GEOMETRY_SHADER,
	GX2_SHADER_MODE_COMPUTE_SHADER
};

enum GX2ShaderVarType {
	GX2_SHADER_VAR_TYPE_INT,
	GX2_SHADER_VAR_TYPE_FLOAT,
	GX2_SHADER_VAR_TYPE_FLOAT2,
	GX2_SHADER_VAR_TYPE_FLOAT3,
	GX2_SHADER_VAR_TYPE_FLOAT4,
	GX2_SHADER_VAR_TYPE_INT2,
	GX2_SHADER_VAR_TYPE_INT3,
	GX2_SHADER_VAR_TYPE_INT4,
	GX2_SHADER_VAR_TYPE_MATRIX4X4
};

enum GX2SamplerVarType {
	GX2_SAMPLER_VAR_TYPE_SAMPLER_1D,
	GX2_SAMPLER_VAR_TYPE_SAMPLER_2D,
	GX2_SAMPLER_VAR_TYPE_SAMPLER_3D,
	GX2_SAMPLER_VAR_TYPE_SAMPLER_CUBE
};
