diff --git a/runtime/dlaa_mv_spv.h b/runtime/dlaa_mv_spv.h index 93243f1d..a7964b70 100644 --- a/runtime/dlaa_mv_spv.h +++ b/runtime/dlaa_mv_spv.h @@ -1,162 +1,314 @@ // Generated by tools/build_shaders.py from runtime/shaders/dlaa_mv.comp; do not edit. -// source sha256 e96a6d2d0cec26c47a76280363077c5982919bedc984f20ae9f1d185dc6ae674 +// source sha256 683dc5299049a02aae4540f32ff58e0fd7b5c5611b9335df8fb10feb7c73c881 #pragma once #include static const uint32_t dlaa_mv_spv[] = { - 0x07230203, 0x00010300, 0x000d000b, 0x0000019a, 0x00000000, 0x00020011, 0x00000001, 0x00020011, + 0x07230203, 0x00010300, 0x000d000b, 0x000003c3, 0x00000000, 0x00020011, 0x00000001, 0x00020011, 0x00000031, 0x0006000b, 0x00000001, 0x4c534c47, 0x6474732e, 0x3035342e, 0x00000000, 0x0003000e, - 0x00000000, 0x00000001, 0x0006000f, 0x00000005, 0x00000004, 0x6e69616d, 0x00000000, 0x00000036, - 0x00060010, 0x00000004, 0x00000011, 0x00000008, 0x00000008, 0x00000001, 0x00040047, 0x00000036, - 0x0000000b, 0x0000001c, 0x00030047, 0x00000041, 0x00000002, 0x00050048, 0x00000041, 0x00000000, - 0x00000023, 0x00000000, 0x00050048, 0x00000041, 0x00000001, 0x00000023, 0x00000008, 0x00050048, - 0x00000041, 0x00000002, 0x00000023, 0x00000010, 0x00050048, 0x00000041, 0x00000003, 0x00000023, - 0x00000014, 0x00040047, 0x0000005d, 0x00000021, 0x00000000, 0x00040047, 0x0000005d, 0x00000022, - 0x00000000, 0x00040047, 0x00000086, 0x00000006, 0x00000010, 0x00030047, 0x00000087, 0x00000002, - 0x00050048, 0x00000087, 0x00000000, 0x00000023, 0x00000000, 0x00040047, 0x00000089, 0x00000021, - 0x00000002, 0x00040047, 0x00000089, 0x00000022, 0x00000000, 0x00040047, 0x0000009d, 0x00000006, - 0x00000010, 0x00030047, 0x0000009e, 0x00000002, 0x00050048, 0x0000009e, 0x00000000, 0x00000023, - 0x00000000, 0x00040047, 0x000000a0, 0x00000021, 0x00000003, 0x00040047, 0x000000a0, 0x00000022, - 0x00000000, 0x00030047, 0x000000e7, 0x00000019, 0x00040047, 0x000000e7, 0x00000021, 0x00000001, - 0x00040047, 0x000000e7, 0x00000022, 0x00000000, 0x00040047, 0x000000f6, 0x00000021, 0x00000004, - 0x00040047, 0x000000f6, 0x00000022, 0x00000000, 0x00030047, 0x00000101, 0x00000019, 0x00040047, - 0x00000101, 0x00000021, 0x00000007, 0x00040047, 0x00000101, 0x00000022, 0x00000000, 0x00030047, - 0x0000012a, 0x00000018, 0x00040047, 0x0000012a, 0x00000021, 0x00000006, 0x00040047, 0x0000012a, - 0x00000022, 0x00000000, 0x00030047, 0x0000013b, 0x00000019, 0x00040047, 0x0000013b, 0x00000021, - 0x00000005, 0x00040047, 0x0000013b, 0x00000022, 0x00000000, 0x00040047, 0x00000146, 0x0000000b, - 0x00000019, 0x00020013, 0x00000002, 0x00030021, 0x00000003, 0x00000002, 0x00030016, 0x00000006, - 0x00000020, 0x00040017, 0x00000007, 0x00000006, 0x00000004, 0x00040018, 0x00000009, 0x00000007, - 0x00000004, 0x0004002b, 0x00000006, 0x00000015, 0x3f800000, 0x0004002b, 0x00000006, 0x00000016, - 0x00000000, 0x00040015, 0x0000002f, 0x00000020, 0x00000001, 0x00040017, 0x00000030, 0x0000002f, - 0x00000002, 0x00040015, 0x00000033, 0x00000020, 0x00000000, 0x00040017, 0x00000034, 0x00000033, - 0x00000003, 0x00040020, 0x00000035, 0x00000001, 0x00000034, 0x0004003b, 0x00000035, 0x00000036, - 0x00000001, 0x00040017, 0x00000037, 0x00000033, 0x00000002, 0x00020014, 0x0000003b, 0x0004002b, - 0x00000033, 0x0000003c, 0x00000000, 0x00040017, 0x00000040, 0x00000006, 0x00000002, 0x0006001e, - 0x00000041, 0x00000040, 0x00000040, 0x00000006, 0x00000006, 0x00040020, 0x00000042, 0x00000009, - 0x00000041, 0x0004003b, 0x00000042, 0x00000043, 0x00000009, 0x0004002b, 0x0000002f, 0x00000044, - 0x00000000, 0x00040020, 0x00000045, 0x00000009, 0x00000006, 0x0004002b, 0x00000033, 0x0000004d, - 0x00000001, 0x00090019, 0x0000005a, 0x00000006, 0x00000001, 0x00000000, 0x00000000, 0x00000000, - 0x00000001, 0x00000000, 0x0003001b, 0x0000005b, 0x0000005a, 0x00040020, 0x0000005c, 0x00000000, - 0x0000005b, 0x0004003b, 0x0000005c, 0x0000005d, 0x00000000, 0x0004002b, 0x00000006, 0x00000067, - 0x3f000000, 0x0004002b, 0x0000002f, 0x0000006a, 0x00000001, 0x00040020, 0x0000006b, 0x00000009, - 0x00000040, 0x0004002b, 0x00000006, 0x00000075, 0x40000000, 0x0004002b, 0x00000033, 0x00000085, - 0x00000010, 0x0004001c, 0x00000086, 0x00000007, 0x00000085, 0x0003001e, 0x00000087, 0x00000086, - 0x00040020, 0x00000088, 0x00000002, 0x00000087, 0x0004003b, 0x00000088, 0x00000089, 0x00000002, - 0x0004002b, 0x0000002f, 0x0000008a, 0x00000003, 0x0004002b, 0x0000002f, 0x0000008b, 0x00000004, - 0x0004002b, 0x0000002f, 0x0000008c, 0x00000005, 0x0004002b, 0x0000002f, 0x0000008d, 0x00000006, - 0x00040020, 0x0000008f, 0x00000002, 0x00000007, 0x0004001c, 0x0000009d, 0x00000007, 0x00000085, - 0x0003001e, 0x0000009e, 0x0000009d, 0x00040020, 0x0000009f, 0x00000002, 0x0000009e, 0x0004003b, - 0x0000009f, 0x000000a0, 0x00000002, 0x0005002c, 0x00000040, 0x000000b4, 0x00000016, 0x00000016, - 0x0004002b, 0x00000006, 0x000000b9, 0x2b8cbccc, 0x0004002b, 0x00000006, 0x000000c7, 0x358637bd, - 0x00090019, 0x000000e5, 0x00000006, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000002, - 0x00000007, 0x00040020, 0x000000e6, 0x00000000, 0x000000e5, 0x0004003b, 0x000000e6, 0x000000e7, - 0x00000000, 0x0004002b, 0x0000002f, 0x000000ee, 0x00000002, 0x0004003b, 0x0000005c, 0x000000f6, - 0x00000000, 0x0004002b, 0x00000006, 0x000000fc, 0x3e808081, 0x00090019, 0x000000ff, 0x00000006, - 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0x0000000f, 0x00040020, 0x00000100, - 0x00000000, 0x000000ff, 0x0004003b, 0x00000100, 0x00000101, 0x00000000, 0x0004002b, 0x0000002f, - 0x00000119, 0xffffffff, 0x0004003b, 0x00000100, 0x0000012a, 0x00000000, 0x0005002c, 0x00000030, - 0x00000131, 0x00000044, 0x00000044, 0x0004003b, 0x00000100, 0x0000013b, 0x00000000, 0x0004002b, - 0x00000033, 0x00000145, 0x00000008, 0x0006002c, 0x00000034, 0x00000146, 0x00000145, 0x00000145, - 0x0000004d, 0x0005002c, 0x00000040, 0x00000197, 0x00000067, 0x00000067, 0x0005002c, 0x00000030, - 0x00000199, 0x0000006a, 0x0000006a, 0x00050036, 0x00000002, 0x00000004, 0x00000000, 0x00000003, - 0x000200f8, 0x00000005, 0x000300f7, 0x00000147, 0x00000000, 0x000300fb, 0x0000003c, 0x00000148, - 0x000200f8, 0x00000148, 0x0004003d, 0x00000034, 0x00000038, 0x00000036, 0x0007004f, 0x00000037, - 0x00000039, 0x00000038, 0x00000038, 0x00000000, 0x00000001, 0x0004007c, 0x00000030, 0x0000003a, - 0x00000039, 0x00050051, 0x0000002f, 0x0000003f, 0x0000003a, 0x00000000, 0x00060041, 0x00000045, - 0x00000046, 0x00000043, 0x00000044, 0x0000003c, 0x0004003d, 0x00000006, 0x00000047, 0x00000046, - 0x0004006e, 0x0000002f, 0x00000048, 0x00000047, 0x000500af, 0x0000003b, 0x00000049, 0x0000003f, - 0x00000048, 0x000400a8, 0x0000003b, 0x0000004a, 0x00000049, 0x000300f7, 0x0000004c, 0x00000000, - 0x000400fa, 0x0000004a, 0x0000004b, 0x0000004c, 0x000200f8, 0x0000004b, 0x00050051, 0x0000002f, - 0x0000004f, 0x0000003a, 0x00000001, 0x00060041, 0x00000045, 0x00000050, 0x00000043, 0x00000044, - 0x0000004d, 0x0004003d, 0x00000006, 0x00000051, 0x00000050, 0x0004006e, 0x0000002f, 0x00000052, - 0x00000051, 0x000500af, 0x0000003b, 0x00000053, 0x0000004f, 0x00000052, 0x000200f9, 0x0000004c, - 0x000200f8, 0x0000004c, 0x000700f5, 0x0000003b, 0x00000054, 0x00000049, 0x00000148, 0x00000053, - 0x0000004b, 0x000300f7, 0x00000056, 0x00000000, 0x000400fa, 0x00000054, 0x00000055, 0x00000056, - 0x000200f8, 0x00000055, 0x000200f9, 0x00000147, 0x000200f8, 0x00000056, 0x0004003d, 0x0000005b, - 0x0000005e, 0x0000005d, 0x00040064, 0x0000005a, 0x00000060, 0x0000005e, 0x0007005f, 0x00000007, - 0x00000061, 0x00000060, 0x0000003a, 0x00000002, 0x00000044, 0x00050051, 0x00000006, 0x00000062, - 0x00000061, 0x00000000, 0x0004006f, 0x00000040, 0x00000066, 0x0000003a, 0x00050081, 0x00000040, - 0x00000069, 0x00000066, 0x00000197, 0x00050041, 0x0000006b, 0x0000006c, 0x00000043, 0x0000006a, - 0x0004003d, 0x00000040, 0x0000006d, 0x0000006c, 0x00050083, 0x00000040, 0x0000006e, 0x00000069, - 0x0000006d, 0x00050051, 0x00000006, 0x00000071, 0x0000006e, 0x00000000, 0x00050088, 0x00000006, - 0x00000074, 0x00000071, 0x00000047, 0x00050085, 0x00000006, 0x00000076, 0x00000074, 0x00000075, - 0x00050083, 0x00000006, 0x00000077, 0x00000076, 0x00000015, 0x00050051, 0x00000006, 0x00000079, - 0x0000006e, 0x00000001, 0x00060041, 0x00000045, 0x0000007a, 0x00000043, 0x00000044, 0x0000004d, - 0x0004003d, 0x00000006, 0x0000007b, 0x0000007a, 0x00050088, 0x00000006, 0x0000007c, 0x00000079, - 0x0000007b, 0x00050085, 0x00000006, 0x0000007d, 0x0000007c, 0x00000075, 0x00050083, 0x00000006, - 0x0000007e, 0x00000015, 0x0000007d, 0x00050085, 0x00000006, 0x00000080, 0x00000062, 0x00000075, - 0x00050083, 0x00000006, 0x00000081, 0x00000080, 0x00000015, 0x00070050, 0x00000007, 0x00000082, - 0x00000077, 0x0000007e, 0x00000081, 0x00000015, 0x00060041, 0x0000008f, 0x00000090, 0x00000089, - 0x00000044, 0x0000008a, 0x0004003d, 0x00000007, 0x00000091, 0x00000090, 0x00060041, 0x0000008f, - 0x00000093, 0x00000089, 0x00000044, 0x0000008b, 0x0004003d, 0x00000007, 0x00000094, 0x00000093, - 0x00060041, 0x0000008f, 0x00000096, 0x00000089, 0x00000044, 0x0000008c, 0x0004003d, 0x00000007, - 0x00000097, 0x00000096, 0x00060041, 0x0000008f, 0x00000099, 0x00000089, 0x00000044, 0x0000008d, - 0x0004003d, 0x00000007, 0x0000009a, 0x00000099, 0x00070050, 0x00000009, 0x00000167, 0x00000091, - 0x00000094, 0x00000097, 0x0000009a, 0x00040054, 0x00000009, 0x00000168, 0x00000167, 0x00060041, - 0x0000008f, 0x000000a2, 0x000000a0, 0x00000044, 0x0000008a, 0x0004003d, 0x00000007, 0x000000a3, - 0x000000a2, 0x00060041, 0x0000008f, 0x000000a5, 0x000000a0, 0x00000044, 0x0000008b, 0x0004003d, - 0x00000007, 0x000000a6, 0x000000a5, 0x00060041, 0x0000008f, 0x000000a8, 0x000000a0, 0x00000044, - 0x0000008c, 0x0004003d, 0x00000007, 0x000000a9, 0x000000a8, 0x00060041, 0x0000008f, 0x000000ab, - 0x000000a0, 0x00000044, 0x0000008d, 0x0004003d, 0x00000007, 0x000000ac, 0x000000ab, 0x00070050, - 0x00000009, 0x00000183, 0x000000a3, 0x000000a6, 0x000000a9, 0x000000ac, 0x00040054, 0x00000009, - 0x00000184, 0x00000183, 0x0006000c, 0x00000009, 0x000000b0, 0x00000001, 0x00000022, 0x00000168, - 0x00050091, 0x00000007, 0x000000b2, 0x000000b0, 0x00000082, 0x00050051, 0x00000006, 0x000000b7, - 0x000000b2, 0x00000003, 0x0006000c, 0x00000006, 0x000000b8, 0x00000001, 0x00000004, 0x000000b7, - 0x000500ba, 0x0000003b, 0x000000ba, 0x000000b8, 0x000000b9, 0x000300f7, 0x000000bc, 0x00000000, - 0x000400fa, 0x000000ba, 0x000000bb, 0x000000bc, 0x000200f8, 0x000000bb, 0x00070050, 0x00000007, - 0x000000c2, 0x000000b7, 0x000000b7, 0x000000b7, 0x000000b7, 0x00050088, 0x00000007, 0x000000c3, - 0x000000b2, 0x000000c2, 0x00050091, 0x00000007, 0x000000c4, 0x00000184, 0x000000c3, 0x00050051, - 0x00000006, 0x000000c6, 0x000000c4, 0x00000003, 0x000500ba, 0x0000003b, 0x000000c8, 0x000000c6, - 0x000000c7, 0x000300f7, 0x000000ca, 0x00000000, 0x000400fa, 0x000000c8, 0x000000c9, 0x000000ca, - 0x000200f8, 0x000000c9, 0x0007004f, 0x00000040, 0x000000cd, 0x000000c4, 0x000000c4, 0x00000000, - 0x00000001, 0x00050050, 0x00000040, 0x000000d0, 0x000000c6, 0x000000c6, 0x00050088, 0x00000040, - 0x000000d1, 0x000000cd, 0x000000d0, 0x00050051, 0x00000006, 0x000000d4, 0x000000d1, 0x00000000, - 0x00050085, 0x00000006, 0x000000d5, 0x000000d4, 0x00000067, 0x00050081, 0x00000006, 0x000000d6, - 0x000000d5, 0x00000067, 0x00050085, 0x00000006, 0x000000d9, 0x000000d6, 0x00000047, 0x00050051, - 0x00000006, 0x000000db, 0x000000d1, 0x00000001, 0x00050085, 0x00000006, 0x000000dc, 0x000000db, - 0x00000067, 0x00050083, 0x00000006, 0x000000dd, 0x00000067, 0x000000dc, 0x00050085, 0x00000006, - 0x000000e0, 0x000000dd, 0x0000007b, 0x00050050, 0x00000040, 0x000000e1, 0x000000d9, 0x000000e0, - 0x00050083, 0x00000040, 0x000000e4, 0x000000e1, 0x0000006e, 0x000200f9, 0x000000ca, 0x000200f8, - 0x000000ca, 0x000700f5, 0x00000040, 0x00000190, 0x000000b4, 0x000000bb, 0x000000e4, 0x000000c9, - 0x000200f9, 0x000000bc, 0x000200f8, 0x000000bc, 0x000700f5, 0x00000040, 0x0000018f, 0x000000b4, - 0x00000056, 0x00000190, 0x000000ca, 0x0004003d, 0x000000e5, 0x000000e8, 0x000000e7, 0x00050051, - 0x00000006, 0x000000eb, 0x0000018f, 0x00000000, 0x00050051, 0x00000006, 0x000000ec, 0x0000018f, - 0x00000001, 0x00070050, 0x00000007, 0x000000ed, 0x000000eb, 0x000000ec, 0x00000016, 0x00000016, - 0x00040063, 0x000000e8, 0x0000003a, 0x000000ed, 0x00050041, 0x00000045, 0x000000ef, 0x00000043, - 0x000000ee, 0x0004003d, 0x00000006, 0x000000f0, 0x000000ef, 0x000500bc, 0x0000003b, 0x000000f1, - 0x000000f0, 0x00000016, 0x000300f7, 0x000000f3, 0x00000000, 0x000400fa, 0x000000f1, 0x000000f2, - 0x000000f3, 0x000200f8, 0x000000f2, 0x000200f9, 0x00000147, 0x000200f8, 0x000000f3, 0x0004003d, - 0x0000005b, 0x000000f7, 0x000000f6, 0x00040064, 0x0000005a, 0x000000f9, 0x000000f7, 0x0007005f, - 0x00000007, 0x000000fa, 0x000000f9, 0x0000003a, 0x00000002, 0x00000044, 0x00050051, 0x00000006, - 0x000000fb, 0x000000fa, 0x00000001, 0x000500ba, 0x0000003b, 0x000000fd, 0x000000fb, 0x000000fc, - 0x000600a9, 0x00000006, 0x000000fe, 0x000000fd, 0x00000015, 0x00000016, 0x0004003d, 0x000000ff, - 0x00000102, 0x00000101, 0x00070050, 0x00000007, 0x00000105, 0x000000fe, 0x000000fe, 0x000000fe, - 0x000000fe, 0x00040063, 0x00000102, 0x0000003a, 0x00000105, 0x00050041, 0x00000045, 0x00000107, - 0x00000043, 0x0000008a, 0x0004003d, 0x00000006, 0x00000108, 0x00000107, 0x000500ba, 0x0000003b, - 0x00000109, 0x00000108, 0x00000067, 0x000300f7, 0x0000010b, 0x00000000, 0x000400fa, 0x00000109, - 0x0000010a, 0x0000010b, 0x000200f8, 0x0000010a, 0x00050081, 0x00000040, 0x0000010f, 0x0000006e, - 0x0000018f, 0x0006000c, 0x00000040, 0x00000110, 0x00000001, 0x00000008, 0x0000010f, 0x0004006e, - 0x00000030, 0x00000111, 0x00000110, 0x00050041, 0x0000006b, 0x00000113, 0x00000043, 0x00000044, - 0x0004003d, 0x00000040, 0x00000114, 0x00000113, 0x0004006e, 0x00000030, 0x00000115, 0x00000114, - 0x00050082, 0x00000030, 0x00000117, 0x00000115, 0x00000199, 0x000200f9, 0x0000011a, 0x000200f8, - 0x0000011a, 0x000700f5, 0x00000006, 0x00000193, 0x00000016, 0x0000010a, 0x00000196, 0x0000011d, - 0x000700f5, 0x0000002f, 0x00000191, 0x00000119, 0x0000010a, 0x0000013a, 0x0000011d, 0x000500b3, - 0x0000003b, 0x00000120, 0x00000191, 0x0000006a, 0x000400f6, 0x0000011c, 0x0000011d, 0x00000000, - 0x000400fa, 0x00000120, 0x0000011b, 0x0000011c, 0x000200f8, 0x0000011b, 0x000200f9, 0x00000122, - 0x000200f8, 0x00000122, 0x000700f5, 0x00000006, 0x00000196, 0x00000193, 0x0000011b, 0x00000136, - 0x00000123, 0x000700f5, 0x0000002f, 0x00000194, 0x00000119, 0x0000011b, 0x00000138, 0x00000123, - 0x000500b3, 0x0000003b, 0x00000128, 0x00000194, 0x0000006a, 0x000400f6, 0x00000124, 0x00000123, - 0x00000000, 0x000400fa, 0x00000128, 0x00000123, 0x00000124, 0x000200f8, 0x00000123, 0x0004003d, - 0x000000ff, 0x0000012b, 0x0000012a, 0x00050050, 0x00000030, 0x0000012f, 0x00000194, 0x00000191, - 0x00050080, 0x00000030, 0x00000130, 0x00000111, 0x0000012f, 0x0008000c, 0x00000030, 0x00000133, - 0x00000001, 0x0000002d, 0x00000130, 0x00000131, 0x00000117, 0x00050062, 0x00000007, 0x00000134, - 0x0000012b, 0x00000133, 0x00050051, 0x00000006, 0x00000135, 0x00000134, 0x00000000, 0x0007000c, - 0x00000006, 0x00000136, 0x00000001, 0x00000028, 0x00000196, 0x00000135, 0x00050080, 0x0000002f, - 0x00000138, 0x00000194, 0x0000006a, 0x000200f9, 0x00000122, 0x000200f8, 0x00000124, 0x000200f9, - 0x0000011d, 0x000200f8, 0x0000011d, 0x00050080, 0x0000002f, 0x0000013a, 0x00000191, 0x0000006a, - 0x000200f9, 0x0000011a, 0x000200f8, 0x0000011c, 0x000200f9, 0x0000010b, 0x000200f8, 0x0000010b, - 0x000700f5, 0x00000006, 0x00000192, 0x00000016, 0x000000f3, 0x00000193, 0x0000011c, 0x0004003d, - 0x000000ff, 0x0000013c, 0x0000013b, 0x0007000c, 0x00000006, 0x00000140, 0x00000001, 0x00000028, - 0x000000fe, 0x00000192, 0x00050085, 0x00000006, 0x00000143, 0x00000140, 0x000000f0, 0x00070050, - 0x00000007, 0x00000144, 0x00000143, 0x00000143, 0x00000143, 0x00000143, 0x00040063, 0x0000013c, - 0x0000003a, 0x00000144, 0x000200f9, 0x00000147, 0x000200f8, 0x00000147, 0x000100fd, 0x00010038, + 0x00000000, 0x00000001, 0x0006000f, 0x00000005, 0x00000004, 0x6e69616d, 0x00000000, 0x000000c4, + 0x00060010, 0x00000004, 0x00000011, 0x00000008, 0x00000008, 0x00000001, 0x00030047, 0x0000001e, + 0x00000002, 0x00050048, 0x0000001e, 0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x0000001e, + 0x00000001, 0x00000023, 0x00000008, 0x00050048, 0x0000001e, 0x00000002, 0x00000023, 0x00000010, + 0x00050048, 0x0000001e, 0x00000003, 0x00000023, 0x00000014, 0x00050048, 0x0000001e, 0x00000004, + 0x00000023, 0x00000018, 0x00050048, 0x0000001e, 0x00000005, 0x00000023, 0x0000001c, 0x00050048, + 0x0000001e, 0x00000006, 0x00000023, 0x00000020, 0x00050048, 0x0000001e, 0x00000007, 0x00000023, + 0x00000030, 0x00030047, 0x00000086, 0x00000018, 0x00040047, 0x00000086, 0x00000021, 0x00000008, + 0x00040047, 0x00000086, 0x00000022, 0x00000000, 0x00040047, 0x000000c4, 0x0000000b, 0x0000001c, + 0x00040047, 0x000000e0, 0x00000021, 0x00000000, 0x00040047, 0x000000e0, 0x00000022, 0x00000000, + 0x00040047, 0x00000106, 0x00000006, 0x00000010, 0x00030047, 0x00000107, 0x00000002, 0x00050048, + 0x00000107, 0x00000000, 0x00000023, 0x00000000, 0x00040047, 0x00000109, 0x00000021, 0x00000002, + 0x00040047, 0x00000109, 0x00000022, 0x00000000, 0x00040047, 0x0000011c, 0x00000006, 0x00000010, + 0x00030047, 0x0000011d, 0x00000002, 0x00050048, 0x0000011d, 0x00000000, 0x00000023, 0x00000000, + 0x00040047, 0x0000011f, 0x00000021, 0x00000003, 0x00040047, 0x0000011f, 0x00000022, 0x00000000, + 0x00030047, 0x00000172, 0x00000019, 0x00040047, 0x00000172, 0x00000021, 0x00000009, 0x00040047, + 0x00000172, 0x00000022, 0x00000000, 0x00030047, 0x000001c4, 0x00000019, 0x00040047, 0x000001c4, + 0x00000021, 0x00000001, 0x00040047, 0x000001c4, 0x00000022, 0x00000000, 0x00030047, 0x000001d2, + 0x00000019, 0x00040047, 0x000001d2, 0x00000021, 0x00000005, 0x00040047, 0x000001d2, 0x00000022, + 0x00000000, 0x00040047, 0x000001e3, 0x00000021, 0x00000004, 0x00040047, 0x000001e3, 0x00000022, + 0x00000000, 0x00030047, 0x000001ec, 0x00000019, 0x00040047, 0x000001ec, 0x00000021, 0x00000007, + 0x00040047, 0x000001ec, 0x00000022, 0x00000000, 0x00030047, 0x00000214, 0x00000018, 0x00040047, + 0x00000214, 0x00000021, 0x00000006, 0x00040047, 0x00000214, 0x00000022, 0x00000000, 0x00040047, + 0x0000022e, 0x0000000b, 0x00000019, 0x00020013, 0x00000002, 0x00030021, 0x00000003, 0x00000002, + 0x00030016, 0x00000006, 0x00000020, 0x00040017, 0x0000000c, 0x00000006, 0x00000002, 0x00040017, + 0x00000013, 0x00000006, 0x00000004, 0x00040018, 0x00000015, 0x00000013, 0x00000004, 0x000a001e, + 0x0000001e, 0x0000000c, 0x0000000c, 0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00000013, + 0x00000006, 0x00040020, 0x0000001f, 0x00000009, 0x0000001e, 0x0004003b, 0x0000001f, 0x00000020, + 0x00000009, 0x00040015, 0x00000021, 0x00000020, 0x00000001, 0x0004002b, 0x00000021, 0x00000022, + 0x00000006, 0x00040015, 0x00000023, 0x00000020, 0x00000000, 0x0004002b, 0x00000023, 0x00000024, + 0x00000002, 0x00040020, 0x00000025, 0x00000009, 0x00000006, 0x0004002b, 0x00000023, 0x0000002a, + 0x00000000, 0x0004002b, 0x00000006, 0x00000030, 0x2b8cbccc, 0x00020014, 0x00000031, 0x0004002b, + 0x00000006, 0x00000035, 0x00000000, 0x0004002b, 0x00000023, 0x00000038, 0x00000001, 0x0004002b, + 0x00000023, 0x0000003b, 0x00000003, 0x0004002b, 0x00000006, 0x00000045, 0x4b189680, 0x00040017, + 0x00000050, 0x00000021, 0x00000002, 0x0004002b, 0x00000021, 0x00000057, 0x00000000, 0x00040020, + 0x00000058, 0x00000009, 0x0000000c, 0x0004002b, 0x00000021, 0x0000005c, 0x00000001, 0x0005002c, + 0x00000050, 0x00000060, 0x00000057, 0x00000057, 0x00040017, 0x00000061, 0x00000031, 0x00000002, + 0x0004002b, 0x00000006, 0x00000070, 0x4e6e6b28, 0x0004002b, 0x00000021, 0x00000073, 0xffffffff, + 0x00090019, 0x00000084, 0x00000006, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000002, + 0x00000003, 0x00040020, 0x00000085, 0x00000000, 0x00000084, 0x0004003b, 0x00000085, 0x00000086, + 0x00000000, 0x0004002b, 0x00000006, 0x000000a8, 0x3f800000, 0x00040017, 0x000000c2, 0x00000023, + 0x00000003, 0x00040020, 0x000000c3, 0x00000001, 0x000000c2, 0x0004003b, 0x000000c3, 0x000000c4, + 0x00000001, 0x00040017, 0x000000c5, 0x00000023, 0x00000002, 0x00090019, 0x000000dd, 0x00000006, + 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x0003001b, 0x000000de, + 0x000000dd, 0x00040020, 0x000000df, 0x00000000, 0x000000de, 0x0004003b, 0x000000df, 0x000000e0, + 0x00000000, 0x0004002b, 0x00000006, 0x000000e9, 0x3f000000, 0x0004002b, 0x00000006, 0x000000f5, + 0x40000000, 0x0004002b, 0x00000023, 0x00000105, 0x00000010, 0x0004001c, 0x00000106, 0x00000013, + 0x00000105, 0x0003001e, 0x00000107, 0x00000106, 0x00040020, 0x00000108, 0x00000002, 0x00000107, + 0x0004003b, 0x00000108, 0x00000109, 0x00000002, 0x0004002b, 0x00000021, 0x0000010a, 0x00000003, + 0x0004002b, 0x00000021, 0x0000010b, 0x00000004, 0x0004002b, 0x00000021, 0x0000010c, 0x00000005, + 0x00040020, 0x0000010e, 0x00000002, 0x00000013, 0x0004001c, 0x0000011c, 0x00000013, 0x00000105, + 0x0003001e, 0x0000011d, 0x0000011c, 0x00040020, 0x0000011e, 0x00000002, 0x0000011d, 0x0004003b, + 0x0000011e, 0x0000011f, 0x00000002, 0x0005002c, 0x0000000c, 0x00000133, 0x00000035, 0x00000035, + 0x0004002b, 0x00000006, 0x00000144, 0x358637bd, 0x0004003b, 0x00000085, 0x00000172, 0x00000000, + 0x0004002b, 0x00000006, 0x000001b6, 0x3d23d70a, 0x00090019, 0x000001c2, 0x00000006, 0x00000001, + 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0x00000007, 0x00040020, 0x000001c3, 0x00000000, + 0x000001c2, 0x0004003b, 0x000001c3, 0x000001c4, 0x00000000, 0x00090019, 0x000001d0, 0x00000006, + 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0x0000000f, 0x00040020, 0x000001d1, + 0x00000000, 0x000001d0, 0x0004003b, 0x000001d1, 0x000001d2, 0x00000000, 0x0004002b, 0x00000021, + 0x000001d6, 0x00000007, 0x0004002b, 0x00000021, 0x000001db, 0x00000002, 0x0004003b, 0x000000df, + 0x000001e3, 0x00000000, 0x0004002b, 0x00000006, 0x000001e9, 0x3e808081, 0x0004003b, 0x000001d1, + 0x000001ec, 0x00000000, 0x0004003b, 0x000001d1, 0x00000214, 0x00000000, 0x0004002b, 0x00000023, + 0x0000022d, 0x00000008, 0x0006002c, 0x000000c2, 0x0000022e, 0x0000022d, 0x0000022d, 0x00000038, + 0x0005002c, 0x0000000c, 0x000003b7, 0x000000e9, 0x000000e9, 0x0005002c, 0x00000050, 0x000003ba, + 0x0000005c, 0x0000005c, 0x00050036, 0x00000002, 0x00000004, 0x00000000, 0x00000003, 0x000200f8, + 0x00000005, 0x000300f7, 0x0000022f, 0x00000000, 0x000300fb, 0x0000002a, 0x00000230, 0x000200f8, + 0x00000230, 0x0004003d, 0x000000c2, 0x000000c6, 0x000000c4, 0x0007004f, 0x000000c5, 0x000000c7, + 0x000000c6, 0x000000c6, 0x00000000, 0x00000001, 0x0004007c, 0x00000050, 0x000000c8, 0x000000c7, + 0x00050051, 0x00000021, 0x000000ca, 0x000000c8, 0x00000000, 0x00060041, 0x00000025, 0x000000cb, + 0x00000020, 0x00000057, 0x0000002a, 0x0004003d, 0x00000006, 0x000000cc, 0x000000cb, 0x0004006e, + 0x00000021, 0x000000cd, 0x000000cc, 0x000500af, 0x00000031, 0x000000ce, 0x000000ca, 0x000000cd, + 0x000400a8, 0x00000031, 0x000000cf, 0x000000ce, 0x000300f7, 0x000000d1, 0x00000000, 0x000400fa, + 0x000000cf, 0x000000d0, 0x000000d1, 0x000200f8, 0x000000d0, 0x00050051, 0x00000021, 0x000000d3, + 0x000000c8, 0x00000001, 0x00060041, 0x00000025, 0x000000d4, 0x00000020, 0x00000057, 0x00000038, + 0x0004003d, 0x00000006, 0x000000d5, 0x000000d4, 0x0004006e, 0x00000021, 0x000000d6, 0x000000d5, + 0x000500af, 0x00000031, 0x000000d7, 0x000000d3, 0x000000d6, 0x000200f9, 0x000000d1, 0x000200f8, + 0x000000d1, 0x000700f5, 0x00000031, 0x000000d8, 0x000000ce, 0x00000230, 0x000000d7, 0x000000d0, + 0x000300f7, 0x000000da, 0x00000000, 0x000400fa, 0x000000d8, 0x000000d9, 0x000000da, 0x000200f8, + 0x000000d9, 0x000200f9, 0x0000022f, 0x000200f8, 0x000000da, 0x0004003d, 0x000000de, 0x000000e1, + 0x000000e0, 0x00040064, 0x000000dd, 0x000000e3, 0x000000e1, 0x0007005f, 0x00000013, 0x000000e4, + 0x000000e3, 0x000000c8, 0x00000002, 0x00000057, 0x00050051, 0x00000006, 0x000000e5, 0x000000e4, + 0x00000000, 0x0004006f, 0x0000000c, 0x000000e8, 0x000000c8, 0x00050081, 0x0000000c, 0x000000eb, + 0x000000e8, 0x000003b7, 0x00050041, 0x00000058, 0x000000ec, 0x00000020, 0x0000005c, 0x0004003d, + 0x0000000c, 0x000000ed, 0x000000ec, 0x00050083, 0x0000000c, 0x000000ee, 0x000000eb, 0x000000ed, + 0x00050051, 0x00000006, 0x000000f1, 0x000000ee, 0x00000000, 0x00050088, 0x00000006, 0x000000f4, + 0x000000f1, 0x000000cc, 0x00050085, 0x00000006, 0x000000f6, 0x000000f4, 0x000000f5, 0x00050083, + 0x00000006, 0x000000f7, 0x000000f6, 0x000000a8, 0x00050051, 0x00000006, 0x000000f9, 0x000000ee, + 0x00000001, 0x00060041, 0x00000025, 0x000000fa, 0x00000020, 0x00000057, 0x00000038, 0x0004003d, + 0x00000006, 0x000000fb, 0x000000fa, 0x00050088, 0x00000006, 0x000000fc, 0x000000f9, 0x000000fb, + 0x00050085, 0x00000006, 0x000000fd, 0x000000fc, 0x000000f5, 0x00050083, 0x00000006, 0x000000fe, + 0x000000a8, 0x000000fd, 0x00050085, 0x00000006, 0x00000100, 0x000000e5, 0x000000f5, 0x00050083, + 0x00000006, 0x00000101, 0x00000100, 0x000000a8, 0x00070050, 0x00000013, 0x00000102, 0x000000f7, + 0x000000fe, 0x00000101, 0x000000a8, 0x00060041, 0x0000010e, 0x0000010f, 0x00000109, 0x00000057, + 0x0000010a, 0x0004003d, 0x00000013, 0x00000110, 0x0000010f, 0x00060041, 0x0000010e, 0x00000112, + 0x00000109, 0x00000057, 0x0000010b, 0x0004003d, 0x00000013, 0x00000113, 0x00000112, 0x00060041, + 0x0000010e, 0x00000115, 0x00000109, 0x00000057, 0x0000010c, 0x0004003d, 0x00000013, 0x00000116, + 0x00000115, 0x00060041, 0x0000010e, 0x00000118, 0x00000109, 0x00000057, 0x00000022, 0x0004003d, + 0x00000013, 0x00000119, 0x00000118, 0x00070050, 0x00000015, 0x00000259, 0x00000110, 0x00000113, + 0x00000116, 0x00000119, 0x00040054, 0x00000015, 0x0000025a, 0x00000259, 0x00060041, 0x0000010e, + 0x00000121, 0x0000011f, 0x00000057, 0x0000010a, 0x0004003d, 0x00000013, 0x00000122, 0x00000121, + 0x00060041, 0x0000010e, 0x00000124, 0x0000011f, 0x00000057, 0x0000010b, 0x0004003d, 0x00000013, + 0x00000125, 0x00000124, 0x00060041, 0x0000010e, 0x00000127, 0x0000011f, 0x00000057, 0x0000010c, + 0x0004003d, 0x00000013, 0x00000128, 0x00000127, 0x00060041, 0x0000010e, 0x0000012a, 0x0000011f, + 0x00000057, 0x00000022, 0x0004003d, 0x00000013, 0x0000012b, 0x0000012a, 0x00070050, 0x00000015, + 0x00000275, 0x00000122, 0x00000125, 0x00000128, 0x0000012b, 0x00040054, 0x00000015, 0x00000276, + 0x00000275, 0x0006000c, 0x00000015, 0x0000012f, 0x00000001, 0x00000022, 0x0000025a, 0x00050091, + 0x00000013, 0x00000131, 0x0000012f, 0x00000102, 0x00050051, 0x00000006, 0x00000135, 0x00000131, + 0x00000003, 0x0006000c, 0x00000006, 0x00000136, 0x00000001, 0x00000004, 0x00000135, 0x000500ba, + 0x00000031, 0x00000137, 0x00000136, 0x00000030, 0x000300f7, 0x00000139, 0x00000000, 0x000400fa, + 0x00000137, 0x00000138, 0x00000139, 0x000200f8, 0x00000138, 0x00070050, 0x00000013, 0x0000013f, + 0x00000135, 0x00000135, 0x00000135, 0x00000135, 0x00050088, 0x00000013, 0x00000140, 0x00000131, + 0x0000013f, 0x00050091, 0x00000013, 0x00000141, 0x00000276, 0x00000140, 0x00050051, 0x00000006, + 0x00000143, 0x00000141, 0x00000003, 0x000500ba, 0x00000031, 0x00000145, 0x00000143, 0x00000144, + 0x000300f7, 0x00000147, 0x00000000, 0x000400fa, 0x00000145, 0x00000146, 0x00000147, 0x000200f8, + 0x00000146, 0x0007004f, 0x0000000c, 0x0000014a, 0x00000141, 0x00000141, 0x00000000, 0x00000001, + 0x00050050, 0x0000000c, 0x0000014d, 0x00000143, 0x00000143, 0x00050088, 0x0000000c, 0x0000014e, + 0x0000014a, 0x0000014d, 0x00050051, 0x00000006, 0x00000151, 0x0000014e, 0x00000000, 0x00050085, + 0x00000006, 0x00000152, 0x00000151, 0x000000e9, 0x00050081, 0x00000006, 0x00000153, 0x00000152, + 0x000000e9, 0x00050085, 0x00000006, 0x00000156, 0x00000153, 0x000000cc, 0x00050051, 0x00000006, + 0x00000158, 0x0000014e, 0x00000001, 0x00050085, 0x00000006, 0x00000159, 0x00000158, 0x000000e9, + 0x00050083, 0x00000006, 0x0000015a, 0x000000e9, 0x00000159, 0x00050085, 0x00000006, 0x0000015d, + 0x0000015a, 0x000000fb, 0x00050050, 0x0000000c, 0x0000015e, 0x00000156, 0x0000015d, 0x00050083, + 0x0000000c, 0x00000161, 0x0000015e, 0x000000ee, 0x000200f9, 0x00000147, 0x000200f8, 0x00000147, + 0x000700f5, 0x0000000c, 0x00000379, 0x00000133, 0x00000138, 0x00000161, 0x00000146, 0x000200f9, + 0x00000139, 0x000200f8, 0x00000139, 0x000700f5, 0x0000000c, 0x00000378, 0x00000133, 0x000000da, + 0x00000379, 0x00000147, 0x00050041, 0x00000025, 0x00000167, 0x00000020, 0x0000010b, 0x0004003d, + 0x00000006, 0x00000168, 0x00000167, 0x000500ba, 0x00000031, 0x00000169, 0x00000168, 0x00000035, + 0x000300f7, 0x0000016c, 0x00000000, 0x000400fa, 0x00000169, 0x0000016b, 0x00000170, 0x000200f8, + 0x0000016b, 0x000300f7, 0x0000029d, 0x00000000, 0x000300fb, 0x0000002a, 0x0000027e, 0x000200f8, + 0x0000027e, 0x00060041, 0x00000025, 0x0000027f, 0x00000020, 0x00000022, 0x00000024, 0x0004003d, + 0x00000006, 0x00000280, 0x0000027f, 0x00050085, 0x00000006, 0x00000282, 0x00000280, 0x00000101, + 0x00060041, 0x00000025, 0x00000283, 0x00000020, 0x00000022, 0x0000002a, 0x0004003d, 0x00000006, + 0x00000284, 0x00000283, 0x00050083, 0x00000006, 0x00000285, 0x00000282, 0x00000284, 0x0006000c, + 0x00000006, 0x00000287, 0x00000001, 0x00000004, 0x00000285, 0x000500b8, 0x00000031, 0x00000288, + 0x00000287, 0x00000030, 0x000300f7, 0x0000028a, 0x00000000, 0x000400fa, 0x00000288, 0x00000289, + 0x0000028a, 0x000200f8, 0x00000289, 0x000200f9, 0x0000029d, 0x000200f8, 0x0000028a, 0x00060041, + 0x00000025, 0x0000028b, 0x00000020, 0x00000022, 0x00000038, 0x0004003d, 0x00000006, 0x0000028c, + 0x0000028b, 0x00060041, 0x00000025, 0x0000028d, 0x00000020, 0x00000022, 0x0000003b, 0x0004003d, + 0x00000006, 0x0000028e, 0x0000028d, 0x00050085, 0x00000006, 0x00000290, 0x0000028e, 0x00000101, + 0x00050083, 0x00000006, 0x00000291, 0x0000028c, 0x00000290, 0x00050088, 0x00000006, 0x00000293, + 0x00000291, 0x00000285, 0x0006000c, 0x00000006, 0x00000295, 0x00000001, 0x00000004, 0x00000293, + 0x000500b8, 0x00000031, 0x00000296, 0x00000295, 0x00000045, 0x000600a9, 0x00000006, 0x000003bd, + 0x00000296, 0x00000295, 0x00000035, 0x000200f9, 0x0000029d, 0x000200f8, 0x0000029d, 0x000700f5, + 0x00000006, 0x0000036d, 0x00000035, 0x00000289, 0x000003bd, 0x0000028a, 0x000200f9, 0x0000016c, + 0x000200f8, 0x00000170, 0x000200f9, 0x0000016c, 0x000200f8, 0x0000016c, 0x000700f5, 0x00000006, + 0x0000036e, 0x0000036d, 0x0000029d, 0x00000035, 0x00000170, 0x0004003d, 0x00000084, 0x00000173, + 0x00000172, 0x00070050, 0x00000013, 0x00000176, 0x0000036e, 0x0000036e, 0x0000036e, 0x0000036e, + 0x00040063, 0x00000173, 0x000000c8, 0x00000176, 0x000300f7, 0x0000017c, 0x00000000, 0x000400fa, + 0x00000169, 0x0000017b, 0x0000017c, 0x000200f8, 0x0000017b, 0x00050041, 0x00000025, 0x0000017d, + 0x00000020, 0x0000010c, 0x0004003d, 0x00000006, 0x0000017e, 0x0000017d, 0x000500ba, 0x00000031, + 0x0000017f, 0x0000017e, 0x000000e9, 0x000200f9, 0x0000017c, 0x000200f8, 0x0000017c, 0x000700f5, + 0x00000031, 0x00000180, 0x00000169, 0x0000016c, 0x0000017f, 0x0000017b, 0x000500ba, 0x00000031, + 0x00000182, 0x0000036e, 0x00000035, 0x000500a7, 0x00000031, 0x00000183, 0x00000180, 0x00000182, + 0x000600a9, 0x00000031, 0x000003be, 0x00000183, 0x00000137, 0x00000183, 0x000300f7, 0x0000018c, + 0x00000000, 0x000400fa, 0x000003be, 0x0000018b, 0x0000018c, 0x000200f8, 0x0000018b, 0x00070050, + 0x00000013, 0x00000192, 0x00000135, 0x00000135, 0x00000135, 0x00000135, 0x00050088, 0x00000013, + 0x00000193, 0x00000131, 0x00000192, 0x00050091, 0x00000013, 0x00000194, 0x00000276, 0x00000193, + 0x00050051, 0x00000006, 0x00000197, 0x00000194, 0x00000003, 0x0006000c, 0x00000006, 0x00000198, + 0x00000001, 0x00000004, 0x00000197, 0x000500ba, 0x00000031, 0x00000199, 0x00000198, 0x00000030, + 0x000300f7, 0x0000019c, 0x00000000, 0x000400fa, 0x00000199, 0x0000019b, 0x000001a4, 0x000200f8, + 0x0000019b, 0x00050051, 0x00000006, 0x0000019e, 0x00000194, 0x00000002, 0x00050088, 0x00000006, + 0x000001a1, 0x0000019e, 0x00000197, 0x000300f7, 0x000002c5, 0x00000000, 0x000300fb, 0x0000002a, + 0x000002a6, 0x000200f8, 0x000002a6, 0x00060041, 0x00000025, 0x000002a7, 0x00000020, 0x00000022, + 0x00000024, 0x0004003d, 0x00000006, 0x000002a8, 0x000002a7, 0x00050085, 0x00000006, 0x000002aa, + 0x000002a8, 0x000001a1, 0x00060041, 0x00000025, 0x000002ab, 0x00000020, 0x00000022, 0x0000002a, + 0x0004003d, 0x00000006, 0x000002ac, 0x000002ab, 0x00050083, 0x00000006, 0x000002ad, 0x000002aa, + 0x000002ac, 0x0006000c, 0x00000006, 0x000002af, 0x00000001, 0x00000004, 0x000002ad, 0x000500b8, + 0x00000031, 0x000002b0, 0x000002af, 0x00000030, 0x000300f7, 0x000002b2, 0x00000000, 0x000400fa, + 0x000002b0, 0x000002b1, 0x000002b2, 0x000200f8, 0x000002b1, 0x000200f9, 0x000002c5, 0x000200f8, + 0x000002b2, 0x00060041, 0x00000025, 0x000002b3, 0x00000020, 0x00000022, 0x00000038, 0x0004003d, + 0x00000006, 0x000002b4, 0x000002b3, 0x00060041, 0x00000025, 0x000002b5, 0x00000020, 0x00000022, + 0x0000003b, 0x0004003d, 0x00000006, 0x000002b6, 0x000002b5, 0x00050085, 0x00000006, 0x000002b8, + 0x000002b6, 0x000001a1, 0x00050083, 0x00000006, 0x000002b9, 0x000002b4, 0x000002b8, 0x00050088, + 0x00000006, 0x000002bb, 0x000002b9, 0x000002ad, 0x0006000c, 0x00000006, 0x000002bd, 0x00000001, + 0x00000004, 0x000002bb, 0x000500b8, 0x00000031, 0x000002be, 0x000002bd, 0x00000045, 0x000600a9, + 0x00000006, 0x000003bf, 0x000002be, 0x000002bd, 0x00000035, 0x000200f9, 0x000002c5, 0x000200f8, + 0x000002c5, 0x000700f5, 0x00000006, 0x00000370, 0x00000035, 0x000002b1, 0x000003bf, 0x000002b2, + 0x000200f9, 0x0000019c, 0x000200f8, 0x000001a4, 0x000200f9, 0x0000019c, 0x000200f8, 0x0000019c, + 0x000700f5, 0x00000006, 0x00000371, 0x00000370, 0x000002c5, 0x00000035, 0x000001a4, 0x000500ba, + 0x00000031, 0x000001a8, 0x00000371, 0x00000035, 0x000300f7, 0x000001ab, 0x00000000, 0x000400fa, + 0x000001a8, 0x000001aa, 0x000001b3, 0x000200f8, 0x000001aa, 0x00050081, 0x0000000c, 0x000001ae, + 0x000000ee, 0x00000378, 0x000300f7, 0x00000310, 0x00000000, 0x000300fb, 0x0000002a, 0x000002d1, + 0x000200f8, 0x000002d1, 0x0006000c, 0x0000000c, 0x000002d3, 0x00000001, 0x00000008, 0x000001ae, + 0x0004006e, 0x00000050, 0x000002d4, 0x000002d3, 0x00050041, 0x00000058, 0x000002d5, 0x00000020, + 0x00000057, 0x0004003d, 0x0000000c, 0x000002d6, 0x000002d5, 0x0004006e, 0x00000050, 0x000002d7, + 0x000002d6, 0x00050082, 0x00000050, 0x000002d9, 0x000002d7, 0x000003ba, 0x000500b1, 0x00000061, + 0x000002db, 0x000002d4, 0x00000060, 0x0004009a, 0x00000031, 0x000002dc, 0x000002db, 0x000400a8, + 0x00000031, 0x000002dd, 0x000002dc, 0x000300f7, 0x000002e3, 0x00000000, 0x000400fa, 0x000002dd, + 0x000002de, 0x000002e3, 0x000200f8, 0x000002de, 0x000500ad, 0x00000061, 0x000002e1, 0x000002d4, + 0x000002d9, 0x0004009a, 0x00000031, 0x000002e2, 0x000002e1, 0x000200f9, 0x000002e3, 0x000200f8, + 0x000002e3, 0x000700f5, 0x00000031, 0x000002e4, 0x000002dc, 0x000002d1, 0x000002e2, 0x000002de, + 0x000300f7, 0x000002e6, 0x00000000, 0x000400fa, 0x000002e4, 0x000002e5, 0x000002e6, 0x000200f8, + 0x000002e5, 0x000200f9, 0x00000310, 0x000200f8, 0x000002e6, 0x000200f9, 0x000002e7, 0x000200f8, + 0x000002e7, 0x000700f5, 0x00000006, 0x0000037d, 0x00000070, 0x000002e6, 0x00000380, 0x0000030b, + 0x000700f5, 0x00000021, 0x0000037c, 0x00000073, 0x000002e6, 0x0000030d, 0x0000030b, 0x000500b3, + 0x00000031, 0x000002ea, 0x0000037c, 0x0000005c, 0x000400f6, 0x0000030e, 0x0000030b, 0x00000000, + 0x000400fa, 0x000002ea, 0x000002eb, 0x0000030e, 0x000200f8, 0x000002eb, 0x000200f9, 0x000002ec, + 0x000200f8, 0x000002ec, 0x000700f5, 0x00000006, 0x00000380, 0x0000037d, 0x000002eb, 0x000003b4, + 0x00000307, 0x000700f5, 0x00000021, 0x0000037e, 0x00000073, 0x000002eb, 0x00000309, 0x00000307, + 0x000500b3, 0x00000031, 0x000002ef, 0x0000037e, 0x0000005c, 0x000400f6, 0x0000030a, 0x00000307, + 0x00000000, 0x000400fa, 0x000002ef, 0x000002f0, 0x0000030a, 0x000200f8, 0x000002f0, 0x0004003d, + 0x00000084, 0x000002f1, 0x00000086, 0x00050050, 0x00000050, 0x000002f5, 0x0000037e, 0x0000037c, + 0x00050080, 0x00000050, 0x000002f6, 0x000002d4, 0x000002f5, 0x0008000c, 0x00000050, 0x000002f8, + 0x00000001, 0x0000002d, 0x000002f6, 0x00000060, 0x000002d9, 0x00050062, 0x00000013, 0x000002f9, + 0x000002f1, 0x000002f8, 0x00050051, 0x00000006, 0x000002fa, 0x000002f9, 0x00000000, 0x000500ba, + 0x00000031, 0x000002fc, 0x000002fa, 0x00000035, 0x000300f7, 0x00000306, 0x00000000, 0x000400fa, + 0x000002fc, 0x000002fd, 0x00000306, 0x000200f8, 0x000002fd, 0x00050083, 0x00000006, 0x00000301, + 0x000002fa, 0x00000371, 0x0006000c, 0x00000006, 0x00000302, 0x00000001, 0x00000004, 0x00000301, + 0x00050088, 0x00000006, 0x00000304, 0x00000302, 0x00000371, 0x0007000c, 0x00000006, 0x00000305, + 0x00000001, 0x00000025, 0x00000380, 0x00000304, 0x000200f9, 0x00000306, 0x000200f8, 0x00000306, + 0x000700f5, 0x00000006, 0x000003b4, 0x00000380, 0x000002f0, 0x00000305, 0x000002fd, 0x000200f9, + 0x00000307, 0x000200f8, 0x00000307, 0x00050080, 0x00000021, 0x00000309, 0x0000037e, 0x0000005c, + 0x000200f9, 0x000002ec, 0x000200f8, 0x0000030a, 0x000200f9, 0x0000030b, 0x000200f8, 0x0000030b, + 0x00050080, 0x00000021, 0x0000030d, 0x0000037c, 0x0000005c, 0x000200f9, 0x000002e7, 0x000200f8, + 0x0000030e, 0x000200f9, 0x00000310, 0x000200f8, 0x00000310, 0x000700f5, 0x00000006, 0x00000382, + 0x00000035, 0x000002e5, 0x0000037d, 0x0000030e, 0x000200f9, 0x000001ab, 0x000200f8, 0x000001b3, + 0x000200f9, 0x000001ab, 0x000200f8, 0x000001ab, 0x000700f5, 0x00000006, 0x00000383, 0x00000382, + 0x00000310, 0x00000070, 0x000001b3, 0x000500ba, 0x00000031, 0x000001b7, 0x00000383, 0x000001b6, + 0x000300f7, 0x000001b9, 0x00000000, 0x000400fa, 0x000001b7, 0x000001b8, 0x000001b9, 0x000200f8, + 0x000001b8, 0x000300f7, 0x0000035b, 0x00000000, 0x000300fb, 0x0000002a, 0x0000031c, 0x000200f8, + 0x0000031c, 0x0006000c, 0x0000000c, 0x0000031e, 0x00000001, 0x00000008, 0x000000ee, 0x0004006e, + 0x00000050, 0x0000031f, 0x0000031e, 0x00050041, 0x00000058, 0x00000320, 0x00000020, 0x00000057, + 0x0004003d, 0x0000000c, 0x00000321, 0x00000320, 0x0004006e, 0x00000050, 0x00000322, 0x00000321, + 0x00050082, 0x00000050, 0x00000324, 0x00000322, 0x000003ba, 0x000500b1, 0x00000061, 0x00000326, + 0x0000031f, 0x00000060, 0x0004009a, 0x00000031, 0x00000327, 0x00000326, 0x000400a8, 0x00000031, + 0x00000328, 0x00000327, 0x000300f7, 0x0000032e, 0x00000000, 0x000400fa, 0x00000328, 0x00000329, + 0x0000032e, 0x000200f8, 0x00000329, 0x000500ad, 0x00000061, 0x0000032c, 0x0000031f, 0x00000324, + 0x0004009a, 0x00000031, 0x0000032d, 0x0000032c, 0x000200f9, 0x0000032e, 0x000200f8, 0x0000032e, + 0x000700f5, 0x00000031, 0x0000032f, 0x00000327, 0x0000031c, 0x0000032d, 0x00000329, 0x000300f7, + 0x00000331, 0x00000000, 0x000400fa, 0x0000032f, 0x00000330, 0x00000331, 0x000200f8, 0x00000330, + 0x000200f9, 0x0000035b, 0x000200f8, 0x00000331, 0x000200f9, 0x00000332, 0x000200f8, 0x00000332, + 0x000700f5, 0x00000006, 0x00000385, 0x00000070, 0x00000331, 0x00000388, 0x00000356, 0x000700f5, + 0x00000021, 0x00000384, 0x00000073, 0x00000331, 0x00000358, 0x00000356, 0x000500b3, 0x00000031, + 0x00000335, 0x00000384, 0x0000005c, 0x000400f6, 0x00000359, 0x00000356, 0x00000000, 0x000400fa, + 0x00000335, 0x00000336, 0x00000359, 0x000200f8, 0x00000336, 0x000200f9, 0x00000337, 0x000200f8, + 0x00000337, 0x000700f5, 0x00000006, 0x00000388, 0x00000385, 0x00000336, 0x000003b6, 0x00000352, + 0x000700f5, 0x00000021, 0x00000386, 0x00000073, 0x00000336, 0x00000354, 0x00000352, 0x000500b3, + 0x00000031, 0x0000033a, 0x00000386, 0x0000005c, 0x000400f6, 0x00000355, 0x00000352, 0x00000000, + 0x000400fa, 0x0000033a, 0x0000033b, 0x00000355, 0x000200f8, 0x0000033b, 0x0004003d, 0x00000084, + 0x0000033c, 0x00000086, 0x00050050, 0x00000050, 0x00000340, 0x00000386, 0x00000384, 0x00050080, + 0x00000050, 0x00000341, 0x0000031f, 0x00000340, 0x0008000c, 0x00000050, 0x00000343, 0x00000001, + 0x0000002d, 0x00000341, 0x00000060, 0x00000324, 0x00050062, 0x00000013, 0x00000344, 0x0000033c, + 0x00000343, 0x00050051, 0x00000006, 0x00000345, 0x00000344, 0x00000000, 0x000500ba, 0x00000031, + 0x00000347, 0x00000345, 0x00000035, 0x000300f7, 0x00000351, 0x00000000, 0x000400fa, 0x00000347, + 0x00000348, 0x00000351, 0x000200f8, 0x00000348, 0x00050083, 0x00000006, 0x0000034c, 0x00000345, + 0x0000036e, 0x0006000c, 0x00000006, 0x0000034d, 0x00000001, 0x00000004, 0x0000034c, 0x00050088, + 0x00000006, 0x0000034f, 0x0000034d, 0x0000036e, 0x0007000c, 0x00000006, 0x00000350, 0x00000001, + 0x00000025, 0x00000388, 0x0000034f, 0x000200f9, 0x00000351, 0x000200f8, 0x00000351, 0x000700f5, + 0x00000006, 0x000003b6, 0x00000388, 0x0000033b, 0x00000350, 0x00000348, 0x000200f9, 0x00000352, + 0x000200f8, 0x00000352, 0x00050080, 0x00000021, 0x00000354, 0x00000386, 0x0000005c, 0x000200f9, + 0x00000337, 0x000200f8, 0x00000355, 0x000200f9, 0x00000356, 0x000200f8, 0x00000356, 0x00050080, + 0x00000021, 0x00000358, 0x00000384, 0x0000005c, 0x000200f9, 0x00000332, 0x000200f8, 0x00000359, + 0x000200f9, 0x0000035b, 0x000200f8, 0x0000035b, 0x000700f5, 0x00000006, 0x0000038a, 0x00000035, + 0x00000330, 0x00000385, 0x00000359, 0x000500b8, 0x00000031, 0x000001bf, 0x0000038a, 0x000001b6, + 0x00050050, 0x00000061, 0x000003c0, 0x000001bf, 0x000001bf, 0x000600a9, 0x0000000c, 0x000003c1, + 0x000003c0, 0x00000133, 0x00000378, 0x000200f9, 0x000001b9, 0x000200f8, 0x000001b9, 0x000700f5, + 0x0000000c, 0x0000038c, 0x00000378, 0x000001ab, 0x000003c1, 0x0000035b, 0x000600a9, 0x00000006, + 0x000003c2, 0x000001b7, 0x000000a8, 0x00000035, 0x000200f9, 0x0000018c, 0x000200f8, 0x0000018c, + 0x000700f5, 0x00000006, 0x00000399, 0x00000035, 0x0000017c, 0x000003c2, 0x000001b9, 0x000700f5, + 0x0000000c, 0x0000038b, 0x00000378, 0x0000017c, 0x0000038c, 0x000001b9, 0x0004003d, 0x000001c2, + 0x000001c5, 0x000001c4, 0x00050051, 0x00000006, 0x000001c8, 0x0000038b, 0x00000000, 0x00050051, + 0x00000006, 0x000001c9, 0x0000038b, 0x00000001, 0x00070050, 0x00000013, 0x000001ca, 0x000001c8, + 0x000001c9, 0x00000035, 0x00000035, 0x00040063, 0x000001c5, 0x000000c8, 0x000001ca, 0x000300f7, + 0x000001cf, 0x00000000, 0x000400fa, 0x00000169, 0x000001ce, 0x000001cf, 0x000200f8, 0x000001ce, + 0x0004003d, 0x000001d0, 0x000001d3, 0x000001d2, 0x00050041, 0x00000025, 0x000001d7, 0x00000020, + 0x000001d6, 0x0004003d, 0x00000006, 0x000001d8, 0x000001d7, 0x00050085, 0x00000006, 0x000001d9, + 0x00000399, 0x000001d8, 0x00070050, 0x00000013, 0x000001da, 0x000001d9, 0x000001d9, 0x000001d9, + 0x000001d9, 0x00040063, 0x000001d3, 0x000000c8, 0x000001da, 0x000200f9, 0x000001cf, 0x000200f8, + 0x000001cf, 0x00050041, 0x00000025, 0x000001dc, 0x00000020, 0x000001db, 0x0004003d, 0x00000006, + 0x000001dd, 0x000001dc, 0x000500bc, 0x00000031, 0x000001de, 0x000001dd, 0x00000035, 0x000300f7, + 0x000001e0, 0x00000000, 0x000400fa, 0x000001de, 0x000001df, 0x000001e0, 0x000200f8, 0x000001df, + 0x000200f9, 0x0000022f, 0x000200f8, 0x000001e0, 0x0004003d, 0x000000de, 0x000001e4, 0x000001e3, + 0x00040064, 0x000000dd, 0x000001e6, 0x000001e4, 0x0007005f, 0x00000013, 0x000001e7, 0x000001e6, + 0x000000c8, 0x00000002, 0x00000057, 0x00050051, 0x00000006, 0x000001e8, 0x000001e7, 0x00000001, + 0x000500ba, 0x00000031, 0x000001ea, 0x000001e8, 0x000001e9, 0x000600a9, 0x00000006, 0x000001eb, + 0x000001ea, 0x000000a8, 0x00000035, 0x0004003d, 0x000001d0, 0x000001ed, 0x000001ec, 0x00070050, + 0x00000013, 0x000001f0, 0x000001eb, 0x000001eb, 0x000001eb, 0x000001eb, 0x00040063, 0x000001ed, + 0x000000c8, 0x000001f0, 0x00050041, 0x00000025, 0x000001f2, 0x00000020, 0x0000010a, 0x0004003d, + 0x00000006, 0x000001f3, 0x000001f2, 0x000500ba, 0x00000031, 0x000001f4, 0x000001f3, 0x000000e9, + 0x000300f7, 0x000001f6, 0x00000000, 0x000400fa, 0x000001f4, 0x000001f5, 0x000001f6, 0x000200f8, + 0x000001f5, 0x00050081, 0x0000000c, 0x000001fa, 0x000000ee, 0x0000038b, 0x0006000c, 0x0000000c, + 0x000001fb, 0x00000001, 0x00000008, 0x000001fa, 0x0004006e, 0x00000050, 0x000001fc, 0x000001fb, + 0x00050041, 0x00000058, 0x000001fe, 0x00000020, 0x00000057, 0x0004003d, 0x0000000c, 0x000001ff, + 0x000001fe, 0x0004006e, 0x00000050, 0x00000200, 0x000001ff, 0x00050082, 0x00000050, 0x00000202, + 0x00000200, 0x000003ba, 0x000200f9, 0x00000204, 0x000200f8, 0x00000204, 0x000700f5, 0x00000006, + 0x000003af, 0x00000035, 0x000001f5, 0x000003b2, 0x00000207, 0x000700f5, 0x00000021, 0x000003ad, + 0x00000073, 0x000001f5, 0x00000223, 0x00000207, 0x000500b3, 0x00000031, 0x0000020a, 0x000003ad, + 0x0000005c, 0x000400f6, 0x00000206, 0x00000207, 0x00000000, 0x000400fa, 0x0000020a, 0x00000205, + 0x00000206, 0x000200f8, 0x00000205, 0x000200f9, 0x0000020c, 0x000200f8, 0x0000020c, 0x000700f5, + 0x00000006, 0x000003b2, 0x000003af, 0x00000205, 0x0000021f, 0x0000020d, 0x000700f5, 0x00000021, + 0x000003b0, 0x00000073, 0x00000205, 0x00000221, 0x0000020d, 0x000500b3, 0x00000031, 0x00000212, + 0x000003b0, 0x0000005c, 0x000400f6, 0x0000020e, 0x0000020d, 0x00000000, 0x000400fa, 0x00000212, + 0x0000020d, 0x0000020e, 0x000200f8, 0x0000020d, 0x0004003d, 0x000001d0, 0x00000215, 0x00000214, + 0x00050050, 0x00000050, 0x00000219, 0x000003b0, 0x000003ad, 0x00050080, 0x00000050, 0x0000021a, + 0x000001fc, 0x00000219, 0x0008000c, 0x00000050, 0x0000021c, 0x00000001, 0x0000002d, 0x0000021a, + 0x00000060, 0x00000202, 0x00050062, 0x00000013, 0x0000021d, 0x00000215, 0x0000021c, 0x00050051, + 0x00000006, 0x0000021e, 0x0000021d, 0x00000000, 0x0007000c, 0x00000006, 0x0000021f, 0x00000001, + 0x00000028, 0x000003b2, 0x0000021e, 0x00050080, 0x00000021, 0x00000221, 0x000003b0, 0x0000005c, + 0x000200f9, 0x0000020c, 0x000200f8, 0x0000020e, 0x000200f9, 0x00000207, 0x000200f8, 0x00000207, + 0x00050080, 0x00000021, 0x00000223, 0x000003ad, 0x0000005c, 0x000200f9, 0x00000204, 0x000200f8, + 0x00000206, 0x000200f9, 0x000001f6, 0x000200f8, 0x000001f6, 0x000700f5, 0x00000006, 0x000003ae, + 0x00000035, 0x000001e0, 0x000003af, 0x00000206, 0x0004003d, 0x000001d0, 0x00000224, 0x000001d2, + 0x0007000c, 0x00000006, 0x00000228, 0x00000001, 0x00000028, 0x000001eb, 0x000003ae, 0x00050085, + 0x00000006, 0x0000022b, 0x00000228, 0x000001dd, 0x00070050, 0x00000013, 0x0000022c, 0x0000022b, + 0x0000022b, 0x0000022b, 0x0000022b, 0x00040063, 0x00000224, 0x000000c8, 0x0000022c, 0x000200f9, + 0x0000022f, 0x000200f8, 0x0000022f, 0x000100fd, 0x00010038, }; diff --git a/runtime/shaders/dlaa_mv.comp b/runtime/shaders/dlaa_mv.comp index 2cae9546..e8c099a0 100644 --- a/runtime/shaders/dlaa_mv.comp +++ b/runtime/shaders/dlaa_mv.comp @@ -2,7 +2,7 @@ // Camera motion vectors for DLAA (vk_dlaa.c mv_pass): each pixel's depth is taken back to the world through this // frame's view-projection and forward through last frame's; the vector is last frame's window position minus this // frame's, in render pixels, without the jitter (DLSS's default convention). Objects that move on their own get only -// the camera's motion. +// the camera's motion here: the per-object pass (vk_exec_draw.c) or the depth check below corrects theirs. // The camera block is NX2navi's scene uniform block (bound as c4 in the scene's vertex shaders): vec4 rows 3-6 are the // view-projection, rows of a row-major 4x4 with OpenGL clip depth (-w..w). The replay's viewports have negative // heights, so window y grows downwards from ndc y = +1, and depth is z_ndc * 0.5 + 0.5. @@ -12,6 +12,14 @@ // from last frame (the previous class mask, read through the motion vector, 3x3): there the history holds a moving // character that the camera-only vector does not follow, which is the trail. chars_out keeps this frame's mask for the // next; chars_prev is last frame's (pc.prev_ok 0: none). +// Each pixel's view distance is also kept for the next frame (depth_out; depth_prev is last frame's, pc.zprev_ok 1 when +// it holds one). With pc.zfit > 0 (a frame without object motion and without the class buffer: Ocarina's) the vector is +// checked against it. The camera's motion predicts how far the surface was last frame at the place it came from; where +// last frame's depth there disagrees, the surface moved on its own. The commonest such surface is the character the +// camera follows, which stays where it is on screen: when last frame's depth at the same pixel agrees, the vector is +// zero instead. Either way such a pixel gets the bias mask (pc.zmask), so DLSS takes this frame's colour where its +// history holds something else (the trail behind a running Link). pc.dz: the projection's depth terms (rows 2 and 3, +// columns 2 and 3) that take ndc depth back to view distance. layout(local_size_x = 8, local_size_y = 8) in; layout(binding = 0) uniform sampler2D depth_tex; layout(binding = 1, rg16f) uniform writeonly image2D mv_out; @@ -21,13 +29,43 @@ layout(binding = 4) uniform sampler2D ids_tex; layout(binding = 5, r8) uniform writeonly image2D mask_out; layout(binding = 6, r8) uniform readonly image2D chars_prev; layout(binding = 7, r8) uniform writeonly image2D chars_out; +layout(binding = 8, r32f) uniform readonly image2D depth_prev; +layout(binding = 9, r32f) uniform writeonly image2D depth_out; layout(push_constant) uniform P { vec2 size; // render size in pixels vec2 jitter; // this frame's jitter, pixels, as the scene was drawn (window x right, y down) float bias; // the mask value for character pixels; 0: no mask (bindings 4-7 unused) float prev_ok; // 1: chars_prev holds last frame's class mask at this size + float zfit; // 1: the depth check above; 0: off + float zprev_ok;// 1: depth_prev holds last frame's view distances at this size + vec4 dz; // the projection's [2][2], [2][3], [3][2], [3][3] (row-major) + float zmask; // the depth check's mask value (0: the vectors are checked, no mask) } pc; +// View distance from ndc depth; 0 for the sky and other points at or past the far plane. +float dist(float zn) { + float den = pc.dz.z * zn - pc.dz.x; + if (abs(den) < 1e-12) return 0.0; + float z = (pc.dz.y - pc.dz.w * zn) / den; + return abs(z) < 1e7 ? abs(z) : 0.0; +} + +// How far last frame's distance near window position w is from the distance expected there, relative: the closest of +// the 3x3 pixels around it, so a reprojection that lands a pixel across a silhouette (foliage, a roof's edge) is not +// taken for motion. 0 off screen (nothing to compare: the surface just came into view, DLSS handles that), 1e9 where +// last frame had only sky there. +float miss(vec2 w, float expect) { + ivec2 q = ivec2(floor(w)), hi = ivec2(pc.size) - 1; + if (any(lessThan(q, ivec2(0))) || any(greaterThan(q, hi))) return 0.0; + float best = 1e9; + for (int dy = -1; dy <= 1; dy++) + for (int dx = -1; dx <= 1; dx++) { + float was = imageLoad(depth_prev, clamp(q + ivec2(dx, dy), ivec2(0), hi)).r; + if (was > 0.0) best = min(best, abs(was - expect) / expect); + } + return best; +} + mat4 vp(vec4 a, vec4 b, vec4 c, vec4 d) { return transpose(mat4(a, b, c, d)); } void main() { @@ -48,7 +86,24 @@ void main() { mv = pwin - win; } } + float zn = d * 2.0 - 1.0, here = pc.zfit > 0.0 ? dist(zn) : 0.0; + imageStore(depth_out, p, vec4(here)); + float moved = 0.0; + if (pc.zfit > 0.0 && pc.zprev_ok > 0.5 && here > 0.0 && abs(world.w) > 1e-12) { + vec4 clip = q * (world / world.w); + float there = abs(clip.w) > 1e-12 ? dist(clip.z / clip.w) : 0.0; + // 4 %: the depth of a still surface reprojected through the camera lands within about 1 % of last frame's + // (sub-pixel position and the depth buffer's precision); a character a step away from the wall behind it is + // 10 % and more + const float TOL = 0.04; + float cam = there > 0.0 ? miss(win + mv, there) : 1e9; + if (cam > TOL) { + moved = 1.0; + if (miss(win, here) < TOL) mv = vec2(0.0); // it kept its place on screen: the followed character + } + } imageStore(mv_out, p, vec4(mv, 0.0, 0.0)); + if (pc.zfit > 0.0) imageStore(mask_out, p, vec4(moved * pc.zmask)); if (pc.bias <= 0.0) return; float ch = texelFetch(ids_tex, p, 0).g > 64.0 / 255.0 ? 1.0 : 0.0; imageStore(chars_out, p, vec4(ch)); diff --git a/runtime/vk_dlaa.c b/runtime/vk_dlaa.c index c63ab805..37a51ba6 100644 --- a/runtime/vk_dlaa.c +++ b/runtime/vk_dlaa.c @@ -315,6 +315,10 @@ static struct { VmaAllocation mask_mem, chars_mem[2]; VkImageView mask_view, chars_view[2]; int chars_cur, chars_ok; // chars[chars_cur] is written next; chars_ok: the other holds last frame's + VkImage dist[2]; // each pixel's view distance, this and last frame (R32F, dlaa_mv.comp depth_out) + VmaAllocation dist_mem[2]; + VkImageView dist_view[2]; + int dist_cur, dist_ok; // as chars_cur and chars_ok NgxHandle *feat; uint64_t used; // evals count when it last ran } sizes[5], *last; // last: the one the previous DLAA frame ran with @@ -434,6 +438,8 @@ static void free_size(struct Size *e) { for (int i = 0; i < 2; i++) { if (e->chars_view[i]) vkDestroyImageView(c->device, e->chars_view[i], NULL); if (e->chars[i]) vmaDestroyImage(c->vma, e->chars[i], e->chars_mem[i]); + if (e->dist_view[i]) vkDestroyImageView(c->device, e->dist_view[i], NULL); + if (e->dist[i]) vmaDestroyImage(c->vma, e->dist[i], e->dist_mem[i]); } if (e->feat && N.release) N.release(e->feat); memset(e, 0, sizeof *e); @@ -461,11 +467,13 @@ static struct Size *size_for(VkCommandBuffer cb, uint32_t w, uint32_t h, uint32_ !image2d(w, h, VK_FORMAT_R16G16_SFLOAT, u | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, &e->mv, &e->mv_mem, &e->mv_view) || !image2d(w, h, VK_FORMAT_R8_UNORM, u8, &e->mask, &e->mask_mem, &e->mask_view) || !image2d(w, h, VK_FORMAT_R8_UNORM, u8, &e->chars[0], &e->chars_mem[0], &e->chars_view[0]) || - !image2d(w, h, VK_FORMAT_R8_UNORM, u8, &e->chars[1], &e->chars_mem[1], &e->chars_view[1])) + !image2d(w, h, VK_FORMAT_R8_UNORM, u8, &e->chars[1], &e->chars_mem[1], &e->chars_view[1]) || + !image2d(w, h, VK_FORMAT_R32_SFLOAT, u8, &e->dist[0], &e->dist_mem[0], &e->dist_view[0]) || + !image2d(w, h, VK_FORMAT_R32_SFLOAT, u8, &e->dist[1], &e->dist_mem[1], &e->dist_view[1])) return NULL; - VkImageMemoryBarrier2 ib[5]; - VkImage im[5] = {e->out, e->mv, e->mask, e->chars[0], e->chars[1]}; - for (int i = 0; i < 5; i++) + VkImageMemoryBarrier2 ib[7]; + VkImage im[7] = {e->out, e->mv, e->mask, e->chars[0], e->chars[1], e->dist[0], e->dist[1]}; + for (int i = 0; i < 7; i++) ib[i] = (VkImageMemoryBarrier2){.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2, .srcStageMask = VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, .dstStageMask = VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, @@ -474,7 +482,7 @@ static struct Size *size_for(VkCommandBuffer cb, uint32_t w, uint32_t h, uint32_ .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, .image = im[i], .subresourceRange = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1}}; - VkDependencyInfo di = {.sType = VK_STRUCTURE_TYPE_DEPENDENCY_INFO, .imageMemoryBarrierCount = 5, + VkDependencyInfo di = {.sType = VK_STRUCTURE_TYPE_DEPENDENCY_INFO, .imageMemoryBarrierCount = 7, .pImageMemoryBarriers = ib}; vkCmdPipelineBarrier2(cb, &di); e->w = w, e->h = h, e->ow = ow, e->oh = oh; @@ -571,11 +579,18 @@ static void times_begin(VkCommandBuffer cb) { #define CAM_SLOT 0xa00u // camb slot stride #define MVM_SLOTS 16u // frames the GPU may still be reading the reprojection blocks of +// dlaa_mv.comp's push constants in its layout (std430: dz at offset 32) +typedef struct { + float size[2], jitter[2], bias, prev_ok, zfit, zprev_ok; + float dz[4]; // the projection's [2][2], [2][3], [3][2], [3][3] + float zmask; +} MvPush; + static int mv_init(void) { if (D.mv_ok >= 0) return D.mv_ok; D.mv_ok = 0; const VkCtx *c = vk_ctx(); - VkDescriptorSetLayoutBinding b[8] = { + VkDescriptorSetLayoutBinding b[10] = { {0, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, VK_SHADER_STAGE_COMPUTE_BIT, NULL}, {1, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, 1, VK_SHADER_STAGE_COMPUTE_BIT, NULL}, {2, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 1, VK_SHADER_STAGE_COMPUTE_BIT, NULL}, @@ -583,11 +598,13 @@ static int mv_init(void) { {4, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, VK_SHADER_STAGE_COMPUTE_BIT, NULL}, {5, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, 1, VK_SHADER_STAGE_COMPUTE_BIT, NULL}, {6, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, 1, VK_SHADER_STAGE_COMPUTE_BIT, NULL}, - {7, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, 1, VK_SHADER_STAGE_COMPUTE_BIT, NULL}}; + {7, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, 1, VK_SHADER_STAGE_COMPUTE_BIT, NULL}, + {8, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, 1, VK_SHADER_STAGE_COMPUTE_BIT, NULL}, + {9, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, 1, VK_SHADER_STAGE_COMPUTE_BIT, NULL}}; VkDescriptorSetLayoutCreateInfo dci = {.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO, .flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR, - .bindingCount = 8, .pBindings = b}; - VkPushConstantRange pr = {VK_SHADER_STAGE_COMPUTE_BIT, 0, 24}; + .bindingCount = 10, .pBindings = b}; + VkPushConstantRange pr = {VK_SHADER_STAGE_COMPUTE_BIT, 0, sizeof(MvPush)}; VkSamplerCreateInfo si = {.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO, .magFilter = VK_FILTER_NEAREST, .minFilter = VK_FILTER_NEAREST, .mipmapMode = VK_SAMPLER_MIPMAP_MODE_NEAREST, .addressModeU = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, @@ -707,7 +724,7 @@ static int mv_pass(VkExec *ex, struct Size *e, VkImageView zv, float jx, float j !vk_usnap_find(D.cam_addr, D.cam_size == OCAM_BLOCK ? OCAM_BYTES : D.cam_size, 4, &cam)) { D.mv_none++; D.cam_prev_ok = 0; - e->chars_ok = 0; + e->chars_ok = e->dist_ok = 0; return 0; } // this frame's view-projection as the snapshot holds it, for the reprojection; kept as last frame's for the next @@ -740,7 +757,7 @@ static int mv_pass(VkExec *ex, struct Size *e, VkImageView zv, float jx, float j D.cam_slot ^= 1, D.cam_prev_ok = cr != NULL; if (cr) memcpy(D.cam_prev, cur_vp, sizeof cur_vp); if (!had_prev || !have_m) { // nothing to reproject into: zero motion, new history - e->chars_ok = 0; + e->chars_ok = e->dist_ok = 0; return 0; } VkDescriptorImageInfo zi = {D.mv_samp, zv, VK_IMAGE_LAYOUT_GENERAL}; @@ -766,7 +783,9 @@ static int mv_pass(VkExec *ex, struct Size *e, VkImageView zv, float jx, float j VkDescriptorImageInfo mki = {VK_NULL_HANDLE, e->mask_view, VK_IMAGE_LAYOUT_GENERAL}; VkDescriptorImageInfo cpi = {VK_NULL_HANDLE, e->chars_view[cur_c ^ 1], VK_IMAGE_LAYOUT_GENERAL}; VkDescriptorImageInfo coi = {VK_NULL_HANDLE, e->chars_view[cur_c], VK_IMAGE_LAYOUT_GENERAL}; - VkWriteDescriptorSet wr[8] = { + VkDescriptorImageInfo dpi = {VK_NULL_HANDLE, e->dist_view[e->dist_cur ^ 1], VK_IMAGE_LAYOUT_GENERAL}; + VkDescriptorImageInfo doi = {VK_NULL_HANDLE, e->dist_view[e->dist_cur], VK_IMAGE_LAYOUT_GENERAL}; + VkWriteDescriptorSet wr[10] = { {.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, .dstBinding = 0, .descriptorCount = 1, .descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, .pImageInfo = &zi}, {.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, .dstBinding = 1, .descriptorCount = 1, @@ -782,13 +801,26 @@ static int mv_pass(VkExec *ex, struct Size *e, VkImageView zv, float jx, float j {.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, .dstBinding = 6, .descriptorCount = 1, .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, .pImageInfo = &cpi}, {.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, .dstBinding = 7, .descriptorCount = 1, - .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, .pImageInfo = &coi}}; + .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, .pImageInfo = &coi}, + {.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, .dstBinding = 8, .descriptorCount = 1, + .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, .pImageInfo = &dpi}, + {.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, .dstBinding = 9, .descriptorCount = 1, + .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, .pImageInfo = &doi}}; times_begin(cb); times_mark(cb, T_MV0); vkCmdBindPipeline(cb, VK_PIPELINE_BIND_POINT_COMPUTE, D.mv_pipe); - rec_push(vk_pipeline_push_fn(), cb, VK_PIPELINE_BIND_POINT_COMPUTE, D.mv_layout, 0, 8, wr); - float pc[6] = {(float)w, (float)h, jx, jy, use ? bias : 0.0f, use && e->chars_ok ? 1.0f : 0.0f}; - vkCmdPushConstants(cb, D.mv_layout, VK_SHADER_STAGE_COMPUTE_BIT, 0, sizeof pc, pc); + rec_push(vk_pipeline_push_fn(), cb, VK_PIPELINE_BIND_POINT_COMPUTE, D.mv_layout, 0, 10, wr); + // The depth check (dlaa_mv.comp, depth_prev) where nothing else gives characters their own motion: Ocarina's frame, + // which has neither the per-object pass nor the class buffer. Its distances take the projection's depth terms from + // rows 7-10 of the scene context (ocam_vp). NX2NAVI_DLAA_ZFIT=0 (test): the camera's motion alone, as before. + static int zfit_on = -1; + if (zfit_on < 0) zfit_on = rt_knob("DLAA_ZFIT", "1"); + int zfit = zfit_on && !use && cr && D.cam_size == OCAM_BLOCK; + MvPush pc = {{(float)w, (float)h}, {jx, jy}, use ? bias : 0.0f, use && e->chars_ok ? 1.0f : 0.0f, + zfit ? 1.0f : 0.0f, zfit && e->dist_ok ? 1.0f : 0.0f, + {zfit ? cr[38] : 0.0f, zfit ? cr[39] : 0.0f, zfit ? cr[42] : 0.0f, zfit ? cr[43] : 0.0f}, + zfit ? bias : 0.0f}; + vkCmdPushConstants(cb, D.mv_layout, VK_SHADER_STAGE_COMPUTE_BIT, 0, sizeof pc, &pc); vkCmdDispatch(cb, (w + 7) / 8, (h + 7) / 8, 1); full_barrier(cb); times_mark(cb, T_MV1); @@ -803,7 +835,9 @@ static int mv_pass(VkExec *ex, struct Size *e, VkImageView zv, float jx, float j D.mv_frames++; if (use) e->chars_cur ^= 1, e->chars_ok = 1, D.masked++; else e->chars_ok = 0; - *masked = use; + if (zfit && bias > 0) D.masked++; + e->dist_cur ^= 1, e->dist_ok = zfit; + *masked = use || (zfit && bias > 0); return 1; } @@ -1081,7 +1115,9 @@ static int preset_value(void) { // How strongly DLSS favours the current frame on characters and where they just were (NX2NAVI_DLSS_CHAR_MASK, percent, // live; 0 off). Where a character's vectors are the camera's only (dlaa_objmv = 0, or a draw the per-object pass // skips), one that moves on its own drags a faint copy of itself through DLSS's history; the bias mask makes DLSS take -// less of the history there, at the cost of some of its anti-aliasing on those pixels. +// less of the history there, at the cost of some of its anti-aliasing on those pixels. Ocarina's frame has no class +// buffer to find characters by: there the mask covers the pixels whose depth the camera's motion does not explain +// (dlaa_mv.comp, the depth check). static float char_bias(void) { const char *v = cfg_get("NX2NAVI_DLSS_CHAR_MASK"); long n = v && *v ? strtol(v, NULL, 10) : 65; @@ -1233,9 +1269,10 @@ evaluated: if (mvdebug < 0) mvdebug = rt_knob("DLAA_MVDEBUG", "0"); static int maskdebug = -1; if (maskdebug < 0) maskdebug = rt_knob("DLAA_MASKDEBUG", "0"); - if (mvdebug || (maskdebug && mk)) b.srcOffsets[1] = (VkOffset3D){(int32_t)w, (int32_t)h, 1}; - vkCmdBlitImage(cb, mvdebug ? e->mv : maskdebug && mk ? mk->mask : e->out, VK_IMAGE_LAYOUT_GENERAL, dst->image, VK_IMAGE_LAYOUT_GENERAL, 1, &b, - VK_FILTER_NEAREST); + // (NX2NAVI_DLAA_MASKDEBUG=1 shows whichever bias mask DLSS got: the reactive one, or the characters') + VkImage shown = mvdebug ? e->mv : maskdebug && mk ? mk->mask : maskdebug && masked ? e->mask : e->out; + if (shown != e->out) b.srcOffsets[1] = (VkOffset3D){(int32_t)w, (int32_t)h, 1}; + vkCmdBlitImage(cb, shown, VK_IMAGE_LAYOUT_GENERAL, dst->image, VK_IMAGE_LAYOUT_GENERAL, 1, &b, VK_FILTER_NEAREST); full_barrier(cb); if (dst != t) vk_dlaa_swap_img = t->img, vk_dlaa_swap_view = e->out_view; // the scaling draw reads DLSS's picture if (vk_dlaa_hudless_wanted) hudless(cb, e, ow, oh); // frame generation keeps the HUD out of its generated frames diff --git a/runtime/vk_dump.c b/runtime/vk_dump.c index ee0dd4ae..dc9b9189 100644 --- a/runtime/vk_dump.c +++ b/runtime/vk_dump.c @@ -674,6 +674,12 @@ static void describe_bindings(Str *b, const VkExec *ex, const VkPipeInfo *info) mf == 1 || mf == 3 || mf == 5 ? "L" : "N", mf <= 1 ? "none" : mf >= 4 ? "L" : "N", wrap_name(s.ws), wrap_name(s.wt), wrap_name(s.wr), s.aniso, s.lod_min, s.lod_max, s.lod_bias, s.cmp_mode ? " compare" : ""); + int bw = 0; // a border wrap: its colour, as the sampler builder stored it + for (int k = 0; k < 3; k++) { + uint8_t wm = k == 0 ? s.ws : k == 1 ? s.wt : s.wr; + bw |= wm == NVN_WRAP_MODE_CLAMP_TO_BORDER || wm == NVN_WRAP_MODE_MIRROR_CLAMP_TO_BORDER; + } + if (bw) sp(b, " border %g,%g,%g,%g", s.border[0], s.border[1], s.border[2], s.border[3]); } else { sp(b, " | samp %d empty (default sampler)", NVN_HANDLE_SAMP(h)); }