diff --git a/src/Common/Game/IW4/IW4_Assets.h b/src/Common/Game/IW4/IW4_Assets.h index b8441597..f24b869f 100644 --- a/src/Common/Game/IW4/IW4_Assets.h +++ b/src/Common/Game/IW4/IW4_Assets.h @@ -1327,15 +1327,6 @@ namespace IW4 CUSTOM_SAMPLER_COUNT }; - struct CodeSamplerSource - { - const char* name; - MaterialTextureSource source; - CodeSamplerSource* subtable; - int arrayCount; - int arrayStride; - }; - enum MaterialType { MTL_TYPE_DEFAULT = 0x0, diff --git a/src/Common/Game/IW5/IW5.h b/src/Common/Game/IW5/IW5.h index 548842cc..38e6c7bc 100644 --- a/src/Common/Game/IW5/IW5.h +++ b/src/Common/Game/IW5/IW5.h @@ -237,6 +237,8 @@ namespace IW5 using AssetTracer = Asset; using AssetVehicle = Asset; using AssetAddonMapEnts = Asset; + + using SubAssetTechnique = SubAsset; } // namespace IW5 DEFINE_ASSET_NAME_ACCESSOR(IW5::AssetPhysPreset, name); diff --git a/src/Common/Game/IW5/IW5_Assets.h b/src/Common/Game/IW5/IW5_Assets.h index ac1d4571..647586f8 100644 --- a/src/Common/Game/IW5/IW5_Assets.h +++ b/src/Common/Game/IW5/IW5_Assets.h @@ -967,10 +967,261 @@ namespace IW5 MaterialVertexShaderProgram prog; }; + 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_SHADOWMAP_SUN = 0x6, + TEXTURE_SRC_CODE_SHADOWMAP_SPOT = 0x7, + TEXTURE_SRC_CODE_FEEDBACK = 0x8, + TEXTURE_SRC_CODE_RESOLVED_POST_SUN = 0x9, + TEXTURE_SRC_CODE_RESOLVED_SCENE = 0xA, + TEXTURE_SRC_CODE_POST_EFFECT_0 = 0xB, + TEXTURE_SRC_CODE_POST_EFFECT_1 = 0xC, + TEXTURE_SRC_CODE_LIGHT_ATTENUATION = 0xD, + TEXTURE_SRC_CODE_LIGHT_CUCOLORIS = 0xE, + TEXTURE_SRC_CODE_OUTDOOR = 0xF, + TEXTURE_SRC_CODE_FLOATZ = 0x10, + TEXTURE_SRC_CODE_PROCESSED_FLOATZ = 0x11, + TEXTURE_SRC_CODE_RAW_FLOATZ = 0x12, + TEXTURE_SRC_CODE_HALF_PARTICLES = 0x13, + TEXTURE_SRC_CODE_HALF_PARTICLES_Z = 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_PIP_SCENE = 0x1B, + TEXTURE_SRC_CODE_COLOR_MANIPULATION = 0x1C, + TEXTURE_SRC_CODE_STREAMING_LOADING = 0x1D, + + TEXTURE_SRC_CODE_COUNT + }; + + enum CustomSamplers + { + CUSTOM_SAMPLER_REFLECTION_PROBE = 0x0, + CUSTOM_SAMPLER_LIGHTMAP_PRIMARY = 0x1, + CUSTOM_SAMPLER_LIGHTMAP_SECONDARY = 0x2, + CUSTOM_SAMPLER_COUNT = 0x3, + }; + + enum MaterialConstantSource + { + CONST_SRC_CODE_MAYBE_DIRTY_PS_BEGIN = 0x0, + + CONST_SRC_CODE_LIGHT_POSITION = 0x0, + CONST_SRC_CODE_LIGHT_DIFFUSE = 0x1, + CONST_SRC_CODE_LIGHT_SPECULAR = 0x2, + CONST_SRC_CODE_LIGHT_SPOTDIR = 0x3, + CONST_SRC_CODE_LIGHT_SPOTFACTORS = 0x4, + CONST_SRC_CODE_LIGHT_FALLOFF_PLACEMENT = 0x5, + CONST_SRC_CODE_PARTICLE_CLOUD_COLOR = 0x6, + CONST_SRC_CODE_GAMETIME = 0x7, + CONST_SRC_CODE_EYEOFFSET = 0x8, + CONST_SRC_CODE_COLOR_SATURATION_R = 0x9, + CONST_SRC_CODE_COLOR_SATURATION_G = 0xA, + CONST_SRC_CODE_COLOR_SATURATION_B = 0xB, + + CONST_SRC_CODE_MAYBE_DIRTY_PS_END = 0xC, + CONST_SRC_CODE_ALWAYS_DIRTY_PS_BEGIN = 0xC, + + CONST_SRC_CODE_SSAO_PARMS = 0xC, + CONST_SRC_CODE_PIXEL_COST_FRACS = 0xD, + CONST_SRC_CODE_PIXEL_COST_DECODE = 0xE, + CONST_SRC_CODE_FILTER_TAP_0 = 0xF, + CONST_SRC_CODE_FILTER_TAP_1 = 0x10, + CONST_SRC_CODE_FILTER_TAP_2 = 0x11, + CONST_SRC_CODE_FILTER_TAP_3 = 0x12, + CONST_SRC_CODE_FILTER_TAP_4 = 0x13, + CONST_SRC_CODE_FILTER_TAP_5 = 0x14, + CONST_SRC_CODE_FILTER_TAP_6 = 0x15, + CONST_SRC_CODE_FILTER_TAP_7 = 0x16, + CONST_SRC_CODE_COLOR_MATRIX_R = 0x17, + CONST_SRC_CODE_COLOR_MATRIX_G = 0x18, + CONST_SRC_CODE_COLOR_MATRIX_B = 0x19, + CONST_SRC_CODE_SHADOWMAP_POLYGON_OFFSET = 0x1A, + CONST_SRC_CODE_RENDER_TARGET_SIZE = 0x1B, + CONST_SRC_CODE_RENDER_SOURCE_SIZE = 0x1C, + + CONST_SRC_CODE_ALWAYS_DIRTY_PS_END = 0x1D, + CONST_SRC_CODE_FIXED_PS_BEGIN = 0x1D, + + CONST_SRC_CODE_DOF_EQUATION_VIEWMODEL_AND_FAR_BLUR = 0x1D, + CONST_SRC_CODE_DOF_EQUATION_SCENE = 0x1E, + CONST_SRC_CODE_DOF_LERP_SCALE = 0x1F, + CONST_SRC_CODE_DOF_LERP_BIAS = 0x20, + CONST_SRC_CODE_DOF_ROW_DELTA = 0x21, + CONST_SRC_CODE_MOTION_MATRIX_X = 0x22, + CONST_SRC_CODE_MOTION_MATRIX_Y = 0x23, + CONST_SRC_CODE_MOTION_MATRIX_W = 0x24, + CONST_SRC_CODE_SHADOWMAP_SWITCH_PARTITION = 0x25, + CONST_SRC_CODE_SHADOWMAP_SCALE = 0x26, + CONST_SRC_CODE_ZNEAR = 0x27, + CONST_SRC_CODE_LIGHTING_LOOKUP_SCALE = 0x28, + CONST_SRC_CODE_DEBUG_BUMPMAP = 0x29, + CONST_SRC_CODE_MATERIAL_COLOR = 0x2A, + CONST_SRC_CODE_FOG = 0x2B, + CONST_SRC_CODE_FOG_COLOR_LINEAR = 0x2C, + CONST_SRC_CODE_FOG_COLOR_GAMMA = 0x2D, + CONST_SRC_CODE_FOG_SUN_CONSTS = 0x2E, + CONST_SRC_CODE_FOG_SUN_COLOR_LINEAR = 0x2F, + CONST_SRC_CODE_FOG_SUN_COLOR_GAMMA = 0x30, + CONST_SRC_CODE_FOG_SUN_DIR = 0x31, + CONST_SRC_CODE_GLOW_SETUP = 0x32, + CONST_SRC_CODE_GLOW_APPLY = 0x33, + CONST_SRC_CODE_COLOR_BIAS = 0x34, + CONST_SRC_CODE_COLOR_TINT_BASE = 0x35, + CONST_SRC_CODE_COLOR_TINT_DELTA = 0x36, + CONST_SRC_CODE_COLOR_TINT_QUADRATIC_DELTA = 0x37, + CONST_SRC_CODE_OUTDOOR_FEATHER_PARMS = 0x38, + CONST_SRC_CODE_ENVMAP_PARMS = 0x39, + CONST_SRC_CODE_SUN_SHADOWMAP_PIXEL_ADJUST = 0x3A, + CONST_SRC_CODE_SPOT_SHADOWMAP_PIXEL_ADJUST = 0x3B, + CONST_SRC_CODE_COMPOSITE_FX_DISTORTION = 0x3C, + CONST_SRC_CODE_POSTFX_FADE_EFFECT = 0x3D, + CONST_SRC_CODE_VIEWPORT_DIMENSIONS = 0x3E, + CONST_SRC_CODE_FRAMEBUFFER_READ = 0x3F, + CONST_SRC_CODE_THERMAL_COLOR_OFFSET = 0x40, + CONST_SRC_CODE_PLAYLIST_POPULATION_PARAMS = 0x41, + + CONST_SRC_CODE_FIXED_PS_END = 0x42, + CONST_SRC_CODE_NON_PS_BEGIN = 0x42, + + CONST_SRC_CODE_BASE_LIGHTING_COORDS = 0x42, + CONST_SRC_CODE_LIGHT_PROBE_AMBIENT = 0x43, + CONST_SRC_CODE_NEARPLANE_ORG = 0x44, + CONST_SRC_CODE_NEARPLANE_DX = 0x45, + CONST_SRC_CODE_NEARPLANE_DY = 0x46, + CONST_SRC_CODE_CLIP_SPACE_LOOKUP_SCALE = 0x47, + CONST_SRC_CODE_CLIP_SPACE_LOOKUP_OFFSET = 0x48, + CONST_SRC_CODE_PARTICLE_CLOUD_MATRIX0 = 0x49, + CONST_SRC_CODE_PARTICLE_CLOUD_MATRIX1 = 0x4A, + CONST_SRC_CODE_PARTICLE_CLOUD_MATRIX2 = 0x4B, + CONST_SRC_CODE_PARTICLE_CLOUD_SPARK_COLOR0 = 0x4C, + CONST_SRC_CODE_PARTICLE_CLOUD_SPARK_COLOR1 = 0x4D, + CONST_SRC_CODE_PARTICLE_CLOUD_SPARK_COLOR2 = 0x4E, + CONST_SRC_CODE_PARTICLE_FOUNTAIN_PARM0 = 0x4F, + CONST_SRC_CODE_PARTICLE_FOUNTAIN_PARM1 = 0x50, + CONST_SRC_CODE_DEPTH_FROM_CLIP = 0x51, + CONST_SRC_CODE_CODE_MESH_ARG_0 = 0x52, + CONST_SRC_CODE_CODE_MESH_ARG_1 = 0x53, + + CONST_SRC_CODE_CODE_MESH_ARG_LAST = 0x53, + CONST_SRC_CODE_NON_PS_END = 0x54, + CONST_SRC_CODE_COUNT_FLOAT4 = 0x54, + CONST_SRC_FIRST_CODE_MATRIX = 0x54, + + CONST_SRC_CODE_VIEW_MATRIX = 0x54, + CONST_SRC_CODE_INVERSE_VIEW_MATRIX = 0x55, + CONST_SRC_CODE_TRANSPOSE_VIEW_MATRIX = 0x56, + CONST_SRC_CODE_INVERSE_TRANSPOSE_VIEW_MATRIX = 0x57, + CONST_SRC_CODE_PROJECTION_MATRIX = 0x58, + CONST_SRC_CODE_INVERSE_PROJECTION_MATRIX = 0x59, + CONST_SRC_CODE_TRANSPOSE_PROJECTION_MATRIX = 0x5A, + CONST_SRC_CODE_INVERSE_TRANSPOSE_PROJECTION_MATRIX = 0x5B, + CONST_SRC_CODE_VIEW_PROJECTION_MATRIX = 0x5C, + CONST_SRC_CODE_INVERSE_VIEW_PROJECTION_MATRIX = 0x5D, + CONST_SRC_CODE_TRANSPOSE_VIEW_PROJECTION_MATRIX = 0x5E, + CONST_SRC_CODE_INVERSE_TRANSPOSE_VIEW_PROJECTION_MATRIX = 0x5F, + CONST_SRC_CODE_SHADOW_LOOKUP_MATRIX = 0x60, + CONST_SRC_CODE_INVERSE_SHADOW_LOOKUP_MATRIX = 0x61, + CONST_SRC_CODE_TRANSPOSE_SHADOW_LOOKUP_MATRIX = 0x62, + CONST_SRC_CODE_INVERSE_TRANSPOSE_SHADOW_LOOKUP_MATRIX = 0x63, + CONST_SRC_CODE_WORLD_OUTDOOR_LOOKUP_MATRIX = 0x64, + CONST_SRC_CODE_INVERSE_WORLD_OUTDOOR_LOOKUP_MATRIX = 0x65, + CONST_SRC_CODE_TRANSPOSE_WORLD_OUTDOOR_LOOKUP_MATRIX = 0x66, + CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_OUTDOOR_LOOKUP_MATRIX = 0x67, + CONST_SRC_CODE_WORLD_MATRIX0 = 0x68, + CONST_SRC_CODE_INVERSE_WORLD_MATRIX0 = 0x69, + CONST_SRC_CODE_TRANSPOSE_WORLD_MATRIX0 = 0x6A, + CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_MATRIX0 = 0x6B, + CONST_SRC_CODE_WORLD_VIEW_MATRIX0 = 0x6C, + CONST_SRC_CODE_INVERSE_WORLD_VIEW_MATRIX0 = 0x6D, + CONST_SRC_CODE_TRANSPOSE_WORLD_VIEW_MATRIX0 = 0x6E, + CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_VIEW_MATRIX0 = 0x6F, + CONST_SRC_CODE_WORLD_VIEW_PROJECTION_MATRIX0 = 0x70, + CONST_SRC_CODE_INVERSE_WORLD_VIEW_PROJECTION_MATRIX0 = 0x71, + CONST_SRC_CODE_TRANSPOSE_WORLD_VIEW_PROJECTION_MATRIX0 = 0x72, + CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_VIEW_PROJECTION_MATRIX0 = 0x73, + CONST_SRC_CODE_WORLD_MATRIX1 = 0x74, + CONST_SRC_CODE_INVERSE_WORLD_MATRIX1 = 0x75, + CONST_SRC_CODE_TRANSPOSE_WORLD_MATRIX1 = 0x76, + CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_MATRIX1 = 0x77, + CONST_SRC_CODE_WORLD_VIEW_MATRIX1 = 0x78, + CONST_SRC_CODE_INVERSE_WORLD_VIEW_MATRIX1 = 0x79, + CONST_SRC_CODE_TRANSPOSE_WORLD_VIEW_MATRIX1 = 0x7A, + CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_VIEW_MATRIX1 = 0x7B, + CONST_SRC_CODE_WORLD_VIEW_PROJECTION_MATRIX1 = 0x7C, + CONST_SRC_CODE_INVERSE_WORLD_VIEW_PROJECTION_MATRIX1 = 0x7D, + CONST_SRC_CODE_TRANSPOSE_WORLD_VIEW_PROJECTION_MATRIX1 = 0x7E, + CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_VIEW_PROJECTION_MATRIX1 = 0x7F, + CONST_SRC_CODE_WORLD_MATRIX2 = 0x80, + CONST_SRC_CODE_INVERSE_WORLD_MATRIX2 = 0x81, + CONST_SRC_CODE_TRANSPOSE_WORLD_MATRIX2 = 0x82, + CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_MATRIX2 = 0x83, + CONST_SRC_CODE_WORLD_VIEW_MATRIX2 = 0x84, + CONST_SRC_CODE_INVERSE_WORLD_VIEW_MATRIX2 = 0x85, + CONST_SRC_CODE_TRANSPOSE_WORLD_VIEW_MATRIX2 = 0x86, + CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_VIEW_MATRIX2 = 0x87, + CONST_SRC_CODE_WORLD_VIEW_PROJECTION_MATRIX2 = 0x88, + CONST_SRC_CODE_INVERSE_WORLD_VIEW_PROJECTION_MATRIX2 = 0x89, + CONST_SRC_CODE_TRANSPOSE_WORLD_VIEW_PROJECTION_MATRIX2 = 0x8A, + CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_VIEW_PROJECTION_MATRIX2 = 0x8B, + + CONST_SRC_TOTAL_COUNT, + CONST_SRC_NONE, + }; + + enum MaterialStreamStreamSource_e + { + STREAM_SRC_POSITION = 0x0, + 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_TEXCOORD_1 = 0x5, + STREAM_SRC_TEXCOORD_2 = 0x6, + STREAM_SRC_NORMAL_TRANSFORM_0 = 0x7, + STREAM_SRC_NORMAL_TRANSFORM_1 = 0x8, + + STREAM_SRC_COUNT + }; + + enum MaterialStreamDestination_e + { + STREAM_DST_POSITION = 0x0, + STREAM_DST_NORMAL = 0x1, + STREAM_DST_COLOR_0 = 0x2, + STREAM_DST_COLOR_1 = 0x3, + STREAM_DST_DEPTH = 0x4, + STREAM_DST_TEXCOORD_0 = 0x5, + STREAM_DST_TEXCOORD_1 = 0x6, + STREAM_DST_TEXCOORD_2 = 0x7, + STREAM_DST_TEXCOORD_3 = 0x8, + STREAM_DST_TEXCOORD_4 = 0x9, + STREAM_DST_TEXCOORD_5 = 0xA, + STREAM_DST_TEXCOORD_6 = 0xB, + STREAM_DST_TEXCOORD_7 = 0xC, + + STREAM_DST_COUNT + }; + struct MaterialStreamRouting { - char source; - char dest; + unsigned char source; + unsigned char dest; }; struct MaterialVertexStreamRouting @@ -993,11 +1244,15 @@ namespace IW5 MTL_ARG_LITERAL_VERTEX_CONST = 0x1, MTL_ARG_MATERIAL_VERTEX_SAMPLER = 0x2, MTL_ARG_MATERIAL_PIXEL_SAMPLER = 0x3, + MTL_ARG_CODE_PRIM_BEGIN = 0x4, + MTL_ARG_CODE_VERTEX_CONST = 0x4, MTL_ARG_CODE_PIXEL_SAMPLER = 0x5, MTL_ARG_CODE_PIXEL_CONST = 0x6, + MTL_ARG_CODE_PRIM_END = 0x7, + MTL_ARG_MATERIAL_PIXEL_CONST = 0x7, MTL_ARG_LITERAL_PIXEL_CONST = 0x8, @@ -1038,6 +1293,24 @@ namespace IW5 MaterialShaderArgument* args; }; + enum TechniqueFlags + { + MTL_TECHFLAG_NEEDS_RESOLVED_POST_SUN = 0x1, + MTL_TECHFLAG_NEEDS_RESOLVED_SCENE = 0x2, + + // These 3 are set so rare, it seems like they are just based on name just like other games do + MTL_TECHFLAG_ZPREPASS = 0x4, + MTL_TECHFLAG_BUILD_FLOATZ = 0x8, + MTL_TECHFLAG_BUILD_SHADOW_MAP_DEPTH_OR_MODEL = 0x10, + + MTL_TECHFLAG_DECL_HAS_OPTIONAL_SOURCE = 0x20, + + MTL_TECHFLAG_USES_LIGHT_SPOT_FACTORS = 0x40, + MTL_TECHFLAG_USES_FLOATZ = 0x80, // uses floatZ sampler and does not have 0x100 flag + MTL_TECHFLAG_USES_DISTORTION_FLOATZ = 0x100, // distortion_scale_zfeather_dtex + distortion_scale_ua_zfeather + distortion_scale_zfeather + TECHNIQUE_FLAG_200 = 0x200, // ? + }; + struct MaterialTechnique { const char* name; @@ -1046,6 +1319,73 @@ namespace IW5 MaterialPass passArray[1]; }; + enum MaterialTechniqueType + { + TECHNIQUE_DEPTH_PREPASS = 0x0, + TECHNIQUE_BUILD_FLOAT_Z = 0x1, + TECHNIQUE_BUILD_SHADOWMAP_DEPTH = 0x2, + TECHNIQUE_BUILD_SHADOWMAP_COLOR = 0x3, + TECHNIQUE_UNLIT = 0x4, + TECHNIQUE_EMISSIVE = 0x5, + TECHNIQUE_EMISSIVE_DFOG = 0x6, + TECHNIQUE_EMISSIVE_SHADOW = 0x7, + TECHNIQUE_EMISSIVE_SHADOW_DFOG = 0x8, + + TECHNIQUE_LIT_BEGIN = 0x9, + + TECHNIQUE_LIT = 0x9, + TECHNIQUE_LIT_DFOG = 0xA, + TECHNIQUE_LIT_SUN = 0xB, + TECHNIQUE_LIT_SUN_DFOG = 0xC, + TECHNIQUE_LIT_SUN_SHADOW = 0xD, + TECHNIQUE_LIT_SUN_SHADOW_DFOG = 0xE, + TECHNIQUE_LIT_SPOT = 0xF, + TECHNIQUE_LIT_SPOT_DFOG = 0x10, + TECHNIQUE_LIT_SPOT_SHADOW = 0x11, + TECHNIQUE_LIT_SPOT_SHADOW_DFOG = 0x12, + TECHNIQUE_LIT_SPOT_SHADOW_CUCOLORIS = 0x13, + TECHNIQUE_LIT_SPOT_SHADOW_CUCOLORIS_DFOG = 0x14, + TECHNIQUE_LIT_OMNI = 0x15, + TECHNIQUE_LIT_OMNI_DFOG = 0x16, + TECHNIQUE_LIT_OMNI_SHADOW = 0x17, + TECHNIQUE_LIT_OMNI_SHADOW_DFOG = 0x18, + + TECHNIQUE_LIT_INSTANCED = 0x19, + TECHNIQUE_LIT_INSTANCED_DFOG = 0x1A, + TECHNIQUE_LIT_INSTANCED_SUN = 0x1B, + TECHNIQUE_LIT_INSTANCED_SUN_DFOG = 0x1C, + TECHNIQUE_LIT_INSTANCED_SUN_SHADOW = 0x1D, + TECHNIQUE_LIT_INSTANCED_SUN_SHADOW_DFOG = 0x1E, + TECHNIQUE_LIT_INSTANCED_SPOT = 0x1F, + TECHNIQUE_LIT_INSTANCED_SPOT_DFOG = 0x20, + TECHNIQUE_LIT_INSTANCED_SPOT_SHADOW = 0x21, + TECHNIQUE_LIT_INSTANCED_SPOT_SHADOW_DFOG = 0x22, + TECHNIQUE_LIT_INSTANCED_SPOT_SHADOW_CUCOLORIS = 0x23, + TECHNIQUE_LIT_INSTANCED_SPOT_SHADOW_CUCOLORIS_DFOG = 0x24, + TECHNIQUE_LIT_INSTANCED_OMNI = 0x25, + TECHNIQUE_LIT_INSTANCED_OMNI_DFOG = 0x26, + TECHNIQUE_LIT_INSTANCED_OMNI_SHADOW = 0x27, + TECHNIQUE_LIT_INSTANCED_OMNI_SHADOW_DFOG = 0x28, + + TECHNIQUE_LIT_END = 0x29, + + TECHNIQUE_LIGHT_SPOT = 0x29, + TECHNIQUE_LIGHT_OMNI = 0x2A, + TECHNIQUE_LIGHT_SPOT_SHADOW = 0x2B, + TECHNIQUE_LIGHT_SPOT_SHADOW_CUCOLORIS = 0x2C, + TECHNIQUE_FAKELIGHT_NORMAL = 0x2D, + TECHNIQUE_FAKELIGHT_VIEW = 0x2E, + TECHNIQUE_SUNLIGHT_PREVIEW = 0x2F, + TECHNIQUE_CASE_TEXTURE = 0x30, + TECHNIQUE_WIREFRAME_SOLID = 0x31, + TECHNIQUE_WIREFRAME_SHADED = 0x32, + TECHNIQUE_THERMAL = 0x33, + TECHNIQUE_DEBUG_BUMPMAP = 0x34, + TECHNIQUE_DEBUG_BUMPMAP_INSTANCED = 0x35, + + TECHNIQUE_COUNT + }; + enum MaterialWorldVertexFormat : unsigned char { MTL_WORLDVERT_TEX_1_NRM_1 = 0x0, diff --git a/src/ObjCommon/Game/IW5/Techset/TechsetConstantsIW5.h b/src/ObjCommon/Game/IW5/Techset/TechsetConstantsIW5.h new file mode 100644 index 00000000..a4dfc487 --- /dev/null +++ b/src/ObjCommon/Game/IW5/Techset/TechsetConstantsIW5.h @@ -0,0 +1,1216 @@ +#pragma once + +#include "Game/IW5/IW5.h" +#include "Techset/CommonTechnique.h" +#include "Techset/CommonTechset.h" + +#include + +namespace IW5 +{ + static inline const char* techniqueTypeNames[]{ + "depth prepass", + "build floatz", + "build shadowmap depth", + "build shadowmap color", + "unlit", + "emissive", + "emissive dfog", + "emissive shadow", + "emissive shadow dfog", + "lit", + "lit dfog", + "lit sun", + "lit sun dfog", + "lit sun shadow", + "lit sun shadow dfog", + "lit spot", + "lit spot dfog", + "lit spot shadow", + "lit spot shadow dfog", + "lit spot shadow cucoloris", + "lit spot shadow cucoloris dfog", + "lit omni", + "lit omni dfog", + "lit omni shadow", + "lit omni shadow dfog", + "lit instanced", + "lit instanced dfog", + "lit instanced sun", + "lit instanced sun dfog", + "lit instanced sun shadow", + "lit instanced sun shadow dfog", + "lit instanced spot", + "lit instanced spot dfog", + "lit instanced spot shadow", + "lit instanced spot shadow dfog", + "lit instanced spot shadow cucoloris", + "lit instanced spot shadow cucoloris dfog", + "lit instanced omni", + "lit instanced omni dfog", + "lit instanced omni shadow", + "lit instanced omni shadow dfog", + "light spot", + "light omni", + "light spot shadow", + "light spot shadow cucoloris", + "fakelight normal", + "fakelight view", + "sunlight preview", + "case texture", + "solid wireframe", + "shaded wireframe", + "thermal", + "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 = "depth", + .abbreviation = "d", + }, + { + .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_LIGHT_FALLOFF_PLACEMENT, + .accessor = "lightFalloffPlacement", + .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_EYEOFFSET, + .accessor = "eyeOffset", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_COLOR_SATURATION_R, + .accessor = "colorSaturationR", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_COLOR_SATURATION_G, + .accessor = "colorSaturationG", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_COLOR_SATURATION_B, + .accessor = "colorSaturationB", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_SSAO_PARMS, + .accessor = "ssaoParms", + .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_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_RENDER_SOURCE_SIZE, + .accessor = "renderSourceSize", + .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_MOTION_MATRIX_X, + .accessor = "motionMatrixX", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_MOTION_MATRIX_Y, + .accessor = "motionMatrixY", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_MOTION_MATRIX_W, + .accessor = "motionMatrixW", + .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_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_LINEAR, + .accessor = "fogColorLinear", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_FOG_COLOR_GAMMA, + .accessor = "fogColorGamma", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_FOG_SUN_CONSTS, + .accessor = "fogSunConsts", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_FOG_SUN_COLOR_LINEAR, + .accessor = "fogSunColorLinear", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_FOG_SUN_COLOR_GAMMA, + .accessor = "fogSunColorGamma", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_FOG_SUN_DIR, + .accessor = "fogSunDir", + .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_COLOR_TINT_QUADRATIC_DELTA, + .accessor = "colorTintQuadraticDelta", + .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_SUN_SHADOWMAP_PIXEL_ADJUST, + .accessor = "sunShadowmapPixelAdjust", + .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_COMPOSITE_FX_DISTORTION, + .accessor = "fullscreenDistortion", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_POSTFX_FADE_EFFECT, + .accessor = "fadeEffect", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_VIEWPORT_DIMENSIONS, + .accessor = "viewportDimensions", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_FRAMEBUFFER_READ, + .accessor = "framebufferRead", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_THERMAL_COLOR_OFFSET, + .accessor = "thermalColorOffset", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_PLAYLIST_POPULATION_PARAMS, + .accessor = "playlistPopulationParams", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_BASE_LIGHTING_COORDS, + .accessor = "baseLightingCoords", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + }, + { + .value = CONST_SRC_CODE_LIGHT_PROBE_AMBIENT, + .accessor = "lightprobeAmbient", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + }, + { + .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_CLIP_SPACE_LOOKUP_SCALE, + .accessor = "clipSpaceLookupScale", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_CLIP_SPACE_LOOKUP_OFFSET, + .accessor = "clipSpaceLookupOffset", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = CONST_SRC_CODE_PARTICLE_CLOUD_MATRIX0, + .accessor = "particleCloudMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_OBJECT, + }, + { + .value = CONST_SRC_CODE_PARTICLE_CLOUD_MATRIX1, + .accessor = "particleCloudMatrix1", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_OBJECT, + }, + { + .value = CONST_SRC_CODE_PARTICLE_CLOUD_MATRIX2, + .accessor = "particleCloudMatrix2", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_OBJECT, + }, + { + .value = CONST_SRC_CODE_PARTICLE_CLOUD_SPARK_COLOR0, + .accessor = "particleCloudSparkColor0", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_OBJECT, + }, + { + .value = CONST_SRC_CODE_PARTICLE_CLOUD_SPARK_COLOR1, + .accessor = "particleCloudSparkColor1", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_OBJECT, + }, + { + .value = CONST_SRC_CODE_PARTICLE_CLOUD_SPARK_COLOR2, + .accessor = "particleCloudSparkColor2", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_OBJECT, + }, + { + .value = CONST_SRC_CODE_PARTICLE_FOUNTAIN_PARM0, + .accessor = "particleFountainParms0", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_OBJECT, + }, + { + .value = CONST_SRC_CODE_PARTICLE_FOUNTAIN_PARM1, + .accessor = "particleFountainParms1", + .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_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_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_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, + }, + { + .value = CONST_SRC_CODE_WORLD_MATRIX0, + .accessor = "worldMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_TRANSPOSE_WORLD_MATRIX0, + }, + { + .value = CONST_SRC_CODE_INVERSE_WORLD_MATRIX0, + .accessor = "inverseWorldMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_MATRIX0, + }, + { + .value = CONST_SRC_CODE_TRANSPOSE_WORLD_MATRIX0, + .accessor = "transposeWorldMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_WORLD_MATRIX0, + }, + { + .value = CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_MATRIX0, + .accessor = "inverseTransposeWorldMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_INVERSE_WORLD_MATRIX0, + }, + { + .value = CONST_SRC_CODE_WORLD_VIEW_MATRIX0, + .accessor = "worldViewMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_TRANSPOSE_WORLD_VIEW_MATRIX0, + }, + { + .value = CONST_SRC_CODE_INVERSE_WORLD_VIEW_MATRIX0, + .accessor = "inverseWorldViewMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_VIEW_MATRIX0, + }, + { + .value = CONST_SRC_CODE_TRANSPOSE_WORLD_VIEW_MATRIX0, + .accessor = "transposeWorldViewMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_WORLD_VIEW_MATRIX0, + }, + { + .value = CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_VIEW_MATRIX0, + .accessor = "inverseTransposeWorldViewMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_INVERSE_WORLD_VIEW_MATRIX0, + }, + { + .value = CONST_SRC_CODE_WORLD_VIEW_PROJECTION_MATRIX0, + .accessor = "worldViewProjectionMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_TRANSPOSE_WORLD_VIEW_PROJECTION_MATRIX0, + }, + { + .value = CONST_SRC_CODE_INVERSE_WORLD_VIEW_PROJECTION_MATRIX0, + .accessor = "inverseWorldViewProjectionMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_VIEW_PROJECTION_MATRIX0, + }, + { + .value = CONST_SRC_CODE_TRANSPOSE_WORLD_VIEW_PROJECTION_MATRIX0, + .accessor = "transposeWorldViewProjectionMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_WORLD_VIEW_PROJECTION_MATRIX0, + }, + { + .value = CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_VIEW_PROJECTION_MATRIX0, + .accessor = "inverseTransposeWorldViewProjectionMatrix", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_INVERSE_WORLD_VIEW_PROJECTION_MATRIX0, + }, + { + .value = CONST_SRC_CODE_WORLD_MATRIX1, + .accessor = "worldMatrix1", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_TRANSPOSE_WORLD_MATRIX1, + }, + { + .value = CONST_SRC_CODE_INVERSE_WORLD_MATRIX1, + .accessor = "inverseWorldMatrix1", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_MATRIX1, + }, + { + .value = CONST_SRC_CODE_TRANSPOSE_WORLD_MATRIX1, + .accessor = "transposeWorldMatrix1", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_WORLD_MATRIX1, + }, + { + .value = CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_MATRIX1, + .accessor = "inverseTransposeWorldMatrix1", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_INVERSE_WORLD_MATRIX1, + }, + { + .value = CONST_SRC_CODE_WORLD_VIEW_MATRIX1, + .accessor = "worldViewMatrix1", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_TRANSPOSE_WORLD_VIEW_MATRIX1, + }, + { + .value = CONST_SRC_CODE_INVERSE_WORLD_VIEW_MATRIX1, + .accessor = "inverseWorldViewMatrix1", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_VIEW_MATRIX1, + }, + { + .value = CONST_SRC_CODE_TRANSPOSE_WORLD_VIEW_MATRIX1, + .accessor = "transposeWorldViewMatrix1", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_WORLD_VIEW_MATRIX1, + }, + { + .value = CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_VIEW_MATRIX1, + .accessor = "inverseTransposeWorldViewMatrix1", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_INVERSE_WORLD_VIEW_MATRIX1, + }, + { + .value = CONST_SRC_CODE_WORLD_VIEW_PROJECTION_MATRIX1, + .accessor = "worldViewProjectionMatrix1", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_TRANSPOSE_WORLD_VIEW_PROJECTION_MATRIX1, + }, + { + .value = CONST_SRC_CODE_INVERSE_WORLD_VIEW_PROJECTION_MATRIX1, + .accessor = "inverseWorldViewProjectionMatrix1", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_VIEW_PROJECTION_MATRIX1, + }, + { + .value = CONST_SRC_CODE_TRANSPOSE_WORLD_VIEW_PROJECTION_MATRIX1, + .accessor = "transposeWorldViewProjectionMatrix1", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_WORLD_VIEW_PROJECTION_MATRIX1, + }, + { + .value = CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_VIEW_PROJECTION_MATRIX1, + .accessor = "inverseTransposeWorldViewProjectionMatrix1", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_INVERSE_WORLD_VIEW_PROJECTION_MATRIX1, + }, + { + .value = CONST_SRC_CODE_WORLD_MATRIX2, + .accessor = "worldMatrix2", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_TRANSPOSE_WORLD_MATRIX2, + }, + { + .value = CONST_SRC_CODE_INVERSE_WORLD_MATRIX2, + .accessor = "inverseWorldMatrix2", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_MATRIX2, + }, + { + .value = CONST_SRC_CODE_TRANSPOSE_WORLD_MATRIX2, + .accessor = "transposeWorldMatrix2", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_WORLD_MATRIX2, + }, + { + .value = CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_MATRIX2, + .accessor = "inverseTransposeWorldMatrix2", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_INVERSE_WORLD_MATRIX2, + }, + { + .value = CONST_SRC_CODE_WORLD_VIEW_MATRIX2, + .accessor = "worldViewMatrix2", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_TRANSPOSE_WORLD_VIEW_MATRIX2, + }, + { + .value = CONST_SRC_CODE_INVERSE_WORLD_VIEW_MATRIX2, + .accessor = "inverseWorldViewMatrix2", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_VIEW_MATRIX2, + }, + { + .value = CONST_SRC_CODE_TRANSPOSE_WORLD_VIEW_MATRIX2, + .accessor = "transposeWorldViewMatrix2", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_WORLD_VIEW_MATRIX2, + }, + { + .value = CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_VIEW_MATRIX2, + .accessor = "inverseTransposeWorldViewMatrix2", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_INVERSE_WORLD_VIEW_MATRIX2, + }, + { + .value = CONST_SRC_CODE_WORLD_VIEW_PROJECTION_MATRIX2, + .accessor = "worldViewProjectionMatrix2", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_TRANSPOSE_WORLD_VIEW_PROJECTION_MATRIX2, + }, + { + .value = CONST_SRC_CODE_INVERSE_WORLD_VIEW_PROJECTION_MATRIX2, + .accessor = "inverseWorldViewProjectionMatrix2", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_VIEW_PROJECTION_MATRIX2, + }, + { + .value = CONST_SRC_CODE_TRANSPOSE_WORLD_VIEW_PROJECTION_MATRIX2, + .accessor = "transposeWorldViewProjectionMatrix2", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_WORLD_VIEW_PROJECTION_MATRIX2, + }, + { + .value = CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_VIEW_PROJECTION_MATRIX2, + .accessor = "inverseTransposeWorldViewProjectionMatrix2", + .arrayCount = 0, + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_PRIM, + .transposedMatrix = CONST_SRC_CODE_INVERSE_WORLD_VIEW_PROJECTION_MATRIX2, + }, + }; + + 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_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, + .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, + .accessor = "postEffect0", + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = TEXTURE_SRC_CODE_POST_EFFECT_1, + .accessor = "postEffect1", + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = TEXTURE_SRC_CODE_LIGHT_ATTENUATION, + .accessor = "attenuationSampler", + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::PER_OBJECT, + }, + { + .value = TEXTURE_SRC_CODE_LIGHT_CUCOLORIS, + .accessor = "cucolorisSampler", + .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_HALF_PARTICLES, + .accessor = "halfParticleColorSampler", + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .value = TEXTURE_SRC_CODE_HALF_PARTICLES_Z, + .accessor = "halfParticleDepthSampler", + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, + }, + { + .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, + }, + { + .value = TEXTURE_SRC_CODE_PIP_SCENE, + .accessor = "pipSceneSampler", + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, // ? + }, + { + .value = TEXTURE_SRC_CODE_COLOR_MANIPULATION, + .accessor = "colorManipulationSampler", + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, // ? + }, + { + .value = TEXTURE_SRC_CODE_STREAMING_LOADING, + .accessor = "ssaoSampler", + .updateFrequency = techset::CommonCodeSourceUpdateFrequency::RARELY, // ? + }, + }; + + // 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::VERTEX, .m_value_type = techset::CommonShaderValueType::MATERIAL_SAMPLER}, + {.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); + +} // namespace IW5 diff --git a/src/ObjCommon/Techset/CommonTechnique.h b/src/ObjCommon/Techset/CommonTechnique.h index 3f2153a5..e0a8ac66 100644 --- a/src/ObjCommon/Techset/CommonTechnique.h +++ b/src/ObjCommon/Techset/CommonTechnique.h @@ -33,7 +33,9 @@ namespace techset enum class CommonTechniqueShaderType : std::uint8_t { VERTEX, - PIXEL + PIXEL, + + COUNT }; enum class CommonShaderValueType : std::uint8_t @@ -47,7 +49,9 @@ namespace techset // Value is set to a sampler from the material MATERIAL_SAMPLER, // Value is set to a sampler generated in code - CODE_SAMPLER + CODE_SAMPLER, + + COUNT }; constexpr bool IsConstValueType(const CommonShaderValueType valueType) diff --git a/src/ObjCompiling/Game/IW5/ObjCompilerIW5.cpp b/src/ObjCompiling/Game/IW5/ObjCompilerIW5.cpp index 5f9e9bf9..5a6ba6d3 100644 --- a/src/ObjCompiling/Game/IW5/ObjCompilerIW5.cpp +++ b/src/ObjCompiling/Game/IW5/ObjCompilerIW5.cpp @@ -1,6 +1,9 @@ #include "ObjCompilerIW5.h" #include "Game/IW5/IW5.h" +#include "Game/IW5/Techset/TechniqueCompilerIW5.h" +#include "Game/IW5/Techset/TechsetCompilerIW5.h" +#include "Game/IW5/Techset/VertexDeclCompilerIW5.h" #include "Image/ImageIwdPostProcessor.h" #include @@ -13,7 +16,10 @@ namespace { auto& memory = zone.Memory(); - // No compilers yet + collection.AddAssetCreator(techset::CreateVertexDeclCompilerIW5(memory)); + collection.AddAssetCreator(techset::CreateTechsetCompilerIW5(memory, searchPath)); + + collection.AddSubAssetCreator(techset::CreateTechniqueCompilerIW5(memory, zone, searchPath)); } 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/CommonShaderArgCreator.cpp b/src/ObjCompiling/Techset/CommonShaderArgCreator.cpp index 87ae4f3e..e277b578 100644 --- a/src/ObjCompiling/Techset/CommonShaderArgCreator.cpp +++ b/src/ObjCompiling/Techset/CommonShaderArgCreator.cpp @@ -12,6 +12,16 @@ namespace { + enum class ArgumentType : std::uint8_t + { + VERTEX_CONSTANT, + VERTEX_SAMPLER, + PIXEL_CONSTANT, + PIXEL_SAMPLER, + + COUNT + }; + const char* ShaderTypeName(const techset::CommonTechniqueShaderType shaderType) { switch (shaderType) @@ -20,6 +30,9 @@ namespace return "vertex"; case techset::CommonTechniqueShaderType::PIXEL: return "pixel"; + case techset::CommonTechniqueShaderType::COUNT: + assert(false); + break; } return ""; @@ -36,6 +49,9 @@ namespace case techset::CommonShaderValueType::CODE_SAMPLER: case techset::CommonShaderValueType::MATERIAL_SAMPLER: return "sampler"; + case techset::CommonShaderValueType::COUNT: + assert(false); + break; } return ""; @@ -47,11 +63,13 @@ namespace explicit BaseCommonShaderArgCreator(techset::ITechniqueShaderLoader& shaderLoader, techset::CommonCodeSourceInfos& commonCodeSourceInfos) : m_shader_loader(shaderLoader), m_common_code_source_infos(commonCodeSourceInfos), + m_supported_argument_types(0), m_shader_type(techset::CommonTechniqueShaderType::VERTEX), m_bin{}, m_tech_flags(0), m_sampler_flags(0) { + DetermineSupportedArgumentTypes(); } result::Expected EnterShader(const techset::CommonTechniqueShaderType shaderType, const std::string& name) override @@ -307,21 +325,36 @@ namespace return NoResult{}; } - static bool IsArgumentTypeSupported(const techset::CommonShaderArgumentType& argumentType) + [[nodiscard]] bool IsArgumentTypeSupported(const techset::CommonShaderArgumentType& argumentType) const { - if (argumentType.m_shader_type == techset::CommonTechniqueShaderType::PIXEL) - return true; + const auto mask = 1 << (std::to_underlying(argumentType.m_shader_type) * std::to_underlying(techset::CommonShaderValueType::COUNT) + + std::to_underlying(argumentType.m_value_type)); - switch (argumentType.m_value_type) + return m_supported_argument_types & mask; + } + + void DetermineSupportedArgumentTypes() + { + // Ensure we have enough bits for the flags + static_assert(std::to_underlying(techset::CommonTechniqueShaderType::COUNT) * std::to_underlying(techset::CommonShaderValueType::COUNT) + <= sizeof(m_supported_argument_types) * 8); + + m_supported_argument_types = 0; + for (auto shaderType = 0u; shaderType < std::to_underlying(techset::CommonTechniqueShaderType::COUNT); shaderType++) { - case techset::CommonShaderValueType::LITERAL_CONST: - case techset::CommonShaderValueType::MATERIAL_CONST: - case techset::CommonShaderValueType::CODE_CONST: - return true; - case techset::CommonShaderValueType::MATERIAL_SAMPLER: - case techset::CommonShaderValueType::CODE_SAMPLER: - default: - return false; + for (auto valueType = 0u; valueType < std::to_underlying(techset::CommonShaderValueType::COUNT); valueType++) + { + techset::CommonShaderArgumentType argumentType{ + .m_shader_type = static_cast(shaderType), + .m_value_type = static_cast(valueType), + }; + + if (m_common_code_source_infos.GetArgumentTypeNumericValue(argumentType).has_value()) + { + const auto flag = 1 << (shaderType * std::to_underlying(techset::CommonShaderValueType::COUNT) + valueType); + m_supported_argument_types |= flag; + } + } } } @@ -340,6 +373,7 @@ namespace techset::ITechniqueShaderLoader& m_shader_loader; techset::CommonCodeSourceInfos& m_common_code_source_infos; + std::uint16_t m_supported_argument_types; techset::CommonTechniqueShaderType m_shader_type; std::string m_shader_name; diff --git a/src/ObjCompiling/Techset/TechniqueCompiler.cpp.template b/src/ObjCompiling/Techset/TechniqueCompiler.cpp.template index 7728ac01..ef5a954e 100644 --- a/src/ObjCompiling/Techset/TechniqueCompiler.cpp.template +++ b/src/ObjCompiling/Techset/TechniqueCompiler.cpp.template @@ -1,4 +1,4 @@ -#options GAME(IW3, IW4, T5, T6) +#options GAME(IW3, IW4, IW5, T5, T6) #filename "Game/" + GAME + "/Techset/TechniqueCompiler" + GAME + ".cpp" @@ -70,6 +70,9 @@ namespace case techset::CommonShaderValueType::CODE_CONST: return MTL_ARG_CODE_VERTEX_CONST; case techset::CommonShaderValueType::MATERIAL_SAMPLER: +#if defined(FEATURE_IW5) + return MTL_ARG_MATERIAL_VERTEX_SAMPLER; +#endif case techset::CommonShaderValueType::CODE_SAMPLER: default: assert(false); @@ -119,6 +122,9 @@ namespace case techset::CommonShaderValueType::MATERIAL_SAMPLER: argValue.nameHash = static_cast(commonArg.m_value.name_hash); break; + case techset::CommonShaderValueType::COUNT: + assert(false); + break; } } @@ -213,7 +219,7 @@ namespace pass.customSamplerFlags = static_cast(commonPass.m_sampler_flags); } -#ifdef FEATURE_IW4 +#if defined(FEATURE_IW4) || defined(FEATURE_IW5) // Not sure if this is actually how this is calculated. // It produces identical results at least though. constexpr MaterialConstantSource ALLOWED_PIXEL_CONSTANTS_FOR_FLAG_200[]{ @@ -282,7 +288,7 @@ namespace #if defined(FEATURE_IW3) if (lowerTechniqueName == "zprepass") technique.flags |= MTL_TECHFLAG_ZPREPASS; -#elif defined(FEATURE_IW4) +#elif defined(FEATURE_IW4) || defined(FEATURE_IW5) // Not a particularly cool way to do this but... // the game actually does this :shrug: if (lowerTechniqueName == "zprepass") diff --git a/src/ObjCompiling/Techset/TechniqueCompiler.h.template b/src/ObjCompiling/Techset/TechniqueCompiler.h.template index b299555e..3b792279 100644 --- a/src/ObjCompiling/Techset/TechniqueCompiler.h.template +++ b/src/ObjCompiling/Techset/TechniqueCompiler.h.template @@ -1,4 +1,4 @@ -#options GAME(IW3, IW4, T5, T6) +#options GAME(IW3, IW4, IW5, T5, 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 74d49327..25b26872 100644 --- a/src/ObjCompiling/Techset/TechsetCompiler.cpp.template +++ b/src/ObjCompiling/Techset/TechsetCompiler.cpp.template @@ -1,4 +1,4 @@ -#options GAME(IW3, IW4, T5, T6) +#options GAME(IW3, IW4, IW5, T5, 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 0bc5dc42..e1eb61f6 100644 --- a/src/ObjCompiling/Techset/TechsetCompiler.h.template +++ b/src/ObjCompiling/Techset/TechsetCompiler.h.template @@ -1,4 +1,4 @@ -#options GAME(IW3, IW4, T5, T6) +#options GAME(IW3, IW4, IW5, T5, 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 4413cd01..23c9e77f 100644 --- a/src/ObjCompiling/Techset/VertexDeclCompiler.cpp.template +++ b/src/ObjCompiling/Techset/VertexDeclCompiler.cpp.template @@ -1,4 +1,4 @@ -#options GAME(IW3, IW4, T5, T6) +#options GAME(IW3, IW4, IW5, T5, T6) #filename "Game/" + GAME + "/Techset/VertexDeclCompiler" + GAME + ".cpp" diff --git a/src/ObjCompiling/Techset/VertexDeclCompiler.h.template b/src/ObjCompiling/Techset/VertexDeclCompiler.h.template index 05341b40..e7272138 100644 --- a/src/ObjCompiling/Techset/VertexDeclCompiler.h.template +++ b/src/ObjCompiling/Techset/VertexDeclCompiler.h.template @@ -1,4 +1,4 @@ -#options GAME(IW3, IW4, T5, T6) +#options GAME(IW3, IW4, IW5, T5, T6) #filename "Game/" + GAME + "/Techset/VertexDeclCompiler" + GAME + ".h" diff --git a/src/ObjLoading/Game/IW5/ObjLoaderIW5.cpp b/src/ObjLoading/Game/IW5/ObjLoaderIW5.cpp index 439d1b0c..59a936c8 100644 --- a/src/ObjLoading/Game/IW5/ObjLoaderIW5.cpp +++ b/src/ObjLoading/Game/IW5/ObjLoaderIW5.cpp @@ -6,6 +6,8 @@ #include "Game/IW5/IW5.h" #include "Game/IW5/Image/ImageLoaderEmbeddedIW5.h" #include "Game/IW5/Image/ImageLoaderExternalIW5.h" +#include "Game/IW5/Techset/PixelShaderLoaderIW5.h" +#include "Game/IW5/Techset/VertexShaderLoaderIW5.h" #include "Game/IW5/XModel/LoaderXModelIW5.h" #include "Leaderboard/LoaderLeaderboardIW5.h" #include "Localize/LoaderLocalizeIW5.h" @@ -129,9 +131,8 @@ namespace // collection.AddAssetCreator(std::make_unique(memory)); collection.AddAssetCreator(xmodel::CreateLoaderIW5(memory, searchPath, zone)); collection.AddAssetCreator(material::CreateLoaderIW5(memory, searchPath)); - // collection.AddAssetCreator(std::make_unique(memory)); - // collection.AddAssetCreator(std::make_unique(memory)); - // collection.AddAssetCreator(std::make_unique(memory)); + collection.AddAssetCreator(techset::CreateVertexShaderLoaderIW5(memory, searchPath)); + collection.AddAssetCreator(techset::CreatePixelShaderLoaderIW5(memory, searchPath)); // collection.AddAssetCreator(std::make_unique(memory)); collection.AddAssetCreator(image::CreateLoaderEmbeddedIW5(memory, searchPath)); collection.AddAssetCreator(image::CreateLoaderExternalIW5(memory, searchPath)); diff --git a/src/ObjLoading/Techset/PixelShaderLoader.cpp.template b/src/ObjLoading/Techset/PixelShaderLoader.cpp.template index 7cb348bc..fc86ef17 100644 --- a/src/ObjLoading/Techset/PixelShaderLoader.cpp.template +++ b/src/ObjLoading/Techset/PixelShaderLoader.cpp.template @@ -1,4 +1,4 @@ -#options GAME(IW3, IW4, T5, T6) +#options GAME(IW3, IW4, IW5, T5, T6) #filename "Game/" + GAME + "/Techset/PixelShaderLoader" + GAME + ".cpp" diff --git a/src/ObjLoading/Techset/PixelShaderLoader.h.template b/src/ObjLoading/Techset/PixelShaderLoader.h.template index 8acc4180..90b4c6c2 100644 --- a/src/ObjLoading/Techset/PixelShaderLoader.h.template +++ b/src/ObjLoading/Techset/PixelShaderLoader.h.template @@ -1,4 +1,4 @@ -#options GAME(IW3, IW4, T5, T6) +#options GAME(IW3, IW4, IW5, T5, T6) #filename "Game/" + GAME + "/Techset/PixelShaderLoader" + GAME + ".h" diff --git a/src/ObjLoading/Techset/VertexShaderLoader.cpp.template b/src/ObjLoading/Techset/VertexShaderLoader.cpp.template index 671f478a..e3f1d10d 100644 --- a/src/ObjLoading/Techset/VertexShaderLoader.cpp.template +++ b/src/ObjLoading/Techset/VertexShaderLoader.cpp.template @@ -1,4 +1,4 @@ -#options GAME(IW3, IW4, T5, T6) +#options GAME(IW3, IW4, IW5, T5, T6) #filename "Game/" + GAME + "/Techset/VertexShaderLoader" + GAME + ".cpp" diff --git a/src/ObjLoading/Techset/VertexShaderLoader.h.template b/src/ObjLoading/Techset/VertexShaderLoader.h.template index 0bddf735..fc353afc 100644 --- a/src/ObjLoading/Techset/VertexShaderLoader.h.template +++ b/src/ObjLoading/Techset/VertexShaderLoader.h.template @@ -1,4 +1,4 @@ -#options GAME(IW3, IW4, T5, T6) +#options GAME(IW3, IW4, IW5, T5, T6) #filename "Game/" + GAME + "/Techset/VertexShaderLoader" + GAME + ".h" diff --git a/src/ObjWriting/Game/IW5/Material/MaterialConstantZoneStateIW5.cpp b/src/ObjWriting/Game/IW5/Material/MaterialConstantZoneStateIW5.cpp index ba5537ee..d090f4b5 100644 --- a/src/ObjWriting/Game/IW5/Material/MaterialConstantZoneStateIW5.cpp +++ b/src/ObjWriting/Game/IW5/Material/MaterialConstantZoneStateIW5.cpp @@ -140,6 +140,7 @@ namespace "detailMap", "detailMapSampler", "dust", + "dustMap", "dustSampler", "fadeMap", "fadeMapSampler", @@ -160,22 +161,30 @@ namespace "lookupMap", "lookupMapSampler", "modelLighting", + "modelLightingMap", "modelLightingSampler", "normalMap", "normalMapSampler", "oceanColorRamp", + "oceanColorRampMap", "oceanColorRampSampler", "oceanDetailNormal", + "oceanDetailNormalMap", "oceanDetailNormalSampler", "oceanDisplacement", + "oceanDisplacementMap", "oceanDisplacementSampler", "oceanEnv", + "oceanEnvMap", "oceanEnvSampler", "oceanFoam", + "oceanFoamMap", "oceanFoamSampler", "oceanHeightNormal", + "oceanHeightNormalMap", "oceanHeightNormalSampler", "oceanPaintedFoam", + "oceanPaintedFoamMap", "oceanPaintedFoamSampler", "outdoorMap", "outdoorMapSampler", diff --git a/src/ObjWriting/Game/IW5/ObjWriterIW5.cpp b/src/ObjWriting/Game/IW5/ObjWriterIW5.cpp index 9e99e403..74a3bcdd 100644 --- a/src/ObjWriting/Game/IW5/ObjWriterIW5.cpp +++ b/src/ObjWriting/Game/IW5/ObjWriterIW5.cpp @@ -1,6 +1,9 @@ #include "ObjWriterIW5.h" #include "Game/IW5/Material/MaterialJsonDumperIW5.h" +#include "Game/IW5/Techset/PixelShaderDumperIW5.h" +#include "Game/IW5/Techset/TechsetDumperIW5.h" +#include "Game/IW5/Techset/VertexShaderDumperIW5.h" #include "Game/IW5/XModel/XModelDumperIW5.h" #include "Image/ImageDumperIW5.h" #include "Leaderboard/LeaderboardJsonDumperIW5.h" @@ -25,10 +28,15 @@ void ObjWriter::RegisterAssetDumpers(AssetDumpingContext& context) // REGISTER_DUMPER(AssetDumperXModelSurfs) RegisterAssetDumper(std::make_unique()); RegisterAssetDumper(std::make_unique()); - // REGISTER_DUMPER(AssetDumperMaterialPixelShader) - // REGISTER_DUMPER(AssetDumperMaterialVertexShader) - // REGISTER_DUMPER(AssetDumperMaterialVertexDeclaration) - // REGISTER_DUMPER(AssetDumperMaterialTechniqueSet) + RegisterAssetDumper(std::make_unique()); + RegisterAssetDumper(std::make_unique()); + 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 ac1f2fde..e0edf256 100644 --- a/src/ObjWriting/Techset/PixelShaderDumper.cpp.template +++ b/src/ObjWriting/Techset/PixelShaderDumper.cpp.template @@ -1,4 +1,4 @@ -#options GAME(IW4) +#options GAME(IW4, IW5) #filename "Game/" + GAME + "/Techset/PixelShaderDumper" + GAME + ".cpp" diff --git a/src/ObjWriting/Techset/PixelShaderDumper.h.template b/src/ObjWriting/Techset/PixelShaderDumper.h.template index f0d7326a..9bad7838 100644 --- a/src/ObjWriting/Techset/PixelShaderDumper.h.template +++ b/src/ObjWriting/Techset/PixelShaderDumper.h.template @@ -1,4 +1,4 @@ -#options GAME(IW4) +#options GAME(IW4, IW5) #filename "Game/" + GAME + "/Techset/PixelShaderDumper" + GAME + ".h" diff --git a/src/ObjWriting/Techset/TechsetDumper.cpp.template b/src/ObjWriting/Techset/TechsetDumper.cpp.template index 9bc7ba7c..397cac2a 100644 --- a/src/ObjWriting/Techset/TechsetDumper.cpp.template +++ b/src/ObjWriting/Techset/TechsetDumper.cpp.template @@ -1,4 +1,4 @@ -#options GAME(IW3, IW4, T5, T6) +#options GAME(IW3, IW4, IW5, T5, T6) #filename "Game/" + GAME + "/Techset/TechsetDumper" + GAME + ".cpp" @@ -110,7 +110,7 @@ namespace { std::vector commonRouting; -#if defined(FEATURE_IW4) +#if defined(FEATURE_IW4) || defined(FEATURE_IW5) if (vertexDecl && vertexDecl->name && vertexDecl->name[0] != ',') #else if (vertexDecl) @@ -124,7 +124,7 @@ namespace static_cast(routing.dest)); } } -#if defined(FEATURE_IW4) +#if defined(FEATURE_IW4) || defined(FEATURE_IW5) else if (vertexDecl && vertexDecl->name) { auto result = techset::CreateVertexDeclFromName(&vertexDecl->name[1], commonRoutingInfos); @@ -213,6 +213,9 @@ namespace return techset::CommonShaderArg(commonArgumentTypes[arg.type], destination, value); } +#if defined(FEATURE_IW5) + case MTL_ARG_MATERIAL_VERTEX_SAMPLER: +#endif case MTL_ARG_MATERIAL_PIXEL_SAMPLER: { const techset::CommonShaderArgValue value{ @@ -235,7 +238,6 @@ namespace return techset::CommonShaderArg(commonArgumentTypes[arg.type], destination, value); } - default: case MTL_ARG_LITERAL_VERTEX_CONST: case MTL_ARG_LITERAL_PIXEL_CONST: { @@ -265,15 +267,19 @@ namespace return techset::CommonShaderArg(commonArgumentTypes[arg.type], destination, value); } + + default: + assert(false); + return techset::CommonShaderArg(); } } techset::CommonTechniqueShader ConvertToCommonShader(const MaterialVertexShader* vertexShader) { -#if defined(FEATURE_IW4) +#if defined(FEATURE_IW4) || defined(FEATURE_IW5) if (vertexShader && vertexShader->name && vertexShader->name[0] == ',') { - auto* globalAsset = GameGlobalAssetPools::GetGlobalPoolsForGame(GameId::IW4)->GetAsset(&vertexShader->name[1]); + auto* globalAsset = GameGlobalAssetPools::GetGlobalPoolsForGame(GameId::GAME)->GetAsset(&vertexShader->name[1]); if (globalAsset) vertexShader = globalAsset->Asset(); } @@ -303,10 +309,10 @@ namespace techset::CommonTechniqueShader ConvertToCommonShader(const MaterialPixelShader* pixelShader) { -#if defined(FEATURE_IW4) +#if defined(FEATURE_IW4) || defined(FEATURE_IW5) if (pixelShader && pixelShader->name && pixelShader->name[0] == ',') { - auto* globalAsset = GameGlobalAssetPools::GetGlobalPoolsForGame(GameId::IW4)->GetAsset(&pixelShader->name[1]); + auto* globalAsset = GameGlobalAssetPools::GetGlobalPoolsForGame(GameId::GAME)->GetAsset(&pixelShader->name[1]); if (globalAsset) pixelShader = globalAsset->Asset(); } diff --git a/src/ObjWriting/Techset/TechsetDumper.h.template b/src/ObjWriting/Techset/TechsetDumper.h.template index f8eeb69b..645b9154 100644 --- a/src/ObjWriting/Techset/TechsetDumper.h.template +++ b/src/ObjWriting/Techset/TechsetDumper.h.template @@ -1,4 +1,4 @@ -#options GAME(IW3, IW4, T5, T6) +#options GAME(IW3, IW4, IW5, T5, 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 66c408f9..df5c13a8 100644 --- a/src/ObjWriting/Techset/VertexShaderDumper.cpp.template +++ b/src/ObjWriting/Techset/VertexShaderDumper.cpp.template @@ -1,4 +1,4 @@ -#options GAME(IW4) +#options GAME(IW4, IW5) #filename "Game/" + GAME + "/Techset/VertexShaderDumper" + GAME + ".cpp" diff --git a/src/ObjWriting/Techset/VertexShaderDumper.h.template b/src/ObjWriting/Techset/VertexShaderDumper.h.template index 363bfb22..08b956e4 100644 --- a/src/ObjWriting/Techset/VertexShaderDumper.h.template +++ b/src/ObjWriting/Techset/VertexShaderDumper.h.template @@ -1,4 +1,4 @@ -#options GAME(IW4) +#options GAME(IW4, IW5) #filename "Game/" + GAME + "/Techset/VertexShaderDumper" + GAME + ".h"