From 5993c88897ee7648d74640ddbee9337e1b2ac5cd Mon Sep 17 00:00:00 2001 From: Jan Laupetin Date: Sat, 14 Mar 2026 20:25:41 +0100 Subject: [PATCH 1/3] feat: dump iw3 technique sets --- src/Common/Game/IW3/IW3.h | 5 + src/Common/Game/IW3/IW3_Assets.h | 450 ++++----- .../Game/IW3/Techset/TechsetConstantsIW3.h | 858 ++++++++++++++++++ src/ObjCommon/Game/IW3/TechsetConstantsIW3.h | 102 --- src/ObjWriting/Game/IW3/ObjWriterIW3.cpp | 9 +- .../Techset/PixelShaderDumper.cpp.template | 5 +- .../Techset/TechsetDumper.cpp.template | 7 +- .../Techset/TechsetDumper.h.template | 2 +- .../Techset/VertexShaderDumper.cpp.template | 5 +- 9 files changed, 1072 insertions(+), 371 deletions(-) create mode 100644 src/ObjCommon/Game/IW3/Techset/TechsetConstantsIW3.h delete mode 100644 src/ObjCommon/Game/IW3/TechsetConstantsIW3.h diff --git a/src/Common/Game/IW3/IW3.h b/src/Common/Game/IW3/IW3.h index bfc5c489..138b60f0 100644 --- a/src/Common/Game/IW3/IW3.h +++ b/src/Common/Game/IW3/IW3.h @@ -187,6 +187,11 @@ namespace IW3 using AssetImpactFx = Asset; using AssetRawFile = Asset; using AssetStringTable = Asset; + + using SubAssetTechnique = SubAsset; + using SubAssetVertexDecl = SubAsset; + using SubAssetVertexShader = SubAsset; + using SubAssetPixelShader = SubAsset; } // namespace IW3 DEFINE_ASSET_NAME_ACCESSOR(IW3::AssetXModelPieces, name); diff --git a/src/Common/Game/IW3/IW3_Assets.h b/src/Common/Game/IW3/IW3_Assets.h index 5ddfd3e4..6415e918 100644 --- a/src/Common/Game/IW3/IW3_Assets.h +++ b/src/Common/Game/IW3/IW3_Assets.h @@ -967,8 +967,8 @@ namespace IW3 struct MaterialArgumentCodeConst { uint16_t index; - char firstRow; - char rowCount; + unsigned char firstRow; + unsigned char rowCount; }; union MaterialArgumentDef @@ -996,265 +996,189 @@ namespace IW3 MTL_ARG_MATERIAL_PIXEL_CONST = 0x6, MTL_ARG_LITERAL_PIXEL_CONST = 0x7, - MLT_ARG_COUNT + MTL_ARG_COUNT }; - enum MaterialConstantSource + enum MaterialType + { + MTL_TYPE_DEFAULT = 0x0, + MTL_TYPE_MODEL = 0x1, // m_ + MTL_TYPE_MODEL_VERTCOL = 0x2, // mc_ + MTL_TYPE_WORLD = 0x3, // w_ + MTL_TYPE_WORLD_VERTCOL = 0x4, // wc_ + + MTL_TYPE_COUNT, + }; + + struct MaterialTypeInfo + { + const char* materialPrefix; + const char* techniqueSetPrefix; + }; + + enum ShaderCodeConstants { CONST_SRC_CODE_MAYBE_DIRTY_PS_BEGIN = 0x0, + CONST_SRC_CODE_LIGHT_POSITION = 0x0, CONST_SRC_CODE_LIGHT_DIFFUSE = 0x1, - CONST_SRC_CODE_LIGHT_SPOTDIR = 0x2, - CONST_SRC_CODE_LIGHT_SPOTFACTORS = 0x3, - CONST_SRC_CODE_LIGHT_ATTENUATION = 0x4, - CONST_SRC_CODE_LIGHT_FALLOFF_A = 0x5, - CONST_SRC_CODE_LIGHT_FALLOFF_B = 0x6, - CONST_SRC_CODE_LIGHT_SPOT_MATRIX0 = 0x7, - CONST_SRC_CODE_LIGHT_SPOT_MATRIX1 = 0x8, - CONST_SRC_CODE_LIGHT_SPOT_MATRIX2 = 0x9, - CONST_SRC_CODE_LIGHT_SPOT_MATRIX3 = 0xA, - CONST_SRC_CODE_LIGHT_SPOT_AABB = 0xB, - CONST_SRC_CODE_LIGHT_CONE_CONTROL1 = 0xC, - CONST_SRC_CODE_LIGHT_CONE_CONTROL2 = 0xD, - CONST_SRC_CODE_LIGHT_SPOT_COOKIE_SLIDE_CONTROL = 0xE, - CONST_SRC_CODE_SHADOW_PARMS = 0xF, - CONST_SRC_CODE_SHADOWMAP_POLYGON_OFFSET = 0x10, - CONST_SRC_CODE_RENDER_TARGET_SIZE = 0x11, - CONST_SRC_CODE_UPSCALED_TARGET_SIZE = 0x12, - CONST_SRC_CODE_DOF_EQUATION_VIEWMODEL_AND_FAR_BLUR = 0x13, - CONST_SRC_CODE_DOF_EQUATION_SCENE = 0x14, - CONST_SRC_CODE_DOF_LERP_SCALE = 0x15, - CONST_SRC_CODE_DOF_LERP_BIAS = 0x16, - CONST_SRC_CODE_DOF_ROW_DELTA = 0x17, - CONST_SRC_CODE_PARTICLE_CLOUD_COLOR = 0x18, - CONST_SRC_CODE_GAMETIME = 0x19, - CONST_SRC_CODE_MAYBE_DIRTY_PS_END = 0x1A, - CONST_SRC_CODE_ALWAYS_DIRTY_PS_BEGIN = 0x1A, - CONST_SRC_CODE_FILTER_TAP_0 = 0x1A, - CONST_SRC_CODE_FILTER_TAP_1 = 0x1B, - CONST_SRC_CODE_FILTER_TAP_2 = 0x1C, - CONST_SRC_CODE_FILTER_TAP_3 = 0x1D, - CONST_SRC_CODE_FILTER_TAP_4 = 0x1E, - CONST_SRC_CODE_FILTER_TAP_5 = 0x1F, - CONST_SRC_CODE_FILTER_TAP_6 = 0x20, - CONST_SRC_CODE_FILTER_TAP_7 = 0x21, - CONST_SRC_CODE_COLOR_MATRIX_R = 0x22, - CONST_SRC_CODE_COLOR_MATRIX_G = 0x23, - CONST_SRC_CODE_COLOR_MATRIX_B = 0x24, - CONST_SRC_CODE_ALWAYS_DIRTY_PS_END = 0x25, - CONST_SRC_CODE_NEVER_DIRTY_PS_BEGIN = 0x25, - CONST_SRC_CODE_SHADOWMAP_SWITCH_PARTITION = 0x25, - CONST_SRC_CODE_SUNSHADOWMAP_PIXEL_SIZE = 0x26, - CONST_SRC_CODE_SHADOWMAP_SCALE = 0x27, - CONST_SRC_CODE_ZNEAR = 0x28, - CONST_SRC_CODE_SUN_POSITION = 0x29, - CONST_SRC_CODE_SUN_DIFFUSE = 0x2A, - CONST_SRC_CODE_LIGHTING_LOOKUP_SCALE = 0x2B, - CONST_SRC_CODE_DEBUG_BUMPMAP = 0x2C, - CONST_SRC_CODE_DEBUG_PERFORMANCE = 0x2D, - CONST_SRC_CODE_MATERIAL_COLOR = 0x2E, - CONST_SRC_CODE_FOG = 0x2F, - CONST_SRC_CODE_FOG2 = 0x30, - CONST_SRC_CODE_FOG_COLOR = 0x31, - CONST_SRC_CODE_SUN_FOG = 0x32, - CONST_SRC_CODE_SUN_FOG_DIR = 0x33, - CONST_SRC_CODE_SUN_FOG_COLOR = 0x34, - CONST_SRC_CODE_GLOW_SETUP = 0x35, - CONST_SRC_CODE_GLOW_APPLY = 0x36, - CONST_SRC_CODE_COLOR_BIAS = 0x37, - CONST_SRC_CODE_COLOR_TINT_BASE = 0x38, - CONST_SRC_CODE_COLOR_TINT_DELTA = 0x39, - CONST_SRC_CODE_OUTDOOR_FEATHER_PARMS = 0x3A, - CONST_SRC_CODE_SKY_TRANSITION = 0x3B, - CONST_SRC_CODE_SPOT_SHADOWMAP_PIXEL_ADJUST = 0x3C, - CONST_SRC_CODE_DLIGHT_SPOT_SHADOWMAP_PIXEL_ADJUST = 0x3D, - CONST_SRC_CODE_CLIP_SPACE_LOOKUP_SCALE = 0x3E, - CONST_SRC_CODE_CLIP_SPACE_LOOKUP_OFFSET = 0x3F, - CONST_SRC_CODE_PARTICLE_CLOUD_MATRIX = 0x40, - CONST_SRC_CODE_PARTICLE_CLOUD_VEL_WORLD = 0x41, - CONST_SRC_CODE_DEPTH_FROM_CLIP = 0x42, - CONST_SRC_CODE_CODE_MESH_ARG_0 = 0x43, - CONST_SRC_CODE_CODE_MESH_ARG_1 = 0x44, - CONST_SRC_CODE_CODE_MESH_ARG_LAST = 0x44, - CONST_SRC_CODE_GRID_LIGHTING_COORDS_AND_VIS = 0x45, - CONST_SRC_CODE_GRID_LIGHTING_SH_0 = 0x46, - CONST_SRC_CODE_GRID_LIGHTING_SH_1 = 0x47, - CONST_SRC_CODE_GRID_LIGHTING_SH_2 = 0x48, - CONST_SRC_CODE_REFLECTION_LIGHTING_SH_0 = 0x49, - CONST_SRC_CODE_REFLECTION_LIGHTING_SH_1 = 0x4A, - CONST_SRC_CODE_REFLECTION_LIGHTING_SH_2 = 0x4B, - CONST_SRC_CODE_WIND_DIRECTION = 0x4C, - CONST_SRC_CODE_MOTIONBLUR_DIRECTION_AND_MAGNITUDE = 0x4D, - CONST_SRC_CODE_COMPOSITE_FX_DISTORTION = 0x4E, - CONST_SRC_CODE_GLOW_BLOOM_SCALE = 0x4F, - CONST_SRC_CODE_COMPOSITE_FX_OVERLAY_TEXCOORD = 0x50, - CONST_SRC_CODE_COLOR_BIAS1 = 0x51, - CONST_SRC_CODE_COLOR_TINT_BASE1 = 0x52, - CONST_SRC_CODE_COLOR_TINT_DELTA1 = 0x53, - CONST_SRC_CODE_POSTFX_FADE_EFFECT = 0x54, - CONST_SRC_CODE_VIEWPORT_DIMENSIONS = 0x55, - CONST_SRC_CODE_FRAMEBUFFER_READ = 0x56, - CONST_SRC_CODE_RESIZE_PARAMS1 = 0x57, - CONST_SRC_CODE_RESIZE_PARAMS2 = 0x58, - CONST_SRC_CODE_RESIZE_PARAMS3 = 0x59, - CONST_SRC_CODE_VARIANT_WIND_SPRING_0 = 0x5A, - CONST_SRC_CODE_VARIANT_WIND_SPRING_1 = 0x5B, - CONST_SRC_CODE_VARIANT_WIND_SPRING_2 = 0x5C, - CONST_SRC_CODE_VARIANT_WIND_SPRING_3 = 0x5D, - CONST_SRC_CODE_VARIANT_WIND_SPRING_4 = 0x5E, - CONST_SRC_CODE_VARIANT_WIND_SPRING_5 = 0x5F, - CONST_SRC_CODE_VARIANT_WIND_SPRING_6 = 0x60, - CONST_SRC_CODE_VARIANT_WIND_SPRING_7 = 0x61, - CONST_SRC_CODE_VARIANT_WIND_SPRING_8 = 0x62, - CONST_SRC_CODE_VARIANT_WIND_SPRING_9 = 0x63, - CONST_SRC_CODE_VARIANT_WIND_SPRING_10 = 0x64, - CONST_SRC_CODE_VARIANT_WIND_SPRING_11 = 0x65, - CONST_SRC_CODE_VARIANT_WIND_SPRING_12 = 0x66, - CONST_SRC_CODE_VARIANT_WIND_SPRING_13 = 0x67, - CONST_SRC_CODE_VARIANT_WIND_SPRING_14 = 0x68, - CONST_SRC_CODE_VARIANT_WIND_SPRING_15 = 0x69, - CONST_SRC_CODE_CHARACTER_CHARRED_AMOUNT = 0x6A, - CONST_SRC_CODE_POSTFX_CONTROL0 = 0x6B, - CONST_SRC_CODE_POSTFX_CONTROL1 = 0x6C, - CONST_SRC_CODE_POSTFX_CONTROL2 = 0x6D, - CONST_SRC_CODE_POSTFX_CONTROL3 = 0x6E, - CONST_SRC_CODE_POSTFX_CONTROL4 = 0x6F, - CONST_SRC_CODE_POSTFX_CONTROL5 = 0x70, - CONST_SRC_CODE_POSTFX_CONTROL6 = 0x71, - CONST_SRC_CODE_POSTFX_CONTROL7 = 0x72, - CONST_SRC_CODE_POSTFX_CONTROL8 = 0x73, - CONST_SRC_CODE_POSTFX_CONTROL9 = 0x74, - CONST_SRC_CODE_POSTFX_CONTROLA = 0x75, - CONST_SRC_CODE_POSTFX_CONTROLB = 0x76, - CONST_SRC_CODE_POSTFX_CONTROLC = 0x77, - CONST_SRC_CODE_POSTFX_CONTROLD = 0x78, - CONST_SRC_CODE_POSTFX_CONTROLE = 0x79, - CONST_SRC_CODE_POSTFX_CONTROLF = 0x7A, - CONST_SRC_CODE_HDRCONTROL_0 = 0x7B, - CONST_SRC_CODE_HDRCONTROL_1 = 0x7C, - CONST_SRC_CODE_GLIGHT_POSXS = 0x7D, - CONST_SRC_CODE_GLIGHT_POSYS = 0x7E, - CONST_SRC_CODE_GLIGHT_POSZS = 0x7F, - CONST_SRC_CODE_GLIGHT_FALLOFFS = 0x80, - CONST_SRC_CODE_GLIGHT_REDS = 0x81, - CONST_SRC_CODE_GLIGHT_GREENS = 0x82, - CONST_SRC_CODE_GLIGHT_BLUES = 0x83, - CONST_SRC_CODE_DLIGHT_POSITION = 0x84, - CONST_SRC_CODE_DLIGHT_DIFFUSE = 0x85, - CONST_SRC_CODE_DLIGHT_ATTENUATION = 0x86, - CONST_SRC_CODE_DLIGHT_FALLOFF = 0x87, - CONST_SRC_CODE_DLIGHT_SPOT_MATRIX_0 = 0x88, - CONST_SRC_CODE_DLIGHT_SPOT_MATRIX_1 = 0x89, - CONST_SRC_CODE_DLIGHT_SPOT_MATRIX_2 = 0x8A, - CONST_SRC_CODE_DLIGHT_SPOT_MATRIX_3 = 0x8B, - CONST_SRC_CODE_DLIGHT_SPOT_DIR = 0x8C, - CONST_SRC_CODE_DLIGHT_SPOT_FACTORS = 0x8D, - CONST_SRC_CODE_DLIGHT_SHADOW_LOOKUP_MATRIX_0 = 0x8E, - CONST_SRC_CODE_DLIGHT_SHADOW_LOOKUP_MATRIX_1 = 0x8F, - CONST_SRC_CODE_DLIGHT_SHADOW_LOOKUP_MATRIX_2 = 0x90, - CONST_SRC_CODE_DLIGHT_SHADOW_LOOKUP_MATRIX_3 = 0x91, - CONST_SRC_CODE_CLOUD_LAYER_CONTROL0 = 0x92, - CONST_SRC_CODE_CLOUD_LAYER_CONTROL1 = 0x93, - CONST_SRC_CODE_CLOUD_LAYER_CONTROL2 = 0x94, - CONST_SRC_CODE_CLOUD_LAYER_CONTROL3 = 0x95, - CONST_SRC_CODE_CLOUD_LAYER_CONTROL4 = 0x96, - CONST_SRC_CODE_HERO_LIGHTING_R = 0x97, - CONST_SRC_CODE_HERO_LIGHTING_G = 0x98, - CONST_SRC_CODE_HERO_LIGHTING_B = 0x99, - CONST_SRC_CODE_LIGHT_HERO_SCALE = 0x9A, - CONST_SRC_CODE_CINEMATIC_BLUR_BOX = 0x9B, - CONST_SRC_CODE_CINEMATIC_BLUR_BOX2 = 0x9C, - CONST_SRC_CODE_ADSZSCALE = 0x9D, - CONST_SRC_CODE_UI3D_UV_SETUP_0 = 0x9E, - CONST_SRC_CODE_UI3D_UV_SETUP_1 = 0x9F, - CONST_SRC_CODE_UI3D_UV_SETUP_2 = 0xA0, - CONST_SRC_CODE_UI3D_UV_SETUP_3 = 0xA1, - CONST_SRC_CODE_UI3D_UV_SETUP_4 = 0xA2, - CONST_SRC_CODE_UI3D_UV_SETUP_5 = 0xA3, - CONST_SRC_CODE_CHARACTER_DISSOLVE_COLOR = 0xA4, - CONST_SRC_CODE_CAMERA_LOOK = 0xA5, - CONST_SRC_CODE_CAMERA_UP = 0xA6, - CONST_SRC_CODE_CAMERA_SIDE = 0xA7, - CONST_SRC_CODE_RIMINTENSITY = 0xA8, - CONST_SRC_CODE_GENERIC_PARAM0 = 0xA9, - CONST_SRC_CODE_GENERIC_PARAM1 = 0xAA, - CONST_SRC_CODE_GENERIC_PARAM2 = 0xAB, - CONST_SRC_CODE_GENERIC_PARAM3 = 0xAC, - CONST_SRC_CODE_GENERIC_PARAM4 = 0xAD, - CONST_SRC_CODE_GENERIC_PARAM5 = 0xAE, - CONST_SRC_CODE_GENERIC_PARAM6 = 0xAF, - CONST_SRC_CODE_GENERIC_PARAM7 = 0xB0, - CONST_SRC_CODE_GENERIC_EYEOFFSET = 0xB1, - CONST_SRC_CODE_GENERIC_QUADINTENSITY = 0xB2, - CONST_SRC_CODE_WEAPON_PARAM0 = 0xB3, - CONST_SRC_CODE_WEAPON_PARAM1 = 0xB4, - CONST_SRC_CODE_WEAPON_PARAM2 = 0xB5, - CONST_SRC_CODE_WEAPON_PARAM3 = 0xB6, - CONST_SRC_CODE_WEAPON_PARAM4 = 0xB7, - CONST_SRC_CODE_WEAPON_PARAM5 = 0xB8, - CONST_SRC_CODE_WEAPON_PARAM6 = 0xB9, - CONST_SRC_CODE_WEAPON_PARAM7 = 0xBA, - CONST_SRC_CODE_WEAPON_PARAM8 = 0xBB, - CONST_SRC_CODE_WEAPON_PARAM9 = 0xBC, - CONST_SRC_CODE_QRCODE_0 = 0xBD, - CONST_SRC_CODE_QRCODE_1 = 0xBE, - CONST_SRC_CODE_QRCODE_2 = 0xBF, - CONST_SRC_CODE_QRCODE_3 = 0xC0, - CONST_SRC_CODE_QRCODE_4 = 0xC1, - CONST_SRC_CODE_QRCODE_5 = 0xC2, - CONST_SRC_CODE_QRCODE_6 = 0xC3, - CONST_SRC_CODE_QRCODE_7 = 0xC4, - CONST_SRC_CODE_QRCODE_8 = 0xC5, - CONST_SRC_CODE_QRCODE_9 = 0xC6, - CONST_SRC_CODE_QRCODE_10 = 0xC7, - CONST_SRC_CODE_QRCODE_11 = 0xC8, - CONST_SRC_CODE_EYEOFFSET = 0xC9, - CONST_SRC_CODE_SKY_COLOR_MULTIPLIER = 0xCA, - CONST_SRC_CODE_EXTRA_CAM_PARAM = 0xCB, - CONST_SRC_CODE_EMBLEM_LUT_SELECTOR = 0xCC, - CONST_SRC_CODE_DEBUG_COLOR_OVERRIDE = 0xCD, - CONST_SRC_CODE_DEBUG_ALPHA_OVERRIDE = 0xCE, - CONST_SRC_CODE_DEBUG_NORMAL_OVERRIDE = 0xCF, - CONST_SRC_CODE_DEBUG_SPECULAR_OVERRIDE = 0xD0, - CONST_SRC_CODE_DEBUG_GLOSS_OVERRIDE = 0xD1, - CONST_SRC_CODE_DEBUG_OCCLUSION_OVERRIDE = 0xD2, - CONST_SRC_CODE_NEVER_DIRTY_PS_END = 0xD3, - CONST_SRC_CODE_COUNT_FLOAT4 = 0xD3, - CONST_SRC_FIRST_CODE_MATRIX = 0xD3, - CONST_SRC_CODE_WORLD_MATRIX = 0xD3, - CONST_SRC_CODE_INVERSE_WORLD_MATRIX = 0xD4, - CONST_SRC_CODE_TRANSPOSE_WORLD_MATRIX = 0xD5, - CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_MATRIX = 0xD6, - CONST_SRC_CODE_VIEW_MATRIX = 0xD7, - CONST_SRC_CODE_INVERSE_VIEW_MATRIX = 0xD8, - CONST_SRC_CODE_TRANSPOSE_VIEW_MATRIX = 0xD9, - CONST_SRC_CODE_INVERSE_TRANSPOSE_VIEW_MATRIX = 0xDA, - CONST_SRC_CODE_PROJECTION_MATRIX = 0xDB, - CONST_SRC_CODE_INVERSE_PROJECTION_MATRIX = 0xDC, - CONST_SRC_CODE_TRANSPOSE_PROJECTION_MATRIX = 0xDD, - CONST_SRC_CODE_INVERSE_TRANSPOSE_PROJECTION_MATRIX = 0xDE, - CONST_SRC_CODE_WORLD_VIEW_MATRIX = 0xDF, - CONST_SRC_CODE_INVERSE_WORLD_VIEW_MATRIX = 0xE0, - CONST_SRC_CODE_TRANSPOSE_WORLD_VIEW_MATRIX = 0xE1, - CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_VIEW_MATRIX = 0xE2, - CONST_SRC_CODE_VIEW_PROJECTION_MATRIX = 0xE3, - CONST_SRC_CODE_INVERSE_VIEW_PROJECTION_MATRIX = 0xE4, - CONST_SRC_CODE_TRANSPOSE_VIEW_PROJECTION_MATRIX = 0xE5, - CONST_SRC_CODE_INVERSE_TRANSPOSE_VIEW_PROJECTION_MATRIX = 0xE6, - CONST_SRC_CODE_WORLD_VIEW_PROJECTION_MATRIX = 0xE7, - CONST_SRC_CODE_INVERSE_WORLD_VIEW_PROJECTION_MATRIX = 0xE8, - CONST_SRC_CODE_TRANSPOSE_WORLD_VIEW_PROJECTION_MATRIX = 0xE9, - CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_VIEW_PROJECTION_MATRIX = 0xEA, - CONST_SRC_CODE_SHADOW_LOOKUP_MATRIX = 0xEB, - CONST_SRC_CODE_INVERSE_SHADOW_LOOKUP_MATRIX = 0xEC, - CONST_SRC_CODE_TRANSPOSE_SHADOW_LOOKUP_MATRIX = 0xED, - CONST_SRC_CODE_INVERSE_TRANSPOSE_SHADOW_LOOKUP_MATRIX = 0xEE, - CONST_SRC_CODE_WORLD_OUTDOOR_LOOKUP_MATRIX = 0xEF, - CONST_SRC_CODE_INVERSE_WORLD_OUTDOOR_LOOKUP_MATRIX = 0xF0, - CONST_SRC_CODE_TRANSPOSE_WORLD_OUTDOOR_LOOKUP_MATRIX = 0xF1, - CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_OUTDOOR_LOOKUP_MATRIX = 0xF2, - CONST_SRC_TOTAL_COUNT = 0xF3, - CONST_SRC_NONE = 0xF4, + CONST_SRC_CODE_LIGHT_SPECULAR = 0x2, + CONST_SRC_CODE_LIGHT_SPOTDIR = 0x3, + CONST_SRC_CODE_LIGHT_SPOTFACTORS = 0x4, + CONST_SRC_CODE_NEARPLANE_ORG = 0x5, + CONST_SRC_CODE_NEARPLANE_DX = 0x6, + CONST_SRC_CODE_NEARPLANE_DY = 0x7, + CONST_SRC_CODE_SHADOW_PARMS = 0x8, + CONST_SRC_CODE_SHADOWMAP_POLYGON_OFFSET = 0x9, + CONST_SRC_CODE_RENDER_TARGET_SIZE = 0xA, + CONST_SRC_CODE_LIGHT_FALLOFF_PLACEMENT = 0xB, + CONST_SRC_CODE_DOF_EQUATION_VIEWMODEL_AND_FAR_BLUR = 0xC, + CONST_SRC_CODE_DOF_EQUATION_SCENE = 0xD, + CONST_SRC_CODE_DOF_LERP_SCALE = 0xE, + CONST_SRC_CODE_DOF_LERP_BIAS = 0xF, + CONST_SRC_CODE_DOF_ROW_DELTA = 0x10, + CONST_SRC_CODE_PARTICLE_CLOUD_COLOR = 0x11, + CONST_SRC_CODE_GAMETIME = 0x12, + + CONST_SRC_CODE_MAYBE_DIRTY_PS_END = 0x13, + CONST_SRC_CODE_ALWAYS_DIRTY_PS_BEGIN = 0x13, + + CONST_SRC_CODE_PIXEL_COST_FRACS = 0x13, + CONST_SRC_CODE_PIXEL_COST_DECODE = 0x14, + CONST_SRC_CODE_FILTER_TAP_0 = 0x15, + CONST_SRC_CODE_FILTER_TAP_1 = 0x16, + CONST_SRC_CODE_FILTER_TAP_2 = 0x17, + CONST_SRC_CODE_FILTER_TAP_3 = 0x18, + CONST_SRC_CODE_FILTER_TAP_4 = 0x19, + CONST_SRC_CODE_FILTER_TAP_5 = 0x1A, + CONST_SRC_CODE_FILTER_TAP_6 = 0x1B, + CONST_SRC_CODE_FILTER_TAP_7 = 0x1C, + CONST_SRC_CODE_COLOR_MATRIX_R = 0x1D, + CONST_SRC_CODE_COLOR_MATRIX_G = 0x1E, + CONST_SRC_CODE_COLOR_MATRIX_B = 0x1F, + + CONST_SRC_CODE_ALWAYS_DIRTY_PS_END = 0x20, + CONST_SRC_CODE_NEVER_DIRTY_PS_BEGIN = 0x20, + + CONST_SRC_CODE_SHADOWMAP_SWITCH_PARTITION = 0x20, + CONST_SRC_CODE_SHADOWMAP_SCALE = 0x21, + CONST_SRC_CODE_ZNEAR = 0x22, + CONST_SRC_CODE_SUN_POSITION = 0x23, + CONST_SRC_CODE_SUN_DIFFUSE = 0x24, + CONST_SRC_CODE_SUN_SPECULAR = 0x25, + CONST_SRC_CODE_LIGHTING_LOOKUP_SCALE = 0x26, + CONST_SRC_CODE_DEBUG_BUMPMAP = 0x27, + CONST_SRC_CODE_MATERIAL_COLOR = 0x28, + CONST_SRC_CODE_FOG = 0x29, + CONST_SRC_CODE_FOG_COLOR = 0x2A, + CONST_SRC_CODE_GLOW_SETUP = 0x2B, + CONST_SRC_CODE_GLOW_APPLY = 0x2C, + CONST_SRC_CODE_COLOR_BIAS = 0x2D, + CONST_SRC_CODE_COLOR_TINT_BASE = 0x2E, + CONST_SRC_CODE_COLOR_TINT_DELTA = 0x2F, + CONST_SRC_CODE_OUTDOOR_FEATHER_PARMS = 0x30, + CONST_SRC_CODE_ENVMAP_PARMS = 0x31, + CONST_SRC_CODE_SPOT_SHADOWMAP_PIXEL_ADJUST = 0x32, + CONST_SRC_CODE_CLIP_SPACE_LOOKUP_SCALE = 0x33, + CONST_SRC_CODE_CLIP_SPACE_LOOKUP_OFFSET = 0x34, + CONST_SRC_CODE_PARTICLE_CLOUD_MATRIX = 0x35, + CONST_SRC_CODE_DEPTH_FROM_CLIP = 0x36, + CONST_SRC_CODE_CODE_MESH_ARG_0 = 0x37, + CONST_SRC_CODE_CODE_MESH_ARG_1 = 0x38, + + CONST_SRC_CODE_CODE_MESH_ARG_LAST = 0x38, + + CONST_SRC_CODE_BASE_LIGHTING_COORDS = 0x39, + + CONST_SRC_CODE_NEVER_DIRTY_PS_END = 0x3A, + CONST_SRC_CODE_COUNT_FLOAT4 = 0x3A, + CONST_SRC_FIRST_CODE_MATRIX = 0x3A, + + CONST_SRC_CODE_WORLD_MATRIX = 0x3A, + CONST_SRC_CODE_INVERSE_WORLD_MATRIX = 0x3B, + CONST_SRC_CODE_TRANSPOSE_WORLD_MATRIX = 0x3C, + CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_MATRIX = 0x3D, + CONST_SRC_CODE_VIEW_MATRIX = 0x3E, + CONST_SRC_CODE_INVERSE_VIEW_MATRIX = 0x3F, + CONST_SRC_CODE_TRANSPOSE_VIEW_MATRIX = 0x40, + CONST_SRC_CODE_INVERSE_TRANSPOSE_VIEW_MATRIX = 0x41, + CONST_SRC_CODE_PROJECTION_MATRIX = 0x42, + CONST_SRC_CODE_INVERSE_PROJECTION_MATRIX = 0x43, + CONST_SRC_CODE_TRANSPOSE_PROJECTION_MATRIX = 0x44, + CONST_SRC_CODE_INVERSE_TRANSPOSE_PROJECTION_MATRIX = 0x45, + CONST_SRC_CODE_WORLD_VIEW_MATRIX = 0x46, + CONST_SRC_CODE_INVERSE_WORLD_VIEW_MATRIX = 0x47, + CONST_SRC_CODE_TRANSPOSE_WORLD_VIEW_MATRIX = 0x48, + CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_VIEW_MATRIX = 0x49, + CONST_SRC_CODE_VIEW_PROJECTION_MATRIX = 0x4A, + CONST_SRC_CODE_INVERSE_VIEW_PROJECTION_MATRIX = 0x4B, + CONST_SRC_CODE_TRANSPOSE_VIEW_PROJECTION_MATRIX = 0x4C, + CONST_SRC_CODE_INVERSE_TRANSPOSE_VIEW_PROJECTION_MATRIX = 0x4D, + CONST_SRC_CODE_WORLD_VIEW_PROJECTION_MATRIX = 0x4E, + CONST_SRC_CODE_INVERSE_WORLD_VIEW_PROJECTION_MATRIX = 0x4F, + CONST_SRC_CODE_TRANSPOSE_WORLD_VIEW_PROJECTION_MATRIX = 0x50, + CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_VIEW_PROJECTION_MATRIX = 0x51, + CONST_SRC_CODE_SHADOW_LOOKUP_MATRIX = 0x52, + CONST_SRC_CODE_INVERSE_SHADOW_LOOKUP_MATRIX = 0x53, + CONST_SRC_CODE_TRANSPOSE_SHADOW_LOOKUP_MATRIX = 0x54, + CONST_SRC_CODE_INVERSE_TRANSPOSE_SHADOW_LOOKUP_MATRIX = 0x55, + CONST_SRC_CODE_WORLD_OUTDOOR_LOOKUP_MATRIX = 0x56, + CONST_SRC_CODE_INVERSE_WORLD_OUTDOOR_LOOKUP_MATRIX = 0x57, + CONST_SRC_CODE_TRANSPOSE_WORLD_OUTDOOR_LOOKUP_MATRIX = 0x58, + CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_OUTDOOR_LOOKUP_MATRIX = 0x59, + + CONST_SRC_TOTAL_COUNT, + CONST_SRC_NONE + }; + + enum MaterialTextureSource + { + TEXTURE_SRC_CODE_BLACK = 0x0, + TEXTURE_SRC_CODE_WHITE = 0x1, + TEXTURE_SRC_CODE_IDENTITY_NORMAL_MAP = 0x2, + TEXTURE_SRC_CODE_MODEL_LIGHTING = 0x3, + TEXTURE_SRC_CODE_LIGHTMAP_PRIMARY = 0x4, + TEXTURE_SRC_CODE_LIGHTMAP_SECONDARY = 0x5, + TEXTURE_SRC_CODE_SHADOWCOOKIE = 0x6, + TEXTURE_SRC_CODE_SHADOWMAP_SUN = 0x7, + TEXTURE_SRC_CODE_SHADOWMAP_SPOT = 0x8, + TEXTURE_SRC_CODE_FEEDBACK = 0x9, + TEXTURE_SRC_CODE_RESOLVED_POST_SUN = 0xA, + TEXTURE_SRC_CODE_RESOLVED_SCENE = 0xB, + TEXTURE_SRC_CODE_POST_EFFECT_0 = 0xC, + TEXTURE_SRC_CODE_POST_EFFECT_1 = 0xD, + TEXTURE_SRC_CODE_SKY = 0xE, + TEXTURE_SRC_CODE_LIGHT_ATTENUATION = 0xF, + TEXTURE_SRC_CODE_DYNAMIC_SHADOWS = 0x10, + TEXTURE_SRC_CODE_OUTDOOR = 0x11, + TEXTURE_SRC_CODE_FLOATZ = 0x12, + TEXTURE_SRC_CODE_PROCESSED_FLOATZ = 0x13, + TEXTURE_SRC_CODE_RAW_FLOATZ = 0x14, + TEXTURE_SRC_CODE_CASE_TEXTURE = 0x15, + TEXTURE_SRC_CODE_CINEMATIC_Y = 0x16, + TEXTURE_SRC_CODE_CINEMATIC_CR = 0x17, + TEXTURE_SRC_CODE_CINEMATIC_CB = 0x18, + TEXTURE_SRC_CODE_CINEMATIC_A = 0x19, + TEXTURE_SRC_CODE_REFLECTION_PROBE = 0x1A, + + TEXTURE_SRC_CODE_COUNT + }; + + enum CustomSamplers + { + CUSTOM_SAMPLER_REFLECTION_PROBE = 0x0, + CUSTOM_SAMPLER_LIGHTMAP_PRIMARY = 0x1, + CUSTOM_SAMPLER_LIGHTMAP_SECONDARY = 0x2, + + CUSTOM_SAMPLER_COUNT + }; + + enum MaterialUpdateFrequency + { + MTL_UPDATE_PER_PRIM = 0x0, + MTL_UPDATE_PER_OBJECT = 0x1, + MTL_UPDATE_RARELY = 0x2, + MTL_UPDATE_CUSTOM = 0x3, }; struct MaterialShaderArgument @@ -1270,10 +1194,12 @@ namespace IW3 STREAM_SRC_COLOR = 0x1, STREAM_SRC_TEXCOORD_0 = 0x2, STREAM_SRC_NORMAL = 0x3, + + STREAM_SRC_PRE_OPTIONAL_BEGIN = 0x4, + STREAM_SRC_TANGENT = 0x4, STREAM_SRC_OPTIONAL_BEGIN = 0x5, - STREAM_SRC_PRE_OPTIONAL_BEGIN = 0x4, STREAM_SRC_TEXCOORD_1 = 0x5, STREAM_SRC_TEXCOORD_2 = 0x6, @@ -1370,6 +1296,18 @@ namespace IW3 MaterialShaderArgument* args; }; + enum TechniqueFlags + { + MTL_TECHFLAG_NEEDS_RESOLVED_POST_SUN = 0x1, + MTL_TECHFLAG_NEEDS_RESOLVED_SCENE = 0x2, + MTL_TECHFLAG_ZPREPASS = 0x4, + + MTL_TECHFLAG_DECL_HAS_OPTIONAL_SOURCE = 0x8, + + MTL_TECHFLAG_USES_LIGHT_SPOT_FACTORS = 0x10, + MTL_TECHFLAG_USES_FLOATZ = 0x20, + }; + struct MaterialTechnique { const char* name; diff --git a/src/ObjCommon/Game/IW3/Techset/TechsetConstantsIW3.h b/src/ObjCommon/Game/IW3/Techset/TechsetConstantsIW3.h new file mode 100644 index 00000000..9916f91c --- /dev/null +++ b/src/ObjCommon/Game/IW3/Techset/TechsetConstantsIW3.h @@ -0,0 +1,858 @@ +#pragma once + +#include "Game/IW3/IW3.h" +#include "Techset/CommonTechnique.h" +#include "Techset/CommonTechset.h" + +#include + +namespace IW3 +{ + inline const char* techniqueTypeNames[]{ + "depth prepass", + "build floatz", + "build shadowmap depth", + "build shadowmap color", + "unlit", + "emissive", + "emissive shadow", + "lit", + "lit sun", + "lit sun shadow", + "lit spot", + "lit spot shadow", + "lit omni", + "lit omni shadow", + "lit instanced", + "lit instanced sun", + "lit instanced sun shadow", + "lit instanced spot", + "lit instanced spot shadow", + "lit instanced omni", + "lit instanced omni shadow", + "light spot", + "light omni", + "light spot shadow", + "fakelight normal", + "fakelight view", + "sunlight preview", + "case texture", + "solid wireframe", + "shaded wireframe", + "shadowcookie caster", + "shadowcookie receiver", + "debug bumpmap", + "debug bumpmap instanced", + }; + static_assert(std::extent_v == TECHNIQUE_COUNT); + static inline techset::CommonTechniqueTypeNames commonTechniqueTypeNames(techniqueTypeNames, std::extent_v); + + static inline techset::CommonStreamRoutingSourceInfo streamRoutingSources[]{ + { + .name = "position", + .abbreviation = "p", + .optional = false, + }, + { + .name = "color", + .abbreviation = "c", + .optional = false, + }, + { + .name = "texcoord[0]", + .abbreviation = "t0", + .optional = false, + }, + { + .name = "normal", + .abbreviation = "n", + .optional = false, + }, + { + .name = "tangent", + .abbreviation = "t", + .optional = false, + }, + { + .name = "texcoord[1]", + .abbreviation = "t1", + .optional = true, + }, + { + .name = "texcoord[2]", + .abbreviation = "t2", + .optional = true, + }, + { + .name = "normalTransform[0]", + .abbreviation = "n0", + .optional = true, + }, + { + .name = "normalTransform[1]", + .abbreviation = "n1", + .optional = true, + }, + }; + static_assert(std::extent_v == STREAM_SRC_COUNT); + + static inline techset::CommonStreamRoutingDestinationInfo streamRoutingDestinations[]{ + { + .name = "position", + .abbreviation = "p", + }, + { + .name = "normal", + .abbreviation = "n", + }, + { + .name = "color[0]", + .abbreviation = "c0", + }, + { + .name = "color[1]", + .abbreviation = "c1", + }, + { + .name = "texcoord[0]", + .abbreviation = "t0", + }, + { + .name = "texcoord[1]", + .abbreviation = "t1", + }, + { + .name = "texcoord[2]", + .abbreviation = "t2", + }, + { + .name = "texcoord[3]", + .abbreviation = "t3", + }, + { + .name = "texcoord[4]", + .abbreviation = "t4", + }, + { + .name = "texcoord[5]", + .abbreviation = "t5", + }, + { + .name = "texcoord[6]", + .abbreviation = "t6", + }, + { + .name = "texcoord[7]", + .abbreviation = "t7", + }, + }; + static_assert(std::extent_v == STREAM_DST_COUNT); + + static inline techset::CommonStreamRoutingInfos commonRoutingInfos(streamRoutingSources, + std::extent_v, + streamRoutingDestinations, + std::extent_v); + + static inline techset::CommonCodeConstSourceInfo commonCodeConstSources[]{ + { + .value = CONST_SRC_CODE_LIGHT_POSITION, + .accessor = "lightPosition", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_LIGHT_DIFFUSE, + .accessor = "lightDiffuse", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_LIGHT_SPECULAR, + .accessor = "lightSpecular", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_LIGHT_SPOTDIR, + .accessor = "lightSpotDir", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_LIGHT_SPOTFACTORS, + .accessor = "lightSpotFactors", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + .techFlags = MTL_TECHFLAG_USES_LIGHT_SPOT_FACTORS, + }, + { + .value = CONST_SRC_CODE_NEARPLANE_ORG, + .accessor = "nearPlaneOrg", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_NEARPLANE_DX, + .accessor = "nearPlaneDx", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_NEARPLANE_DY, + .accessor = "nearPlaneDy", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_SHADOW_PARMS, + .accessor = "shadowParms", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_SHADOWMAP_POLYGON_OFFSET, + .accessor = "shadowmapPolygonOffset", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_RENDER_TARGET_SIZE, + .accessor = "renderTargetSize", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_LIGHT_FALLOFF_PLACEMENT, + .accessor = "lightFalloffPlacement", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_DOF_EQUATION_VIEWMODEL_AND_FAR_BLUR, + .accessor = "dofEquationViewModelAndFarBlur", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_DOF_EQUATION_SCENE, + .accessor = "dofEquationScene", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_DOF_LERP_SCALE, + .accessor = "dofLerpScale", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_DOF_LERP_BIAS, + .accessor = "dofLerpBias", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_DOF_ROW_DELTA, + .accessor = "dofRowDelta", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_PARTICLE_CLOUD_COLOR, + .accessor = "particleCloudColor", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_GAMETIME, + .accessor = "gameTime", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_PIXEL_COST_FRACS, + .accessor = "pixelCostFracs", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_PIXEL_COST_DECODE, + .accessor = "pixelCostDecode", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_FILTER_TAP_0, + .accessor = "filterTap", + .arrayCount = 8, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_COLOR_MATRIX_R, + .accessor = "colorMatrixR", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_COLOR_MATRIX_G, + .accessor = "colorMatrixG", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_COLOR_MATRIX_B, + .accessor = "colorMatrixB", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_SHADOWMAP_SWITCH_PARTITION, + .accessor = "shadowmapSwitchPartition", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_SHADOWMAP_SCALE, + .accessor = "shadowmapScale", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_ZNEAR, + .accessor = "zNear", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_SUN_POSITION, + .accessor = "sunPosition", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_SUN_DIFFUSE, + .accessor = "sunDiffuse", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_SUN_SPECULAR, + .accessor = "sunSpecular", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_LIGHTING_LOOKUP_SCALE, + .accessor = "lightingLookupScale", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_DEBUG_BUMPMAP, + .accessor = "debugBumpmap", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_MATERIAL_COLOR, + .accessor = "materialColor", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_FOG, + .accessor = "fogConsts", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_FOG_COLOR, + .accessor = "fogColor", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_GLOW_SETUP, + .accessor = "glowSetup", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_GLOW_APPLY, + .accessor = "glowApply", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_COLOR_BIAS, + .accessor = "colorBias", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_COLOR_TINT_BASE, + .accessor = "colorTintBase", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_COLOR_TINT_DELTA, + .accessor = "colorTintDelta", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_OUTDOOR_FEATHER_PARMS, + .accessor = "outdoorFeatherParms", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_ENVMAP_PARMS, + .accessor = "envMapParms", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_SPOT_SHADOWMAP_PIXEL_ADJUST, + .accessor = "spotShadowmapPixelAdjust", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_CLIP_SPACE_LOOKUP_SCALE, + .accessor = "clipSpaceLookupScale", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_OBJECT, + }, + { + .value = CONST_SRC_CODE_CLIP_SPACE_LOOKUP_OFFSET, + .accessor = "clipSpaceLookupOffset", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_OBJECT, + }, + { + .value = CONST_SRC_CODE_PARTICLE_CLOUD_MATRIX, + .accessor = "particleCloudMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_OBJECT, + }, + { + .value = CONST_SRC_CODE_DEPTH_FROM_CLIP, + .accessor = "depthFromClip", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_OBJECT, + }, + { + .value = CONST_SRC_CODE_CODE_MESH_ARG_0, + .accessor = "codeMeshArg", + .arrayCount = 2, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_OBJECT, + }, + { + .value = CONST_SRC_CODE_BASE_LIGHTING_COORDS, + .accessor = "baseLightingCoords", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + }, + { + .value = CONST_SRC_CODE_WORLD_MATRIX, + .accessor = "worldMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_TRANSPOSE_WORLD_MATRIX, + }, + { + .value = CONST_SRC_CODE_INVERSE_WORLD_MATRIX, + .accessor = "inverseWorldMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_MATRIX, + }, + { + .value = CONST_SRC_CODE_TRANSPOSE_WORLD_MATRIX, + .accessor = "transposeWorldMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_WORLD_MATRIX, + }, + { + .value = CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_MATRIX, + .accessor = "inverseTransposeWorldMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_INVERSE_WORLD_MATRIX, + }, + { + .value = CONST_SRC_CODE_VIEW_MATRIX, + .accessor = "viewMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_OBJECT, + .transposedMatrix = CONST_SRC_CODE_TRANSPOSE_VIEW_MATRIX, + }, + { + .value = CONST_SRC_CODE_INVERSE_VIEW_MATRIX, + .accessor = "inverseViewMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_OBJECT, + .transposedMatrix = CONST_SRC_CODE_INVERSE_TRANSPOSE_VIEW_MATRIX, + }, + { + .value = CONST_SRC_CODE_TRANSPOSE_VIEW_MATRIX, + .accessor = "transposeViewMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_OBJECT, + .transposedMatrix = CONST_SRC_CODE_VIEW_MATRIX, + }, + { + .value = CONST_SRC_CODE_INVERSE_TRANSPOSE_VIEW_MATRIX, + .accessor = "inverseTransposeViewMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_OBJECT, + .transposedMatrix = CONST_SRC_CODE_INVERSE_VIEW_MATRIX, + }, + { + .value = CONST_SRC_CODE_PROJECTION_MATRIX, + .accessor = "projectionMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_OBJECT, + .transposedMatrix = CONST_SRC_CODE_TRANSPOSE_PROJECTION_MATRIX, + }, + { + .value = CONST_SRC_CODE_INVERSE_PROJECTION_MATRIX, + .accessor = "inverseProjectionMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_OBJECT, + .transposedMatrix = CONST_SRC_CODE_INVERSE_TRANSPOSE_PROJECTION_MATRIX, + }, + { + .value = CONST_SRC_CODE_TRANSPOSE_PROJECTION_MATRIX, + .accessor = "transposeProjectionMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_OBJECT, + .transposedMatrix = CONST_SRC_CODE_PROJECTION_MATRIX, + }, + { + .value = CONST_SRC_CODE_INVERSE_TRANSPOSE_PROJECTION_MATRIX, + .accessor = "inverseTransposeProjectionMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_OBJECT, + .transposedMatrix = CONST_SRC_CODE_INVERSE_PROJECTION_MATRIX, + }, + { + .value = CONST_SRC_CODE_WORLD_VIEW_MATRIX, + .accessor = "worldViewMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_TRANSPOSE_WORLD_VIEW_MATRIX, + }, + { + .value = CONST_SRC_CODE_INVERSE_WORLD_VIEW_MATRIX, + .accessor = "inverseWorldViewMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_VIEW_MATRIX, + }, + { + .value = CONST_SRC_CODE_TRANSPOSE_WORLD_VIEW_MATRIX, + .accessor = "transposeWorldViewMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_WORLD_VIEW_MATRIX, + }, + { + .value = CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_VIEW_MATRIX, + .accessor = "inverseTransposeWorldViewMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_INVERSE_WORLD_VIEW_MATRIX, + }, + { + .value = CONST_SRC_CODE_VIEW_PROJECTION_MATRIX, + .accessor = "viewProjectionMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_OBJECT, + .transposedMatrix = CONST_SRC_CODE_TRANSPOSE_VIEW_PROJECTION_MATRIX, + }, + { + .value = CONST_SRC_CODE_INVERSE_VIEW_PROJECTION_MATRIX, + .accessor = "inverseViewProjectionMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_OBJECT, + .transposedMatrix = CONST_SRC_CODE_INVERSE_TRANSPOSE_VIEW_PROJECTION_MATRIX, + }, + { + .value = CONST_SRC_CODE_TRANSPOSE_VIEW_PROJECTION_MATRIX, + .accessor = "transposeViewProjectionMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_OBJECT, + .transposedMatrix = CONST_SRC_CODE_VIEW_PROJECTION_MATRIX, + }, + { + .value = CONST_SRC_CODE_INVERSE_TRANSPOSE_VIEW_PROJECTION_MATRIX, + .accessor = "inverseTransposeViewProjectionMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_OBJECT, + .transposedMatrix = CONST_SRC_CODE_INVERSE_VIEW_PROJECTION_MATRIX, + }, + { + .value = CONST_SRC_CODE_WORLD_VIEW_PROJECTION_MATRIX, + .accessor = "worldViewProjectionMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_TRANSPOSE_WORLD_VIEW_PROJECTION_MATRIX, + }, + { + .value = CONST_SRC_CODE_INVERSE_WORLD_VIEW_PROJECTION_MATRIX, + .accessor = "inverseWorldViewProjectionMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_VIEW_PROJECTION_MATRIX, + }, + { + .value = CONST_SRC_CODE_TRANSPOSE_WORLD_VIEW_PROJECTION_MATRIX, + .accessor = "transposeWorldViewProjectionMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_WORLD_VIEW_PROJECTION_MATRIX, + }, + { + .value = CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_VIEW_PROJECTION_MATRIX, + .accessor = "inverseTransposeWorldViewProjectionMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_INVERSE_WORLD_VIEW_PROJECTION_MATRIX, + }, + { + .value = CONST_SRC_CODE_SHADOW_LOOKUP_MATRIX, + .accessor = "shadowLookupMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_OBJECT, + .transposedMatrix = CONST_SRC_CODE_TRANSPOSE_SHADOW_LOOKUP_MATRIX, + }, + { + .value = CONST_SRC_CODE_INVERSE_SHADOW_LOOKUP_MATRIX, + .accessor = "inverseShadowLookupMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_OBJECT, + .transposedMatrix = CONST_SRC_CODE_INVERSE_TRANSPOSE_SHADOW_LOOKUP_MATRIX, + }, + { + .value = CONST_SRC_CODE_TRANSPOSE_SHADOW_LOOKUP_MATRIX, + .accessor = "transposeShadowLookupMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_OBJECT, + .transposedMatrix = CONST_SRC_CODE_SHADOW_LOOKUP_MATRIX, + }, + { + .value = CONST_SRC_CODE_INVERSE_TRANSPOSE_SHADOW_LOOKUP_MATRIX, + .accessor = "inverseTransposeShadowLookupMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_OBJECT, + .transposedMatrix = CONST_SRC_CODE_INVERSE_SHADOW_LOOKUP_MATRIX, + }, + { + .value = CONST_SRC_CODE_WORLD_OUTDOOR_LOOKUP_MATRIX, + .accessor = "worldOutdoorLookupMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_TRANSPOSE_WORLD_OUTDOOR_LOOKUP_MATRIX, + }, + { + .value = CONST_SRC_CODE_INVERSE_WORLD_OUTDOOR_LOOKUP_MATRIX, + .accessor = "inverseWorldOutdoorLookupMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_OUTDOOR_LOOKUP_MATRIX, + }, + { + .value = CONST_SRC_CODE_TRANSPOSE_WORLD_OUTDOOR_LOOKUP_MATRIX, + .accessor = "transposeWorldOutdoorLookupMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_WORLD_OUTDOOR_LOOKUP_MATRIX, + }, + { + .value = CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_OUTDOOR_LOOKUP_MATRIX, + .accessor = "inverseTransposeWorldOutdoorLookupMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_INVERSE_WORLD_OUTDOOR_LOOKUP_MATRIX, + }, + }; + + static inline techset::CommonCodeSamplerSourceInfo commonCodeSamplerSources[]{ + { + .value = TEXTURE_SRC_CODE_BLACK, + .accessor = "black", + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = TEXTURE_SRC_CODE_WHITE, + .accessor = "white", + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = TEXTURE_SRC_CODE_IDENTITY_NORMAL_MAP, + .accessor = "identityNormalMap", + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = TEXTURE_SRC_CODE_MODEL_LIGHTING, + .accessor = "modelLightingSampler", + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = TEXTURE_SRC_CODE_LIGHTMAP_PRIMARY, + .accessor = "lightmapSamplerPrimary", + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::CUSTOM, + .customSamplerIndex = CUSTOM_SAMPLER_LIGHTMAP_PRIMARY, + }, + { + .value = TEXTURE_SRC_CODE_LIGHTMAP_SECONDARY, + .accessor = "lightmapSamplerSecondary", + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::CUSTOM, + .customSamplerIndex = CUSTOM_SAMPLER_LIGHTMAP_SECONDARY, + }, + { + .value = TEXTURE_SRC_CODE_SHADOWCOOKIE, + .accessor = "shadowCookieSampler", + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = TEXTURE_SRC_CODE_SHADOWMAP_SUN, + .accessor = "shadowmapSamplerSun", + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = TEXTURE_SRC_CODE_SHADOWMAP_SPOT, + .accessor = "shadowmapSamplerSpot", + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = TEXTURE_SRC_CODE_FEEDBACK, + .accessor = "feedbackSampler", + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_OBJECT, + }, + { + .value = TEXTURE_SRC_CODE_RESOLVED_POST_SUN, + .accessor = "resolvedPostSun", + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = TEXTURE_SRC_CODE_RESOLVED_SCENE, + .accessor = "resolvedScene", + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = TEXTURE_SRC_CODE_POST_EFFECT_0, + .accessor = "postEffect0", + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = TEXTURE_SRC_CODE_POST_EFFECT_1, + .accessor = "postEffect1", + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = TEXTURE_SRC_CODE_SKY, + .accessor = "sky", + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = TEXTURE_SRC_CODE_LIGHT_ATTENUATION, + .accessor = "attenuationSampler", + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_OBJECT, + }, + { + .value = TEXTURE_SRC_CODE_DYNAMIC_SHADOWS, + .accessor = "dynamicShadowSampler", + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_OBJECT, + }, + { + .value = TEXTURE_SRC_CODE_OUTDOOR, + .accessor = "outdoor", + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = TEXTURE_SRC_CODE_FLOATZ, + .accessor = "floatZSampler", + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + .techFlags = MTL_TECHFLAG_USES_FLOATZ, + }, + { + .value = TEXTURE_SRC_CODE_PROCESSED_FLOATZ, + .accessor = "processedFloatZSampler", + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + .techFlags = MTL_TECHFLAG_USES_FLOATZ, + }, + { + .value = TEXTURE_SRC_CODE_RAW_FLOATZ, + .accessor = "rawFloatZSampler", + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + .techFlags = MTL_TECHFLAG_USES_FLOATZ, + }, + { + .value = TEXTURE_SRC_CODE_CASE_TEXTURE, + .accessor = "caseTexture" /* ? */, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_OBJECT, + }, + { + .value = TEXTURE_SRC_CODE_CINEMATIC_Y, + .accessor = "cinematicYSampler", + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_OBJECT, + }, + { + .value = TEXTURE_SRC_CODE_CINEMATIC_CR, + .accessor = "cinematicCrSampler", + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_OBJECT, + }, + { + .value = TEXTURE_SRC_CODE_CINEMATIC_CB, + .accessor = "cinematicCbSampler", + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_OBJECT, + }, + { + .value = TEXTURE_SRC_CODE_CINEMATIC_A, + .accessor = "cinematicASampler", + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_OBJECT, + }, + { + .value = TEXTURE_SRC_CODE_REFLECTION_PROBE, + .accessor = "reflectionProbeSampler", + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::CUSTOM, + .customSamplerIndex = CUSTOM_SAMPLER_REFLECTION_PROBE, + }, + }; + + // See MaterialShaderArgumentType + static inline techset::CommonShaderArgumentType commonArgumentTypes[]{ + {.m_shader_type = techset::CommonTechniqueShaderType::VERTEX, .m_value_type = techset::CommonShaderValueType::MATERIAL_CONST }, + {.m_shader_type = techset::CommonTechniqueShaderType::VERTEX, .m_value_type = techset::CommonShaderValueType::LITERAL_CONST }, + {.m_shader_type = techset::CommonTechniqueShaderType::PIXEL, .m_value_type = techset::CommonShaderValueType::MATERIAL_SAMPLER}, + {.m_shader_type = techset::CommonTechniqueShaderType::VERTEX, .m_value_type = techset::CommonShaderValueType::CODE_CONST }, + {.m_shader_type = techset::CommonTechniqueShaderType::PIXEL, .m_value_type = techset::CommonShaderValueType::CODE_SAMPLER }, + {.m_shader_type = techset::CommonTechniqueShaderType::PIXEL, .m_value_type = techset::CommonShaderValueType::CODE_CONST }, + {.m_shader_type = techset::CommonTechniqueShaderType::PIXEL, .m_value_type = techset::CommonShaderValueType::MATERIAL_CONST }, + {.m_shader_type = techset::CommonTechniqueShaderType::PIXEL, .m_value_type = techset::CommonShaderValueType::LITERAL_CONST }, + }; + static_assert(std::extent_v == MTL_ARG_COUNT); + + static inline techset::CommonCodeSourceInfos commonCodeSourceInfos(commonCodeConstSources, + std::extent_v, + commonCodeSamplerSources, + std::extent_v, + nullptr, + 0, + commonArgumentTypes, + std::extent_v); + + static inline MaterialTypeInfo g_materialTypeInfo[]{ + {"", "" }, + {"m/", "m_" }, + {"mc/", "mc_"}, + {"w/", "w_" }, + {"wc/", "wc_"}, + }; + static_assert(std::extent_v == MTL_TYPE_COUNT); +} // namespace IW3 diff --git a/src/ObjCommon/Game/IW3/TechsetConstantsIW3.h b/src/ObjCommon/Game/IW3/TechsetConstantsIW3.h deleted file mode 100644 index 14560606..00000000 --- a/src/ObjCommon/Game/IW3/TechsetConstantsIW3.h +++ /dev/null @@ -1,102 +0,0 @@ -#pragma once - -#include "Game/IW3/CommonIW3.h" -#include "Game/IW3/IW3.h" - -#include -#include - -namespace IW3 -{ - inline const char* techniqueTypeNames[]{ - "depth prepass", - "build floatz", - "build shadowmap depth", - "build shadowmap color", - "unlit", - "emissive", - "emissive shadow", - "lit", - "lit sun", - "lit sun shadow", - "lit spot", - "lit spot shadow", - "lit omni", - "lit omni shadow", - "lit instanced", - "lit instanced sun", - "lit instanced sun shadow", - "lit instanced spot", - "lit instanced spot shadow", - "lit instanced omni", - "lit instanced omni shadow", - "light spot", - "light omni", - "light spot shadow", - "fakelight normal", - "fakelight view", - "sunlight preview", - "case texture", - "solid wireframe", - "shaded wireframe", - "shadowcookie caster", - "shadowcookie receiver", - "debug bumpmap", - "debug bumpmap instanced", - }; - static_assert(std::extent_v == TECHNIQUE_COUNT); - - static const char* materialStreamDestinationNames[]{ - "position", - "normal", - "color[0]", - "color[1]", - "texcoord[0]", - "texcoord[1]", - "texcoord[2]", - "texcoord[3]", - "texcoord[4]", - "texcoord[5]", - "texcoord[6]", - "texcoord[7]", - }; - static_assert(std::extent_v == STREAM_DST_COUNT); - - static const char* materialStreamSourceNames[]{ - "position", - "color", - "texcoord[0]", - "normal", - "tangent", - "texcoord[1]", - "texcoord[2]", - "normalTransform[0]", - "normalTransform[1]", - }; - static_assert(std::extent_v == STREAM_SRC_COUNT); - - static constexpr std::pair KnownMaterialSource(const char* name) - { - return std::make_pair(Common::R_HashString(name, 0u), name); - } - - inline std::unordered_map knownMaterialSourceNames{ - KnownMaterialSource("colorMap"), KnownMaterialSource("colorMap0"), KnownMaterialSource("colorMap1"), - KnownMaterialSource("colorMap2"), KnownMaterialSource("colorMap3"), KnownMaterialSource("colorMap4"), - KnownMaterialSource("colorMap5"), KnownMaterialSource("colorMap6"), KnownMaterialSource("colorMap7"), - KnownMaterialSource("normalMap"), KnownMaterialSource("normalMap0"), KnownMaterialSource("normalMap1"), - KnownMaterialSource("normalMap2"), KnownMaterialSource("normalMap3"), KnownMaterialSource("normalMap4"), - KnownMaterialSource("normalMap5"), KnownMaterialSource("normalMap6"), KnownMaterialSource("normalMap7"), - KnownMaterialSource("specularMap"), KnownMaterialSource("specularMap0"), KnownMaterialSource("specularMap1"), - KnownMaterialSource("specularMap2"), KnownMaterialSource("specularMap3"), KnownMaterialSource("specularMap4"), - KnownMaterialSource("specularMap5"), KnownMaterialSource("specularMap6"), KnownMaterialSource("specularMap7"), - KnownMaterialSource("detailMap"), KnownMaterialSource("detailMap0"), KnownMaterialSource("detailMap1"), - KnownMaterialSource("detailMap2"), KnownMaterialSource("detailMap3"), KnownMaterialSource("detailMap4"), - KnownMaterialSource("detailMap5"), KnownMaterialSource("detailMap6"), KnownMaterialSource("detailMap7"), - KnownMaterialSource("attenuationMap"), KnownMaterialSource("attenuationMap0"), KnownMaterialSource("attenuationMap1"), - KnownMaterialSource("attenuationMap2"), KnownMaterialSource("attenuationMap3"), KnownMaterialSource("attenuationMap4"), - KnownMaterialSource("attenuationMap5"), KnownMaterialSource("attenuationMap6"), KnownMaterialSource("attenuationMap7"), - KnownMaterialSource("distortionScale"), KnownMaterialSource("eyeOffsetParms"), KnownMaterialSource("falloffBeginColor"), - KnownMaterialSource("falloffEndColor"), - }; -} // namespace IW3 diff --git a/src/ObjWriting/Game/IW3/ObjWriterIW3.cpp b/src/ObjWriting/Game/IW3/ObjWriterIW3.cpp index e754eb6b..0f3f9e2e 100644 --- a/src/ObjWriting/Game/IW3/ObjWriterIW3.cpp +++ b/src/ObjWriting/Game/IW3/ObjWriterIW3.cpp @@ -1,6 +1,7 @@ #include "ObjWriterIW3.h" #include "Game/IW3/Material/MaterialJsonDumperIW3.h" +#include "Game/IW3/Techset/TechsetDumperIW3.h" #include "Game/IW3/XModel/XModelDumperIW3.h" #include "Image/ImageDumperIW3.h" #include "Localize/LocalizeDumperIW3.h" @@ -17,7 +18,13 @@ void ObjWriter::RegisterAssetDumpers(AssetDumpingContext& context) // REGISTER_DUMPER(AssetDumperXAnimParts) RegisterAssetDumper(std::make_unique()); RegisterAssetDumper(std::make_unique()); - // REGISTER_DUMPER(AssetDumperMaterialTechniqueSet) + RegisterAssetDumper(std::make_unique( +#ifdef TECHSET_DEBUG + true +#else + false +#endif + )); RegisterAssetDumper(std::make_unique()); // REGISTER_DUMPER(AssetDumpersnd_alias_list_t) // REGISTER_DUMPER(AssetDumperSndCurve) diff --git a/src/ObjWriting/Techset/PixelShaderDumper.cpp.template b/src/ObjWriting/Techset/PixelShaderDumper.cpp.template index c7f95cd4..ac1f2fde 100644 --- a/src/ObjWriting/Techset/PixelShaderDumper.cpp.template +++ b/src/ObjWriting/Techset/PixelShaderDumper.cpp.template @@ -4,10 +4,7 @@ #set DUMPER_HEADER "\"PixelShaderDumper" + GAME + ".h\"" -#if GAME == "IW3" -#define FEATURE_IW3 -#define IS_DX9 -#elif GAME == "IW4" +#if GAME == "IW4" #define FEATURE_IW4 #define IS_DX9 #elif GAME == "IW5" diff --git a/src/ObjWriting/Techset/TechsetDumper.cpp.template b/src/ObjWriting/Techset/TechsetDumper.cpp.template index c11f36bc..81c9792b 100644 --- a/src/ObjWriting/Techset/TechsetDumper.cpp.template +++ b/src/ObjWriting/Techset/TechsetDumper.cpp.template @@ -1,4 +1,4 @@ -#options GAME(IW4, T6) +#options GAME(IW3, IW4, T6) #filename "Game/" + GAME + "/Techset/TechsetDumper" + GAME + ".cpp" @@ -9,6 +9,7 @@ #if GAME == "IW3" #define FEATURE_IW3 #define IS_DX9 +#define DUMP_SHADERS "1" #elif GAME == "IW4" #define FEATURE_IW4 #define IS_DX9 @@ -58,7 +59,7 @@ namespace if (!shaderFile) return; -#if defined(FEATURE_T6) +#if defined(IS_DX11) shaderFile->write(pixelShader.prog.loadDef.program, pixelShader.prog.loadDef.programSize); #else shaderFile->write(reinterpret_cast(pixelShader.prog.loadDef.program), @@ -73,7 +74,7 @@ namespace if (!shaderFile) return; -#if defined(FEATURE_T6) +#if defined(IS_DX11) shaderFile->write(vertexShader.prog.loadDef.program, vertexShader.prog.loadDef.programSize); #else shaderFile->write(reinterpret_cast(vertexShader.prog.loadDef.program), diff --git a/src/ObjWriting/Techset/TechsetDumper.h.template b/src/ObjWriting/Techset/TechsetDumper.h.template index fa1f0721..2139bc0c 100644 --- a/src/ObjWriting/Techset/TechsetDumper.h.template +++ b/src/ObjWriting/Techset/TechsetDumper.h.template @@ -1,4 +1,4 @@ -#options GAME(IW4, T6) +#options GAME(IW3, IW4, T6) #filename "Game/" + GAME + "/Techset/TechsetDumper" + GAME + ".h" diff --git a/src/ObjWriting/Techset/VertexShaderDumper.cpp.template b/src/ObjWriting/Techset/VertexShaderDumper.cpp.template index cade44ba..66c408f9 100644 --- a/src/ObjWriting/Techset/VertexShaderDumper.cpp.template +++ b/src/ObjWriting/Techset/VertexShaderDumper.cpp.template @@ -4,10 +4,7 @@ #set DUMPER_HEADER "\"VertexShaderDumper" + GAME + ".h\"" -#if GAME == "IW3" -#define FEATURE_IW3 -#define IS_DX9 -#elif GAME == "IW4" +#if GAME == "IW4" #define FEATURE_IW4 #define IS_DX9 #elif GAME == "IW5" From daa891a922eb545d0ec69cf22c4eb465079f1b47 Mon Sep 17 00:00:00 2001 From: Jan Laupetin Date: Sat, 14 Mar 2026 20:46:58 +0100 Subject: [PATCH 2/3] feat: add techset compiling for IW3 --- src/Common/Game/IW3/IW3_Assets.h | 2 +- .../Game/IW3/Techset/TechsetConstantsIW3.h | 2 ++ src/ObjCompiling/Game/IW3/ObjCompilerIW3.cpp | 9 ++++++++- .../Techset/TechniqueCompiler.cpp.template | 14 ++++++++------ .../Techset/TechniqueCompiler.h.template | 2 +- .../Techset/TechsetCompiler.cpp.template | 2 +- .../Techset/TechsetCompiler.h.template | 2 +- .../Techset/VertexDeclCompiler.cpp.template | 3 ++- .../Techset/VertexDeclCompiler.h.template | 6 ++++-- src/ObjLoading/Game/IW3/ObjLoaderIW3.cpp | 5 +++++ .../Techset/PixelShaderLoader.cpp.template | 3 ++- .../Techset/PixelShaderLoader.h.template | 6 ++++-- .../Techset/VertexShaderLoader.cpp.template | 3 ++- .../Techset/VertexShaderLoader.h.template | 6 ++++-- 14 files changed, 45 insertions(+), 20 deletions(-) diff --git a/src/Common/Game/IW3/IW3_Assets.h b/src/Common/Game/IW3/IW3_Assets.h index 6415e918..d654aecb 100644 --- a/src/Common/Game/IW3/IW3_Assets.h +++ b/src/Common/Game/IW3/IW3_Assets.h @@ -1240,7 +1240,7 @@ namespace IW3 struct MaterialVertexDeclaration { - char streamCount; + unsigned char streamCount; bool hasOptionalSource; bool isLoaded; MaterialVertexStreamRouting routing; diff --git a/src/ObjCommon/Game/IW3/Techset/TechsetConstantsIW3.h b/src/ObjCommon/Game/IW3/Techset/TechsetConstantsIW3.h index 9916f91c..7a7bdb2a 100644 --- a/src/ObjCommon/Game/IW3/Techset/TechsetConstantsIW3.h +++ b/src/ObjCommon/Game/IW3/Techset/TechsetConstantsIW3.h @@ -738,11 +738,13 @@ namespace IW3 .value = TEXTURE_SRC_CODE_RESOLVED_POST_SUN, .accessor = "resolvedPostSun", .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + .techFlags = MTL_TECHFLAG_NEEDS_RESOLVED_POST_SUN, }, { .value = TEXTURE_SRC_CODE_RESOLVED_SCENE, .accessor = "resolvedScene", .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + .techFlags = MTL_TECHFLAG_NEEDS_RESOLVED_SCENE, }, { .value = TEXTURE_SRC_CODE_POST_EFFECT_0, diff --git a/src/ObjCompiling/Game/IW3/ObjCompilerIW3.cpp b/src/ObjCompiling/Game/IW3/ObjCompilerIW3.cpp index 29ea2ee1..ad084e43 100644 --- a/src/ObjCompiling/Game/IW3/ObjCompilerIW3.cpp +++ b/src/ObjCompiling/Game/IW3/ObjCompilerIW3.cpp @@ -1,6 +1,9 @@ #include "ObjCompilerIW3.h" #include "Game/IW3/IW3.h" +#include "Game/IW3/Techset/TechniqueCompilerIW3.h" +#include "Game/IW3/Techset/TechsetCompilerIW3.h" +#include "Game/IW3/Techset/VertexDeclCompilerIW3.h" #include "Image/ImageIwdPostProcessor.h" #include @@ -13,7 +16,10 @@ namespace { auto& memory = zone.Memory(); - // No compilers yet + collection.AddAssetCreator(techset::CreateTechsetCompilerIW3(memory, searchPath)); + + collection.AddSubAssetCreator(techset::CreateTechniqueCompilerIW3(memory, zone, searchPath)); + collection.AddSubAssetCreator(techset::CreateVertexDeclCompilerIW3(memory)); } void ConfigurePostProcessors(AssetCreatorCollection& collection, @@ -39,5 +45,6 @@ void ObjCompiler::ConfigureCreatorCollection(AssetCreatorCollection& collection, IOutputPath& outDir, IOutputPath& cacheDir) const { + ConfigureCompilers(collection, zone, searchPath); ConfigurePostProcessors(collection, zone, zoneDefinition, searchPath, zoneStates, outDir); } diff --git a/src/ObjCompiling/Techset/TechniqueCompiler.cpp.template b/src/ObjCompiling/Techset/TechniqueCompiler.cpp.template index 9d5e194c..14d6facc 100644 --- a/src/ObjCompiling/Techset/TechniqueCompiler.cpp.template +++ b/src/ObjCompiling/Techset/TechniqueCompiler.cpp.template @@ -1,4 +1,4 @@ -#options GAME(IW4, T6) +#options GAME(IW3, IW4, T6) #filename "Game/" + GAME + "/Techset/TechniqueCompiler" + GAME + ".cpp" @@ -9,6 +9,7 @@ #if GAME == "IW3" #define FEATURE_IW3 #define IS_DX9 +#define SHADERS_ARE_SUBASSETS #elif GAME == "IW4" #define FEATURE_IW4 #define IS_DX9 @@ -278,7 +279,10 @@ namespace std::string lowerTechniqueName(commonTechnique.m_name); utils::MakeStringLowerCase(lowerTechniqueName); -#if defined(FEATURE_IW4) +#if defined(FEATURE_IW3) + if (lowerTechniqueName == "zprepass") + technique.flags |= MTL_TECHFLAG_ZPREPASS; +#elif defined(FEATURE_IW4) // Not a particularly cool way to do this but... // the game actually does this :shrug: if (lowerTechniqueName == "zprepass") @@ -290,7 +294,7 @@ namespace if (technique.flags & MTL_TECHFLAG_USES_FLOATZ && lowerTechniqueName.starts_with("distortion_")) technique.flags = (technique.flags & ~MTL_TECHFLAG_USES_FLOATZ) | MTL_TECHFLAG_USES_DISTORTION_FLOATZ; - + if (ShouldApplyFlag200(technique)) technique.flags |= TECHNIQUE_FLAG_200; #elif defined(FEATURE_T6) @@ -454,9 +458,7 @@ namespace void FinalizeZone(AssetCreationContext& context) override { -#if defined(FEATURE_IW4) - // TODO -#elif defined(FEATURE_T6) +#if defined(FEATURE_T6) const auto materials = m_zone.m_pools.PoolAssets(); for (auto* materialAsset : materials) { diff --git a/src/ObjCompiling/Techset/TechniqueCompiler.h.template b/src/ObjCompiling/Techset/TechniqueCompiler.h.template index a1bbe9f0..300d599e 100644 --- a/src/ObjCompiling/Techset/TechniqueCompiler.h.template +++ b/src/ObjCompiling/Techset/TechniqueCompiler.h.template @@ -1,4 +1,4 @@ -#options GAME(IW4, T6) +#options GAME(IW3, IW4, T6) #filename "Game/" + GAME + "/Techset/TechniqueCompiler" + GAME + ".h" diff --git a/src/ObjCompiling/Techset/TechsetCompiler.cpp.template b/src/ObjCompiling/Techset/TechsetCompiler.cpp.template index 38a4890f..980926d0 100644 --- a/src/ObjCompiling/Techset/TechsetCompiler.cpp.template +++ b/src/ObjCompiling/Techset/TechsetCompiler.cpp.template @@ -1,4 +1,4 @@ -#options GAME(IW4, T6) +#options GAME(IW3, IW4, T6) #filename "Game/" + GAME + "/Techset/TechsetCompiler" + GAME + ".cpp" diff --git a/src/ObjCompiling/Techset/TechsetCompiler.h.template b/src/ObjCompiling/Techset/TechsetCompiler.h.template index 6e6d8abd..ce6ff411 100644 --- a/src/ObjCompiling/Techset/TechsetCompiler.h.template +++ b/src/ObjCompiling/Techset/TechsetCompiler.h.template @@ -1,4 +1,4 @@ -#options GAME(IW4, T6) +#options GAME(IW3, IW4, T6) #filename "Game/" + GAME + "/Techset/TechsetCompiler" + GAME + ".h" diff --git a/src/ObjCompiling/Techset/VertexDeclCompiler.cpp.template b/src/ObjCompiling/Techset/VertexDeclCompiler.cpp.template index b3a9ba17..ad6dcc04 100644 --- a/src/ObjCompiling/Techset/VertexDeclCompiler.cpp.template +++ b/src/ObjCompiling/Techset/VertexDeclCompiler.cpp.template @@ -1,4 +1,4 @@ -#options GAME(IW4, T6) +#options GAME(IW3, IW4, T6) #filename "Game/" + GAME + "/Techset/VertexDeclCompiler" + GAME + ".cpp" @@ -8,6 +8,7 @@ #if GAME == "IW3" #define FEATURE_IW3 +#define IS_SUB_ASSET #elif GAME == "IW4" #define FEATURE_IW4 #elif GAME == "IW5" diff --git a/src/ObjCompiling/Techset/VertexDeclCompiler.h.template b/src/ObjCompiling/Techset/VertexDeclCompiler.h.template index c7c4b6a5..32f66784 100644 --- a/src/ObjCompiling/Techset/VertexDeclCompiler.h.template +++ b/src/ObjCompiling/Techset/VertexDeclCompiler.h.template @@ -1,9 +1,10 @@ -#options GAME(IW4, T6) +#options GAME(IW3, IW4, T6) #filename "Game/" + GAME + "/Techset/VertexDeclCompiler" + GAME + ".h" #if GAME == "IW3" #define FEATURE_IW3 +#define IS_SUB_ASSET #elif GAME == "IW4" #define FEATURE_IW4 #elif GAME == "IW5" @@ -12,6 +13,7 @@ #define FEATURE_T5 #elif GAME == "T6" #define FEATURE_T6 +#define IS_SUB_ASSET #endif // This file was templated. @@ -27,7 +29,7 @@ #set CREATE_COMPILER_METHOD "CreateVertexDeclCompiler" + GAME -#if defined(FEATURE_T6) +#if defined(IS_SUB_ASSET) #define INTERFACE_NAME ISubAssetCreator #else #define INTERFACE_NAME IAssetCreator diff --git a/src/ObjLoading/Game/IW3/ObjLoaderIW3.cpp b/src/ObjLoading/Game/IW3/ObjLoaderIW3.cpp index 3d77d604..d8656beb 100644 --- a/src/ObjLoading/Game/IW3/ObjLoaderIW3.cpp +++ b/src/ObjLoading/Game/IW3/ObjLoaderIW3.cpp @@ -6,6 +6,8 @@ #include "Game/IW3/IW3.h" #include "Game/IW3/Image/ImageLoaderEmbeddedIW3.h" #include "Game/IW3/Image/ImageLoaderExternalIW3.h" +#include "Game/IW3/Techset/PixelShaderLoaderIW3.h" +#include "Game/IW3/Techset/VertexShaderLoaderIW3.h" #include "Game/IW3/XModel/LoaderXModelIW3.h" #include "Localize/AssetLoaderLocalizeIW3.h" #include "Material/LoaderMaterialIW3.h" @@ -118,6 +120,9 @@ namespace // collection.AddAssetCreator(std::make_unique(memory)); collection.AddAssetCreator(raw_file::CreateLoaderIW3(memory, searchPath)); collection.AddAssetCreator(string_table::CreateLoaderIW3(memory, searchPath)); + + collection.AddSubAssetCreator(techset::CreateVertexShaderLoaderIW3(memory, searchPath)); + collection.AddSubAssetCreator(techset::CreatePixelShaderLoaderIW3(memory, searchPath)); } } // namespace diff --git a/src/ObjLoading/Techset/PixelShaderLoader.cpp.template b/src/ObjLoading/Techset/PixelShaderLoader.cpp.template index 19de8f72..d02e87bb 100644 --- a/src/ObjLoading/Techset/PixelShaderLoader.cpp.template +++ b/src/ObjLoading/Techset/PixelShaderLoader.cpp.template @@ -1,4 +1,4 @@ -#options GAME(IW4, T6) +#options GAME(IW3, IW4, T6) #filename "Game/" + GAME + "/Techset/PixelShaderLoader" + GAME + ".cpp" @@ -8,6 +8,7 @@ #if GAME == "IW3" #define FEATURE_IW3 #define IS_DX9 +#define IS_SUB_ASSET #elif GAME == "IW4" #define FEATURE_IW4 #define IS_DX9 diff --git a/src/ObjLoading/Techset/PixelShaderLoader.h.template b/src/ObjLoading/Techset/PixelShaderLoader.h.template index 05933dab..bc2a1731 100644 --- a/src/ObjLoading/Techset/PixelShaderLoader.h.template +++ b/src/ObjLoading/Techset/PixelShaderLoader.h.template @@ -1,9 +1,10 @@ -#options GAME(IW4, T6) +#options GAME(IW3, IW4, T6) #filename "Game/" + GAME + "/Techset/PixelShaderLoader" + GAME + ".h" #if GAME == "IW3" #define FEATURE_IW3 +#define IS_SUB_ASSET #elif GAME == "IW4" #define FEATURE_IW4 #elif GAME == "IW5" @@ -12,6 +13,7 @@ #define FEATURE_T5 #elif GAME == "T6" #define FEATURE_T6 +#define IS_SUB_ASSET #endif // This file was templated. @@ -28,7 +30,7 @@ #set CREATE_LOADER_METHOD "CreatePixelShaderLoader" + GAME -#if defined(FEATURE_T6) +#if defined(IS_SUB_ASSET) #define INTERFACE_NAME ISubAssetCreator #else #define INTERFACE_NAME IAssetCreator diff --git a/src/ObjLoading/Techset/VertexShaderLoader.cpp.template b/src/ObjLoading/Techset/VertexShaderLoader.cpp.template index fb68e435..3e02b330 100644 --- a/src/ObjLoading/Techset/VertexShaderLoader.cpp.template +++ b/src/ObjLoading/Techset/VertexShaderLoader.cpp.template @@ -1,4 +1,4 @@ -#options GAME(IW4, T6) +#options GAME(IW3, IW4, T6) #filename "Game/" + GAME + "/Techset/VertexShaderLoader" + GAME + ".cpp" @@ -8,6 +8,7 @@ #if GAME == "IW3" #define FEATURE_IW3 #define IS_DX9 +#define IS_SUB_ASSET #elif GAME == "IW4" #define FEATURE_IW4 #define IS_DX9 diff --git a/src/ObjLoading/Techset/VertexShaderLoader.h.template b/src/ObjLoading/Techset/VertexShaderLoader.h.template index b9e37b0d..83957393 100644 --- a/src/ObjLoading/Techset/VertexShaderLoader.h.template +++ b/src/ObjLoading/Techset/VertexShaderLoader.h.template @@ -1,9 +1,10 @@ -#options GAME(IW4, T6) +#options GAME(IW3, IW4, T6) #filename "Game/" + GAME + "/Techset/VertexShaderLoader" + GAME + ".h" #if GAME == "IW3" #define FEATURE_IW3 +#define IS_SUB_ASSET #elif GAME == "IW4" #define FEATURE_IW4 #elif GAME == "IW5" @@ -12,6 +13,7 @@ #define FEATURE_T5 #elif GAME == "T6" #define FEATURE_T6 +#define IS_SUB_ASSET #endif // This file was templated. @@ -28,7 +30,7 @@ #set CREATE_LOADER_METHOD "CreateVertexShaderLoader" + GAME -#if defined(FEATURE_T6) +#if defined(IS_SUB_ASSET) #define INTERFACE_NAME ISubAssetCreator #else #define INTERFACE_NAME IAssetCreator From aaf4c0fd7d5f69e0ea42af6230ce28396a77ab74 Mon Sep 17 00:00:00 2001 From: Jan Laupetin Date: Sat, 14 Mar 2026 20:52:39 +0100 Subject: [PATCH 3/3] docs: adjust supported asset types for techniquesets --- docs/SupportedAssetTypes.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/SupportedAssetTypes.md b/docs/SupportedAssetTypes.md index 0079098e..0918fd44 100644 --- a/docs/SupportedAssetTypes.md +++ b/docs/SupportedAssetTypes.md @@ -15,7 +15,7 @@ The following section specify which assets are supported to be dumped to disk (u | XAnimParts | ❌ | ❌ | | | XModel | ✅ | ✅ | Model data can be exported to `XMODEL_EXPORT/XMODEL_BIN`, `OBJ`, `GLB/GLTF`. | | Material | ✅ | ✅ | | -| MaterialTechniqueSet | ❌ | ❌ | | +| MaterialTechniqueSet | ✅ | ✅ | For shaders: only dumps/loads shader bytecode. | | GfxImage | ✅ | ✅ | | | snd_alias_list_t | ❌ | ❌ | | | SndCurve | ❌ | ❌ | | @@ -46,10 +46,10 @@ The following section specify which assets are supported to be dumped to disk (u | XAnimParts | ❌ | ❌ | | | XModel | ✅ | ✅ | Model data can be exported to `XMODEL_EXPORT/XMODEL_BIN`, `OBJ`, `GLB/GLTF`. | | Material | ✅ | ✅ | | -| MaterialPixelShader | ✅ | ✅ | Shaders are compiled. Only dumps/loads shader bytecode. | -| MaterialVertexShader | ✅ | ✅ | Shaders are compiled. Only dumps/loads shader bytecode. | -| MaterialVertexDeclaration | ✅ | ✅ | Vertex declarations are dumped/loaded as part of a technique. | -| MaterialTechniqueSet | ⁉️ | ⁉️ | Statemaps are currently not exported. | +| MaterialPixelShader | ✅ | ✅ | Only dumps/loads shader bytecode. | +| MaterialVertexShader | ✅ | ✅ | Only dumps/loads shader bytecode. | +| MaterialVertexDeclaration | ✅ | ✅ | | +| MaterialTechniqueSet | ✅ | ✅ | | | GfxImage | ✅ | ❌ | A few special image encodings are not yet supported. | | snd_alias_list_t | ❌ | ❌ | | | SndCurve | ✅ | ✅ | | @@ -132,7 +132,7 @@ The following section specify which assets are supported to be dumped to disk (u | XAnimParts | ❌ | ❌ | | | XModel | ✅ | ✅ | Model data can be exported to `XMODEL_EXPORT/XMODEL_BIN`, `OBJ`, `GLB/GLTF`. | | Material | ✅ | ✅ | | -| MaterialTechniqueSet | ❌ | ❌ | | +| MaterialTechniqueSet | ✅ | ❌ | For shaders: only dumps/loads shader bytecode. | | GfxImage | ✅ | ❌ | A few special image encodings are not yet supported. | | SndBank | ❌ | ❌ | | | SndPatch | ❌ | ❌ | | @@ -169,7 +169,7 @@ The following section specify which assets are supported to be dumped to disk (u | XAnimParts | ❌ | ❌ | | | XModel | ✅ | ✅ | Model data can be exported to `XMODEL_EXPORT/XMODEL_BIN`, `OBJ`, `GLB/GLTF`. | | Material | ✅ | ✅ | Dumping/Loading is currently possible for materials in their compiled form. There is currently no material pipeline. | -| MaterialTechniqueSet | ✅ | ❌ | Only dumps compiled shaders. | +| MaterialTechniqueSet | ✅ | ✅ | For shaders: only dumps/loads shader bytecode. | | GfxImage | ✅ | ✅ | A few special image encodings are not yet supported. | | SndBank | ✅ | ✅ | The current implementation is subject to change. | | SndPatch | ❌ | ❌ | |