Files
2026-10-16 08:32:51 +02:00

168 lines
15 KiB
C

#pragma once
#include <stdint.h>
// Model PS (ps_model.s) for OBJ / STL / PLY props, drawn with vs_model.
// Frame: N = normalize(normal), T = normalize(tangent - N (N.T)), B = handedness *
// cross(N, T) (attr2 = tangent xyz, handedness; tangent.h in the loaders).
// Parallax occlusion mapping, 16 layers, on the model height map (T# desc[136],
// S# desc[100]), height = h * desc[145] + desc[146], UV step = Vt.xy /
// max(Vt.z, 0.1) * desc[144] / 16, linear refinement.
// Relief self-shadow: 8 steps from the parallax hit toward the light in tangent
// space; occlusion = max(h(uv_k) - ray height), relief = 1 - desc[147] *
// clamp(4 * occlusion, 0, 1).
// Normal map (T# desc[128], S# desc[8]) with signs desc[148..149].
// Shadow map at world + N * desc[150], depth - desc[151] (8-bit shadow map).
// lit = 0.0707 + 0.9293 * max(0, n.L) * shadow * relief (shadow and relief
// darken the direct light only), x albedo (desc[0]) x light colour (desc[32]).
// Satin finish (desc[152..157]): sun specular GGX D = a2 / (pi t^2), t = (N.H)^2
// (a2 - 1) + 1, Schlick-Smith visibility 1 / (4 (N.L (1-k) + k) (N.V (1-k) + k)),
// Fresnel desc[154] + desc[155] (1 - V.H)^5, times pi (the diffuse convention),
// N.L, |L|, shadow, relief and the light colour; environment reflection times
// F = desc[156] + desc[157] (1 - N.V)^5, R = reflect(-V, N): sky = horizon desc[28] +
// (zenith desc[24] - horizon) clamp(R.y, 0, 1); below the horizon the floor desc[160..162]
// (ps_floor's lighting x the floor's average albedo): env = ground + (sky - ground) b,
// b = smoothstep(clamp(R.y desc[158] + 0.5, 0, 1)), desc[158] = 1 / (2a). Energy
// balance: the diffuse light x (1 - F). desc[152] = a^2, desc[153] = k = a / 2
// (a = roughness^2). With desc[154..157] = 0 the output is bit-identical to the shader
// without the satin finish.
// Fog as ps_shader / ps_floor.
// With every feature off the output is bit-identical to ps_shader without fog
// (float32 emulation). Inputs: attr0..2, PERSP_CENTER + POS_Y_FLOAT (v2).
// Normal map: BC5 (x, y); z = sqrt(max(0, 1 - x^2 - y^2)) (an RGB map gives the same
// result for unit normals).
// POM LOD fade (Tatarchuk, DirectX SDK ParallaxOcclusionMapping): image_get_lod of the height
// map at the base UV (isotropic sampler) gives the mip level L; the parallax (and the model's
// relief self-shadow) is scaled by clamp(3 - max(L, 0), 0, 1): full up to mip 2, gone by mip 3,
// where layer stepping would be sub-pixel and alias. Fade 1 = bit-identical to before.
// Bilinear PCF shadows: the 2 x 2 shadow-map texels around the sample point, read with a point
// sampler at their centres (4096^2 map), each compared with the reference (lit unless stored < ref)
// and blended by the fractional position (a one-texel ramp instead of a hard step). A uniform
// shadow map gives output bit-identical to the single-compare version.
// Geometric specular AA (Tokuyoshi & Kaplanyan, JCGT 10(2) 2021, Listing 5): GGX alpha^2' =
// saturate(alpha^2 + min(2 * 0.15915494 * (|dN/dx|^2 + |dN/dy|^2), 0.18)), k' = sqrt(alpha^2') / 2,
// from coarse quad derivatives of the shading normal (ds_swizzle_b32 quad-perm, M0 = -1 as LLVM
// does for DS ops before GFX9; WQM keeps helper lanes valid). Flat quads = bit-identical to before.
// PGM_RSRC1 0x31C (116 VGPRs, 102 SGPRs incl. VCC). Hash CAFE0138.
static const uint32_t ps_model_binary[] __attribute__((aligned(256))) = {
0xBEEB03FF, 0x000001D9, 0xBEFC0302, 0xBED4047E, 0xBEFE0A7E, 0xC0820108, 0xC0C40100, 0xC0C80180,
0xC0CC0188, 0xC0900164, 0xC0920168, 0xC0940190, 0xC0960194, 0xC098010C, 0xC09A0120, 0xC0DC0128,
0xC0A00150, 0xC1220130, 0xC0EC0198, 0xC0B001A0, 0xC8280000, 0xC8290001, 0xC82C0100, 0xC82D0101,
0xC8640200, 0xC8650201, 0xC8680300, 0xC8690301, 0xC8300400, 0xC8310401, 0xC8340500, 0xC8350501,
0xC8380600, 0xC8390601, 0xC8600700, 0xC8610701, 0xC86C0800, 0xC86D0801, 0xC8700900, 0xC8710901,
0xC8740A00, 0xC8750A01, 0xC8780B00, 0xC8790B01, 0xBF8C007F, 0x10063118, 0x3E063319, 0x3E06351A,
0x7E065D03, 0x10300718, 0x10320719, 0x1034071A, 0x10063718, 0x3E063919, 0x3E063B1A, 0x10080718,
0x0836091B, 0x10080719, 0x0838091C, 0x1008071A, 0x083A091D, 0x1006371B, 0x3E06391C, 0x3E063B1D,
0x7E065D03, 0x1036071B, 0x1038071C, 0x103A071D, 0x103E3B19, 0x1006391A, 0x083E071F, 0x1040371A,
0x10063B18, 0x08400720, 0x10423918, 0x10063719, 0x08420721, 0x103E3D1F, 0x10403D20, 0x10423D21,
0x08441824, 0x08461A25, 0x08481C26, 0x104A4522, 0x3E4A4723, 0x3E4A4924, 0x7E065D25, 0x104C0725,
0x10440722, 0x10460723, 0x10480724, 0x10083722, 0x3E083923, 0x3E083B24, 0x100A3F22, 0x3E0A4123,
0x3E0A4324, 0x100C3122, 0x3E0C3323, 0x3E0C3524, 0xF1800100, 0x0106620A, 0xBF8C0F70, 0x20C4C480,
0x08C4C4FF, 0x40400000, 0x20C4C480, 0x1EC4C4F2, 0x1010C428, 0x20060CFF, 0x3DCCCCCD, 0x7E065503,
0x10100708, 0x101010FF, 0x3D800000, 0x10501104, 0x10521105, 0x7E58030A, 0x7E5A030B, 0x7E5C030A,
0x7E5E030B, 0x7E560280, 0x7E600280, 0x7E620280, 0xBED6047E, 0xF0800100, 0x0106322C, 0xBF8C0F70,
0x10646429, 0x0664642A, 0x086464F2, 0x08665732, 0x7C026680, 0x87EA6A56, 0xBED6046A, 0x00626333,
0x005C592E, 0x005E5B2F, 0x00606730, 0x0868512C, 0x0058692C, 0x0868532D, 0x005A692D, 0x066856FF,
0x3D800000, 0x0056692B, 0xF0800100, 0x0106322C, 0xBF8C0F70, 0x10646429, 0x0664642A, 0x086464F2,
0x08665732, 0x7C026680, 0x87EA6A56, 0xBED6046A, 0x00626333, 0x005C592E, 0x005E5B2F, 0x00606730,
0x0868512C, 0x0058692C, 0x0868532D, 0x005A692D, 0x066856FF, 0x3D800000, 0x0056692B, 0xF0800100,
0x0106322C, 0xBF8C0F70, 0x10646429, 0x0664642A, 0x086464F2, 0x08665732, 0x7C026680, 0x87EA6A56,
0xBED6046A, 0x00626333, 0x005C592E, 0x005E5B2F, 0x00606730, 0x0868512C, 0x0058692C, 0x0868532D,
0x005A692D, 0x066856FF, 0x3D800000, 0x0056692B, 0xF0800100, 0x0106322C, 0xBF8C0F70, 0x10646429,
0x0664642A, 0x086464F2, 0x08665732, 0x7C026680, 0x87EA6A56, 0xBED6046A, 0x00626333, 0x005C592E,
0x005E5B2F, 0x00606730, 0x0868512C, 0x0058692C, 0x0868532D, 0x005A692D, 0x066856FF, 0x3D800000,
0x0056692B, 0xF0800100, 0x0106322C, 0xBF8C0F70, 0x10646429, 0x0664642A, 0x086464F2, 0x08665732,
0x7C026680, 0x87EA6A56, 0xBED6046A, 0x00626333, 0x005C592E, 0x005E5B2F, 0x00606730, 0x0868512C,
0x0058692C, 0x0868532D, 0x005A692D, 0x066856FF, 0x3D800000, 0x0056692B, 0xF0800100, 0x0106322C,
0xBF8C0F70, 0x10646429, 0x0664642A, 0x086464F2, 0x08665732, 0x7C026680, 0x87EA6A56, 0xBED6046A,
0x00626333, 0x005C592E, 0x005E5B2F, 0x00606730, 0x0868512C, 0x0058692C, 0x0868532D, 0x005A692D,
0x066856FF, 0x3D800000, 0x0056692B, 0xF0800100, 0x0106322C, 0xBF8C0F70, 0x10646429, 0x0664642A,
0x086464F2, 0x08665732, 0x7C026680, 0x87EA6A56, 0xBED6046A, 0x00626333, 0x005C592E, 0x005E5B2F,
0x00606730, 0x0868512C, 0x0058692C, 0x0868532D, 0x005A692D, 0x066856FF, 0x3D800000, 0x0056692B,
0xF0800100, 0x0106322C, 0xBF8C0F70, 0x10646429, 0x0664642A, 0x086464F2, 0x08665732, 0x7C026680,
0x87EA6A56, 0xBED6046A, 0x00626333, 0x005C592E, 0x005E5B2F, 0x00606730, 0x0868512C, 0x0058692C,
0x0868532D, 0x005A692D, 0x066856FF, 0x3D800000, 0x0056692B, 0xF0800100, 0x0106322C, 0xBF8C0F70,
0x10646429, 0x0664642A, 0x086464F2, 0x08665732, 0x7C026680, 0x87EA6A56, 0xBED6046A, 0x00626333,
0x005C592E, 0x005E5B2F, 0x00606730, 0x0868512C, 0x0058692C, 0x0868532D, 0x005A692D, 0x066856FF,
0x3D800000, 0x0056692B, 0xF0800100, 0x0106322C, 0xBF8C0F70, 0x10646429, 0x0664642A, 0x086464F2,
0x08665732, 0x7C026680, 0x87EA6A56, 0xBED6046A, 0x00626333, 0x005C592E, 0x005E5B2F, 0x00606730,
0x0868512C, 0x0058692C, 0x0868532D, 0x005A692D, 0x066856FF, 0x3D800000, 0x0056692B, 0xF0800100,
0x0106322C, 0xBF8C0F70, 0x10646429, 0x0664642A, 0x086464F2, 0x08665732, 0x7C026680, 0x87EA6A56,
0xBED6046A, 0x00626333, 0x005C592E, 0x005E5B2F, 0x00606730, 0x0868512C, 0x0058692C, 0x0868532D,
0x005A692D, 0x066856FF, 0x3D800000, 0x0056692B, 0xF0800100, 0x0106322C, 0xBF8C0F70, 0x10646429,
0x0664642A, 0x086464F2, 0x08665732, 0x7C026680, 0x87EA6A56, 0xBED6046A, 0x00626333, 0x005C592E,
0x005E5B2F, 0x00606730, 0x0868512C, 0x0058692C, 0x0868532D, 0x005A692D, 0x066856FF, 0x3D800000,
0x0056692B, 0xF0800100, 0x0106322C, 0xBF8C0F70, 0x10646429, 0x0664642A, 0x086464F2, 0x08665732,
0x7C026680, 0x87EA6A56, 0xBED6046A, 0x00626333, 0x005C592E, 0x005E5B2F, 0x00606730, 0x0868512C,
0x0058692C, 0x0868532D, 0x005A692D, 0x066856FF, 0x3D800000, 0x0056692B, 0xF0800100, 0x0106322C,
0xBF8C0F70, 0x10646429, 0x0664642A, 0x086464F2, 0x08665732, 0x7C026680, 0x87EA6A56, 0xBED6046A,
0x00626333, 0x005C592E, 0x005E5B2F, 0x00606730, 0x0868512C, 0x0058692C, 0x0868532D, 0x005A692D,
0x066856FF, 0x3D800000, 0x0056692B, 0xF0800100, 0x0106322C, 0xBF8C0F70, 0x10646429, 0x0664642A,
0x086464F2, 0x08665732, 0x7C026680, 0x87EA6A56, 0xBED6046A, 0x00626333, 0x005C592E, 0x005E5B2F,
0x00606730, 0x0868512C, 0x0058692C, 0x0868532D, 0x005A692D, 0x066856FF, 0x3D800000, 0x0056692B,
0xF0800100, 0x0106322C, 0xBF8C0F70, 0x10646429, 0x0664642A, 0x086464F2, 0x08665732, 0x7C026680,
0x87EA6A56, 0xBED6046A, 0x00626333, 0x005C592E, 0x005E5B2F, 0x00606730, 0x0868512C, 0x0058692C,
0x0868532D, 0x005A692D, 0x066856FF, 0x3D800000, 0x0056692B, 0x08686131, 0x1E6868FF, 0xB58637BD,
0x7E685534, 0x10686931, 0x20686880, 0x1E6868F2, 0x086A592E, 0x3E586935, 0x086A5B2F, 0x3E5A6935,
0x106A68FF, 0x3D800000, 0x086A6B2B, 0x086A6AF2, 0x7E6E0230, 0x7E700231, 0x7E720232, 0x10066F37,
0x3E067138, 0x3E067339, 0x7E065D03, 0x106E0737, 0x10700738, 0x10720739, 0x10743737, 0x3E743938,
0x3E743B39, 0x10763F37, 0x3E764138, 0x3E764339, 0x10783137, 0x3E783338, 0x3E783539, 0x207A78FF,
0x3D4CCCCD, 0x7E7A553D, 0x087C6AF2, 0x107C7CFF, 0x3E000000, 0x107E7D3D, 0x107E7E28, 0x10807F3A,
0x10827F3B, 0x7E94032C, 0x7E96032D, 0x3E9480F2, 0x3E9682F2, 0x7E98032C, 0x7E9A032D, 0x3E9880F4,
0x3E9A82F4, 0x7E9C032C, 0x7E9E032D, 0x3E9C80FF, 0x40400000, 0x3E9E82FF, 0x40400000, 0x7EA0032C,
0x7EA2032D, 0x3EA080F6, 0x3EA282F6, 0x7EA4032C, 0x7EA6032D, 0x3EA480FF, 0x40A00000, 0x3EA682FF,
0x40A00000, 0x7EA8032C, 0x7EAA032D, 0x3EA880FF, 0x40C00000, 0x3EAA82FF, 0x40C00000, 0x7EAC032C,
0x7EAE032D, 0x3EAC80FF, 0x40E00000, 0x3EAE82FF, 0x40E00000, 0x7EB0032C, 0x7EB2032D, 0x3EB080FF,
0x41000000, 0x3EB282FF, 0x41000000, 0xF0800F00, 0x0022102C, 0xF0800F00, 0x0024142C, 0xF0800100,
0x01065A4A, 0xF0800100, 0x01065B4C, 0xF0800100, 0x01065C4E, 0xF0800100, 0x01065D50, 0xF0800100,
0x01065E52, 0xF0800100, 0x01065F54, 0xF0800100, 0x01066056, 0xF0800100, 0x01066158, 0xC08C0118,
0xC08E011C, 0xBF8C0F70, 0xC010016D, 0xC0108173, 0x7E840280, 0x10B4B429, 0x06B4B42A, 0x7E860335,
0x3E867CF2, 0x08B4875A, 0x2084B542, 0x10B6B629, 0x06B6B62A, 0x7E860335, 0x3E867CF4, 0x08B6875B,
0x2084B742, 0x10B8B829, 0x06B8B82A, 0x7E860335, 0x3E867CFF, 0x40400000, 0x08B8875C, 0x2084B942,
0x10BABA29, 0x06BABA2A, 0x7E860335, 0x3E867CF6, 0x08BA875D, 0x2084BB42, 0x10BCBC29, 0x06BCBC2A,
0x7E860335, 0x3E867CFF, 0x40A00000, 0x08BC875E, 0x2084BD42, 0x10BEBE29, 0x06BEBE2A, 0x7E860335,
0x3E867CFF, 0x40C00000, 0x08BE875F, 0x2084BF42, 0x10C0C029, 0x06C0C02A, 0x7E860335, 0x3E867CFF,
0x40E00000, 0x08C08760, 0x2084C142, 0x10C2C229, 0x06C2C22A, 0x7E860335, 0x3E867CFF, 0x41000000,
0x08C28761, 0x2084C342, 0x108484F6, 0x1E8484F2, 0x1084842B, 0x1084C542, 0x088484F2, 0x102828F4,
0x062828F3, 0x102A2AF4, 0x062A2AF3, 0x102C2914, 0x3E2C2B15, 0x082C2CF2, 0x202C2C80, 0x7E2C6716,
0x1028282C, 0x102A2A2D, 0x1088291B, 0x3E882B1F, 0x3E882D18, 0x108A291C, 0x3E8A2B20, 0x3E8A2D19,
0x108C291D, 0x3E8C2B21, 0x3E8C2D1A, 0x10068944, 0x3E068B45, 0x3E068D46, 0x7E065D03, 0x10880744,
0x108A0745, 0x108C0746, 0x108E8830, 0x10908A31, 0x068E9147, 0x10908C32, 0x068E9147, 0x208E8E80,
0x7E90030C, 0x3E90302E, 0x7E92030D, 0x3E92322E, 0x7E94030E, 0x3E94342E, 0x10989044, 0x3E989245,
0x3E989446, 0x06989847, 0x109A9048, 0x3E9A9249, 0x3E9A944A, 0x069A9A4B, 0x109C904C, 0x3E9C924D,
0x3E9C944E, 0x069C9C4F, 0x109E9050, 0x3E9E9251, 0x3E9E9452, 0x069E9E53, 0x7EA0554F, 0x1098A14C,
0x109AA14D, 0x109CA14E, 0x10A298F0, 0x06A2A2F0, 0x10A49AF0, 0x06A4A4F0, 0x1CA69C80, 0x1AA6A6F2,
0x0AA6A62F, 0x10C6A2FF, 0x45800000, 0x06C6C6F1, 0x7EC84963, 0x08C6C963, 0x10CAA4FF, 0x45800000,
0x06CACAF1, 0x7ECC4965, 0x08CACD65, 0x06CEC8F0, 0x10CECEFF, 0x39800000, 0x06D0CCF0, 0x10D0D0FF,
0x39800000, 0x06D2CEFF, 0x39800000, 0x7ED40368, 0x7ED60367, 0x06D8D0FF, 0x39800000, 0x7EDA0369,
0x7EDC036C, 0xF09C0100, 0x020E6F67, 0xF09C0100, 0x020E7069, 0xF09C0100, 0x020E716B, 0xF09C0100,
0x020E726D, 0xBF8C0070, 0x7EC80280, 0x7C02A76F, 0x00DEC8F2, 0x7C02A770, 0x00E0C8F2, 0x7C02A771,
0x00E2C8F2, 0x7C02A772, 0x00E4C8F2, 0x08E0DF70, 0x3EDEC770, 0x08E4E372, 0x3EE2C772, 0x08E2DF71,
0x3EDECB71, 0x7EA8036F, 0x7C029E80, 0x00A8A8F2, 0x10AAA8FF, 0x3F4848E6, 0x06AAAAFF, 0x3E5EDC67,
0x108EAB47, 0x108E8547, 0x10AC8EFF, 0x3F6DE3F7, 0x06ACACFF, 0x3D90E047, 0x1050AD10, 0x1052AD11,
0x1054AD12, 0x10505034, 0x10525235, 0x10545436, 0x7E740230, 0x1074753A, 0x7E760231, 0x3E74773B,
0x7E760232, 0x3E74773B, 0x7E74673A, 0x06B44537, 0x06B64738, 0x06B84939, 0x1006B55A, 0x3E06B75B,
0x3E06B95C, 0x7E065D03, 0x10B4075A, 0x10B6075B, 0x10B8075C, 0x10BAB544, 0x3EBAB745, 0x3EBAB946,
0x20BABA80, 0x10BC6F44, 0x3EBC7145, 0x3EBC7346, 0x20BCBC80, 0x10BE4544, 0x3EBE4745, 0x3EBE4946,
0x20BEBEFF, 0x38D1B717, 0x10C0B522, 0x3EC0B723, 0x3EC0B924, 0x20C0C080, 0xBEFC03C1, 0xD8D48000,
0x63000044, 0xD8D48055, 0x64000044, 0xD8D480AA, 0x65000044, 0xD8D48000, 0x66000045, 0xD8D48055,
0x67000045, 0xD8D480AA, 0x68000045, 0xD8D48000, 0x69000046, 0xD8D48055, 0x6A000046, 0xD8D480AA,
0x6B000046, 0xBF8C007F, 0x08C8C764, 0x08CAC765, 0x08CECD67, 0x08D0CD68, 0x08D4D36A, 0x08D6D36B,
0x10D8C964, 0x3ED8CB65, 0x3ED8CF67, 0x3ED8D168, 0x3ED8D56A, 0x3ED8D76B, 0x10D8D8FF, 0x3EA2F983,
0x1ED8D8FF, 0x3E3851EC, 0x06DAD858, 0x1EDADAF2, 0x7EDC676D, 0x10DCDCF0, 0x10C2BB5D, 0x7E76036D,
0x067676F3, 0x10C27761, 0x06C2C2F2, 0x10C2C361, 0x7EC25561, 0x10C2C36D, 0x7E76036E, 0x087876F2,
0x107A795E, 0x067A7B6E, 0x107C795F, 0x067C7D6E, 0x107A7D3D, 0x7E7A553D, 0x107A7AFF, 0x3E800000,
0x087CC0F2, 0x107E7D3E, 0x107E7F3F, 0x107E7D3F, 0x107E7E5B, 0x067E7E5A, 0x10C27B61, 0x10C27F61,
0x10C2BD61, 0x10C27561, 0x10C2AB61, 0x10C28561, 0x087EBEF2, 0x10807F3F, 0x10808140, 0x10807F40,
0x1080805D, 0x0680805C, 0x088280F2, 0x10508328, 0x10528329, 0x1054832A, 0x3E50C234, 0x3E52C235,
0x3E54C236, 0x107C8B5F, 0x067C7D3E, 0x087C473E, 0x207A7C80, 0x1E7A7AF2, 0x10787C5E, 0x067878F0,
0x20787880, 0x1E7878F2, 0x107E793C, 0x107678F5, 0x067676FF, 0x40400000, 0x1078773F, 0x7E820218,
0x0A82821C, 0x10827B41, 0x0682821C, 0x0A828260, 0x10827941, 0x06828260, 0x3E508141, 0x7E820219,
0x0A82821D, 0x10827B41, 0x0682821D, 0x0A828261, 0x10827941, 0x06828261, 0x3E528141, 0x7E82021A,
0x0A82821E, 0x10827B41, 0x0682821E, 0x0A828262, 0x10827941, 0x06828262, 0x3E548141, 0x10AE4C20,
0x06AEAE27, 0x7EAE4B57, 0x1EAEAEF2, 0x08AEAEF2, 0x10B00421, 0x7E70021C, 0x0A707018, 0x1070B138,
0x06707018, 0x7E72021D, 0x0A727219, 0x1072B139, 0x06727219, 0x7E74021E, 0x0A74741A, 0x1074B13A,
0x0674741A, 0x08B27128, 0x3E70AF59, 0x08B27329, 0x3E72AF59, 0x08B2752A, 0x3E74AF59, 0x7E5602F2,
0xBEFE0454, 0xF800180F, 0x2B3A3938, 0xBF810000, 0x5362724F, 0x00726468, 0x000ED000, 0x00000000,
0xDEADBEEF, 0xCAFE0138, 0x00000000,
};