From 9427667a271a06e4215b6e762e69dd9a1fccbadf Mon Sep 17 00:00:00 2001 From: Triang3l Date: Thu, 6 Dec 2018 10:19:07 +0300 Subject: [PATCH] [D3D12] Experimental 2x resolution scale --- src/xenia/cpu/mmio_handler.cc | 14 +- .../gpu/d3d12/d3d12_command_processor.cc | 79 +- src/xenia/gpu/d3d12/d3d12_command_processor.h | 4 + src/xenia/gpu/d3d12/d3d12_graphics_system.cc | 3 +- src/xenia/gpu/d3d12/render_target_cache.cc | 273 +++++-- src/xenia/gpu/d3d12/render_target_cache.h | 73 +- src/xenia/gpu/d3d12/shaders/byte_swap.hlsli | 3 +- .../shaders/dxbc/edram_clear_32bpp_cs.cso | Bin 1788 -> 1976 bytes .../d3d12/shaders/dxbc/edram_clear_32bpp_cs.h | 130 +-- .../shaders/dxbc/edram_clear_32bpp_cs.txt | 51 +- .../shaders/dxbc/edram_clear_64bpp_cs.cso | Bin 1600 -> 1880 bytes .../d3d12/shaders/dxbc/edram_clear_64bpp_cs.h | 139 ++-- .../shaders/dxbc/edram_clear_64bpp_cs.txt | 53 +- .../dxbc/edram_clear_depth_float_cs.cso | Bin 1940 -> 2052 bytes .../shaders/dxbc/edram_clear_depth_float_cs.h | 91 ++- .../dxbc/edram_clear_depth_float_cs.txt | 11 +- .../edram_load_color_32bpp_2x_resolve_cs.cso | Bin 0 -> 2116 bytes .../edram_load_color_32bpp_2x_resolve_cs.h | 181 +++++ .../edram_load_color_32bpp_2x_resolve_cs.txt | 92 +++ .../dxbc/edram_load_color_32bpp_cs.cso | Bin 1548 -> 1660 bytes .../shaders/dxbc/edram_load_color_32bpp_cs.h | 76 +- .../dxbc/edram_load_color_32bpp_cs.txt | 11 +- .../edram_load_color_64bpp_2x_resolve_cs.cso | Bin 0 -> 2056 bytes .../edram_load_color_64bpp_2x_resolve_cs.h | 176 ++++ .../edram_load_color_64bpp_2x_resolve_cs.txt | 86 ++ .../dxbc/edram_load_color_64bpp_cs.cso | Bin 1376 -> 1488 bytes .../shaders/dxbc/edram_load_color_64bpp_cs.h | 75 +- .../dxbc/edram_load_color_64bpp_cs.txt | 9 +- .../edram_load_color_7e3_2x_resolve_cs.cso | Bin 0 -> 8964 bytes .../dxbc/edram_load_color_7e3_2x_resolve_cs.h | 751 ++++++++++++++++++ .../edram_load_color_7e3_2x_resolve_cs.txt | 276 +++++++ .../shaders/dxbc/edram_load_color_7e3_cs.cso | Bin 3232 -> 3344 bytes .../shaders/dxbc/edram_load_color_7e3_cs.h | 287 +++---- .../shaders/dxbc/edram_load_color_7e3_cs.txt | 11 +- .../dxbc/edram_load_depth_float_cs.cso | Bin 3184 -> 3296 bytes .../shaders/dxbc/edram_load_depth_float_cs.h | 331 ++++---- .../dxbc/edram_load_depth_float_cs.txt | 11 +- .../dxbc/edram_load_depth_unorm_cs.cso | Bin 1796 -> 1908 bytes .../shaders/dxbc/edram_load_depth_unorm_cs.h | 117 +-- .../dxbc/edram_load_depth_unorm_cs.txt | 11 +- .../dxbc/edram_store_color_32bpp_cs.cso | Bin 1548 -> 1660 bytes .../shaders/dxbc/edram_store_color_32bpp_cs.h | 56 +- .../dxbc/edram_store_color_32bpp_cs.txt | 11 +- .../dxbc/edram_store_color_64bpp_cs.cso | Bin 1376 -> 1488 bytes .../shaders/dxbc/edram_store_color_64bpp_cs.h | 55 +- .../dxbc/edram_store_color_64bpp_cs.txt | 9 +- .../shaders/dxbc/edram_store_color_7e3_cs.cso | Bin 3284 -> 3396 bytes .../shaders/dxbc/edram_store_color_7e3_cs.h | 61 +- .../shaders/dxbc/edram_store_color_7e3_cs.txt | 11 +- .../dxbc/edram_store_depth_float_cs.cso | Bin 2344 -> 2456 bytes .../shaders/dxbc/edram_store_depth_float_cs.h | 71 +- .../dxbc/edram_store_depth_float_cs.txt | 11 +- .../dxbc/edram_store_depth_unorm_cs.cso | Bin 1700 -> 1812 bytes .../shaders/dxbc/edram_store_depth_unorm_cs.h | 57 +- .../dxbc/edram_store_depth_unorm_cs.txt | 11 +- .../dxbc/edram_tile_sample_32bpp_cs.cso | Bin 5228 -> 6544 bytes .../shaders/dxbc/edram_tile_sample_32bpp_cs.h | 652 ++++++++------- .../dxbc/edram_tile_sample_32bpp_cs.txt | 296 ++++--- .../dxbc/edram_tile_sample_64bpp_cs.cso | Bin 5500 -> 6756 bytes .../shaders/dxbc/edram_tile_sample_64bpp_cs.h | 676 +++++++++------- .../dxbc/edram_tile_sample_64bpp_cs.txt | 316 ++++---- .../shaders/dxbc/primitive_point_list_gs.cso | Bin 7672 -> 7676 bytes .../shaders/dxbc/primitive_point_list_gs.h | 698 ++++++++-------- .../shaders/dxbc/primitive_point_list_gs.txt | 8 +- .../gpu/d3d12/shaders/dxbc/resolve_ps.cso | Bin 1848 -> 1884 bytes src/xenia/gpu/d3d12/shaders/dxbc/resolve_ps.h | 99 +-- .../gpu/d3d12/shaders/dxbc/resolve_ps.txt | 38 +- .../dxbc/texture_load_128bpb_2x_cs.cso | Bin 0 -> 6072 bytes .../shaders/dxbc/texture_load_128bpb_2x_cs.h | 510 ++++++++++++ .../dxbc/texture_load_128bpb_2x_cs.txt | 190 +++++ .../shaders/dxbc/texture_load_128bpb_cs.cso | Bin 6956 -> 6956 bytes .../shaders/dxbc/texture_load_128bpb_cs.h | 16 +- .../shaders/dxbc/texture_load_128bpb_cs.txt | 10 +- .../shaders/dxbc/texture_load_16bpb_2x_cs.cso | Bin 0 -> 6792 bytes .../shaders/dxbc/texture_load_16bpb_2x_cs.h | 570 +++++++++++++ .../shaders/dxbc/texture_load_16bpb_2x_cs.txt | 196 +++++ .../shaders/dxbc/texture_load_16bpb_cs.cso | Bin 7464 -> 7336 bytes .../shaders/dxbc/texture_load_16bpb_cs.h | 184 ++--- .../shaders/dxbc/texture_load_16bpb_cs.txt | 12 +- .../shaders/dxbc/texture_load_32bpb_2x_cs.cso | Bin 0 -> 5032 bytes .../shaders/dxbc/texture_load_32bpb_2x_cs.h | 424 ++++++++++ .../shaders/dxbc/texture_load_32bpb_2x_cs.txt | 153 ++++ .../shaders/dxbc/texture_load_64bpb_2x_cs.cso | Bin 0 -> 5420 bytes .../shaders/dxbc/texture_load_64bpb_2x_cs.h | 456 +++++++++++ .../shaders/dxbc/texture_load_64bpb_2x_cs.txt | 166 ++++ .../shaders/dxbc/texture_load_8bpb_2x_cs.cso | Bin 0 -> 6112 bytes .../shaders/dxbc/texture_load_8bpb_2x_cs.h | 514 ++++++++++++ .../shaders/dxbc/texture_load_8bpb_2x_cs.txt | 158 ++++ .../dxbc/texture_load_depth_float_2x_cs.cso | Bin 0 -> 5660 bytes .../dxbc/texture_load_depth_float_2x_cs.h | 476 +++++++++++ .../dxbc/texture_load_depth_float_2x_cs.txt | 169 ++++ .../dxbc/texture_load_depth_unorm_2x_cs.cso | Bin 0 -> 5132 bytes .../dxbc/texture_load_depth_unorm_2x_cs.h | 432 ++++++++++ .../dxbc/texture_load_depth_unorm_2x_cs.txt | 156 ++++ .../texture_load_r10g11b11_rgba16_2x_cs.cso | Bin 0 -> 5968 bytes .../texture_load_r10g11b11_rgba16_2x_cs.h | 502 ++++++++++++ .../texture_load_r10g11b11_rgba16_2x_cs.txt | 176 ++++ ...ture_load_r10g11b11_rgba16_snorm_2x_cs.cso | Bin 0 -> 6788 bytes ...exture_load_r10g11b11_rgba16_snorm_2x_cs.h | 570 +++++++++++++ ...ture_load_r10g11b11_rgba16_snorm_2x_cs.txt | 199 +++++ .../texture_load_r11g11b10_rgba16_2x_cs.cso | Bin 0 -> 6008 bytes .../texture_load_r11g11b10_rgba16_2x_cs.h | 505 ++++++++++++ .../texture_load_r11g11b10_rgba16_2x_cs.txt | 178 +++++ ...ture_load_r11g11b10_rgba16_snorm_2x_cs.cso | Bin 0 -> 6788 bytes ...exture_load_r11g11b10_rgba16_snorm_2x_cs.h | 570 +++++++++++++ ...ture_load_r11g11b10_rgba16_snorm_2x_cs.txt | 199 +++++ .../shaders/dxbc/texture_tile_128bpp_cs.cso | Bin 3116 -> 3424 bytes .../shaders/dxbc/texture_tile_128bpp_cs.h | 426 +++++----- .../shaders/dxbc/texture_tile_128bpp_cs.txt | 69 +- .../shaders/dxbc/texture_tile_16bpp_cs.cso | Bin 4432 -> 4756 bytes .../shaders/dxbc/texture_tile_16bpp_cs.h | 379 +++++---- .../shaders/dxbc/texture_tile_16bpp_cs.txt | 86 +- .../dxbc/texture_tile_16bpp_rgba_cs.cso | Bin 4732 -> 5076 bytes .../shaders/dxbc/texture_tile_16bpp_rgba_cs.h | 632 ++++++++------- .../dxbc/texture_tile_16bpp_rgba_cs.txt | 88 +- .../shaders/dxbc/texture_tile_32bpp_cs.cso | Bin 3964 -> 4284 bytes .../shaders/dxbc/texture_tile_32bpp_cs.h | 540 +++++++------ .../shaders/dxbc/texture_tile_32bpp_cs.txt | 92 ++- .../shaders/dxbc/texture_tile_64bpp_cs.cso | Bin 4656 -> 4916 bytes .../shaders/dxbc/texture_tile_64bpp_cs.h | 574 ++++++------- .../shaders/dxbc/texture_tile_64bpp_cs.txt | 90 ++- .../shaders/dxbc/texture_tile_8bpp_cs.cso | Bin 3592 -> 3864 bytes .../d3d12/shaders/dxbc/texture_tile_8bpp_cs.h | 476 +++++------ .../shaders/dxbc/texture_tile_8bpp_cs.txt | 65 +- .../dxbc/texture_tile_r10g11b11_rgba16_cs.cso | Bin 4976 -> 5336 bytes .../dxbc/texture_tile_r10g11b11_rgba16_cs.h | 610 +++++++------- .../dxbc/texture_tile_r10g11b11_rgba16_cs.txt | 155 ++-- .../dxbc/texture_tile_r11g11b10_rgba16_cs.cso | Bin 4976 -> 5336 bytes .../dxbc/texture_tile_r11g11b10_rgba16_cs.h | 610 +++++++------- .../dxbc/texture_tile_r11g11b10_rgba16_cs.txt | 155 ++-- .../d3d12/shaders/edram_clear_32bpp.cs.hlsl | 28 +- .../d3d12/shaders/edram_clear_64bpp.cs.hlsl | 31 +- .../edram_load_color_32bpp_2x_resolve.cs.hlsl | 39 + .../edram_load_color_64bpp_2x_resolve.cs.hlsl | 47 ++ .../shaders/edram_load_color_7e3.cs.hlsl | 6 +- .../edram_load_color_7e3_2x_resolve.cs.hlsl | 59 ++ .../gpu/d3d12/shaders/edram_load_store.hlsli | 74 +- .../shaders/edram_store_color_7e3.cs.hlsl | 5 +- .../shaders/edram_tile_sample_32bpp.cs.hlsl | 164 +++- .../shaders/edram_tile_sample_64bpp.cs.hlsl | 174 ++-- .../gpu/d3d12/shaders/pixel_formats.hlsli | 23 +- src/xenia/gpu/d3d12/shaders/resolve.ps.hlsl | 16 +- .../d3d12/shaders/texture_load_128bpb.cs.hlsl | 5 +- .../shaders/texture_load_128bpb_2x.cs.hlsl | 29 + .../d3d12/shaders/texture_load_16bpb.cs.hlsl | 8 +- .../shaders/texture_load_16bpb_2x.cs.hlsl | 43 + .../shaders/texture_load_32bpb_2x.cs.hlsl | 18 + .../shaders/texture_load_64bpb_2x.cs.hlsl | 21 + .../shaders/texture_load_8bpb_2x.cs.hlsl | 24 + .../texture_load_depth_float_2x.cs.hlsl | 22 + .../texture_load_depth_unorm_2x.cs.hlsl | 22 + .../texture_load_r10g11b11_rgba16_2x.cs.hlsl | 44 + ...ure_load_r10g11b11_rgba16_snorm_2x.cs.hlsl | 29 + .../texture_load_r11g11b10_rgba16_2x.cs.hlsl | 44 + ...ure_load_r11g11b10_rgba16_snorm_2x.cs.hlsl | 29 + .../gpu/d3d12/shaders/texture_tile.hlsli | 50 +- .../d3d12/shaders/texture_tile_128bpp.cs.hlsl | 9 +- .../d3d12/shaders/texture_tile_16bpp.cs.hlsl | 15 +- .../shaders/texture_tile_16bpp_rgba.cs.hlsl | 12 +- .../d3d12/shaders/texture_tile_32bpp.cs.hlsl | 10 +- .../d3d12/shaders/texture_tile_64bpp.cs.hlsl | 15 +- .../d3d12/shaders/texture_tile_8bpp.cs.hlsl | 8 +- .../texture_tile_r10g11b11_rgba16.cs.hlsl | 15 +- .../texture_tile_r11g11b10_rgba16.cs.hlsl | 15 +- src/xenia/gpu/d3d12/shaders/xenos_draw.hlsli | 2 +- src/xenia/gpu/d3d12/shared_memory.cc | 81 +- src/xenia/gpu/d3d12/shared_memory.h | 53 +- src/xenia/gpu/d3d12/texture_cache.cc | 638 +++++++++++++-- src/xenia/gpu/d3d12/texture_cache.h | 88 +- src/xenia/gpu/dxbc_shader_translator.cc | 297 ++++++- src/xenia/gpu/dxbc_shader_translator.h | 12 +- src/xenia/gpu/texture_util.cc | 35 + src/xenia/gpu/texture_util.h | 7 + 173 files changed, 16680 insertions(+), 4985 deletions(-) create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/edram_load_color_32bpp_2x_resolve_cs.cso create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/edram_load_color_32bpp_2x_resolve_cs.h create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/edram_load_color_32bpp_2x_resolve_cs.txt create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/edram_load_color_64bpp_2x_resolve_cs.cso create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/edram_load_color_64bpp_2x_resolve_cs.h create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/edram_load_color_64bpp_2x_resolve_cs.txt create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/edram_load_color_7e3_2x_resolve_cs.cso create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/edram_load_color_7e3_2x_resolve_cs.h create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/edram_load_color_7e3_2x_resolve_cs.txt create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/texture_load_128bpb_2x_cs.cso create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/texture_load_128bpb_2x_cs.h create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/texture_load_128bpb_2x_cs.txt create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/texture_load_16bpb_2x_cs.cso create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/texture_load_16bpb_2x_cs.h create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/texture_load_16bpb_2x_cs.txt create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/texture_load_32bpb_2x_cs.cso create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/texture_load_32bpb_2x_cs.h create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/texture_load_32bpb_2x_cs.txt create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/texture_load_64bpb_2x_cs.cso create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/texture_load_64bpb_2x_cs.h create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/texture_load_64bpb_2x_cs.txt create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/texture_load_8bpb_2x_cs.cso create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/texture_load_8bpb_2x_cs.h create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/texture_load_8bpb_2x_cs.txt create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/texture_load_depth_float_2x_cs.cso create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/texture_load_depth_float_2x_cs.h create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/texture_load_depth_float_2x_cs.txt create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/texture_load_depth_unorm_2x_cs.cso create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/texture_load_depth_unorm_2x_cs.h create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/texture_load_depth_unorm_2x_cs.txt create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/texture_load_r10g11b11_rgba16_2x_cs.cso create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/texture_load_r10g11b11_rgba16_2x_cs.h create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/texture_load_r10g11b11_rgba16_2x_cs.txt create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/texture_load_r10g11b11_rgba16_snorm_2x_cs.cso create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/texture_load_r10g11b11_rgba16_snorm_2x_cs.h create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/texture_load_r10g11b11_rgba16_snorm_2x_cs.txt create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/texture_load_r11g11b10_rgba16_2x_cs.cso create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/texture_load_r11g11b10_rgba16_2x_cs.h create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/texture_load_r11g11b10_rgba16_2x_cs.txt create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/texture_load_r11g11b10_rgba16_snorm_2x_cs.cso create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/texture_load_r11g11b10_rgba16_snorm_2x_cs.h create mode 100644 src/xenia/gpu/d3d12/shaders/dxbc/texture_load_r11g11b10_rgba16_snorm_2x_cs.txt create mode 100644 src/xenia/gpu/d3d12/shaders/edram_load_color_32bpp_2x_resolve.cs.hlsl create mode 100644 src/xenia/gpu/d3d12/shaders/edram_load_color_64bpp_2x_resolve.cs.hlsl create mode 100644 src/xenia/gpu/d3d12/shaders/edram_load_color_7e3_2x_resolve.cs.hlsl create mode 100644 src/xenia/gpu/d3d12/shaders/texture_load_128bpb_2x.cs.hlsl create mode 100644 src/xenia/gpu/d3d12/shaders/texture_load_16bpb_2x.cs.hlsl create mode 100644 src/xenia/gpu/d3d12/shaders/texture_load_32bpb_2x.cs.hlsl create mode 100644 src/xenia/gpu/d3d12/shaders/texture_load_64bpb_2x.cs.hlsl create mode 100644 src/xenia/gpu/d3d12/shaders/texture_load_8bpb_2x.cs.hlsl create mode 100644 src/xenia/gpu/d3d12/shaders/texture_load_depth_float_2x.cs.hlsl create mode 100644 src/xenia/gpu/d3d12/shaders/texture_load_depth_unorm_2x.cs.hlsl create mode 100644 src/xenia/gpu/d3d12/shaders/texture_load_r10g11b11_rgba16_2x.cs.hlsl create mode 100644 src/xenia/gpu/d3d12/shaders/texture_load_r10g11b11_rgba16_snorm_2x.cs.hlsl create mode 100644 src/xenia/gpu/d3d12/shaders/texture_load_r11g11b10_rgba16_2x.cs.hlsl create mode 100644 src/xenia/gpu/d3d12/shaders/texture_load_r11g11b10_rgba16_snorm_2x.cs.hlsl diff --git a/src/xenia/cpu/mmio_handler.cc b/src/xenia/cpu/mmio_handler.cc index 6bf065650..e6cbb24ca 100644 --- a/src/xenia/cpu/mmio_handler.cc +++ b/src/xenia/cpu/mmio_handler.cc @@ -245,13 +245,15 @@ void* MMIOHandler::RegisterPhysicalWriteWatch( void MMIOHandler::UnregisterPhysicalWriteWatch(void* watch_handle) { auto entry = reinterpret_cast(watch_handle); - auto lock = global_critical_region_.Acquire(); - auto it = std::find(physical_write_watches_.begin(), - physical_write_watches_.end(), entry); - assert_false(it == physical_write_watches_.end()); - if (it != physical_write_watches_.end()) { - physical_write_watches_.erase(it); + { + auto lock = global_critical_region_.Acquire(); + auto it = std::find(physical_write_watches_.begin(), + physical_write_watches_.end(), entry); + assert_false(it == physical_write_watches_.end()); + if (it != physical_write_watches_.end()) { + physical_write_watches_.erase(it); + } } delete entry; diff --git a/src/xenia/gpu/d3d12/d3d12_command_processor.cc b/src/xenia/gpu/d3d12/d3d12_command_processor.cc index ce2981c42..2e5eb9d2d 100644 --- a/src/xenia/gpu/d3d12/d3d12_command_processor.cc +++ b/src/xenia/gpu/d3d12/d3d12_command_processor.cc @@ -628,6 +628,19 @@ void D3D12CommandProcessor::SetExternalGraphicsPipeline( } } +std::wstring D3D12CommandProcessor::GetWindowTitleText() const { + if (IsROVUsedForEDRAM()) { + // Currently scaling is only supported with ROV. + if (texture_cache_ != nullptr && texture_cache_->IsResolutionScale2X()) { + return L"Direct3D 12 - ROV 2x"; + } else { + return L"Direct3D 12 - ROV"; + } + } else { + return L"Direct3D 12 - RT"; + } +} + bool D3D12CommandProcessor::SetupContext() { if (!CommandProcessor::SetupContext()) { XELOGE("Failed to initialize base command processor context"); @@ -671,7 +684,7 @@ bool D3D12CommandProcessor::SetupContext() { render_target_cache_ = std::make_unique(this, register_file_); - if (!render_target_cache_->Initialize()) { + if (!render_target_cache_->Initialize(texture_cache_.get())) { XELOGE("Failed to initialize the render target cache"); return false; } @@ -740,6 +753,10 @@ bool D3D12CommandProcessor::SetupContext() { swap_texture_desc.Alignment = 0; swap_texture_desc.Width = kSwapTextureWidth; swap_texture_desc.Height = kSwapTextureHeight; + if (texture_cache_->IsResolutionScale2X()) { + swap_texture_desc.Width *= 2; + swap_texture_desc.Height *= 2; + } swap_texture_desc.DepthOrArraySize = 1; swap_texture_desc.MipLevels = 1; swap_texture_desc.Format = ui::d3d12::D3D12Context::kSwapChainFormat; @@ -1010,21 +1027,28 @@ void D3D12CommandProcessor::PerformSwap(uint32_t frontbuffer_ptr, gamma_ramp_texture_state_ = D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE; SubmitBarriers(); + uint32_t swap_texture_width = kSwapTextureWidth; + uint32_t swap_texture_height = kSwapTextureHeight; + if (texture_cache_->IsResolutionScale2X()) { + swap_texture_width *= 2; + swap_texture_height *= 2; + } + // Draw the stretching rectangle. command_list->OMSetRenderTargets(1, &swap_texture_rtv_, TRUE, nullptr); D3D12_VIEWPORT viewport; viewport.TopLeftX = 0.0f; viewport.TopLeftY = 0.0f; - viewport.Width = float(kSwapTextureWidth); - viewport.Height = float(kSwapTextureHeight); + viewport.Width = float(swap_texture_width); + viewport.Height = float(swap_texture_height); viewport.MinDepth = 0.0f; viewport.MaxDepth = 0.0f; command_list->RSSetViewports(1, &viewport); D3D12_RECT scissor; scissor.left = 0; scissor.top = 0; - scissor.right = kSwapTextureWidth; - scissor.bottom = kSwapTextureHeight; + scissor.right = swap_texture_width; + scissor.bottom = swap_texture_height; command_list->RSSetScissorRects(1, &scissor); D3D12GraphicsSystem* graphics_system = static_cast(graphics_system_); @@ -1041,8 +1065,8 @@ void D3D12CommandProcessor::PerformSwap(uint32_t frontbuffer_ptr, // Don't care about graphics state because the frame is ending anyway. { std::lock_guard lock(swap_state_.mutex); - swap_state_.width = kSwapTextureWidth; - swap_state_.height = kSwapTextureHeight; + swap_state_.width = swap_texture_width; + swap_state_.height = swap_texture_height; swap_state_.front_buffer_texture = reinterpret_cast(swap_texture_srv_descriptor_heap_); } @@ -1484,16 +1508,21 @@ void D3D12CommandProcessor::UpdateFixedFunctionState( } // Supersampling replacing multisampling due to difficulties of emulating - // EDRAM with multisampling with RTV/DSV (with ROV, there's MSAA). - uint32_t ssaa_scale_x, ssaa_scale_y; + // EDRAM with multisampling with RTV/DSV (with ROV, there's MSAA), and also + // resolution scale. + uint32_t pixel_size_x, pixel_size_y; if (IsROVUsedForEDRAM()) { - ssaa_scale_x = 1; - ssaa_scale_y = 1; + pixel_size_x = 1; + pixel_size_y = 1; } else { MsaaSamples msaa_samples = MsaaSamples((regs[XE_GPU_REG_RB_SURFACE_INFO].u32 >> 16) & 0x3); - ssaa_scale_x = msaa_samples >= MsaaSamples::k4X ? 2 : 1; - ssaa_scale_y = msaa_samples >= MsaaSamples::k2X ? 2 : 1; + pixel_size_x = msaa_samples >= MsaaSamples::k4X ? 2 : 1; + pixel_size_y = msaa_samples >= MsaaSamples::k2X ? 2 : 1; + } + if (texture_cache_->IsResolutionScale2X()) { + pixel_size_x *= 2; + pixel_size_y *= 2; } // Viewport. @@ -1534,11 +1563,11 @@ void D3D12CommandProcessor::UpdateFixedFunctionState( } D3D12_VIEWPORT viewport; viewport.TopLeftX = - (viewport_offset_x - viewport_scale_x) * float(ssaa_scale_x); + (viewport_offset_x - viewport_scale_x) * float(pixel_size_x); viewport.TopLeftY = - (viewport_offset_y - viewport_scale_y) * float(ssaa_scale_y); - viewport.Width = viewport_scale_x * 2.0f * float(ssaa_scale_x); - viewport.Height = viewport_scale_y * 2.0f * float(ssaa_scale_y); + (viewport_offset_y - viewport_scale_y) * float(pixel_size_y); + viewport.Width = viewport_scale_x * 2.0f * float(pixel_size_x); + viewport.Height = viewport_scale_y * 2.0f * float(pixel_size_y); viewport.MinDepth = viewport_offset_z; viewport.MaxDepth = viewport_offset_z + viewport_scale_z; if (viewport_scale_z < 0.0f) { @@ -1575,10 +1604,10 @@ void D3D12CommandProcessor::UpdateFixedFunctionState( scissor.right = std::max(scissor.right + window_offset_x, LONG(0)); scissor.bottom = std::max(scissor.bottom + window_offset_y, LONG(0)); } - scissor.left *= ssaa_scale_x; - scissor.top *= ssaa_scale_y; - scissor.right *= ssaa_scale_x; - scissor.bottom *= ssaa_scale_y; + scissor.left *= pixel_size_x; + scissor.top *= pixel_size_y; + scissor.right *= pixel_size_x; + scissor.bottom *= pixel_size_y; ff_scissor_update_needed_ |= ff_scissor_.left != scissor.left; ff_scissor_update_needed_ |= ff_scissor_.top != scissor.top; ff_scissor_update_needed_ |= ff_scissor_.right != scissor.right; @@ -2041,8 +2070,14 @@ void D3D12CommandProcessor::UpdateSystemConstantValues( } } - // Depth/stencil testing and blend constant for ROV blending. + // Resolution scale, depth/stencil testing and blend constant for ROV. if (IsROVUsedForEDRAM()) { + uint32_t resolution_scale_log2 = + texture_cache_->IsResolutionScale2X() ? 1 : 0; + dirty |= + system_constants_.edram_resolution_scale_log2 != resolution_scale_log2; + system_constants_.edram_resolution_scale_log2 = resolution_scale_log2; + uint32_t depth_base_dwords = (rb_depth_info & 0xFFF) * 1280; dirty |= system_constants_.edram_depth_base_dwords != depth_base_dwords; system_constants_.edram_depth_base_dwords = depth_base_dwords; diff --git a/src/xenia/gpu/d3d12/d3d12_command_processor.h b/src/xenia/gpu/d3d12/d3d12_command_processor.h index 1aec1b1de..b612c2471 100644 --- a/src/xenia/gpu/d3d12/d3d12_command_processor.h +++ b/src/xenia/gpu/d3d12/d3d12_command_processor.h @@ -13,6 +13,7 @@ #include #include #include +#include #include #include "xenia/gpu/command_processor.h" @@ -128,6 +129,9 @@ class D3D12CommandProcessor : public CommandProcessor { bool reset_blend_factor = false, bool reset_stencil_ref = false); + // Returns the text to display in the GPU backend name in the window title. + std::wstring GetWindowTitleText() const; + protected: bool SetupContext() override; void ShutdownContext() override; diff --git a/src/xenia/gpu/d3d12/d3d12_graphics_system.cc b/src/xenia/gpu/d3d12/d3d12_graphics_system.cc index b1a261591..ce810f0a8 100644 --- a/src/xenia/gpu/d3d12/d3d12_graphics_system.cc +++ b/src/xenia/gpu/d3d12/d3d12_graphics_system.cc @@ -31,8 +31,7 @@ std::wstring D3D12GraphicsSystem::name() const { auto d3d12_command_processor = static_cast(command_processor()); if (d3d12_command_processor != nullptr) { - return d3d12_command_processor->IsROVUsedForEDRAM() ? L"Direct3D 12 - ROV" - : L"Direct3D 12 - RT"; + return d3d12_command_processor->GetWindowTitleText(); } return L"Direct3D 12"; } diff --git a/src/xenia/gpu/d3d12/render_target_cache.cc b/src/xenia/gpu/d3d12/render_target_cache.cc index b9e57074e..63cb4b49f 100644 --- a/src/xenia/gpu/d3d12/render_target_cache.cc +++ b/src/xenia/gpu/d3d12/render_target_cache.cc @@ -9,6 +9,8 @@ #include "xenia/gpu/d3d12/render_target_cache.h" +#include + #include #include #include @@ -23,6 +25,13 @@ #include "xenia/gpu/texture_util.h" #include "xenia/ui/d3d12/d3d12_util.h" +DEFINE_bool(d3d12_resolution_scale_resolve_edge_clamp, true, + "When using resolution scale, apply the hack that duplicates the " + "right/lower subpixel in the left and top sides of render target " + "resolve areas to eliminate the gap caused by half-pixel offset " + "(this is necessary for certain games like GTA IV to work)."); +DECLARE_bool(d3d12_half_pixel_offset); + namespace xe { namespace gpu { namespace d3d12 { @@ -31,8 +40,11 @@ namespace d3d12 { #include "xenia/gpu/d3d12/shaders/dxbc/edram_clear_32bpp_cs.h" #include "xenia/gpu/d3d12/shaders/dxbc/edram_clear_64bpp_cs.h" #include "xenia/gpu/d3d12/shaders/dxbc/edram_clear_depth_float_cs.h" +#include "xenia/gpu/d3d12/shaders/dxbc/edram_load_color_32bpp_2x_resolve_cs.h" #include "xenia/gpu/d3d12/shaders/dxbc/edram_load_color_32bpp_cs.h" +#include "xenia/gpu/d3d12/shaders/dxbc/edram_load_color_64bpp_2x_resolve_cs.h" #include "xenia/gpu/d3d12/shaders/dxbc/edram_load_color_64bpp_cs.h" +#include "xenia/gpu/d3d12/shaders/dxbc/edram_load_color_7e3_2x_resolve_cs.h" #include "xenia/gpu/d3d12/shaders/dxbc/edram_load_color_7e3_cs.h" #include "xenia/gpu/d3d12/shaders/dxbc/edram_load_depth_float_cs.h" #include "xenia/gpu/d3d12/shaders/dxbc/edram_load_depth_unorm_cs.h" @@ -56,19 +68,30 @@ const RenderTargetCache::EDRAMLoadStoreModeInfo RenderTargetCache::EDRAMLoadStoreMode::kCount)] = { {edram_load_color_32bpp_cs, sizeof(edram_load_color_32bpp_cs), L"EDRAM Load 32bpp Color", edram_store_color_32bpp_cs, - sizeof(edram_store_color_32bpp_cs), L"EDRAM Store 32bpp Color"}, + sizeof(edram_store_color_32bpp_cs), L"EDRAM Store 32bpp Color", + edram_load_color_32bpp_2x_resolve_cs, + sizeof(edram_load_color_32bpp_2x_resolve_cs), + L"EDRAM Load 32bpp Color for 2x Resolve"}, {edram_load_color_64bpp_cs, sizeof(edram_load_color_64bpp_cs), L"EDRAM Load 64bpp Color", edram_store_color_64bpp_cs, - sizeof(edram_store_color_64bpp_cs), L"EDRAM Store 64bpp Color"}, + sizeof(edram_store_color_64bpp_cs), L"EDRAM Store 64bpp Color", + edram_load_color_64bpp_2x_resolve_cs, + sizeof(edram_load_color_64bpp_2x_resolve_cs), + L"EDRAM Load 64bpp Color for 2x Resolve"}, {edram_load_color_7e3_cs, sizeof(edram_load_color_7e3_cs), L"EDRAM Load 7e3 Color", edram_store_color_7e3_cs, - sizeof(edram_store_color_7e3_cs), L"EDRAM Store 7e3 Color"}, + sizeof(edram_store_color_7e3_cs), L"EDRAM Store 7e3 Color", + edram_load_color_7e3_2x_resolve_cs, + sizeof(edram_load_color_7e3_2x_resolve_cs), + L"EDRAM Load 7e3 Color for 2x Resolve"}, {edram_load_depth_unorm_cs, sizeof(edram_load_depth_unorm_cs), L"EDRAM Load UNorm Depth", edram_store_depth_unorm_cs, - sizeof(edram_store_depth_unorm_cs), L"EDRAM Store UNorm Depth"}, + sizeof(edram_store_depth_unorm_cs), L"EDRAM Store UNorm Depth", + nullptr, 0, nullptr}, {edram_load_depth_float_cs, sizeof(edram_load_depth_float_cs), L"EDRAM Load Float Depth", edram_store_depth_float_cs, - sizeof(edram_store_depth_float_cs), L"EDRAM Store Float Depth"}, + sizeof(edram_store_depth_float_cs), L"EDRAM Store Float Depth", + nullptr, 0, nullptr}, }; RenderTargetCache::RenderTargetCache(D3D12CommandProcessor* command_processor, @@ -77,7 +100,12 @@ RenderTargetCache::RenderTargetCache(D3D12CommandProcessor* command_processor, RenderTargetCache::~RenderTargetCache() { Shutdown(); } -bool RenderTargetCache::Initialize() { +bool RenderTargetCache::Initialize(const TextureCache* texture_cache) { + // EDRAM buffer size depends on this. + resolution_scale_2x_ = texture_cache->IsResolutionScale2X(); + assert_false(resolution_scale_2x_ && + !command_processor_->IsROVUsedForEDRAM()); + auto provider = command_processor_->GetD3D12Context()->GetD3D12Provider(); auto device = provider->GetDevice(); @@ -162,14 +190,32 @@ bool RenderTargetCache::Initialize() { edram_store_pipelines_[i] = ui::d3d12::util::CreateComputePipeline( device, mode_info.store_shader, mode_info.store_shader_size, edram_load_store_root_signature_); + // Load shader for resolution-scaled resolves (host pixels within samples to + // samples within host pixels) doesn't always exist for each mode - depth is + // not resolved using drawing, for example. + bool load_2x_resolve_pipeline_used = + resolution_scale_2x_ && mode_info.load_2x_resolve_shader != nullptr; + if (load_2x_resolve_pipeline_used) { + edram_load_2x_resolve_pipelines_[i] = + ui::d3d12::util::CreateComputePipeline( + device, mode_info.load_2x_resolve_shader, + mode_info.load_2x_resolve_shader_size, + edram_load_store_root_signature_); + } if (edram_load_pipelines_[i] == nullptr || - edram_store_pipelines_[i] == nullptr) { + edram_store_pipelines_[i] == nullptr || + (load_2x_resolve_pipeline_used && + edram_load_2x_resolve_pipelines_[i] == nullptr)) { XELOGE("Failed to create the EDRAM load/store pipelines for mode %u", i); Shutdown(); return false; } edram_load_pipelines_[i]->SetName(mode_info.load_pipeline_name); edram_store_pipelines_[i]->SetName(mode_info.store_pipeline_name); + if (edram_load_2x_resolve_pipelines_[i] != nullptr) { + edram_load_pipelines_[i]->SetName( + mode_info.load_2x_resolve_pipeline_name); + } } // Tile single sample into a texture - 32 bits per pixel. edram_tile_sample_32bpp_pipeline_ = ui::d3d12::util::CreateComputePipeline( @@ -1095,14 +1141,8 @@ bool RenderTargetCache::ResolveCopy(SharedMemory* shared_memory, // resolve to 8bpp or 16bpp textures at very odd locations. return false; } - uint32_t dest_size = texture_util::GetGuestMipSliceStorageSize( - xe::align(dest_pitch, 32u), xe::align(dest_height, 32u), 1, true, - dest_format, nullptr); - if (dest_info & (1 << 3)) { - // Copying to an array slice. - dest_address += dest_size * ((dest_info >> 4) & 0x7); - } - // TODO(Triang3l): Investigate what copy_dest_number is. + // Currently not caring about copy_dest_array because it's untested, and + // Direct3D 9 would likely offset to the correct slice. XELOGGPU( "Resolve: Copying samples %u to 0x%.8X (%ux%u), destination format %s, " @@ -1141,6 +1181,14 @@ bool RenderTargetCache::ResolveCopy(SharedMemory* shared_memory, // RTV of the destination format. auto provider = command_processor_->GetD3D12Context()->GetD3D12Provider(); auto device = provider->GetDevice(); + uint32_t resolution_scale_log2 = resolution_scale_2x_ ? 1 : 0; + // Check if we need to apply the hack to remove the gap on the left and top + // sides of the screen caused by half-pixel offset becoming whole pixel offset + // with scaled rendering resolution. + bool resolution_scale_edge_clamp = + resolution_scale_2x_ && FLAGS_d3d12_resolution_scale_resolve_edge_clamp && + FLAGS_d3d12_half_pixel_offset && + !(regs[XE_GPU_REG_PA_SU_VTX_CNTL].u32 & 0x1); if (sample_select <= xenos::CopySampleSelect::k3 && src_texture_format == dest_format && dest_exp_bias == 0) { // ************************************************************************* @@ -1148,9 +1196,31 @@ bool RenderTargetCache::ResolveCopy(SharedMemory* shared_memory, // ************************************************************************* XELOGGPU("Resolve: Copying using a compute shader"); + // Calculate the address and the size of the region that specifically + // is being resolved. Can't just use the texture height for size calculation + // because it's sometimes bigger than needed (in Red Dead Redemption, an UI + // texture used for the letterbox bars alpha is located within a 1280x720 + // resolve target, but only 1280x208 is being resolved, and with scaled + // resolution the UI texture gets ignored). + dest_address += texture_util::GetTiledOffset2D( + int(rect.left & ~LONG(31)), int(rect.top & ~LONG(31)), dest_pitch, + src_64bpp ? 3 : 2); + uint32_t dest_size = texture_util::GetGuestMipSliceStorageSize( + xe::align(dest_pitch, 32u), + xe::align(uint32_t(rect.bottom - (rect.top & ~LONG(31))), 32u), 1, true, + dest_format, nullptr); + uint32_t dest_offset_x = uint32_t(rect.left) & 31; + uint32_t dest_offset_y = uint32_t(rect.top) & 31; // Make sure we have the memory to write to. - if (!shared_memory->MakeTilesResident(dest_address, dest_size)) { - return false; + if (resolution_scale_2x_) { + if (!texture_cache->EnsureScaledResolveBufferResident(dest_address, + dest_size)) { + return false; + } + } else { + if (!shared_memory->MakeTilesResident(dest_address, dest_size)) { + return false; + } } // Write the source and destination descriptors. @@ -1160,64 +1230,75 @@ bool RenderTargetCache::ResolveCopy(SharedMemory* shared_memory, 0, 2, 2, descriptor_cpu_start, descriptor_gpu_start) == 0) { return false; } + TransitionEDRAMBuffer(D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE); ui::d3d12::util::CreateRawBufferSRV(device, descriptor_cpu_start, edram_buffer_, GetEDRAMBufferSize()); - shared_memory->CreateRawUAV( - provider->OffsetViewDescriptor(descriptor_cpu_start, 1)); - - // Transition the buffers. - TransitionEDRAMBuffer(D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE); - shared_memory->UseForWriting(); + if (resolution_scale_2x_) { + texture_cache->UseScaledResolveBufferForWriting(); + // Can't address more than 512 MB directly on Nvidia - binding only a part + // of the buffer. + texture_cache->CreateScaledResolveBufferRawUAV( + provider->OffsetViewDescriptor(descriptor_cpu_start, 1), + dest_address >> 12, + ((dest_address + dest_size - 1) >> 12) - (dest_address >> 12) + 1); + } else { + shared_memory->UseForWriting(); + shared_memory->CreateRawUAV( + provider->OffsetViewDescriptor(descriptor_cpu_start, 1)); + } command_processor_->SubmitBarriers(); // Dispatch the computation. command_list->SetComputeRootSignature(edram_load_store_root_signature_); EDRAMLoadStoreRootConstants root_constants; - // Adjust the destination pointer so only 5 bits can be used for the - // destination offset (GetTiledOffset2D(32*n+m) == GetTiledOffset2D(32*n) + - // GetTiledOffset2D(m)). + // Only 5 bits - assuming pre-offset address. + assert_true(dest_offset_x <= 31 && dest_offset_y <= 31); root_constants.tile_sample_dimensions[0] = - uint32_t(copy_rect.right - copy_rect.left) | - ((uint32_t(rect.left) & 31) << 12) | (uint32_t(copy_rect.left) << 17); + uint32_t(copy_rect.right - copy_rect.left) | (dest_offset_x << 12) | + (uint32_t(copy_rect.left) << 17); root_constants.tile_sample_dimensions[1] = - uint32_t(copy_rect.bottom - copy_rect.top) | - ((uint32_t(rect.top) & 31) << 12) | (uint32_t(copy_rect.top) << 17); - root_constants.tile_sample_dest_base = - dest_address + texture_util::GetTiledOffset2D(int(rect.left), - int(rect.top), dest_pitch, - src_64bpp ? 3 : 2); + uint32_t(copy_rect.bottom - copy_rect.top) | (dest_offset_y << 12) | + (uint32_t(copy_rect.top) << 17); + root_constants.tile_sample_dest_base = dest_address; + if (resolution_scale_2x_) { + // Can't address more than 512 MB directly on Nvidia - binding only a part + // of the buffer. + root_constants.tile_sample_dest_base -= dest_address & ~0xFFFu; + } assert_true(dest_pitch <= 8192); root_constants.tile_sample_dest_info = dest_pitch | - (uint32_t(sample_select) << 16) | - (uint32_t(dest_endian) << 18); - if (msaa_samples >= MsaaSamples::k2X) { - root_constants.tile_sample_dest_info |= 1 << 14; - if (msaa_samples >= MsaaSamples::k4X) { - root_constants.tile_sample_dest_info |= 1 << 15; - } - } + (uint32_t(sample_select) << 14) | + (uint32_t(dest_endian) << 16); if (dest_swap) { switch (ColorRenderTargetFormat(src_format)) { case ColorRenderTargetFormat::k_8_8_8_8: case ColorRenderTargetFormat::k_8_8_8_8_GAMMA: - root_constants.tile_sample_dest_info |= (8 << 21) | (16 << 26); + root_constants.tile_sample_dest_info |= (8 << 19) | (16 << 24); break; case ColorRenderTargetFormat::k_2_10_10_10: case ColorRenderTargetFormat::k_2_10_10_10_FLOAT: case ColorRenderTargetFormat::k_2_10_10_10_AS_16_16_16_16: case ColorRenderTargetFormat::k_2_10_10_10_FLOAT_AS_16_16_16_16: - root_constants.tile_sample_dest_info |= (10 << 21) | (20 << 26); + root_constants.tile_sample_dest_info |= (10 << 19) | (20 << 24); break; case ColorRenderTargetFormat::k_16_16_16_16: case ColorRenderTargetFormat::k_16_16_16_16_FLOAT: - root_constants.tile_sample_dest_info |= 1 << 21; + root_constants.tile_sample_dest_info |= 1 << 19; break; default: break; } } - root_constants.base_depth_pitch = - edram_base | (is_depth ? (1 << 11) : 0) | (surface_pitch_tiles << 12); + root_constants.base_samples_2x_depth_pitch = + edram_base | (resolution_scale_log2 << 13) | + (resolution_scale_edge_clamp ? (1 << 14) : 0) | + (is_depth ? (1 << 15) : 0) | (surface_pitch_tiles << 16); + if (msaa_samples >= MsaaSamples::k2X) { + root_constants.base_samples_2x_depth_pitch |= 1 << 11; + if (msaa_samples >= MsaaSamples::k4X) { + root_constants.base_samples_2x_depth_pitch |= 1 << 12; + } + } command_list->SetComputeRoot32BitConstants( 0, sizeof(root_constants) / sizeof(uint32_t), &root_constants, 0); command_list->SetComputeRootDescriptorTable(1, descriptor_gpu_start); @@ -1232,13 +1313,19 @@ bool RenderTargetCache::ResolveCopy(SharedMemory* shared_memory, group_count_x = (group_count_x + 1) >> 1; } } + // With 2x scaling, destination width and height are 2x bigger, and 1 group + // is 80x16 destination pixels after applying the resolution scale. + group_count_x <<= resolution_scale_log2; + group_count_y <<= resolution_scale_log2; command_list->Dispatch(group_count_x, group_count_y, 1); // Commit the write. - command_processor_->PushUAVBarrier(shared_memory->GetBuffer()); + command_processor_->PushUAVBarrier( + resolution_scale_2x_ ? texture_cache->GetScaledResolveBuffer() + : shared_memory->GetBuffer()); - // Make the texture cache refresh the data. - shared_memory->RangeWrittenByGPU(dest_address, dest_size); + // Invalidate textures and mark the range as scaled if needed. + texture_cache->MarkRangeAsResolved(dest_address, dest_size); } else { // ************************************************************************* // Conversion and AA resolving @@ -1266,6 +1353,10 @@ bool RenderTargetCache::ResolveCopy(SharedMemory* shared_memory, RenderTargetKey render_target_key; render_target_key.width_ss_div_80 = row_width_ss_div_80; render_target_key.height_ss_div_16 = rows; + if (resolution_scale_2x_) { + render_target_key.width_ss_div_80 *= 2; + render_target_key.height_ss_div_16 *= 2; + } render_target_key.is_depth = false; render_target_key.format = src_format; // Render target for loading the EDRAM buffer contents as a texture. @@ -1320,8 +1411,15 @@ bool RenderTargetCache::ResolveCopy(SharedMemory* shared_memory, load_root_constants.rt_color_depth_offset = uint32_t(footprint.Offset); load_root_constants.rt_color_depth_pitch = uint32_t(footprint.Footprint.RowPitch); - load_root_constants.base_depth_pitch = - edram_base | (surface_pitch_tiles << 12); + load_root_constants.base_samples_2x_depth_pitch = + edram_base | (resolution_scale_log2 << 13) | + (surface_pitch_tiles << 16); + if (msaa_samples >= MsaaSamples::k2X) { + load_root_constants.base_samples_2x_depth_pitch |= 1 << 11; + if (msaa_samples >= MsaaSamples::k4X) { + load_root_constants.base_samples_2x_depth_pitch |= 1 << 12; + } + } command_list->SetComputeRoot32BitConstants( 0, sizeof(load_root_constants) / sizeof(uint32_t), &load_root_constants, 0); @@ -1333,9 +1431,11 @@ bool RenderTargetCache::ResolveCopy(SharedMemory* shared_memory, copy_buffer, render_target->copy_buffer_size); command_list->SetComputeRootDescriptorTable(1, descriptor_gpu_start); + EDRAMLoadStoreMode mode = GetLoadStoreMode(false, src_format); command_processor_->SetComputePipeline( - edram_load_pipelines_[size_t(GetLoadStoreMode(false, src_format))]); - // 1 group per 80x16 samples. + resolution_scale_2x_ ? edram_load_2x_resolve_pipelines_[size_t(mode)] + : edram_load_pipelines_[size_t(mode)]); + // 1 group per 80x16 samples, with both 1x and 2x resolution scales. command_list->Dispatch(row_width_ss_div_80, rows, 1); command_processor_->PushUAVBarrier(copy_buffer); @@ -1390,17 +1490,18 @@ bool RenderTargetCache::ResolveCopy(SharedMemory* shared_memory, uint32_t samples_x_log2 = msaa_samples >= MsaaSamples::k4X ? 1 : 0; uint32_t samples_y_log2 = msaa_samples >= MsaaSamples::k2X ? 1 : 0; resolve_root_constants.rect_samples_lw = - (copy_rect.left << samples_x_log2) | - (copy_width << (16 + samples_x_log2)); + (copy_rect.left << (samples_x_log2 + resolution_scale_log2)) | + (copy_width << (16 + samples_x_log2 + resolution_scale_log2)); resolve_root_constants.rect_samples_th = - (copy_rect.top << samples_y_log2) | - (copy_height << (16 + samples_y_log2)); + (copy_rect.top << (samples_y_log2 + resolution_scale_log2)) | + (copy_height << (16 + samples_y_log2 + resolution_scale_log2)); resolve_root_constants.source_size = (render_target_key.width_ss_div_80 * 80) | (render_target_key.height_ss_div_16 << (4 + 16)); resolve_root_constants.resolve_info = samples_y_log2 | (samples_x_log2 << 1) | - ((uint32_t(dest_exp_bias) & 0x3F) << 6); + (resolution_scale_edge_clamp ? (1 << 6) : 0) | + ((uint32_t(dest_exp_bias) & 0x3F) << 7); if (msaa_samples == MsaaSamples::k1X) { // No offset. resolve_root_constants.resolve_info |= (1 << 2) | (1 << 4); @@ -1490,21 +1591,22 @@ bool RenderTargetCache::ResolveCopy(SharedMemory* shared_memory, D3D12_VIEWPORT viewport; viewport.TopLeftX = 0.0f; viewport.TopLeftY = 0.0f; - viewport.Width = float(copy_width); - viewport.Height = float(copy_height); + viewport.Width = float(copy_width << resolution_scale_log2); + viewport.Height = float(copy_height << resolution_scale_log2); viewport.MinDepth = 0.0f; viewport.MaxDepth = 1.0f; command_list->RSSetViewports(1, &viewport); D3D12_RECT scissor; scissor.left = 0; scissor.top = 0; - scissor.right = copy_width; - scissor.bottom = copy_height; + scissor.right = copy_width << resolution_scale_log2; + scissor.bottom = copy_height << resolution_scale_log2; command_list->RSSetScissorRects(1, &scissor); command_list->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST); command_list->DrawInstanced(3, 1, 0, 0); if (command_processor_->IsROVUsedForEDRAM()) { - // Clean up - the ROV path doesn't need render targets bound. + // Clean up - the ROV path doesn't need render targets bound and has + // non-zero ForcedSampleCount. command_list->OMSetRenderTargets(0, nullptr, FALSE, nullptr); } @@ -1535,7 +1637,7 @@ bool RenderTargetCache::ResolveCopy(SharedMemory* shared_memory, D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE); copy_buffer_state = D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE; texture_cache->TileResolvedTexture( - dest_format, dest_address, dest_pitch, dest_height, uint32_t(rect.left), + dest_format, dest_address, dest_pitch, uint32_t(rect.left), uint32_t(rect.top), copy_width, copy_height, dest_endian, copy_buffer, resolve_target->copy_buffer_size, resolve_target->footprint); @@ -1598,8 +1700,10 @@ bool RenderTargetCache::ResolveClear(uint32_t edram_base, (clear_rect.top << (16 + samples_y_log2)); root_constants.clear_rect_rb = (clear_rect.right << samples_x_log2) | (clear_rect.bottom << (16 + samples_y_log2)); - root_constants.base_depth_pitch = - edram_base | (is_depth ? (1 << 11) : 0) | (surface_pitch_tiles << 12); + root_constants.base_samples_2x_depth_pitch = + edram_base | (samples_y_log2 << 11) | (samples_x_log2 << 12) | + (resolution_scale_2x_ ? (1 << 13) : 0) | (is_depth ? (1 << 15) : 0) | + (surface_pitch_tiles << 16); // When ROV is used, there's no 32-bit depth buffer. if (!command_processor_->IsROVUsedForEDRAM() && is_depth && DepthRenderTargetFormat(format) == DepthRenderTargetFormat::kD24FS8) { @@ -1638,7 +1742,7 @@ bool RenderTargetCache::ResolveClear(uint32_t edram_base, ui::d3d12::util::CreateRawBufferUAV(device, descriptor_cpu_start, edram_buffer_, GetEDRAMBufferSize()); command_list->SetComputeRootDescriptorTable(1, descriptor_gpu_start); - // 1 group per 80x16 samples. + // 1 group per 80x16 samples. Resolution scale handled in the shader itself. command_list->Dispatch(row_width_ss_div_80, rows, 1); command_processor_->PushUAVBarrier(edram_buffer_); @@ -1688,23 +1792,29 @@ ID3D12PipelineState* RenderTargetCache::GetResolvePipeline( RenderTargetCache::ResolveTarget* RenderTargetCache::FindOrCreateResolveTarget( #if 0 - uint32_t width, uint32_t height, DXGI_FORMAT format, + uint32_t width_unscaled, uint32_t height_unscaled, DXGI_FORMAT format, uint32_t min_heap_page_first) { #else - uint32_t width, uint32_t height, DXGI_FORMAT format + uint32_t width_unscaled, uint32_t height_unscaled, DXGI_FORMAT format #endif ) { #if 0 assert_true(min_heap_page_first < kHeap4MBPages * 5); #endif - if (width == 0 || height == 0 || width > 8192 || height > 8192) { + if (width_unscaled == 0 || height_unscaled == 0 || width_unscaled > 2160 || + height_unscaled > 2160) { assert_always(); return nullptr; } + uint32_t width_scaled = width_unscaled, height_scaled = height_unscaled; + if (resolution_scale_2x_) { + width_scaled *= 2; + height_scaled *= 2; + } ResolveTargetKey key; - key.width_div_32 = (width + 31) >> 5; - key.height_div_32 = (height + 31) >> 5; + key.width_div_32 = (width_scaled + 31) >> 5; + key.height_div_32 = (height_scaled + 31) >> 5; key.format = format; // Try to find an existing target that isn't overlapping the resolve source. @@ -1909,6 +2019,9 @@ uint32_t RenderTargetCache::GetEDRAMBufferSize() const { // drawing without precision loss in case of EDRAM store/load. size *= 2; } + if (resolution_scale_2x_) { + size *= 4; + } return size; } @@ -2351,14 +2464,15 @@ void RenderTargetCache::StoreRenderTargetsToEDRAM() { ColorRenderTargetFormat(render_target->key.format))) { rt_pitch_tiles *= 2; } - root_constants.base_depth_pitch = - binding.edram_base | (rt_pitch_tiles << 12); + // TODO(Triang3l): log2(sample count, resolution scale). + root_constants.base_samples_2x_depth_pitch = + binding.edram_base | (rt_pitch_tiles << 16); root_constants.rt_color_depth_offset = uint32_t(location_dest.PlacedFootprint.Offset); root_constants.rt_color_depth_pitch = location_dest.PlacedFootprint.Footprint.RowPitch; if (render_target->key.is_depth) { - root_constants.base_depth_pitch |= 1 << 11; + root_constants.base_samples_2x_depth_pitch |= 1 << 15; location_source.SubresourceIndex = 1; location_dest.PlacedFootprint = render_target->footprints[1]; command_list->CopyTextureRegion(&location_dest, 0, 0, 0, &location_source, @@ -2481,14 +2595,15 @@ void RenderTargetCache::LoadRenderTargetsFromEDRAM( // Load the data. command_processor_->SubmitBarriers(); EDRAMLoadStoreRootConstants root_constants; - root_constants.base_depth_pitch = - edram_bases[i] | (edram_pitch_tiles << 12); + // TODO(Triang3l): log2(sample count, resolution scale). + root_constants.base_samples_2x_depth_pitch = + edram_bases[i] | (edram_pitch_tiles << 16); root_constants.rt_color_depth_offset = uint32_t(render_target->footprints[0].Offset); root_constants.rt_color_depth_pitch = render_target->footprints[0].Footprint.RowPitch; if (render_target->key.is_depth) { - root_constants.base_depth_pitch |= 1 << 11; + root_constants.base_samples_2x_depth_pitch |= 1 << 15; root_constants.rt_stencil_offset = uint32_t(render_target->footprints[1].Offset); root_constants.rt_stencil_pitch = diff --git a/src/xenia/gpu/d3d12/render_target_cache.h b/src/xenia/gpu/d3d12/render_target_cache.h index dae6951e7..bf83ef5c6 100644 --- a/src/xenia/gpu/d3d12/render_target_cache.h +++ b/src/xenia/gpu/d3d12/render_target_cache.h @@ -217,6 +217,17 @@ class D3D12CommandProcessor; // scissor), there may be cases of simultaneously bound render targets // overlapping each other in the EDRAM in a way that is difficult to resolve, // and stores/loads may destroy data. +// +// ============================================================================= +// 2x width and height scaling implementation: +// ============================================================================= +// +// For ease of mapping EDRAM addresses, host pixels (top-left, top-right, +// bottom-left, bottom-right) within EACH GUEST SAMPLE are stored consecutively, +// this means that the address of each sample with 4x resolution enabled is 4x +// the address of it without increased resolution - and you only need to add +// (uint(SV_Position.y) * 2u + uint(SV_Position.x)) to the dword/qword index to +// get each of the 4 host pixels for each sample. class RenderTargetCache { public: // Direct3D 12 debug layer does some kaschenit-style trolling by giving errors @@ -236,7 +247,7 @@ class RenderTargetCache { RegisterFile* register_file); ~RenderTargetCache(); - bool Initialize(); + bool Initialize(const TextureCache* texture_cache); void Shutdown(); void ClearCache(); @@ -303,17 +314,22 @@ class RenderTargetCache { const void* store_shader; size_t store_shader_size; const WCHAR* store_pipeline_name; + + const void* load_2x_resolve_shader; + size_t load_2x_resolve_shader_size; + const WCHAR* load_2x_resolve_pipeline_name; }; union RenderTargetKey { struct { // Supersampled (_ss - scaled 2x if needed) dimensions, divided by 80x16. // The limit is 2560x2560 without AA, 2560x5120 with 2x AA, and 5120x5120 - // with 4x AA. - uint32_t width_ss_div_80 : 7; // 7 - uint32_t height_ss_div_16 : 9; // 16 - uint32_t is_depth : 1; // 17 - uint32_t format : 4; // 21 + // with 4x AA, and twice as much (up to 10240x10240) with 2x resolution + // scaling. + uint32_t width_ss_div_80 : 8; // 8 + uint32_t height_ss_div_16 : 10; // 18 + uint32_t is_depth : 1; // 19 + uint32_t format : 4; // 23 }; uint32_t value; @@ -376,9 +392,10 @@ class RenderTargetCache { union ResolveTargetKey { struct { - uint32_t width_div_32 : 9; - uint32_t height_div_32 : 9; - DXGI_FORMAT format : 14; + // 2560 / 32 = 80 (7 bits), * 2 for 2x resolution scale = 160 (8 bits). + uint32_t width_div_32 : 8; + uint32_t height_div_32 : 8; + DXGI_FORMAT format : 16; }; uint32_t value; }; @@ -480,6 +497,10 @@ class RenderTargetCache { D3D12CommandProcessor* command_processor_; RegisterFile* register_file_; + // Whether 1 guest pixel is rendered as 2x2 host pixels (currently only + // supported with ROV). + bool resolution_scale_2x_ = false; + // The EDRAM buffer allowing color and depth data to be reinterpreted. ID3D12Resource* edram_buffer_ = nullptr; D3D12_RESOURCE_STATES edram_buffer_state_; @@ -504,14 +525,12 @@ class RenderTargetCache { uint32_t tile_sample_dimensions[2]; uint32_t tile_sample_dest_base; // 0:13 - destination pitch. - // 14 - log2(vertical sample count), 0 for 1x AA, 1 for 2x/4x AA. - // 15 - log2(horizontal sample count), 0 for 1x/2x AA, 1 for 4x AA. - // 16:17 - sample to load (16 - vertical index, 17 - horizontal index). - // 18:20 - destination endianness. - // 21:31 - BPP-specific info for swapping red/blue, 0 if not swapping. + // 14:15 - sample to load (14 - vertical index, 15 - horizontal index). + // 16:18 - destination endianness. + // 19:31 - BPP-specific info for swapping red/blue, 0 if not swapping. // For 32 bits per pixel: - // 21:25 - red/blue bit depth. - // 26:30 - blue offset. + // 19:23 - red/blue bit depth. + // 24:28 - blue offset. // For 64 bits per pixel, it's 1 if need to swap 0:15 and 32:47. uint32_t tile_sample_dest_info; }; @@ -532,9 +551,15 @@ class RenderTargetCache { }; }; // 0:10 - EDRAM base in tiles. - // 11 - whether it's a depth render target. - // 12: - EDRAM pitch in tiles. - uint32_t base_depth_pitch; + // 11 - log2(vertical sample count), 0 for 1x AA, 1 for 2x/4x AA. + // 12 - log2(horizontal sample count), 0 for 1x/2x AA, 1 for 4x AA. + // 13 - whether 2x resolution scale is used. + // 14 - whether to apply the hack and duplicate the top/left + // half-row/half-column to reduce the impact of half-pixel offset with + // 2x resolution scale. + // 15 - whether it's a depth render target. + // 16: - EDRAM pitch in tiles. + uint32_t base_samples_2x_depth_pitch; }; // EDRAM pipelines. static const EDRAMLoadStoreModeInfo @@ -543,6 +568,8 @@ class RenderTargetCache { edram_load_pipelines_[size_t(EDRAMLoadStoreMode::kCount)] = {}; ID3D12PipelineState* edram_store_pipelines_[size_t(EDRAMLoadStoreMode::kCount)] = {}; + ID3D12PipelineState* + edram_load_2x_resolve_pipelines_[size_t(EDRAMLoadStoreMode::kCount)] = {}; ID3D12PipelineState* edram_tile_sample_32bpp_pipeline_ = nullptr; ID3D12PipelineState* edram_tile_sample_64bpp_pipeline_ = nullptr; ID3D12PipelineState* edram_clear_32bpp_pipeline_ = nullptr; @@ -557,6 +584,9 @@ class RenderTargetCache { // entire EDRAM - a 32-bit depth/stencil one - at some resolution. // But we also need more than 32 MB to be able to resolve the entire EDRAM // into a k_32_32_32_32_FLOAT texture. + // TODO(Triang3l): With 2x resolution scale, render targets can take 4x more + // memory - won't fit in this heap size. Resolution scale support was added + // when placed resources already have been disabled, however. ID3D12Heap* heaps_[5] = {}; static constexpr uint32_t kHeap4MBPages = 12; #endif @@ -601,7 +631,10 @@ class RenderTargetCache { // 0 for the left samples with 4x AA. // 1 for 1x/2x AA or to mix samples with 4x AA. // 2 for the right samples with 4x AA. - // 6:11 - exponent bias. + // 6 - whether to apply the hack and duplicate the top/left + // half-row/half-column to reduce the impact of half-pixel offset with + // 2x resolution scale. + // 7:12 - exponent bias. uint32_t resolve_info; }; std::vector resolve_pipelines_; diff --git a/src/xenia/gpu/d3d12/shaders/byte_swap.hlsli b/src/xenia/gpu/d3d12/shaders/byte_swap.hlsli index 1631f5d1e..a53c41d97 100644 --- a/src/xenia/gpu/d3d12/shaders/byte_swap.hlsli +++ b/src/xenia/gpu/d3d12/shaders/byte_swap.hlsli @@ -19,10 +19,11 @@ XE_BYTE_SWAP_OVERLOAD(uint2) XE_BYTE_SWAP_OVERLOAD(uint3) XE_BYTE_SWAP_OVERLOAD(uint4) +// Can also swap two packed 16-bit values. #define XE_BYTE_SWAP_16_OVERLOAD(XeByteSwapType) \ XeByteSwapType XeByteSwap16(XeByteSwapType v, uint endian) { \ if (((endian ^ (endian >> 1u)) & 1u) != 0u) { \ - v = ((v & 0xFFu) << 8u) | ((v & 0xFF00u) >> 8u); \ + v = ((v & 0x00FF00FFu) << 8u) | ((v & 0xFF00FF00u) >> 8u); \ } \ return v; \ } diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/edram_clear_32bpp_cs.cso b/src/xenia/gpu/d3d12/shaders/dxbc/edram_clear_32bpp_cs.cso index b697f7d918884efd015ad61909bad8a276c48297..c9737284619cd07cf39d56c885fdf710ccfc0c33 100644 GIT binary patch delta 746 zcma)3F-t;G6h2qqd!k`Jlpr+BM5r7hL4BuGXbA delta 551 zcmdnN|A*JoCBn)1XyEkOPq;QI+of$Wlu zU6X$@`g1CfPQ9lU;vT~U>Xz-{*ym4tJli`{Rave5P+EkQV9$`26UUGaM&aYG}I1= rgF_rcrU3P+0x`%Y5MYK-3_L)Z4~RkHFfkx=ax}XlBPiaSSwJ!XYcN7; diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/edram_clear_32bpp_cs.h b/src/xenia/gpu/d3d12/shaders/dxbc/edram_clear_32bpp_cs.h index 4205bb9e6..3f7e9cad6 100644 --- a/src/xenia/gpu/d3d12/shaders/dxbc/edram_clear_32bpp_cs.h +++ b/src/xenia/gpu/d3d12/shaders/dxbc/edram_clear_32bpp_cs.h @@ -1,14 +1,14 @@ // generated from `xb buildhlsl` // source: edram_clear_32bpp.cs.hlsl const uint8_t edram_clear_32bpp_cs[] = { - 0x44, 0x58, 0x42, 0x43, 0xC5, 0x51, 0x97, 0x9B, 0xE4, 0x0A, 0xB2, 0x20, - 0xD9, 0xE7, 0x92, 0x0F, 0x06, 0xBE, 0x40, 0xFD, 0x01, 0x00, 0x00, 0x00, - 0xFC, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, - 0x18, 0x02, 0x00, 0x00, 0x28, 0x02, 0x00, 0x00, 0x38, 0x02, 0x00, 0x00, - 0x60, 0x06, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0xDC, 0x01, 0x00, 0x00, + 0x44, 0x58, 0x42, 0x43, 0x53, 0xC9, 0xBA, 0x13, 0x9B, 0xD9, 0xE2, 0x95, + 0x09, 0x45, 0x6D, 0x69, 0x57, 0x8C, 0x0F, 0xBE, 0x01, 0x00, 0x00, 0x00, + 0xB8, 0x07, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x24, 0x02, 0x00, 0x00, 0x34, 0x02, 0x00, 0x00, 0x44, 0x02, 0x00, 0x00, + 0x1C, 0x07, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0xE8, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01, 0x05, 0x53, 0x43, 0x00, 0x05, 0x00, 0x00, - 0xB4, 0x01, 0x00, 0x00, 0x13, 0x13, 0x44, 0x25, 0x3C, 0x00, 0x00, 0x00, + 0xC0, 0x01, 0x00, 0x00, 0x13, 0x13, 0x44, 0x25, 0x3C, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, @@ -28,7 +28,7 @@ const uint8_t edram_clear_32bpp_cs[] = { 0x02, 0x00, 0x00, 0x00, 0x4C, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x70, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x9C, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x73, 0x74, @@ -37,19 +37,20 @@ const uint8_t edram_clear_32bpp_cs[] = { 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x01, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x65, - 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x62, 0x61, 0x73, 0x65, 0x5F, 0x64, 0x65, - 0x70, 0x74, 0x68, 0x5F, 0x70, 0x69, 0x74, 0x63, 0x68, 0x00, 0x64, 0x77, - 0x6F, 0x72, 0x64, 0x00, 0x00, 0x00, 0x13, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x62, 0x61, 0x73, 0x65, 0x5F, 0x73, 0x61, + 0x6D, 0x70, 0x6C, 0x65, 0x73, 0x5F, 0x32, 0x78, 0x5F, 0x64, 0x65, 0x70, + 0x74, 0x68, 0x5F, 0x70, 0x69, 0x74, 0x63, 0x68, 0x00, 0x64, 0x77, 0x6F, + 0x72, 0x64, 0x00, 0xAB, 0x00, 0x00, 0x13, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x8A, 0x01, 0x00, 0x00, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, + 0x95, 0x01, 0x00, 0x00, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4C, 0x53, 0x4C, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6F, 0x6D, 0x70, 0x69, 0x6C, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2E, 0x31, 0x00, 0x49, 0x53, 0x47, 0x4E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x4F, 0x53, 0x47, 0x4E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x53, 0x48, 0x45, 0x58, 0x20, 0x04, 0x00, 0x00, - 0x51, 0x00, 0x05, 0x00, 0x08, 0x01, 0x00, 0x00, 0x6A, 0x08, 0x00, 0x01, + 0x08, 0x00, 0x00, 0x00, 0x53, 0x48, 0x45, 0x58, 0xD0, 0x04, 0x00, 0x00, + 0x51, 0x00, 0x05, 0x00, 0x34, 0x01, 0x00, 0x00, 0x6A, 0x08, 0x00, 0x01, 0x59, 0x00, 0x00, 0x07, 0x46, 0x8E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9D, 0x00, 0x00, 0x06, 0x46, 0xEE, 0x31, 0x00, @@ -68,27 +69,32 @@ const uint8_t edram_clear_32bpp_cs[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x06, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x02, 0x00, 0x01, 0x40, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x04, 0x22, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x02, 0x00, 0x4F, 0x00, 0x00, 0x07, - 0x52, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x01, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x06, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3C, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x07, 0xC2, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x56, 0x0D, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x07, - 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x00, 0x07, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x00, 0x06, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x02, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x06, 0x42, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x02, 0x00, 0x3A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3C, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, 0x0A, 0x00, 0x10, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x07, + 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3C, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x01, - 0x29, 0x00, 0x00, 0x06, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x06, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x20, 0x02, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0C, 0xC2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x00, 0x06, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x20, 0x02, 0x00, 0x01, 0x40, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, @@ -101,12 +107,12 @@ const uint8_t edram_clear_32bpp_cs[] = { 0x01, 0x40, 0x00, 0x00, 0xD8, 0xFF, 0xFF, 0xFF, 0x1E, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x1E, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x55, 0x00, 0x00, 0x09, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x40, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x08, + 0x01, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x08, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x10, 0x02, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x06, 0x42, 0x00, 0x10, 0x00, @@ -117,37 +123,47 @@ const uint8_t edram_clear_32bpp_cs[] = { 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, - 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x1E, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x0A, 0x12, 0xE0, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x2A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x08, - 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x02, 0x00, - 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, - 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, - 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0xA6, 0x00, 0x00, 0x0A, 0x12, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x0B, 0x42, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x3E, 0x00, 0x00, 0x01, - 0x53, 0x54, 0x41, 0x54, 0x94, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, + 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x0A, + 0xF2, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x8A, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x0A, 0xF2, 0xE0, 0x21, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xA6, 0x8A, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, + 0x12, 0x00, 0x00, 0x01, 0x1F, 0x00, 0x04, 0x03, 0x0A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x0A, 0x32, 0xE0, 0x21, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xA6, 0x8A, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, + 0x15, 0x00, 0x00, 0x01, 0x3E, 0x00, 0x00, 0x01, 0x53, 0x54, 0x41, 0x54, + 0x94, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0E, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, }; diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/edram_clear_32bpp_cs.txt b/src/xenia/gpu/d3d12/shaders/dxbc/edram_clear_32bpp_cs.txt index a8322e3d3..b14bec9ac 100644 --- a/src/xenia/gpu/d3d12/shaders/dxbc/edram_clear_32bpp_cs.txt +++ b/src/xenia/gpu/d3d12/shaders/dxbc/edram_clear_32bpp_cs.txt @@ -8,7 +8,7 @@ // { // // uint4 xe_edram_load_store_constants;// Offset: 0 Size: 16 -// uint xe_edram_base_depth_pitch; // Offset: 16 Size: 4 +// uint xe_edram_base_samples_2x_depth_pitch;// Offset: 16 Size: 4 // // } // @@ -45,38 +45,47 @@ dcl_thread_group 40, 16, 1 and r0.xy, CB0[0][0].xyxx, l(0x0000ffff, 0x0000ffff, 0, 0) ushr r0.zw, CB0[0][0].xxxy, l(0, 0, 16, 16) ishl r1.x, vThreadID.x, l(1) -mov r1.y, vThreadID.y -ult r0.xz, r1.xxyx, r0.xxzx -or r0.x, r0.z, r0.x -uge r0.zw, r1.xxxy, r0.yyyw -or r0.z, r0.w, r0.z -or r0.x, r0.z, r0.x -if_nz r0.x +uge r0.x, r1.x, r0.x +ult r0.y, r1.x, r0.y +and r0.x, r0.y, r0.x +ult r0.y, vThreadID.y, r0.z +uge r0.z, vThreadID.y, r0.w +or r0.y, r0.z, r0.y +ieq r0.z, r0.x, l(0) +or r0.y, r0.z, r0.y +if_nz r0.y ret endif -ishl r0.x, vThreadIDInGroup.x, l(1) -and r0.zw, CB0[0][1].xxxx, l(0, 0, 2048, 2047) +ishl r0.y, vThreadIDInGroup.x, l(1) +and r0.zw, CB0[0][1].xxxx, l(0, 0, 0x00008000, 2047) if_nz r0.z ult r0.z, vThreadIDInGroup.x, l(20) and r0.z, r0.z, l(40) uge r1.x, vThreadIDInGroup.x, l(20) and r1.x, r1.x, l(-40) iadd r0.z, r0.z, r1.x - iadd r0.x, r0.z, r0.x + iadd r0.y, r0.z, r0.y endif -ushr r0.z, CB0[0][1].x, l(12) +ushr r0.z, CB0[0][1].x, l(16) imad r0.z, vThreadGroupID.y, r0.z, r0.w iadd r0.z, r0.z, vThreadGroupID.x imul null, r0.w, vThreadIDInGroup.y, l(320) imad r0.z, r0.z, l(5120), r0.w -ishl r0.x, r0.x, l(2) -iadd r0.x, r0.x, r0.z -store_raw U0[0].x, r0.x, CB0[0][0].z -imad r0.z, vThreadID.x, l(2), l(1) -ult r0.y, r0.z, r0.y -if_nz r0.y - iadd r0.y, r0.x, l(4) - store_raw U0[0].x, r0.y, CB0[0][0].z +ishl r0.y, r0.y, l(2) +iadd r0.y, r0.y, r0.z +ubfe r0.z, l(1), l(13), CB0[0][1].x +ishl r0.w, r0.z, l(1) +ishl r0.y, r0.y, r0.w +if_nz r0.z + if_nz r0.x + store_raw U0[0].xyzw, r0.y, CB0[0][0].zzzz + iadd r0.z, r0.y, l(16) + store_raw U0[0].xyzw, r0.z, CB0[0][0].zzzz + endif +else + if_nz r0.x + store_raw U0[0].xy, r0.y, CB0[0][0].zzzz + endif endif ret -// Approximately 37 instruction slots used +// Approximately 46 instruction slots used diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/edram_clear_64bpp_cs.cso b/src/xenia/gpu/d3d12/shaders/dxbc/edram_clear_64bpp_cs.cso index cf0c590585fcec8b4ce1115eb6ca615248510a7b..319104c22f148069a21d29691e0a7a18590a88c3 100644 GIT binary patch literal 1880 zcmcIly=xP37=F`_v`s6NMnQt;S*xTD(w0st(l%+VkXr3kiPI6AlSG=_kvp-2LlGwt zCv{Or1?j)wP#j!b937pCASkGNeV*LCM?BLif-gMzeZ0^6eRs*1=5j-Kw%s4^()lN! z-@f|#{Y)t#BBef&UaZr=SQl0x54=u_Ea&G7pFkpS3&6FU1rohxjz(Khq|^E1ygLYF zLyTb^0w@oFegN)Tez3HJKHKF*`=M=5UORW)w(Lr?T({Poa>ep|r)gUi+w-Ml&*ztC z7mK(yd7E<@o?mYGo@~-LbN>JsfJ!!WJd6wKi{W_(LXNI3?#bx^$a}U6uTyTTQ5v^u z4SyQ7qyc*BECu+E{9G@4w&j)U?wajcQ|l(XxZowdqjDTu@}Bf28Xs^3vHYl?vmDOgey8*#XW7GqSaZf>^Um~ zhNfC4k-|nS)(qzq0MwRT0sl?NPu}~TuRQuE#*ya;c8rxm9*LPC?j_X5drB(O2j?Z| zMq|26c!rfn8GVGKh6Dyhp6$T)5}`>2QyCD~h9B^=Uw-HtL_bQ}(huB0b&e z;~Yvo03hc9%`4T`WA=nTckrD+Uk9Ri9XPD;7#k7wV`e_ znrrY3=xjL$lCt)-!qNY+(xIVq{=oaA0F#UZ48>UL+Mr8MJ~iJ{*aCrtKb%#}<@Ehx!|FUTxO&R|F>&o4>=>Jw&QWMG{9kxi1Z zYw}M)eVqjwMXJB9t0`ftCjS(Ww#suNp z0Of?Ba#~QD3rYt7magz?~Npw3#xz`$kn zKoRVH5Wxi%f7WFH7XvXsE`WK73m9yS4h%q&0ZfB}(tq+tX7zeGV4#2k7X)A?fmCt; z`RF!D;jl>*Xs8_!2ZuO@OabbX1!9m*AixZvfM$cthls=EfZWNy*%TQ;aqr9m5(NNF C*g|&z diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/edram_clear_64bpp_cs.h b/src/xenia/gpu/d3d12/shaders/dxbc/edram_clear_64bpp_cs.h index 516152630..42ab5078f 100644 --- a/src/xenia/gpu/d3d12/shaders/dxbc/edram_clear_64bpp_cs.h +++ b/src/xenia/gpu/d3d12/shaders/dxbc/edram_clear_64bpp_cs.h @@ -1,14 +1,14 @@ // generated from `xb buildhlsl` // source: edram_clear_64bpp.cs.hlsl const uint8_t edram_clear_64bpp_cs[] = { - 0x44, 0x58, 0x42, 0x43, 0xCB, 0x0E, 0xCF, 0x21, 0xD9, 0x6C, 0xCC, 0x8E, - 0xAF, 0x02, 0x48, 0x2C, 0xB4, 0x02, 0x51, 0x0A, 0x01, 0x00, 0x00, 0x00, - 0x40, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, - 0x18, 0x02, 0x00, 0x00, 0x28, 0x02, 0x00, 0x00, 0x38, 0x02, 0x00, 0x00, - 0xA4, 0x05, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0xDC, 0x01, 0x00, 0x00, + 0x44, 0x58, 0x42, 0x43, 0x0C, 0x7C, 0xE6, 0x70, 0xF4, 0xCB, 0x13, 0x44, + 0x96, 0xEB, 0xC6, 0xA9, 0xEF, 0xF3, 0x3B, 0x58, 0x01, 0x00, 0x00, 0x00, + 0x58, 0x07, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x24, 0x02, 0x00, 0x00, 0x34, 0x02, 0x00, 0x00, 0x44, 0x02, 0x00, 0x00, + 0xBC, 0x06, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0xE8, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01, 0x05, 0x53, 0x43, 0x00, 0x05, 0x00, 0x00, - 0xB4, 0x01, 0x00, 0x00, 0x13, 0x13, 0x44, 0x25, 0x3C, 0x00, 0x00, 0x00, + 0xC0, 0x01, 0x00, 0x00, 0x13, 0x13, 0x44, 0x25, 0x3C, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, @@ -28,7 +28,7 @@ const uint8_t edram_clear_64bpp_cs[] = { 0x02, 0x00, 0x00, 0x00, 0x4C, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x70, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x9C, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x73, 0x74, @@ -37,19 +37,20 @@ const uint8_t edram_clear_64bpp_cs[] = { 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x01, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x65, - 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x62, 0x61, 0x73, 0x65, 0x5F, 0x64, 0x65, - 0x70, 0x74, 0x68, 0x5F, 0x70, 0x69, 0x74, 0x63, 0x68, 0x00, 0x64, 0x77, - 0x6F, 0x72, 0x64, 0x00, 0x00, 0x00, 0x13, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x62, 0x61, 0x73, 0x65, 0x5F, 0x73, 0x61, + 0x6D, 0x70, 0x6C, 0x65, 0x73, 0x5F, 0x32, 0x78, 0x5F, 0x64, 0x65, 0x70, + 0x74, 0x68, 0x5F, 0x70, 0x69, 0x74, 0x63, 0x68, 0x00, 0x64, 0x77, 0x6F, + 0x72, 0x64, 0x00, 0xAB, 0x00, 0x00, 0x13, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x8A, 0x01, 0x00, 0x00, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, + 0x95, 0x01, 0x00, 0x00, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4C, 0x53, 0x4C, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6F, 0x6D, 0x70, 0x69, 0x6C, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2E, 0x31, 0x00, 0x49, 0x53, 0x47, 0x4E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x4F, 0x53, 0x47, 0x4E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x53, 0x48, 0x45, 0x58, 0x64, 0x03, 0x00, 0x00, - 0x51, 0x00, 0x05, 0x00, 0xD9, 0x00, 0x00, 0x00, 0x6A, 0x08, 0x00, 0x01, + 0x08, 0x00, 0x00, 0x00, 0x53, 0x48, 0x45, 0x58, 0x70, 0x04, 0x00, 0x00, + 0x51, 0x00, 0x05, 0x00, 0x1C, 0x01, 0x00, 0x00, 0x6A, 0x08, 0x00, 0x01, 0x59, 0x00, 0x00, 0x07, 0x46, 0x8E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9D, 0x00, 0x00, 0x06, 0x46, 0xEE, 0x31, 0x00, @@ -68,71 +69,93 @@ const uint8_t edram_clear_64bpp_cs[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x06, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x02, 0x00, 0x01, 0x40, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x04, 0x22, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x02, 0x00, 0x4F, 0x00, 0x00, 0x07, - 0x52, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x01, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x06, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3C, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x07, 0xC2, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x56, 0x0D, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x07, - 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x00, 0x07, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x00, 0x06, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x02, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x06, 0x42, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x02, 0x00, 0x3A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3C, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, 0x0A, 0x00, 0x10, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x07, + 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3C, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0x55, 0x00, 0x00, 0x09, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, - 0x23, 0x00, 0x00, 0x08, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x08, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x10, 0x02, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x06, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x06, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x10, 0x02, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, - 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x07, 0x00, 0xD0, 0x00, 0x00, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x20, 0x02, 0x00, 0x01, 0x40, 0x00, 0x00, - 0x80, 0x02, 0x00, 0x00, 0x23, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x02, 0x00, 0x00, 0x23, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x06, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x20, 0x02, 0x00, 0x01, 0x40, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x0A, - 0x32, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0x8A, 0x30, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x23, 0x00, 0x00, 0x08, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x02, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x00, 0x07, - 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1F, 0x00, 0x04, 0x03, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1E, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x0A, 0x32, 0xE0, 0x21, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x0B, + 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, + 0x0A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1F, 0x00, 0x04, 0x03, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x56, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, 0x0A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x0A, 0xF2, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xE6, 0x8A, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xE6, 0x8E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x0A, + 0xF2, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0xE6, 0x8E, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xA6, 0x00, 0x00, 0x0A, 0xF2, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xE6, 0x8E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x0A, 0xF2, 0xE0, 0x21, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xE6, 0x8E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, - 0x3E, 0x00, 0x00, 0x01, 0x53, 0x54, 0x41, 0x54, 0x94, 0x00, 0x00, 0x00, - 0x1D, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x12, 0x00, 0x00, 0x01, 0x1F, 0x00, 0x04, 0x03, 0x0A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x0A, 0xF2, 0xE0, 0x21, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xE6, 0x8E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, + 0x15, 0x00, 0x00, 0x01, 0x3E, 0x00, 0x00, 0x01, 0x53, 0x54, 0x41, 0x54, + 0x94, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0C, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, }; diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/edram_clear_64bpp_cs.txt b/src/xenia/gpu/d3d12/shaders/dxbc/edram_clear_64bpp_cs.txt index a6ee563b5..525f15168 100644 --- a/src/xenia/gpu/d3d12/shaders/dxbc/edram_clear_64bpp_cs.txt +++ b/src/xenia/gpu/d3d12/shaders/dxbc/edram_clear_64bpp_cs.txt @@ -8,7 +8,7 @@ // { // // uint4 xe_edram_load_store_constants;// Offset: 0 Size: 16 -// uint xe_edram_base_depth_pitch; // Offset: 16 Size: 4 +// uint xe_edram_base_samples_2x_depth_pitch;// Offset: 16 Size: 4 // // } // @@ -45,30 +45,41 @@ dcl_thread_group 40, 16, 1 and r0.xy, CB0[0][0].xyxx, l(0x0000ffff, 0x0000ffff, 0, 0) ushr r0.zw, CB0[0][0].xxxy, l(0, 0, 16, 16) ishl r1.x, vThreadID.x, l(1) -mov r1.y, vThreadID.y -ult r0.xz, r1.xxyx, r0.xxzx -or r0.x, r0.z, r0.x -uge r0.zw, r1.xxxy, r0.yyyw -or r0.z, r0.w, r0.z -or r0.x, r0.z, r0.x -if_nz r0.x +uge r0.x, r1.x, r0.x +ult r0.y, r1.x, r0.y +and r0.x, r0.y, r0.x +ult r0.y, vThreadID.y, r0.z +uge r0.z, vThreadID.y, r0.w +or r0.y, r0.z, r0.y +ieq r0.z, r0.x, l(0) +or r0.y, r0.z, r0.y +if_nz r0.y ret endif -and r0.x, CB0[0][1].x, l(2047) -ushr r0.z, CB0[0][1].x, l(12) -imad r0.x, vThreadGroupID.y, r0.z, r0.x +and r0.y, CB0[0][1].x, l(2047) +ushr r0.z, CB0[0][1].x, l(16) +imad r0.y, vThreadGroupID.y, r0.z, r0.y ishl r0.z, vThreadGroupID.x, l(1) -iadd r0.x, r0.z, r0.x +iadd r0.y, r0.z, r0.y imul null, r0.z, vThreadIDInGroup.y, l(640) -imad r0.x, r0.x, l(5120), r0.z +imad r0.y, r0.y, l(5120), r0.z ishl r0.z, vThreadIDInGroup.x, l(4) -iadd r0.x, r0.z, r0.x -store_raw U0[0].xy, r0.x, CB0[0][0].zwzz -imad r0.z, vThreadID.x, l(2), l(1) -ult r0.y, r0.z, r0.y -if_nz r0.y - iadd r0.y, r0.x, l(8) - store_raw U0[0].xy, r0.y, CB0[0][0].zwzz +iadd r0.y, r0.z, r0.y +ubfe r0.z, l(1), l(13), CB0[0][1].x +ishl r0.w, r0.z, l(1) +ishl r0.y, r0.y, r0.w +if_nz r0.z + iadd r1.xyz, r0.yyyy, l(16, 32, 48, 0) + if_nz r0.x + store_raw U0[0].xyzw, r0.y, CB0[0][0].zwzw + store_raw U0[0].xyzw, r1.x, CB0[0][0].zwzw + store_raw U0[0].xyzw, r1.y, CB0[0][0].zwzw + store_raw U0[0].xyzw, r1.z, CB0[0][0].zwzw + endif +else + if_nz r0.x + store_raw U0[0].xyzw, r0.y, CB0[0][0].zwzw + endif endif ret -// Approximately 29 instruction slots used +// Approximately 40 instruction slots used diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/edram_clear_depth_float_cs.cso b/src/xenia/gpu/d3d12/shaders/dxbc/edram_clear_depth_float_cs.cso index f7531fc75628bd43517c72d1e6ec06ab520da0ea..e05f32bd3a47b716c2e3140966f83081dc4fb59a 100644 GIT binary patch delta 217 zcmbQj-y&e?65-^0(7yY5qRAn)t^ePsb#F)zW@KPsVBuh3U&IvdH@H+Ftz{y delta 156 zcmZn>n8I)A65-@L+n7WA9?!)4a|)Imk$rS8pOJxqVG26~11pd=0b&Uz1_livwgBQE zYzz!RF0O8OCR$1}ZkZVRopHisU&dU?l+=QfjQE1glH?4Al=A$d6res~21W+P$rITn z8M`L`Wc26U!NR~02sBl1b0Cud6C=muB$jK8Jd-V1H*XGLQ($D&o?OT-%*Z#nmAxJS D-Hs@& diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/edram_clear_depth_float_cs.h b/src/xenia/gpu/d3d12/shaders/dxbc/edram_clear_depth_float_cs.h index 8116d191a..5d7727cb8 100644 --- a/src/xenia/gpu/d3d12/shaders/dxbc/edram_clear_depth_float_cs.h +++ b/src/xenia/gpu/d3d12/shaders/dxbc/edram_clear_depth_float_cs.h @@ -1,14 +1,14 @@ // generated from `xb buildhlsl` // source: edram_clear_depth_float.cs.hlsl const uint8_t edram_clear_depth_float_cs[] = { - 0x44, 0x58, 0x42, 0x43, 0x9B, 0x33, 0x08, 0x17, 0xDE, 0x0C, 0x91, 0xDF, - 0x9C, 0x70, 0xA4, 0xC4, 0x1D, 0xE2, 0xDE, 0x6F, 0x01, 0x00, 0x00, 0x00, - 0x94, 0x07, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, - 0x18, 0x02, 0x00, 0x00, 0x28, 0x02, 0x00, 0x00, 0x38, 0x02, 0x00, 0x00, - 0xF8, 0x06, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0xDC, 0x01, 0x00, 0x00, + 0x44, 0x58, 0x42, 0x43, 0xC1, 0x3F, 0x8B, 0xE7, 0x61, 0x34, 0xC2, 0x06, + 0xB5, 0xFF, 0xEC, 0x26, 0x8B, 0xB0, 0x60, 0x13, 0x01, 0x00, 0x00, 0x00, + 0x04, 0x08, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x24, 0x02, 0x00, 0x00, 0x34, 0x02, 0x00, 0x00, 0x44, 0x02, 0x00, 0x00, + 0x68, 0x07, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0xE8, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01, 0x05, 0x53, 0x43, 0x00, 0x05, 0x00, 0x00, - 0xB4, 0x01, 0x00, 0x00, 0x13, 0x13, 0x44, 0x25, 0x3C, 0x00, 0x00, 0x00, + 0xC0, 0x01, 0x00, 0x00, 0x13, 0x13, 0x44, 0x25, 0x3C, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, @@ -28,7 +28,7 @@ const uint8_t edram_clear_depth_float_cs[] = { 0x02, 0x00, 0x00, 0x00, 0x4C, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x70, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x9C, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x73, 0x74, @@ -37,19 +37,20 @@ const uint8_t edram_clear_depth_float_cs[] = { 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x01, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x65, - 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x62, 0x61, 0x73, 0x65, 0x5F, 0x64, 0x65, - 0x70, 0x74, 0x68, 0x5F, 0x70, 0x69, 0x74, 0x63, 0x68, 0x00, 0x64, 0x77, - 0x6F, 0x72, 0x64, 0x00, 0x00, 0x00, 0x13, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x62, 0x61, 0x73, 0x65, 0x5F, 0x73, 0x61, + 0x6D, 0x70, 0x6C, 0x65, 0x73, 0x5F, 0x32, 0x78, 0x5F, 0x64, 0x65, 0x70, + 0x74, 0x68, 0x5F, 0x70, 0x69, 0x74, 0x63, 0x68, 0x00, 0x64, 0x77, 0x6F, + 0x72, 0x64, 0x00, 0xAB, 0x00, 0x00, 0x13, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x8A, 0x01, 0x00, 0x00, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, + 0x95, 0x01, 0x00, 0x00, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4C, 0x53, 0x4C, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6F, 0x6D, 0x70, 0x69, 0x6C, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2E, 0x31, 0x00, 0x49, 0x53, 0x47, 0x4E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x4F, 0x53, 0x47, 0x4E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x53, 0x48, 0x45, 0x58, 0xB8, 0x04, 0x00, 0x00, - 0x51, 0x00, 0x05, 0x00, 0x2E, 0x01, 0x00, 0x00, 0x6A, 0x08, 0x00, 0x01, + 0x08, 0x00, 0x00, 0x00, 0x53, 0x48, 0x45, 0x58, 0x1C, 0x05, 0x00, 0x00, + 0x51, 0x00, 0x05, 0x00, 0x47, 0x01, 0x00, 0x00, 0x6A, 0x08, 0x00, 0x01, 0x59, 0x00, 0x00, 0x07, 0x46, 0x8E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9D, 0x00, 0x00, 0x06, 0x46, 0xEE, 0x31, 0x00, @@ -93,7 +94,7 @@ const uint8_t edram_clear_depth_float_cs[] = { 0x01, 0x00, 0x00, 0x0C, 0xC2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x00, 0x06, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x20, 0x02, 0x00, 0x01, 0x40, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, @@ -111,7 +112,7 @@ const uint8_t edram_clear_depth_float_cs[] = { 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x55, 0x00, 0x00, 0x09, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x40, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x08, + 0x01, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x08, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x10, 0x02, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x06, 0x42, 0x00, 0x10, 0x00, @@ -126,41 +127,49 @@ const uint8_t edram_clear_depth_float_cs[] = { 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x0A, 0x12, 0xE0, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x0B, 0x42, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x0A, + 0x12, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1F, 0x00, 0x04, 0x03, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x0A, 0x12, 0xE0, 0x21, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, + 0x1E, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x00, 0x00, 0xA0, 0x00, 0xA6, 0x00, 0x00, 0x0A, 0x12, 0xE0, 0x21, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, - 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x04, 0x00, 0xA0, 0x00, 0xA6, 0x00, 0x00, 0x0A, 0x12, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x1E, 0x00, 0x00, 0x07, - 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00, - 0xA6, 0x00, 0x00, 0x0A, 0x12, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, 0x1A, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x40, 0x00, 0x00, 0x04, 0x00, 0xA0, 0x00, 0xA6, 0x00, 0x00, 0x0A, - 0x12, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, 0x80, 0x30, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x15, 0x00, 0x00, 0x01, 0x3E, 0x00, 0x00, 0x01, 0x53, 0x54, 0x41, 0x54, - 0x94, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0E, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x3E, 0x00, 0x00, 0x01, + 0x53, 0x54, 0x41, 0x54, 0x94, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, }; diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/edram_clear_depth_float_cs.txt b/src/xenia/gpu/d3d12/shaders/dxbc/edram_clear_depth_float_cs.txt index 783c3b8da..d118f46dc 100644 --- a/src/xenia/gpu/d3d12/shaders/dxbc/edram_clear_depth_float_cs.txt +++ b/src/xenia/gpu/d3d12/shaders/dxbc/edram_clear_depth_float_cs.txt @@ -8,7 +8,7 @@ // { // // uint4 xe_edram_load_store_constants;// Offset: 0 Size: 16 -// uint xe_edram_base_depth_pitch; // Offset: 16 Size: 4 +// uint xe_edram_base_samples_2x_depth_pitch;// Offset: 16 Size: 4 // // } // @@ -57,7 +57,7 @@ endif ishl r0.x, vThreadIDInGroup.x, l(1) imad r0.z, vThreadID.x, l(2), l(1) ult r0.y, r0.z, r0.y -and r0.zw, CB0[0][1].xxxx, l(0, 0, 2048, 2047) +and r0.zw, CB0[0][1].xxxx, l(0, 0, 0x00008000, 2047) if_nz r0.z ult r0.z, vThreadIDInGroup.x, l(20) and r0.z, r0.z, l(40) @@ -66,13 +66,16 @@ if_nz r0.z iadd r0.z, r0.z, r1.x iadd r0.x, r0.z, r0.x endif -ushr r0.z, CB0[0][1].x, l(12) +ushr r0.z, CB0[0][1].x, l(16) imad r0.z, vThreadGroupID.y, r0.z, r0.w iadd r0.z, r0.z, vThreadGroupID.x imul null, r0.w, vThreadIDInGroup.y, l(320) imad r0.z, r0.z, l(5120), r0.w ishl r0.x, r0.x, l(2) iadd r0.x, r0.x, r0.z +ubfe r0.z, l(1), l(13), CB0[0][1].x +ishl r0.z, r0.z, l(1) +ishl r0.x, r0.x, r0.z store_raw U0[0].x, r0.x, CB0[0][0].z if_nz r0.y iadd r0.z, r0.x, l(4) @@ -85,4 +88,4 @@ if_nz r0.y store_raw U0[0].x, r0.y, CB0[0][0].w endif ret -// Approximately 43 instruction slots used +// Approximately 46 instruction slots used diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/edram_load_color_32bpp_2x_resolve_cs.cso b/src/xenia/gpu/d3d12/shaders/dxbc/edram_load_color_32bpp_2x_resolve_cs.cso new file mode 100644 index 0000000000000000000000000000000000000000..9ee412f13f19fdd233a9601509ac6fd4a0064d6c GIT binary patch literal 2116 zcmb7E&r1|x82PC81NA)X_pakG7QOK9H}k&F`@Fxt+0^`4a`SW9czG|j z^Xx$)x$*JCZbT`SYEr5J=Mc0IRcaaf6uNmtshQMx`U0Mbi{mGT^C~pbkV!Hq4qqaX zI!{{%v`6bXoXt?mHWXB<5lS8r|1)i0peW^^xSs@v2>JY+%eH0btJy`Xp4~1 za-F4W&Q@WryzP2w-X2fQj807=BEx{BQ+B;<*>ly_7W1NAbrMNToFXNiv=s*WU+DMW z5Mt!qhMkx=l(?NkaAC#e>UAs?%ia+BOhCyLF6-c~^DJatbe>(Tlx)`;T()iLuo|#^AVlp#nW(wK7T{V-=Vx?HZ!$AL~ z0d*sD{U-NF;W-_6&rFQZci`^a#sx})_hFNY+{G11Kku)_$PZ^kd4nsFUODKa{Wa~s z2KabDER1)sHL7Z-sZUJ206Qo43M=Tr$z8DHUhuTn-jp(ckBscu;cH&d_Quuy{EUeL zQXO{=FsohQiIck0D<w(IfH;GRfuRD3JAn8B zP%y~F)lFxjr8E-@)5b6>M#cw|Co<;B6({Bvg@H~41E3vXz&E*9`o1xB zr@PnOc>MmskJs-aBGT3-(gHgSEk;F_piiLXR*{+XSmrF=85hSR274JAY00LT6o;>? zD}9pK5on*My|DYBlyxYmBmpIlO7NZ7M<`nPYuq;mhY0zCoJ*Ez6{@*;vux)IrsLXG z%XI9;YTlACSHW^znX|^yGozCe$jCAwWiL2xZozeAZH;wtTsev&2CPciE7}2o{%79z zZwO=5t^;RG9Ll)O9pb{8%lmySmKNM$oU;o`rf^vWx6gAo=iubI`AXSx%%LT-U{&0r zSt+^sq7)w5)q-SmqP)UNWR@F!#9tEs zImp)rF)`kuj;PeE;aN<)2%J0k0$0!n%e&x-p?eP2zC_wrw(Hbmq(u*62Eps zO)r;Qvs=wok#+dZGo3VpR# zfiW%-=z;S!pn5xRFza9Nb4Qe8%Vk7e)E~nq{p1Vta~7;ke`eXhvo4xX{7i`dxWr?` zDd+L`Ipn=(V9BW%{vw4Kc@(3c7<*T&Rv#GqRg8YdQ52(}7p)g{*!Rvp~TcY;Z48>ZUW%Qksc{X=9ibBjba~6B%>miW74Sa#D-qjVj_(QVU8l;tMiMk~0`m%JYj- z7*{ea8TCBn%$;OX-%ht;Z{G)Nyh|C{aMdqxHZh6Gjy1|VWE0pb`Y28J9Ut^wjB zEDQ`mF0O706D_5gelTtfvtnetGI=6nu24#9K}kk@L1syE2181Deo+d;WEmy}#&eTx tnfy5&fLa5A22PkfmFYMm&*WI<)02BxHi+^AjR#7B0W*~5njFYl4**_fB1BDGAc+uatg4_;MUyyjTPbZJZcSKOPHg0$B#vyi zgiVPoR3i%^7C@0u7l6p3+4e8!f-R^ERCZM)P**In$QHhzd*^%KczBP{2nmTJ&7FJC z{mz*)XU=!defHUlXJ&r!=(pc~>UZxv_p2YhIJ58VmtX6J5XPrM*rom%wUrpcO|>7Z ztsDvA!r61PU(tPo(`8JU=hS+;=4Kc)u6G9yp8X=a&#E2G?J4#9)sXkpcB@UOVaHP5 zqx+-U9<>MIJ_bBQuvgl=xxBEvw6=I{;p*z*(!%=2>e}+c`s(XzmzTq^S4+$58{y*e zxw98ezjR(B<`^)udVPIk@%qMkxO0bjwcPMIO){z8ay3u-xD>qqS$_V91dRLlqz5yu z2JWK~xM9v+?)-TD%Jq$Bw9bQSSQ;+dvfbIaw79O7FJ8NGb$NYZ`sTvY@{Ns^g&S8k zF0X{8@2{>cg*)0s*~<M*uh4XXgC+AicmzLKiXI8J> zxN=oDC!YT5iSXjw^DncH2>mP7^V|#PE`IoA2;Wiy-B)6KZ%^obM=3J<)2Ev;z7Qki zH%f`wH+Q~6{|@@UpWt?fEGWFwkH^sTlet&KSEPSL$X{yw2@I;L05%^2%A0l<|y&T@44bwJB7mhskG$M}B6TF3Z$9&C9Ya_Jk{ zC#l0pjYou;n9lcq$o>4T*zCXalDQgeYWLQ$goECLzE(q=@MB6_R*yYgsL;2mm zC;QY7IE2qJvA!nN$fKrtozRxC;Lu&teN(4;tqtk>YtnIs&Bpd!Oyau&>84kVZ*Y5c zU*dkKXE$)l)yJ@hKQXnnls%y#F+rk1(`{#OOa3vI{ACX2(t4VCt)q`AgpYMjxJebh zrqr*;V#9dW=LTMO_ko8m!reNp-dJMgrdw?9EwIhnu+19jvGEge6bx&NX|O(?5&J@K zO#5bVb&Ppm;v8Rk#Qqp(KgzvPuI<<_e2giCL+agh+r`&o>0{C*gi}T1jA-n6POpJX zcVm#^y4!JJ4Ymtjem8q$8+FbxzLfc#ujp>?YxDK%@`D^k<|o=dCZ0mL^X|K+Xxwk+ zT!JT#CAv+GMOX6au5{$*MDAnKgM_$J&$Om4|Lr^YmYQt4EiUlnNan=JoWtVD(0UI);K2tOH@~NiA3AI>r@2AB zn3j(D|GcZ^4Z8QUZeqN}8^_qU^bUSaX$|+Xz1c_0Gq22=Uf><$Zu6b-(HC^rifgFf zQ}^I0^%9=a$E1sde5rYgO>)CH*Rqzen*xOy+m7v~;+y6HB=G{_@tA>;=3wlZJJy!3ur=Y1c=7vt=w@#YFWV!q^B)9}UE zQGChRj?d12^yZ6gFuxn~u}1sm*r6}Qdtsby)iE|-yhi)sXT}|?>KZ=AG@38AK@U!H zs%V`(&p{v4;M=dRYsT3w&*qDB&An|2vP0kt^@lwDTfgo3{9OIO8T}^g<>!mh^x2yVRZoB?z zKfAGvAxEk8i2Ue&KYCpK`_c1pR$S6J#@~Nz@cR)vXaW0PO{teY=@G%WP7l<>l zyuWvVBWDrk?sl%D#381^nSgyHrU75r3&itoX+PF92l}_h+PQo#po3fVF^&G-EytF4 z^3zSX-MNtSwmBDUn;5u(H4mNRtPR`l(feGm4SF}-cD{S9F`?Zl-V4T+zB{&#HU4-n zCbSp$F`>OwS zOnRsU9+M9x9^Gcv9dBk0!QYJh{fBQx`j~W)IM?M@lk0c$7~)jo%I`+@p)0r9j;&*D?iojZI%hnNTrc+vKE~AMx^BC_ zgK(B~xFUxIA=eT5Q|6B6^g5m6bq(Zw?Gw4~T$|TiNS$+yGGC~HXOx>!&z$$zIW9F%%bYa^+oed~ z{Jn|yj!8^|dSCO@IART+czK+8Wu5cskT7n#ZQ@(*EBKgn8B&wLc~1J62DPZ>sd1j4 zXZC0qPi;$(9Rg1eFfICyFuIghTF20Zmze!08#2%c^VhabknjcMuNINxjZF}2@m zaKj?o&EH3OzOUbQ#_>Fi8~E}@@muk~!42E1xxriy%MHfvbHlbC#0}#-r%W`pEBBo}&p{v4gSlb5;6EuhHuG7@*t#a6 z<2OtBTa3BtnuLy;1l~1?`}(&SI_e7em~?4b*Y&&uqkQasPq`k!O_+GQs#pF^<*^EA sZ|>F8ul`)vzpC+nR|MX&KhLXuS*`Iw{V3smDNpEOQVkmqE9B5W0TfM&?*IS* literal 0 HcmV?d00001 diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/edram_load_color_7e3_2x_resolve_cs.h b/src/xenia/gpu/d3d12/shaders/dxbc/edram_load_color_7e3_2x_resolve_cs.h new file mode 100644 index 000000000..55c7569b6 --- /dev/null +++ b/src/xenia/gpu/d3d12/shaders/dxbc/edram_load_color_7e3_2x_resolve_cs.h @@ -0,0 +1,751 @@ +// generated from `xb buildhlsl` +// source: edram_load_color_7e3_2x_resolve.cs.hlsl +const uint8_t edram_load_color_7e3_2x_resolve_cs[] = { + 0x44, 0x58, 0x42, 0x43, 0x95, 0x0E, 0x57, 0x97, 0x24, 0xA3, 0x9D, 0x3C, + 0x98, 0x84, 0x49, 0x43, 0x0B, 0x97, 0x4E, 0x55, 0x01, 0x00, 0x00, 0x00, + 0x04, 0x23, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x68, 0x02, 0x00, 0x00, 0x78, 0x02, 0x00, 0x00, 0x88, 0x02, 0x00, 0x00, + 0x68, 0x22, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0x2C, 0x02, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x3C, 0x00, 0x00, 0x00, 0x01, 0x05, 0x53, 0x43, 0x00, 0x05, 0x00, 0x00, + 0x04, 0x02, 0x00, 0x00, 0x13, 0x13, 0x44, 0x25, 0x3C, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, + 0x24, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xB4, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xCF, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x6C, 0x6F, 0x61, + 0x64, 0x5F, 0x73, 0x74, 0x6F, 0x72, 0x65, 0x5F, 0x73, 0x6F, 0x75, 0x72, + 0x63, 0x65, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, 0x5F, + 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x73, 0x74, 0x6F, 0x72, 0x65, 0x5F, 0x64, + 0x65, 0x73, 0x74, 0x00, 0x58, 0x65, 0x45, 0x44, 0x52, 0x41, 0x4D, 0x4C, + 0x6F, 0x61, 0x64, 0x53, 0x74, 0x6F, 0x72, 0x65, 0x43, 0x6F, 0x6E, 0x73, + 0x74, 0x61, 0x6E, 0x74, 0x73, 0x00, 0xAB, 0xAB, 0xE8, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x1C, 0x01, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x90, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xB4, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, + 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x73, 0x74, 0x6F, 0x72, 0x65, 0x5F, + 0x63, 0x6F, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x74, 0x73, 0x00, 0x75, 0x69, + 0x6E, 0x74, 0x34, 0x00, 0x01, 0x00, 0x13, 0x00, 0x01, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8A, 0x01, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, + 0x5F, 0x62, 0x61, 0x73, 0x65, 0x5F, 0x73, 0x61, 0x6D, 0x70, 0x6C, 0x65, + 0x73, 0x5F, 0x32, 0x78, 0x5F, 0x64, 0x65, 0x70, 0x74, 0x68, 0x5F, 0x70, + 0x69, 0x74, 0x63, 0x68, 0x00, 0x64, 0x77, 0x6F, 0x72, 0x64, 0x00, 0xAB, + 0x00, 0x00, 0x13, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD9, 0x01, 0x00, 0x00, + 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x28, 0x52, + 0x29, 0x20, 0x48, 0x4C, 0x53, 0x4C, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, + 0x72, 0x20, 0x43, 0x6F, 0x6D, 0x70, 0x69, 0x6C, 0x65, 0x72, 0x20, 0x31, + 0x30, 0x2E, 0x31, 0x00, 0x49, 0x53, 0x47, 0x4E, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x4F, 0x53, 0x47, 0x4E, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x53, 0x48, 0x45, 0x58, 0xD8, 0x1F, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, + 0xF6, 0x07, 0x00, 0x00, 0x6A, 0x08, 0x00, 0x01, 0x59, 0x00, 0x00, 0x07, + 0x46, 0x8E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xA1, 0x00, 0x00, 0x06, 0x46, 0x7E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x9D, 0x00, 0x00, 0x06, 0x46, 0xEE, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5F, 0x00, 0x00, 0x02, 0x32, 0x10, 0x02, 0x00, 0x5F, 0x00, 0x00, 0x02, + 0x32, 0x20, 0x02, 0x00, 0x5F, 0x00, 0x00, 0x02, 0x32, 0x00, 0x02, 0x00, + 0x68, 0x00, 0x00, 0x02, 0x0D, 0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x04, + 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x06, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x20, 0x02, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x0C, 0x62, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1F, 0x00, 0x04, 0x03, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x4F, 0x00, 0x00, 0x06, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x20, 0x02, 0x00, 0x01, 0x40, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x50, 0x00, 0x00, 0x06, 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x20, 0x02, 0x00, 0x01, 0x40, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x0A, 0xA2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x56, 0x0D, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xD8, 0xFF, 0xFF, 0xFF, 0x1E, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x01, 0x55, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x08, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x10, 0x02, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x06, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x10, 0x02, 0x00, + 0x26, 0x00, 0x00, 0x07, 0x00, 0xD0, 0x00, 0x00, 0x42, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x20, 0x02, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x40, 0x01, 0x00, 0x00, 0x23, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8A, 0x00, 0x00, 0x11, 0xE2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, + 0x0B, 0x00, 0x00, 0x00, 0x06, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xA5, 0x00, 0x00, 0x08, 0xF2, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x36, 0x79, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0xA5, 0x00, 0x00, 0x08, 0xF2, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x16, 0x7E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1F, 0x00, 0x04, 0x03, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x05, 0x12, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, + 0x12, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x12, 0x00, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x12, 0x00, 0x00, 0x01, 0x36, 0x00, 0x00, 0x05, 0x12, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x05, 0x12, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, + 0x12, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x01, 0x3B, 0x00, 0x00, 0x05, 0x12, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x06, 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xC6, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x05, 0x02, 0x00, + 0x23, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x06, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x02, 0x00, 0x01, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x0B, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x56, 0x0D, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, + 0x14, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x05, 0x12, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, + 0x62, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x01, 0x10, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, + 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, + 0x72, 0x00, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, + 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8A, 0x00, 0x00, 0x0F, 0x72, 0x00, 0x10, 0x00, 0x0A, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x87, 0x00, 0x00, 0x05, 0x72, 0x00, 0x10, 0x00, 0x0B, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0A, + 0x72, 0x00, 0x10, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x0B, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0xE8, 0xFF, 0xFF, 0xFF, + 0xE8, 0xFF, 0xFF, 0xFF, 0xE8, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x37, 0x00, 0x00, 0x0C, 0x72, 0x00, 0x10, 0x00, 0x0B, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x0B, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x0B, 0x72, 0x00, 0x10, 0x00, 0x0C, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x09, + 0x72, 0x00, 0x10, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x0A, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x0A, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, + 0x72, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x0B, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, + 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x09, + 0x72, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x0A, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, + 0x72, 0x00, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x0C, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, + 0x17, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x3E, + 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0x72, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x37, 0x00, 0x00, 0x0C, 0x72, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x56, 0x00, 0x00, 0x05, 0x62, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xA6, 0x0B, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x0A, + 0x62, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x06, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xAB, 0xAA, 0xAA, 0x3E, 0xAB, 0xAA, 0xAA, 0x3E, 0x00, 0x00, 0x00, 0x00, + 0x82, 0x00, 0x00, 0x05, 0x72, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x05, + 0x82, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, 0xE2, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, + 0x14, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, + 0x72, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, + 0xFF, 0x03, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x0F, 0x72, 0x00, 0x10, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x05, 0x72, 0x00, 0x10, 0x00, + 0x0A, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, 0x0A, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0xE8, 0xFF, 0xFF, 0xFF, 0xE8, 0xFF, 0xFF, 0xFF, 0xE8, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x0C, 0x72, 0x00, 0x10, 0x00, + 0x0A, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0B, 0x72, 0x00, 0x10, 0x00, + 0x0B, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x37, 0x00, 0x00, 0x09, 0x72, 0x00, 0x10, 0x00, 0x0B, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x0B, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0x72, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x0A, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, + 0x72, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, + 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x37, 0x00, 0x00, 0x09, 0x72, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x17, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x3E, + 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, + 0x72, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0x72, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x0C, 0x72, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x05, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0xAB, 0xAA, 0xAA, 0x3E, 0x82, 0x00, 0x00, 0x05, 0xD2, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x56, 0x08, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x82, 0x00, 0x00, 0x05, 0x22, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, + 0x32, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0xD6, 0x05, 0x10, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xC2, 0x00, 0x10, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x06, 0x04, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x05, 0x32, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x86, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x0C, + 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x08, + 0xF2, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, 0xE2, 0x00, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, + 0x14, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, + 0x72, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, + 0xFF, 0x03, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x0F, 0x72, 0x00, 0x10, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x05, 0x72, 0x00, 0x10, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0xE8, 0xFF, 0xFF, 0xFF, 0xE8, 0xFF, 0xFF, 0xFF, 0xE8, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x0C, 0x72, 0x00, 0x10, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0B, 0x72, 0x00, 0x10, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x37, 0x00, 0x00, 0x09, 0x72, 0x00, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0x72, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, + 0x72, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, + 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x37, 0x00, 0x00, 0x09, 0x72, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x17, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x3E, + 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, + 0x72, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0x72, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x0C, 0x72, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x05, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0xAB, 0xAA, 0xAA, 0x3E, 0x82, 0x00, 0x00, 0x05, 0x72, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x82, 0x00, 0x00, 0x05, 0x82, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x0C, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, + 0x14, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x05, 0x62, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x06, 0x01, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, + 0x72, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, + 0xFF, 0x03, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x0F, 0x72, 0x00, 0x10, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x05, 0x72, 0x00, 0x10, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0xE8, 0xFF, 0xFF, 0xFF, 0xE8, 0xFF, 0xFF, 0xFF, 0xE8, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x0C, 0x72, 0x00, 0x10, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0B, 0x72, 0x00, 0x10, 0x00, + 0x0A, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x37, 0x00, 0x00, 0x09, 0x72, 0x00, 0x10, 0x00, 0x0A, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x0A, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0x72, 0x00, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, + 0x72, 0x00, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, + 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x37, 0x00, 0x00, 0x09, 0x72, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x17, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x3E, + 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, + 0x72, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0x72, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x0C, 0x72, 0x00, 0x10, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x05, 0x32, 0x00, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0xE6, 0x0A, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x0A, 0x32, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x46, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0xAB, 0xAA, 0xAA, 0x3E, 0xAB, 0xAA, 0xAA, 0x3E, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x05, 0xD2, 0x00, 0x10, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x56, 0x08, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x82, 0x00, 0x00, 0x05, 0x22, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, + 0x32, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0xD6, 0x05, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xC2, 0x00, 0x10, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x06, 0x04, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x05, 0x32, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x86, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x0C, + 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0xA6, 0x00, 0x00, 0x08, 0xF2, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x0B, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, + 0x62, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0xF6, 0x0F, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x76, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0xFF, 0x03, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0xD2, 0x00, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0xF6, 0x09, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x0F, + 0x72, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x76, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x05, + 0x72, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x86, 0x03, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0xE8, 0xFF, 0xFF, 0xFF, 0xE8, 0xFF, 0xFF, 0xFF, + 0xE8, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x0C, + 0x72, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x86, 0x03, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0B, + 0x72, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x80, + 0x41, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x09, 0x72, 0x00, 0x10, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0x72, 0x00, 0x10, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x76, 0x0E, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x09, 0xD2, 0x00, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x06, 0x09, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x06, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x09, 0x10, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, + 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0A, + 0x72, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, + 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x0A, 0xD2, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x06, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0xD2, 0x00, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x06, 0x09, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x06, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x0C, + 0x72, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x86, 0x03, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x05, + 0x72, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x05, 0x82, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x55, 0x00, 0x00, 0x0A, 0xE2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0xE2, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x09, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, + 0xFF, 0x03, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, + 0xD2, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x09, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, + 0x8A, 0x00, 0x00, 0x0F, 0x72, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x87, 0x00, 0x00, 0x05, 0x72, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x86, 0x03, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0A, + 0x72, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0xE8, 0xFF, 0xFF, 0xFF, + 0xE8, 0xFF, 0xFF, 0xFF, 0xE8, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x37, 0x00, 0x00, 0x0C, 0x72, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x86, 0x03, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x0B, 0x72, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x09, + 0x72, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, + 0x72, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, + 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x09, + 0x72, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x86, 0x03, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, + 0xD2, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x09, 0x10, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x0A, 0xD2, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x06, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, + 0x00, 0x00, 0x00, 0x3E, 0x29, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0x72, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x86, 0x03, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x37, 0x00, 0x00, 0x0C, 0xE2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x56, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x09, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x56, 0x00, 0x00, 0x05, 0x42, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, + 0x42, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0xAB, 0xAA, 0xAA, 0x3E, + 0x82, 0x00, 0x00, 0x05, 0xD2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0xA6, 0x0D, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x05, + 0x22, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x32, 0x00, 0x10, 0x00, + 0x06, 0x00, 0x00, 0x00, 0xD6, 0x05, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x05, 0xC2, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x06, 0x04, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, + 0x32, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x86, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x0C, 0xF2, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x08, 0xF2, 0xE0, 0x21, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x55, 0x00, 0x00, 0x0A, 0xE2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0xE2, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x09, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, + 0xFF, 0x03, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, + 0x72, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, + 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8A, 0x00, 0x00, 0x0F, 0x72, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x87, 0x00, 0x00, 0x05, 0xD2, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x06, 0x09, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0A, + 0xD2, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x0E, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0xE8, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xE8, 0xFF, 0xFF, 0xFF, 0xE8, 0xFF, 0xFF, 0xFF, + 0x37, 0x00, 0x00, 0x0C, 0xD2, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x06, 0x09, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x0E, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x0B, 0x72, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x86, 0x03, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x09, + 0x72, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, + 0x72, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x86, 0x03, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, + 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x09, + 0x72, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, + 0x72, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, + 0x17, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x3E, + 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0x72, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x37, 0x00, 0x00, 0x0C, 0xE2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x56, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x09, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x56, 0x00, 0x00, 0x05, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0xAB, 0xAA, 0xAA, 0x3E, + 0x82, 0x00, 0x00, 0x05, 0x72, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x96, 0x07, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x05, + 0x82, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, 0x32, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xF6, 0x0F, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, + 0xE2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0x01, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x03, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x76, 0x0C, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x0F, 0x72, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x0C, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x05, 0xD2, 0x00, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x06, 0x09, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x0A, 0xD2, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x06, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0xE8, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xE8, 0xFF, 0xFF, 0xFF, + 0xE8, 0xFF, 0xFF, 0xFF, 0x37, 0x00, 0x00, 0x0C, 0xD2, 0x00, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x06, 0x09, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x06, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0B, 0x72, 0x00, 0x10, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x86, 0x03, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x37, 0x00, 0x00, 0x09, 0x72, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0x72, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x03, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x76, 0x0C, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, + 0x72, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, + 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x37, 0x00, 0x00, 0x09, 0x72, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x17, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x3E, + 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, + 0x72, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0x72, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x0C, 0xE2, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x56, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x09, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x05, 0xD2, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xA6, 0x0D, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x82, 0x00, 0x00, 0x05, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, + 0x32, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0xD6, 0x05, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xC2, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x06, 0x04, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x05, 0x32, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x86, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x0C, + 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0xA6, 0x00, 0x00, 0x08, 0xF2, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, + 0x53, 0x54, 0x41, 0x54, 0x94, 0x00, 0x00, 0x00, 0xE5, 0x00, 0x00, 0x00, + 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x16, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, +}; diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/edram_load_color_7e3_2x_resolve_cs.txt b/src/xenia/gpu/d3d12/shaders/dxbc/edram_load_color_7e3_2x_resolve_cs.txt new file mode 100644 index 000000000..0d21eb5cb --- /dev/null +++ b/src/xenia/gpu/d3d12/shaders/dxbc/edram_load_color_7e3_2x_resolve_cs.txt @@ -0,0 +1,276 @@ +// +// Generated by Microsoft (R) HLSL Shader Compiler 10.1 +// +// +// Buffer Definitions: +// +// cbuffer XeEDRAMLoadStoreConstants +// { +// +// uint4 xe_edram_load_store_constants;// Offset: 0 Size: 16 +// uint xe_edram_base_samples_2x_depth_pitch;// Offset: 16 Size: 4 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim ID HLSL Bind Count +// ------------------------------ ---------- ------- ----------- ------- -------------- ------ +// xe_edram_load_store_source texture byte r/o T0 t0 1 +// xe_edram_load_store_dest UAV byte r/w U0 u0 1 +// XeEDRAMLoadStoreConstants cbuffer NA NA CB0 cb0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Input +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Output +cs_5_1 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer CB0[0:0][2], immediateIndexed, space=0 +dcl_resource_raw T0[0:0], space=0 +dcl_uav_raw U0[0:0], space=0 +dcl_input vThreadGroupID.xy +dcl_input vThreadIDInGroup.xy +dcl_input vThreadID.xy +dcl_temps 13 +dcl_thread_group 40, 16, 1 +ishl r0.x, vThreadIDInGroup.x, l(1) +and r0.yz, CB0[0][1].xxxx, l(0, 0x00008000, 2047, 0) +if_nz r0.y + ult r0.y, vThreadIDInGroup.x, l(20) + uge r0.w, vThreadIDInGroup.x, l(20) + and r0.yw, r0.yyyw, l(0, 40, 0, -40) + iadd r0.y, r0.w, r0.y + iadd r0.x, r0.y, r0.x +endif +ushr r0.y, CB0[0][1].x, l(16) +imad r0.y, vThreadGroupID.y, r0.y, r0.z +iadd r0.y, r0.y, vThreadGroupID.x +imul null, r0.z, vThreadIDInGroup.y, l(320) +imad r0.y, r0.y, l(5120), r0.z +ishl r0.x, r0.x, l(2) +iadd r0.x, r0.x, r0.y +ubfe r0.yzw, l(0, 1, 1, 1), l(0, 13, 12, 11), CB0[0][1].xxxx +ishl r0.y, r0.y, l(1) +ishl r0.x, r0.x, r0.y +ld_raw r1.xyzw, r0.x, T0[0].wxyz +iadd r0.x, r0.x, l(16) +ld_raw r2.xyzw, r0.x, T0[0].yxzw +if_nz r0.z + mov r3.x, r2.y + mov r4.x, r2.z + mov r5.x, r1.z +else + mov r3.x, r1.z + mov r4.x, r1.x + mov r5.x, r2.y + mov r1.x, r2.z +endif +not r0.x, r0.w +and r0.xy, r0.xwxx, vThreadID.yyyy +imad r0.x, r0.x, l(2), r0.y +ishl r0.y, vThreadID.x, l(5) +imad r0.x, r0.x, CB0[0][0].y, r0.y +ushr r6.xyzw, r1.yyyw, l(10, 20, 30, 30) +mov r7.x, r1.y +mov r7.yz, r6.xxyx +and r8.xyz, r7.xyzx, l(1023, 1023, 1023, 0) +and r9.xyz, r7.xyzx, l(127, 127, 127, 0) +ubfe r10.xyz, l(3, 3, 3, 0), l(7, 7, 7, 0), r7.xyzx +firstbit_hi r11.xyz, r9.xyzx +iadd r11.xyz, r11.xyzx, l(-24, -24, -24, 0) +movc r11.xyz, r9.xyzx, r11.xyzx, l(8,8,8,0) +iadd r12.xyz, -r11.xyzx, l(1, 1, 1, 0) +movc r12.xyz, r10.xyzx, r10.xyzx, r12.xyzx +bfi r7.xyz, l(7, 7, 7, 0), r11.xyzx, r7.xyzx, l(0, 0, 0, 0) +and r7.xyz, r7.xyzx, l(127, 127, 127, 0) +movc r7.xyz, r10.xyzx, r9.xyzx, r7.xyzx +ishl r9.xyz, r12.xyzx, l(23, 23, 23, 0) +iadd r9.xyz, r9.xyzx, l(0x3e000000, 0x3e000000, 0x3e000000, 0) +ishl r7.xyz, r7.xyzx, l(16, 16, 16, 0) +iadd r7.xyz, r9.xyzx, r7.xyzx +movc r7.xyz, r8.xyzx, r7.xyzx, l(0,0,0,0) +utof r0.yz, r6.zzwz +mul r0.yz, r0.yyzy, l(0.000000, 0.333333, 0.333333, 0.000000) +f32tof16 r6.xyz, r7.xyzx +f32tof16 r6.w, r0.y +ushr r3.yzw, r3.xxxx, l(0, 10, 20, 30) +and r7.xyz, r3.xyzx, l(1023, 1023, 1023, 0) +and r8.xyz, r3.xyzx, l(127, 127, 127, 0) +ubfe r9.xyz, l(3, 3, 3, 0), l(7, 7, 7, 0), r3.xyzx +firstbit_hi r10.xyz, r8.xyzx +iadd r10.xyz, r10.xyzx, l(-24, -24, -24, 0) +movc r10.xyz, r8.xyzx, r10.xyzx, l(8,8,8,0) +iadd r11.xyz, -r10.xyzx, l(1, 1, 1, 0) +movc r11.xyz, r9.xyzx, r9.xyzx, r11.xyzx +bfi r3.xyz, l(7, 7, 7, 0), r10.xyzx, r3.xyzx, l(0, 0, 0, 0) +and r3.xyz, r3.xyzx, l(127, 127, 127, 0) +movc r3.xyz, r9.xyzx, r8.xyzx, r3.xyzx +ishl r8.xyz, r11.xyzx, l(23, 23, 23, 0) +iadd r8.xyz, r8.xyzx, l(0x3e000000, 0x3e000000, 0x3e000000, 0) +ishl r3.xyz, r3.xyzx, l(16, 16, 16, 0) +iadd r3.xyz, r8.xyzx, r3.xyzx +movc r3.xyz, r7.xyzx, r3.xyzx, l(0,0,0,0) +utof r0.y, r3.w +mul r0.y, r0.y, l(0.333333) +f32tof16 r3.xzw, r3.yyxz +f32tof16 r3.y, r0.y +mov r7.xy, r6.ywyy +mov r7.zw, r3.xxxy +mov r3.xy, r6.xzxx +imad r3.xyzw, r7.xyzw, l(0x00010000, 0x00010000, 0x00010000, 0x00010000), r3.xyzw +store_raw U0[0].xyzw, r0.x, r3.xyzw +ushr r5.yzw, r5.xxxx, l(0, 10, 20, 30) +and r3.xyz, r5.xyzx, l(1023, 1023, 1023, 0) +and r6.xyz, r5.xyzx, l(127, 127, 127, 0) +ubfe r7.xyz, l(3, 3, 3, 0), l(7, 7, 7, 0), r5.xyzx +firstbit_hi r8.xyz, r6.xyzx +iadd r8.xyz, r8.xyzx, l(-24, -24, -24, 0) +movc r8.xyz, r6.xyzx, r8.xyzx, l(8,8,8,0) +iadd r9.xyz, -r8.xyzx, l(1, 1, 1, 0) +movc r9.xyz, r7.xyzx, r7.xyzx, r9.xyzx +bfi r5.xyz, l(7, 7, 7, 0), r8.xyzx, r5.xyzx, l(0, 0, 0, 0) +and r5.xyz, r5.xyzx, l(127, 127, 127, 0) +movc r5.xyz, r7.xyzx, r6.xyzx, r5.xyzx +ishl r6.xyz, r9.xyzx, l(23, 23, 23, 0) +iadd r6.xyz, r6.xyzx, l(0x3e000000, 0x3e000000, 0x3e000000, 0) +ishl r5.xyz, r5.xyzx, l(16, 16, 16, 0) +iadd r5.xyz, r6.xyzx, r5.xyzx +movc r3.xyz, r3.xyzx, r5.xyzx, l(0,0,0,0) +utof r0.y, r5.w +mul r0.y, r0.y, l(0.333333) +f32tof16 r3.xyz, r3.xyzx +f32tof16 r3.w, r0.y +ushr r5.xyzw, r2.xxxw, l(10, 20, 30, 30) +mov r2.yz, r5.xxyx +and r6.xyz, r2.xyzx, l(1023, 1023, 1023, 0) +and r7.xyz, r2.xyzx, l(127, 127, 127, 0) +ubfe r8.xyz, l(3, 3, 3, 0), l(7, 7, 7, 0), r2.xyzx +firstbit_hi r9.xyz, r7.xyzx +iadd r9.xyz, r9.xyzx, l(-24, -24, -24, 0) +movc r9.xyz, r7.xyzx, r9.xyzx, l(8,8,8,0) +iadd r10.xyz, -r9.xyzx, l(1, 1, 1, 0) +movc r10.xyz, r8.xyzx, r8.xyzx, r10.xyzx +bfi r9.xyz, l(7, 7, 7, 0), r9.xyzx, r2.xyzx, l(0, 0, 0, 0) +and r9.xyz, r9.xyzx, l(127, 127, 127, 0) +movc r7.xyz, r8.xyzx, r7.xyzx, r9.xyzx +ishl r8.xyz, r10.xyzx, l(23, 23, 23, 0) +iadd r8.xyz, r8.xyzx, l(0x3e000000, 0x3e000000, 0x3e000000, 0) +ishl r7.xyz, r7.xyzx, l(16, 16, 16, 0) +iadd r7.xyz, r8.xyzx, r7.xyzx +movc r6.xyz, r6.xyzx, r7.xyzx, l(0,0,0,0) +utof r5.xy, r5.zwzz +mul r5.xy, r5.xyxx, l(0.333333, 0.333333, 0.000000, 0.000000) +f32tof16 r6.xzw, r6.yyxz +f32tof16 r6.y, r5.x +mov r7.xy, r3.ywyy +mov r7.zw, r6.xxxy +mov r6.xy, r3.xzxx +imad r3.xyzw, r7.xyzw, l(0x00010000, 0x00010000, 0x00010000, 0x00010000), r6.xyzw +iadd r0.y, r0.x, l(16) +store_raw U0[0].xyzw, r0.y, r3.xyzw +ishl r0.y, l(1), r0.w +imad r0.x, r0.y, CB0[0][0].y, r0.x +ushr r1.yz, r1.wwww, l(0, 10, 20, 0) +and r3.xyz, r1.wyzw, l(1023, 1023, 1023, 0) +and r5.xzw, r1.wwyz, l(127, 0, 127, 127) +ubfe r6.xyz, l(3, 3, 3, 0), l(7, 7, 7, 0), r1.wyzw +firstbit_hi r7.xyz, r5.xzwx +iadd r7.xyz, r7.xyzx, l(-24, -24, -24, 0) +movc r7.xyz, r5.xzwx, r7.xyzx, l(8,8,8,0) +iadd r8.xyz, -r7.xyzx, l(1, 1, 1, 0) +movc r8.xyz, r6.xyzx, r6.xyzx, r8.xyzx +bfi r7.xyz, l(7, 7, 7, 0), r7.xyzx, r1.wyzw, l(0, 0, 0, 0) +and r7.xyz, r7.xyzx, l(127, 127, 127, 0) +movc r5.xzw, r6.xxyz, r5.xxzw, r7.xxyz +ishl r6.xyz, r8.xyzx, l(23, 23, 23, 0) +iadd r6.xyz, r6.xyzx, l(0x3e000000, 0x3e000000, 0x3e000000, 0) +ishl r5.xzw, r5.xxzw, l(16, 0, 16, 16) +iadd r5.xzw, r6.xxyz, r5.xxzw +movc r3.xyz, r3.xyzx, r5.xzwx, l(0,0,0,0) +f32tof16 r3.xyz, r3.xyzx +f32tof16 r3.w, r0.z +ushr r4.yzw, r4.xxxx, l(0, 10, 20, 30) +and r0.yzw, r4.xxyz, l(0, 1023, 1023, 1023) +and r5.xzw, r4.xxyz, l(127, 0, 127, 127) +ubfe r6.xyz, l(3, 3, 3, 0), l(7, 7, 7, 0), r4.xyzx +firstbit_hi r7.xyz, r5.xzwx +iadd r7.xyz, r7.xyzx, l(-24, -24, -24, 0) +movc r7.xyz, r5.xzwx, r7.xyzx, l(8,8,8,0) +iadd r8.xyz, -r7.xyzx, l(1, 1, 1, 0) +movc r8.xyz, r6.xyzx, r6.xyzx, r8.xyzx +bfi r4.xyz, l(7, 7, 7, 0), r7.xyzx, r4.xyzx, l(0, 0, 0, 0) +and r4.xyz, r4.xyzx, l(127, 127, 127, 0) +movc r4.xyz, r6.xyzx, r5.xzwx, r4.xyzx +ishl r5.xzw, r8.xxyz, l(23, 0, 23, 23) +iadd r5.xzw, r5.xxzw, l(0x3e000000, 0, 0x3e000000, 0x3e000000) +ishl r4.xyz, r4.xyzx, l(16, 16, 16, 0) +iadd r4.xyz, r5.xzwx, r4.xyzx +movc r0.yzw, r0.yyzw, r4.xxyz, l(0,0,0,0) +utof r2.z, r4.w +mul r2.z, r2.z, l(0.333333) +f32tof16 r4.xzw, r0.zzyw +f32tof16 r4.y, r2.z +mov r6.xy, r3.ywyy +mov r6.zw, r4.xxxy +mov r4.xy, r3.xzxx +imad r3.xyzw, r6.xyzw, l(0x00010000, 0x00010000, 0x00010000, 0x00010000), r4.xyzw +store_raw U0[0].xyzw, r0.x, r3.xyzw +ushr r1.yzw, r1.xxxx, l(0, 10, 20, 30) +and r0.yzw, r1.xxyz, l(0, 1023, 1023, 1023) +and r3.xyz, r1.xyzx, l(127, 127, 127, 0) +ubfe r4.xyz, l(3, 3, 3, 0), l(7, 7, 7, 0), r1.xyzx +firstbit_hi r5.xzw, r3.xxyz +iadd r5.xzw, r5.xxzw, l(-24, 0, -24, -24) +movc r5.xzw, r3.xxyz, r5.xxzw, l(8,0,8,8) +iadd r6.xyz, -r5.xzwx, l(1, 1, 1, 0) +movc r6.xyz, r4.xyzx, r4.xyzx, r6.xyzx +bfi r1.xyz, l(7, 7, 7, 0), r5.xzwx, r1.xyzx, l(0, 0, 0, 0) +and r1.xyz, r1.xyzx, l(127, 127, 127, 0) +movc r1.xyz, r4.xyzx, r3.xyzx, r1.xyzx +ishl r3.xyz, r6.xyzx, l(23, 23, 23, 0) +iadd r3.xyz, r3.xyzx, l(0x3e000000, 0x3e000000, 0x3e000000, 0) +ishl r1.xyz, r1.xyzx, l(16, 16, 16, 0) +iadd r1.xyz, r3.xyzx, r1.xyzx +movc r0.yzw, r0.yyzw, r1.xxyz, l(0,0,0,0) +utof r1.x, r1.w +mul r1.x, r1.x, l(0.333333) +f32tof16 r3.xyz, r0.yzwy +f32tof16 r3.w, r1.x +ushr r2.xy, r2.wwww, l(20, 10, 0, 0) +and r0.yzw, r2.wwyx, l(0, 1023, 1023, 1023) +and r1.xyz, r2.wyxw, l(127, 127, 127, 0) +ubfe r4.xyz, l(3, 3, 3, 0), l(7, 7, 7, 0), r2.wyxw +firstbit_hi r5.xzw, r1.xxyz +iadd r5.xzw, r5.xxzw, l(-24, 0, -24, -24) +movc r5.xzw, r1.xxyz, r5.xxzw, l(8,0,8,8) +iadd r6.xyz, -r5.xzwx, l(1, 1, 1, 0) +movc r6.xyz, r4.xyzx, r4.xyzx, r6.xyzx +bfi r2.xyz, l(7, 7, 7, 0), r5.xzwx, r2.wyxw, l(0, 0, 0, 0) +and r2.xyz, r2.xyzx, l(127, 127, 127, 0) +movc r1.xyz, r4.xyzx, r1.xyzx, r2.xyzx +ishl r2.xyz, r6.xyzx, l(23, 23, 23, 0) +iadd r2.xyz, r2.xyzx, l(0x3e000000, 0x3e000000, 0x3e000000, 0) +ishl r1.xyz, r1.xyzx, l(16, 16, 16, 0) +iadd r1.xyz, r2.xyzx, r1.xyzx +movc r0.yzw, r0.yyzw, r1.xxyz, l(0,0,0,0) +f32tof16 r1.xzw, r0.zzyw +f32tof16 r1.y, r5.y +mov r2.xy, r3.ywyy +mov r2.zw, r1.xxxy +mov r1.xy, r3.xzxx +imad r1.xyzw, r2.xyzw, l(0x00010000, 0x00010000, 0x00010000, 0x00010000), r1.xyzw +iadd r0.y, r0.x, l(16) +store_raw U0[0].xyzw, r0.y, r1.xyzw +ret +// Approximately 229 instruction slots used diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/edram_load_color_7e3_cs.cso b/src/xenia/gpu/d3d12/shaders/dxbc/edram_load_color_7e3_cs.cso index 045c1c76b9c45b187020cb590954ea5245039459..f36978dea9f1f86a563c158fef57dcf646c6dcf6 100644 GIT binary patch delta 235 zcmZ1=IYG+OCBn(sVX0~sO1^90AGcqtR2=Fp6umWilAkJW7V5k7%4j?Y! zVPFVyadp#~XerIa!n85Wijncba?c1v#n3@kSN#DX9e|8Sw>~CCM2KDdqV^ zDGaM83ot1#-kfa6FN(8a*Ot;8Szw32~= z(E*5|G|(*!Tnz?55&}TtnhXr=lM7fx7#Sz`vWRa!z~aL$>IM{NhpJ%)(jaxxlNEXD E0nKDDyZ`_I delta 164 zcmbOrwLsF+CBn&h@7i4rYYf{aC3y*VtWAD?l97RdVF3>V11pd=0pb`Y28J9Ut^r~e zpm>mrtDC|^OKGMbj2pwO7#Xijp2(Ohl#*Idk`Z5!S(2Q=kW!vsl)^AshDm|(++kA@ijilsBFpB@7OXDpqRv2D*nt=Xn1LAN0?Ek}dFlaA Cizl`K diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/edram_load_color_7e3_cs.h b/src/xenia/gpu/d3d12/shaders/dxbc/edram_load_color_7e3_cs.h index 1fd5ee492..4fc6f3e1b 100644 --- a/src/xenia/gpu/d3d12/shaders/dxbc/edram_load_color_7e3_cs.h +++ b/src/xenia/gpu/d3d12/shaders/dxbc/edram_load_color_7e3_cs.h @@ -1,14 +1,14 @@ // generated from `xb buildhlsl` // source: edram_load_color_7e3.cs.hlsl const uint8_t edram_load_color_7e3_cs[] = { - 0x44, 0x58, 0x42, 0x43, 0xBD, 0xAD, 0xBA, 0x80, 0xAC, 0x31, 0x86, 0x92, - 0x62, 0x4A, 0x13, 0x88, 0xAD, 0x63, 0xE7, 0xC9, 0x01, 0x00, 0x00, 0x00, - 0xA0, 0x0C, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, - 0x5C, 0x02, 0x00, 0x00, 0x6C, 0x02, 0x00, 0x00, 0x7C, 0x02, 0x00, 0x00, - 0x04, 0x0C, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0x20, 0x02, 0x00, 0x00, + 0x44, 0x58, 0x42, 0x43, 0x34, 0xE8, 0x32, 0xF9, 0x69, 0xD3, 0x35, 0x21, + 0x36, 0x3D, 0xED, 0x73, 0x10, 0x0E, 0xD9, 0x0F, 0x01, 0x00, 0x00, 0x00, + 0x10, 0x0D, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x68, 0x02, 0x00, 0x00, 0x78, 0x02, 0x00, 0x00, 0x88, 0x02, 0x00, 0x00, + 0x74, 0x0C, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0x2C, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01, 0x05, 0x53, 0x43, 0x00, 0x05, 0x00, 0x00, - 0xF8, 0x01, 0x00, 0x00, 0x13, 0x13, 0x44, 0x25, 0x3C, 0x00, 0x00, 0x00, + 0x04, 0x02, 0x00, 0x00, 0x13, 0x13, 0x44, 0x25, 0x3C, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB4, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, @@ -34,7 +34,7 @@ const uint8_t edram_load_color_7e3_cs[] = { 0x90, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xB4, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0xD4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x73, 0x74, 0x6F, 0x72, 0x65, 0x5F, @@ -43,19 +43,20 @@ const uint8_t edram_load_color_7e3_cs[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x01, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, - 0x5F, 0x62, 0x61, 0x73, 0x65, 0x5F, 0x64, 0x65, 0x70, 0x74, 0x68, 0x5F, - 0x70, 0x69, 0x74, 0x63, 0x68, 0x00, 0x64, 0x77, 0x6F, 0x72, 0x64, 0x00, + 0x5F, 0x62, 0x61, 0x73, 0x65, 0x5F, 0x73, 0x61, 0x6D, 0x70, 0x6C, 0x65, + 0x73, 0x5F, 0x32, 0x78, 0x5F, 0x64, 0x65, 0x70, 0x74, 0x68, 0x5F, 0x70, + 0x69, 0x74, 0x63, 0x68, 0x00, 0x64, 0x77, 0x6F, 0x72, 0x64, 0x00, 0xAB, 0x00, 0x00, 0x13, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCE, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD9, 0x01, 0x00, 0x00, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4C, 0x53, 0x4C, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6F, 0x6D, 0x70, 0x69, 0x6C, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2E, 0x31, 0x00, 0x49, 0x53, 0x47, 0x4E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x4F, 0x53, 0x47, 0x4E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x53, 0x48, 0x45, 0x58, 0x80, 0x09, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, - 0x60, 0x02, 0x00, 0x00, 0x6A, 0x08, 0x00, 0x01, 0x59, 0x00, 0x00, 0x07, + 0x53, 0x48, 0x45, 0x58, 0xE4, 0x09, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, + 0x79, 0x02, 0x00, 0x00, 0x6A, 0x08, 0x00, 0x01, 0x59, 0x00, 0x00, 0x07, 0x46, 0x8E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0x00, 0x00, 0x06, 0x46, 0x7E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -71,7 +72,7 @@ const uint8_t edram_load_color_7e3_cs[] = { 0x01, 0x00, 0x00, 0x0C, 0x62, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x08, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x00, 0x06, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x20, 0x02, 0x00, 0x01, 0x40, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, @@ -88,7 +89,7 @@ const uint8_t edram_load_color_7e3_cs[] = { 0x15, 0x00, 0x00, 0x01, 0x55, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, - 0x0C, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x08, 0x22, 0x00, 0x10, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x08, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x10, 0x02, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x06, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -103,93 +104,34 @@ const uint8_t edram_load_color_7e3_cs[] = { 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xA5, 0x00, 0x00, 0x08, 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x70, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, - 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x56, 0x01, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, - 0x14, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x05, 0xC2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x06, 0x04, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, - 0x72, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x96, 0x07, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, - 0xFF, 0x03, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x8A, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x0D, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xA5, 0x00, 0x00, 0x08, 0x32, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x16, 0x70, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x56, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x0A, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xC2, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x96, 0x07, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x0F, 0x72, 0x00, 0x10, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x07, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x05, 0x72, 0x00, 0x10, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x1E, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x46, 0x02, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0xE8, 0xFF, 0xFF, 0xFF, 0xE8, 0xFF, 0xFF, 0xFF, 0xE8, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x0C, 0x72, 0x00, 0x10, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x46, 0x02, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0B, 0x72, 0x00, 0x10, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x37, 0x00, 0x00, 0x09, 0x72, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x46, 0x02, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x8C, 0x00, 0x00, 0x11, 0x72, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x96, 0x07, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, - 0x72, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, - 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x37, 0x00, 0x00, 0x09, 0x72, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x46, 0x02, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x29, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x46, 0x02, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x17, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x3E, - 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, - 0x72, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1E, 0x00, 0x00, 0x07, 0x72, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x46, 0x02, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x0C, 0x72, 0x00, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x46, 0x02, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x05, 0x32, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0xE6, 0x0A, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x0A, 0x32, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x46, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0xAB, 0xAA, 0xAA, 0x3E, 0xAB, 0xAA, 0xAA, 0x3E, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x05, 0x72, 0x00, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x82, 0x00, 0x00, 0x05, 0x82, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, - 0x62, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x0A, 0xD2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x06, 0x09, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, - 0xFF, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x03, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x96, 0x07, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x0F, 0x72, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x05, + 0x96, 0x07, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x05, 0x72, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, @@ -206,69 +148,136 @@ const uint8_t edram_load_color_7e3_cs[] = { 0x06, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0x72, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x46, 0x02, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x96, 0x07, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x09, 0x72, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0A, - 0x72, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, + 0x72, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, - 0x29, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x72, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x0C, - 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x03, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x0C, + 0x72, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x05, + 0x32, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0xE6, 0x0A, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x0A, 0x32, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0xAB, 0xAA, 0xAA, 0x3E, 0xAB, 0xAA, 0xAA, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x05, - 0xD2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x08, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x05, 0x22, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x05, 0x32, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0xD6, 0x05, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, - 0xC2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x04, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x32, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x86, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x23, 0x00, 0x00, 0x0C, 0xF2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x29, 0x00, 0x00, 0x06, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x02, 0x00, 0x01, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x23, 0x00, 0x00, 0x0A, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x1A, 0x00, 0x02, 0x00, 0x1A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x0A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x08, 0xF2, 0xE0, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3E, 0x00, 0x00, 0x01, 0x53, 0x54, 0x41, 0x54, 0x94, 0x00, 0x00, 0x00, - 0x43, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, - 0x0D, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x72, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x05, 0x82, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x55, 0x00, 0x00, 0x0A, 0x62, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0xD2, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x06, 0x09, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x03, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, + 0x72, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, + 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8A, 0x00, 0x00, 0x0F, 0x72, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x87, 0x00, 0x00, 0x05, 0x72, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0A, + 0x72, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0xE8, 0xFF, 0xFF, 0xFF, + 0xE8, 0xFF, 0xFF, 0xFF, 0xE8, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x37, 0x00, 0x00, 0x0C, 0x72, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x0B, 0x72, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x09, + 0x72, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, + 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, + 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x09, + 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, + 0x72, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, + 0x17, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x3E, + 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x37, 0x00, 0x00, 0x0C, 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x86, 0x03, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x82, 0x00, 0x00, 0x05, 0xD2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x56, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x05, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x32, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xD6, 0x05, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x05, 0xC2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x06, 0x04, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, + 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x0C, 0xF2, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x06, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x02, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x0A, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x02, 0x00, 0x1A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x09, + 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x08, + 0xF2, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, 0x53, 0x54, 0x41, 0x54, + 0x94, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1B, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, }; diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/edram_load_color_7e3_cs.txt b/src/xenia/gpu/d3d12/shaders/dxbc/edram_load_color_7e3_cs.txt index 082e64674..13ab93579 100644 --- a/src/xenia/gpu/d3d12/shaders/dxbc/edram_load_color_7e3_cs.txt +++ b/src/xenia/gpu/d3d12/shaders/dxbc/edram_load_color_7e3_cs.txt @@ -8,7 +8,7 @@ // { // // uint4 xe_edram_load_store_constants;// Offset: 0 Size: 16 -// uint xe_edram_base_depth_pitch; // Offset: 16 Size: 4 +// uint xe_edram_base_samples_2x_depth_pitch;// Offset: 16 Size: 4 // // } // @@ -45,7 +45,7 @@ dcl_input vThreadID.xy dcl_temps 7 dcl_thread_group 40, 16, 1 ishl r0.x, vThreadIDInGroup.x, l(1) -and r0.yz, CB0[0][1].xxxx, l(0, 2048, 2047, 0) +and r0.yz, CB0[0][1].xxxx, l(0, 0x00008000, 2047, 0) if_nz r0.y ult r0.y, vThreadIDInGroup.x, l(20) uge r0.w, vThreadIDInGroup.x, l(20) @@ -53,13 +53,16 @@ if_nz r0.y iadd r0.y, r0.w, r0.y iadd r0.x, r0.y, r0.x endif -ushr r0.y, CB0[0][1].x, l(12) +ushr r0.y, CB0[0][1].x, l(16) imad r0.y, vThreadGroupID.y, r0.y, r0.z iadd r0.y, r0.y, vThreadGroupID.x imul null, r0.z, vThreadIDInGroup.y, l(320) imad r0.y, r0.y, l(5120), r0.z ishl r0.x, r0.x, l(2) iadd r0.x, r0.x, r0.y +ubfe r0.y, l(1), l(13), CB0[0][1].x +ishl r0.y, r0.y, l(1) +ishl r0.x, r0.x, r0.y ld_raw r0.xy, r0.x, T0[0].yxxx ushr r1.xyzw, r0.yyyx, l(10, 20, 30, 30) mov r0.zw, r1.xxxy @@ -111,4 +114,4 @@ imad r1.x, vThreadID.y, CB0[0][0].y, r1.x iadd r1.x, r1.x, CB0[0][0].x store_raw U0[0].xyzw, r1.x, r0.xyzw ret -// Approximately 67 instruction slots used +// Approximately 70 instruction slots used diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/edram_load_depth_float_cs.cso b/src/xenia/gpu/d3d12/shaders/dxbc/edram_load_depth_float_cs.cso index 2072608cb719cc98d0d03d23ce4bb0601de22a12..b0e0e19faf14e4e75ac009365868bfb9749f546b 100644 GIT binary patch delta 235 zcmew$@j%kjCBn&hV(XJdGiN^#3r>HS(xOuLh>?MT;QmrtDDY5OKBz+rj21%jEoN^Ph`xMD^AQU$Vn}ZH>!wFNi8VJh%d-2NzPzMDbFuT zVOTv`fJuSz=43-Af6gtO3=Dxl!*eHhG96%SnC!)Ticw&)D9dJpE(Qi}B?bYYl?)7w z4nPd0d4V)ng8`6)0FbyQ0|Wcy0u~WQ#>u@b;+qe!$gqn#0ma#&YM7z4{N#_^^#G0f BGj;#~ delta 164 zcmaDL`9Z?cCBn(Ma56*9WWIwR&X`l|HP{6~$zzU>IfH;PUfguNoYk>F) zHv>bEi>sT$L`!L=AB-ErtQZ-uOrFS?E0mI2P?8Z}kXe$P!H`m(UzEZyS%yi0@!Vuv zCV$QVP6mcRpn)Nir!pO2 z42%vy45fL2G*^QGkc0q`xF!Pw`{V)^5k|(zy)5FJ53p=tWR#y=$R-RltCg)D0Mqm{ A$^ZZW delta 168 zcmeyu*TQG%65-@rdF}DaJ6D*_y;6C#Z9+lVHbw>p1{QV(238<#0>m*)3=BCyTm!@z zYzz!RF0O706D_5gelTtfvtnetGI=6nu24#9K}kk@L1syE2181Deo+d;WEmy}#&eTx znf$q)Ff%X&0uB7hFnJo&enyVTVa%r(c_u5eY~F0ax`L5WX7WQeVQxO4Wk7owfDV|f O$Rs`S9@}IE_7DImQ!Qfv diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/edram_load_depth_unorm_cs.h b/src/xenia/gpu/d3d12/shaders/dxbc/edram_load_depth_unorm_cs.h index f71f1cfa0..1bd57f15c 100644 --- a/src/xenia/gpu/d3d12/shaders/dxbc/edram_load_depth_unorm_cs.h +++ b/src/xenia/gpu/d3d12/shaders/dxbc/edram_load_depth_unorm_cs.h @@ -1,14 +1,14 @@ // generated from `xb buildhlsl` // source: edram_load_depth_unorm.cs.hlsl const uint8_t edram_load_depth_unorm_cs[] = { - 0x44, 0x58, 0x42, 0x43, 0x79, 0xD6, 0xE3, 0xA9, 0xDC, 0xD4, 0x02, 0xCE, - 0xEA, 0x24, 0xEA, 0xB6, 0x90, 0x70, 0x56, 0xB6, 0x01, 0x00, 0x00, 0x00, - 0x04, 0x07, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, - 0x5C, 0x02, 0x00, 0x00, 0x6C, 0x02, 0x00, 0x00, 0x7C, 0x02, 0x00, 0x00, - 0x68, 0x06, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0x20, 0x02, 0x00, 0x00, + 0x44, 0x58, 0x42, 0x43, 0x17, 0xBE, 0xD1, 0xF2, 0x71, 0xB1, 0x64, 0xCA, + 0xB5, 0xDF, 0x70, 0x41, 0x8F, 0xB7, 0xA5, 0x38, 0x01, 0x00, 0x00, 0x00, + 0x74, 0x07, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x68, 0x02, 0x00, 0x00, 0x78, 0x02, 0x00, 0x00, 0x88, 0x02, 0x00, 0x00, + 0xD8, 0x06, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0x2C, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01, 0x05, 0x53, 0x43, 0x00, 0x05, 0x00, 0x00, - 0xF8, 0x01, 0x00, 0x00, 0x13, 0x13, 0x44, 0x25, 0x3C, 0x00, 0x00, 0x00, + 0x04, 0x02, 0x00, 0x00, 0x13, 0x13, 0x44, 0x25, 0x3C, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB4, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, @@ -34,7 +34,7 @@ const uint8_t edram_load_depth_unorm_cs[] = { 0x90, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xB4, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0xD4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x73, 0x74, 0x6F, 0x72, 0x65, 0x5F, @@ -43,19 +43,20 @@ const uint8_t edram_load_depth_unorm_cs[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x01, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, - 0x5F, 0x62, 0x61, 0x73, 0x65, 0x5F, 0x64, 0x65, 0x70, 0x74, 0x68, 0x5F, - 0x70, 0x69, 0x74, 0x63, 0x68, 0x00, 0x64, 0x77, 0x6F, 0x72, 0x64, 0x00, + 0x5F, 0x62, 0x61, 0x73, 0x65, 0x5F, 0x73, 0x61, 0x6D, 0x70, 0x6C, 0x65, + 0x73, 0x5F, 0x32, 0x78, 0x5F, 0x64, 0x65, 0x70, 0x74, 0x68, 0x5F, 0x70, + 0x69, 0x74, 0x63, 0x68, 0x00, 0x64, 0x77, 0x6F, 0x72, 0x64, 0x00, 0xAB, 0x00, 0x00, 0x13, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCE, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD9, 0x01, 0x00, 0x00, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4C, 0x53, 0x4C, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6F, 0x6D, 0x70, 0x69, 0x6C, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2E, 0x31, 0x00, 0x49, 0x53, 0x47, 0x4E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x4F, 0x53, 0x47, 0x4E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x53, 0x48, 0x45, 0x58, 0xE4, 0x03, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, - 0xF9, 0x00, 0x00, 0x00, 0x6A, 0x08, 0x00, 0x01, 0x59, 0x00, 0x00, 0x07, + 0x53, 0x48, 0x45, 0x58, 0x48, 0x04, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, + 0x12, 0x01, 0x00, 0x00, 0x6A, 0x08, 0x00, 0x01, 0x59, 0x00, 0x00, 0x07, 0x46, 0x8E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0x00, 0x00, 0x06, 0x46, 0x7E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -71,7 +72,7 @@ const uint8_t edram_load_depth_unorm_cs[] = { 0x01, 0x00, 0x00, 0x0C, 0x62, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x08, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x00, 0x06, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x20, 0x02, 0x00, 0x01, 0x40, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, @@ -88,7 +89,7 @@ const uint8_t edram_load_depth_unorm_cs[] = { 0x15, 0x00, 0x00, 0x01, 0x55, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, - 0x0C, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x08, 0x22, 0x00, 0x10, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x08, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x10, 0x02, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x06, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -103,52 +104,60 @@ const uint8_t edram_load_depth_unorm_cs[] = { 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xA5, 0x00, 0x00, 0x08, 0xF2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x7E, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x09, - 0x32, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x02, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x0A, - 0x32, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x56, 0x05, 0x02, 0x00, - 0xD6, 0x85, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x1E, 0x00, 0x00, 0x09, 0x32, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x46, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x86, 0x80, 0x30, 0x00, + 0x8A, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x0D, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xA5, 0x00, 0x00, 0x08, 0xF2, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x7E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x09, 0x32, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x02, 0x00, 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x0A, 0x32, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x56, 0x05, 0x02, 0x00, 0xD6, 0x85, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x09, 0x32, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x86, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x08, + 0xF2, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x14, + 0xE2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x56, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x08, 0xF2, 0xE0, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, - 0xFF, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x14, 0xE2, 0x00, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x56, 0x0E, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x32, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xE6, 0x0A, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x46, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xA6, 0x00, 0x00, 0x08, 0x12, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, + 0x53, 0x54, 0x41, 0x54, 0x94, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1E, 0x00, 0x00, 0x07, 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xE6, 0x0A, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x08, - 0x12, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, 0x53, 0x54, 0x41, 0x54, - 0x94, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0E, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, }; diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/edram_load_depth_unorm_cs.txt b/src/xenia/gpu/d3d12/shaders/dxbc/edram_load_depth_unorm_cs.txt index 59edecfa7..20e056c1e 100644 --- a/src/xenia/gpu/d3d12/shaders/dxbc/edram_load_depth_unorm_cs.txt +++ b/src/xenia/gpu/d3d12/shaders/dxbc/edram_load_depth_unorm_cs.txt @@ -8,7 +8,7 @@ // { // // uint4 xe_edram_load_store_constants;// Offset: 0 Size: 16 -// uint xe_edram_base_depth_pitch; // Offset: 16 Size: 4 +// uint xe_edram_base_samples_2x_depth_pitch;// Offset: 16 Size: 4 // // } // @@ -45,7 +45,7 @@ dcl_input vThreadID.xy dcl_temps 3 dcl_thread_group 20, 16, 1 ishl r0.x, vThreadIDInGroup.x, l(2) -and r0.yz, CB0[0][1].xxxx, l(0, 2048, 2047, 0) +and r0.yz, CB0[0][1].xxxx, l(0, 0x00008000, 2047, 0) if_nz r0.y ult r0.y, vThreadIDInGroup.x, l(10) uge r0.w, vThreadIDInGroup.x, l(10) @@ -53,13 +53,16 @@ if_nz r0.y iadd r0.y, r0.w, r0.y iadd r0.x, r0.y, r0.x endif -ushr r0.y, CB0[0][1].x, l(12) +ushr r0.y, CB0[0][1].x, l(16) imad r0.y, vThreadGroupID.y, r0.y, r0.z iadd r0.y, r0.y, vThreadGroupID.x imul null, r0.z, vThreadIDInGroup.y, l(320) imad r0.y, r0.y, l(5120), r0.z ishl r0.x, r0.x, l(2) iadd r0.x, r0.x, r0.y +ubfe r0.y, l(1), l(13), CB0[0][1].x +ishl r0.y, r0.y, l(1) +ishl r0.x, r0.x, r0.y ld_raw r0.xyzw, r0.x, T0[0].xyzw ishl r1.xy, vThreadID.xxxx, l(4, 2, 0, 0) imad r1.xy, vThreadID.yyyy, CB0[0][0].ywyy, r1.xyxx @@ -72,4 +75,4 @@ iadd r0.xy, r2.zwzz, r2.xyxx iadd r0.x, r0.y, r0.x store_raw U0[0].x, r1.y, r0.x ret -// Approximately 28 instruction slots used +// Approximately 31 instruction slots used diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/edram_store_color_32bpp_cs.cso b/src/xenia/gpu/d3d12/shaders/dxbc/edram_store_color_32bpp_cs.cso index 67eed822a9bfaf5788c4eca5f1d9060d0ebdb2e6..95ef561ea0fdaba29eabce9bad81add1e0318912 100644 GIT binary patch delta 234 zcmeC-`NL!B65-_Bby7djY{r8lH(n<#{&%ncA0q<;Lk$}P11pd=0pbiM28IeC?f~Kk zK*1mvS2vxBmeNctOdG?j7#SZ-p2(OhSDctzkds;*Z&VSVl3Gxb5nqs5lAOViQl4Lw z!mxU>0Fwga&B=yL{+t2K3=Dxl!>?@aWO89-Y?yqG`4pqTIfH;PUfguNoYk;@_ zC>Z48>ZUN!Qkv-p=WW*O_mLz8|q?G3ur7%pEVNzf`H`$iS zpYsh+Yar0T-J7Q}xiB(vOuof@ijimXQkKn=_ps`SiUDl_ssICKD9tnZFKayjfto3E diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/edram_store_color_32bpp_cs.h b/src/xenia/gpu/d3d12/shaders/dxbc/edram_store_color_32bpp_cs.h index f14a3f2bb..ab425eee7 100644 --- a/src/xenia/gpu/d3d12/shaders/dxbc/edram_store_color_32bpp_cs.h +++ b/src/xenia/gpu/d3d12/shaders/dxbc/edram_store_color_32bpp_cs.h @@ -1,14 +1,14 @@ // generated from `xb buildhlsl` // source: edram_store_color_32bpp.cs.hlsl const uint8_t edram_store_color_32bpp_cs[] = { - 0x44, 0x58, 0x42, 0x43, 0xF1, 0x88, 0xD8, 0xB9, 0x3D, 0x78, 0xA2, 0x85, - 0x08, 0xDD, 0xC2, 0x3B, 0xB4, 0x3E, 0x04, 0xC0, 0x01, 0x00, 0x00, 0x00, - 0x0C, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, - 0x5C, 0x02, 0x00, 0x00, 0x6C, 0x02, 0x00, 0x00, 0x7C, 0x02, 0x00, 0x00, - 0x70, 0x05, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0x20, 0x02, 0x00, 0x00, + 0x44, 0x58, 0x42, 0x43, 0x8A, 0xC9, 0x2F, 0x51, 0x36, 0x98, 0xE0, 0xC4, + 0xD8, 0xEB, 0x62, 0xA3, 0xFE, 0xDE, 0x8F, 0xFE, 0x01, 0x00, 0x00, 0x00, + 0x7C, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x68, 0x02, 0x00, 0x00, 0x78, 0x02, 0x00, 0x00, 0x88, 0x02, 0x00, 0x00, + 0xE0, 0x05, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0x2C, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01, 0x05, 0x53, 0x43, 0x00, 0x05, 0x00, 0x00, - 0xF8, 0x01, 0x00, 0x00, 0x13, 0x13, 0x44, 0x25, 0x3C, 0x00, 0x00, 0x00, + 0x04, 0x02, 0x00, 0x00, 0x13, 0x13, 0x44, 0x25, 0x3C, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB4, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, @@ -34,7 +34,7 @@ const uint8_t edram_store_color_32bpp_cs[] = { 0x90, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xB4, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0xD4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x73, 0x74, 0x6F, 0x72, 0x65, 0x5F, @@ -43,19 +43,20 @@ const uint8_t edram_store_color_32bpp_cs[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x01, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, - 0x5F, 0x62, 0x61, 0x73, 0x65, 0x5F, 0x64, 0x65, 0x70, 0x74, 0x68, 0x5F, - 0x70, 0x69, 0x74, 0x63, 0x68, 0x00, 0x64, 0x77, 0x6F, 0x72, 0x64, 0x00, + 0x5F, 0x62, 0x61, 0x73, 0x65, 0x5F, 0x73, 0x61, 0x6D, 0x70, 0x6C, 0x65, + 0x73, 0x5F, 0x32, 0x78, 0x5F, 0x64, 0x65, 0x70, 0x74, 0x68, 0x5F, 0x70, + 0x69, 0x74, 0x63, 0x68, 0x00, 0x64, 0x77, 0x6F, 0x72, 0x64, 0x00, 0xAB, 0x00, 0x00, 0x13, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCE, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD9, 0x01, 0x00, 0x00, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4C, 0x53, 0x4C, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6F, 0x6D, 0x70, 0x69, 0x6C, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2E, 0x31, 0x00, 0x49, 0x53, 0x47, 0x4E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x4F, 0x53, 0x47, 0x4E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x53, 0x48, 0x45, 0x58, 0xEC, 0x02, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, - 0xBB, 0x00, 0x00, 0x00, 0x6A, 0x08, 0x00, 0x01, 0x59, 0x00, 0x00, 0x07, + 0x53, 0x48, 0x45, 0x58, 0x50, 0x03, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, + 0xD4, 0x00, 0x00, 0x00, 0x6A, 0x08, 0x00, 0x01, 0x59, 0x00, 0x00, 0x07, 0x46, 0x8E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0x00, 0x00, 0x06, 0x46, 0x7E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -82,7 +83,7 @@ const uint8_t edram_store_color_32bpp_cs[] = { 0x01, 0x00, 0x00, 0x0C, 0x62, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x08, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x00, 0x06, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x20, 0x02, 0x00, 0x01, 0x40, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, @@ -99,7 +100,7 @@ const uint8_t edram_store_color_32bpp_cs[] = { 0x15, 0x00, 0x00, 0x01, 0x55, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, - 0x0C, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x08, 0x22, 0x00, 0x10, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x08, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x10, 0x02, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x06, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, @@ -114,20 +115,29 @@ const uint8_t edram_store_color_32bpp_cs[] = { 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0xA6, 0x00, 0x00, 0x08, 0xF2, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, - 0x53, 0x54, 0x41, 0x54, 0x94, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8A, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x0D, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, + 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x08, 0xF2, 0xE0, 0x21, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3E, 0x00, 0x00, 0x01, 0x53, 0x54, 0x41, 0x54, 0x94, 0x00, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, }; diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/edram_store_color_32bpp_cs.txt b/src/xenia/gpu/d3d12/shaders/dxbc/edram_store_color_32bpp_cs.txt index c86ae5714..299274826 100644 --- a/src/xenia/gpu/d3d12/shaders/dxbc/edram_store_color_32bpp_cs.txt +++ b/src/xenia/gpu/d3d12/shaders/dxbc/edram_store_color_32bpp_cs.txt @@ -8,7 +8,7 @@ // { // // uint4 xe_edram_load_store_constants;// Offset: 0 Size: 16 -// uint xe_edram_base_depth_pitch; // Offset: 16 Size: 4 +// uint xe_edram_base_samples_2x_depth_pitch;// Offset: 16 Size: 4 // // } // @@ -49,7 +49,7 @@ imad r0.x, vThreadID.y, CB0[0][0].y, r0.x iadd r0.x, r0.x, CB0[0][0].x ld_raw r0.xyzw, r0.x, T0[0].xyzw ishl r1.x, vThreadIDInGroup.x, l(2) -and r1.yz, CB0[0][1].xxxx, l(0, 2048, 2047, 0) +and r1.yz, CB0[0][1].xxxx, l(0, 0x00008000, 2047, 0) if_nz r1.y ult r1.y, vThreadIDInGroup.x, l(10) uge r1.w, vThreadIDInGroup.x, l(10) @@ -57,13 +57,16 @@ if_nz r1.y iadd r1.y, r1.w, r1.y iadd r1.x, r1.y, r1.x endif -ushr r1.y, CB0[0][1].x, l(12) +ushr r1.y, CB0[0][1].x, l(16) imad r1.y, vThreadGroupID.y, r1.y, r1.z iadd r1.y, r1.y, vThreadGroupID.x imul null, r1.z, vThreadIDInGroup.y, l(320) imad r1.y, r1.y, l(5120), r1.z ishl r1.x, r1.x, l(2) iadd r1.x, r1.x, r1.y +ubfe r1.y, l(1), l(13), CB0[0][1].x +ishl r1.y, r1.y, l(1) +ishl r1.x, r1.x, r1.y store_raw U0[0].xyzw, r1.x, r0.xyzw ret -// Approximately 22 instruction slots used +// Approximately 25 instruction slots used diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/edram_store_color_64bpp_cs.cso b/src/xenia/gpu/d3d12/shaders/dxbc/edram_store_color_64bpp_cs.cso index 103287a27364b5dad2948ea1b19375dd0b29ab85..348400afc48a1bc55ec2db4575408b80386f04ba 100644 GIT binary patch delta 264 zcmaFBb%EQ`CBn(McjfZ`>46((@J(8kCZ8?4iIIVU;Q}iI0}wHo0C5Hr149K6cL1>o zP%y~F)lFxjr8E-@)5b6>M#cw|Co<;B6({BvIB*h2Fy^JXYxaqdH|;1FA4wv delta 158 zcmcb>{ea8TCBn&BE$GXf+uq6UtGL!VhRR*r%E-XLkig2o07MKXKpexwz>ovPH9&lX zg@GZ+#nnw=qNOy`55|pQR*Z~SCQoF{6-r4hD9MN~$Sg_DU`Q#?FG^vUEW@P0cy6*S tlRu{eP-`I2zzLhDGI=vH@=Sine0s6~tBxo?(0rgA7%)R=uE~L{^#J(8B^Uqz diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/edram_store_color_64bpp_cs.h b/src/xenia/gpu/d3d12/shaders/dxbc/edram_store_color_64bpp_cs.h index 88a998db8..d8520b9b4 100644 --- a/src/xenia/gpu/d3d12/shaders/dxbc/edram_store_color_64bpp_cs.h +++ b/src/xenia/gpu/d3d12/shaders/dxbc/edram_store_color_64bpp_cs.h @@ -1,14 +1,14 @@ // generated from `xb buildhlsl` // source: edram_store_color_64bpp.cs.hlsl const uint8_t edram_store_color_64bpp_cs[] = { - 0x44, 0x58, 0x42, 0x43, 0x26, 0x52, 0xF4, 0x9C, 0xDB, 0x4B, 0x63, 0x47, - 0xAA, 0x0A, 0xAE, 0x41, 0x55, 0x1E, 0xD6, 0xB5, 0x01, 0x00, 0x00, 0x00, - 0x60, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, - 0x5C, 0x02, 0x00, 0x00, 0x6C, 0x02, 0x00, 0x00, 0x7C, 0x02, 0x00, 0x00, - 0xC4, 0x04, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0x20, 0x02, 0x00, 0x00, + 0x44, 0x58, 0x42, 0x43, 0x8D, 0xA9, 0xA7, 0xFF, 0x67, 0x51, 0xB1, 0x98, + 0x0E, 0x92, 0xAA, 0x66, 0x1F, 0x6B, 0x1D, 0xB2, 0x01, 0x00, 0x00, 0x00, + 0xD0, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x68, 0x02, 0x00, 0x00, 0x78, 0x02, 0x00, 0x00, 0x88, 0x02, 0x00, 0x00, + 0x34, 0x05, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0x2C, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01, 0x05, 0x53, 0x43, 0x00, 0x05, 0x00, 0x00, - 0xF8, 0x01, 0x00, 0x00, 0x13, 0x13, 0x44, 0x25, 0x3C, 0x00, 0x00, 0x00, + 0x04, 0x02, 0x00, 0x00, 0x13, 0x13, 0x44, 0x25, 0x3C, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB4, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, @@ -34,7 +34,7 @@ const uint8_t edram_store_color_64bpp_cs[] = { 0x90, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xB4, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0xD4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x73, 0x74, 0x6F, 0x72, 0x65, 0x5F, @@ -43,19 +43,20 @@ const uint8_t edram_store_color_64bpp_cs[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x01, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, - 0x5F, 0x62, 0x61, 0x73, 0x65, 0x5F, 0x64, 0x65, 0x70, 0x74, 0x68, 0x5F, - 0x70, 0x69, 0x74, 0x63, 0x68, 0x00, 0x64, 0x77, 0x6F, 0x72, 0x64, 0x00, + 0x5F, 0x62, 0x61, 0x73, 0x65, 0x5F, 0x73, 0x61, 0x6D, 0x70, 0x6C, 0x65, + 0x73, 0x5F, 0x32, 0x78, 0x5F, 0x64, 0x65, 0x70, 0x74, 0x68, 0x5F, 0x70, + 0x69, 0x74, 0x63, 0x68, 0x00, 0x64, 0x77, 0x6F, 0x72, 0x64, 0x00, 0xAB, 0x00, 0x00, 0x13, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCE, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD9, 0x01, 0x00, 0x00, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4C, 0x53, 0x4C, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6F, 0x6D, 0x70, 0x69, 0x6C, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2E, 0x31, 0x00, 0x49, 0x53, 0x47, 0x4E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x4F, 0x53, 0x47, 0x4E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x53, 0x48, 0x45, 0x58, 0x40, 0x02, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, - 0x90, 0x00, 0x00, 0x00, 0x6A, 0x08, 0x00, 0x01, 0x59, 0x00, 0x00, 0x07, + 0x53, 0x48, 0x45, 0x58, 0xA4, 0x02, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, + 0xA9, 0x00, 0x00, 0x00, 0x6A, 0x08, 0x00, 0x01, 0x59, 0x00, 0x00, 0x07, 0x46, 0x8E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0x00, 0x00, 0x06, 0x46, 0x7E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -82,7 +83,7 @@ const uint8_t edram_store_color_64bpp_cs[] = { 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0x55, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x08, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x10, 0x02, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x06, @@ -99,21 +100,29 @@ const uint8_t edram_store_color_64bpp_cs[] = { 0x01, 0x00, 0x00, 0x00, 0x0A, 0x20, 0x02, 0x00, 0x01, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x08, - 0xF2, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, 0x53, 0x54, 0x41, 0x54, - 0x94, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x0B, + 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, + 0x0A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xA6, 0x00, 0x00, 0x08, 0xF2, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, + 0x53, 0x54, 0x41, 0x54, 0x94, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, }; diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/edram_store_color_64bpp_cs.txt b/src/xenia/gpu/d3d12/shaders/dxbc/edram_store_color_64bpp_cs.txt index cddc36cfc..0cc49a742 100644 --- a/src/xenia/gpu/d3d12/shaders/dxbc/edram_store_color_64bpp_cs.txt +++ b/src/xenia/gpu/d3d12/shaders/dxbc/edram_store_color_64bpp_cs.txt @@ -8,7 +8,7 @@ // { // // uint4 xe_edram_load_store_constants;// Offset: 0 Size: 16 -// uint xe_edram_base_depth_pitch; // Offset: 16 Size: 4 +// uint xe_edram_base_samples_2x_depth_pitch;// Offset: 16 Size: 4 // // } // @@ -49,7 +49,7 @@ imad r0.x, vThreadID.y, CB0[0][0].y, r0.x iadd r0.x, r0.x, CB0[0][0].x ld_raw r0.xyzw, r0.x, T0[0].xyzw and r1.x, CB0[0][1].x, l(2047) -ushr r1.y, CB0[0][1].x, l(12) +ushr r1.y, CB0[0][1].x, l(16) imad r1.x, vThreadGroupID.y, r1.y, r1.x ishl r1.y, vThreadGroupID.x, l(1) iadd r1.x, r1.y, r1.x @@ -57,6 +57,9 @@ imul null, r1.y, vThreadIDInGroup.y, l(640) imad r1.x, r1.x, l(5120), r1.y ishl r1.y, vThreadIDInGroup.x, l(4) iadd r1.x, r1.y, r1.x +ubfe r1.y, l(1), l(13), CB0[0][1].x +ishl r1.y, r1.y, l(1) +ishl r1.x, r1.x, r1.y store_raw U0[0].xyzw, r1.x, r0.xyzw ret -// Approximately 15 instruction slots used +// Approximately 18 instruction slots used diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/edram_store_color_7e3_cs.cso b/src/xenia/gpu/d3d12/shaders/dxbc/edram_store_color_7e3_cs.cso index 911198073f5311f5c8b8cfae5b3b737a44f74f58..c399bacfc4f411445fcce83135c888f6d2ddffad 100644 GIT binary patch delta 236 zcmca2c|^+6CBn&BCMRx+rK|7fkmm=sDSuN0?D&awtzd0J^#{lmGw# delta 167 zcmX>ibw$$BCBn&hIp^UVw=CB?4=1#@dT1RsU}RumxWdE0zzU>IfH;PUfguNoYk=4S zC?4eE>ZUN!Qkv-p=WW*O_mLz8|q?G3ur7%pEVNzf`H`$iS zpK}W*14AItz}(GKnSQV{a!l^yy2r>fIhT9$G(*_ZCBn&B^55ery2WqaeamfXkvn%%jFEwXVFo7y11pd=0pbiM28IeC?f~LH z91ILWF0O7m6D_5gSeQ13Surv`m^_g&SFSiQw;(6AINqotJ|(rFBqP2cvm`l#A*DRO zD1~A5WC11x#+#E3nfy6(*cccBfriiC+{vWE!q_l*9os2JfytHZnu8 zF)%s+F_h+=oX9RLsmZ{=4wIEaRyFw}yZB@kjsj5~pn8z2L4X-TF$hmy$x#mg*}OAU delta 164 zcmbOsyh6y*CBn(M``@Zt#}BFYeVoYS`1_9VTt)^41`SRI238<#0>m*)3=BCyTm!^C z91ILWF0O706D_5gelTtfvtnetGI=6nu24#9K}kk@L1syE2181Deo+d;WEmy}#&eTx znfy69*cccBfd)2hp30=c!pJds7uzXDp2@B3n8+5)l-1ehTdgWzOI&UygY CsVIQ} diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/edram_store_depth_float_cs.h b/src/xenia/gpu/d3d12/shaders/dxbc/edram_store_depth_float_cs.h index fe6aa309e..376a676de 100644 --- a/src/xenia/gpu/d3d12/shaders/dxbc/edram_store_depth_float_cs.h +++ b/src/xenia/gpu/d3d12/shaders/dxbc/edram_store_depth_float_cs.h @@ -1,14 +1,14 @@ // generated from `xb buildhlsl` // source: edram_store_depth_float.cs.hlsl const uint8_t edram_store_depth_float_cs[] = { - 0x44, 0x58, 0x42, 0x43, 0x8B, 0xFE, 0xAA, 0xDA, 0xC7, 0xC2, 0x25, 0x8E, - 0xF1, 0x91, 0x0C, 0x41, 0xFB, 0xDC, 0x13, 0x9D, 0x01, 0x00, 0x00, 0x00, - 0x28, 0x09, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, - 0x5C, 0x02, 0x00, 0x00, 0x6C, 0x02, 0x00, 0x00, 0x7C, 0x02, 0x00, 0x00, - 0x8C, 0x08, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0x20, 0x02, 0x00, 0x00, + 0x44, 0x58, 0x42, 0x43, 0x19, 0xFE, 0xE3, 0x94, 0x2D, 0x73, 0xEC, 0xEE, + 0xF6, 0x6D, 0x82, 0x84, 0x1E, 0xCE, 0xC9, 0x16, 0x01, 0x00, 0x00, 0x00, + 0x98, 0x09, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x68, 0x02, 0x00, 0x00, 0x78, 0x02, 0x00, 0x00, 0x88, 0x02, 0x00, 0x00, + 0xFC, 0x08, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0x2C, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01, 0x05, 0x53, 0x43, 0x00, 0x05, 0x00, 0x00, - 0xF8, 0x01, 0x00, 0x00, 0x13, 0x13, 0x44, 0x25, 0x3C, 0x00, 0x00, 0x00, + 0x04, 0x02, 0x00, 0x00, 0x13, 0x13, 0x44, 0x25, 0x3C, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB4, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, @@ -34,7 +34,7 @@ const uint8_t edram_store_depth_float_cs[] = { 0x90, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xB4, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0xD4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x73, 0x74, 0x6F, 0x72, 0x65, 0x5F, @@ -43,19 +43,20 @@ const uint8_t edram_store_depth_float_cs[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x01, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, - 0x5F, 0x62, 0x61, 0x73, 0x65, 0x5F, 0x64, 0x65, 0x70, 0x74, 0x68, 0x5F, - 0x70, 0x69, 0x74, 0x63, 0x68, 0x00, 0x64, 0x77, 0x6F, 0x72, 0x64, 0x00, + 0x5F, 0x62, 0x61, 0x73, 0x65, 0x5F, 0x73, 0x61, 0x6D, 0x70, 0x6C, 0x65, + 0x73, 0x5F, 0x32, 0x78, 0x5F, 0x64, 0x65, 0x70, 0x74, 0x68, 0x5F, 0x70, + 0x69, 0x74, 0x63, 0x68, 0x00, 0x64, 0x77, 0x6F, 0x72, 0x64, 0x00, 0xAB, 0x00, 0x00, 0x13, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCE, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD9, 0x01, 0x00, 0x00, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4C, 0x53, 0x4C, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6F, 0x6D, 0x70, 0x69, 0x6C, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2E, 0x31, 0x00, 0x49, 0x53, 0x47, 0x4E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x4F, 0x53, 0x47, 0x4E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x53, 0x48, 0x45, 0x58, 0x08, 0x06, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, - 0x82, 0x01, 0x00, 0x00, 0x6A, 0x08, 0x00, 0x01, 0x59, 0x00, 0x00, 0x07, + 0x53, 0x48, 0x45, 0x58, 0x6C, 0x06, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, + 0x9B, 0x01, 0x00, 0x00, 0x6A, 0x08, 0x00, 0x01, 0x59, 0x00, 0x00, 0x07, 0x46, 0x8E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0x00, 0x00, 0x06, 0x46, 0x7E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -143,7 +144,7 @@ const uint8_t edram_store_depth_float_cs[] = { 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0C, 0x62, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, 0x1A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x00, 0x06, 0x22, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x20, 0x02, 0x00, 0x01, 0x40, 0x00, 0x00, @@ -160,7 +161,7 @@ const uint8_t edram_store_depth_float_cs[] = { 0x02, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x55, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x40, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x08, + 0x01, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x08, 0x22, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1A, 0x10, 0x02, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x06, 0x22, 0x00, 0x10, 0x00, @@ -175,26 +176,34 @@ const uint8_t edram_store_depth_float_cs[] = { 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x08, 0xF2, 0xE0, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1E, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, - 0x00, 0x00, 0xA0, 0x00, 0xA6, 0x00, 0x00, 0x08, 0xF2, 0xE0, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x3E, 0x00, 0x00, 0x01, 0x53, 0x54, 0x41, 0x54, 0x94, 0x00, 0x00, 0x00, - 0x29, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, - 0x0D, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x08, + 0xF2, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00, 0xA6, 0x00, 0x00, 0x08, + 0xF2, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, 0x53, 0x54, 0x41, 0x54, + 0x94, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x13, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, }; diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/edram_store_depth_float_cs.txt b/src/xenia/gpu/d3d12/shaders/dxbc/edram_store_depth_float_cs.txt index e2504cd7c..5d19ef38c 100644 --- a/src/xenia/gpu/d3d12/shaders/dxbc/edram_store_depth_float_cs.txt +++ b/src/xenia/gpu/d3d12/shaders/dxbc/edram_store_depth_float_cs.txt @@ -8,7 +8,7 @@ // { // // uint4 xe_edram_load_store_constants;// Offset: 0 Size: 16 -// uint xe_edram_base_depth_pitch; // Offset: 16 Size: 4 +// uint xe_edram_base_samples_2x_depth_pitch;// Offset: 16 Size: 4 // // } // @@ -66,7 +66,7 @@ ld_raw r0.x, r0.y, T0[0].xxxx ushr r0.yzw, r0.xxxx, l(0, 8, 16, 24) bfi r0.xyzw, l(24, 24, 24, 24), l(8, 8, 8, 8), r2.xyzw, r0.xyzw ishl r2.x, vThreadIDInGroup.x, l(2) -and r2.yz, CB0[0][1].xxxx, l(0, 2048, 2047, 0) +and r2.yz, CB0[0][1].xxxx, l(0, 0x00008000, 2047, 0) if_nz r2.y ult r2.y, vThreadIDInGroup.x, l(10) uge r2.w, vThreadIDInGroup.x, l(10) @@ -74,15 +74,18 @@ if_nz r2.y iadd r2.y, r2.w, r2.y iadd r2.x, r2.y, r2.x endif -ushr r2.y, CB0[0][1].x, l(12) +ushr r2.y, CB0[0][1].x, l(16) imad r2.y, vThreadGroupID.y, r2.y, r2.z iadd r2.y, r2.y, vThreadGroupID.x imul null, r2.z, vThreadIDInGroup.y, l(320) imad r2.y, r2.y, l(5120), r2.z ishl r2.x, r2.x, l(2) iadd r2.x, r2.x, r2.y +ubfe r2.y, l(1), l(13), CB0[0][1].x +ishl r2.y, r2.y, l(1) +ishl r2.x, r2.x, r2.y store_raw U0[0].xyzw, r2.x, r0.xyzw iadd r0.x, r2.x, l(0x00a00000) store_raw U0[0].xyzw, r0.x, r1.xyzw ret -// Approximately 41 instruction slots used +// Approximately 44 instruction slots used diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/edram_store_depth_unorm_cs.cso b/src/xenia/gpu/d3d12/shaders/dxbc/edram_store_depth_unorm_cs.cso index f7c9691bea9d4f5fa997fc63701e80f4cff9bb37..4b04f49dbb1b14bac29c06857c32c834465493e3 100644 GIT binary patch delta 236 zcmZ3&JB82ECBn&>Y0l|i3=9=O+ySE5 z7#Me8vbi@C(|89#)iphETTV8{XD8X)EX ziU+y4x+zSwlxF(DxG~I%k@3ppiHx~IDX9e|8Sw>~CCM2KDdqV^DGZZkm=qY#O}1t7 z=WJnSUn_;B-7raO#`9FvP!PBHRKwq@NsIfPAzQF3x4n=m&I&@Q0y3_$xQD>6w> I-o+LL03UuQ$^ZZW diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/edram_store_depth_unorm_cs.h b/src/xenia/gpu/d3d12/shaders/dxbc/edram_store_depth_unorm_cs.h index fdb742bb8..8c2b289c3 100644 --- a/src/xenia/gpu/d3d12/shaders/dxbc/edram_store_depth_unorm_cs.h +++ b/src/xenia/gpu/d3d12/shaders/dxbc/edram_store_depth_unorm_cs.h @@ -1,14 +1,14 @@ // generated from `xb buildhlsl` // source: edram_store_depth_unorm.cs.hlsl const uint8_t edram_store_depth_unorm_cs[] = { - 0x44, 0x58, 0x42, 0x43, 0x27, 0x44, 0x5F, 0x7B, 0x01, 0xA1, 0xF7, 0xB0, - 0x2B, 0x84, 0x01, 0x22, 0x23, 0xF9, 0x5D, 0x63, 0x01, 0x00, 0x00, 0x00, - 0xA4, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, - 0x5C, 0x02, 0x00, 0x00, 0x6C, 0x02, 0x00, 0x00, 0x7C, 0x02, 0x00, 0x00, - 0x08, 0x06, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0x20, 0x02, 0x00, 0x00, + 0x44, 0x58, 0x42, 0x43, 0x02, 0xA2, 0xB6, 0xDB, 0xB3, 0x61, 0x2F, 0x07, + 0xA5, 0xEF, 0x96, 0xC1, 0xCF, 0x44, 0x77, 0xEF, 0x01, 0x00, 0x00, 0x00, + 0x14, 0x07, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x68, 0x02, 0x00, 0x00, 0x78, 0x02, 0x00, 0x00, 0x88, 0x02, 0x00, 0x00, + 0x78, 0x06, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0x2C, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01, 0x05, 0x53, 0x43, 0x00, 0x05, 0x00, 0x00, - 0xF8, 0x01, 0x00, 0x00, 0x13, 0x13, 0x44, 0x25, 0x3C, 0x00, 0x00, 0x00, + 0x04, 0x02, 0x00, 0x00, 0x13, 0x13, 0x44, 0x25, 0x3C, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB4, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, @@ -34,7 +34,7 @@ const uint8_t edram_store_depth_unorm_cs[] = { 0x90, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xB4, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0xD4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x73, 0x74, 0x6F, 0x72, 0x65, 0x5F, @@ -43,19 +43,20 @@ const uint8_t edram_store_depth_unorm_cs[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x01, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, - 0x5F, 0x62, 0x61, 0x73, 0x65, 0x5F, 0x64, 0x65, 0x70, 0x74, 0x68, 0x5F, - 0x70, 0x69, 0x74, 0x63, 0x68, 0x00, 0x64, 0x77, 0x6F, 0x72, 0x64, 0x00, + 0x5F, 0x62, 0x61, 0x73, 0x65, 0x5F, 0x73, 0x61, 0x6D, 0x70, 0x6C, 0x65, + 0x73, 0x5F, 0x32, 0x78, 0x5F, 0x64, 0x65, 0x70, 0x74, 0x68, 0x5F, 0x70, + 0x69, 0x74, 0x63, 0x68, 0x00, 0x64, 0x77, 0x6F, 0x72, 0x64, 0x00, 0xAB, 0x00, 0x00, 0x13, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCE, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD9, 0x01, 0x00, 0x00, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4C, 0x53, 0x4C, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6F, 0x6D, 0x70, 0x69, 0x6C, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2E, 0x31, 0x00, 0x49, 0x53, 0x47, 0x4E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x4F, 0x53, 0x47, 0x4E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x53, 0x48, 0x45, 0x58, 0x84, 0x03, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, - 0xE1, 0x00, 0x00, 0x00, 0x6A, 0x08, 0x00, 0x01, 0x59, 0x00, 0x00, 0x07, + 0x53, 0x48, 0x45, 0x58, 0xE8, 0x03, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, + 0xFA, 0x00, 0x00, 0x00, 0x6A, 0x08, 0x00, 0x01, 0x59, 0x00, 0x00, 0x07, 0x46, 0x8E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0x00, 0x00, 0x06, 0x46, 0x7E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -94,7 +95,7 @@ const uint8_t edram_store_depth_unorm_cs[] = { 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0C, 0x62, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x00, 0x06, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x20, 0x02, 0x00, @@ -111,7 +112,7 @@ const uint8_t edram_store_depth_unorm_cs[] = { 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x55, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x08, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x10, 0x02, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x06, @@ -126,21 +127,29 @@ const uint8_t edram_store_depth_unorm_cs[] = { 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x08, - 0xF2, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, 0x53, 0x54, 0x41, 0x54, - 0x94, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0C, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x0B, + 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, + 0x0A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xA6, 0x00, 0x00, 0x08, 0xF2, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, + 0x53, 0x54, 0x41, 0x54, 0x94, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, }; diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/edram_store_depth_unorm_cs.txt b/src/xenia/gpu/d3d12/shaders/dxbc/edram_store_depth_unorm_cs.txt index db7738d00..67cdfc5f9 100644 --- a/src/xenia/gpu/d3d12/shaders/dxbc/edram_store_depth_unorm_cs.txt +++ b/src/xenia/gpu/d3d12/shaders/dxbc/edram_store_depth_unorm_cs.txt @@ -8,7 +8,7 @@ // { // // uint4 xe_edram_load_store_constants;// Offset: 0 Size: 16 -// uint xe_edram_base_depth_pitch; // Offset: 16 Size: 4 +// uint xe_edram_base_samples_2x_depth_pitch;// Offset: 16 Size: 4 // // } // @@ -52,7 +52,7 @@ ld_raw r0.x, r0.y, T0[0].xxxx ushr r0.yzw, r0.xxxx, l(0, 8, 16, 24) bfi r0.xyzw, l(24, 24, 24, 24), l(8, 8, 8, 8), r1.xyzw, r0.xyzw ishl r1.x, vThreadIDInGroup.x, l(2) -and r1.yz, CB0[0][1].xxxx, l(0, 2048, 2047, 0) +and r1.yz, CB0[0][1].xxxx, l(0, 0x00008000, 2047, 0) if_nz r1.y ult r1.y, vThreadIDInGroup.x, l(10) uge r1.w, vThreadIDInGroup.x, l(10) @@ -60,13 +60,16 @@ if_nz r1.y iadd r1.y, r1.w, r1.y iadd r1.x, r1.y, r1.x endif -ushr r1.y, CB0[0][1].x, l(12) +ushr r1.y, CB0[0][1].x, l(16) imad r1.y, vThreadGroupID.y, r1.y, r1.z iadd r1.y, r1.y, vThreadGroupID.x imul null, r1.z, vThreadIDInGroup.y, l(320) imad r1.y, r1.y, l(5120), r1.z ishl r1.x, r1.x, l(2) iadd r1.x, r1.x, r1.y +ubfe r1.y, l(1), l(13), CB0[0][1].x +ishl r1.y, r1.y, l(1) +ishl r1.x, r1.x, r1.y store_raw U0[0].xyzw, r1.x, r0.xyzw ret -// Approximately 25 instruction slots used +// Approximately 28 instruction slots used diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/edram_tile_sample_32bpp_cs.cso b/src/xenia/gpu/d3d12/shaders/dxbc/edram_tile_sample_32bpp_cs.cso index 9f1f3c2156efa35e46ac97cc5a96b66b886300e7..61714bc96f5457752d26a974937fe3388fc19749 100644 GIT binary patch literal 6544 zcmbuD&2L@B8OFyG=MrB`LY=gwQB`g+L`hUtjzwE3R51CvO{Gw13~jooEEC_#sgl^T zjhYpTA{JFt0Rn`CsxG={7GwqDFUTLzcGB{2e)urXdjm_2d(c;GHtLqm>p-Z$p+Sm*iMrTf+ zKk@uISu9|1YW3>I=F-*8jd1%mewA+cuAB@sn=WUkkBWi(t^EE#gpTKr#YbmS1HHRD z=ye5mv5Di=OIJ6aR-XGcK#j{#&BwFI`+;-B|tI=HT%8BZIT&7S0V8R+g4W>w{CPSJp0F*2A&6 zA07)oU-;QCSVxHYh1UDR*)tcGzZJqS)j;p7hkm~&O#DVIGJIpMvhfEsg8r(O7``?x zgZ~%!pC99Kj22bi`A1`@=0ToS@fGp=()_cQ;DBbszrPk4Yby9_&;9X?#!hwf?QWwV&Q(J}-!Nb~8DSqj^5489V&lXvvOena-fb4jys# z^Ng&_AAjV}jLewE!Y}>?Eg6^-NgtyB}T{$ zinHJL8PoP04q^7s5ZZazpJK1pihFCQvt+3FA;mq_)IG=M8Ze_zZjM3uUOyooImARi zj>k)lzfL`ywavb%9oY1j&oTS*ded)=n6%L~bAEB2G48j{j-Ad4FzHkF2Q<*yK9Qg4 zU3?wX?7eLnJcvDm4twULc*J8FGw-bNj}>Yuhfi*@ZED&+dt;K)b)9n*Ka=+#adVzH z9`9@7p~r;V$Q+MlFG_YJ$JS+M+3~D{-M@6%Q$zbRrge~=lsUCiB6l)=l_HU?skB@f~z&8jHPcd&iFsIHhmf+fF_D zuUuvJY=q6+y88_{ z*CwX={H(e4Z;r1MH+ez5R$h+VYuc8VakuS>n;5(XuHEpp0jd>I-@L!8a}4JFH|J_$ z{)~xl;dQTMR(0k&X8MviAosdu^pR!M);j$5(3#TgRqJEFTS_IS?a*Og{z-e)n5A8b zZJTEVXI=AzQGLgw5AN@)V{+dKdoT53e|Rr27_;7AJ~EE-em?yXUo)AVcMP^ zZrkVescMDWgYpBp*7|PN$Xt&`r$c7DvZpy0%J_*Rrn;xe!NYsH%oDxvVEj*OTj60> z*3CGcjb}aPn6|-H=MnMkR3FxKCfB9OT{xUaWuA`9@jFi{S`PI=_1kMFc@%c3&$ILN z`mt{G|9pSI*;at@B$Yirv!ZcJlP)eE-l zU1JEp`d$KtdADxPjTx%fnpzxHZV#@RS1{<00b9(TW?$DXL-$z`L?;B>;lRFrF{B-HVhnP$KqdVxshnP$K<2&fXhnTJZ qtYTVt>BLL#ivN)Y|9gRuLqE~b{~M}a;eR4K5xrd!wfTRE8hr^6=BX0^ literal 5228 zcmbuC&ud&&6vyw}q?2YE+L*K`MeNkt(ke(=s*5W1wMoYcsjZn>D+nP!MiNOoA(^5J zDYXk1MN~ut5f?7ZrrY`tbm2zOE=1f2#f7+1=%NTN;`ejkJ(D}HFLdDv=biiRIp=%N zkNfVOOk6xU?tXdo%X8oT@XYv!JAQla?|;9qIOmpjI=4mgsQ4|fck%n;JEP7`O`K}f zHO8)Ak3Pv4#g#41ah(3q-00}Ue&!w%AB_BzYz1DPVer4v;^iq3fetNajUTICQwy&(rwOpBMzO~wM7h9($rcRuhlt&YX@%H7_ z&dlY`s=IlUbyW)YxE85P8ZE^|hc$uz)A+tF!p7t+&12Iq#_s1$?8<_h>&9_q@p9*= z@*EX|R8BX9-Nl)mS#3?vx0X8#)60vUxdk`>ZhK{3j$p(fN??AJ>dfNYN_(~acBg)D z>QMdkWOK6KT$q_}t<=ZcmzEcoG&nr=>|ysx^W|6R9fUkvcyFFQb#d|$=U&sMX)5e@ zwz|rj+7^wE$AXVNs0;Lswn5`+ua5bzng8oB!ycMeNskPB7o;|9kgD>6<_Bf@mCCMd z9_mlVuWNfA32)9duJx|tGv^d)V2MD7oEy9y?W_IX`7BI_hsAtW`Iybxb~>$K`*W%9 zW8h@;KNjWFQSNd5eKtO>Exb$ogzRT+y~^;l69G+l74H9aUJZdKE_-b4!eSwuSb01!-n;c#B6z3%r{iBd(u-6pXJ{ow#Lk{^mZ}z zWwraCjOn>Sif53#@u}|JsB=y4w!fsSnazc2ZtF7{h-@v!2XMLL9DU~8YQ)&S*pmCG zj@8>ySKaADuZVqL5`*DaRTFe;+j1<~ggQsu&>zM=Q*e?NtA>sPRQ;@V*V3M_8li`H zhv;n@FPMMS@-=NwSR6>=!bW*_qk4)D#fAjlRo#GoJM$Gk<%Y!O zBj>i6&ep*XLV|5RF9^IuG#oZF9qTZ zHcafmMuMaBcJN`C=1&Yo|Ja{yjqO_@SK@jjslVmewJFh=UwSvFhqW|*;_z9%&)93m zTCc~BJbk9edhefl8|=tGt()PPG(59I`s@L?@Es7}X7v$HX?=(<&C}wt{#c&uf|Run z!X3Gpo)}Ym#+Ik`kG^r&&dQQL`AiQH`x}OQriY005QeHBjOBy)e1`mktVXNs_14#(H7BwRlZpXF09u&VziWhX@<|AmSd0 z>)E~}rajULqpPb$8+7>ZEBRh5ZfZ+>?AOntUm62CBd$^9*R`t-ZNz%ljF8%l*6$F1 zme+%t7<wifyO z%(+J;Q)X^Zb17S04Y!CvT~h|5Ncd7eBx@Hjs6)y=>%|1$dTAK+nVdN0GG<+N^K$fxJdv7CB}t-^CI zv8T{m?=2@g1BsKl5O4Ni-?divTkqbrvcul+8Qa-lSjuxJYa4Emvg=A=q&YG+UoTye z(zPrHv$vYsT18x+718pw*qeqS{P5ca44YfK(R)9w=>#3QySEF**@r!n?~|NYG=_W@ z>O+kJOE{k;`Rg6xw-@BI-aATDj{k!UuVMcS3!gn>zq_$3# zE#opX{oooqCk5)=4#4Uu?s~bP$pd_~J zR}nT<6tO@NqNqY_5DOM$6Tzwy8x|-lRur*7VizG)v0{-$R!HXi&D?K%-+0`l;zZ}& znS0Lp&fmE+&e@AEp85Uqv3LId!M}d@-yeP9>fc6xczh;=uzECv{aT+Fuf-6qi+>{i z^QS_%aQ58ri@HW{RzLf+eoZ{HfB6hXvyvS?eD?F~eNucp^XIhAi=p?#kBNI?a7^Vj zd+&=6h##i+ZAXkh)(E&_S2iK*ToPHkw4FNFUJ~FJ*P~VnLUUc zi4*;A2^U**hQc)l@>jErv&Ay%f=n1wcD6?syM-Lbb9p_g6+8UhY{^b#na-fbjy>Y+ z=M`C*KmN#{6`3)Og{t2Ypu| zznfzwJ}9QDUb?D@7?`(4???>2`8r?8=A36w`!Pv5Qx&_eWjj?1^0Y6>=9c82Gnm+7 zs(oW?(k%7yfsXBBvUF#zHT#b>SXuuA^&h*%Vtzf3CB|{-aCU%?{({0#?{~%4&w5%a zQk?y^&zN@Sa18jrhS1K#{uF!FE8bf}oh3uX4=L`srtUd5*MJp$a&rvI_r_`MkwZ+( zW1W|lim35Nsb|yM?3>zw&3ySBvoH6Xd4prpgRYhHi}MVA&^kNzIw!znPI*3{fqMH) zzGimubyTaLZOhn$cxKSynR!ur#A6vN_w@KH3bmB8Pj0fEGiJXyAHf8BTZLzKZ)U76 z9U`HB#yKTj>{-irnA?Rc^E2%DsgLa)zjcn~nX)aoRXr5n4PBJJZ3}MD%g7j|Z|Z9M zeNy`{-|GEA`*p0WysviELOI;c*go%j2kIJ>{vDI?knNTGVymu>o0>b<61yum;^+CX zzWtZyqcHlL(&KE1shY!}CA=Yq$OocU|IB#of!mv_?b>sEU-Es(wGy}ARho^yW!{Ua zetz+9W~R}@hxJ&wXLf%p)urr%oGQJIfuuDdrys;X?p3UlL6(MKd;C$iz3h>n>agdz zQa$?Zdc-6H5fvMVPl)m5oSRtRMp~2QbGmh`!$MANv4j5KxH$`47tU6E`ivk(@}gz=oN2-MnwiT(jo9V}2m)I2-jnvP*_7 zGGbiF*UetG^BkbZGfRxs+^S!$FS(X1-6=ivW75y|^gs2u(xdOLJ9;G+*T%CRYfQV~ zsy+;C-*e=xeXe)A7-_t~nrY=75zspg)l3 z!2NzE?|Tl)ep}`lYjjlirEE9MYfSZg(PvW`SG)Jb71Q3ma_t_q_YcE+)ZT;R+Lpcd z981ji#ngP-w|nH({oP9*Q+I#M80Zu4FxUH+`|D@U-_Md&?-b%vFRE|M>fPmj=Wik8 zr;6_-?& zpGeN6hPaphrluYx$25J9j97qiY>KHfCv=SOc`vcKj%nxbZ_a+WjZZGrrTy&O6F|xK z#WN9;&Izq0v&Y{jCA+Sy;I}axlUFd>ge~=B#djNnI+PsK?ws9AW6)=ECRWFWUAunv zg&y)UU#{8X8@XigJnPuCF`TPcFxq~>aL!#AWxia4L48XubMC^Jmww4$wCTa2dbWuN z4A-qaE96_UbFTJMcil?gT$gn#XT=zv*(_*`>y@wS?6ry+?kOtd>S8HpAE)Ro=5O)+$u)tHLEbn z96ejsm+BOizMMnhtNQ;=+qQ9Inu4lsu;tk`hVZMi7!2>-zI9^CP_x$5;yL98Q44I4 zkuPL>*Ti<{@eXhesr91#F627#ePS6%=wjpCby;Dvf{o1Yb7t^1@6danMO=~JH$&;- z>nVlmZ<#KAe;@HqF7?T^OP_rReBSlOXHL5G*@wWl{tJp}`L)xp{X+YH6!U-55dNVr YXJ)j^|1U;X5_l!G?@QUEUX#QB0OuOM`Tzg` literal 5500 zcmbuDOOI4V6vwNJp@DHk*v1y`=?hwZG{ldZwO(z_%4lOF@#eZ=QXaa4`E{efo?~0XD&x^?@vvi7LPwltm+AJc%YXspm^Yk*_Q=dAszu~Or1a(^M*K;Y$= zANHntv-8uZr%ugH&rU7$=jMA;3v=h@XL_M&Yqq!04@Y|k_D}42?T|DkQP?+kW}!cQ zroRv_U&gLd5gwP3j=1SmGP*_!?0=Dd-xMKZensoZjA$VD$8F@AoSUiqICt_)f0yE1 zrvXwkT@rSMb9{QCH#OTk+dnaN_GEwNM40_xZhlsZU?e9RV1CioYbR&s=N9JP>vy(I zZ0{UAG|i=XQ%dR1H8GT24O?<$`GnR-CHbAw zu68c-PsDGlJ$IJBLg-!?wiAmG9+nKlv^|7XSCf2uB!*acXHZLiy`gw4v$&c{%h{0u z*ZEknH|g(A{F%fzg^^{Rzo-`0acn&y`Qx_NT61Afi6*>O4Dw~g+O+pr;;mxfhhi(^ zBF3h;Za$=b)G)o7>>%Hc$>-LZvMccUV#3EiWUvRvXUAcmFDYgJYM&a$VsI9b^KV$+vHo z4|J5r_SLl4ULVU^;ro`%2jjPu6ZRG#7+^`J%yYsm>%%-2a!%a7Y8tpeRnO7NmU_ZD zVjto+L~V0_!TfV{VADNeKj8Rat!@A%T1G*P9$!%Mgy`Y0@jJj>>FO%4vZ2zc|(3{8^ zyZcc`zXpV^{qjDx$*6U?ZS6;{%UKvru?VN?%^MF5>Jfzlbu`AAh`^-I_+Me3?XXo6 z`&ZMx>(K6Z(ryUP>6Ohs@o>lBo37Uu>%<9eS9cKW+$XC2*m12>qxzYPg%(B9N46y2 zNyvlgp4_OjgUwIUS!W)LL7s@#gS9$!)7jZ5zj6$Gjm47goiH{E!?D4MO+HpV=Uldg zN9_4M<=kK!95`!xQ(n*k(|Po|F;gB(Tja%cL66_>BtMw%PMDQUI{)nPZh*%^k3`sI z&Hgf1ua8no;-HrJ8;il+!u{eQ*&#XPW1+{*;eYCZQf|4n?gh_s@L1deSDrWg!!P$5 z9C>n;_mFMZV{xs`@1?ISYwlR=gKbj-$aN>j?jP2kOf_=d(UYHzy+l1+UoegB-q3!f z=RNm@Yl>dIruY<#rCQ!^P49+xuQdh7`OIsY$63WL|B=t*tk>Iqxn}0B_wDwhuq|tj zKe>O@jc*U%Z|Fe8%79{_hlqC^18RRfKA5B@?|_NaGyWFx`(JTa@7LYg`xRB{eDkI9 z{ZpO8cEX9;gXkZ8=Bzk3u7%I5{WV9)6X%!tk@QVuzg=_s^~tT@Z~n%M#ULN##G`4= zeQ4kK25`K2Oqeo0J~d&nM!xe=$0ru@0tS1=x+W*{VOyNpSmisu77`UQ?& z9iu5`+cQVkF*jl4@iLEvnnXMwdCW~1W0KDY7(#fEwfWFfM0*6zgv-I4XVphQ^$a9WLayH<=tjn sWH-oVj~6wcJiO=dS6Wvd$~zYf$FfE9ts3+ychl_%{G6!K{Suh}1H2xD>Hq)$ diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/edram_tile_sample_64bpp_cs.h b/src/xenia/gpu/d3d12/shaders/dxbc/edram_tile_sample_64bpp_cs.h index 73e646743..f8d6d866e 100644 --- a/src/xenia/gpu/d3d12/shaders/dxbc/edram_tile_sample_64bpp_cs.h +++ b/src/xenia/gpu/d3d12/shaders/dxbc/edram_tile_sample_64bpp_cs.h @@ -1,14 +1,14 @@ // generated from `xb buildhlsl` // source: edram_tile_sample_64bpp.cs.hlsl const uint8_t edram_tile_sample_64bpp_cs[] = { - 0x44, 0x58, 0x42, 0x43, 0x0C, 0x37, 0xE3, 0xC2, 0x17, 0x14, 0xD2, 0x0E, - 0x74, 0xE3, 0x75, 0x95, 0xEC, 0xB3, 0x4A, 0x8D, 0x01, 0x00, 0x00, 0x00, - 0x7C, 0x15, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, - 0x5C, 0x02, 0x00, 0x00, 0x6C, 0x02, 0x00, 0x00, 0x7C, 0x02, 0x00, 0x00, - 0xE0, 0x14, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0x20, 0x02, 0x00, 0x00, + 0x44, 0x58, 0x42, 0x43, 0xAE, 0x53, 0x26, 0x8F, 0xD6, 0xE6, 0xE4, 0xAD, + 0xFC, 0x79, 0x2B, 0x6D, 0xD2, 0x5F, 0xB7, 0x0D, 0x01, 0x00, 0x00, 0x00, + 0x64, 0x1A, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x68, 0x02, 0x00, 0x00, 0x78, 0x02, 0x00, 0x00, 0x88, 0x02, 0x00, 0x00, + 0xC8, 0x19, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0x2C, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01, 0x05, 0x53, 0x43, 0x00, 0x05, 0x00, 0x00, - 0xF8, 0x01, 0x00, 0x00, 0x13, 0x13, 0x44, 0x25, 0x3C, 0x00, 0x00, 0x00, + 0x04, 0x02, 0x00, 0x00, 0x13, 0x13, 0x44, 0x25, 0x3C, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB4, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, @@ -34,7 +34,7 @@ const uint8_t edram_tile_sample_64bpp_cs[] = { 0x90, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xB4, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0xD4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x73, 0x74, 0x6F, 0x72, 0x65, 0x5F, @@ -43,19 +43,20 @@ const uint8_t edram_tile_sample_64bpp_cs[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x01, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, - 0x5F, 0x62, 0x61, 0x73, 0x65, 0x5F, 0x64, 0x65, 0x70, 0x74, 0x68, 0x5F, - 0x70, 0x69, 0x74, 0x63, 0x68, 0x00, 0x64, 0x77, 0x6F, 0x72, 0x64, 0x00, + 0x5F, 0x62, 0x61, 0x73, 0x65, 0x5F, 0x73, 0x61, 0x6D, 0x70, 0x6C, 0x65, + 0x73, 0x5F, 0x32, 0x78, 0x5F, 0x64, 0x65, 0x70, 0x74, 0x68, 0x5F, 0x70, + 0x69, 0x74, 0x63, 0x68, 0x00, 0x64, 0x77, 0x6F, 0x72, 0x64, 0x00, 0xAB, 0x00, 0x00, 0x13, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCE, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD9, 0x01, 0x00, 0x00, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4C, 0x53, 0x4C, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6F, 0x6D, 0x70, 0x69, 0x6C, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2E, 0x31, 0x00, 0x49, 0x53, 0x47, 0x4E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x4F, 0x53, 0x47, 0x4E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x53, 0x48, 0x45, 0x58, 0x5C, 0x12, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, - 0x97, 0x04, 0x00, 0x00, 0x6A, 0x08, 0x00, 0x01, 0x59, 0x00, 0x00, 0x07, + 0x53, 0x48, 0x45, 0x58, 0x38, 0x17, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, + 0xCE, 0x05, 0x00, 0x00, 0x6A, 0x08, 0x00, 0x01, 0x59, 0x00, 0x00, 0x07, 0x46, 0x8E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0x00, 0x00, 0x06, 0x46, 0x7E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -64,248 +65,347 @@ const uint8_t edram_tile_sample_64bpp_cs[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x02, 0x32, 0x10, 0x02, 0x00, 0x5F, 0x00, 0x00, 0x02, 0x32, 0x20, 0x02, 0x00, 0x5F, 0x00, 0x00, 0x02, 0x32, 0x00, 0x02, 0x00, - 0x68, 0x00, 0x00, 0x02, 0x0A, 0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x04, + 0x68, 0x00, 0x00, 0x02, 0x0B, 0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x04, 0x14, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x55, 0x00, 0x00, 0x0C, 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8A, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x0C, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, + 0x0E, 0x00, 0x00, 0x00, 0x06, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x06, + 0x32, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x00, 0x02, 0x00, + 0xA6, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, + 0x62, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x01, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x55, 0x00, 0x00, 0x0C, 0x32, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x29, 0x00, 0x00, 0x09, 0xC2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x06, 0x04, 0x02, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x4F, 0x00, 0x00, 0x07, 0xC2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xA6, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, - 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, - 0x15, 0x00, 0x00, 0x01, 0x1E, 0x00, 0x00, 0x07, 0x62, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x06, 0x01, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x06, 0x01, 0x02, 0x00, 0x29, 0x00, 0x00, 0x07, - 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x0C, 0x32, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x46, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0xFF, 0x0F, 0x00, 0x00, - 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x50, 0x00, 0x00, 0x07, 0x62, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x06, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x01, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, - 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, - 0x15, 0x00, 0x00, 0x01, 0x8A, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, - 0x11, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xF6, 0x8F, 0x30, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x50, 0x00, 0x00, 0x09, 0x62, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x06, 0x21, 0x02, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x0A, 0x62, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x56, 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x08, 0x00, 0xD0, 0x00, 0x00, - 0x32, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x96, 0x05, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x29, 0x00, 0x00, 0x06, 0xC2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x06, 0x14, 0x02, 0x00, 0x06, 0x04, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x23, 0x00, 0x00, 0x09, 0x62, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x56, 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x01, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0xA6, 0x0B, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x23, 0x00, 0x00, 0x0C, 0x32, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x46, 0x00, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x20, 0x02, 0x00, - 0x1E, 0x00, 0x00, 0x0A, 0xC2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x06, 0x04, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x0C, 0xC2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x06, 0x84, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0x0F, 0x00, 0x00, 0xFF, 0x0F, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0xC2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0xA6, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x04, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x0F, 0xF2, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x00, 0x07, + 0xF2, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x07, + 0x82, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x3C, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x07, 0xC2, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xA6, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x06, 0x04, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x07, + 0x82, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, + 0x15, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x06, 0x32, 0x00, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x20, 0x02, 0x00, 0x1F, 0x00, 0x04, 0x03, 0x2A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x0A, 0x92, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x06, 0x04, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x06, + 0x92, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x14, 0x02, 0x00, + 0x06, 0x0C, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x09, + 0xC2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x14, 0x02, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x07, + 0xC2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0xA6, 0x0E, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x06, 0x04, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x55, 0x00, 0x00, 0x09, 0x32, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x46, 0x20, 0x02, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x0A, 0xC2, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x06, 0x04, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, 0x32, 0x00, 0x10, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0xE6, 0x0A, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, - 0x62, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0xA6, 0x0B, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x06, 0x01, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x09, 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, - 0x55, 0x00, 0x00, 0x09, 0x82, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x0A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, - 0x23, 0x00, 0x00, 0x09, 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x29, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x08, - 0x00, 0xD0, 0x00, 0x00, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x2A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, - 0x80, 0x02, 0x00, 0x00, 0x23, 0x00, 0x00, 0x09, 0x82, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x40, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x01, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, - 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0xA5, 0x00, 0x00, 0x08, 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x7E, 0x20, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0xE6, 0x0A, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x0C, + 0xC2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0xA6, 0x0E, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x06, 0x04, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x01, + 0x50, 0x00, 0x00, 0x09, 0x32, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x46, 0x20, 0x02, 0x00, 0x02, 0x40, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x0A, 0x32, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x46, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x08, 0x00, 0xD0, 0x00, 0x00, + 0xC2, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x04, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x06, 0x32, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x46, 0x10, 0x02, 0x00, 0x46, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x09, 0x92, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x06, 0x04, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x04, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x0C, 0x32, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0xE6, 0x0A, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x20, 0x02, 0x00, + 0x1E, 0x00, 0x00, 0x0A, 0xC2, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x06, 0x04, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, 0xC2, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x06, 0x04, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0xA6, 0x0E, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, + 0x8A, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x0F, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, + 0x0C, 0x00, 0x00, 0x00, 0xF6, 0x84, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, - 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0xA5, 0x00, 0x00, 0x08, 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x7E, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, - 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0A, - 0x62, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0xF6, 0x0F, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xA5, 0x00, 0x00, 0x08, 0x32, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x70, 0x20, 0x00, + 0xC2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0xA6, 0x0E, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x06, 0x04, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x1F, 0x00, 0x04, 0x03, 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x07, + 0x42, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x12, 0x00, 0x00, 0x01, 0x36, 0x00, 0x00, 0x05, 0x42, 0x00, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0xFF, 0x07, 0x00, 0x00, 0x55, 0x00, 0x00, 0x09, 0x82, 0x00, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x26, 0x00, 0x00, 0x08, 0x00, 0xD0, 0x00, 0x00, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0x23, 0x00, 0x00, 0x09, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x0B, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x07, 0xC2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x08, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x2A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, + 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, + 0x72, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0xE2, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x09, 0x10, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, 0x3A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x3C, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0xA5, 0x00, 0x00, 0x08, + 0x32, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x46, 0x70, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xA5, 0x00, 0x00, 0x08, 0xC2, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x06, 0x74, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xA5, 0x00, 0x00, 0x08, 0x32, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x2A, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x46, 0x70, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA5, 0x00, 0x00, 0x08, - 0xC2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x06, 0x74, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xC2, 0x00, 0x10, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x06, 0x04, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x12, 0x00, 0x00, 0x01, 0x36, 0x00, 0x00, 0x05, 0xF2, 0x00, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x15, 0x00, 0x00, 0x01, 0x55, 0x00, 0x00, 0x0C, 0x62, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0xF6, 0x8F, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, 0x2A, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x32, 0x00, 0x10, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x16, 0x05, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0xC2, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x06, 0x74, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x01, 0x1E, 0x00, 0x00, 0x0A, + 0xE2, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0xA5, 0x00, 0x00, 0x08, 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x46, 0x7E, 0x20, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA5, 0x00, 0x00, 0x08, + 0xF2, 0x00, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x46, 0x7E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, 0x0A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xA5, 0x00, 0x00, 0x08, 0x32, 0x00, 0x10, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x46, 0x70, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xA5, 0x00, 0x00, 0x08, 0xC2, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x74, 0x20, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, + 0xC2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x04, 0x10, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x01, 0x36, 0x00, 0x00, 0x05, + 0xF2, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x01, + 0x55, 0x00, 0x00, 0x0C, 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xF6, 0x8F, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1F, 0x00, 0x04, 0x03, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x46, 0x0B, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x16, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, - 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x16, 0x0B, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, + 0xF2, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x16, 0x0B, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x07, - 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x1F, 0x00, 0x04, 0x03, 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x16, 0x0B, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x07, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x1F, 0x00, 0x04, 0x03, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x16, 0x0B, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, - 0x42, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x01, 0x36, 0x00, 0x00, 0x05, - 0x42, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x55, 0x00, 0x00, 0x07, - 0x82, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x57, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x3A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0xC2, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0xA6, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, - 0x3A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, - 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x55, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x57, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, - 0xF2, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xF2, 0x00, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x1F, 0x00, 0x04, 0x03, - 0x2A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, - 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, + 0x46, 0x0E, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x07, + 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x05, 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x16, 0x0B, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, - 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x55, 0x00, 0x00, 0x07, - 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x57, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, - 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, - 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, - 0x00, 0xFF, 0x00, 0xFF, 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, - 0xF2, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, - 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, - 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x07, - 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x1F, 0x00, 0x04, 0x03, 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x15, 0x00, 0x00, 0x01, 0x8A, 0x00, 0x00, 0x11, 0x62, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, - 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x81, 0x30, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1E, 0x00, 0x00, 0x07, 0x52, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x06, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x06, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x09, 0x82, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x01, 0x1F, 0x00, 0x04, 0x03, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xF2, 0x00, 0x10, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x16, 0x0B, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x05, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, + 0x55, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, + 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1F, 0x00, 0x04, 0x03, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x55, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, + 0x1F, 0x00, 0x04, 0x03, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x01, 0x1E, 0x00, 0x00, 0x07, 0x32, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x96, 0x05, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xE6, 0x0A, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x08, + 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x80, + 0x41, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x09, 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0xFF, 0x3F, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, - 0xF2, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x55, 0x00, 0x00, 0x0A, 0x62, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0xA6, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x55, 0x00, 0x00, 0x0A, 0xC2, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x56, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x23, 0x00, 0x00, 0x09, 0xF2, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x56, 0x05, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x09, 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0xA6, 0x0A, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, 0x92, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xA6, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x56, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0x92, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0C, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -315,7 +415,7 @@ const uint8_t edram_tile_sample_64bpp_cs[] = { 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, @@ -323,141 +423,145 @@ const uint8_t edram_tile_sample_64bpp_cs[] = { 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, - 0xF2, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0xF2, 0x00, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, - 0xF2, 0x00, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, - 0x0D, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, - 0xF2, 0x00, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x0D, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, + 0xF2, 0x00, 0x10, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, + 0x0A, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x0A, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0x0F, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, + 0x46, 0x0E, 0x10, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, - 0x0C, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x0C, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, - 0xF2, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, - 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x0A, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x14, - 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x14, + 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, - 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, + 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x09, 0xF2, 0x00, 0x10, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x09, 0xF2, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0xA6, 0x8A, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x08, 0x32, 0xE0, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x8C, 0x00, 0x00, 0x14, 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, - 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x00, 0x07, - 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x1F, 0x00, 0x04, 0x03, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xA6, 0x00, 0x00, 0x08, 0x32, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, - 0xE6, 0x0A, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, - 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, + 0xF2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, + 0x0A, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x08, 0x32, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2A, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, 0x2A, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x08, 0x32, 0xE0, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, - 0x04, 0x00, 0x00, 0x00, 0xE6, 0x0A, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x15, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x01, - 0x3E, 0x00, 0x00, 0x01, 0x53, 0x54, 0x41, 0x54, 0x94, 0x00, 0x00, 0x00, - 0x8C, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, - 0x25, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x1F, 0x00, 0x04, 0x03, + 0x1A, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x08, + 0x32, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0x0A, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x1F, 0x00, 0x04, 0x03, + 0x2A, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x08, + 0x32, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x1F, 0x00, 0x04, 0x03, + 0x3A, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x08, + 0x32, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0x0A, 0x10, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x3E, 0x00, 0x00, 0x01, + 0x53, 0x54, 0x41, 0x54, 0x94, 0x00, 0x00, 0x00, 0xBC, 0x00, 0x00, 0x00, + 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, }; diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/edram_tile_sample_64bpp_cs.txt b/src/xenia/gpu/d3d12/shaders/dxbc/edram_tile_sample_64bpp_cs.txt index 4dc3146af..c226f20dd 100644 --- a/src/xenia/gpu/d3d12/shaders/dxbc/edram_tile_sample_64bpp_cs.txt +++ b/src/xenia/gpu/d3d12/shaders/dxbc/edram_tile_sample_64bpp_cs.txt @@ -8,7 +8,7 @@ // { // // uint4 xe_edram_load_store_constants;// Offset: 0 Size: 16 -// uint xe_edram_base_depth_pitch; // Offset: 16 Size: 4 +// uint xe_edram_base_samples_2x_depth_pitch;// Offset: 16 Size: 4 // // } // @@ -42,146 +42,194 @@ dcl_uav_raw U0[0:0], space=0 dcl_input vThreadGroupID.xy dcl_input vThreadIDInGroup.xy dcl_input vThreadID.xy -dcl_temps 10 +dcl_temps 11 dcl_thread_group 20, 16, 1 -ushr r0.xy, CB0[0][0].xyxx, l(17, 17, 0, 0) -ishl r0.zw, vThreadID.xxxy, l(0, 0, 2, 0) -ult r0.zw, r0.zzzw, r0.xxxy -or r0.z, r0.w, r0.z +ubfe r0.xyzw, l(1, 1, 1, 1), l(12, 11, 13, 14), CB0[0][1].xxxx +ushr r1.xy, vThreadID.xyxx, r0.zzzz +ishl r1.yz, r1.xxyx, l(0, 2, 0, 0) +ushr r2.xy, CB0[0][0].xyxx, l(17, 17, 0, 0) +and r2.zw, CB0[0][0].xxxy, l(0, 0, 4095, 4095) +iadd r2.zw, r2.zzzw, r2.xxxy +imad r3.xyzw, r1.xxxx, l(4, 4, 4, 4), l(0, 1, 2, 3) +uge r4.xyzw, r3.xyzw, r2.xxxx +ult r5.xyzw, r3.xyzw, r2.zzzz +and r4.xyzw, r4.xyzw, r5.xyzw +ult r1.x, r1.z, r2.y +uge r1.w, r1.z, r2.w +or r1.x, r1.w, r1.x +or r2.zw, r4.zzzw, r4.xxxy +or r1.w, r2.w, r2.z +ieq r1.w, r1.w, l(0) +or r1.x, r1.w, r1.x +if_nz r1.x + ret +endif +and r5.xy, r0.zzzz, vThreadIDInGroup.xyxx if_nz r0.z - ret -endif -iadd r0.yz, -r0.xxyx, vThreadID.xxyx -ishl r0.x, r0.y, l(2) -and r1.xy, CB0[0][0].xyxx, l(4095, 4095, 0, 0) -uge r1.yz, r0.xxzx, r1.xxyx -or r0.w, r1.z, r1.y -if_nz r0.w - ret -endif -ubfe r2.xyzw, l(1, 1, 1, 1), l(15, 14, 17, 16), CB0[0][0].wwww -uge r1.yz, vThreadIDInGroup.xxyx, l(0, 10, 8, 0) -and r1.yz, r1.yyzy, l(0, 1, 1, 0) -imul null, r3.xy, r2.xyxx, r1.yzyy -ishl r3.zw, vThreadGroupID.xxxy, r2.xxxy -imad r1.yz, r1.yyzy, r2.xxyx, r3.zzwz -imad r3.xy, -r3.xyxx, l(10, 8, 0, 0), vThreadIDInGroup.xyxx -iadd r3.zw, r2.xxxy, l(0, 0, 2, 0) -ishl r3.xy, r3.xyxx, r3.zwzz -iadd r2.yz, r2.zzwz, r3.xxyx -and r0.w, CB0[0][1].x, l(2047) -ushr r1.w, CB0[0][1].x, l(12) -imad r0.w, r1.z, r1.w, r0.w -ishl r1.y, r1.y, l(1) -iadd r0.w, r0.w, r1.y -imul null, r1.y, r2.z, l(640) -imad r0.w, r0.w, l(5120), r1.y -ishl r1.y, r2.y, l(3) -iadd r0.w, r0.w, r1.y -ld_raw r3.xyzw, r0.w, T0[0].xyzw -iadd r1.y, r0.w, l(16) -ld_raw r4.xyzw, r1.y, T0[0].xyzw -if_nz r2.x - iadd r1.yz, r0.wwww, l(0, 32, 48, 0) - ld_raw r2.xy, r1.y, T0[0].xyxx - ld_raw r2.zw, r1.z, T0[0].xxxy - mov r3.zw, r4.xxxy + xor r1.xw, r0.xxxy, l(1, 0, 0, 1) + ushr r1.xw, vThreadGroupID.xxxy, r1.xxxw + and r2.zw, vThreadGroupID.xxxy, l(0, 0, 1, 1) + ushr r2.zw, r2.zzzw, r0.xxxy + ushr r6.xy, vThreadIDInGroup.xyxx, l(1, 1, 0, 0) + iadd r6.zw, r0.xxxy, l(0, 0, 2, 0) + ishl r6.xy, r6.xyxx, r6.zwzz + imad r2.zw, r2.zzzw, l(0, 0, 40, 8), r6.xxxy else - mov r2.xyzw, r4.xyzw + uge r6.xy, vThreadIDInGroup.xyxx, l(10, 8, 0, 0) + and r6.xy, r6.xyxx, l(1, 1, 0, 0) + imul null, r6.zw, r0.xxxy, r6.xxxy + ishl r7.xy, vThreadGroupID.xyxx, r0.xyxx + imad r1.xw, r6.xxxy, r0.xxxy, r7.xxxy + imad r6.xy, -r6.zwzz, l(10, 8, 0, 0), vThreadIDInGroup.xyxx + iadd r6.zw, r0.xxxy, l(0, 0, 2, 0) + ishl r2.zw, r6.xxxy, r6.zzzw endif -ushr r1.yz, CB0[0][0].wwww, l(0, 18, 21, 0) -if_nz r1.z - mov r3.xy, r3.yxyy - bfi r3.xyzw, l(16, 16, 16, 16), l(0, 0, 0, 0), r3.xywz, r3.yxzw - bfi r2.xyzw, l(16, 16, 16, 16), l(0, 0, 0, 0), r2.yxwz, r2.xyzw -endif -and r0.w, r1.y, l(4) +ubfe r6.xyzw, l(1, 1, 5, 5), l(15, 14, 12, 12), CB0[0][0].wwxy +iadd r2.zw, r2.zzzw, r6.xxxy if_nz r0.w - mov r3.xyzw, r3.yxwz - mov r1.z, l(2) + ieq r0.y, r1.z, r2.y + and r0.y, r0.y, l(1) + or r5.z, r0.y, r5.y else - mov r1.z, r1.y + mov r5.z, r5.y endif -ushr r1.w, r1.z, l(1) -xor r1.w, r1.w, r1.z -and r1.zw, r1.zzzw, l(0, 0, 2, 1) -if_nz r1.w - ishl r4.xyzw, r3.xyzw, l(8, 8, 8, 8) - and r4.xyzw, r4.xyzw, l(0xff00ff00, 0xff00ff00, 0xff00ff00, 0xff00ff00) - ushr r5.xyzw, r3.xyzw, l(8, 8, 8, 8) - and r5.xyzw, r5.xyzw, l(0x00ff00ff, 0x00ff00ff, 0x00ff00ff, 0x00ff00ff) - iadd r3.xyzw, r4.xyzw, r5.xyzw -endif -if_nz r1.z - ushr r4.xyzw, r3.xyzw, l(16, 16, 16, 16) - bfi r3.xyzw, l(16, 16, 16, 16), l(16, 16, 16, 16), r3.xyzw, r4.xyzw -endif -if_nz r0.w - mov r2.xyzw, r2.yxwz - mov r1.y, l(2) -endif -ushr r0.w, r1.y, l(1) -xor r0.w, r0.w, r1.y -and r0.w, r0.w, l(1) -if_nz r0.w - ishl r4.xyzw, r2.xyzw, l(8, 8, 8, 8) - and r4.xyzw, r4.xyzw, l(0xff00ff00, 0xff00ff00, 0xff00ff00, 0xff00ff00) - ushr r5.xyzw, r2.xyzw, l(8, 8, 8, 8) - and r5.xyzw, r5.xyzw, l(0x00ff00ff, 0x00ff00ff, 0x00ff00ff, 0x00ff00ff) - iadd r2.xyzw, r4.xyzw, r5.xyzw -endif -and r0.w, r1.y, l(2) -if_nz r0.w - ushr r4.xyzw, r2.xyzw, l(16, 16, 16, 16) - bfi r2.xyzw, l(16, 16, 16, 16), l(16, 16, 16, 16), r2.xyzw, r4.xyzw -endif -ubfe r1.yz, l(0, 5, 5, 0), l(0, 12, 12, 0), CB0[0][0].xxyx -iadd r0.xz, r0.xxzx, r1.yyzy -and r0.w, CB0[0][0].w, l(0x00003fff) -iadd r4.xyzw, r0.xxxx, l(0, 1, 2, 3) -ushr r5.xyzw, r4.xyzw, l(5, 5, 5, 5) -ushr r1.yz, r0.zzzz, l(0, 5, 2, 0) -iadd r0.x, r0.w, l(31) -ushr r0.x, r0.x, l(5) -imad r5.xyzw, r1.yyyy, r0.xxxx, r5.xyzw -ishl r0.xw, r0.zzzz, l(5, 0, 0, 7) -and r0.xw, r0.xxxw, l(448, 0, 0, 2048) -bfi r6.xyzw, l(3, 3, 3, 3), l(3, 3, 3, 3), r4.xyzw, r0.xxxx -ishl r0.x, r0.x, l(1) -bfi r7.xyzw, l(3, 3, 3, 3), l(4, 4, 4, 4), r4.xyzw, r0.xxxx -and r7.xyzw, r7.xyzw, l(992, 992, 992, 992) -bfi r8.xyzw, l(22, 22, 22, 22), l(10, 10, 10, 10), r5.xyzw, r7.xyzw -bfi r8.xyzw, l(4, 4, 4, 4), l(0, 0, 0, 0), r6.xyzw, r8.xyzw -bfi r8.xyzw, l(1, 1, 1, 1), l(4, 4, 4, 4), r0.zzzz, r8.xyzw -ishl r9.xyzw, r7.xyzw, l(3, 3, 3, 3) -bfi r9.xyzw, l(22, 22, 22, 22), l(13, 13, 13, 13), r5.xyzw, r9.xyzw -bfi r9.xyzw, l(4, 4, 4, 4), l(3, 3, 3, 3), r6.xyzw, r9.xyzw -bfi r9.xyzw, l(1, 1, 1, 1), l(7, 7, 7, 7), r0.zzzz, r9.xyzw -bfi r9.xyzw, l(12, 12, 12, 12), l(0, 0, 0, 0), r0.wwww, r9.xyzw -ishl r7.xyzw, r7.xyzw, l(2, 2, 2, 2) -bfi r5.xyzw, l(22, 22, 22, 22), l(12, 12, 12, 12), r5.xyzw, r7.xyzw -bfi r5.xyzw, l(4, 4, 4, 4), l(2, 2, 2, 2), r6.xyzw, r5.xyzw -bfi r5.xyzw, l(1, 1, 1, 1), l(6, 6, 6, 6), r0.zzzz, r5.xyzw -and r5.xyzw, r5.xyzw, l(1792, 1792, 1792, 1792) -iadd r5.xyzw, r9.xyzw, r5.xyzw -ushr r4.xyzw, r4.xyzw, l(3, 3, 3, 3) -and r0.x, r1.z, l(2) -iadd r4.xyzw, r0.xxxx, r4.xyzw -bfi r4.xyzw, l(2, 2, 2, 2), l(6, 6, 6, 6), r4.xyzw, l(0, 0, 0, 0) -iadd r4.xyzw, r5.xyzw, r4.xyzw -bfi r4.xyzw, l(6, 6, 6, 6), l(0, 0, 0, 0), r8.xyzw, r4.xyzw -iadd r4.xyzw, r4.xyzw, CB0[0][0].zzzz -store_raw U0[0].xy, r4.x, r3.xyxx -bfi r0.xyz, l(30, 30, 30, 0), l(2, 2, 2, 0), r0.yyyy, l(1, 2, 3, 0) -ult r0.xyz, r0.xyzx, r1.xxxx -if_nz r0.x - store_raw U0[0].xy, r4.y, r3.zwzz - if_nz r0.y - store_raw U0[0].xy, r4.z, r2.xyxx - if_nz r0.z - store_raw U0[0].xy, r4.w, r2.zwzz - endif +and r0.y, CB0[0][1].x, l(2047) +ushr r5.w, CB0[0][1].x, l(16) +imad r0.y, r1.w, r5.w, r0.y +ishl r1.x, r1.x, l(1) +iadd r0.y, r0.y, r1.x +imul null, r1.x, r2.w, l(640) +imad r0.y, r0.y, l(5120), r1.x +ishl r1.x, r2.z, l(3) +iadd r0.y, r0.y, r1.x +ubfe r1.x, l(1), l(13), CB0[0][1].x +and r2.zw, r1.xxxx, r5.xxxz +ishl r1.x, r1.x, l(1) +ishl r0.y, r0.y, r1.x +imad r0.y, r2.w, l(16), r0.y +ishl r1.x, r2.z, l(3) +iadd r7.x, r0.y, r1.x +if_nz r0.z + ishl r8.xyz, l(32, 64, 96, 0), r0.xxxx + iadd r7.yzw, r7.xxxx, r8.xxyz + if_nz r0.w + ieq r3.xyzw, r2.xxxx, r3.xyzw + and r3.xyzw, r3.xyzw, l(8, 8, 8, 8) + or r7.xyzw, r3.xyzw, r7.xyzw + endif + ld_raw r3.xy, r7.x, T0[0].xyxx + ld_raw r3.zw, r7.y, T0[0].xxxy + ld_raw r8.xy, r7.z, T0[0].xyxx + ld_raw r8.zw, r7.w, T0[0].xxxy +else + iadd r7.yzw, r7.xxxx, l(0, 16, 32, 48) + ld_raw r3.xyzw, r7.x, T0[0].xyzw + ld_raw r9.xyzw, r7.y, T0[0].xyzw + if_nz r0.x + ld_raw r8.xy, r7.z, T0[0].xyxx + ld_raw r8.zw, r7.w, T0[0].xxxy + mov r3.zw, r9.xxxy + else + mov r8.xyzw, r9.xyzw endif endif +ushr r0.xy, CB0[0][0].wwww, l(16, 19, 0, 0) +if_nz r0.y + bfi r3.xyzw, l(16, 16, 16, 16), l(0, 0, 0, 0), r3.yxwz, r3.xyzw + bfi r8.xyzw, l(16, 16, 16, 16), l(0, 0, 0, 0), r8.yxwz, r8.xyzw +endif +and r0.y, r0.x, l(4) +if_nz r0.y + mov r3.xyzw, r3.yxwz + mov r0.w, l(2) +else + mov r0.w, r0.x +endif +ushr r1.x, r0.w, l(1) +xor r1.x, r0.w, r1.x +and r1.x, r1.x, l(1) +if_nz r1.x + ishl r7.xyzw, r3.xyzw, l(8, 8, 8, 8) + and r7.xyzw, r7.xyzw, l(0xff00ff00, 0xff00ff00, 0xff00ff00, 0xff00ff00) + ushr r9.xyzw, r3.xyzw, l(8, 8, 8, 8) + and r9.xyzw, r9.xyzw, l(0x00ff00ff, 0x00ff00ff, 0x00ff00ff, 0x00ff00ff) + iadd r3.xyzw, r7.xyzw, r9.xyzw +endif +and r0.w, r0.w, l(2) +if_nz r0.w + ushr r7.xyzw, r3.xyzw, l(16, 16, 16, 16) + bfi r3.xyzw, l(16, 16, 16, 16), l(16, 16, 16, 16), r3.xyzw, r7.xyzw +endif +if_nz r0.y + mov r8.xyzw, r8.yxwz + mov r0.x, l(2) +endif +ushr r0.y, r0.x, l(1) +xor r0.y, r0.y, r0.x +and r0.xy, r0.xyxx, l(2, 1, 0, 0) +if_nz r0.y + ishl r7.xyzw, r8.xyzw, l(8, 8, 8, 8) + and r7.xyzw, r7.xyzw, l(0xff00ff00, 0xff00ff00, 0xff00ff00, 0xff00ff00) + ushr r9.xyzw, r8.xyzw, l(8, 8, 8, 8) + and r9.xyzw, r9.xyzw, l(0x00ff00ff, 0x00ff00ff, 0x00ff00ff, 0x00ff00ff) + iadd r8.xyzw, r7.xyzw, r9.xyzw +endif +if_nz r0.x + ushr r7.xyzw, r8.xyzw, l(16, 16, 16, 16) + bfi r8.xyzw, l(16, 16, 16, 16), l(16, 16, 16, 16), r8.xyzw, r7.xyzw +endif +iadd r0.xy, r1.yzyy, r6.zwzz +iadd r0.xy, -r2.xyxx, r0.xyxx +and r0.w, CB0[0][0].w, l(0x00003fff) +iadd r1.xyzw, r0.xxxx, l(0, 1, 2, 3) +ushr r2.xyzw, r1.xyzw, l(5, 5, 5, 5) +ushr r5.zw, r0.yyyy, l(0, 0, 5, 2) +iadd r0.x, r0.w, l(31) +ushr r0.x, r0.x, l(5) +imad r2.xyzw, r5.zzzz, r0.xxxx, r2.xyzw +ishl r0.xw, r0.yyyy, l(5, 0, 0, 7) +and r0.xw, r0.xxxw, l(448, 0, 0, 2048) +bfi r6.xyzw, l(3, 3, 3, 3), l(3, 3, 3, 3), r1.xyzw, r0.xxxx +ishl r0.x, r0.x, l(1) +bfi r7.xyzw, l(3, 3, 3, 3), l(4, 4, 4, 4), r1.xyzw, r0.xxxx +and r7.xyzw, r7.xyzw, l(992, 992, 992, 992) +bfi r9.xyzw, l(22, 22, 22, 22), l(10, 10, 10, 10), r2.xyzw, r7.xyzw +bfi r9.xyzw, l(4, 4, 4, 4), l(0, 0, 0, 0), r6.xyzw, r9.xyzw +bfi r9.xyzw, l(1, 1, 1, 1), l(4, 4, 4, 4), r0.yyyy, r9.xyzw +ishl r10.xyzw, r7.xyzw, l(3, 3, 3, 3) +bfi r10.xyzw, l(22, 22, 22, 22), l(13, 13, 13, 13), r2.xyzw, r10.xyzw +bfi r10.xyzw, l(4, 4, 4, 4), l(3, 3, 3, 3), r6.xyzw, r10.xyzw +bfi r10.xyzw, l(1, 1, 1, 1), l(7, 7, 7, 7), r0.yyyy, r10.xyzw +bfi r10.xyzw, l(12, 12, 12, 12), l(0, 0, 0, 0), r0.wwww, r10.xyzw +ishl r7.xyzw, r7.xyzw, l(2, 2, 2, 2) +bfi r2.xyzw, l(22, 22, 22, 22), l(12, 12, 12, 12), r2.xyzw, r7.xyzw +bfi r2.xyzw, l(4, 4, 4, 4), l(2, 2, 2, 2), r6.xyzw, r2.xyzw +bfi r2.xyzw, l(1, 1, 1, 1), l(6, 6, 6, 6), r0.yyyy, r2.xyzw +and r2.xyzw, r2.xyzw, l(1792, 1792, 1792, 1792) +iadd r2.xyzw, r10.xyzw, r2.xyzw +ushr r1.xyzw, r1.xyzw, l(3, 3, 3, 3) +and r0.x, r5.w, l(2) +iadd r1.xyzw, r0.xxxx, r1.xyzw +bfi r1.xyzw, l(2, 2, 2, 2), l(6, 6, 6, 6), r1.xyzw, l(0, 0, 0, 0) +iadd r1.xyzw, r2.xyzw, r1.xyzw +bfi r1.xyzw, l(6, 6, 6, 6), l(0, 0, 0, 0), r9.xyzw, r1.xyzw +iadd r1.xyzw, r1.xyzw, CB0[0][0].zzzz +ishl r0.x, r0.z, l(1) +ishl r0.xyzw, r1.xyzw, r0.xxxx +ishl r1.x, r5.x, l(3) +imad r1.x, r5.y, l(16), r1.x +iadd r0.xyzw, r0.xyzw, r1.xxxx +if_nz r4.x + store_raw U0[0].xy, r0.x, r3.xyxx +endif +if_nz r4.y + store_raw U0[0].xy, r0.y, r3.zwzz +endif +if_nz r4.z + store_raw U0[0].xy, r0.z, r8.xyxx +endif +if_nz r4.w + store_raw U0[0].xy, r0.w, r8.zwzz +endif ret -// Approximately 140 instruction slots used +// Approximately 188 instruction slots used diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/primitive_point_list_gs.cso b/src/xenia/gpu/d3d12/shaders/dxbc/primitive_point_list_gs.cso index 0e776a5da5642fddb259c3588f3561d7b5306560..4dd5d44be6305442164a06ec38b88121b550ebcc 100644 GIT binary patch delta 340 zcmexi{m0tUCBn)1iPo+O>U;intq2L%`fsq`kdc9b;g2i>11pd=0b&ha1_lX!28Iwp z28INnc#w;$+nb4&(u@Z;hR$c6ctwG=l#793&cut#tP_BY1t7+1AY%!LaU96lFgcJ} zne`r!bpXuz0%TnPvpBgK7#@IG(m>V+Fv|?cVwl{>s>~QPxt3L(H4n&F0P$J7fh+?s zYcY`J09LbmvMifA>lGkBVX`8dGV5C)s{pKqk%xhy0n8EwvL=9Kb%Cq}V3sS8wE@hE z1+or+S*1YM1u&}@$a(-`F)rV{mi+~jbZSabVs3moV`N}p_#w-{zzU>IfLMi>fkA|yfgwPU zfguJc9^~Tc_F|%?G~@n_q4Sw1Z(&kkE#_iiSTOOTGHV}@u>{0e31qAQF^&Qm8zu)b zE3@7KvJQY*pMb0jU=}+!1H%I_OA^TX0A`s0SqzgKS(OS#2O|0hr|sWNiSm zqJgXfU{*1Zbpg!k2C^Q2Sd2?IuVsJ1Bw1WpT#}j_pPZjpT#}eq5?_#*l9HL19&fpM N16LW-W)0pe0sxq%S9|~f diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/primitive_point_list_gs.h b/src/xenia/gpu/d3d12/shaders/dxbc/primitive_point_list_gs.h index c3e43f552..862b748f3 100644 --- a/src/xenia/gpu/d3d12/shaders/dxbc/primitive_point_list_gs.h +++ b/src/xenia/gpu/d3d12/shaders/dxbc/primitive_point_list_gs.h @@ -1,14 +1,14 @@ // generated from `xb buildhlsl` // source: primitive_point_list.gs.hlsl const uint8_t primitive_point_list_gs[] = { - 0x44, 0x58, 0x42, 0x43, 0x28, 0x19, 0x1A, 0x9F, 0x95, 0x29, 0x2C, 0x7B, - 0x85, 0x9E, 0xC6, 0xCE, 0x7A, 0x50, 0x47, 0xC6, 0x01, 0x00, 0x00, 0x00, - 0xF8, 0x1D, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, - 0x24, 0x0D, 0x00, 0x00, 0x14, 0x0F, 0x00, 0x00, 0x50, 0x11, 0x00, 0x00, - 0x5C, 0x1D, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0xE8, 0x0C, 0x00, 0x00, + 0x44, 0x58, 0x42, 0x43, 0xE4, 0x2A, 0xBA, 0x90, 0x27, 0xBC, 0xFD, 0x8A, + 0xA8, 0x54, 0x57, 0x2A, 0xFF, 0x30, 0xBF, 0x31, 0x01, 0x00, 0x00, 0x00, + 0xFC, 0x1D, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x28, 0x0D, 0x00, 0x00, 0x18, 0x0F, 0x00, 0x00, 0x54, 0x11, 0x00, 0x00, + 0x60, 0x1D, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0xEC, 0x0C, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01, 0x05, 0x53, 0x47, 0x00, 0x05, 0x00, 0x00, - 0xBF, 0x0C, 0x00, 0x00, 0x13, 0x13, 0x44, 0x25, 0x3C, 0x00, 0x00, 0x00, + 0xC1, 0x0C, 0x00, 0x00, 0x13, 0x13, 0x44, 0x25, 0x3C, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -85,86 +85,86 @@ const uint8_t primitive_point_list_gs[] = { 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x56, 0x0A, 0x00, 0x00, - 0x98, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xE8, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0x73, 0x0A, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xA8, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x8E, 0x0A, 0x00, 0x00, 0xA4, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x07, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xA9, 0x0A, 0x00, 0x00, - 0xA8, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x98, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0xC5, 0x0A, 0x00, 0x00, 0xB0, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x75, 0x0A, 0x00, 0x00, 0x9C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xA8, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x90, 0x0A, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xAB, 0x0A, 0x00, 0x00, + 0xA4, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xA8, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xC7, 0x0A, 0x00, 0x00, 0xB0, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0xDC, 0x0A, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xDE, 0x0A, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xF2, 0x0A, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xF4, 0x0A, 0x00, 0x00, 0xD0, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x0B, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x09, 0x0B, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x19, 0x0B, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1B, 0x0B, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x34, 0x0B, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x36, 0x0B, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0x50, 0x0B, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x52, 0x0B, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x6C, 0x0B, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x6E, 0x0B, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x89, 0x0B, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x0B, 0x00, 0x00, 0x30, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0xA1, 0x0B, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0xA3, 0x0B, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0xB9, 0x0B, 0x00, 0x00, 0x50, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xBB, 0x0B, 0x00, 0x00, 0x50, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xD2, 0x0B, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xD4, 0x0B, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0xEB, 0x0B, 0x00, 0x00, 0x70, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0xED, 0x0B, 0x00, 0x00, 0x70, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0xFF, 0x0B, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x0C, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x13, 0x0C, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x15, 0x0C, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0x2B, 0x0C, 0x00, 0x00, 0xA0, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x2D, 0x0C, 0x00, 0x00, 0xA0, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x43, 0x0C, 0x00, 0x00, 0xB0, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x45, 0x0C, 0x00, 0x00, 0xB0, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x5B, 0x0C, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x5D, 0x0C, 0x00, 0x00, 0xC0, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0x73, 0x0C, 0x00, 0x00, 0xD0, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x75, 0x0C, 0x00, 0x00, 0xD0, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x8B, 0x0C, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x8D, 0x0C, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xA5, 0x0C, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xA7, 0x0C, 0x00, 0x00, 0xF0, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, @@ -226,319 +226,225 @@ const uint8_t primitive_point_list_gs[] = { 0x6C, 0x79, 0x5F, 0x6F, 0x66, 0x66, 0x73, 0x65, 0x74, 0x5F, 0x66, 0x72, 0x6F, 0x6E, 0x74, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x70, 0x6F, 0x6C, 0x79, 0x5F, 0x6F, 0x66, 0x66, 0x73, 0x65, 0x74, - 0x5F, 0x62, 0x61, 0x63, 0x6B, 0x00, 0x78, 0x65, 0x5F, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6D, 0x5F, 0x63, 0x6F, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x74, - 0x5F, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6E, 0x67, 0x5F, 0x39, 0x00, 0x78, - 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x73, 0x74, 0x65, 0x6E, - 0x63, 0x69, 0x6C, 0x5F, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6E, 0x63, - 0x65, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x73, - 0x74, 0x65, 0x6E, 0x63, 0x69, 0x6C, 0x5F, 0x72, 0x65, 0x61, 0x64, 0x5F, - 0x6D, 0x61, 0x73, 0x6B, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, - 0x6D, 0x5F, 0x73, 0x74, 0x65, 0x6E, 0x63, 0x69, 0x6C, 0x5F, 0x77, 0x72, - 0x69, 0x74, 0x65, 0x5F, 0x6D, 0x61, 0x73, 0x6B, 0x00, 0x78, 0x65, 0x5F, - 0x65, 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x73, 0x74, 0x65, 0x6E, 0x63, 0x69, - 0x6C, 0x5F, 0x66, 0x72, 0x6F, 0x6E, 0x74, 0x00, 0x78, 0x65, 0x5F, 0x65, - 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x73, 0x74, 0x65, 0x6E, 0x63, 0x69, 0x6C, 0x5F, 0x62, 0x61, 0x63, 0x6B, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, - 0x61, 0x6D, 0x5F, 0x62, 0x61, 0x73, 0x65, 0x5F, 0x64, 0x77, 0x6F, 0x72, - 0x64, 0x73, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, 0x5F, - 0x72, 0x74, 0x5F, 0x66, 0x6C, 0x61, 0x67, 0x73, 0x00, 0x78, 0x65, 0x5F, - 0x65, 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x72, 0x74, 0x5F, 0x70, 0x61, 0x63, - 0x6B, 0x5F, 0x77, 0x69, 0x64, 0x74, 0x68, 0x5F, 0x6C, 0x6F, 0x77, 0x00, - 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x72, 0x74, 0x5F, - 0x70, 0x61, 0x63, 0x6B, 0x5F, 0x6F, 0x66, 0x66, 0x73, 0x65, 0x74, 0x5F, - 0x6C, 0x6F, 0x77, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, - 0x5F, 0x72, 0x74, 0x5F, 0x70, 0x61, 0x63, 0x6B, 0x5F, 0x77, 0x69, 0x64, - 0x74, 0x68, 0x5F, 0x68, 0x69, 0x67, 0x68, 0x00, 0x78, 0x65, 0x5F, 0x65, - 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x72, 0x74, 0x5F, 0x70, 0x61, 0x63, 0x6B, - 0x5F, 0x6F, 0x66, 0x66, 0x73, 0x65, 0x74, 0x5F, 0x68, 0x69, 0x67, 0x68, - 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x6C, 0x6F, - 0x61, 0x64, 0x5F, 0x6D, 0x61, 0x73, 0x6B, 0x5F, 0x72, 0x74, 0x30, 0x31, - 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x6C, 0x6F, - 0x61, 0x64, 0x5F, 0x6D, 0x61, 0x73, 0x6B, 0x5F, 0x72, 0x74, 0x32, 0x33, - 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x6C, 0x6F, - 0x61, 0x64, 0x5F, 0x73, 0x63, 0x61, 0x6C, 0x65, 0x5F, 0x72, 0x74, 0x30, - 0x31, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x6C, - 0x6F, 0x61, 0x64, 0x5F, 0x73, 0x63, 0x61, 0x6C, 0x65, 0x5F, 0x72, 0x74, + 0x61, 0x6D, 0x5F, 0x72, 0x65, 0x73, 0x6F, 0x6C, 0x75, 0x74, 0x69, 0x6F, + 0x6E, 0x5F, 0x73, 0x63, 0x61, 0x6C, 0x65, 0x5F, 0x6C, 0x6F, 0x67, 0x32, + 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x73, 0x74, + 0x65, 0x6E, 0x63, 0x69, 0x6C, 0x5F, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, + 0x6E, 0x63, 0x65, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, + 0x5F, 0x73, 0x74, 0x65, 0x6E, 0x63, 0x69, 0x6C, 0x5F, 0x72, 0x65, 0x61, + 0x64, 0x5F, 0x6D, 0x61, 0x73, 0x6B, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, + 0x72, 0x61, 0x6D, 0x5F, 0x73, 0x74, 0x65, 0x6E, 0x63, 0x69, 0x6C, 0x5F, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x5F, 0x6D, 0x61, 0x73, 0x6B, 0x00, 0x78, + 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x73, 0x74, 0x65, 0x6E, + 0x63, 0x69, 0x6C, 0x5F, 0x66, 0x72, 0x6F, 0x6E, 0x74, 0x00, 0x78, 0x65, + 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x73, 0x74, 0x65, 0x6E, 0x63, + 0x69, 0x6C, 0x5F, 0x62, 0x61, 0x63, 0x6B, 0x00, 0x78, 0x65, 0x5F, 0x65, + 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x62, 0x61, 0x73, 0x65, 0x5F, 0x64, 0x77, + 0x6F, 0x72, 0x64, 0x73, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, + 0x6D, 0x5F, 0x72, 0x74, 0x5F, 0x66, 0x6C, 0x61, 0x67, 0x73, 0x00, 0x78, + 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x72, 0x74, 0x5F, 0x70, + 0x61, 0x63, 0x6B, 0x5F, 0x77, 0x69, 0x64, 0x74, 0x68, 0x5F, 0x6C, 0x6F, + 0x77, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x72, + 0x74, 0x5F, 0x70, 0x61, 0x63, 0x6B, 0x5F, 0x6F, 0x66, 0x66, 0x73, 0x65, + 0x74, 0x5F, 0x6C, 0x6F, 0x77, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, + 0x61, 0x6D, 0x5F, 0x72, 0x74, 0x5F, 0x70, 0x61, 0x63, 0x6B, 0x5F, 0x77, + 0x69, 0x64, 0x74, 0x68, 0x5F, 0x68, 0x69, 0x67, 0x68, 0x00, 0x78, 0x65, + 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x72, 0x74, 0x5F, 0x70, 0x61, + 0x63, 0x6B, 0x5F, 0x6F, 0x66, 0x66, 0x73, 0x65, 0x74, 0x5F, 0x68, 0x69, + 0x67, 0x68, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, 0x5F, + 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x6D, 0x61, 0x73, 0x6B, 0x5F, 0x72, 0x74, + 0x30, 0x31, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, 0x5F, + 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x6D, 0x61, 0x73, 0x6B, 0x5F, 0x72, 0x74, 0x32, 0x33, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, 0x5F, - 0x62, 0x6C, 0x65, 0x6E, 0x64, 0x5F, 0x72, 0x74, 0x30, 0x31, 0x00, 0x78, - 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x62, 0x6C, 0x65, 0x6E, - 0x64, 0x5F, 0x72, 0x74, 0x32, 0x33, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, - 0x72, 0x61, 0x6D, 0x5F, 0x62, 0x6C, 0x65, 0x6E, 0x64, 0x5F, 0x63, 0x6F, - 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x74, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, - 0x72, 0x61, 0x6D, 0x5F, 0x73, 0x74, 0x6F, 0x72, 0x65, 0x5F, 0x6D, 0x69, - 0x6E, 0x5F, 0x72, 0x74, 0x30, 0x31, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, - 0x72, 0x61, 0x6D, 0x5F, 0x73, 0x74, 0x6F, 0x72, 0x65, 0x5F, 0x6D, 0x69, - 0x6E, 0x5F, 0x72, 0x74, 0x32, 0x33, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, - 0x72, 0x61, 0x6D, 0x5F, 0x73, 0x74, 0x6F, 0x72, 0x65, 0x5F, 0x6D, 0x61, - 0x78, 0x5F, 0x72, 0x74, 0x30, 0x31, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, - 0x72, 0x61, 0x6D, 0x5F, 0x73, 0x74, 0x6F, 0x72, 0x65, 0x5F, 0x6D, 0x61, - 0x78, 0x5F, 0x72, 0x74, 0x32, 0x33, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, - 0x72, 0x61, 0x6D, 0x5F, 0x73, 0x74, 0x6F, 0x72, 0x65, 0x5F, 0x73, 0x63, - 0x61, 0x6C, 0x65, 0x5F, 0x72, 0x74, 0x30, 0x31, 0x00, 0x78, 0x65, 0x5F, + 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x73, 0x63, 0x61, 0x6C, 0x65, 0x5F, 0x72, + 0x74, 0x30, 0x31, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, + 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x73, 0x63, 0x61, 0x6C, 0x65, 0x5F, + 0x72, 0x74, 0x32, 0x33, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, + 0x6D, 0x5F, 0x62, 0x6C, 0x65, 0x6E, 0x64, 0x5F, 0x72, 0x74, 0x30, 0x31, + 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x62, 0x6C, + 0x65, 0x6E, 0x64, 0x5F, 0x72, 0x74, 0x32, 0x33, 0x00, 0x78, 0x65, 0x5F, + 0x65, 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x62, 0x6C, 0x65, 0x6E, 0x64, 0x5F, + 0x63, 0x6F, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x74, 0x00, 0x78, 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x73, 0x74, 0x6F, 0x72, 0x65, 0x5F, - 0x73, 0x63, 0x61, 0x6C, 0x65, 0x5F, 0x72, 0x74, 0x32, 0x33, 0x00, 0x4D, - 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, - 0x20, 0x48, 0x4C, 0x53, 0x4C, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, - 0x20, 0x43, 0x6F, 0x6D, 0x70, 0x69, 0x6C, 0x65, 0x72, 0x20, 0x31, 0x30, - 0x2E, 0x31, 0x00, 0xAB, 0x49, 0x53, 0x47, 0x4E, 0xE8, 0x01, 0x00, 0x00, - 0x13, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xD0, 0x01, 0x00, 0x00, + 0x6D, 0x69, 0x6E, 0x5F, 0x72, 0x74, 0x30, 0x31, 0x00, 0x78, 0x65, 0x5F, + 0x65, 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x73, 0x74, 0x6F, 0x72, 0x65, 0x5F, + 0x6D, 0x69, 0x6E, 0x5F, 0x72, 0x74, 0x32, 0x33, 0x00, 0x78, 0x65, 0x5F, + 0x65, 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x73, 0x74, 0x6F, 0x72, 0x65, 0x5F, + 0x6D, 0x61, 0x78, 0x5F, 0x72, 0x74, 0x30, 0x31, 0x00, 0x78, 0x65, 0x5F, + 0x65, 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x73, 0x74, 0x6F, 0x72, 0x65, 0x5F, + 0x6D, 0x61, 0x78, 0x5F, 0x72, 0x74, 0x32, 0x33, 0x00, 0x78, 0x65, 0x5F, + 0x65, 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x73, 0x74, 0x6F, 0x72, 0x65, 0x5F, + 0x73, 0x63, 0x61, 0x6C, 0x65, 0x5F, 0x72, 0x74, 0x30, 0x31, 0x00, 0x78, + 0x65, 0x5F, 0x65, 0x64, 0x72, 0x61, 0x6D, 0x5F, 0x73, 0x74, 0x6F, 0x72, + 0x65, 0x5F, 0x73, 0x63, 0x61, 0x6C, 0x65, 0x5F, 0x72, 0x74, 0x32, 0x33, + 0x00, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x28, + 0x52, 0x29, 0x20, 0x48, 0x4C, 0x53, 0x4C, 0x20, 0x53, 0x68, 0x61, 0x64, + 0x65, 0x72, 0x20, 0x43, 0x6F, 0x6D, 0x70, 0x69, 0x6C, 0x65, 0x72, 0x20, + 0x31, 0x30, 0x2E, 0x31, 0x00, 0xAB, 0xAB, 0xAB, 0x49, 0x53, 0x47, 0x4E, + 0xE8, 0x01, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0xD0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, + 0xD0, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, + 0xD0, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, + 0xD0, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, + 0xD0, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, + 0xD0, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, + 0xD0, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, + 0xD0, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, + 0xD0, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, + 0xD0, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, + 0xD0, 0x01, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, + 0xD0, 0x01, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, + 0xD0, 0x01, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, + 0xD0, 0x01, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, + 0xD0, 0x01, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, + 0xD0, 0x01, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, + 0xD0, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x07, 0x04, 0x00, 0x00, + 0xD0, 0x01, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, + 0xD9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, + 0x54, 0x45, 0x58, 0x43, 0x4F, 0x4F, 0x52, 0x44, 0x00, 0x53, 0x56, 0x5F, + 0x50, 0x6F, 0x73, 0x69, 0x74, 0x69, 0x6F, 0x6E, 0x00, 0xAB, 0xAB, 0xAB, + 0x4F, 0x53, 0x47, 0x35, 0x34, 0x02, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0xD0, 0x01, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0xD0, 0x01, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0xD0, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1C, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1C, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0xD0, 0x01, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0xD0, 0x01, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0xD0, 0x01, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1C, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1C, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0xD0, 0x01, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0xD0, 0x01, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0xD0, 0x01, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1C, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1C, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x02, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0xD0, 0x01, 0x00, 0x00, - 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0xD0, 0x01, 0x00, 0x00, - 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x0B, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0xD0, 0x01, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1C, 0x02, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1C, 0x02, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, + 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x02, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x0C, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0xD0, 0x01, 0x00, 0x00, - 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x0D, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0xD0, 0x01, 0x00, 0x00, - 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x0E, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0xD0, 0x01, 0x00, 0x00, + 0x0C, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1C, 0x02, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1C, 0x02, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, + 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x02, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0xD0, 0x01, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x07, 0x04, 0x00, 0x00, 0xD0, 0x01, 0x00, 0x00, - 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x11, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0xD9, 0x01, 0x00, 0x00, + 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1C, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x07, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1C, 0x02, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, + 0x03, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x12, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0x54, 0x45, 0x58, 0x43, + 0x12, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4F, 0x4F, 0x52, 0x44, 0x00, 0x53, 0x56, 0x5F, 0x50, 0x6F, 0x73, 0x69, - 0x74, 0x69, 0x6F, 0x6E, 0x00, 0xAB, 0xAB, 0xAB, 0x4F, 0x53, 0x47, 0x35, - 0x34, 0x02, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1C, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x02, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1C, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1C, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x02, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1C, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1C, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x02, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1C, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1C, 0x02, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x02, 0x00, 0x00, - 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1C, 0x02, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1C, 0x02, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, - 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x02, 0x00, 0x00, - 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x0D, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1C, 0x02, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1C, 0x02, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, - 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x02, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1C, 0x02, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x03, 0x0C, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x25, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, - 0x0F, 0x00, 0x00, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4F, 0x4F, 0x52, 0x44, - 0x00, 0x53, 0x56, 0x5F, 0x50, 0x6F, 0x73, 0x69, 0x74, 0x69, 0x6F, 0x6E, - 0x00, 0xAB, 0xAB, 0xAB, 0x53, 0x48, 0x45, 0x58, 0x04, 0x0C, 0x00, 0x00, - 0x51, 0x00, 0x02, 0x00, 0x01, 0x03, 0x00, 0x00, 0x6A, 0x08, 0x00, 0x01, - 0x59, 0x00, 0x00, 0x07, 0x46, 0x8E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x04, 0xF2, 0x10, 0x20, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x04, - 0xF2, 0x10, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x74, 0x69, 0x6F, 0x6E, 0x00, 0xAB, 0xAB, 0xAB, 0x53, 0x48, 0x45, 0x58, + 0x04, 0x0C, 0x00, 0x00, 0x51, 0x00, 0x02, 0x00, 0x01, 0x03, 0x00, 0x00, + 0x6A, 0x08, 0x00, 0x01, 0x59, 0x00, 0x00, 0x07, 0x46, 0x8E, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x04, + 0xF2, 0x10, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x04, 0xF2, 0x10, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x04, 0xF2, 0x10, 0x20, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x04, - 0xF2, 0x10, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x04, 0xF2, 0x10, 0x20, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x04, + 0xF2, 0x10, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x04, 0xF2, 0x10, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x04, 0xF2, 0x10, 0x20, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x04, - 0xF2, 0x10, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x04, 0xF2, 0x10, 0x20, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x04, + 0xF2, 0x10, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x04, 0xF2, 0x10, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x04, 0xF2, 0x10, 0x20, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x04, - 0xF2, 0x10, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x04, 0xF2, 0x10, 0x20, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x04, + 0xF2, 0x10, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x04, 0xF2, 0x10, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x0B, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x04, 0xF2, 0x10, 0x20, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x04, - 0xF2, 0x10, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x04, 0xF2, 0x10, 0x20, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x04, + 0xF2, 0x10, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x04, 0xF2, 0x10, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x0E, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x04, 0xF2, 0x10, 0x20, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x04, - 0x72, 0x10, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x5F, 0x00, 0x00, 0x04, 0x32, 0x10, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x11, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x05, 0xF2, 0x10, 0x20, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x68, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x5D, 0x08, 0x00, 0x01, - 0x8F, 0x00, 0x00, 0x03, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x5C, 0x28, 0x00, 0x01, 0x65, 0x00, 0x00, 0x03, 0xF2, 0x20, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xF2, 0x20, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xF2, 0x20, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xF2, 0x20, 0x10, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xF2, 0x20, 0x10, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xF2, 0x20, 0x10, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xF2, 0x20, 0x10, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xF2, 0x20, 0x10, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xF2, 0x20, 0x10, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xF2, 0x20, 0x10, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xF2, 0x20, 0x10, 0x00, - 0x0A, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xF2, 0x20, 0x10, 0x00, - 0x0B, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xF2, 0x20, 0x10, 0x00, - 0x0C, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xF2, 0x20, 0x10, 0x00, - 0x0D, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xF2, 0x20, 0x10, 0x00, - 0x0E, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xF2, 0x20, 0x10, 0x00, - 0x0F, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0x72, 0x20, 0x10, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0x32, 0x20, 0x10, 0x00, - 0x11, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, 0xF2, 0x20, 0x10, 0x00, - 0x12, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x5E, 0x00, 0x00, 0x02, - 0x04, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x08, 0x12, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2A, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x37, 0x00, 0x00, 0x0C, 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x1A, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x46, 0x80, 0x30, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x34, 0x00, 0x00, 0x09, 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x46, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x8A, 0x30, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x33, 0x00, 0x00, 0x09, 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x46, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0x8F, 0x30, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x09, 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x46, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x80, 0x30, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x08, 0xC2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x06, 0x04, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0x1F, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0D, - 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0xE6, 0x0E, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0xBF, - 0x00, 0x00, 0x80, 0x3F, 0x00, 0x00, 0x80, 0x3F, 0x00, 0x00, 0x80, 0xBF, - 0x46, 0x14, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x0A, 0x00, 0x00, 0x00, - 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x0B, 0x00, 0x00, 0x00, - 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x0C, 0x00, 0x00, 0x00, - 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x0D, 0x00, 0x00, 0x00, - 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x0E, 0x00, 0x00, 0x00, - 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x0F, 0x00, 0x00, 0x00, - 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x08, 0x32, 0x20, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3F, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, - 0x42, 0x20, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x2A, 0x10, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, - 0x32, 0x20, 0x10, 0x00, 0x11, 0x00, 0x00, 0x00, 0x46, 0x10, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, - 0x32, 0x20, 0x10, 0x00, 0x12, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xC2, 0x20, 0x10, 0x00, - 0x12, 0x00, 0x00, 0x00, 0xA6, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x12, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x03, 0x00, 0x00, 0x11, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0B, 0xC2, 0x00, 0x10, 0x00, + 0x0D, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x04, 0xF2, 0x10, 0x20, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x04, + 0xF2, 0x10, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, + 0x5F, 0x00, 0x00, 0x04, 0x72, 0x10, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x04, 0x32, 0x10, 0x20, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x05, + 0xF2, 0x10, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, + 0x5D, 0x08, 0x00, 0x01, 0x8F, 0x00, 0x00, 0x03, 0x00, 0x00, 0x11, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5C, 0x28, 0x00, 0x01, 0x65, 0x00, 0x00, 0x03, + 0xF2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, + 0xF2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, + 0xF2, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, + 0xF2, 0x20, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, + 0xF2, 0x20, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, + 0xF2, 0x20, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, + 0xF2, 0x20, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, + 0xF2, 0x20, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, + 0xF2, 0x20, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, + 0xF2, 0x20, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, + 0xF2, 0x20, 0x10, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, + 0xF2, 0x20, 0x10, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, + 0xF2, 0x20, 0x10, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, + 0xF2, 0x20, 0x10, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, + 0xF2, 0x20, 0x10, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, + 0xF2, 0x20, 0x10, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, + 0x72, 0x20, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, + 0x32, 0x20, 0x10, 0x00, 0x11, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, + 0xF2, 0x20, 0x10, 0x00, 0x12, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x5E, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x08, + 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2A, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x0C, 0x32, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xA6, 0x1A, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x46, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x09, 0x32, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xA6, 0x8A, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x09, 0x32, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xF6, 0x8F, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x09, 0x32, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x08, 0xC2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0x1F, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, - 0x06, 0x14, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x0A, 0x00, 0x00, 0x00, - 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x0B, 0x00, 0x00, 0x00, - 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x0C, 0x00, 0x00, 0x00, - 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x0D, 0x00, 0x00, 0x00, - 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x0E, 0x00, 0x00, 0x00, - 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x0F, 0x00, 0x00, 0x00, - 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x08, 0x32, 0x20, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3F, 0x00, 0x00, 0x80, 0x3F, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, - 0x42, 0x20, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x2A, 0x10, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, - 0x32, 0x20, 0x10, 0x00, 0x11, 0x00, 0x00, 0x00, 0x46, 0x10, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, - 0x32, 0x20, 0x10, 0x00, 0x12, 0x00, 0x00, 0x00, 0xE6, 0x0A, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xC2, 0x20, 0x10, 0x00, - 0x12, 0x00, 0x00, 0x00, 0xA6, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x12, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x03, 0x00, 0x00, 0x11, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0C, 0x32, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xF6, 0x1F, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x12, 0x00, 0x00, 0x00, 0x46, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x32, 0x00, 0x00, 0x0D, 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xE6, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xBF, 0x00, 0x00, 0x80, 0x3F, 0x00, 0x00, 0x80, 0x3F, + 0x00, 0x00, 0x80, 0xBF, 0x46, 0x14, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, @@ -573,16 +479,67 @@ const uint8_t primitive_point_list_gs[] = { 0x0F, 0x00, 0x00, 0x00, 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x08, 0x32, 0x20, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0x42, 0x20, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x2A, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0x32, 0x20, 0x10, 0x00, 0x11, 0x00, 0x00, 0x00, 0x46, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x32, 0x20, 0x10, 0x00, 0x12, 0x00, 0x00, 0x00, - 0x46, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, + 0x46, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xC2, 0x20, 0x10, 0x00, 0x12, 0x00, 0x00, 0x00, 0xA6, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, + 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0B, + 0xC2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xF6, 0x1F, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x12, 0x00, 0x00, 0x00, 0x06, 0x14, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x12, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, + 0x0A, 0x00, 0x00, 0x00, 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, + 0x0B, 0x00, 0x00, 0x00, 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0B, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, + 0x0C, 0x00, 0x00, 0x00, 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0C, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, + 0x0D, 0x00, 0x00, 0x00, 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0D, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, + 0x0E, 0x00, 0x00, 0x00, 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0E, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, + 0x0F, 0x00, 0x00, 0x00, 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0F, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x08, 0x32, 0x20, 0x10, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3F, + 0x00, 0x00, 0x80, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x06, 0x42, 0x20, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x2A, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x06, 0x32, 0x20, 0x10, 0x00, 0x11, 0x00, 0x00, 0x00, + 0x46, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x05, 0x32, 0x20, 0x10, 0x00, 0x12, 0x00, 0x00, 0x00, + 0xE6, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, + 0xC2, 0x20, 0x10, 0x00, 0x12, 0x00, 0x00, 0x00, 0xA6, 0x1E, 0x20, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0C, + 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x80, + 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0x1F, 0x20, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x46, 0x10, 0x20, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x1E, 0x20, 0x00, @@ -616,29 +573,72 @@ const uint8_t primitive_point_list_gs[] = { 0xF2, 0x20, 0x10, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x08, 0x32, 0x20, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0x42, 0x20, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x2A, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0x32, 0x20, 0x10, 0x00, 0x11, 0x00, 0x00, 0x00, 0x46, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x32, 0x20, 0x10, 0x00, - 0x12, 0x00, 0x00, 0x00, 0xE6, 0x0A, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x12, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xC2, 0x20, 0x10, 0x00, 0x12, 0x00, 0x00, 0x00, 0xA6, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x03, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x76, 0x00, 0x00, 0x03, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3E, 0x00, 0x00, 0x01, 0x53, 0x54, 0x41, 0x54, 0x94, 0x00, 0x00, 0x00, - 0x63, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x26, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x0A, 0x00, 0x00, 0x00, + 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x0B, 0x00, 0x00, 0x00, + 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x0C, 0x00, 0x00, 0x00, + 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x0D, 0x00, 0x00, 0x00, + 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x0E, 0x00, 0x00, 0x00, + 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x06, 0xF2, 0x20, 0x10, 0x00, 0x0F, 0x00, 0x00, 0x00, + 0x46, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x08, 0x32, 0x20, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, + 0x42, 0x20, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x2A, 0x10, 0x20, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, + 0x32, 0x20, 0x10, 0x00, 0x11, 0x00, 0x00, 0x00, 0x46, 0x10, 0x20, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, + 0x32, 0x20, 0x10, 0x00, 0x12, 0x00, 0x00, 0x00, 0xE6, 0x0A, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xC2, 0x20, 0x10, 0x00, + 0x12, 0x00, 0x00, 0x00, 0xA6, 0x1E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x12, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x03, 0x00, 0x00, 0x11, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x03, 0x00, 0x00, 0x11, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, 0x53, 0x54, 0x41, 0x54, + 0x94, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/primitive_point_list_gs.txt b/src/xenia/gpu/d3d12/shaders/dxbc/primitive_point_list_gs.txt index 6330eaf09..225c6c600 100644 --- a/src/xenia/gpu/d3d12/shaders/dxbc/primitive_point_list_gs.txt +++ b/src/xenia/gpu/d3d12/shaders/dxbc/primitive_point_list_gs.txt @@ -27,10 +27,10 @@ // float2 xe_edram_depth_range; // Offset: 128 Size: 8 [unused] // float2 xe_edram_poly_offset_front; // Offset: 136 Size: 8 [unused] // float2 xe_edram_poly_offset_back; // Offset: 144 Size: 8 [unused] -// float2 xe_system_constant_padding_9;// Offset: 152 Size: 8 [unused] -// uint xe_edram_stencil_reference; // Offset: 160 Size: 4 [unused] -// uint xe_edram_stencil_read_mask; // Offset: 164 Size: 4 [unused] -// uint xe_edram_stencil_write_mask; // Offset: 168 Size: 4 [unused] +// uint xe_edram_resolution_scale_log2;// Offset: 152 Size: 4 [unused] +// uint xe_edram_stencil_reference; // Offset: 156 Size: 4 [unused] +// uint xe_edram_stencil_read_mask; // Offset: 160 Size: 4 [unused] +// uint xe_edram_stencil_write_mask; // Offset: 164 Size: 4 [unused] // uint4 xe_edram_stencil_front; // Offset: 176 Size: 16 [unused] // uint4 xe_edram_stencil_back; // Offset: 192 Size: 16 [unused] // uint4 xe_edram_base_dwords; // Offset: 208 Size: 16 [unused] diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/resolve_ps.cso b/src/xenia/gpu/d3d12/shaders/dxbc/resolve_ps.cso index a8d9c0188e1c0c430afc839fbb5715d544447afc..574c9e7e5d212dc8622be126aa647f2a03a730c1 100644 GIT binary patch delta 576 zcmY*WJxc>Y5S`u2?RjSiQ7nW5#nwVi6hE-YCWiDD2^LmrXQMW;OK+jzia$XRY}Ce1 zvB*CV6cq9U6vX1N5qz_|hdA(d_RYNc*t@&ZYpK%QXsp%W&)U7|e!P0~)BK)!>k1;; zjEF+`1>jH;T>%5&;kt4wY5PiGe?U5sf1Z;wZSX*eKNJQlhBk4s9){2Gt1ClP-S}1WLl|R8IXknMm z|KJz+2LfUd5J7yimknAtF!OHa&Ay$Tdnw!(D%<;8_4ejQ`D8bG>UEz73t!)_3P3Fa zLgEU&t$`c*8~wUpxz)M5DPV`p&<=HLnq}+(`41EUtAfQfQ80OCv{fKFAS1QW#geP} zz*;P)gliOt_Bfc!32Oq$y1{J6sg8MJYSg=un`r(HGn3`#K&d*`({-}S%6^8Y%Ge`wSSpkCI}nWRqp7RV&PVI^ GT?Ic|Bsm`d diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/resolve_ps.h b/src/xenia/gpu/d3d12/shaders/dxbc/resolve_ps.h index 97880e853..b3a29f253 100644 --- a/src/xenia/gpu/d3d12/shaders/dxbc/resolve_ps.h +++ b/src/xenia/gpu/d3d12/shaders/dxbc/resolve_ps.h @@ -1,11 +1,11 @@ // generated from `xb buildhlsl` // source: resolve.ps.hlsl const uint8_t resolve_ps[] = { - 0x44, 0x58, 0x42, 0x43, 0x78, 0x3D, 0x3C, 0x19, 0x6A, 0x53, 0x07, 0xDA, - 0x96, 0x91, 0xDB, 0xBF, 0x2B, 0xFB, 0xFE, 0xDD, 0x01, 0x00, 0x00, 0x00, - 0x38, 0x07, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x44, 0x58, 0x42, 0x43, 0x41, 0xEC, 0x94, 0x55, 0x7F, 0x2A, 0xC6, 0x09, + 0x3B, 0xB2, 0xFD, 0x44, 0xF8, 0x2E, 0xDD, 0x77, 0x01, 0x00, 0x00, 0x00, + 0x5C, 0x07, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x78, 0x02, 0x00, 0x00, 0xAC, 0x02, 0x00, 0x00, 0xE0, 0x02, 0x00, 0x00, - 0x9C, 0x06, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0x3C, 0x02, 0x00, 0x00, + 0xC0, 0x06, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0x3C, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xEC, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01, 0x05, 0xFF, 0xFF, 0x00, 0x05, 0x00, 0x00, 0x14, 0x02, 0x00, 0x00, 0x13, 0x13, 0x44, 0x25, 0x3C, 0x00, 0x00, 0x00, @@ -62,8 +62,8 @@ const uint8_t resolve_ps[] = { 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5F, 0x54, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x00, 0xAB, 0xAB, 0x53, 0x48, 0x45, 0x58, 0xB4, 0x03, 0x00, 0x00, - 0x51, 0x00, 0x00, 0x00, 0xED, 0x00, 0x00, 0x00, 0x6A, 0x08, 0x00, 0x01, + 0x74, 0x00, 0xAB, 0xAB, 0x53, 0x48, 0x45, 0x58, 0xD8, 0x03, 0x00, 0x00, + 0x51, 0x00, 0x00, 0x00, 0xF6, 0x00, 0x00, 0x00, 0x6A, 0x08, 0x00, 0x01, 0x59, 0x00, 0x00, 0x07, 0x46, 0x8E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5A, 0x00, 0x00, 0x06, 0x46, 0x6E, 0x30, 0x00, @@ -73,49 +73,52 @@ const uint8_t resolve_ps[] = { 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x20, 0x00, 0x04, 0x32, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xF2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0C, - 0xF2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x89, 0x30, 0x00, + 0x68, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x11, + 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xF6, 0x8F, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x05, 0x72, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x3F, 0x34, 0x00, 0x00, 0x07, 0x92, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x14, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0C, + 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x36, 0x89, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, - 0x92, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x0C, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x07, 0x62, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0xF6, 0x8E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x92, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x0C, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x07, 0x62, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xF6, 0x8E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, - 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, - 0x1E, 0x00, 0x00, 0x0A, 0x92, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x06, 0x04, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x0A, 0x92, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x06, 0x04, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x05, 0xF2, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x05, 0x92, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x06, 0x0C, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0x92, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x06, 0x0C, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x14, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x11, 0x32, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0x8F, 0x30, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x56, 0x00, 0x00, 0x05, 0x32, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x46, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0C, - 0x92, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, - 0x06, 0x0C, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, - 0x92, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0C, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBF, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBF, - 0x00, 0x00, 0x00, 0x0A, 0x62, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x56, 0x06, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBF, 0x00, 0x00, 0x00, 0xBF, - 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x0A, 0x92, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x06, 0x0C, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x33, 0x00, 0x00, 0x07, - 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x05, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xC6, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x0C, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0C, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0C, 0x32, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x96, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x3F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x32, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBF, 0x00, 0x00, 0x00, 0xBF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x05, + 0xC2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x09, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0xC2, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xA6, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xBF, 0x00, 0x00, 0x00, 0xBF, 0x33, 0x00, 0x00, 0x07, + 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0x0A, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0C, 0xC2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x84, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -125,7 +128,7 @@ const uint8_t resolve_ps[] = { 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x05, 0xC2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xA6, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x07, + 0xA6, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x07, 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x0D, 0xF2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -134,7 +137,7 @@ const uint8_t resolve_ps[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x00, 0x00, 0x0B, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x01, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x3A, 0x80, 0x30, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x00, 0x05, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x05, @@ -142,14 +145,14 @@ const uint8_t resolve_ps[] = { 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0xF2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, - 0x53, 0x54, 0x41, 0x54, 0x94, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x53, 0x54, 0x41, 0x54, 0x94, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x0B, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/resolve_ps.txt b/src/xenia/gpu/d3d12/shaders/dxbc/resolve_ps.txt index 953af7240..b13a7fd9b 100644 --- a/src/xenia/gpu/d3d12/shaders/dxbc/resolve_ps.txt +++ b/src/xenia/gpu/d3d12/shaders/dxbc/resolve_ps.txt @@ -44,30 +44,32 @@ dcl_sampler S0[0:0], mode_default, space=0 dcl_resource_texture2d (float,float,float,float) T0[0:0], space=0 dcl_input_ps_siv linear noperspective v0.xy, position dcl_output o0.xyzw -dcl_temps 2 -ushr r0.xyzw, CB0[0][0].wxyz, l(1, 16, 16, 16) -mov r1.xw, r0.xxxw -mov r1.yz, CB0[0][0].wwzw -and r1.xyzw, r1.xyzw, l(1, 1, 0x0000ffff, 0x0000ffff) -iadd r0.xw, r1.xxxy, l(1, 0, 0, 1) -utof r0.xyzw, r0.xyzw -mul r0.xw, r0.xxxw, v0.xxxy -ubfe r1.xy, l(2, 2, 0, 0), l(4, 2, 0, 0), CB0[0][0].wwww -utof r1.xy, r1.xyxx -mad r0.xw, r1.xxxy, l(0.500000, 0.000000, 0.000000, 0.500000), r0.xxxw -add r0.xw, r0.xxxw, l(-0.500000, 0.000000, 0.000000, -0.500000) -add r0.yz, r0.yyzy, l(0.000000, -0.500000, -0.500000, 0.000000) -max r0.xw, r0.xxxw, l(0.500000, 0.000000, 0.000000, 0.500000) -min r0.xy, r0.yzyy, r0.xwxx +dcl_temps 3 +ubfe r0.xyz, l(1, 2, 2, 0), l(6, 4, 2, 0), CB0[0][0].wwww +utof r0.xyz, r0.xyzx +add r0.x, r0.x, l(0.500000) +max r0.xw, r0.xxxx, v0.xxxy +ushr r1.xyzw, CB0[0][0].wxyz, l(1, 16, 16, 16) +mov r2.xw, r1.xxxw +mov r2.yz, CB0[0][0].wwzw +and r2.xyzw, r2.xyzw, l(1, 1, 0x0000ffff, 0x0000ffff) +iadd r1.xw, r2.xxxy, l(1, 0, 0, 1) +utof r1.xw, r1.xxxw +mul r0.xw, r0.xxxw, r1.xxxw +mad r0.xy, r0.yzyy, l(0.500000, 0.500000, 0.000000, 0.000000), r0.xwxx +add r0.xy, r0.xyxx, l(-0.500000, -0.500000, 0.000000, 0.000000) +utof r0.zw, r1.yyyz +add r0.zw, r0.zzzw, l(0.000000, 0.000000, -0.500000, -0.500000) +min r0.xy, r0.zwzz, r0.xyxx and r0.zw, CB0[0][0].xxxy, l(0, 0, 0x0000ffff, 0x0000ffff) utof r0.zw, r0.zzzw add r0.xy, r0.zwzz, r0.xyxx -utof r0.zw, r1.zzzw +utof r0.zw, r2.zzzw div r0.xy, r0.xyxx, r0.zwzz sample_l r0.xyzw, r0.xyxx, T0[0].xyzw, S0[0], l(0.000000) -ibfe r1.x, l(6), l(6), CB0[0][0].w +ibfe r1.x, l(6), l(7), CB0[0][0].w itof r1.x, r1.x exp r1.x, r1.x mul o0.xyzw, r0.xyzw, r1.xxxx ret -// Approximately 25 instruction slots used +// Approximately 27 instruction slots used diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_128bpb_2x_cs.cso b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_128bpb_2x_cs.cso new file mode 100644 index 0000000000000000000000000000000000000000..aaf8de486b7e2630130ac9b4f3c7a1526c45cf42 GIT binary patch literal 6072 zcmb`K&1+m$7{<@sH2p|pn|`U3Vq#OFjYZnD3n`^sn{=!YwKi?7t8tP{n$a{9W+t=< z7A*==tcbW1K^GPw*p-MIU5JS2Kj1Rx#)Y`(LfqBockg+VGdFiSvGfgR&bjA(-sk-| zANOYT;>nSpei{9)eDlNp<2QDFb^EjZM+(llZy#~4Tm4bBof_;@JF2!v^Jhm-6@Odj z9Jqhgy3~%V6}rbqFuE<>jvb>l5)A^(H?@=}752hJX3zyAm|k_o-lDI^hlqNA8_)Md7GxCtO*$KH+Q)-qAB+aasSR z=J#mc_wHsy zSh!B{Wf%X_f>ysYQEpV+)RkI&$}KJ~YDa4yg*!>af&8I>^Lgg0&B>Wnx|y1}$XX?u ze4|G7jb!^)W*csyI@dhn77IySeu08`Z1|>BSr64l>By9usMThj@*=DDd3~Q_pM)_n zTbq2nv5LDgH&rdq%~cvLsZ}Hb z4?T5Qi~ZdAvoEj*5&9Q1&*P_0U0mAc+)KLbt}3qAHoC$qy3UFpuzOcTS79Qb>-s8Q zYt^Cnl=;68r=Z}sr0rkV37ApO9r=m2I_H+gN}W+y_2kL9VidXJ^%ZU^sC#$AcCX*< z`yStix}l7&->vI1+zGkbrS_P7-SN2TLgc33Uh&2G8*pwDzKCo0TPr#}x9# zardzR$J}}6dho%xxTR0ON<2>Q0DQ2!X~Ojm3rCI*zq{fKT@@GJ7(U^7b#-1{-mXXeG0$T*s(CIC?_+c)eXeGQ57uBXs6AW=J-J(* zmFvzQynPf);bpseS`_QY3ps67yU?9-MX??-BA>kzo(~-B6~+3I;5W5&?$+j1C;!_F zAH@Plz|oK>){lg`Jd}+14oO)qtY79x_6TZnw>`qX4c7$y4b|kjj}L5@=IE)V)thx= z{fWWW+c1hZcW-bxg zZ4wSY;LXpFkC7brYK(wMzWdZ8RwH^ud!!KF9p7kOktj~%BSw6Xm(FK$PbGB??jQ8{ z=~vHw4r_1qu>EZHv^cD0mP5Pq$Q`cw_YC_Qx9m-n_Oj8?^0)P}_=tgZM9gm%yGuH9 z;oH<=vRJ{M^!~vZf8IU~?=rI=^0vyc=OaJnEKs9Je8g$OocwJwTokwJ!7>-5o%}EG z&(<`*^}Q)?mV^9E7)P;lThyCyMu~~sjAKxD!dV~Zt)7*5%{TcY>${eHww$qE>8KY% zEt37?d-+-3FIJxft2GVZE4CK&$)1v(-2<$ttpz&lSSRL82RF~Qh9Mq*oDsuVta<(o z15c+jMy&WzoeP{Z_BJsi#D(CC`pH-BH$alBFq|!MEx%`t8~Y`F)DL=l!IFJzJ^qOq z5oS4N?2+vEhQ&q97E^-r_@3b0Gfz(2P3L=J^6Sv^yPvZ=Kavi?`+(XZwJ-el5wTia z#cOC&F+H5SJzt)_OM1&SPY;{r7wXUZ+OZDdca_zixLyu0#F&fqwLoVWYJt6dzoFy& z-w_A*5#MU)qc}awoGELXZ^40&V*T80{Zsr2jy=2S_|{r$ zcq|8ctM$F=XuiW5GPXLl)02PJ2A^RJo$AP0gU9M;{r%Rl6W?0v2+#kmqxsI(#Ol~i zPySgOe1|b~s-wbnQT*WQC^{F#?fKSPN71agj+}AwMxuCiO{|VmyC`0*&zmzodibfM z?#)fZ{!S@sw_?X#LNfuwyC0kI-NxQ7#3|O^Szy9@n&&~4j`up_A^G5al5qK6`sCXt zoD1I>GF#@f_a|8MGn9FM-jcsNOOIogh~dbayt3aQaFGYq&a=e^TkM>VPpYY&$@_)>58DYjKWKsTKO?F} A@Bjb+ literal 0 HcmV?d00001 diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_128bpb_2x_cs.h b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_128bpb_2x_cs.h new file mode 100644 index 000000000..b5a183405 --- /dev/null +++ b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_128bpb_2x_cs.h @@ -0,0 +1,510 @@ +// generated from `xb buildhlsl` +// source: texture_load_128bpb_2x.cs.hlsl +const uint8_t texture_load_128bpb_2x_cs[] = { + 0x44, 0x58, 0x42, 0x43, 0xC6, 0xCA, 0x44, 0xBD, 0x61, 0x8D, 0x90, 0x1F, + 0x3C, 0x8A, 0x15, 0xAD, 0xAE, 0xA0, 0x28, 0x33, 0x01, 0x00, 0x00, 0x00, + 0xB8, 0x17, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x14, 0x05, 0x00, 0x00, 0x24, 0x05, 0x00, 0x00, 0x34, 0x05, 0x00, 0x00, + 0x1C, 0x17, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0xD8, 0x04, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x3C, 0x00, 0x00, 0x00, 0x01, 0x05, 0x53, 0x43, 0x00, 0x05, 0x00, 0x00, + 0xAE, 0x04, 0x00, 0x00, 0x13, 0x13, 0x44, 0x25, 0x3C, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, + 0x24, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xB4, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xCB, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, + 0x6F, 0x61, 0x64, 0x5F, 0x73, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x00, 0x78, + 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, 0x6F, + 0x61, 0x64, 0x5F, 0x64, 0x65, 0x73, 0x74, 0x00, 0x58, 0x65, 0x54, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x4C, 0x6F, 0x61, 0x64, 0x43, 0x6F, 0x6E, + 0x73, 0x74, 0x61, 0x6E, 0x74, 0x73, 0x00, 0xAB, 0xE0, 0x00, 0x00, 0x00, + 0x0B, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC8, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0xEC, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xEC, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x2C, 0x03, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xEC, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x46, 0x03, 0x00, 0x00, + 0x0C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0xEC, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x03, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x84, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xA8, 0x03, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xC4, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xE8, 0x03, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x84, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x04, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xEC, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x1F, 0x04, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x4C, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x70, 0x04, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xEC, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x8D, 0x04, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x84, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x67, 0x75, 0x65, 0x73, + 0x74, 0x5F, 0x62, 0x61, 0x73, 0x65, 0x00, 0x64, 0x77, 0x6F, 0x72, 0x64, + 0x00, 0xAB, 0xAB, 0xAB, 0x00, 0x00, 0x13, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xE3, 0x02, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x67, 0x75, 0x65, 0x73, + 0x74, 0x5F, 0x70, 0x69, 0x74, 0x63, 0x68, 0x00, 0x78, 0x65, 0x5F, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, + 0x68, 0x6F, 0x73, 0x74, 0x5F, 0x62, 0x61, 0x73, 0x65, 0x00, 0x78, 0x65, + 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, + 0x64, 0x5F, 0x68, 0x6F, 0x73, 0x74, 0x5F, 0x70, 0x69, 0x74, 0x63, 0x68, + 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, + 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x73, 0x69, 0x7A, 0x65, 0x5F, 0x74, 0x65, + 0x78, 0x65, 0x6C, 0x73, 0x00, 0x75, 0x69, 0x6E, 0x74, 0x33, 0x00, 0xAB, + 0x01, 0x00, 0x13, 0x00, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7D, 0x03, 0x00, 0x00, + 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, + 0x6F, 0x61, 0x64, 0x5F, 0x69, 0x73, 0x5F, 0x33, 0x64, 0x00, 0x62, 0x6F, + 0x6F, 0x6C, 0x00, 0xAB, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xBE, 0x03, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x73, 0x69, 0x7A, 0x65, + 0x5F, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x73, 0x00, 0x78, 0x65, 0x5F, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, + 0x65, 0x6E, 0x64, 0x69, 0x61, 0x6E, 0x6E, 0x65, 0x73, 0x73, 0x00, 0x78, + 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x67, 0x75, + 0x65, 0x73, 0x74, 0x5F, 0x73, 0x74, 0x6F, 0x72, 0x61, 0x67, 0x65, 0x5F, + 0x77, 0x69, 0x64, 0x74, 0x68, 0x5F, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x00, 0x75, 0x69, 0x6E, 0x74, 0x32, 0x00, 0xAB, 0x01, 0x00, 0x13, 0x00, + 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x45, 0x04, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, + 0x67, 0x75, 0x65, 0x73, 0x74, 0x5F, 0x66, 0x6F, 0x72, 0x6D, 0x61, 0x74, + 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, + 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x67, 0x75, 0x65, 0x73, 0x74, 0x5F, 0x6D, + 0x69, 0x70, 0x5F, 0x6F, 0x66, 0x66, 0x73, 0x65, 0x74, 0x00, 0x4D, 0x69, + 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, + 0x48, 0x4C, 0x53, 0x4C, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, + 0x43, 0x6F, 0x6D, 0x70, 0x69, 0x6C, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2E, + 0x31, 0x00, 0xAB, 0xAB, 0x49, 0x53, 0x47, 0x4E, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x4F, 0x53, 0x47, 0x4E, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x53, 0x48, 0x45, 0x58, 0xE0, 0x11, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, + 0x78, 0x04, 0x00, 0x00, 0x6A, 0x08, 0x00, 0x01, 0x59, 0x00, 0x00, 0x07, + 0x46, 0x8E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xA1, 0x00, 0x00, 0x06, 0x46, 0x7E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x9D, 0x00, 0x00, 0x06, 0x46, 0xEE, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5F, 0x00, 0x00, 0x02, 0x72, 0x00, 0x02, 0x00, 0x68, 0x00, 0x00, 0x02, + 0x07, 0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x08, + 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x02, 0x00, + 0x46, 0x82, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1F, 0x00, 0x04, 0x03, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3E, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x01, 0x1E, 0x00, 0x00, 0x08, + 0xF2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x01, 0x02, 0x00, + 0x66, 0x81, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x04, 0x03, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x05, 0x3A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0C, 0x32, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x16, 0x85, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, + 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, + 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x0C, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, + 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x07, + 0x42, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x14, 0xC2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x12, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, + 0x0F, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x0C, + 0x62, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xA6, 0x0B, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, + 0x62, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x06, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8A, 0x00, 0x00, 0x09, 0x82, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0x62, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x56, 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x12, 0x00, 0x00, 0x01, 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xB6, 0x0B, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x09, + 0x12, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0x32, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, + 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x0B, 0x42, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x0A, 0x92, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0x92, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xF6, 0x0F, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x0C, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0x92, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0D, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x06, 0x0C, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x0C, + 0x52, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x03, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, + 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x0C, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x2A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, + 0x42, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x2A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x2A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x12, 0x00, 0x00, 0x01, + 0x29, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x1F, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x23, 0x00, 0x00, 0x09, + 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x0B, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x1E, 0x00, 0x00, 0x09, + 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x0A, 0xE2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0xA5, 0x00, 0x00, 0x08, 0xF2, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x7E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xA5, 0x00, 0x00, 0x08, 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x7E, 0x20, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA5, 0x00, 0x00, 0x08, + 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x7E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xA5, 0x00, 0x00, 0x08, 0xF2, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x7E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x55, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x57, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x3A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, 0x0A, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, 0x1A, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, + 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x1F, 0x00, 0x04, 0x03, + 0x0A, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x1F, 0x00, 0x04, 0x03, + 0x1A, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, + 0x1F, 0x00, 0x04, 0x03, 0x0A, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x55, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, + 0x1F, 0x00, 0x04, 0x03, 0x1A, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x01, 0x1F, 0x00, 0x04, 0x03, 0x0A, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0xF2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x01, 0x1F, 0x00, 0x04, 0x03, 0x1A, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, + 0xF2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x29, 0x00, 0x00, 0x09, + 0x32, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x00, 0x02, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x09, + 0x42, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x08, 0x22, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x2A, 0x00, 0x02, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x0B, + 0x12, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x2A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x08, 0xF2, 0xE0, 0x21, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x08, 0xF2, 0xE0, 0x21, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x3A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xA6, 0x00, 0x00, 0x08, 0xF2, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0xA6, 0x00, 0x00, 0x08, 0xF2, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, + 0x53, 0x54, 0x41, 0x54, 0x94, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, +}; diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_128bpb_2x_cs.txt b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_128bpb_2x_cs.txt new file mode 100644 index 000000000..7ac0fd845 --- /dev/null +++ b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_128bpb_2x_cs.txt @@ -0,0 +1,190 @@ +// +// Generated by Microsoft (R) HLSL Shader Compiler 10.1 +// +// +// Buffer Definitions: +// +// cbuffer XeTextureLoadConstants +// { +// +// uint xe_texture_load_guest_base; // Offset: 0 Size: 4 +// uint xe_texture_load_guest_pitch; // Offset: 4 Size: 4 +// uint xe_texture_load_host_base; // Offset: 8 Size: 4 +// uint xe_texture_load_host_pitch; // Offset: 12 Size: 4 +// uint3 xe_texture_load_size_texels; // Offset: 16 Size: 12 [unused] +// bool xe_texture_load_is_3d; // Offset: 28 Size: 4 +// uint3 xe_texture_load_size_blocks; // Offset: 32 Size: 12 +// uint xe_texture_load_endianness; // Offset: 44 Size: 4 +// uint2 xe_texture_guest_storage_width_height;// Offset: 48 Size: 8 +// uint xe_texture_load_guest_format; // Offset: 56 Size: 4 [unused] +// uint3 xe_texture_load_guest_mip_offset;// Offset: 64 Size: 12 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim ID HLSL Bind Count +// ------------------------------ ---------- ------- ----------- ------- -------------- ------ +// xe_texture_load_source texture byte r/o T0 t0 1 +// xe_texture_load_dest UAV byte r/w U0 u0 1 +// XeTextureLoadConstants cbuffer NA NA CB0 cb0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Input +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Output +cs_5_1 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer CB0[0:0][5], immediateIndexed, space=0 +dcl_resource_raw T0[0:0], space=0 +dcl_uav_raw U0[0:0], space=0 +dcl_input vThreadID.xyz +dcl_temps 7 +dcl_thread_group 16, 16, 1 +uge r0.xyz, vThreadID.xyzx, CB0[0][2].xyzx +or r0.x, r0.y, r0.x +or r0.x, r0.z, r0.x +if_nz r0.x + ret +endif +iadd r0.xyzw, vThreadID.zyyx, CB0[0][4].zyyx +ieq r1.x, CB0[0][0].y, l(-1) +if_nz r1.x + if_nz CB0[0][1].w + ushr r1.xyzw, r0.xyzw, l(2, 4, 3, 3) + ushr r2.xy, CB0[0][3].yxyy, l(4, 5, 0, 0) + imad r0.y, r1.x, r2.x, r1.y + iadd r1.x, r1.z, r1.x + bfi r1.y, l(1), l(1), r1.x, l(0) + iadd r1.y, r1.w, r1.y + bfi r1.y, l(2), l(1), r1.y, l(0) + bfi r1.x, l(1), l(0), r1.x, r1.y + ishl r1.y, r0.z, l(12) + and r1.y, r1.y, l(0x00006000) + bfi r1.y, l(3), l(10), r0.w, r1.y + ushr r1.y, r1.y, l(6) + ushr r1.z, r0.w, l(5) + imad r0.y, r0.y, r2.y, r1.z + bfi r1.zw, l(0, 0, 18, 18), l(0, 0, 12, 15), r0.yyyy, l(0, 0, 0, 0) + imad r1.yz, r1.yyyy, l(0, 2, 16, 0), r1.zzwz + bfi r1.yz, l(0, 2, 2, 0), l(0, 10, 13, 0), r0.xxxx, r1.yyzy + bfi r0.y, l(1), l(4), r0.z, l(0) + ubfe r1.w, l(3), l(6), r1.y + and r2.x, r1.x, l(6) + bfi r1.x, l(1), l(8), r1.x, l(0) + imad r1.x, r1.w, l(32), r1.x + imad r1.x, r2.x, l(4), r1.x + bfi r1.yz, l(0, 5, 5, 0), l(0, 0, 3, 0), r0.yyyy, r1.yyzy + bfi r0.y, l(9), l(3), r1.x, r1.z + bfi r0.y, l(6), l(0), r1.y, r0.y + else + ushr r1.xyzw, r0.wzwz, l(5, 5, 3, 2) + iadd r2.x, CB0[0][3].x, l(31) + ushr r2.x, r2.x, l(5) + imad r1.x, r1.y, r2.x, r1.x + ishl r1.y, r0.z, l(7) + and r2.xy, r1.yyyy, l(1792, 2048, 0, 0) + bfi r1.y, l(3), l(5), r0.w, r2.x + bfi r1.y, l(21), l(11), r1.x, r1.y + bfi r2.z, l(1), l(4), r0.z, l(0) + iadd r1.y, r1.y, r2.z + ishl r2.xw, r2.xxxx, l(3, 0, 0, 2) + bfi r2.xw, l(3, 0, 0, 3), l(8, 0, 0, 7), r0.wwww, r2.xxxw + bfi r2.xw, l(21, 0, 0, 21), l(14, 0, 0, 13), r1.xxxx, r2.xxxw + imad r2.xz, r2.zzzz, l(8, 0, 4, 0), r2.xxwx + bfi r1.x, l(12), l(0), r2.y, r2.x + and r2.x, r2.z, l(1792) + iadd r1.x, r1.x, r2.x + and r1.w, r1.w, l(2) + iadd r1.z, r1.w, r1.z + bfi r1.z, l(2), l(6), r1.z, l(0) + iadd r1.x, r1.x, r1.z + bfi r0.y, l(6), l(0), r1.y, r1.x + endif +else + ishl r0.w, r0.w, l(4) + iadd r1.x, CB0[0][2].y, l(31) + and r1.x, r1.x, l(-32) + imad r0.x, r0.x, r1.x, r0.z + imad r0.y, r0.x, CB0[0][0].y, r0.w +endif +iadd r0.x, r0.y, CB0[0][0].x +ishl r0.x, r0.x, l(2) +iadd r0.yzw, r0.xxxx, l(0, 16, 32, 48) +ld_raw r1.xyzw, r0.x, T0[0].xyzw +ld_raw r2.xyzw, r0.y, T0[0].xyzw +ld_raw r3.xyzw, r0.z, T0[0].xyzw +ld_raw r0.xyzw, r0.w, T0[0].xyzw +ushr r4.x, CB0[0][2].w, l(1) +xor r4.x, r4.x, CB0[0][2].w +and r4.x, r4.x, l(1) +if_nz r4.x + ishl r5.xyzw, r1.xyzw, l(8, 8, 8, 8) + and r5.xyzw, r5.xyzw, l(0xff00ff00, 0xff00ff00, 0xff00ff00, 0xff00ff00) + ushr r6.xyzw, r1.xyzw, l(8, 8, 8, 8) + and r6.xyzw, r6.xyzw, l(0x00ff00ff, 0x00ff00ff, 0x00ff00ff, 0x00ff00ff) + iadd r1.xyzw, r5.xyzw, r6.xyzw +endif +and r4.y, CB0[0][2].w, l(2) +if_nz r4.y + ushr r5.xyzw, r1.xyzw, l(16, 16, 16, 16) + bfi r1.xyzw, l(16, 16, 16, 16), l(16, 16, 16, 16), r1.xyzw, r5.xyzw +endif +if_nz r4.x + ishl r5.xyzw, r2.xyzw, l(8, 8, 8, 8) + and r5.xyzw, r5.xyzw, l(0xff00ff00, 0xff00ff00, 0xff00ff00, 0xff00ff00) + ushr r6.xyzw, r2.xyzw, l(8, 8, 8, 8) + and r6.xyzw, r6.xyzw, l(0x00ff00ff, 0x00ff00ff, 0x00ff00ff, 0x00ff00ff) + iadd r2.xyzw, r5.xyzw, r6.xyzw +endif +if_nz r4.y + ushr r5.xyzw, r2.xyzw, l(16, 16, 16, 16) + bfi r2.xyzw, l(16, 16, 16, 16), l(16, 16, 16, 16), r2.xyzw, r5.xyzw +endif +if_nz r4.x + ishl r5.xyzw, r3.xyzw, l(8, 8, 8, 8) + and r5.xyzw, r5.xyzw, l(0xff00ff00, 0xff00ff00, 0xff00ff00, 0xff00ff00) + ushr r6.xyzw, r3.xyzw, l(8, 8, 8, 8) + and r6.xyzw, r6.xyzw, l(0x00ff00ff, 0x00ff00ff, 0x00ff00ff, 0x00ff00ff) + iadd r3.xyzw, r5.xyzw, r6.xyzw +endif +if_nz r4.y + ushr r5.xyzw, r3.xyzw, l(16, 16, 16, 16) + bfi r3.xyzw, l(16, 16, 16, 16), l(16, 16, 16, 16), r3.xyzw, r5.xyzw +endif +if_nz r4.x + ishl r5.xyzw, r0.xyzw, l(8, 8, 8, 8) + and r5.xyzw, r5.xyzw, l(0xff00ff00, 0xff00ff00, 0xff00ff00, 0xff00ff00) + ushr r6.xyzw, r0.xyzw, l(8, 8, 8, 8) + and r6.xyzw, r6.xyzw, l(0x00ff00ff, 0x00ff00ff, 0x00ff00ff, 0x00ff00ff) + iadd r0.xyzw, r5.xyzw, r6.xyzw +endif +if_nz r4.y + ushr r4.xyzw, r0.xyzw, l(16, 16, 16, 16) + bfi r0.xyzw, l(16, 16, 16, 16), l(16, 16, 16, 16), r0.xyzw, r4.xyzw +endif +ishl r4.xy, vThreadID.xyxx, l(1, 1, 0, 0) +ishl r4.z, CB0[0][2].y, l(1) +ishl r4.x, r4.x, l(4) +imad r4.y, vThreadID.z, r4.z, r4.y +imad r4.x, r4.y, CB0[0][0].w, r4.x +iadd r4.x, r4.x, CB0[0][0].z +store_raw U0[0].xyzw, r4.x, r1.xyzw +iadd r1.x, r4.x, l(16) +store_raw U0[0].xyzw, r1.x, r2.xyzw +iadd r1.x, r4.x, CB0[0][0].w +store_raw U0[0].xyzw, r1.x, r3.xyzw +iadd r1.y, r1.x, l(16) +store_raw U0[0].xyzw, r1.y, r0.xyzw +ret +// Approximately 136 instruction slots used diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_128bpb_cs.cso b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_128bpb_cs.cso index 3d10aceee945395f767c0807cb3b043c4bc5cae2..361b7debad1270d1b8374911b5129eff67305774 100644 GIT binary patch delta 63 zcmZ2uw#H1vCBn)1%9Vgu{NJCnHwm>JUYxP|(?*dilB|yy1Q-}5zm+s*WSFcdB@ZMW M!DJ$sY?N9J06vKpO8@`> delta 63 zcmZ2uw#H1vCBn&hXOq;;QimSKjlIWOmh;q@Z4|j8$@+;wfPr=LTS;R^*2#)e@<7rN LOeTWKMyb^R(PI<& diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_128bpb_cs.h b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_128bpb_cs.h index 818c78133..0a907d601 100644 --- a/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_128bpb_cs.h +++ b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_128bpb_cs.h @@ -1,8 +1,8 @@ // generated from `xb buildhlsl` // source: texture_load_128bpb.cs.hlsl const uint8_t texture_load_128bpb_cs[] = { - 0x44, 0x58, 0x42, 0x43, 0xB9, 0x82, 0x1A, 0xD9, 0x75, 0x40, 0x8C, 0x01, - 0xB1, 0x8D, 0xC6, 0x84, 0xA7, 0x0C, 0x7C, 0x36, 0x01, 0x00, 0x00, 0x00, + 0x44, 0x58, 0x42, 0x43, 0xD4, 0xD4, 0x50, 0xEA, 0x0F, 0xF7, 0xE4, 0x87, + 0x82, 0x12, 0x86, 0xC3, 0xA3, 0x68, 0xAB, 0xF2, 0x01, 0x00, 0x00, 0x00, 0x2C, 0x1B, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x14, 0x05, 0x00, 0x00, 0x24, 0x05, 0x00, 0x00, 0x34, 0x05, 0x00, 0x00, 0x90, 0x1A, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0xD8, 0x04, 0x00, 0x00, @@ -553,20 +553,20 @@ const uint8_t texture_load_128bpb_cs[] = { 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0A, 0xE2, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x08, 0xF2, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x08, 0xF2, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x08, 0xF2, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x08, 0xF2, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3A, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, 0x53, 0x54, 0x41, 0x54, 0x94, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_128bpb_cs.txt b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_128bpb_cs.txt index db4841eb9..518b89a41 100644 --- a/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_128bpb_cs.txt +++ b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_128bpb_cs.txt @@ -190,10 +190,10 @@ ishl r0.x, r0.x, l(4) imad r0.y, vThreadID.z, CB0[0][2].y, vThreadID.y imad r0.x, r0.y, CB0[0][0].w, r0.x iadd r0.x, r0.x, CB0[0][0].z -iadd r5.xyzw, r0.xxxx, l(0, 16, 32, 48) -store_raw U0[0].xyzw, r5.x, r2.xyzw -store_raw U0[0].xyzw, r5.y, r3.xyzw -store_raw U0[0].xyzw, r5.z, r4.xyzw -store_raw U0[0].xyzw, r5.w, r1.xyzw +iadd r0.yzw, r0.xxxx, l(0, 16, 32, 48) +store_raw U0[0].xyzw, r0.x, r2.xyzw +store_raw U0[0].xyzw, r0.y, r3.xyzw +store_raw U0[0].xyzw, r0.z, r4.xyzw +store_raw U0[0].xyzw, r0.w, r1.xyzw ret // Approximately 145 instruction slots used diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_16bpb_2x_cs.cso b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_16bpb_2x_cs.cso new file mode 100644 index 0000000000000000000000000000000000000000..880dfeed08ba2bc5323150f83f249aa9086f735b GIT binary patch literal 6792 zcmb`MU5K1l8OP6@B(vRZG%-y@qnNQ(yiB_{Q#;akIoz0GJcGj5* zEmlS92Sv13;*EHr&``QiyzoL1ybv!0Z@etMS`dOt5$T2WF8+V-`~GLnygTE@k7sz^ z=e*}U=lS@bbDlG^d;aR#b1(en@@v0NFa7GTfBN*kH=q662O1%SmyU&SK=N_%Q8gYG zKQ4aj{UKaBe_`p3{UMuQ14#t42I!q=W?lf zQJUv^n}gxX=5P?UcVzQ^@nISMoTTXwv1}>*K=ZBY{jP`+%fkW;oxSuz5OzDO5?US3zy?kcvO1i zjJ=CY5IHW(E%kpw{d?K_p%jwz_KL5*_&088_1o802A#0_T(7?xwzs#nqqUFnog~8< z{aFD|x3kq9USHoew%)Ug`mADP`lLbkYsL2MYz)G!?&k2Zu-z!)sun1V$IWkOsP3UV zXg{_ZuJw8wL3xqY?7V(EWquLHwT<5OuMBqC?rg4hS2j00gNdOM(ZR6SU%Am~Ki6Fy zuD91a-5cw}B9Al9gH@kS7qpi3JW8u;z5dOW;f%qX-K}}Qrg^;z~HgnYL4zWnrstG_rJ!sk`& zPO08~`M%KjlFHfA%k17UX{ex|seCPcb8?JTk^$m9H6ZlJ@;ZY=UAn?P|1Ak zWYzaXrF%T=-{0*Oqif{=PMig*oKG8P9F2ec*{qk6h$u;q5A( zW))A=T!?W9`332bKY6arm-)w3))r#X)-FhT2hT{4_xFBx924&`m378zsjje?)02Xjenk<>~Qia>?g)#T)Inzh(u+l7;*qoEPCP=Xzv_15QB_=Ua zOti3V)Nw;U=a|${5k6t&8YAB8HtcI8(-`*!>BC?S+1B?%IP^P3R?JDoQ1P(OnDvd; zVt*M2Sf8oZV=1#?JzE27^z4HiU{g$GU3ZPAKexwwPK#B2z}}r|55*KhOYgABHgbLX z$StNZ-g+&_`gL3#uVqZ*x!%|8L&&&d16-LClO7d$PsQY(@tJ7~S8}>ttur>j%{J<| z<~D4N9MA_B5TOGheGb9rj$-h7xu($%qvzb5cT5_n2z} z$nFemG*Sr1C1q=L-}(Mx3>%BpdFNcPZ;8?8eo0ti=R~##^H>;TZA_Xwu~!+7DTFP_ z;!6cmpU&z5pJ3Y9(8=lH|Lnj--`TRbWH?9@-min8_wAh8+E_TEpo2bs&2zMTVlht z!{>UGb7mv2n+HRA4@ndhQz`Q&Hi!+}z=OTw`hL5z8jdEZAuUZNA$)hOY^HO4+qA7 zUX444=5Rc&xDb3E-G8%I{BH3)*AD{x-n+(ojPD#d%WqL<(Bn)) zG3jx4@}u}i_2^#gkr(!mG3_!}{9bsw!V7y45`EULm0@u*TQklXdlQ-Go9B_oxAX1E zk8#0IuIJilX?yiN!q+E1oKfYfp+C}2e4K}--!o>pAKJ5g<#^Gyum2V^?zkK?V?pfs{+SgYdfpc? z>16_m@Xo9~g5R8H<$HH-^7Fsudq{rseC=1=6Z!t5M#iOnuJT$#+xB*yt3zSp<2>+d z{PsFm_v&lHk=)wXv^_#C%2|14cS;N~m3IYmP3WAhYC?XGku$XmUFpoca~D;j$9HB7 zCvB^e8sBwa=Jy0~_#RMhqkG4Fc|Aq2%=9jQ!N|bCutJ7`ffY!b0I>*=p#sDvK+Lnz zke!wDf*1osAW(kGW=GcJLX$nDG#G6r2TIy+Zjs1gWN2D$=N=^idaRM<2fb0PQ9UxYkyjG?f0M))A&j0`b delta 182 zcmZ2sxx&iOCBn(MQ)G6rJd?$}X`Jq_zTN!0h>?MTK|_{-ffY!b0I>*=p#sDvK-{y@ zke!t?K%9Xg5Ga3Tvm@(qp~(lN1Sap05Sjc!Tw?McDVfO%QYxDZByt#8x)>PvC$EuE zn9RW^F!_s=z$8hX$qEtze98Y|7W;=+Zc5O5`e8y6xfxN)fqAs~nganY5yssG=5_e}1*ylDhaxO4Bj=YRj_ zd-8^1pO{YQ^}HT7ZK=bXE>%eevd$JKUga6s+2+OX!&o|-ED zyvaFmf2;MYJ*n0=Ff+-b&!yY7>(nF6-LH1gw*%^j)sQdLHmeP)!DAARnfp;~i`quG zRblc3zL4`uwbZU&X)iacrG-YhQff7pn{!o{ovu_{ZFix1E`?4DIoVijwabg`mRngB z=Qgzw5uZ_S@a9L1X=h5(Z`?++pE}eIr~^IP$s?t}NV$aJC0;>KQS= ztiPrC2Q_be-}b=$q4|Pv@DXY+zD*)JEWPpd%F8|hjtEE0@J+KoVt!e_r1>W_@6|o? z{H_48a2xrT-TaHo+WpdOxm9(Q%Z+Bmt*or5qE$y>C5bqY-{f#U&r-cTS6ip6HOxeI zRiepX)T+Ohly7yR<(BJIBr(v$G$o)H$~_cIu4WY9>$46{E-%udi{FLEXEXcY6I^ z-w*jd)Qx3y``o5}!<~?+J!%ih)@_fQ?~C008*8>We+B2ZVhg|aUR%@Y(e=gY*)?7; z8V^haIObk-ZU`HUi}#G^SAoar9e@pTKof3wTsUI9_pLQs=%P5i4=m@Ja-;HXzwiig z!B5Y6^1`#?OLE1Sd>DrQ9bNORXWSR71-x~XZ`8->!|e!&tq$p^G;kg2M_OKbSHhRwhkS8FdF2ZbqGDN zTb}XJ)`#3n!pO(nw%1Xt2hGt;qBxCH$FL*k2U0sx+?nbO7Ir-{9^T> zP8ws`-!bd)hNBi~NEGYGOTX{2PmSE%miBoZaMO?|){lg|^F4tKCSEvqelX>DJIEus z#TGsJ@8nE*yzYIq8ZiueomWrT46%C5-7|O!(iwI%@Mpr?1Vdi%2O)0uj$A}>Qj5u0 zkBLNais$>!ggrq%@Hxcq{hkm0tSTciaEK%3ggJ5UFkBR;z9vfj;CB?K z-;x?8!kL8++k?X?FC623E{fBA#3z#|UaK#gvwPz^?^~85iOs<3qd2V%>fFR?huQ#7 ze%L?D%dqCcToNyN_uRR6JOvoO9}RDNp|zcL)P&iBJA5A+p8WuWZ=CHAk8fRfnx2un z**6|=w%%g2y*Hot2*TN?=D8~od`4K~ea`)sK?jEOPRy29<3_ite@;gIeIZzqTkDAv ze-L3h_ZsVw?01v-h0k^eB{+`{?;_^y95Xgfe8TU~g6}ue6|WYgNk#WpC+6_G%wop( zmjVnN%&o)r$P3u;`;W7D+jE59dc2RqrgdF7c%oQ8ce?-Ne}co`|H5ZD`Y2vUm(&~n zA@E_B9z6S@=ey<$To|wUXFO87C{DjMuwqTMyu<9~>GS3+Uh@@hAEgAp5Uf9-#(O=y&-K_P MhVPpEpAYQIzlM_AM*si- literal 0 HcmV?d00001 diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_32bpb_2x_cs.h b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_32bpb_2x_cs.h new file mode 100644 index 000000000..e499df9f5 --- /dev/null +++ b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_32bpb_2x_cs.h @@ -0,0 +1,424 @@ +// generated from `xb buildhlsl` +// source: texture_load_32bpb_2x.cs.hlsl +const uint8_t texture_load_32bpb_2x_cs[] = { + 0x44, 0x58, 0x42, 0x43, 0x75, 0x80, 0x70, 0xFA, 0x0D, 0xD9, 0x92, 0xDD, + 0x35, 0xC7, 0x98, 0x26, 0xB9, 0x45, 0x97, 0x40, 0x01, 0x00, 0x00, 0x00, + 0xA8, 0x13, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x14, 0x05, 0x00, 0x00, 0x24, 0x05, 0x00, 0x00, 0x34, 0x05, 0x00, 0x00, + 0x0C, 0x13, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0xD8, 0x04, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x3C, 0x00, 0x00, 0x00, 0x01, 0x05, 0x53, 0x43, 0x00, 0x05, 0x00, 0x00, + 0xAE, 0x04, 0x00, 0x00, 0x13, 0x13, 0x44, 0x25, 0x3C, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, + 0x24, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xB4, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xCB, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, + 0x6F, 0x61, 0x64, 0x5F, 0x73, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x00, 0x78, + 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, 0x6F, + 0x61, 0x64, 0x5F, 0x64, 0x65, 0x73, 0x74, 0x00, 0x58, 0x65, 0x54, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x4C, 0x6F, 0x61, 0x64, 0x43, 0x6F, 0x6E, + 0x73, 0x74, 0x61, 0x6E, 0x74, 0x73, 0x00, 0xAB, 0xE0, 0x00, 0x00, 0x00, + 0x0B, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC8, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0xEC, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xEC, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x2C, 0x03, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xEC, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x46, 0x03, 0x00, 0x00, + 0x0C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0xEC, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x03, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x84, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xA8, 0x03, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xC4, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xE8, 0x03, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x84, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x04, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xEC, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x1F, 0x04, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x4C, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x70, 0x04, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xEC, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x8D, 0x04, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x84, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x67, 0x75, 0x65, 0x73, + 0x74, 0x5F, 0x62, 0x61, 0x73, 0x65, 0x00, 0x64, 0x77, 0x6F, 0x72, 0x64, + 0x00, 0xAB, 0xAB, 0xAB, 0x00, 0x00, 0x13, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xE3, 0x02, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x67, 0x75, 0x65, 0x73, + 0x74, 0x5F, 0x70, 0x69, 0x74, 0x63, 0x68, 0x00, 0x78, 0x65, 0x5F, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, + 0x68, 0x6F, 0x73, 0x74, 0x5F, 0x62, 0x61, 0x73, 0x65, 0x00, 0x78, 0x65, + 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, + 0x64, 0x5F, 0x68, 0x6F, 0x73, 0x74, 0x5F, 0x70, 0x69, 0x74, 0x63, 0x68, + 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, + 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x73, 0x69, 0x7A, 0x65, 0x5F, 0x74, 0x65, + 0x78, 0x65, 0x6C, 0x73, 0x00, 0x75, 0x69, 0x6E, 0x74, 0x33, 0x00, 0xAB, + 0x01, 0x00, 0x13, 0x00, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7D, 0x03, 0x00, 0x00, + 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, + 0x6F, 0x61, 0x64, 0x5F, 0x69, 0x73, 0x5F, 0x33, 0x64, 0x00, 0x62, 0x6F, + 0x6F, 0x6C, 0x00, 0xAB, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xBE, 0x03, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x73, 0x69, 0x7A, 0x65, + 0x5F, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x73, 0x00, 0x78, 0x65, 0x5F, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, + 0x65, 0x6E, 0x64, 0x69, 0x61, 0x6E, 0x6E, 0x65, 0x73, 0x73, 0x00, 0x78, + 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x67, 0x75, + 0x65, 0x73, 0x74, 0x5F, 0x73, 0x74, 0x6F, 0x72, 0x61, 0x67, 0x65, 0x5F, + 0x77, 0x69, 0x64, 0x74, 0x68, 0x5F, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x00, 0x75, 0x69, 0x6E, 0x74, 0x32, 0x00, 0xAB, 0x01, 0x00, 0x13, 0x00, + 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x45, 0x04, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, + 0x67, 0x75, 0x65, 0x73, 0x74, 0x5F, 0x66, 0x6F, 0x72, 0x6D, 0x61, 0x74, + 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, + 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x67, 0x75, 0x65, 0x73, 0x74, 0x5F, 0x6D, + 0x69, 0x70, 0x5F, 0x6F, 0x66, 0x66, 0x73, 0x65, 0x74, 0x00, 0x4D, 0x69, + 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, + 0x48, 0x4C, 0x53, 0x4C, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, + 0x43, 0x6F, 0x6D, 0x70, 0x69, 0x6C, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2E, + 0x31, 0x00, 0xAB, 0xAB, 0x49, 0x53, 0x47, 0x4E, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x4F, 0x53, 0x47, 0x4E, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x53, 0x48, 0x45, 0x58, 0xD0, 0x0D, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, + 0x74, 0x03, 0x00, 0x00, 0x6A, 0x08, 0x00, 0x01, 0x59, 0x00, 0x00, 0x07, + 0x46, 0x8E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xA1, 0x00, 0x00, 0x06, 0x46, 0x7E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x9D, 0x00, 0x00, 0x06, 0x46, 0xEE, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5F, 0x00, 0x00, 0x02, 0x72, 0x00, 0x02, 0x00, 0x68, 0x00, 0x00, 0x02, + 0x03, 0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x08, + 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x02, 0x00, + 0x46, 0x82, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1F, 0x00, 0x04, 0x03, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3E, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x01, 0x1E, 0x00, 0x00, 0x08, + 0xF2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x01, 0x02, 0x00, + 0x66, 0x81, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x04, 0x03, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x05, 0x3A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0C, 0x32, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x16, 0x85, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, + 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, + 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x0A, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, + 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x07, + 0x42, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x14, 0x32, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x0C, 0xC2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xA6, 0x0A, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x06, 0x04, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0x62, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xA6, 0x0B, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, + 0x62, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x06, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, + 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0x32, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x96, 0x05, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x01, 0x55, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0xB6, 0x0B, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x0A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, + 0x55, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, 0x32, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, + 0x32, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x0B, 0x12, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x0B, 0x42, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, + 0x42, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, 0x42, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x0A, 0x92, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0x92, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x06, 0x0C, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0x32, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xC6, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, + 0x32, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xA6, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x00, 0x07, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, + 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x01, 0x12, 0x00, 0x00, 0x01, 0x29, 0x00, 0x00, 0x07, + 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0xE0, 0xFF, 0xFF, 0xFF, 0x23, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x01, 0x1E, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xA5, 0x00, 0x00, 0x08, + 0xF2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x7E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x09, + 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, + 0x29, 0x00, 0x00, 0x09, 0x32, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x46, 0x00, 0x02, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x09, 0x42, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x08, 0x22, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x02, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x0B, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x09, + 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x2A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x08, + 0x32, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x08, 0x32, 0xE0, 0x21, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xE6, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3E, 0x00, 0x00, 0x01, 0x53, 0x54, 0x41, 0x54, 0x94, 0x00, 0x00, 0x00, + 0x63, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, +}; diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_32bpb_2x_cs.txt b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_32bpb_2x_cs.txt new file mode 100644 index 000000000..53c616f77 --- /dev/null +++ b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_32bpb_2x_cs.txt @@ -0,0 +1,153 @@ +// +// Generated by Microsoft (R) HLSL Shader Compiler 10.1 +// +// +// Buffer Definitions: +// +// cbuffer XeTextureLoadConstants +// { +// +// uint xe_texture_load_guest_base; // Offset: 0 Size: 4 +// uint xe_texture_load_guest_pitch; // Offset: 4 Size: 4 +// uint xe_texture_load_host_base; // Offset: 8 Size: 4 +// uint xe_texture_load_host_pitch; // Offset: 12 Size: 4 +// uint3 xe_texture_load_size_texels; // Offset: 16 Size: 12 [unused] +// bool xe_texture_load_is_3d; // Offset: 28 Size: 4 +// uint3 xe_texture_load_size_blocks; // Offset: 32 Size: 12 +// uint xe_texture_load_endianness; // Offset: 44 Size: 4 +// uint2 xe_texture_guest_storage_width_height;// Offset: 48 Size: 8 +// uint xe_texture_load_guest_format; // Offset: 56 Size: 4 [unused] +// uint3 xe_texture_load_guest_mip_offset;// Offset: 64 Size: 12 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim ID HLSL Bind Count +// ------------------------------ ---------- ------- ----------- ------- -------------- ------ +// xe_texture_load_source texture byte r/o T0 t0 1 +// xe_texture_load_dest UAV byte r/w U0 u0 1 +// XeTextureLoadConstants cbuffer NA NA CB0 cb0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Input +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Output +cs_5_1 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer CB0[0:0][5], immediateIndexed, space=0 +dcl_resource_raw T0[0:0], space=0 +dcl_uav_raw U0[0:0], space=0 +dcl_input vThreadID.xyz +dcl_temps 3 +dcl_thread_group 16, 16, 1 +uge r0.xyz, vThreadID.xyzx, CB0[0][2].xyzx +or r0.x, r0.y, r0.x +or r0.x, r0.z, r0.x +if_nz r0.x + ret +endif +iadd r0.xyzw, vThreadID.zyyx, CB0[0][4].zyyx +ieq r1.x, CB0[0][0].y, l(-1) +if_nz r1.x + if_nz CB0[0][1].w + ushr r1.xyzw, r0.xyzw, l(2, 4, 3, 3) + ushr r2.xy, CB0[0][3].yxyy, l(4, 5, 0, 0) + imad r0.y, r1.x, r2.x, r1.y + iadd r1.x, r1.z, r1.x + bfi r1.y, l(1), l(1), r1.x, l(0) + iadd r1.y, r1.w, r1.y + bfi r1.y, l(2), l(1), r1.y, l(0) + bfi r1.x, l(1), l(0), r1.x, r1.y + ishl r1.y, r0.z, l(10) + and r1.y, r1.y, l(6144) + bfi r1.y, l(3), l(8), r0.w, r1.y + ushr r1.y, r1.y, l(6) + ushr r1.z, r0.w, l(5) + imad r0.y, r0.y, r2.y, r1.z + and r1.z, r1.y, l(112) + bfi r2.xy, l(20, 20, 0, 0), l(10, 13, 0, 0), r0.yyyy, l(0, 0, 0, 0) + imad r1.zw, r1.zzzz, l(0, 0, 2, 16), r2.xxxy + bfi r1.yz, l(0, 4, 4, 0), l(0, 0, 3, 0), r1.yyyy, r1.zzwz + bfi r1.yz, l(0, 2, 2, 0), l(0, 8, 11, 0), r0.xxxx, r1.yyzy + ubfe r0.y, l(3), l(6), r1.y + and r1.w, r1.x, l(6) + bfi r1.x, l(1), l(8), r1.x, l(0) + imad r0.y, r0.y, l(32), r1.x + imad r0.y, r1.w, l(4), r0.y + bfi r1.xy, l(1, 1, 0, 0), l(4, 7, 0, 0), r0.zzzz, r1.yzyy + bfi r0.y, l(9), l(3), r0.y, r1.y + bfi r0.y, l(6), l(0), r1.x, r0.y + else + ushr r1.xyzw, r0.wzwz, l(5, 5, 3, 2) + iadd r2.x, CB0[0][3].x, l(31) + ushr r2.x, r2.x, l(5) + imad r1.x, r1.y, r2.x, r1.x + ishl r2.xy, r0.zzzz, l(4, 7, 0, 0) + and r2.xy, r2.xyxx, l(224, 2048, 0, 0) + bfi r1.y, l(3), l(2), r0.w, r2.x + ishl r2.x, r2.x, l(1) + bfi r2.x, l(3), l(3), r0.w, r2.x + and r2.x, r2.x, l(480) + bfi r2.z, l(23), l(9), r1.x, r2.x + bfi r2.z, l(4), l(0), r1.y, r2.z + bfi r2.z, l(1), l(4), r0.z, r2.z + ishl r2.xw, r2.xxxx, l(3, 0, 0, 2) + bfi r2.xw, l(23, 0, 0, 23), l(12, 0, 0, 11), r1.xxxx, r2.xxxw + bfi r1.xy, l(4, 4, 0, 0), l(3, 2, 0, 0), r1.yyyy, r2.xwxx + bfi r1.xy, l(1, 1, 0, 0), l(7, 6, 0, 0), r0.zzzz, r1.xyxx + bfi r1.x, l(12), l(0), r2.y, r1.x + and r1.y, r1.y, l(1792) + iadd r1.x, r1.x, r1.y + and r1.y, r1.w, l(2) + iadd r1.y, r1.y, r1.z + bfi r1.y, l(2), l(6), r1.y, l(0) + iadd r1.x, r1.x, r1.y + bfi r0.y, l(6), l(0), r2.z, r1.x + endif +else + ishl r0.w, r0.w, l(2) + iadd r1.x, CB0[0][2].y, l(31) + and r1.x, r1.x, l(-32) + imad r0.x, r0.x, r1.x, r0.z + imad r0.y, r0.x, CB0[0][0].y, r0.w +endif +iadd r0.x, r0.y, CB0[0][0].x +ishl r0.x, r0.x, l(2) +ld_raw r0.xyzw, r0.x, T0[0].xyzw +ushr r1.x, CB0[0][2].w, l(1) +xor r1.x, r1.x, CB0[0][2].w +and r1.x, r1.x, l(1) +if_nz r1.x + ishl r1.xyzw, r0.xyzw, l(8, 8, 8, 8) + and r1.xyzw, r1.xyzw, l(0xff00ff00, 0xff00ff00, 0xff00ff00, 0xff00ff00) + ushr r2.xyzw, r0.xyzw, l(8, 8, 8, 8) + and r2.xyzw, r2.xyzw, l(0x00ff00ff, 0x00ff00ff, 0x00ff00ff, 0x00ff00ff) + iadd r0.xyzw, r1.xyzw, r2.xyzw +endif +and r1.x, CB0[0][2].w, l(2) +if_nz r1.x + ushr r1.xyzw, r0.xyzw, l(16, 16, 16, 16) + bfi r0.xyzw, l(16, 16, 16, 16), l(16, 16, 16, 16), r0.xyzw, r1.xyzw +endif +ishl r1.xy, vThreadID.xyxx, l(1, 1, 0, 0) +ishl r1.z, CB0[0][2].y, l(1) +ishl r1.x, r1.x, l(2) +imad r1.y, vThreadID.z, r1.z, r1.y +imad r1.x, r1.y, CB0[0][0].w, r1.x +iadd r1.x, r1.x, CB0[0][0].z +store_raw U0[0].xy, r1.x, r0.xyxx +iadd r0.x, r1.x, CB0[0][0].w +store_raw U0[0].xy, r0.x, r0.zwzz +ret +// Approximately 99 instruction slots used diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_64bpb_2x_cs.cso b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_64bpb_2x_cs.cso new file mode 100644 index 0000000000000000000000000000000000000000..6de4662cbeb41b5cad1b1f9f85911913c70a9bda GIT binary patch literal 5420 zcmb`KO=w(I6vywpY0@^0HT^`2+Oet7hNAsiNRaYu+Oa~cwTZQE9447bGn!_?%!C%9 zMT>4kMT&GIE?iiIpbHV*iHJzStwNUpH!eh_D|hw(d+(l^JCm2Dh$q}R_uccq|MPJ_ z-ph&e$H!j1{>6>j?bA;-zy0f%ukyF9S;mQ7z5Y%au~IzSx+qy58YRwb^p#tCJ~oT*$Hde6v-aZ#CW0vN$)X z4T<=Sw8^a~?J0dn_YePkSAxa#kO~H7E!+X&$bBtbQ8?l|3W~<&PU#ONY)heyo(rmSMVYZdzaoF-;)wAWK*0MK` zly#=wxL9tjV!T*eDAi|Xn$?zjzBb*cH|sO4!oIWn3#Y~>#tRd(g<>g~I{ z9`HJ}jr7=dyLEZP9g{1)0&I&kkMIb2 z!H;G>b>Uh0CAFeYJq&|>PuD#2>61&SjgN5z9>b3MIp(962mi)r7~=tJ^)!sx%%{!S zANVA81T60+#oCU?@ClE~)*DaW&)XUnIAYM#l%`xx7CpR3Ko2Wv1K)E+JbP3~4_ zVzl|@kNJNKqZqf_T1Oh&rZJjH6sLJ^wgKsLeW@R8y`p#qfAF#197xwRiaRLcVs^hy z8h!cSGUf46tN{sok%mOEe!S$p#y@-H=B89OPqC_|8dlIM<(Yyc^V! z+TaUK{o6HD9k2OVZI2j6F=Xy1?zIrB$ILZ@ry!eQhl6-Vy-zUIg?JG1X6>j&6eoKz z>FY6(C{FQw|Cz8R$PHgZ;@;!=;HO6DytMhT{ClyatVw;Tw>) zwXt}5vG@XuSp7ykS1;D`Weym`u+;dvpU3&4{!yIPM%_dh6XzDgMX}y7i6#A^AH~i+ zAZ;?J4t)6TAMD&4tS4hp+qAz=_ppgrP=2uws+VY z;Hl46-=~Je8rCx0gTiOt@i+df6M;v+e`A)5v_t{Dr@1^Z!G z+nqZU+lYQgeBbtt?CtlrjfLk<)7qSN$Ao@Hg6|!$H@QcaAETRy#Y5iYWgPU)*6S~e p1H9Gnn9`n@d}i_^jV-A04TXR~_NqOi#(4Pd(_@#A$Nw#G{tJ9A0U7`R literal 0 HcmV?d00001 diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_64bpb_2x_cs.h b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_64bpb_2x_cs.h new file mode 100644 index 000000000..5cfca047d --- /dev/null +++ b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_64bpb_2x_cs.h @@ -0,0 +1,456 @@ +// generated from `xb buildhlsl` +// source: texture_load_64bpb_2x.cs.hlsl +const uint8_t texture_load_64bpb_2x_cs[] = { + 0x44, 0x58, 0x42, 0x43, 0x5E, 0x92, 0xAD, 0x96, 0x69, 0xD8, 0x4E, 0x2F, + 0x73, 0xB7, 0xEF, 0xD4, 0xB2, 0x03, 0xC8, 0x7D, 0x01, 0x00, 0x00, 0x00, + 0x2C, 0x15, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x14, 0x05, 0x00, 0x00, 0x24, 0x05, 0x00, 0x00, 0x34, 0x05, 0x00, 0x00, + 0x90, 0x14, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0xD8, 0x04, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x3C, 0x00, 0x00, 0x00, 0x01, 0x05, 0x53, 0x43, 0x00, 0x05, 0x00, 0x00, + 0xAE, 0x04, 0x00, 0x00, 0x13, 0x13, 0x44, 0x25, 0x3C, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, + 0x24, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xB4, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xCB, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, + 0x6F, 0x61, 0x64, 0x5F, 0x73, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x00, 0x78, + 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, 0x6F, + 0x61, 0x64, 0x5F, 0x64, 0x65, 0x73, 0x74, 0x00, 0x58, 0x65, 0x54, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x4C, 0x6F, 0x61, 0x64, 0x43, 0x6F, 0x6E, + 0x73, 0x74, 0x61, 0x6E, 0x74, 0x73, 0x00, 0xAB, 0xE0, 0x00, 0x00, 0x00, + 0x0B, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC8, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0xEC, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xEC, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x2C, 0x03, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xEC, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x46, 0x03, 0x00, 0x00, + 0x0C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0xEC, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x03, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x84, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xA8, 0x03, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xC4, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xE8, 0x03, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x84, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x04, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xEC, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x1F, 0x04, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x4C, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x70, 0x04, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xEC, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x8D, 0x04, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x84, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x67, 0x75, 0x65, 0x73, + 0x74, 0x5F, 0x62, 0x61, 0x73, 0x65, 0x00, 0x64, 0x77, 0x6F, 0x72, 0x64, + 0x00, 0xAB, 0xAB, 0xAB, 0x00, 0x00, 0x13, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xE3, 0x02, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x67, 0x75, 0x65, 0x73, + 0x74, 0x5F, 0x70, 0x69, 0x74, 0x63, 0x68, 0x00, 0x78, 0x65, 0x5F, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, + 0x68, 0x6F, 0x73, 0x74, 0x5F, 0x62, 0x61, 0x73, 0x65, 0x00, 0x78, 0x65, + 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, + 0x64, 0x5F, 0x68, 0x6F, 0x73, 0x74, 0x5F, 0x70, 0x69, 0x74, 0x63, 0x68, + 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, + 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x73, 0x69, 0x7A, 0x65, 0x5F, 0x74, 0x65, + 0x78, 0x65, 0x6C, 0x73, 0x00, 0x75, 0x69, 0x6E, 0x74, 0x33, 0x00, 0xAB, + 0x01, 0x00, 0x13, 0x00, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7D, 0x03, 0x00, 0x00, + 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, + 0x6F, 0x61, 0x64, 0x5F, 0x69, 0x73, 0x5F, 0x33, 0x64, 0x00, 0x62, 0x6F, + 0x6F, 0x6C, 0x00, 0xAB, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xBE, 0x03, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x73, 0x69, 0x7A, 0x65, + 0x5F, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x73, 0x00, 0x78, 0x65, 0x5F, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, + 0x65, 0x6E, 0x64, 0x69, 0x61, 0x6E, 0x6E, 0x65, 0x73, 0x73, 0x00, 0x78, + 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x67, 0x75, + 0x65, 0x73, 0x74, 0x5F, 0x73, 0x74, 0x6F, 0x72, 0x61, 0x67, 0x65, 0x5F, + 0x77, 0x69, 0x64, 0x74, 0x68, 0x5F, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x00, 0x75, 0x69, 0x6E, 0x74, 0x32, 0x00, 0xAB, 0x01, 0x00, 0x13, 0x00, + 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x45, 0x04, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, + 0x67, 0x75, 0x65, 0x73, 0x74, 0x5F, 0x66, 0x6F, 0x72, 0x6D, 0x61, 0x74, + 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, + 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x67, 0x75, 0x65, 0x73, 0x74, 0x5F, 0x6D, + 0x69, 0x70, 0x5F, 0x6F, 0x66, 0x66, 0x73, 0x65, 0x74, 0x00, 0x4D, 0x69, + 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, + 0x48, 0x4C, 0x53, 0x4C, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, + 0x43, 0x6F, 0x6D, 0x70, 0x69, 0x6C, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2E, + 0x31, 0x00, 0xAB, 0xAB, 0x49, 0x53, 0x47, 0x4E, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x4F, 0x53, 0x47, 0x4E, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x53, 0x48, 0x45, 0x58, 0x54, 0x0F, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, + 0xD5, 0x03, 0x00, 0x00, 0x6A, 0x08, 0x00, 0x01, 0x59, 0x00, 0x00, 0x07, + 0x46, 0x8E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xA1, 0x00, 0x00, 0x06, 0x46, 0x7E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x9D, 0x00, 0x00, 0x06, 0x46, 0xEE, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5F, 0x00, 0x00, 0x02, 0x72, 0x00, 0x02, 0x00, 0x68, 0x00, 0x00, 0x02, + 0x05, 0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x08, + 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x02, 0x00, + 0x46, 0x82, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1F, 0x00, 0x04, 0x03, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3E, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x01, 0x1E, 0x00, 0x00, 0x08, + 0xF2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x01, 0x02, 0x00, + 0x66, 0x81, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x04, 0x03, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x05, 0x3A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0C, 0x32, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x16, 0x85, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, + 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, + 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x0B, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, + 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x07, + 0x42, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0xF0, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x14, 0x32, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, + 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x0C, 0xC2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xA6, 0x0A, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x06, 0x04, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0x62, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xA6, 0x0B, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, + 0x62, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x06, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, + 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0x32, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x96, 0x05, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x01, 0x55, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0xB6, 0x0B, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x0A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, + 0x55, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, 0x32, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, + 0x32, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0xC0, 0x01, 0x00, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x0B, 0x12, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x0B, 0x42, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, + 0x42, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, 0x42, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x0A, 0x92, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0x92, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x06, 0x0C, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0x32, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xC6, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, + 0x32, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xA6, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x00, 0x07, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, + 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x01, 0x12, 0x00, 0x00, 0x01, 0x29, 0x00, 0x00, 0x07, + 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0xE0, 0xFF, 0xFF, 0xFF, 0x23, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x01, 0x1E, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xA5, 0x00, 0x00, 0x08, + 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x7E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xA5, 0x00, 0x00, 0x08, + 0xF2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x7E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, + 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x09, + 0x22, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, + 0x1A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, + 0x1F, 0x00, 0x04, 0x03, 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x55, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, + 0x1F, 0x00, 0x04, 0x03, 0x1A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x01, 0x29, 0x00, 0x00, 0x09, 0x32, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x46, 0x00, 0x02, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x09, 0x42, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x1A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x08, + 0x22, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x02, 0x00, + 0x2A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x0B, 0x12, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xA6, 0x00, 0x00, 0x08, 0xF2, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x09, + 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x08, + 0xF2, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, 0x53, 0x54, 0x41, 0x54, + 0x94, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x24, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, +}; diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_64bpb_2x_cs.txt b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_64bpb_2x_cs.txt new file mode 100644 index 000000000..374615db8 --- /dev/null +++ b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_64bpb_2x_cs.txt @@ -0,0 +1,166 @@ +// +// Generated by Microsoft (R) HLSL Shader Compiler 10.1 +// +// +// Buffer Definitions: +// +// cbuffer XeTextureLoadConstants +// { +// +// uint xe_texture_load_guest_base; // Offset: 0 Size: 4 +// uint xe_texture_load_guest_pitch; // Offset: 4 Size: 4 +// uint xe_texture_load_host_base; // Offset: 8 Size: 4 +// uint xe_texture_load_host_pitch; // Offset: 12 Size: 4 +// uint3 xe_texture_load_size_texels; // Offset: 16 Size: 12 [unused] +// bool xe_texture_load_is_3d; // Offset: 28 Size: 4 +// uint3 xe_texture_load_size_blocks; // Offset: 32 Size: 12 +// uint xe_texture_load_endianness; // Offset: 44 Size: 4 +// uint2 xe_texture_guest_storage_width_height;// Offset: 48 Size: 8 +// uint xe_texture_load_guest_format; // Offset: 56 Size: 4 [unused] +// uint3 xe_texture_load_guest_mip_offset;// Offset: 64 Size: 12 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim ID HLSL Bind Count +// ------------------------------ ---------- ------- ----------- ------- -------------- ------ +// xe_texture_load_source texture byte r/o T0 t0 1 +// xe_texture_load_dest UAV byte r/w U0 u0 1 +// XeTextureLoadConstants cbuffer NA NA CB0 cb0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Input +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Output +cs_5_1 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer CB0[0:0][5], immediateIndexed, space=0 +dcl_resource_raw T0[0:0], space=0 +dcl_uav_raw U0[0:0], space=0 +dcl_input vThreadID.xyz +dcl_temps 5 +dcl_thread_group 16, 16, 1 +uge r0.xyz, vThreadID.xyzx, CB0[0][2].xyzx +or r0.x, r0.y, r0.x +or r0.x, r0.z, r0.x +if_nz r0.x + ret +endif +iadd r0.xyzw, vThreadID.zyyx, CB0[0][4].zyyx +ieq r1.x, CB0[0][0].y, l(-1) +if_nz r1.x + if_nz CB0[0][1].w + ushr r1.xyzw, r0.xyzw, l(2, 4, 3, 3) + ushr r2.xy, CB0[0][3].yxyy, l(4, 5, 0, 0) + imad r0.y, r1.x, r2.x, r1.y + iadd r1.x, r1.z, r1.x + bfi r1.y, l(1), l(1), r1.x, l(0) + iadd r1.y, r1.w, r1.y + bfi r1.y, l(2), l(1), r1.y, l(0) + bfi r1.x, l(1), l(0), r1.x, r1.y + ishl r1.y, r0.z, l(11) + and r1.y, r1.y, l(0x00003000) + bfi r1.y, l(3), l(9), r0.w, r1.y + ushr r1.y, r1.y, l(6) + ushr r1.z, r0.w, l(5) + imad r0.y, r0.y, r2.y, r1.z + and r1.z, r1.y, l(240) + bfi r2.xy, l(19, 19, 0, 0), l(11, 14, 0, 0), r0.yyyy, l(0, 0, 0, 0) + imad r1.zw, r1.zzzz, l(0, 0, 2, 16), r2.xxxy + bfi r1.yz, l(0, 4, 4, 0), l(0, 0, 3, 0), r1.yyyy, r1.zzwz + bfi r1.yz, l(0, 2, 2, 0), l(0, 9, 12, 0), r0.xxxx, r1.yyzy + ubfe r0.y, l(3), l(6), r1.y + and r1.w, r1.x, l(6) + bfi r1.x, l(1), l(8), r1.x, l(0) + imad r0.y, r0.y, l(32), r1.x + imad r0.y, r1.w, l(4), r0.y + bfi r1.xy, l(1, 1, 0, 0), l(4, 7, 0, 0), r0.zzzz, r1.yzyy + bfi r0.y, l(9), l(3), r0.y, r1.y + bfi r0.y, l(6), l(0), r1.x, r0.y + else + ushr r1.xyzw, r0.wzwz, l(5, 5, 3, 2) + iadd r2.x, CB0[0][3].x, l(31) + ushr r2.x, r2.x, l(5) + imad r1.x, r1.y, r2.x, r1.x + ishl r2.xy, r0.zzzz, l(5, 7, 0, 0) + and r2.xy, r2.xyxx, l(448, 2048, 0, 0) + bfi r1.y, l(3), l(3), r0.w, r2.x + ishl r2.x, r2.x, l(1) + bfi r2.x, l(3), l(4), r0.w, r2.x + and r2.x, r2.x, l(992) + bfi r2.z, l(22), l(10), r1.x, r2.x + bfi r2.z, l(4), l(0), r1.y, r2.z + bfi r2.z, l(1), l(4), r0.z, r2.z + ishl r2.xw, r2.xxxx, l(3, 0, 0, 2) + bfi r2.xw, l(22, 0, 0, 22), l(13, 0, 0, 12), r1.xxxx, r2.xxxw + bfi r1.xy, l(4, 4, 0, 0), l(3, 2, 0, 0), r1.yyyy, r2.xwxx + bfi r1.xy, l(1, 1, 0, 0), l(7, 6, 0, 0), r0.zzzz, r1.xyxx + bfi r1.x, l(12), l(0), r2.y, r1.x + and r1.y, r1.y, l(1792) + iadd r1.x, r1.x, r1.y + and r1.y, r1.w, l(2) + iadd r1.y, r1.y, r1.z + bfi r1.y, l(2), l(6), r1.y, l(0) + iadd r1.x, r1.x, r1.y + bfi r0.y, l(6), l(0), r2.z, r1.x + endif +else + ishl r0.w, r0.w, l(3) + iadd r1.x, CB0[0][2].y, l(31) + and r1.x, r1.x, l(-32) + imad r0.x, r0.x, r1.x, r0.z + imad r0.y, r0.x, CB0[0][0].y, r0.w +endif +iadd r0.x, r0.y, CB0[0][0].x +ishl r0.x, r0.x, l(2) +ld_raw r1.xyzw, r0.x, T0[0].xyzw +iadd r0.x, r0.x, l(16) +ld_raw r0.xyzw, r0.x, T0[0].xyzw +ushr r2.x, CB0[0][2].w, l(1) +xor r2.x, r2.x, CB0[0][2].w +and r2.x, r2.x, l(1) +if_nz r2.x + ishl r3.xyzw, r1.xyzw, l(8, 8, 8, 8) + and r3.xyzw, r3.xyzw, l(0xff00ff00, 0xff00ff00, 0xff00ff00, 0xff00ff00) + ushr r4.xyzw, r1.xyzw, l(8, 8, 8, 8) + and r4.xyzw, r4.xyzw, l(0x00ff00ff, 0x00ff00ff, 0x00ff00ff, 0x00ff00ff) + iadd r1.xyzw, r3.xyzw, r4.xyzw +endif +and r2.y, CB0[0][2].w, l(2) +if_nz r2.y + ushr r3.xyzw, r1.xyzw, l(16, 16, 16, 16) + bfi r1.xyzw, l(16, 16, 16, 16), l(16, 16, 16, 16), r1.xyzw, r3.xyzw +endif +if_nz r2.x + ishl r3.xyzw, r0.xyzw, l(8, 8, 8, 8) + and r3.xyzw, r3.xyzw, l(0xff00ff00, 0xff00ff00, 0xff00ff00, 0xff00ff00) + ushr r4.xyzw, r0.xyzw, l(8, 8, 8, 8) + and r4.xyzw, r4.xyzw, l(0x00ff00ff, 0x00ff00ff, 0x00ff00ff, 0x00ff00ff) + iadd r0.xyzw, r3.xyzw, r4.xyzw +endif +if_nz r2.y + ushr r2.xyzw, r0.xyzw, l(16, 16, 16, 16) + bfi r0.xyzw, l(16, 16, 16, 16), l(16, 16, 16, 16), r0.xyzw, r2.xyzw +endif +ishl r2.xy, vThreadID.xyxx, l(1, 1, 0, 0) +ishl r2.z, CB0[0][2].y, l(1) +ishl r2.x, r2.x, l(3) +imad r2.y, vThreadID.z, r2.z, r2.y +imad r2.x, r2.y, CB0[0][0].w, r2.x +iadd r2.x, r2.x, CB0[0][0].z +store_raw U0[0].xyzw, r2.x, r1.xyzw +iadd r1.x, r2.x, CB0[0][0].w +store_raw U0[0].xyzw, r1.x, r0.xyzw +ret +// Approximately 112 instruction slots used diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_8bpb_2x_cs.cso b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_8bpb_2x_cs.cso new file mode 100644 index 0000000000000000000000000000000000000000..b3cbd4b964bf0cdee06b14e284d7f14458e825a9 GIT binary patch literal 6112 zcmb7{O>9(E6vyveN}+`a^5F+DQUnbUqELu2gpeyA6%+iTNN{1sLZ@`JbefqV5TnMR zY>c{cM_jmom^5+a+68f8;>w*17fnoz3**9t(Utyx@4YiU^ZLfdlbpHto^$U1eBF27 zn^PB0oc!t56Hndw`<=TV+}<^G?Dcy;)ItbL4~DQ-;}P*TP4B$+qv&9CB%fp_xrta4-O?4V!`g*H99TpcCb)t2S{7Dk9qn{OUHO@k_dwF(+ZnkAE%DXa6 z^`=hq?dkIxDan^V7|#`T0htPnB1+(`~hZO#^=dk;UY7I7 zQD<81t5e+p%B#(VdTVB;)98j5nwQ(HPHUz+w)fn=u`_2U&yG#bPE9x3V<%fz7n*aL z96I>qAvOE?$>(0=3_^@AmDZDIPG4NVC4^UW+1*rJZ>|ru*L0mte9GxvCS8RYeWB}X z;=O(yiqDb%ekeC`zjYn|ww{1ljU$rZ)=}rI^X$^8ecHDrTZJ$xyIRVhm#1ZSsgPe7 zj@(TnZLQfe5!tQr=5icVTX*!jo5h|Th3#lDdfom)cC@hF8HU!_{J6r}E`GG|m-(si zM-F4M>G^wqITrSi2hX_2)_m)LsZZdFj}OS7k^3tY=2@{A0@X z#DWbZyN%Fa=9|1?TF&3Da^`9-y88W_EJ>$#lrRpQ|j~+WaU;a!pHw-&phF9)kOe_1uUdw@f zWsI!$lJ`bo@ILhH&sP-&GS5*M)Y7v*UsV|1AM=>1bFto5Vc0pe5sWfX5A;@3ePZxV z&F&YlS9{m-OwcFxXEjU9cNxz;%-uIGJO5n8!j3&g^4oh)kGl6S__Y+mPL0CqeLL8< z06P5aF78h3i5q`*hY}z1eTwB=MJyHvJ%Uuvp53s%E5M2={|}&P{vc|w^J8}$K0L=H zL5ZwZ7NcV7<;1%OU$vCQ(8H%kQ8JIs9GO3B%njdiCl~r;eKxE&Wb4^-vFH9_={?8P ze}=KMx-x=W#vm8ZF-cG&_EJAaFv}R_{9@|I1m8bTV9;lBwmZ^tF4xa|VHZ<>zT}Q< zRHJ8~GyBRIK40cBt?Zl6xeB8yXY%swbFRYJD0|PuQ6}y(Vk90gtZwDAl0Dnf+h{r4 z8T9AG>NX;K&%SQ{tQbaB-OQhjzHaO*$5B-`e0lbD1H+yV<`!d2TKHmXZr{6RN4?D6 zzVC<=Sr)G_u=Oloy=R?oP;#!x4tv9AZqKe^DbMVC+HkW`cD+#;K1b%ZH%eC~@5^#9 zd#fq6jAUrB%F3dUyH`cc&9Kd2^@xn)o|?N&m}s>j?3`1>!#qWH!_f zlFf!K#oT1x7dG6hkn+y%1#k@gj~17mxWgaN@-difQ@(n3fsEl#l+`@ED;%@tXd) p+BJFp+4G;tc2>+C3y}+?9)xY;?3)C^0OIcPWc$7B|IRrp{{pWw7YG0V literal 0 HcmV?d00001 diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_8bpb_2x_cs.h b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_8bpb_2x_cs.h new file mode 100644 index 000000000..98230eae2 --- /dev/null +++ b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_8bpb_2x_cs.h @@ -0,0 +1,514 @@ +// generated from `xb buildhlsl` +// source: texture_load_8bpb_2x.cs.hlsl +const uint8_t texture_load_8bpb_2x_cs[] = { + 0x44, 0x58, 0x42, 0x43, 0xDC, 0x85, 0x26, 0x2F, 0xA5, 0xF9, 0x7C, 0xA6, + 0x83, 0x9B, 0x21, 0x04, 0x3C, 0x5D, 0xC2, 0xD1, 0x01, 0x00, 0x00, 0x00, + 0xE0, 0x17, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x14, 0x05, 0x00, 0x00, 0x24, 0x05, 0x00, 0x00, 0x34, 0x05, 0x00, 0x00, + 0x44, 0x17, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0xD8, 0x04, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x3C, 0x00, 0x00, 0x00, 0x01, 0x05, 0x53, 0x43, 0x00, 0x05, 0x00, 0x00, + 0xAE, 0x04, 0x00, 0x00, 0x13, 0x13, 0x44, 0x25, 0x3C, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, + 0x24, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xB4, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xCB, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, + 0x6F, 0x61, 0x64, 0x5F, 0x73, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x00, 0x78, + 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, 0x6F, + 0x61, 0x64, 0x5F, 0x64, 0x65, 0x73, 0x74, 0x00, 0x58, 0x65, 0x54, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x4C, 0x6F, 0x61, 0x64, 0x43, 0x6F, 0x6E, + 0x73, 0x74, 0x61, 0x6E, 0x74, 0x73, 0x00, 0xAB, 0xE0, 0x00, 0x00, 0x00, + 0x0B, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC8, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0xEC, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xEC, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x2C, 0x03, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xEC, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x46, 0x03, 0x00, 0x00, + 0x0C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0xEC, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x03, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x84, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xA8, 0x03, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xC4, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xE8, 0x03, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x84, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x04, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xEC, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x1F, 0x04, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x4C, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x70, 0x04, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xEC, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x8D, 0x04, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x84, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x67, 0x75, 0x65, 0x73, + 0x74, 0x5F, 0x62, 0x61, 0x73, 0x65, 0x00, 0x64, 0x77, 0x6F, 0x72, 0x64, + 0x00, 0xAB, 0xAB, 0xAB, 0x00, 0x00, 0x13, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xE3, 0x02, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x67, 0x75, 0x65, 0x73, + 0x74, 0x5F, 0x70, 0x69, 0x74, 0x63, 0x68, 0x00, 0x78, 0x65, 0x5F, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, + 0x68, 0x6F, 0x73, 0x74, 0x5F, 0x62, 0x61, 0x73, 0x65, 0x00, 0x78, 0x65, + 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, + 0x64, 0x5F, 0x68, 0x6F, 0x73, 0x74, 0x5F, 0x70, 0x69, 0x74, 0x63, 0x68, + 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, + 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x73, 0x69, 0x7A, 0x65, 0x5F, 0x74, 0x65, + 0x78, 0x65, 0x6C, 0x73, 0x00, 0x75, 0x69, 0x6E, 0x74, 0x33, 0x00, 0xAB, + 0x01, 0x00, 0x13, 0x00, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7D, 0x03, 0x00, 0x00, + 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, + 0x6F, 0x61, 0x64, 0x5F, 0x69, 0x73, 0x5F, 0x33, 0x64, 0x00, 0x62, 0x6F, + 0x6F, 0x6C, 0x00, 0xAB, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xBE, 0x03, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x73, 0x69, 0x7A, 0x65, + 0x5F, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x73, 0x00, 0x78, 0x65, 0x5F, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, + 0x65, 0x6E, 0x64, 0x69, 0x61, 0x6E, 0x6E, 0x65, 0x73, 0x73, 0x00, 0x78, + 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x67, 0x75, + 0x65, 0x73, 0x74, 0x5F, 0x73, 0x74, 0x6F, 0x72, 0x61, 0x67, 0x65, 0x5F, + 0x77, 0x69, 0x64, 0x74, 0x68, 0x5F, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x00, 0x75, 0x69, 0x6E, 0x74, 0x32, 0x00, 0xAB, 0x01, 0x00, 0x13, 0x00, + 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x45, 0x04, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, + 0x67, 0x75, 0x65, 0x73, 0x74, 0x5F, 0x66, 0x6F, 0x72, 0x6D, 0x61, 0x74, + 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, + 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x67, 0x75, 0x65, 0x73, 0x74, 0x5F, 0x6D, + 0x69, 0x70, 0x5F, 0x6F, 0x66, 0x66, 0x73, 0x65, 0x74, 0x00, 0x4D, 0x69, + 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, + 0x48, 0x4C, 0x53, 0x4C, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, + 0x43, 0x6F, 0x6D, 0x70, 0x69, 0x6C, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2E, + 0x31, 0x00, 0xAB, 0xAB, 0x49, 0x53, 0x47, 0x4E, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x4F, 0x53, 0x47, 0x4E, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x53, 0x48, 0x45, 0x58, 0x08, 0x12, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, + 0x82, 0x04, 0x00, 0x00, 0x6A, 0x08, 0x00, 0x01, 0x59, 0x00, 0x00, 0x07, + 0x46, 0x8E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xA1, 0x00, 0x00, 0x06, 0x46, 0x7E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x9D, 0x00, 0x00, 0x06, 0x46, 0xEE, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5F, 0x00, 0x00, 0x02, 0x72, 0x00, 0x02, 0x00, 0x68, 0x00, 0x00, 0x02, + 0x09, 0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x06, + 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x02, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x04, + 0x62, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x06, 0x02, 0x00, + 0x50, 0x00, 0x00, 0x09, 0x72, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x82, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x3C, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, + 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, + 0x15, 0x00, 0x00, 0x01, 0x1E, 0x00, 0x00, 0x09, 0x72, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x82, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x09, 0x82, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x04, 0x03, 0x3A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x05, 0x3A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, 0x72, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x66, 0x09, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0C, + 0x32, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x16, 0x85, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x09, + 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x56, 0x05, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x14, 0xF2, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x09, 0xF2, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xF6, 0x0F, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x56, 0x05, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x14, + 0xF2, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x16, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0x16, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x0C, 0xF2, 0x00, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, + 0xF2, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x56, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x0F, 0xF2, 0x00, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x14, + 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x0C, 0xF2, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x0C, 0xF2, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x14, 0xF2, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0x16, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, + 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x0C, 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, + 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, + 0xA6, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, + 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x01, 0x1E, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, 0x32, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x09, + 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x07, + 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x09, 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0xF6, 0x0F, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x0A, 0x52, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x56, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0x52, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x06, 0x02, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, + 0xF2, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, + 0xF2, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0xF6, 0x0F, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, + 0xF2, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, + 0xF2, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, + 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, + 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x00, 0x07, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xF6, 0x0F, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x14, + 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, + 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x12, 0x00, 0x00, 0x01, + 0x1E, 0x00, 0x00, 0x09, 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0xE0, 0xFF, 0xFF, 0xFF, 0x23, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x0B, 0x12, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x1E, 0x00, 0x00, 0x09, + 0xF2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x06, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0xA5, 0x00, 0x00, 0x08, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x70, 0x20, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA5, 0x00, 0x00, 0x08, + 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x70, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xA5, 0x00, 0x00, 0x08, 0x22, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x70, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xA5, 0x00, 0x00, 0x08, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x70, 0x20, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x09, + 0xC2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x02, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x09, + 0x42, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x08, + 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x02, 0x00, + 0x2A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x0B, 0x42, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x09, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0xC2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x06, 0x04, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x04, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x08, + 0x32, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0x0A, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x09, 0x42, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, 0x32, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, + 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x08, 0x32, 0xE0, 0x21, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3E, 0x00, 0x00, 0x01, 0x53, 0x54, 0x41, 0x54, 0x94, 0x00, 0x00, 0x00, + 0x68, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, + 0x14, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, +}; diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_8bpb_2x_cs.txt b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_8bpb_2x_cs.txt new file mode 100644 index 000000000..1df1bdd14 --- /dev/null +++ b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_8bpb_2x_cs.txt @@ -0,0 +1,158 @@ +// +// Generated by Microsoft (R) HLSL Shader Compiler 10.1 +// +// +// Buffer Definitions: +// +// cbuffer XeTextureLoadConstants +// { +// +// uint xe_texture_load_guest_base; // Offset: 0 Size: 4 +// uint xe_texture_load_guest_pitch; // Offset: 4 Size: 4 +// uint xe_texture_load_host_base; // Offset: 8 Size: 4 +// uint xe_texture_load_host_pitch; // Offset: 12 Size: 4 +// uint3 xe_texture_load_size_texels; // Offset: 16 Size: 12 [unused] +// bool xe_texture_load_is_3d; // Offset: 28 Size: 4 +// uint3 xe_texture_load_size_blocks; // Offset: 32 Size: 12 +// uint xe_texture_load_endianness; // Offset: 44 Size: 4 [unused] +// uint2 xe_texture_guest_storage_width_height;// Offset: 48 Size: 8 +// uint xe_texture_load_guest_format; // Offset: 56 Size: 4 [unused] +// uint3 xe_texture_load_guest_mip_offset;// Offset: 64 Size: 12 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim ID HLSL Bind Count +// ------------------------------ ---------- ------- ----------- ------- -------------- ------ +// xe_texture_load_source texture byte r/o T0 t0 1 +// xe_texture_load_dest UAV byte r/w U0 u0 1 +// XeTextureLoadConstants cbuffer NA NA CB0 cb0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Input +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Output +cs_5_1 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer CB0[0:0][5], immediateIndexed, space=0 +dcl_resource_raw T0[0:0], space=0 +dcl_uav_raw U0[0:0], space=0 +dcl_input vThreadID.xyz +dcl_temps 9 +dcl_thread_group 4, 16, 1 +ishl r0.x, vThreadID.x, l(2) +mov r0.yz, vThreadID.yyzy +uge r1.xyz, r0.xyzx, CB0[0][2].xyzx +or r0.w, r1.y, r1.x +or r0.w, r1.z, r0.w +if_nz r0.w + ret +endif +iadd r0.xyz, r0.xyzx, CB0[0][4].xyzx +ieq r0.w, CB0[0][0].y, l(-1) +if_nz r0.w + if_nz CB0[0][1].w + iadd r1.xyzw, r0.xxxx, l(0, 1, 2, 3) + ushr r2.xyz, r0.zyyz, l(2, 4, 3, 0) + ushr r3.xy, CB0[0][3].yxyy, l(4, 5, 0, 0) + imad r0.w, r2.x, r3.x, r2.y + iadd r2.x, r2.z, r2.x + bfi r2.y, l(1), l(1), r2.x, l(0) + ushr r4.xyzw, r1.xyzw, l(3, 3, 3, 3) + iadd r4.xyzw, r2.yyyy, r4.xyzw + bfi r4.xyzw, l(2, 2, 2, 2), l(1, 1, 1, 1), r4.xyzw, l(0, 0, 0, 0) + bfi r2.xyzw, l(1, 1, 1, 1), l(0, 0, 0, 0), r2.xxxx, r4.xyzw + ishl r3.x, r0.y, l(2) + and r3.x, r3.x, l(24) + bfi r4.xyzw, l(3, 3, 3, 3), l(0, 0, 0, 0), r1.xyzw, r3.xxxx + ushr r1.xyzw, r1.xyzw, l(5, 5, 5, 5) + imad r1.xyzw, r0.wwww, r3.yyyy, r1.xyzw + and r3.xyzw, r4.xyzw, l(16, 16, 16, 16) + bfi r5.xyzw, l(22, 22, 22, 22), l(8, 8, 8, 8), r1.xyzw, l(0, 0, 0, 0) + imad r5.xyzw, r3.xyzw, l(2, 2, 2, 2), r5.xyzw + bfi r5.xyzw, l(4, 4, 4, 4), l(0, 0, 0, 0), r4.xyzw, r5.xyzw + bfi r5.xyzw, l(2, 2, 2, 2), l(6, 6, 6, 6), r0.zzzz, r5.xyzw + bfi r6.xyzw, l(1, 1, 1, 1), l(4, 4, 4, 4), r0.yyyy, r5.xyzw + ubfe r5.xyzw, l(3, 3, 3, 3), l(6, 6, 6, 6), r5.xyzw + and r7.xyzw, r2.xyzw, l(6, 6, 6, 6) + bfi r2.xyzw, l(1, 1, 1, 1), l(8, 8, 8, 8), r2.xyzw, l(0, 0, 0, 0) + imad r2.xyzw, r5.xyzw, l(32, 32, 32, 32), r2.xyzw + imad r2.xyzw, r7.xyzw, l(4, 4, 4, 4), r2.xyzw + bfi r1.xyzw, l(22, 22, 22, 22), l(11, 11, 11, 11), r1.xyzw, l(0, 0, 0, 0) + imad r1.xyzw, r3.xyzw, l(16, 16, 16, 16), r1.xyzw + bfi r1.xyzw, l(4, 4, 4, 4), l(3, 3, 3, 3), r4.xyzw, r1.xyzw + bfi r1.xyzw, l(2, 2, 2, 2), l(9, 9, 9, 9), r0.zzzz, r1.xyzw + bfi r1.xyzw, l(1, 1, 1, 1), l(7, 7, 7, 7), r0.yyyy, r1.xyzw + bfi r1.xyzw, l(9, 9, 9, 9), l(3, 3, 3, 3), r2.xyzw, r1.xyzw + bfi r1.xyzw, l(6, 6, 6, 6), l(0, 0, 0, 0), r6.xyzw, r1.xyzw + else + iadd r2.xyzw, r0.xxxx, l(0, 1, 2, 3) + ushr r3.xyzw, r2.xyzw, l(5, 5, 5, 5) + ushr r4.xy, r0.yyyy, l(5, 2, 0, 0) + iadd r0.w, CB0[0][3].x, l(31) + ushr r0.w, r0.w, l(5) + imad r3.xyzw, r4.xxxx, r0.wwww, r3.xyzw + ishl r4.xz, r0.yyyy, l(2, 0, 7, 0) + and r4.xz, r4.xxzx, l(56, 0, 2048, 0) + bfi r5.xyzw, l(3, 3, 3, 3), l(0, 0, 0, 0), r2.xyzw, r4.xxxx + ishl r0.w, r4.x, l(1) + bfi r6.xyzw, l(3, 3, 3, 3), l(1, 1, 1, 1), r2.xyzw, r0.wwww + and r6.xyzw, r6.xyzw, l(96, 96, 96, 96) + bfi r7.xyzw, l(25, 25, 25, 25), l(7, 7, 7, 7), r3.xyzw, r6.xyzw + bfi r7.xyzw, l(4, 4, 4, 4), l(0, 0, 0, 0), r5.xyzw, r7.xyzw + bfi r7.xyzw, l(1, 1, 1, 1), l(4, 4, 4, 4), r0.yyyy, r7.xyzw + ishl r8.xyzw, r6.xyzw, l(3, 3, 3, 3) + bfi r8.xyzw, l(25, 25, 25, 25), l(10, 10, 10, 10), r3.xyzw, r8.xyzw + bfi r8.xyzw, l(4, 4, 4, 4), l(3, 3, 3, 3), r5.xyzw, r8.xyzw + bfi r8.xyzw, l(1, 1, 1, 1), l(7, 7, 7, 7), r0.yyyy, r8.xyzw + bfi r8.xyzw, l(12, 12, 12, 12), l(0, 0, 0, 0), r4.zzzz, r8.xyzw + ishl r6.xyzw, r6.xyzw, l(2, 2, 2, 2) + bfi r3.xyzw, l(25, 25, 25, 25), l(9, 9, 9, 9), r3.xyzw, r6.xyzw + bfi r3.xyzw, l(4, 4, 4, 4), l(2, 2, 2, 2), r5.xyzw, r3.xyzw + bfi r3.xyzw, l(1, 1, 1, 1), l(6, 6, 6, 6), r0.yyyy, r3.xyzw + and r3.xyzw, r3.xyzw, l(1792, 1792, 1792, 1792) + iadd r3.xyzw, r8.xyzw, r3.xyzw + ushr r2.xyzw, r2.xyzw, l(3, 3, 3, 3) + and r0.w, r4.y, l(2) + iadd r2.xyzw, r0.wwww, r2.xyzw + bfi r2.xyzw, l(2, 2, 2, 2), l(6, 6, 6, 6), r2.xyzw, l(0, 0, 0, 0) + iadd r2.xyzw, r3.xyzw, r2.xyzw + bfi r1.xyzw, l(6, 6, 6, 6), l(0, 0, 0, 0), r7.xyzw, r2.xyzw + endif +else + iadd r0.w, CB0[0][2].y, l(31) + and r0.w, r0.w, l(-32) + imad r0.y, r0.z, r0.w, r0.y + imad r0.x, r0.y, CB0[0][0].y, r0.x + iadd r1.xyzw, r0.xxxx, l(0, 1, 2, 3) +endif +iadd r0.xyzw, r1.xyzw, CB0[0][0].xxxx +ishl r0.xyzw, r0.xyzw, l(2, 2, 2, 2) +ld_raw r1.x, r0.x, T0[0].xxxx +ld_raw r0.x, r0.y, T0[0].xxxx +ld_raw r1.y, r0.z, T0[0].xxxx +ld_raw r0.y, r0.w, T0[0].xxxx +ishl r0.zw, vThreadID.xxxy, l(0, 0, 3, 1) +ishl r1.z, CB0[0][2].y, l(1) +imad r0.w, vThreadID.z, r1.z, r0.w +imad r0.z, r0.w, CB0[0][0].w, r0.z +iadd r0.z, r0.z, CB0[0][0].z +bfi r1.zw, l(0, 0, 16, 16), l(0, 0, 16, 16), r0.xxxy, r1.xxxy +store_raw U0[0].xy, r0.z, r1.zwzz +iadd r0.z, r0.z, CB0[0][0].w +ushr r1.xy, r1.xyxx, l(16, 16, 0, 0) +bfi r0.xy, l(16, 16, 0, 0), l(0, 0, 0, 0), r1.xyxx, r0.xyxx +store_raw U0[0].xy, r0.z, r0.xyxx +ret +// Approximately 104 instruction slots used diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_depth_float_2x_cs.cso b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_depth_float_2x_cs.cso new file mode 100644 index 0000000000000000000000000000000000000000..5449258a69f5b2d2152744d4b6df80a71a008b07 GIT binary patch literal 5660 zcma)=-;0!07{|}NtE;YCy8aB2TwMcQBy<&wCFJ$jWME~km0b<1GwV*RJIlm z=fM4=)~EKUT509PaVC8w+s2J29%AePwLPKjmL60?zE)eM)~^PSN!(}bC$-gT%i$J; zDH8Z%&TF+wyLPR8rCF=YG$yN+R^v+ZV$J1;tF>0!ov)qCpr?gA-k5E*CuiF&H@_gx zwQB1{d`8;j$0X}1eMk3?@O)Q-#q@d=49s%4eZrCZa=5Z^)O9)Bq;Ttnvo&~K&xplk z`g4tM*SPV0-vjr%#)pN2k5qf{tq{>Z*^RGPU3LhtUpR7x?=%x67MJNcjX$FCVD4Gx z_XJ3VTQ0u*;$OO=)vsKbY}H)#YNJ_o^YioC(b`AxP7-k>zbfEjp1FGa;`9>Rbi-Wa zXL(EUq*nc9zkO>nEqA3p+dk;#OFpi!Kv6u_eO0EshkC1Wu<9-}8Z%CLkyY=!zAc#V z!?-ZhxcFjg33qL_TA!Sqt+f`JvWm9ajppQ~TIFiJ+McdV*Xoz1+dhvm%Y#)fmXlh` zd>$F=RHJ!$vfaaYxjt8EOii_FZTCd|Vzbd|OtpvioZUNo>h#3v;fd+VYOOhZym5K1 zKBLZo{SP0|Vn06d*puu*1pQR*dE(T`^CxtWp4MeIq_|#K?MlzK+v&mG-uo4R`eO}h&G0<`qG2)btmAaN{O3#t?P^PH|*RRd=b~S8(o_oT`A4Z zuJM9Vf8}_DW9%8{2Jk_@eE)j=D)BVC1MtD_rU^GVCLB3#d86wKTasq?fz@0?ZbY%| z5*{Hh_|eR#E<7tgUn~05!!YP~bHz+>3)Fvoo4dGK$1hA|$nR!_s2 z&3xLNy^&91N5BrCBb(tpk6y_6c>2OT_WF3>u{o-FCoda=hxakIVigA;zb&~2qV>FW_&GNj@2Be=|nfbw%7sWI9U5NGeK(?ky+C>o; zv-@?@=*$1mg@8{|4M^CFG$cv&6QnO_{If@Hug!E32i!CyN%bS4?tD)m{XPoi(w}j> z9o3QA;tNgvJ2g`sZ-!WHj~IrvF4|A{jInwwTr+rvWi#wZ6wi3@35L254?^Co9kobO zzZZR9k6w~A!}I-T!kQo-h8hz0uD}QX8rjf&(&oqV&tv_!qOgd?ZF4q=CcbaJ(OMx% zn(bTmEG+RevGD*_z{<1NFP5 zH^5UL*3arPsIj<~VzR zJtOz>Z#>{^zU63ZZ!vEcgtO0{=dMJE8DUO{x$s*C8yLG3HBJR(k?>DoRuMf+TiSDmX&hdAd zBg z#s2L3$~6A+bIhOluv*&M*j&?Z>NSXuKKZk`+RuKyYz&>G&i$?P6Su>H?> zN)(;mE_+6X%YeyQQ&~ h8sCfvHA42N@pm}J<8KH(E)v7XgZIM6xL$o~{vWNL7Zd;h literal 0 HcmV?d00001 diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_depth_float_2x_cs.h b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_depth_float_2x_cs.h new file mode 100644 index 000000000..11a3bfa0a --- /dev/null +++ b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_depth_float_2x_cs.h @@ -0,0 +1,476 @@ +// generated from `xb buildhlsl` +// source: texture_load_depth_float_2x.cs.hlsl +const uint8_t texture_load_depth_float_2x_cs[] = { + 0x44, 0x58, 0x42, 0x43, 0x64, 0x21, 0x76, 0x8B, 0xFD, 0x37, 0xF1, 0x72, + 0xCC, 0xAD, 0xA9, 0x7C, 0xA3, 0x22, 0x94, 0x88, 0x01, 0x00, 0x00, 0x00, + 0x1C, 0x16, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x14, 0x05, 0x00, 0x00, 0x24, 0x05, 0x00, 0x00, 0x34, 0x05, 0x00, 0x00, + 0x80, 0x15, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0xD8, 0x04, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x3C, 0x00, 0x00, 0x00, 0x01, 0x05, 0x53, 0x43, 0x00, 0x05, 0x00, 0x00, + 0xAE, 0x04, 0x00, 0x00, 0x13, 0x13, 0x44, 0x25, 0x3C, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, + 0x24, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xB4, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xCB, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, + 0x6F, 0x61, 0x64, 0x5F, 0x73, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x00, 0x78, + 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, 0x6F, + 0x61, 0x64, 0x5F, 0x64, 0x65, 0x73, 0x74, 0x00, 0x58, 0x65, 0x54, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x4C, 0x6F, 0x61, 0x64, 0x43, 0x6F, 0x6E, + 0x73, 0x74, 0x61, 0x6E, 0x74, 0x73, 0x00, 0xAB, 0xE0, 0x00, 0x00, 0x00, + 0x0B, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC8, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0xEC, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xEC, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x2C, 0x03, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xEC, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x46, 0x03, 0x00, 0x00, + 0x0C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0xEC, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x03, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x84, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xA8, 0x03, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xC4, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xE8, 0x03, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x84, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x04, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xEC, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x1F, 0x04, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x4C, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x70, 0x04, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xEC, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x8D, 0x04, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x84, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x67, 0x75, 0x65, 0x73, + 0x74, 0x5F, 0x62, 0x61, 0x73, 0x65, 0x00, 0x64, 0x77, 0x6F, 0x72, 0x64, + 0x00, 0xAB, 0xAB, 0xAB, 0x00, 0x00, 0x13, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xE3, 0x02, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x67, 0x75, 0x65, 0x73, + 0x74, 0x5F, 0x70, 0x69, 0x74, 0x63, 0x68, 0x00, 0x78, 0x65, 0x5F, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, + 0x68, 0x6F, 0x73, 0x74, 0x5F, 0x62, 0x61, 0x73, 0x65, 0x00, 0x78, 0x65, + 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, + 0x64, 0x5F, 0x68, 0x6F, 0x73, 0x74, 0x5F, 0x70, 0x69, 0x74, 0x63, 0x68, + 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, + 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x73, 0x69, 0x7A, 0x65, 0x5F, 0x74, 0x65, + 0x78, 0x65, 0x6C, 0x73, 0x00, 0x75, 0x69, 0x6E, 0x74, 0x33, 0x00, 0xAB, + 0x01, 0x00, 0x13, 0x00, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7D, 0x03, 0x00, 0x00, + 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, + 0x6F, 0x61, 0x64, 0x5F, 0x69, 0x73, 0x5F, 0x33, 0x64, 0x00, 0x62, 0x6F, + 0x6F, 0x6C, 0x00, 0xAB, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xBE, 0x03, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x73, 0x69, 0x7A, 0x65, + 0x5F, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x73, 0x00, 0x78, 0x65, 0x5F, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, + 0x65, 0x6E, 0x64, 0x69, 0x61, 0x6E, 0x6E, 0x65, 0x73, 0x73, 0x00, 0x78, + 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x67, 0x75, + 0x65, 0x73, 0x74, 0x5F, 0x73, 0x74, 0x6F, 0x72, 0x61, 0x67, 0x65, 0x5F, + 0x77, 0x69, 0x64, 0x74, 0x68, 0x5F, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x00, 0x75, 0x69, 0x6E, 0x74, 0x32, 0x00, 0xAB, 0x01, 0x00, 0x13, 0x00, + 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x45, 0x04, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, + 0x67, 0x75, 0x65, 0x73, 0x74, 0x5F, 0x66, 0x6F, 0x72, 0x6D, 0x61, 0x74, + 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, + 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x67, 0x75, 0x65, 0x73, 0x74, 0x5F, 0x6D, + 0x69, 0x70, 0x5F, 0x6F, 0x66, 0x66, 0x73, 0x65, 0x74, 0x00, 0x4D, 0x69, + 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, + 0x48, 0x4C, 0x53, 0x4C, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, + 0x43, 0x6F, 0x6D, 0x70, 0x69, 0x6C, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2E, + 0x31, 0x00, 0xAB, 0xAB, 0x49, 0x53, 0x47, 0x4E, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x4F, 0x53, 0x47, 0x4E, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x53, 0x48, 0x45, 0x58, 0x44, 0x10, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, + 0x11, 0x04, 0x00, 0x00, 0x6A, 0x08, 0x00, 0x01, 0x59, 0x00, 0x00, 0x07, + 0x46, 0x8E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xA1, 0x00, 0x00, 0x06, 0x46, 0x7E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x9D, 0x00, 0x00, 0x06, 0x46, 0xEE, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5F, 0x00, 0x00, 0x02, 0x72, 0x00, 0x02, 0x00, 0x68, 0x00, 0x00, 0x02, + 0x05, 0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x08, + 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x02, 0x00, + 0x46, 0x82, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1F, 0x00, 0x04, 0x03, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3E, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x01, 0x1E, 0x00, 0x00, 0x08, + 0xF2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x01, 0x02, 0x00, + 0x66, 0x81, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x04, 0x03, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x05, 0x3A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0C, 0x32, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x16, 0x85, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, + 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, + 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x0A, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, + 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x07, + 0x42, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x14, 0x32, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x0C, 0xC2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xA6, 0x0A, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x06, 0x04, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0x62, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xA6, 0x0B, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, + 0x62, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x06, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, + 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0x32, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x96, 0x05, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x01, 0x55, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0xB6, 0x0B, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x0A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, + 0x55, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, 0x32, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, + 0x32, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x0B, 0x12, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x0B, 0x42, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, + 0x42, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, 0x42, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x0A, 0x92, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0x92, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x06, 0x0C, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0x32, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xC6, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, + 0x32, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xA6, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x00, 0x07, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, + 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x01, 0x12, 0x00, 0x00, 0x01, 0x29, 0x00, 0x00, 0x07, + 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0xE0, 0xFF, 0xFF, 0xFF, 0x23, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x01, 0x1E, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xA5, 0x00, 0x00, 0x08, + 0xF2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x7E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x09, + 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, + 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x0F, 0xF2, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x05, + 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0xF5, 0xFF, 0xFF, 0xFF, 0xF5, 0xFF, 0xFF, 0xFF, + 0xF5, 0xFF, 0xFF, 0xFF, 0xF5, 0xFF, 0xFF, 0xFF, 0x37, 0x00, 0x00, 0x0C, + 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0B, + 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x80, + 0x41, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x09, 0xF2, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0xFF, 0xFF, 0x0F, 0x00, + 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0xFF, 0x0F, 0x00, + 0x37, 0x00, 0x00, 0x09, 0xF2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x17, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, + 0x17, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x38, 0x29, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x0C, 0xF2, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x09, 0x32, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x46, 0x00, 0x02, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x09, 0x42, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x08, + 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x02, 0x00, + 0x2A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x0B, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xA6, 0x00, 0x00, 0x08, 0x32, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x46, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x09, + 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x08, + 0x32, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0x0A, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, 0x53, 0x54, 0x41, 0x54, + 0x94, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x28, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, +}; diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_depth_float_2x_cs.txt b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_depth_float_2x_cs.txt new file mode 100644 index 000000000..fa58d41bf --- /dev/null +++ b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_depth_float_2x_cs.txt @@ -0,0 +1,169 @@ +// +// Generated by Microsoft (R) HLSL Shader Compiler 10.1 +// +// +// Buffer Definitions: +// +// cbuffer XeTextureLoadConstants +// { +// +// uint xe_texture_load_guest_base; // Offset: 0 Size: 4 +// uint xe_texture_load_guest_pitch; // Offset: 4 Size: 4 +// uint xe_texture_load_host_base; // Offset: 8 Size: 4 +// uint xe_texture_load_host_pitch; // Offset: 12 Size: 4 +// uint3 xe_texture_load_size_texels; // Offset: 16 Size: 12 [unused] +// bool xe_texture_load_is_3d; // Offset: 28 Size: 4 +// uint3 xe_texture_load_size_blocks; // Offset: 32 Size: 12 +// uint xe_texture_load_endianness; // Offset: 44 Size: 4 +// uint2 xe_texture_guest_storage_width_height;// Offset: 48 Size: 8 +// uint xe_texture_load_guest_format; // Offset: 56 Size: 4 [unused] +// uint3 xe_texture_load_guest_mip_offset;// Offset: 64 Size: 12 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim ID HLSL Bind Count +// ------------------------------ ---------- ------- ----------- ------- -------------- ------ +// xe_texture_load_source texture byte r/o T0 t0 1 +// xe_texture_load_dest UAV byte r/w U0 u0 1 +// XeTextureLoadConstants cbuffer NA NA CB0 cb0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Input +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Output +cs_5_1 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer CB0[0:0][5], immediateIndexed, space=0 +dcl_resource_raw T0[0:0], space=0 +dcl_uav_raw U0[0:0], space=0 +dcl_input vThreadID.xyz +dcl_temps 5 +dcl_thread_group 16, 16, 1 +uge r0.xyz, vThreadID.xyzx, CB0[0][2].xyzx +or r0.x, r0.y, r0.x +or r0.x, r0.z, r0.x +if_nz r0.x + ret +endif +iadd r0.xyzw, vThreadID.zyyx, CB0[0][4].zyyx +ieq r1.x, CB0[0][0].y, l(-1) +if_nz r1.x + if_nz CB0[0][1].w + ushr r1.xyzw, r0.xyzw, l(2, 4, 3, 3) + ushr r2.xy, CB0[0][3].yxyy, l(4, 5, 0, 0) + imad r0.y, r1.x, r2.x, r1.y + iadd r1.x, r1.z, r1.x + bfi r1.y, l(1), l(1), r1.x, l(0) + iadd r1.y, r1.w, r1.y + bfi r1.y, l(2), l(1), r1.y, l(0) + bfi r1.x, l(1), l(0), r1.x, r1.y + ishl r1.y, r0.z, l(10) + and r1.y, r1.y, l(6144) + bfi r1.y, l(3), l(8), r0.w, r1.y + ushr r1.y, r1.y, l(6) + ushr r1.z, r0.w, l(5) + imad r0.y, r0.y, r2.y, r1.z + and r1.z, r1.y, l(112) + bfi r2.xy, l(20, 20, 0, 0), l(10, 13, 0, 0), r0.yyyy, l(0, 0, 0, 0) + imad r1.zw, r1.zzzz, l(0, 0, 2, 16), r2.xxxy + bfi r1.yz, l(0, 4, 4, 0), l(0, 0, 3, 0), r1.yyyy, r1.zzwz + bfi r1.yz, l(0, 2, 2, 0), l(0, 8, 11, 0), r0.xxxx, r1.yyzy + ubfe r0.y, l(3), l(6), r1.y + and r1.w, r1.x, l(6) + bfi r1.x, l(1), l(8), r1.x, l(0) + imad r0.y, r0.y, l(32), r1.x + imad r0.y, r1.w, l(4), r0.y + bfi r1.xy, l(1, 1, 0, 0), l(4, 7, 0, 0), r0.zzzz, r1.yzyy + bfi r0.y, l(9), l(3), r0.y, r1.y + bfi r0.y, l(6), l(0), r1.x, r0.y + else + ushr r1.xyzw, r0.wzwz, l(5, 5, 3, 2) + iadd r2.x, CB0[0][3].x, l(31) + ushr r2.x, r2.x, l(5) + imad r1.x, r1.y, r2.x, r1.x + ishl r2.xy, r0.zzzz, l(4, 7, 0, 0) + and r2.xy, r2.xyxx, l(224, 2048, 0, 0) + bfi r1.y, l(3), l(2), r0.w, r2.x + ishl r2.x, r2.x, l(1) + bfi r2.x, l(3), l(3), r0.w, r2.x + and r2.x, r2.x, l(480) + bfi r2.z, l(23), l(9), r1.x, r2.x + bfi r2.z, l(4), l(0), r1.y, r2.z + bfi r2.z, l(1), l(4), r0.z, r2.z + ishl r2.xw, r2.xxxx, l(3, 0, 0, 2) + bfi r2.xw, l(23, 0, 0, 23), l(12, 0, 0, 11), r1.xxxx, r2.xxxw + bfi r1.xy, l(4, 4, 0, 0), l(3, 2, 0, 0), r1.yyyy, r2.xwxx + bfi r1.xy, l(1, 1, 0, 0), l(7, 6, 0, 0), r0.zzzz, r1.xyxx + bfi r1.x, l(12), l(0), r2.y, r1.x + and r1.y, r1.y, l(1792) + iadd r1.x, r1.x, r1.y + and r1.y, r1.w, l(2) + iadd r1.y, r1.y, r1.z + bfi r1.y, l(2), l(6), r1.y, l(0) + iadd r1.x, r1.x, r1.y + bfi r0.y, l(6), l(0), r2.z, r1.x + endif +else + ishl r0.w, r0.w, l(2) + iadd r1.x, CB0[0][2].y, l(31) + and r1.x, r1.x, l(-32) + imad r0.x, r0.x, r1.x, r0.z + imad r0.y, r0.x, CB0[0][0].y, r0.w +endif +iadd r0.x, r0.y, CB0[0][0].x +ishl r0.x, r0.x, l(2) +ld_raw r0.xyzw, r0.x, T0[0].xyzw +ushr r1.x, CB0[0][2].w, l(1) +xor r1.x, r1.x, CB0[0][2].w +and r1.x, r1.x, l(1) +if_nz r1.x + ishl r1.xyzw, r0.xyzw, l(8, 8, 8, 8) + and r1.xyzw, r1.xyzw, l(0xff00ff00, 0xff00ff00, 0xff00ff00, 0xff00ff00) + ushr r2.xyzw, r0.xyzw, l(8, 8, 8, 8) + and r2.xyzw, r2.xyzw, l(0x00ff00ff, 0x00ff00ff, 0x00ff00ff, 0x00ff00ff) + iadd r0.xyzw, r1.xyzw, r2.xyzw +endif +and r1.x, CB0[0][2].w, l(2) +if_nz r1.x + ushr r1.xyzw, r0.xyzw, l(16, 16, 16, 16) + bfi r0.xyzw, l(16, 16, 16, 16), l(16, 16, 16, 16), r0.xyzw, r1.xyzw +endif +ushr r1.xyzw, r0.xyzw, l(8, 8, 8, 8) +ubfe r0.xyzw, l(20, 20, 20, 20), l(8, 8, 8, 8), r0.xyzw +ushr r2.xyzw, r1.xyzw, l(20, 20, 20, 20) +firstbit_hi r3.xyzw, r0.xyzw +iadd r3.xyzw, r3.xyzw, l(-11, -11, -11, -11) +movc r3.xyzw, r0.xyzw, r3.xyzw, l(21,21,21,21) +iadd r4.xyzw, -r3.xyzw, l(1, 1, 1, 1) +movc r4.xyzw, r2.xyzw, r2.xyzw, r4.xyzw +ishl r3.xyzw, r0.xyzw, r3.xyzw +and r3.xyzw, r3.xyzw, l(0x000fffff, 0x000fffff, 0x000fffff, 0x000fffff) +movc r0.xyzw, r2.xyzw, r0.xyzw, r3.xyzw +ishl r2.xyzw, r4.xyzw, l(23, 23, 23, 23) +iadd r2.xyzw, r2.xyzw, l(0x38000000, 0x38000000, 0x38000000, 0x38000000) +ishl r0.xyzw, r0.xyzw, l(3, 3, 3, 3) +iadd r0.xyzw, r2.xyzw, r0.xyzw +movc r0.xyzw, r1.xyzw, r0.xyzw, l(0,0,0,0) +ishl r1.xy, vThreadID.xyxx, l(1, 1, 0, 0) +ishl r1.z, CB0[0][2].y, l(1) +ishl r1.x, r1.x, l(2) +imad r1.y, vThreadID.z, r1.z, r1.y +imad r1.x, r1.y, CB0[0][0].w, r1.x +iadd r1.x, r1.x, CB0[0][0].z +store_raw U0[0].xy, r1.x, r0.xyxx +iadd r0.x, r1.x, CB0[0][0].w +store_raw U0[0].xy, r0.x, r0.zwzz +ret +// Approximately 115 instruction slots used diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_depth_unorm_2x_cs.cso b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_depth_unorm_2x_cs.cso new file mode 100644 index 0000000000000000000000000000000000000000..a4a0649040bcc59fc215a9114ffd4bcd198d36b6 GIT binary patch literal 5132 zcma)9(E6vywp(gLND^5q9HGEy|q5QW0RG=@AWjF?nKiioSpv@>N!OQ+6E12K^x zQ5QyB7~{scU?I^oab;Y(FvOU+bmOv#i802wV52+y|K7W2=Jxds^)z?xefRwD|9sqY z?|VIU@#NIwPu_a#T>IuDPv80Hmk<8@dZ^%>8`~mviS%oi6>l z$vJTUstu?;t5z7CnPSm5((T%H>Ivo^Ry*k10rewl$hT^n)rQpIF$u@a{j9b{Z6n;O zFnI!B$a%F^?$oY!mRq&*LbFmWx0}nYxthyPS8MH#yI4D)LZ^kCYA&`rmBmimt*nZ3 zo7$*|&#E{1DN08Q-!c5lKi`v}v3^tu1G5qCuyDk_5w0X0dEE$C5pGmC+k^M?jF?~6 zf2H|HHE(=(`r!W1d{H>~2(=&ICJ`N$-uU|EWuE{?gd=A7rdc2{zpP)<{4<*O>b`lt zDL^dTM*d|t|I)H{zdT!M*Ie~VvsHB~D=VsK)lpbUA`av?Ih@b4)acCB*Xim_Gm%}D zXz~}e8*eA&TU%(m<;G&?m|H0%e)$aw{ITIXQe`bP+T~+aH`{D3IK@R&{p0#RXMN(v z>_T(y&GtI(+G4d)SzN5O*QnBrwmZ#M-ln8dzp}8zl$RSz<>vf+yVh|pHs)H*c5}W{Jb3O<@yzthbaAF$sn%M>spjRS#)1Y% zk34l$oBhJf^Dj|@2>r{M=b1C7FCO3S+$*~5ZYn=-Y;lFxb)A(yrh0p#t1yvUy1q)+ z*6L7v!TjGxQ&8|*R{6Jd0_y77+0Rw#oLd?@byjY*k|*a%QRGTDdfa4C_wMGMUccA( z!@du7;~CvPw`ss|CuC}m+GDbH*W>03k(+EH2ywwr z&wBF0v*Jr~#h82;hW;a6^Q>oFh}DAL_?SoFG3=yYV>Yrp*f&1I7!O#>r(sNIHf_zJ zz$U&UV29}go#7K6y^yp14ES}_`lRQvHOhH6E}Mgg_c6MYK2}?Yjy)I)a?d)1p4ctV z_-N}x?j>R5<8IsQDAt4KXeLpd#`%CvsJ}3n+Ci5U`7`o^_x1L0x~EaxL*W;zhjh{y z%l?j8kB?$aNT@{`62Nx}CH^KNGot**8z4?kih9y5b!^7l?ImYJT3YQcRy~J_>H-4C}@K0(TVm@$xf8lvZ>*?7~ z+Z*#IizNqO5zF7W=gML&Ueqb@#{EWgZ)@%}JtOzC zZ#>{^y~SvIZ$9r4gtJf0b5|nxjIhT0ock?<4h-j=m@Tiyjc!%{oQ(PVLa-#a))OcG zAi{L-HP$29??A7}Bd=Lo;`cprsL>(=1liDLcSTl**f6CD2jA3np;NAWtkq~7ok zfe*X%;Mos7-#1_2!g$R;F;H9cDLApEqamnxFV*_C$T(d|c2g%Iq1B z{-;iInO$3O*N=rwd$@JN_E4FL;^bT;xneB>hI^m5!}=ya)F$&*w~Vc>tZsEqw%8pp zE*s;<<$LM7_nX}>VNHs%%V}pQv@;&O&%xf7y@}Pw875->aGxT^!PsFHN$KYsuIFZJg~oO6#|?cA97T^c(zxkckHjjyh9?#RJIGe2!{ z4%}ZFqZ;>WjEv1rv*=6duDIght;nv?xGjxa#3wYMuQV>wsA*uwD4!$yQDdvdX1H}> zst9|z%`?qLuX(0-y3=edx91ib-S+9uiKZ)y7n{e(=Ri;X9_krRRS{XpC=H!oX~XyInY9-wZb+9C_UgHz(Y7;j9L4=ovD< zjDI2d^^%*t?}p%hmAoz-_6T*Dy)80yyYyynSYCDsuva)@#@=BTh|DkJtCHU%c~TF} z^Sc5B;WqQHT>O)#RsF{NT({{KUTAj~+}hfjI$C{{cajWe^s^kUwzJymomkqSTWZ@D zN*l%%A^=dk# zT9)G|tS+`Yr{;P?l&4y&jrQVVx7l+Kw@!50-S%Rye%p~f^#>2n93R0SL&wkTaPDzkcF)MKXSceMr*xgoyhryANLOK` zPj!9GynMb6#V5%B*jIqE--g=1qZ6YQ5!mD;0qm&YgP#)TUR#d*0~xcMYM zR`c9V+dAoa#U9q9BJW8i$7T`-!DO=UP_Pbg&eU_Ntc;inHpEbPHaUdnDk=zJ*d4y%tuZnu29S$K%Jun%WFdEr^{#auBbABKUyqgMj!nU4gGjGH~= z5OxeZmDboEWjpL|_6%coz*;^HV>;W@)~ILtd*V9;b{wAR3?J?2Zw)o;g;Jl{Ldo zT{^?=&it85dx9Y^_yZ9)wIdfk#9oYZJx21O!1JwWL`|TNQV#L^=4221+oXe!irYRG ze;FIUD}{y3Z(DP@%;fjY*QyodL(#YNE_+ZTo#}YDF(1$FEcE!YOPn)6ej_GvbanS?txf67>Lz#7Q%H<@geu@*0Dz(9s2#~-A1 zoG)_WLy;RzBO#N`9ftFv@HHy+gWo==?y=xPNU2N=6G9QXM;**gNgZ?s^ z-5cL0-^w;(Yz7whq38|z+{k)|-T+U2sGsF!Lb5!U#7o|j?aDiz2F%}&hPPU1ZGRm- zVS8aae;*p2dVs+<&UTK+xAX2aJwq4T-|T?1^%kSm-h94N5Y9e5&s_=OGsK$YbLF=T zIxw7fVz#`RZFKAU&e@&r3&CP;jT0ySK*IFzHP%Dr?Ez(>(!+xNcUGi=KQ6HOqTbSAbp#57V>>2v-dJs^8KxB<5w-! z&j&puQry&$J7_2Q#z!C6!@27;j3eVd;yrHstxK{#lsqSWr(K3U?s^{vYiuntbnIcg zmcDhk{a z&ZX~W{5@hh9!a^@-=g>}-S}rocTD-R{1(=V|1;x%f6j6*t>4t&#QKJ~@y+T8fI31x z=qFLRjuwyA&$tg8Ye5|$AM{fqtE2gC^)v3npniEBF=KVa7mLH{X>|lw6;HX2;K)1V zgMNn85seT3y^exA>IhjKnb%au$W=%Dw>l!Dj+S4Zsh@G-`uCyLuzY^2YHc~f&V6d% k*`xO#{ZR84H8^t+7-&-C1`TRJ&WDlVO-~K~FLBrW3+XoyBme*a literal 0 HcmV?d00001 diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_r10g11b11_rgba16_2x_cs.h b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_r10g11b11_rgba16_2x_cs.h new file mode 100644 index 000000000..9e2c01259 --- /dev/null +++ b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_r10g11b11_rgba16_2x_cs.h @@ -0,0 +1,502 @@ +// generated from `xb buildhlsl` +// source: texture_load_r10g11b11_rgba16_2x.cs.hlsl +const uint8_t texture_load_r10g11b11_rgba16_2x_cs[] = { + 0x44, 0x58, 0x42, 0x43, 0xED, 0x85, 0x81, 0x29, 0x52, 0xFE, 0x5D, 0x43, + 0x7F, 0x06, 0xCB, 0xC6, 0x90, 0xE4, 0x20, 0x71, 0x01, 0x00, 0x00, 0x00, + 0x50, 0x17, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x14, 0x05, 0x00, 0x00, 0x24, 0x05, 0x00, 0x00, 0x34, 0x05, 0x00, 0x00, + 0xB4, 0x16, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0xD8, 0x04, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x3C, 0x00, 0x00, 0x00, 0x01, 0x05, 0x53, 0x43, 0x00, 0x05, 0x00, 0x00, + 0xAE, 0x04, 0x00, 0x00, 0x13, 0x13, 0x44, 0x25, 0x3C, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, + 0x24, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xB4, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xCB, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, + 0x6F, 0x61, 0x64, 0x5F, 0x73, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x00, 0x78, + 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, 0x6F, + 0x61, 0x64, 0x5F, 0x64, 0x65, 0x73, 0x74, 0x00, 0x58, 0x65, 0x54, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x4C, 0x6F, 0x61, 0x64, 0x43, 0x6F, 0x6E, + 0x73, 0x74, 0x61, 0x6E, 0x74, 0x73, 0x00, 0xAB, 0xE0, 0x00, 0x00, 0x00, + 0x0B, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC8, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0xEC, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xEC, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x2C, 0x03, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xEC, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x46, 0x03, 0x00, 0x00, + 0x0C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0xEC, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x03, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x84, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xA8, 0x03, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xC4, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xE8, 0x03, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x84, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x04, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xEC, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x1F, 0x04, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x4C, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x70, 0x04, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xEC, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x8D, 0x04, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x84, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x67, 0x75, 0x65, 0x73, + 0x74, 0x5F, 0x62, 0x61, 0x73, 0x65, 0x00, 0x64, 0x77, 0x6F, 0x72, 0x64, + 0x00, 0xAB, 0xAB, 0xAB, 0x00, 0x00, 0x13, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xE3, 0x02, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x67, 0x75, 0x65, 0x73, + 0x74, 0x5F, 0x70, 0x69, 0x74, 0x63, 0x68, 0x00, 0x78, 0x65, 0x5F, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, + 0x68, 0x6F, 0x73, 0x74, 0x5F, 0x62, 0x61, 0x73, 0x65, 0x00, 0x78, 0x65, + 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, + 0x64, 0x5F, 0x68, 0x6F, 0x73, 0x74, 0x5F, 0x70, 0x69, 0x74, 0x63, 0x68, + 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, + 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x73, 0x69, 0x7A, 0x65, 0x5F, 0x74, 0x65, + 0x78, 0x65, 0x6C, 0x73, 0x00, 0x75, 0x69, 0x6E, 0x74, 0x33, 0x00, 0xAB, + 0x01, 0x00, 0x13, 0x00, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7D, 0x03, 0x00, 0x00, + 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, + 0x6F, 0x61, 0x64, 0x5F, 0x69, 0x73, 0x5F, 0x33, 0x64, 0x00, 0x62, 0x6F, + 0x6F, 0x6C, 0x00, 0xAB, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xBE, 0x03, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x73, 0x69, 0x7A, 0x65, + 0x5F, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x73, 0x00, 0x78, 0x65, 0x5F, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, + 0x65, 0x6E, 0x64, 0x69, 0x61, 0x6E, 0x6E, 0x65, 0x73, 0x73, 0x00, 0x78, + 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x67, 0x75, + 0x65, 0x73, 0x74, 0x5F, 0x73, 0x74, 0x6F, 0x72, 0x61, 0x67, 0x65, 0x5F, + 0x77, 0x69, 0x64, 0x74, 0x68, 0x5F, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x00, 0x75, 0x69, 0x6E, 0x74, 0x32, 0x00, 0xAB, 0x01, 0x00, 0x13, 0x00, + 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x45, 0x04, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, + 0x67, 0x75, 0x65, 0x73, 0x74, 0x5F, 0x66, 0x6F, 0x72, 0x6D, 0x61, 0x74, + 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, + 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x67, 0x75, 0x65, 0x73, 0x74, 0x5F, 0x6D, + 0x69, 0x70, 0x5F, 0x6F, 0x66, 0x66, 0x73, 0x65, 0x74, 0x00, 0x4D, 0x69, + 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, + 0x48, 0x4C, 0x53, 0x4C, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, + 0x43, 0x6F, 0x6D, 0x70, 0x69, 0x6C, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2E, + 0x31, 0x00, 0xAB, 0xAB, 0x49, 0x53, 0x47, 0x4E, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x4F, 0x53, 0x47, 0x4E, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x53, 0x48, 0x45, 0x58, 0x78, 0x11, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, + 0x5E, 0x04, 0x00, 0x00, 0x6A, 0x08, 0x00, 0x01, 0x59, 0x00, 0x00, 0x07, + 0x46, 0x8E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xA1, 0x00, 0x00, 0x06, 0x46, 0x7E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x9D, 0x00, 0x00, 0x06, 0x46, 0xEE, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5F, 0x00, 0x00, 0x02, 0x72, 0x00, 0x02, 0x00, 0x68, 0x00, 0x00, 0x02, + 0x05, 0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x06, + 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x02, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x04, + 0x62, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x06, 0x02, 0x00, + 0x50, 0x00, 0x00, 0x09, 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x82, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x3C, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, + 0x15, 0x00, 0x00, 0x01, 0x1E, 0x00, 0x00, 0x08, 0xF2, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x66, 0x01, 0x02, 0x00, 0x66, 0x81, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x1F, 0x00, 0x04, 0x03, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1F, 0x00, 0x04, 0x05, 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x55, 0x00, 0x00, 0x0C, 0x32, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x16, 0x85, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x2A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x0B, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, + 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x00, 0x18, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x55, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x09, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x2A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, + 0x42, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x14, 0x32, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x0A, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x0C, + 0xC2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x06, 0x04, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, + 0x62, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x56, 0x05, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0xA6, 0x0B, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0x62, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x56, 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x8A, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0x32, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x96, 0x05, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x12, 0x00, 0x00, 0x01, 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xB6, 0x0B, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x09, + 0x12, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x0A, 0x32, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0xA6, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0x32, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, + 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, + 0x12, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, + 0x42, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x17, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, 0x42, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x0B, 0x42, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, + 0x92, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0x92, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0B, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x06, 0x0C, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, + 0x32, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x56, 0x05, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0xC6, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0x32, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x0B, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, + 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, + 0x12, 0x00, 0x00, 0x01, 0x29, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x09, + 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, + 0x23, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, + 0x1E, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xA5, 0x00, 0x00, 0x08, 0xF2, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xE6, 0x74, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x55, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x57, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xE6, 0x04, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0xE6, 0x04, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0xF2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0x04, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xE6, 0x04, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xE6, 0x04, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, + 0xF2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0x04, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x32, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xE6, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x12, 0x00, 0x00, 0x01, 0x36, 0x00, 0x00, 0x05, 0x32, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xE6, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x01, 0x29, 0x00, 0x00, 0x09, 0x32, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x46, 0x00, 0x02, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x09, 0x42, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x1A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x08, + 0x22, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x02, 0x00, + 0x2A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x0B, 0x12, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x55, 0x00, 0x00, 0x0A, 0xC2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x06, 0x04, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x14, 0xF2, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, + 0x1B, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x86, 0x0D, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8A, 0x00, 0x00, 0x0F, 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x1B, 0x00, 0x00, 0x00, 0x06, 0x05, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, 0xC2, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x06, 0x04, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, + 0x32, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, + 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0x32, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xE6, 0x0A, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0x52, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x01, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x06, 0x02, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x0A, 0xA2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x56, 0x0D, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xA6, 0x00, 0x00, 0x08, 0xF2, 0xE0, 0x21, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x55, 0x00, 0x00, 0x0A, 0xC2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x04, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x14, 0xF2, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, + 0x1B, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x86, 0x0D, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8A, 0x00, 0x00, 0x0F, 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x1B, 0x00, 0x00, 0x00, 0x06, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, 0xC2, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, + 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, + 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xE6, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0x52, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x01, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x02, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x0A, 0xA2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x56, 0x0D, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0x1E, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x08, 0xF2, 0xE0, 0x21, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3E, 0x00, 0x00, 0x01, 0x53, 0x54, 0x41, 0x54, 0x94, 0x00, 0x00, 0x00, + 0x7A, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, + 0x1D, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, +}; diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_r10g11b11_rgba16_2x_cs.txt b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_r10g11b11_rgba16_2x_cs.txt new file mode 100644 index 000000000..dbf27b5c5 --- /dev/null +++ b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_r10g11b11_rgba16_2x_cs.txt @@ -0,0 +1,176 @@ +// +// Generated by Microsoft (R) HLSL Shader Compiler 10.1 +// +// +// Buffer Definitions: +// +// cbuffer XeTextureLoadConstants +// { +// +// uint xe_texture_load_guest_base; // Offset: 0 Size: 4 +// uint xe_texture_load_guest_pitch; // Offset: 4 Size: 4 +// uint xe_texture_load_host_base; // Offset: 8 Size: 4 +// uint xe_texture_load_host_pitch; // Offset: 12 Size: 4 +// uint3 xe_texture_load_size_texels; // Offset: 16 Size: 12 [unused] +// bool xe_texture_load_is_3d; // Offset: 28 Size: 4 +// uint3 xe_texture_load_size_blocks; // Offset: 32 Size: 12 +// uint xe_texture_load_endianness; // Offset: 44 Size: 4 +// uint2 xe_texture_guest_storage_width_height;// Offset: 48 Size: 8 +// uint xe_texture_load_guest_format; // Offset: 56 Size: 4 [unused] +// uint3 xe_texture_load_guest_mip_offset;// Offset: 64 Size: 12 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim ID HLSL Bind Count +// ------------------------------ ---------- ------- ----------- ------- -------------- ------ +// xe_texture_load_source texture byte r/o T0 t0 1 +// xe_texture_load_dest UAV byte r/w U0 u0 1 +// XeTextureLoadConstants cbuffer NA NA CB0 cb0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Input +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Output +cs_5_1 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer CB0[0:0][5], immediateIndexed, space=0 +dcl_resource_raw T0[0:0], space=0 +dcl_uav_raw U0[0:0], space=0 +dcl_input vThreadID.xyz +dcl_temps 5 +dcl_thread_group 16, 16, 1 +ishl r0.x, vThreadID.x, l(2) +mov r0.yz, vThreadID.yyzy +uge r0.xyz, r0.xyzx, CB0[0][2].xyzx +or r0.x, r0.y, r0.x +or r0.x, r0.z, r0.x +if_nz r0.x + ret +endif +iadd r0.xyzw, vThreadID.zyyx, CB0[0][4].zyyx +ieq r1.x, CB0[0][0].y, l(-1) +if_nz r1.x + if_nz CB0[0][1].w + ushr r1.xyzw, r0.xyzw, l(2, 4, 3, 3) + ushr r2.xy, CB0[0][3].yxyy, l(4, 5, 0, 0) + imad r0.y, r1.x, r2.x, r1.y + iadd r1.x, r1.z, r1.x + bfi r1.y, l(1), l(1), r1.x, l(0) + iadd r1.y, r1.w, r1.y + bfi r1.y, l(2), l(1), r1.y, l(0) + bfi r1.x, l(1), l(0), r1.x, r1.y + ishl r1.y, r0.z, l(10) + and r1.y, r1.y, l(6144) + bfi r1.y, l(3), l(8), r0.w, r1.y + ushr r1.y, r1.y, l(6) + ushr r1.z, r0.w, l(5) + imad r0.y, r0.y, r2.y, r1.z + and r1.z, r1.y, l(112) + bfi r2.xy, l(20, 20, 0, 0), l(10, 13, 0, 0), r0.yyyy, l(0, 0, 0, 0) + imad r1.zw, r1.zzzz, l(0, 0, 2, 16), r2.xxxy + bfi r1.yz, l(0, 4, 4, 0), l(0, 0, 3, 0), r1.yyyy, r1.zzwz + bfi r1.yz, l(0, 2, 2, 0), l(0, 8, 11, 0), r0.xxxx, r1.yyzy + ubfe r0.y, l(3), l(6), r1.y + and r1.w, r1.x, l(6) + bfi r1.x, l(1), l(8), r1.x, l(0) + imad r0.y, r0.y, l(32), r1.x + imad r0.y, r1.w, l(4), r0.y + bfi r1.xy, l(1, 1, 0, 0), l(4, 7, 0, 0), r0.zzzz, r1.yzyy + bfi r0.y, l(9), l(3), r0.y, r1.y + bfi r0.y, l(6), l(0), r1.x, r0.y + else + ushr r1.xyzw, r0.wzwz, l(5, 5, 3, 2) + iadd r2.x, CB0[0][3].x, l(31) + ushr r2.x, r2.x, l(5) + imad r1.x, r1.y, r2.x, r1.x + ishl r2.xy, r0.zzzz, l(4, 7, 0, 0) + and r2.xy, r2.xyxx, l(224, 2048, 0, 0) + bfi r1.y, l(3), l(2), r0.w, r2.x + ishl r2.x, r2.x, l(1) + bfi r2.x, l(3), l(3), r0.w, r2.x + and r2.x, r2.x, l(480) + bfi r2.z, l(23), l(9), r1.x, r2.x + bfi r2.z, l(4), l(0), r1.y, r2.z + bfi r2.z, l(1), l(4), r0.z, r2.z + ishl r2.xw, r2.xxxx, l(3, 0, 0, 2) + bfi r2.xw, l(23, 0, 0, 23), l(12, 0, 0, 11), r1.xxxx, r2.xxxw + bfi r1.xy, l(4, 4, 0, 0), l(3, 2, 0, 0), r1.yyyy, r2.xwxx + bfi r1.xy, l(1, 1, 0, 0), l(7, 6, 0, 0), r0.zzzz, r1.xyxx + bfi r1.x, l(12), l(0), r2.y, r1.x + and r1.y, r1.y, l(1792) + iadd r1.x, r1.x, r1.y + and r1.y, r1.w, l(2) + iadd r1.y, r1.y, r1.z + bfi r1.y, l(2), l(6), r1.y, l(0) + iadd r1.x, r1.x, r1.y + bfi r0.y, l(6), l(0), r2.z, r1.x + endif +else + ishl r0.w, r0.w, l(2) + iadd r1.x, CB0[0][2].y, l(31) + and r1.x, r1.x, l(-32) + imad r0.x, r0.x, r1.x, r0.z + imad r0.y, r0.x, CB0[0][0].y, r0.w +endif +iadd r0.x, r0.y, CB0[0][0].x +ishl r0.x, r0.x, l(2) +ld_raw r0.xyzw, r0.x, T0[0].zwxy +ushr r1.x, CB0[0][2].w, l(1) +xor r1.x, r1.x, CB0[0][2].w +and r1.x, r1.x, l(1) +if_nz r1.x + ishl r1.xyzw, r0.zwxy, l(8, 8, 8, 8) + and r1.xyzw, r1.xyzw, l(0xff00ff00, 0xff00ff00, 0xff00ff00, 0xff00ff00) + ushr r2.xyzw, r0.zwxy, l(8, 8, 8, 8) + and r2.xyzw, r2.xyzw, l(0x00ff00ff, 0x00ff00ff, 0x00ff00ff, 0x00ff00ff) + iadd r0.xyzw, r1.zwxy, r2.zwxy +endif +and r1.x, CB0[0][2].w, l(2) +if_nz r1.x + ushr r1.xyzw, r0.zwxy, l(16, 16, 16, 16) + bfi r0.xyzw, l(16, 16, 16, 16), l(16, 16, 16, 16), r0.xyzw, r1.zwxy + mov r1.xy, r0.zwzz +else + mov r1.xy, r0.zwzz +endif +ishl r2.xy, vThreadID.xyxx, l(1, 1, 0, 0) +ishl r2.z, CB0[0][2].y, l(1) +ishl r2.x, r2.x, l(3) +imad r2.y, vThreadID.z, r2.z, r2.y +imad r2.x, r2.y, CB0[0][0].w, r2.x +iadd r2.x, r2.x, CB0[0][0].z +ushr r1.zw, r1.xxxy, l(0, 0, 21, 21) +bfi r3.xyzw, l(10, 27, 10, 27), l(6, 5, 6, 5), r1.xzyw, l(0, 0, 0, 0) +ubfe r4.xyzw, l(6, 5, 6, 5), l(4, 27, 4, 27), r1.xxyy +iadd r3.xyzw, r3.xyzw, r4.xyzw +ishl r1.zw, r1.xxxy, l(0, 0, 11, 11) +and r1.xy, r1.xyxx, l(0x001f0000, 0x001f0000, 0, 0) +bfi r1.xy, l(21, 21, 0, 0), l(0, 0, 0, 0), r1.xyxx, r1.zwzz +iadd r1.xz, r1.xxyx, r3.xxzx +iadd r1.yw, r3.yyyw, l(0, 0xffff0000, 0, 0xffff0000) +store_raw U0[0].xyzw, r2.x, r1.xyzw +ushr r0.zw, r0.xxxy, l(0, 0, 21, 21) +bfi r1.xyzw, l(10, 27, 10, 27), l(6, 5, 6, 5), r0.xzyw, l(0, 0, 0, 0) +ubfe r3.xyzw, l(6, 5, 6, 5), l(4, 27, 4, 27), r0.xxyy +iadd r1.xyzw, r1.xyzw, r3.xyzw +ishl r0.zw, r0.xxxy, l(0, 0, 11, 11) +and r0.xy, r0.xyxx, l(0x001f0000, 0x001f0000, 0, 0) +bfi r0.xy, l(21, 21, 0, 0), l(0, 0, 0, 0), r0.xyxx, r0.zwzz +iadd r0.xz, r0.xxyx, r1.xxzx +iadd r0.yw, r1.yyyw, l(0, 0xffff0000, 0, 0xffff0000) +iadd r1.x, r2.x, CB0[0][0].w +store_raw U0[0].xyzw, r1.x, r0.xyzw +ret +// Approximately 122 instruction slots used diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_r10g11b11_rgba16_snorm_2x_cs.cso b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_r10g11b11_rgba16_snorm_2x_cs.cso new file mode 100644 index 0000000000000000000000000000000000000000..8e19caf54a4a0093e84de8ae3c61040c9f0d5e86 GIT binary patch literal 6788 zcmbuD-D_Q08OC>3nzYSiw4LerQN$i6BhJKOXgh;SkYU-TafJHS)UjTLq&aDhra2+! zlqrHUI*cNsf**(=UMN_Eh*#pJ7cz+8Kj4iJ@MbQ=i{9v6e12=M=bV+@a~d7r@}9N# zdY|>YAM4#~?{x9TrOV&`&`*DK_vUNI{&s)y)S1P9y*W`;)f;E4YD(h^(lfevO8SEI zt@l>dwZ$t-e?3-J;QlS0lzv<~F|~Y|MZcBp@y8cG$lQCRPiK8fJ`)>cvZhK{`ySl#8>)zSD*{+(?>+N2@y3xK~L$3;X zxx3x#uWt8y)!x21ACaCC@#i#J{v7HnrC)LRk9>b1!Q%0h3I^sV+_S=w`%$($=go;q56RCbbx3;DYO z9?i4U>EGOZz_!`7i{`3i8NI02`D$w4_ExXD)7kDnU+qn#xbg-S@%ZvjqdL4)&3ac?at0hcVna1?pL4g+}!QxZ?YHN9Ob-lgYy4=0J)7jF+h4ar{&}M&X`IDca2NA~4Htv^Sx^m+;XR7M+I_y5I z^X|(hs);Y@I9vKY-8&SSlKeu)*V3zpZ5V#e{68<$pyGE$?Z2xhU{fRK-p|zPJhv!2 z^^Dd%mhP%*M!1PsKQA8+FED#+J7E zhV5K+Y;q>gy{NFBkiK8#x}WDZCPKCGjiE1|)t2JH7df2$`p~A^lmpMVdBNyVl0FA7JF@A~G@7q$@Vv%~wNscKHKJt;gwUhp%rp1N?a z{8FvBrXI#Hepjyq)^j}(rNwAI<`H;|UC3+fqsfDR^BH3vu&$>uw%MoGsAmQ~i5&qu z!&umiPds{gH{+Si>v%2}GLP4&<^vy|gNGi*b}8rTb=cU0xuW*0Lm0{3btXoyFS&Pw zQH*E2*CFagbEqZ6I?qQvq4DLZ+7Gs-D4y9r=2-8|)O#A@5Jg<9p4L;zwfvu6%lHsA zA)yyhBt-pWnam^p>5+Sn)Z-`)xKSiT{Ya=g-yXPT(z#Yp`JHB%j5 z&#}5kjA5@w^%FiztZql{89Xi7jGZguS;#)YP#5As$eX>R79plyOxLA3!}CtguB*AR?dv;dE}s{IrP_KVPvSv@8JugZN1ESFj*FOm z1|?j^muC_4evY{|CovKCuZr(C+m>E!$x@5XuR+e`cbRi0_AeF~IGB3?JEksR%kMv) z#rv6~{MO@rRI1h;!od@wehv=*Q~U`>y#EcKaf~58K$rTB_z?K;%LtzR(EUT}1+L83 z@tH^FD#ZF*120zf@@e}WWgj)?d>tq8slF#Ky1t5@$iq$?|}c~8ES|EH{|W+ z*W72`!=;8ue;rn8gLv&=-!$j`U<`5iw}$`b@Y+_cE8lj^QKJy`16iS}N$L^r3HT7@ zN0?I0;ToFPu^s6BTPhq)aSiRuBV6tg&%tY-?h*S06XNh2n0eGaVvcb*_ehDu7aU{r zEBb?82~psNyxsg9k9*Z4@i`}45hD^}I^Q|t2Wp&ilBo*ua9`19t=t!`ucoRH^}|G= zszd4v%_hH?LOk3P^oL_|-N1R@z?VJ2HFHgI-IzBYBV6ta+sgdh7xoDz#PNM0^MHR8 z&ihc}9LL!F{)fI8#rv@Q6i+%ES@*3+hkLK8zE-OK-)-tzewR#7)aN~Ozx3RRdhI>F zul7FxT@t@5y>>p#}@52T#w2xl1boOE8w T^T%F}6XR_M%lq;F5#s+3#yDrG literal 0 HcmV?d00001 diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_r10g11b11_rgba16_snorm_2x_cs.h b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_r10g11b11_rgba16_snorm_2x_cs.h new file mode 100644 index 000000000..3d4fba32a --- /dev/null +++ b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_r10g11b11_rgba16_snorm_2x_cs.h @@ -0,0 +1,570 @@ +// generated from `xb buildhlsl` +// source: texture_load_r10g11b11_rgba16_snorm_2x.cs.hlsl +const uint8_t texture_load_r10g11b11_rgba16_snorm_2x_cs[] = { + 0x44, 0x58, 0x42, 0x43, 0x88, 0x27, 0x98, 0x93, 0x78, 0x63, 0x7F, 0x04, + 0xDD, 0xF2, 0x44, 0x10, 0x14, 0x44, 0xF7, 0xC4, 0x01, 0x00, 0x00, 0x00, + 0x84, 0x1A, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x14, 0x05, 0x00, 0x00, 0x24, 0x05, 0x00, 0x00, 0x34, 0x05, 0x00, 0x00, + 0xE8, 0x19, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0xD8, 0x04, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x3C, 0x00, 0x00, 0x00, 0x01, 0x05, 0x53, 0x43, 0x00, 0x05, 0x00, 0x00, + 0xAE, 0x04, 0x00, 0x00, 0x13, 0x13, 0x44, 0x25, 0x3C, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, + 0x24, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xB4, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xCB, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, + 0x6F, 0x61, 0x64, 0x5F, 0x73, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x00, 0x78, + 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, 0x6F, + 0x61, 0x64, 0x5F, 0x64, 0x65, 0x73, 0x74, 0x00, 0x58, 0x65, 0x54, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x4C, 0x6F, 0x61, 0x64, 0x43, 0x6F, 0x6E, + 0x73, 0x74, 0x61, 0x6E, 0x74, 0x73, 0x00, 0xAB, 0xE0, 0x00, 0x00, 0x00, + 0x0B, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC8, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0xEC, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xEC, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x2C, 0x03, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xEC, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x46, 0x03, 0x00, 0x00, + 0x0C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0xEC, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x03, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x84, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xA8, 0x03, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xC4, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xE8, 0x03, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x84, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x04, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xEC, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x1F, 0x04, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x4C, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x70, 0x04, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xEC, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x8D, 0x04, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x84, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x67, 0x75, 0x65, 0x73, + 0x74, 0x5F, 0x62, 0x61, 0x73, 0x65, 0x00, 0x64, 0x77, 0x6F, 0x72, 0x64, + 0x00, 0xAB, 0xAB, 0xAB, 0x00, 0x00, 0x13, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xE3, 0x02, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x67, 0x75, 0x65, 0x73, + 0x74, 0x5F, 0x70, 0x69, 0x74, 0x63, 0x68, 0x00, 0x78, 0x65, 0x5F, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, + 0x68, 0x6F, 0x73, 0x74, 0x5F, 0x62, 0x61, 0x73, 0x65, 0x00, 0x78, 0x65, + 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, + 0x64, 0x5F, 0x68, 0x6F, 0x73, 0x74, 0x5F, 0x70, 0x69, 0x74, 0x63, 0x68, + 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, + 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x73, 0x69, 0x7A, 0x65, 0x5F, 0x74, 0x65, + 0x78, 0x65, 0x6C, 0x73, 0x00, 0x75, 0x69, 0x6E, 0x74, 0x33, 0x00, 0xAB, + 0x01, 0x00, 0x13, 0x00, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7D, 0x03, 0x00, 0x00, + 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, + 0x6F, 0x61, 0x64, 0x5F, 0x69, 0x73, 0x5F, 0x33, 0x64, 0x00, 0x62, 0x6F, + 0x6F, 0x6C, 0x00, 0xAB, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xBE, 0x03, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x73, 0x69, 0x7A, 0x65, + 0x5F, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x73, 0x00, 0x78, 0x65, 0x5F, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, + 0x65, 0x6E, 0x64, 0x69, 0x61, 0x6E, 0x6E, 0x65, 0x73, 0x73, 0x00, 0x78, + 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x67, 0x75, + 0x65, 0x73, 0x74, 0x5F, 0x73, 0x74, 0x6F, 0x72, 0x61, 0x67, 0x65, 0x5F, + 0x77, 0x69, 0x64, 0x74, 0x68, 0x5F, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x00, 0x75, 0x69, 0x6E, 0x74, 0x32, 0x00, 0xAB, 0x01, 0x00, 0x13, 0x00, + 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x45, 0x04, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, + 0x67, 0x75, 0x65, 0x73, 0x74, 0x5F, 0x66, 0x6F, 0x72, 0x6D, 0x61, 0x74, + 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, + 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x67, 0x75, 0x65, 0x73, 0x74, 0x5F, 0x6D, + 0x69, 0x70, 0x5F, 0x6F, 0x66, 0x66, 0x73, 0x65, 0x74, 0x00, 0x4D, 0x69, + 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, + 0x48, 0x4C, 0x53, 0x4C, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, + 0x43, 0x6F, 0x6D, 0x70, 0x69, 0x6C, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2E, + 0x31, 0x00, 0xAB, 0xAB, 0x49, 0x53, 0x47, 0x4E, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x4F, 0x53, 0x47, 0x4E, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x53, 0x48, 0x45, 0x58, 0xAC, 0x14, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, + 0x2B, 0x05, 0x00, 0x00, 0x6A, 0x08, 0x00, 0x01, 0x59, 0x00, 0x00, 0x07, + 0x46, 0x8E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xA1, 0x00, 0x00, 0x06, 0x46, 0x7E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x9D, 0x00, 0x00, 0x06, 0x46, 0xEE, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5F, 0x00, 0x00, 0x02, 0x72, 0x00, 0x02, 0x00, 0x68, 0x00, 0x00, 0x02, + 0x06, 0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x06, + 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x02, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x04, + 0x62, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x06, 0x02, 0x00, + 0x50, 0x00, 0x00, 0x09, 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x82, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x3C, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, + 0x15, 0x00, 0x00, 0x01, 0x1E, 0x00, 0x00, 0x08, 0xF2, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x66, 0x01, 0x02, 0x00, 0x66, 0x81, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x1F, 0x00, 0x04, 0x03, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1F, 0x00, 0x04, 0x05, 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x55, 0x00, 0x00, 0x0C, 0x32, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x16, 0x85, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x2A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x0B, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, + 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x00, 0x18, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x55, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x09, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x2A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, + 0x42, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x14, 0x32, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x0A, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x0C, + 0xC2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x06, 0x04, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, + 0x62, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x56, 0x05, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0xA6, 0x0B, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0x62, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x56, 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x8A, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0x32, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x96, 0x05, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x12, 0x00, 0x00, 0x01, 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xB6, 0x0B, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x09, + 0x12, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x0A, 0x32, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0xA6, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0x32, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, + 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, + 0x12, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, + 0x42, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x17, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, 0x42, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x0B, 0x42, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, + 0x92, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0x92, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0B, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x06, 0x0C, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, + 0x32, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x56, 0x05, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0xC6, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0x32, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x0B, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, + 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, + 0x12, 0x00, 0x00, 0x01, 0x29, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x09, + 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, + 0x23, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, + 0x1E, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xA5, 0x00, 0x00, 0x08, 0xF2, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x7E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x55, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x57, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0xF2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, + 0xF2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x29, 0x00, 0x00, 0x09, + 0x32, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x00, 0x02, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x09, + 0x42, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x08, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x2A, 0x00, 0x02, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x0B, + 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x2A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, + 0xFF, 0x03, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x0F, + 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x37, 0x00, 0x00, 0x0C, 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x37, 0x00, 0x00, 0x0F, 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0xFF, 0x03, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, + 0xFF, 0x03, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x57, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x0F, + 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, + 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x07, + 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x0F, 0xF2, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, + 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x0F, 0xF2, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x37, 0x00, 0x00, 0x0C, + 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, + 0x01, 0x04, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x0F, + 0xF2, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, + 0xFF, 0x07, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x07, + 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x3C, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x0F, 0xF2, 0x00, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, + 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x3C, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x37, 0x00, 0x00, 0x0C, 0xF2, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, + 0x01, 0x04, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x0F, 0xF2, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, + 0xFF, 0x07, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0xF2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x07, + 0xF2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x37, 0x00, 0x00, 0x0F, 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, + 0xFF, 0xFF, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x57, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x0D, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x7F, + 0x00, 0x00, 0xFF, 0x7F, 0x00, 0x00, 0xFF, 0x7F, 0x00, 0x00, 0xFF, 0x7F, + 0x36, 0x00, 0x00, 0x05, 0x52, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x06, 0x01, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, + 0xA2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x08, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x08, 0xF2, 0xE0, 0x21, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x05, 0x52, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xA6, 0x0B, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x08, + 0xF2, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, 0x53, 0x54, 0x41, 0x54, + 0x94, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2E, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, +}; diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_r10g11b11_rgba16_snorm_2x_cs.txt b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_r10g11b11_rgba16_snorm_2x_cs.txt new file mode 100644 index 000000000..834ac61c5 --- /dev/null +++ b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_r10g11b11_rgba16_snorm_2x_cs.txt @@ -0,0 +1,199 @@ +// +// Generated by Microsoft (R) HLSL Shader Compiler 10.1 +// +// +// Buffer Definitions: +// +// cbuffer XeTextureLoadConstants +// { +// +// uint xe_texture_load_guest_base; // Offset: 0 Size: 4 +// uint xe_texture_load_guest_pitch; // Offset: 4 Size: 4 +// uint xe_texture_load_host_base; // Offset: 8 Size: 4 +// uint xe_texture_load_host_pitch; // Offset: 12 Size: 4 +// uint3 xe_texture_load_size_texels; // Offset: 16 Size: 12 [unused] +// bool xe_texture_load_is_3d; // Offset: 28 Size: 4 +// uint3 xe_texture_load_size_blocks; // Offset: 32 Size: 12 +// uint xe_texture_load_endianness; // Offset: 44 Size: 4 +// uint2 xe_texture_guest_storage_width_height;// Offset: 48 Size: 8 +// uint xe_texture_load_guest_format; // Offset: 56 Size: 4 [unused] +// uint3 xe_texture_load_guest_mip_offset;// Offset: 64 Size: 12 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim ID HLSL Bind Count +// ------------------------------ ---------- ------- ----------- ------- -------------- ------ +// xe_texture_load_source texture byte r/o T0 t0 1 +// xe_texture_load_dest UAV byte r/w U0 u0 1 +// XeTextureLoadConstants cbuffer NA NA CB0 cb0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Input +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Output +cs_5_1 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer CB0[0:0][5], immediateIndexed, space=0 +dcl_resource_raw T0[0:0], space=0 +dcl_uav_raw U0[0:0], space=0 +dcl_input vThreadID.xyz +dcl_temps 6 +dcl_thread_group 16, 16, 1 +ishl r0.x, vThreadID.x, l(2) +mov r0.yz, vThreadID.yyzy +uge r0.xyz, r0.xyzx, CB0[0][2].xyzx +or r0.x, r0.y, r0.x +or r0.x, r0.z, r0.x +if_nz r0.x + ret +endif +iadd r0.xyzw, vThreadID.zyyx, CB0[0][4].zyyx +ieq r1.x, CB0[0][0].y, l(-1) +if_nz r1.x + if_nz CB0[0][1].w + ushr r1.xyzw, r0.xyzw, l(2, 4, 3, 3) + ushr r2.xy, CB0[0][3].yxyy, l(4, 5, 0, 0) + imad r0.y, r1.x, r2.x, r1.y + iadd r1.x, r1.z, r1.x + bfi r1.y, l(1), l(1), r1.x, l(0) + iadd r1.y, r1.w, r1.y + bfi r1.y, l(2), l(1), r1.y, l(0) + bfi r1.x, l(1), l(0), r1.x, r1.y + ishl r1.y, r0.z, l(10) + and r1.y, r1.y, l(6144) + bfi r1.y, l(3), l(8), r0.w, r1.y + ushr r1.y, r1.y, l(6) + ushr r1.z, r0.w, l(5) + imad r0.y, r0.y, r2.y, r1.z + and r1.z, r1.y, l(112) + bfi r2.xy, l(20, 20, 0, 0), l(10, 13, 0, 0), r0.yyyy, l(0, 0, 0, 0) + imad r1.zw, r1.zzzz, l(0, 0, 2, 16), r2.xxxy + bfi r1.yz, l(0, 4, 4, 0), l(0, 0, 3, 0), r1.yyyy, r1.zzwz + bfi r1.yz, l(0, 2, 2, 0), l(0, 8, 11, 0), r0.xxxx, r1.yyzy + ubfe r0.y, l(3), l(6), r1.y + and r1.w, r1.x, l(6) + bfi r1.x, l(1), l(8), r1.x, l(0) + imad r0.y, r0.y, l(32), r1.x + imad r0.y, r1.w, l(4), r0.y + bfi r1.xy, l(1, 1, 0, 0), l(4, 7, 0, 0), r0.zzzz, r1.yzyy + bfi r0.y, l(9), l(3), r0.y, r1.y + bfi r0.y, l(6), l(0), r1.x, r0.y + else + ushr r1.xyzw, r0.wzwz, l(5, 5, 3, 2) + iadd r2.x, CB0[0][3].x, l(31) + ushr r2.x, r2.x, l(5) + imad r1.x, r1.y, r2.x, r1.x + ishl r2.xy, r0.zzzz, l(4, 7, 0, 0) + and r2.xy, r2.xyxx, l(224, 2048, 0, 0) + bfi r1.y, l(3), l(2), r0.w, r2.x + ishl r2.x, r2.x, l(1) + bfi r2.x, l(3), l(3), r0.w, r2.x + and r2.x, r2.x, l(480) + bfi r2.z, l(23), l(9), r1.x, r2.x + bfi r2.z, l(4), l(0), r1.y, r2.z + bfi r2.z, l(1), l(4), r0.z, r2.z + ishl r2.xw, r2.xxxx, l(3, 0, 0, 2) + bfi r2.xw, l(23, 0, 0, 23), l(12, 0, 0, 11), r1.xxxx, r2.xxxw + bfi r1.xy, l(4, 4, 0, 0), l(3, 2, 0, 0), r1.yyyy, r2.xwxx + bfi r1.xy, l(1, 1, 0, 0), l(7, 6, 0, 0), r0.zzzz, r1.xyxx + bfi r1.x, l(12), l(0), r2.y, r1.x + and r1.y, r1.y, l(1792) + iadd r1.x, r1.x, r1.y + and r1.y, r1.w, l(2) + iadd r1.y, r1.y, r1.z + bfi r1.y, l(2), l(6), r1.y, l(0) + iadd r1.x, r1.x, r1.y + bfi r0.y, l(6), l(0), r2.z, r1.x + endif +else + ishl r0.w, r0.w, l(2) + iadd r1.x, CB0[0][2].y, l(31) + and r1.x, r1.x, l(-32) + imad r0.x, r0.x, r1.x, r0.z + imad r0.y, r0.x, CB0[0][0].y, r0.w +endif +iadd r0.x, r0.y, CB0[0][0].x +ishl r0.x, r0.x, l(2) +ld_raw r0.xyzw, r0.x, T0[0].xyzw +ushr r1.x, CB0[0][2].w, l(1) +xor r1.x, r1.x, CB0[0][2].w +and r1.x, r1.x, l(1) +if_nz r1.x + ishl r1.xyzw, r0.xyzw, l(8, 8, 8, 8) + and r1.xyzw, r1.xyzw, l(0xff00ff00, 0xff00ff00, 0xff00ff00, 0xff00ff00) + ushr r2.xyzw, r0.xyzw, l(8, 8, 8, 8) + and r2.xyzw, r2.xyzw, l(0x00ff00ff, 0x00ff00ff, 0x00ff00ff, 0x00ff00ff) + iadd r0.xyzw, r1.xyzw, r2.xyzw +endif +and r1.x, CB0[0][2].w, l(2) +if_nz r1.x + ushr r1.xyzw, r0.xyzw, l(16, 16, 16, 16) + bfi r0.xyzw, l(16, 16, 16, 16), l(16, 16, 16, 16), r0.xyzw, r1.xyzw +endif +ishl r1.xy, vThreadID.xyxx, l(1, 1, 0, 0) +ishl r1.z, CB0[0][2].y, l(1) +ishl r1.x, r1.x, l(3) +imad r1.y, vThreadID.z, r1.z, r1.y +imad r1.x, r1.y, CB0[0][0].w, r1.x +iadd r1.x, r1.x, CB0[0][0].z +and r2.xyzw, r0.xyzw, l(1023, 1023, 1023, 1023) +ubfe r3.xyzw, l(1, 1, 1, 1), l(9, 9, 9, 9), r0.xyzw +ieq r4.xyzw, r2.xyzw, l(512, 512, 512, 512) +movc r2.xyzw, r4.xyzw, l(513,513,513,513), r2.xyzw +movc r4.xyzw, r3.xyzw, l(1023,1023,1023,1023), l(0,0,0,0) +xor r2.xyzw, r2.xyzw, r4.xyzw +iadd r2.xyzw, r3.xyzw, r2.xyzw +ishl r4.xyzw, r2.xyzw, l(6, 6, 6, 6) +ushr r2.xyzw, r2.xyzw, l(3, 3, 3, 3) +or r2.xyzw, r2.xyzw, r4.xyzw +movc r4.xyzw, r3.xyzw, l(0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff), l(0,0,0,0) +xor r2.xyzw, r2.xyzw, r4.xyzw +iadd r2.xyzw, r3.xyzw, r2.xyzw +ubfe r3.xyzw, l(11, 11, 11, 11), l(10, 10, 10, 10), r0.xyzw +ubfe r4.xyzw, l(1, 1, 1, 1), l(20, 20, 20, 20), r0.xyzw +ieq r5.xyzw, r3.xyzw, l(1024, 1024, 1024, 1024) +movc r3.xyzw, r5.xyzw, l(1025,1025,1025,1025), r3.xyzw +movc r5.xyzw, r4.xyzw, l(2047,2047,2047,2047), l(0,0,0,0) +xor r3.xyzw, r3.xyzw, r5.xyzw +iadd r3.xyzw, r4.xyzw, r3.xyzw +ishl r5.xyzw, r3.xyzw, l(5, 5, 5, 5) +ushr r3.xyzw, r3.xyzw, l(5, 5, 5, 5) +or r3.xyzw, r3.xyzw, r5.xyzw +movc r5.xyzw, r4.xyzw, l(0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff), l(0,0,0,0) +xor r3.xyzw, r3.xyzw, r5.xyzw +iadd r3.xyzw, r4.xyzw, r3.xyzw +or r2.xyzw, r2.xyzw, r3.xyzw +ushr r0.xyzw, r0.xyzw, l(21, 21, 21, 21) +ushr r3.xyzw, r0.xyzw, l(10, 10, 10, 10) +ieq r4.xyzw, r0.xyzw, l(1024, 1024, 1024, 1024) +movc r0.xyzw, r4.xyzw, l(1025,1025,1025,1025), r0.xyzw +movc r4.xyzw, r3.xyzw, l(2047,2047,2047,2047), l(0,0,0,0) +xor r0.xyzw, r0.xyzw, r4.xyzw +iadd r0.xyzw, r3.xyzw, r0.xyzw +ishl r4.xyzw, r0.xyzw, l(5, 5, 5, 5) +ushr r0.xyzw, r0.xyzw, l(5, 5, 5, 5) +or r0.xyzw, r0.xyzw, r4.xyzw +movc r4.xyzw, r3.xyzw, l(0x0000ffff,0x0000ffff,0x0000ffff,0x0000ffff), l(0,0,0,0) +xor r0.xyzw, r0.xyzw, r4.xyzw +iadd r0.xyzw, r3.xyzw, r0.xyzw +or r0.xyzw, r0.xzyw, l(0x7fff0000, 0x7fff0000, 0x7fff0000, 0x7fff0000) +mov r3.xz, r2.xxyx +mov r3.yw, r0.xxxz +store_raw U0[0].xyzw, r1.x, r3.xyzw +iadd r1.x, r1.x, CB0[0][0].w +mov r0.xz, r2.zzwz +store_raw U0[0].xyzw, r1.x, r0.xyzw +ret +// Approximately 145 instruction slots used diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_r11g11b10_rgba16_2x_cs.cso b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_r11g11b10_rgba16_2x_cs.cso new file mode 100644 index 0000000000000000000000000000000000000000..d7706d7e05c6539bc8c82161fc65bcd5f4c170f0 GIT binary patch literal 6008 zcmbuDO=w(I6vtm~nrR!OHd;R@YND-BgGgINBuKe7$*54jnp*2>NSaAAnr6bx6pN^6 zQ5SwKMBIqr2NogVs@4kCpZeC`L;3@Z=`_B2_bI;ek z^U}%VhbDfwxpryt?@MofI`!+1=U4w6>&vq2%neyKAbyX=PEGb`+@taH^;vdga;o~% zmMjDJmqx$F{Th7((-SQELb_|OoxB~{jT(F7*dsoq0iD;_s!`Fvj!`;C_Pxe7jm>bY z!gM3-r8dvhYn}R;&goXYw%DARtF@b_TPNySSv*&7ce3O4qdD}jkQ2?Nc4ua()6P~_ zW%CM+9Wwm5xY2hmpDFx|>F@FVvIvdw9ZDFO&2V=LN9>#7s=|@i&2Tfq?GVmt@T%S+ z^UL_>lHVk`+54sk?l;Ltg~J}9_OiD{hVGQ!?DfjahyeS9BWCO!W`W53GQKSNeUe9Y z&pf{^fER8v|H{Qbd0N%4&Cayz+1zu@)?Bu-vZ9VwAElin!wLN&hr8QZZgfs8Y|t$< zZHw}%py|G--FQBFf?u&fi9a@dQL6F|jdtzsxoo!CT+9>~QT2}N zt1jz<8?%ee6VJ9c*sd?lHD;EU>g{!^JfrPSvo&+FUVE-F*IB47)Eg%kIw6h&76(=D zPE)F7IgZ@we6w|Grqe@tspH8xL-($c zuEIbc>-ws`v|fkeL*#$#&q2wvruJ{?1T2Vi?|q{_3XaDd5~@0(Ob>duEJ)HO?6`>-AJ~je=y1p%B|}(Zc(}} zM%jFy%jREM+l#Y0Du39E7mE6V~Ngl~9d%?+nku&A-Z1mN7#4yylTR*X9iq&h^ znqg;DI>YWx{27mXf*~*X0}(g1BNxtxUJP@+268^f^Q~w^O`!K<4)Oc8Xb=0_rGxj2 z+ddY585_PUg@w#-TXT)fr1#C2sukpX-naBFdr%{t>2S9(A588n^!PF&&KV%T0TVeo zI|G(`^A&##OMY~Q2gwyO%YoB+@|osG*aBCLcyO!2g$9C)EEm|u5AzlK<5~xq58NN! zd}l3oOqbfhUfGWDUG1z&ft^FqU+m~lkl+{fwAz?IWh^;h4P^Nni?+&Gi^>9XL%WtEX^hHlJ{u4>m5%6roWGdw_0dz zv5uawy|A7B9vYr{fWbG;c8bThb$6QHp?}-o?0~cN7NgbPe7;T)&OSZQT?yec#G2@H z*KZkgU^wr@Y>f?;P@uQj`Mn4UjI-22OR$X7kl8a2X}shxzKO;2VswW;ozx<-v2dU;L>=_KeHos z=6wFG!7et`%fq&BH+?smeJh)v`deY(faNy+p3?K(tbf2;0cNwhZo4u>C ze$MOf1-&yYK63K4eBiwz9C+1WCpF-{c3zH&@6s@ijNf(cDdVqSne?XQDe2qoYV3h^ zer=7dMV8-r36I}D+ MO;64KFL5XR1NxH}ga7~l literal 0 HcmV?d00001 diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_r11g11b10_rgba16_2x_cs.h b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_r11g11b10_rgba16_2x_cs.h new file mode 100644 index 000000000..bf5eccf35 --- /dev/null +++ b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_r11g11b10_rgba16_2x_cs.h @@ -0,0 +1,505 @@ +// generated from `xb buildhlsl` +// source: texture_load_r11g11b10_rgba16_2x.cs.hlsl +const uint8_t texture_load_r11g11b10_rgba16_2x_cs[] = { + 0x44, 0x58, 0x42, 0x43, 0xD5, 0x1D, 0x5F, 0xF3, 0x44, 0xFA, 0xF3, 0x8B, + 0xA3, 0x45, 0xE4, 0xD7, 0xB4, 0xE0, 0xF6, 0x2A, 0x01, 0x00, 0x00, 0x00, + 0x78, 0x17, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x14, 0x05, 0x00, 0x00, 0x24, 0x05, 0x00, 0x00, 0x34, 0x05, 0x00, 0x00, + 0xDC, 0x16, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0xD8, 0x04, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x3C, 0x00, 0x00, 0x00, 0x01, 0x05, 0x53, 0x43, 0x00, 0x05, 0x00, 0x00, + 0xAE, 0x04, 0x00, 0x00, 0x13, 0x13, 0x44, 0x25, 0x3C, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, + 0x24, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xB4, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xCB, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, + 0x6F, 0x61, 0x64, 0x5F, 0x73, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x00, 0x78, + 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, 0x6F, + 0x61, 0x64, 0x5F, 0x64, 0x65, 0x73, 0x74, 0x00, 0x58, 0x65, 0x54, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x4C, 0x6F, 0x61, 0x64, 0x43, 0x6F, 0x6E, + 0x73, 0x74, 0x61, 0x6E, 0x74, 0x73, 0x00, 0xAB, 0xE0, 0x00, 0x00, 0x00, + 0x0B, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC8, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0xEC, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xEC, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x2C, 0x03, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xEC, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x46, 0x03, 0x00, 0x00, + 0x0C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0xEC, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x03, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x84, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xA8, 0x03, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xC4, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xE8, 0x03, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x84, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x04, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xEC, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x1F, 0x04, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x4C, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x70, 0x04, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xEC, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x8D, 0x04, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x84, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x67, 0x75, 0x65, 0x73, + 0x74, 0x5F, 0x62, 0x61, 0x73, 0x65, 0x00, 0x64, 0x77, 0x6F, 0x72, 0x64, + 0x00, 0xAB, 0xAB, 0xAB, 0x00, 0x00, 0x13, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xE3, 0x02, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x67, 0x75, 0x65, 0x73, + 0x74, 0x5F, 0x70, 0x69, 0x74, 0x63, 0x68, 0x00, 0x78, 0x65, 0x5F, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, + 0x68, 0x6F, 0x73, 0x74, 0x5F, 0x62, 0x61, 0x73, 0x65, 0x00, 0x78, 0x65, + 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, + 0x64, 0x5F, 0x68, 0x6F, 0x73, 0x74, 0x5F, 0x70, 0x69, 0x74, 0x63, 0x68, + 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, + 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x73, 0x69, 0x7A, 0x65, 0x5F, 0x74, 0x65, + 0x78, 0x65, 0x6C, 0x73, 0x00, 0x75, 0x69, 0x6E, 0x74, 0x33, 0x00, 0xAB, + 0x01, 0x00, 0x13, 0x00, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7D, 0x03, 0x00, 0x00, + 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, + 0x6F, 0x61, 0x64, 0x5F, 0x69, 0x73, 0x5F, 0x33, 0x64, 0x00, 0x62, 0x6F, + 0x6F, 0x6C, 0x00, 0xAB, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xBE, 0x03, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x73, 0x69, 0x7A, 0x65, + 0x5F, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x73, 0x00, 0x78, 0x65, 0x5F, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, + 0x65, 0x6E, 0x64, 0x69, 0x61, 0x6E, 0x6E, 0x65, 0x73, 0x73, 0x00, 0x78, + 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x67, 0x75, + 0x65, 0x73, 0x74, 0x5F, 0x73, 0x74, 0x6F, 0x72, 0x61, 0x67, 0x65, 0x5F, + 0x77, 0x69, 0x64, 0x74, 0x68, 0x5F, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x00, 0x75, 0x69, 0x6E, 0x74, 0x32, 0x00, 0xAB, 0x01, 0x00, 0x13, 0x00, + 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x45, 0x04, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x6C, 0x6F, 0x61, 0x64, 0x5F, + 0x67, 0x75, 0x65, 0x73, 0x74, 0x5F, 0x66, 0x6F, 0x72, 0x6D, 0x61, 0x74, + 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, + 0x6C, 0x6F, 0x61, 0x64, 0x5F, 0x67, 0x75, 0x65, 0x73, 0x74, 0x5F, 0x6D, + 0x69, 0x70, 0x5F, 0x6F, 0x66, 0x66, 0x73, 0x65, 0x74, 0x00, 0x4D, 0x69, + 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, + 0x48, 0x4C, 0x53, 0x4C, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, + 0x43, 0x6F, 0x6D, 0x70, 0x69, 0x6C, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2E, + 0x31, 0x00, 0xAB, 0xAB, 0x49, 0x53, 0x47, 0x4E, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x4F, 0x53, 0x47, 0x4E, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x53, 0x48, 0x45, 0x58, 0xA0, 0x11, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, + 0x68, 0x04, 0x00, 0x00, 0x6A, 0x08, 0x00, 0x01, 0x59, 0x00, 0x00, 0x07, + 0x46, 0x8E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xA1, 0x00, 0x00, 0x06, 0x46, 0x7E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x9D, 0x00, 0x00, 0x06, 0x46, 0xEE, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5F, 0x00, 0x00, 0x02, 0x72, 0x00, 0x02, 0x00, 0x68, 0x00, 0x00, 0x02, + 0x06, 0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x06, + 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x02, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x04, + 0x62, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x06, 0x02, 0x00, + 0x50, 0x00, 0x00, 0x09, 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x82, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x3C, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, + 0x15, 0x00, 0x00, 0x01, 0x1E, 0x00, 0x00, 0x08, 0xF2, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x66, 0x01, 0x02, 0x00, 0x66, 0x81, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x1F, 0x00, 0x04, 0x03, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1F, 0x00, 0x04, 0x05, 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x55, 0x00, 0x00, 0x0C, 0x32, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x16, 0x85, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x2A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x0B, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, + 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x00, 0x18, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x55, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x09, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x2A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, + 0x42, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x14, 0x32, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x0A, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x0C, + 0xC2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x06, 0x04, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, + 0x62, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x56, 0x05, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0xA6, 0x0B, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0x62, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x56, 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x8A, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0x32, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x96, 0x05, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x12, 0x00, 0x00, 0x01, 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xB6, 0x0B, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x09, + 0x12, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x0A, 0x32, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0xA6, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0x32, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, + 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, + 0x12, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, + 0x42, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x17, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, 0x42, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x0B, 0x42, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, + 0x92, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0x92, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0B, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x06, 0x0C, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, + 0x32, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x56, 0x05, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0xC6, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0x32, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x0B, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, + 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, + 0x12, 0x00, 0x00, 0x01, 0x29, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x09, + 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, + 0x23, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, + 0x1E, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xA5, 0x00, 0x00, 0x08, 0xF2, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xE6, 0x74, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x55, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x57, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xE6, 0x04, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0xE6, 0x04, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0xF2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0x04, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xE6, 0x04, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xE6, 0x04, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, + 0xF2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0x04, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x32, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xE6, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x12, 0x00, 0x00, 0x01, 0x36, 0x00, 0x00, 0x05, 0x32, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xE6, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x01, 0x29, 0x00, 0x00, 0x09, 0x32, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x46, 0x00, 0x02, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x09, 0x42, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x1A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x08, + 0x22, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x02, 0x00, + 0x2A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x0B, 0x12, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x46, 0x04, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x16, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xC2, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x06, 0x04, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x14, 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, + 0x0B, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x86, 0x0D, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x0F, + 0xF2, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, + 0x06, 0x05, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x0A, 0x32, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x46, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0xC2, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xA6, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x8C, 0x00, 0x00, 0x11, + 0x32, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xE6, 0x0A, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x52, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x06, 0x01, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x06, 0x02, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0A, + 0xA2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x56, 0x0D, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xA6, 0x00, 0x00, 0x08, 0xF2, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x04, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0x16, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x05, 0xC2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x04, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x14, + 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x0B, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x86, 0x0D, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x0F, 0xF2, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x06, 0x05, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, + 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x0A, 0xC2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xA6, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, + 0x00, 0x00, 0x1F, 0x00, 0x8C, 0x00, 0x00, 0x11, 0x32, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0x0A, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0x52, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x02, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0A, 0xA2, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x56, 0x0D, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x1E, 0x00, 0x00, 0x09, + 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x08, + 0xF2, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, 0x53, 0x54, 0x41, 0x54, + 0x94, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2A, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, +}; diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_r11g11b10_rgba16_2x_cs.txt b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_r11g11b10_rgba16_2x_cs.txt new file mode 100644 index 000000000..3e1690ec4 --- /dev/null +++ b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_r11g11b10_rgba16_2x_cs.txt @@ -0,0 +1,178 @@ +// +// Generated by Microsoft (R) HLSL Shader Compiler 10.1 +// +// +// Buffer Definitions: +// +// cbuffer XeTextureLoadConstants +// { +// +// uint xe_texture_load_guest_base; // Offset: 0 Size: 4 +// uint xe_texture_load_guest_pitch; // Offset: 4 Size: 4 +// uint xe_texture_load_host_base; // Offset: 8 Size: 4 +// uint xe_texture_load_host_pitch; // Offset: 12 Size: 4 +// uint3 xe_texture_load_size_texels; // Offset: 16 Size: 12 [unused] +// bool xe_texture_load_is_3d; // Offset: 28 Size: 4 +// uint3 xe_texture_load_size_blocks; // Offset: 32 Size: 12 +// uint xe_texture_load_endianness; // Offset: 44 Size: 4 +// uint2 xe_texture_guest_storage_width_height;// Offset: 48 Size: 8 +// uint xe_texture_load_guest_format; // Offset: 56 Size: 4 [unused] +// uint3 xe_texture_load_guest_mip_offset;// Offset: 64 Size: 12 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim ID HLSL Bind Count +// ------------------------------ ---------- ------- ----------- ------- -------------- ------ +// xe_texture_load_source texture byte r/o T0 t0 1 +// xe_texture_load_dest UAV byte r/w U0 u0 1 +// XeTextureLoadConstants cbuffer NA NA CB0 cb0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Input +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Output +cs_5_1 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer CB0[0:0][5], immediateIndexed, space=0 +dcl_resource_raw T0[0:0], space=0 +dcl_uav_raw U0[0:0], space=0 +dcl_input vThreadID.xyz +dcl_temps 6 +dcl_thread_group 16, 16, 1 +ishl r0.x, vThreadID.x, l(2) +mov r0.yz, vThreadID.yyzy +uge r0.xyz, r0.xyzx, CB0[0][2].xyzx +or r0.x, r0.y, r0.x +or r0.x, r0.z, r0.x +if_nz r0.x + ret +endif +iadd r0.xyzw, vThreadID.zyyx, CB0[0][4].zyyx +ieq r1.x, CB0[0][0].y, l(-1) +if_nz r1.x + if_nz CB0[0][1].w + ushr r1.xyzw, r0.xyzw, l(2, 4, 3, 3) + ushr r2.xy, CB0[0][3].yxyy, l(4, 5, 0, 0) + imad r0.y, r1.x, r2.x, r1.y + iadd r1.x, r1.z, r1.x + bfi r1.y, l(1), l(1), r1.x, l(0) + iadd r1.y, r1.w, r1.y + bfi r1.y, l(2), l(1), r1.y, l(0) + bfi r1.x, l(1), l(0), r1.x, r1.y + ishl r1.y, r0.z, l(10) + and r1.y, r1.y, l(6144) + bfi r1.y, l(3), l(8), r0.w, r1.y + ushr r1.y, r1.y, l(6) + ushr r1.z, r0.w, l(5) + imad r0.y, r0.y, r2.y, r1.z + and r1.z, r1.y, l(112) + bfi r2.xy, l(20, 20, 0, 0), l(10, 13, 0, 0), r0.yyyy, l(0, 0, 0, 0) + imad r1.zw, r1.zzzz, l(0, 0, 2, 16), r2.xxxy + bfi r1.yz, l(0, 4, 4, 0), l(0, 0, 3, 0), r1.yyyy, r1.zzwz + bfi r1.yz, l(0, 2, 2, 0), l(0, 8, 11, 0), r0.xxxx, r1.yyzy + ubfe r0.y, l(3), l(6), r1.y + and r1.w, r1.x, l(6) + bfi r1.x, l(1), l(8), r1.x, l(0) + imad r0.y, r0.y, l(32), r1.x + imad r0.y, r1.w, l(4), r0.y + bfi r1.xy, l(1, 1, 0, 0), l(4, 7, 0, 0), r0.zzzz, r1.yzyy + bfi r0.y, l(9), l(3), r0.y, r1.y + bfi r0.y, l(6), l(0), r1.x, r0.y + else + ushr r1.xyzw, r0.wzwz, l(5, 5, 3, 2) + iadd r2.x, CB0[0][3].x, l(31) + ushr r2.x, r2.x, l(5) + imad r1.x, r1.y, r2.x, r1.x + ishl r2.xy, r0.zzzz, l(4, 7, 0, 0) + and r2.xy, r2.xyxx, l(224, 2048, 0, 0) + bfi r1.y, l(3), l(2), r0.w, r2.x + ishl r2.x, r2.x, l(1) + bfi r2.x, l(3), l(3), r0.w, r2.x + and r2.x, r2.x, l(480) + bfi r2.z, l(23), l(9), r1.x, r2.x + bfi r2.z, l(4), l(0), r1.y, r2.z + bfi r2.z, l(1), l(4), r0.z, r2.z + ishl r2.xw, r2.xxxx, l(3, 0, 0, 2) + bfi r2.xw, l(23, 0, 0, 23), l(12, 0, 0, 11), r1.xxxx, r2.xxxw + bfi r1.xy, l(4, 4, 0, 0), l(3, 2, 0, 0), r1.yyyy, r2.xwxx + bfi r1.xy, l(1, 1, 0, 0), l(7, 6, 0, 0), r0.zzzz, r1.xyxx + bfi r1.x, l(12), l(0), r2.y, r1.x + and r1.y, r1.y, l(1792) + iadd r1.x, r1.x, r1.y + and r1.y, r1.w, l(2) + iadd r1.y, r1.y, r1.z + bfi r1.y, l(2), l(6), r1.y, l(0) + iadd r1.x, r1.x, r1.y + bfi r0.y, l(6), l(0), r2.z, r1.x + endif +else + ishl r0.w, r0.w, l(2) + iadd r1.x, CB0[0][2].y, l(31) + and r1.x, r1.x, l(-32) + imad r0.x, r0.x, r1.x, r0.z + imad r0.y, r0.x, CB0[0][0].y, r0.w +endif +iadd r0.x, r0.y, CB0[0][0].x +ishl r0.x, r0.x, l(2) +ld_raw r0.xyzw, r0.x, T0[0].zwxy +ushr r1.x, CB0[0][2].w, l(1) +xor r1.x, r1.x, CB0[0][2].w +and r1.x, r1.x, l(1) +if_nz r1.x + ishl r1.xyzw, r0.zwxy, l(8, 8, 8, 8) + and r1.xyzw, r1.xyzw, l(0xff00ff00, 0xff00ff00, 0xff00ff00, 0xff00ff00) + ushr r2.xyzw, r0.zwxy, l(8, 8, 8, 8) + and r2.xyzw, r2.xyzw, l(0x00ff00ff, 0x00ff00ff, 0x00ff00ff, 0x00ff00ff) + iadd r0.xyzw, r1.zwxy, r2.zwxy +endif +and r1.x, CB0[0][2].w, l(2) +if_nz r1.x + ushr r1.xyzw, r0.zwxy, l(16, 16, 16, 16) + bfi r0.xyzw, l(16, 16, 16, 16), l(16, 16, 16, 16), r0.xyzw, r1.zwxy + mov r1.xy, r0.zwzz +else + mov r1.xy, r0.zwzz +endif +ishl r2.xy, vThreadID.xyxx, l(1, 1, 0, 0) +ishl r2.z, CB0[0][2].y, l(1) +ishl r2.x, r2.x, l(3) +imad r2.y, vThreadID.z, r2.z, r2.y +imad r2.x, r2.y, CB0[0][0].w, r2.x +iadd r2.x, r2.x, CB0[0][0].z +ushr r3.xyzw, r1.xyxy, l(22, 22, 1, 1) +mov r1.zw, r3.xxxy +bfi r4.xyzw, l(11, 26, 11, 26), l(5, 6, 5, 6), r1.xzyw, l(0, 0, 0, 0) +ubfe r5.xyzw, l(5, 6, 5, 6), l(6, 26, 6, 26), r1.xxyy +iadd r4.xyzw, r4.xyzw, r5.xyzw +ishl r1.xy, r1.xyxx, l(10, 10, 0, 0) +and r1.zw, r3.zzzw, l(0, 0, 0x001f0000, 0x001f0000) +bfi r1.xy, l(21, 21, 0, 0), l(0, 0, 0, 0), r1.zwzz, r1.xyxx +iadd r1.xz, r1.xxyx, r4.xxzx +iadd r1.yw, r4.yyyw, l(0, 0xffff0000, 0, 0xffff0000) +store_raw U0[0].xyzw, r2.x, r1.xyzw +ushr r1.xyzw, r0.xyxy, l(22, 22, 1, 1) +mov r0.zw, r1.xxxy +bfi r3.xyzw, l(11, 26, 11, 26), l(5, 6, 5, 6), r0.xzyw, l(0, 0, 0, 0) +ubfe r4.xyzw, l(5, 6, 5, 6), l(6, 26, 6, 26), r0.xxyy +iadd r3.xyzw, r3.xyzw, r4.xyzw +ishl r0.xy, r0.xyxx, l(10, 10, 0, 0) +and r0.zw, r1.zzzw, l(0, 0, 0x001f0000, 0x001f0000) +bfi r0.xy, l(21, 21, 0, 0), l(0, 0, 0, 0), r0.zwzz, r0.xyxx +iadd r0.xz, r0.xxyx, r3.xxzx +iadd r0.yw, r3.yyyw, l(0, 0xffff0000, 0, 0xffff0000) +iadd r1.x, r2.x, CB0[0][0].w +store_raw U0[0].xyzw, r1.x, r0.xyzw +ret +// Approximately 124 instruction slots used diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_r11g11b10_rgba16_snorm_2x_cs.cso b/src/xenia/gpu/d3d12/shaders/dxbc/texture_load_r11g11b10_rgba16_snorm_2x_cs.cso new file mode 100644 index 0000000000000000000000000000000000000000..a455a00d3d078721ac81794d97717d4930bce201 GIT binary patch literal 6788 zcmbuD&u?5;6~~{iV<&N4nzSjj5h6p~O0B7?B&`5hRdvaap-ACZ97v*i0 ziCQ7G(5kRN1qlQ!KrBEas^qGxiX{s~Q6>HWSRspUxTekb|yYL8O4@e(P`mox0De{i=uyj@m zk0tLj_E+f<=|Q+%Va5r3Ip<65)}Z~;;AXGg+U%~Zwffzgy=(2FKD^fM4~nbpD;4yT zkmtKw{lUuCpkM6lit{e%F%f@5t>wK?^|btg?!VIWZ3z~)$CNNI2jLzUjo>Lgt<{x&yI6a%+gmGkc6LyKmRmtm}KcCWqAzk|EIwbohL+G_Xrn5vBS2i@Mv^>*vU&e~w3 zwbAZe-x!qZIO}z=>*M93_OiZ?igmr)yRkBuV7$@UZgtn!`|UyT)y}nEx8GeKG#Z>#O<7UK@trF#h403Y7h}RQ^4kfDN_Wd%sqxb8b;~ z>M_l`w|pv!IpL;abzVL%+-e$sZZ>c?9qpy(W?*(vG+#Siw)~K7-O-25b#lmAVRPGJ z&339dG(DHbo>5r$OFyG@eU!%5r$Vv*>c|&owV`#!yR$)jIF?fZFF~DnHojqIl;2lw!R#SM6ztBNTBldse5CzWg6wP52Ns zAfXmfBt-ornNBVKsgYZERqZ$qxKSiT{Yc0=-yXx*QbMfod@EYm z6XcgEhs6C*;)DOFY_!vA?Z@k{W6SSKVG+meIroYtziXzEY2YaM5UEXc< z=dwEsJF%Qn%NZcQB__4ldmi_eJIG#F|9Dqff zzs1B=$9lcY0fQJzj(?WsalXh!h*fUXErl_09ycz;D%R4dAL0(N`tDS>6wWMs_@14w zc;Psk#zL(2k(ewYj_S)}zBm4oVyknMYcp7Fh*fP+=N8uvwE>>|uz$|WyvFievR?9@ zxX0e{6kz^-G~Romxx;zXgnhxCzYmRPKfn+hXFJCe+nzg3&&YoM%>&N!y+-f7W4>Py z&OSBIU5OAg!kiTI*l!tZU^wrr*?BcLwq1SaETsEFurjx9Sts!z!VK><<|Fm*CdWn0 zzJp3!!smAp<37jq%}Gqe{rl|u&9>$%4OuGD{WV;3{$1uZ6Z^L_3>=Kzft`>Su=)2N zXYr%Nk$>y)KFU?|_Tb)Xc*-Y5~KY%vfG~#7^BX?wX?S zJ;ye!=LKz*&+npqESf8|vJdYbpZ&aEL^0%aedm4_vv)06*~aeiZQW0~>Rag^a!8CJ zR_lP*${63qxjKi9NHs$4^1aOKgT8W7)`<56e29DNgIY0% zb7)@2_Hk;&zTCp)8u1vs_URh2PcR`)t`T!g!nsCr9KPV6xW24Ds1^Lz#WgaHcfa*H z9@nZ{cwG1RB1R-c{Y^n_uEyE7%teU0Jk{pfsNEeh7a{VqS6vqxE&Y0*^=FkLSI6YM z<@*+*&XfYmm9e@wZ;YFd7B1(_wtRiA3;P5UV)bpt_nFnX(a?}T#OnP3pVj-Ip&`z3 zOkCf`sEcvD`>jv$l?9tLBQV*D4YFw!9AmrS-$e6D?eBNr&9I>;T}VtkSi#MJ*8%!lMX~ z6mE~<+p!@LZ#=@*qSy?wy3ei~qYb;53p!xg12i)mUABw2phvb^*dbb>$lBV!UKeqH z0*ywcW?O>1Sc&u_3(v`~b#)?f-~@j;(VZ2xr^g8rLmqPI0Ve~E$DD~APlHH3BlknP z?B#tAE9eWJ>KkXnPHZG8@(2T34_G`H!cEvNG8_pj=!l!wKDQ^sghY}xsAab}LIK3n z*i4)&MiwFlh8wKt9XEfJNLC>edDg8&2rI-vWV~--!uX^mR@eeZM{cuAzq*y)Z`e{& z34h2qQqg7|-Rn*2sbp5~dxuRzKX@g4e|Z<3mM&dLj@J3ygAsw9(oEPIk?@Y4(8!>% z6B>%S|MLn^)XJv^oo?a5l_G8xT7Y*M?rdqDTB4Rx{A+{_yK1|D)N&XNb`pAFUUj chjY4){zw%Yt9IjUn)6F_FQ&IIrjt1N1HqGXd;kCd delta 739 zcmY*WO;1x%5S@GbzA2<4TA=b#+K^B%Hbjj@lm?*^5)um$x@(F8vH%U%oeSeer7o;v zj2n$HgcTd&#sxnB-4PQ*;s$iILW*_GxyBLx$mfRr#&^18^3i@O5K<$ z|N8Ut^KSc0X?su+(NK`c#CaKZEkHB{%fa3>5zS6aX8x5^5%qKT?rmjmXd;KRDrUZd z7p!`p;DxH*H+XI0@u<#qEUn*PEv)C4A8xD_iusi%OOK2BN2|qq5BP&FaXb)rlMYc9 zqtPeun~TPsE^I){n@Kqu&}sBXh!cq1Hkhn#aI`s6J~GOCK~s1N@%6XO22%e4>bh;% diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_128bpp_cs.h b/src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_128bpp_cs.h index e4697a86e..0ea8b998e 100644 --- a/src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_128bpp_cs.h +++ b/src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_128bpp_cs.h @@ -1,14 +1,14 @@ // generated from `xb buildhlsl` // source: texture_tile_128bpp.cs.hlsl const uint8_t texture_tile_128bpp_cs[] = { - 0x44, 0x58, 0x42, 0x43, 0xF2, 0x8B, 0x39, 0x3D, 0x48, 0x91, 0xD6, 0xEF, - 0x88, 0xA0, 0xB1, 0x18, 0x4D, 0x8B, 0xA6, 0x2B, 0x01, 0x00, 0x00, 0x00, - 0x2C, 0x0C, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, - 0x38, 0x03, 0x00, 0x00, 0x48, 0x03, 0x00, 0x00, 0x58, 0x03, 0x00, 0x00, - 0x90, 0x0B, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0xFC, 0x02, 0x00, 0x00, + 0x44, 0x58, 0x42, 0x43, 0xDC, 0x09, 0x44, 0x61, 0x39, 0x5E, 0x0D, 0xC0, + 0x2F, 0x6B, 0xE1, 0xA4, 0x77, 0x06, 0xF6, 0x09, 0x01, 0x00, 0x00, 0x00, + 0x60, 0x0D, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x24, 0x03, 0x00, 0x00, 0x34, 0x03, 0x00, 0x00, 0x44, 0x03, 0x00, 0x00, + 0xC4, 0x0C, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0xE8, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01, 0x05, 0x53, 0x43, 0x00, 0x05, 0x00, 0x00, - 0xD3, 0x02, 0x00, 0x00, 0x13, 0x13, 0x44, 0x25, 0x3C, 0x00, 0x00, 0x00, + 0xBE, 0x02, 0x00, 0x00, 0x13, 0x13, 0x44, 0x25, 0x3C, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB4, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, @@ -35,17 +35,17 @@ const uint8_t texture_tile_128bpp_cs[] = { 0x48, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x24, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x72, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5D, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x24, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x89, 0x02, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x74, 0x02, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x24, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0x9E, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x89, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x24, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0xB8, 0x02, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xA3, 0x02, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x24, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74, @@ -56,209 +56,235 @@ const uint8_t texture_tile_128bpp_cs[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x02, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x74, 0x69, 0x6C, 0x65, 0x5F, - 0x65, 0x6E, 0x64, 0x69, 0x61, 0x6E, 0x5F, 0x66, 0x6F, 0x72, 0x6D, 0x61, - 0x74, 0x5F, 0x67, 0x75, 0x65, 0x73, 0x74, 0x5F, 0x70, 0x69, 0x74, 0x63, - 0x68, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, - 0x5F, 0x74, 0x69, 0x6C, 0x65, 0x5F, 0x6F, 0x66, 0x66, 0x73, 0x65, 0x74, + 0x69, 0x6E, 0x66, 0x6F, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, + 0x75, 0x72, 0x65, 0x5F, 0x74, 0x69, 0x6C, 0x65, 0x5F, 0x6F, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x5F, 0x74, 0x69, 0x6C, 0x65, 0x5F, 0x73, 0x69, 0x7A, 0x65, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, - 0x74, 0x69, 0x6C, 0x65, 0x5F, 0x73, 0x69, 0x7A, 0x65, 0x00, 0x78, 0x65, - 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x74, 0x69, 0x6C, - 0x65, 0x5F, 0x68, 0x6F, 0x73, 0x74, 0x5F, 0x62, 0x61, 0x73, 0x65, 0x00, - 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x74, - 0x69, 0x6C, 0x65, 0x5F, 0x68, 0x6F, 0x73, 0x74, 0x5F, 0x70, 0x69, 0x74, - 0x63, 0x68, 0x00, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, - 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4C, 0x53, 0x4C, 0x20, 0x53, 0x68, - 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6F, 0x6D, 0x70, 0x69, 0x6C, 0x65, - 0x72, 0x20, 0x31, 0x30, 0x2E, 0x31, 0x00, 0xAB, 0x49, 0x53, 0x47, 0x4E, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x4F, 0x53, 0x47, 0x4E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x53, 0x48, 0x45, 0x58, 0x30, 0x08, 0x00, 0x00, - 0x51, 0x00, 0x05, 0x00, 0x0C, 0x02, 0x00, 0x00, 0x6A, 0x08, 0x00, 0x01, - 0x59, 0x00, 0x00, 0x07, 0x46, 0x8E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xA1, 0x00, 0x00, 0x06, 0x46, 0x7E, 0x30, 0x00, + 0x74, 0x69, 0x6C, 0x65, 0x5F, 0x68, 0x6F, 0x73, 0x74, 0x5F, 0x62, 0x61, + 0x73, 0x65, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x5F, 0x74, 0x69, 0x6C, 0x65, 0x5F, 0x68, 0x6F, 0x73, 0x74, 0x5F, + 0x70, 0x69, 0x74, 0x63, 0x68, 0x00, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, + 0x6F, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4C, 0x53, 0x4C, + 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6F, 0x6D, 0x70, + 0x69, 0x6C, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2E, 0x31, 0x00, 0xAB, 0xAB, + 0x49, 0x53, 0x47, 0x4E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x4F, 0x53, 0x47, 0x4E, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x53, 0x48, 0x45, 0x58, + 0x78, 0x09, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x5E, 0x02, 0x00, 0x00, + 0x6A, 0x08, 0x00, 0x01, 0x59, 0x00, 0x00, 0x07, 0x46, 0x8E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x9D, 0x00, 0x00, 0x06, 0x46, 0xEE, 0x31, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x02, 0x32, 0x00, 0x02, 0x00, - 0x68, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x04, - 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x55, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0x32, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0x00, 0x00, 0x06, + 0x46, 0x7E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9D, 0x00, 0x00, 0x06, + 0x46, 0xEE, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x02, + 0x32, 0x00, 0x02, 0x00, 0x68, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x00, + 0x9B, 0x00, 0x00, 0x04, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, + 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8A, 0x00, 0x00, 0x0B, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x1A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, + 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x50, 0x00, 0x00, 0x06, 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x00, 0x02, 0x00, 0x46, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3C, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, 0x0A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x01, + 0x55, 0x00, 0x00, 0x0C, 0x32, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x66, 0x8A, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x2A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x26, 0x02, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x06, - 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x02, 0x00, - 0x46, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x07, - 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1F, 0x00, 0x04, 0x03, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3E, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x01, 0x55, 0x00, 0x00, 0x0C, - 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x8A, 0x30, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x07, - 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x80, 0x30, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x26, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, - 0xFF, 0xFF, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x06, 0xF2, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x46, 0x04, 0x02, 0x00, 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, - 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, - 0x55, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x40, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, - 0x62, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x8C, 0x00, 0x00, 0x0B, 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, - 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, - 0x15, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, 0x12, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1E, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, 0xA2, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, - 0x62, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xA6, 0x0A, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x56, 0x07, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0x32, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, - 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x96, 0x05, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x23, 0x00, 0x00, 0x0C, 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x8C, 0x00, 0x00, 0x0B, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x40, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, - 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, - 0x1E, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, - 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x8C, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, - 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x8C, 0x00, 0x00, 0x0B, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x09, - 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x0C, - 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x02, 0x00, - 0x1A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x06, - 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x02, 0x00, - 0x01, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, - 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xA5, 0x00, 0x00, 0x08, 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x7E, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x09, - 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x80, 0x30, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, - 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x09, - 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x80, 0x30, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x09, - 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xB6, 0x01, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x16, 0x0B, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, - 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x01, 0x36, 0x00, 0x00, 0x07, - 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x80, 0x30, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x15, 0x00, 0x00, 0x01, 0x55, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x07, - 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x0A, 0x62, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x56, 0x06, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, 0x2A, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, + 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x55, 0x00, 0x00, 0x06, + 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x04, 0x02, 0x00, + 0xA6, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, - 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0xA2, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, + 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x2A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x0A, 0xC2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x56, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xC2, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xA6, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x0E, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xE6, 0x0A, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x0C, + 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, + 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x0C, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2A, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0B, + 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x06, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x02, 0x00, + 0x29, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, + 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x0A, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x02, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x57, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, + 0x23, 0x00, 0x00, 0x0C, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x02, 0x00, 0x1A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x06, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x02, 0x00, 0x01, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xA5, 0x00, 0x00, 0x08, 0xF2, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x7E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x0C, 0x62, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x56, 0x85, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1F, 0x00, 0x04, 0x03, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x09, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x37, 0x00, 0x00, 0x09, 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xA6, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB6, 0x01, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x16, 0x0B, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x05, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, + 0x55, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, + 0x62, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x06, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1F, 0x00, 0x04, 0x03, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, - 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x1E, 0x00, 0x00, 0x07, - 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x15, 0x00, 0x00, 0x01, 0x1F, 0x00, 0x04, 0x03, 0x1A, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x55, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, + 0x1F, 0x00, 0x04, 0x03, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, - 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0xA6, 0x00, 0x00, 0x08, - 0xF2, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, 0x53, 0x54, 0x41, 0x54, - 0x94, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x01, 0xA6, 0x00, 0x00, 0x08, 0xF2, 0xE0, 0x21, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x3E, 0x00, 0x00, 0x01, 0x53, 0x54, 0x41, 0x54, 0x94, 0x00, 0x00, 0x00, + 0x4A, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0x17, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, }; diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_128bpp_cs.txt b/src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_128bpp_cs.txt index 7b8a6b42a..bb66a62fe 100644 --- a/src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_128bpp_cs.txt +++ b/src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_128bpp_cs.txt @@ -8,7 +8,7 @@ // { // // uint xe_texture_tile_guest_base; // Offset: 0 Size: 4 -// uint xe_texture_tile_endian_format_guest_pitch;// Offset: 4 Size: 4 +// uint xe_texture_tile_info; // Offset: 4 Size: 4 // uint xe_texture_tile_offset; // Offset: 8 Size: 4 // uint xe_texture_tile_size; // Offset: 12 Size: 4 // uint xe_texture_tile_host_base; // Offset: 16 Size: 4 @@ -49,49 +49,60 @@ dcl_thread_group 32, 32, 1 ushr r0.y, CB0[0][0].w, l(16) mov r0.x, CB0[0][0].w and r0.xy, r0.xyxx, l(0x0000ffff, 0x0000ffff, 0, 0) +ubfe r0.z, l(1), l(9), CB0[0][0].y +ishl r0.xy, r0.xyxx, r0.zzzz uge r0.xy, vThreadID.xyxx, r0.xyxx or r0.x, r0.y, r0.x if_nz r0.x ret endif -ushr r0.xy, CB0[0][0].zyzz, l(16, 9, 0, 0) -mov r0.z, CB0[0][0].z -and r1.xyzw, r0.zxzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) -iadd r1.xyzw, r1.xyzw, vThreadID.xyxy -ushr r2.xyzw, r1.xyzw, l(5, 5, 3, 2) -iadd r0.x, r0.y, l(31) +ushr r1.xy, CB0[0][0].zyzz, l(16, 10, 0, 0) +mov r1.z, CB0[0][0].z +and r2.xyzw, r1.zxzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r3.xyzw, vThreadID.xyxy, r0.zzzz +iadd r2.xyzw, r2.xyzw, r3.xyzw +ushr r3.xyzw, r2.xyzw, l(5, 5, 3, 2) +iadd r0.x, r1.y, l(31) ushr r0.x, r0.x, l(5) -imad r0.x, r2.y, r0.x, r2.x -ishl r0.y, r1.w, l(7) -and r0.yz, r0.yyyy, l(0, 1792, 2048, 0) -bfi r0.w, l(3), l(5), r1.z, r0.y -bfi r0.w, l(21), l(11), r0.x, r0.w -bfi r1.x, l(1), l(4), r1.w, l(0) -iadd r0.w, r0.w, r1.x -ishl r1.yw, r0.yyyy, l(0, 3, 0, 2) -bfi r1.yz, l(0, 3, 3, 0), l(0, 8, 7, 0), r1.zzzz, r1.yywy -bfi r0.xy, l(21, 21, 0, 0), l(14, 13, 0, 0), r0.xxxx, r1.yzyy -imad r0.xy, r1.xxxx, l(8, 4, 0, 0), r0.xyxx -bfi r0.x, l(12), l(0), r0.z, r0.x +imad r0.x, r3.y, r0.x, r3.x +ishl r0.y, r2.w, l(7) +and r0.yw, r0.yyyy, l(0, 1792, 0, 2048) +bfi r1.x, l(3), l(5), r2.z, r0.y +bfi r1.x, l(21), l(11), r0.x, r1.x +bfi r1.y, l(1), l(4), r2.w, l(0) +iadd r1.x, r1.x, r1.y +ishl r1.zw, r0.yyyy, l(0, 0, 3, 2) +bfi r1.zw, l(0, 0, 3, 3), l(0, 0, 8, 7), r2.zzzz, r1.zzzw +bfi r0.xy, l(21, 21, 0, 0), l(14, 13, 0, 0), r0.xxxx, r1.zwzz +imad r0.xy, r1.yyyy, l(8, 4, 0, 0), r0.xyxx +bfi r0.x, l(12), l(0), r0.w, r0.x and r0.y, r0.y, l(1792) iadd r0.x, r0.x, r0.y -and r0.y, r2.w, l(2) -iadd r0.y, r0.y, r2.z +and r0.y, r3.w, l(2) +iadd r0.y, r0.y, r3.z bfi r0.y, l(2), l(6), r0.y, l(0) iadd r0.x, r0.x, r0.y -bfi r0.x, l(6), l(0), r0.w, r0.x +bfi r0.x, l(6), l(0), r1.x, r0.x iadd r0.x, r0.x, CB0[0][0].x +ishl r0.y, r0.z, l(1) +ishl r0.x, r0.x, r0.y +and r0.y, r0.z, vThreadID.y +ishl r0.y, r0.y, l(5) +iadd r0.x, r0.y, r0.x +if_nz r0.z + bfi r0.y, l(1), l(4), vThreadID.x, l(0) + xor r0.y, r0.y, l(0) + iadd r0.x, r0.y, r0.x +endif imad r0.y, vThreadID.y, CB0[0][1].y, CB0[0][1].x ishl r0.z, vThreadID.x, l(4) iadd r0.y, r0.z, r0.y ld_raw r1.xyzw, r0.y, T0[0].xyzw -and r0.y, CB0[0][0].y, l(4) -if_nz r0.y - and r0.y, CB0[0][0].y, l(1) - movc r1.xyzw, r0.yyyy, r1.wzyx, r1.yxwz +and r0.yz, CB0[0][0].yyyy, l(0, 7, 4, 0) +if_nz r0.z + and r0.z, CB0[0][0].y, l(1) + movc r1.xyzw, r0.zzzz, r1.wzyx, r1.yxwz mov r0.y, l(2) -else - mov r0.y, CB0[0][0].y endif ushr r0.z, r0.y, l(1) xor r0.z, r0.z, r0.y @@ -109,4 +120,4 @@ if_nz r0.y endif store_raw U0[0].xyzw, r0.x, r1.xyzw ret -// Approximately 63 instruction slots used +// Approximately 74 instruction slots used diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_16bpp_cs.cso b/src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_16bpp_cs.cso index dd954b79b1e2f03b346855fa5fbecc0e32ff0700..73f9a55de86a2d60ffc3c11d274e4bc023cd450a 100644 GIT binary patch delta 1117 zcmY*YO-L0{6ux)f%)B@A-kUd*Py8AGe<*8{Vx=ZD+EXD6QqpHpyE1EGi`qt-L}Z)f z*e(MLBq)gxT1C*ZT}6u)LM>XfX;BMlQP_9x%q=@`=iKvqzw_NYZ(EkzdrMP;M~j=6 z_PrkcedgtZYjY#lU#vEG z$yVzsb~##=yQQz}N3e^$qkdz`yf{03nbwUvbSTyCJoSVa!wFC5eCkupq7d0Z;o~eJ zWQ3Jyhvuz{stzI2T}gB}(QB?xN6gOlhly>QzN%u)(vO;!B-Tgw%(A>e-^^CoM}c+v zSfI;{h?9k|V3N#R^T%pt*GQ#s_OtI03Eq*fkC|5;R+-K6Hk{1M9k4Fx&xNtLU!R)YB-;l#bvg z6iV)3gJ0H0gbzgD7HfWSbi%9NxL;_J%@^QtI0eELEcIA5SUh2df*@S_Y|=0P zdhq8`Mnx}zqP|ep%*~ijA%?L_0LpK&rVm%XU^BoO*hJCFU-^%<+<6$sS4dwZqlG@ z(0j}jB8S#_%DKMMMRj=Sq(D!YTUvrg~hK6hpdOb2z@iVTg73V!9dDneYb=Nw&tWw z;F$|pu}&V&z#lXmCCm-3z(9~AwvN_~p#muy)^)PF7Qug~t4^N-eXHwMRLT=1Lt(QQ NB^%(Z%tNtI{SW?Df&~Bo diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_16bpp_cs.h b/src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_16bpp_cs.h index 08b37b8a8..e78a4f4a7 100644 --- a/src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_16bpp_cs.h +++ b/src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_16bpp_cs.h @@ -1,14 +1,14 @@ // generated from `xb buildhlsl` // source: texture_tile_16bpp.cs.hlsl const uint8_t texture_tile_16bpp_cs[] = { - 0x44, 0x58, 0x42, 0x43, 0x01, 0x47, 0x3A, 0xC8, 0x23, 0xFF, 0x19, 0x7B, - 0xC2, 0x80, 0xCB, 0x99, 0xA4, 0xB1, 0xF3, 0xD3, 0x01, 0x00, 0x00, 0x00, - 0x50, 0x11, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, - 0x38, 0x03, 0x00, 0x00, 0x48, 0x03, 0x00, 0x00, 0x58, 0x03, 0x00, 0x00, - 0xB4, 0x10, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0xFC, 0x02, 0x00, 0x00, + 0x44, 0x58, 0x42, 0x43, 0x14, 0xDC, 0x6A, 0x2B, 0xC1, 0x4C, 0xFD, 0x5C, + 0xBC, 0x9E, 0x7D, 0x80, 0x47, 0x7F, 0xB6, 0xA1, 0x01, 0x00, 0x00, 0x00, + 0x94, 0x12, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x24, 0x03, 0x00, 0x00, 0x34, 0x03, 0x00, 0x00, 0x44, 0x03, 0x00, 0x00, + 0xF8, 0x11, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0xE8, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01, 0x05, 0x53, 0x43, 0x00, 0x05, 0x00, 0x00, - 0xD3, 0x02, 0x00, 0x00, 0x13, 0x13, 0x44, 0x25, 0x3C, 0x00, 0x00, 0x00, + 0xBE, 0x02, 0x00, 0x00, 0x13, 0x13, 0x44, 0x25, 0x3C, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB4, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, @@ -35,17 +35,17 @@ const uint8_t texture_tile_16bpp_cs[] = { 0x48, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x24, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x72, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5D, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x24, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x89, 0x02, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x74, 0x02, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x24, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0x9E, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x89, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x24, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0xB8, 0x02, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xA3, 0x02, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x24, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74, @@ -56,146 +56,157 @@ const uint8_t texture_tile_16bpp_cs[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x02, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x74, 0x69, 0x6C, 0x65, 0x5F, - 0x65, 0x6E, 0x64, 0x69, 0x61, 0x6E, 0x5F, 0x66, 0x6F, 0x72, 0x6D, 0x61, - 0x74, 0x5F, 0x67, 0x75, 0x65, 0x73, 0x74, 0x5F, 0x70, 0x69, 0x74, 0x63, - 0x68, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, - 0x5F, 0x74, 0x69, 0x6C, 0x65, 0x5F, 0x6F, 0x66, 0x66, 0x73, 0x65, 0x74, + 0x69, 0x6E, 0x66, 0x6F, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, + 0x75, 0x72, 0x65, 0x5F, 0x74, 0x69, 0x6C, 0x65, 0x5F, 0x6F, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x5F, 0x74, 0x69, 0x6C, 0x65, 0x5F, 0x73, 0x69, 0x7A, 0x65, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, - 0x74, 0x69, 0x6C, 0x65, 0x5F, 0x73, 0x69, 0x7A, 0x65, 0x00, 0x78, 0x65, - 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x74, 0x69, 0x6C, - 0x65, 0x5F, 0x68, 0x6F, 0x73, 0x74, 0x5F, 0x62, 0x61, 0x73, 0x65, 0x00, - 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x74, - 0x69, 0x6C, 0x65, 0x5F, 0x68, 0x6F, 0x73, 0x74, 0x5F, 0x70, 0x69, 0x74, - 0x63, 0x68, 0x00, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, - 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4C, 0x53, 0x4C, 0x20, 0x53, 0x68, - 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6F, 0x6D, 0x70, 0x69, 0x6C, 0x65, - 0x72, 0x20, 0x31, 0x30, 0x2E, 0x31, 0x00, 0xAB, 0x49, 0x53, 0x47, 0x4E, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x4F, 0x53, 0x47, 0x4E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x53, 0x48, 0x45, 0x58, 0x54, 0x0D, 0x00, 0x00, - 0x51, 0x00, 0x05, 0x00, 0x55, 0x03, 0x00, 0x00, 0x6A, 0x08, 0x00, 0x01, - 0x59, 0x00, 0x00, 0x07, 0x46, 0x8E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xA1, 0x00, 0x00, 0x06, 0x46, 0x7E, 0x30, 0x00, + 0x74, 0x69, 0x6C, 0x65, 0x5F, 0x68, 0x6F, 0x73, 0x74, 0x5F, 0x62, 0x61, + 0x73, 0x65, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x5F, 0x74, 0x69, 0x6C, 0x65, 0x5F, 0x68, 0x6F, 0x73, 0x74, 0x5F, + 0x70, 0x69, 0x74, 0x63, 0x68, 0x00, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, + 0x6F, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4C, 0x53, 0x4C, + 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6F, 0x6D, 0x70, + 0x69, 0x6C, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2E, 0x31, 0x00, 0xAB, 0xAB, + 0x49, 0x53, 0x47, 0x4E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x4F, 0x53, 0x47, 0x4E, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x53, 0x48, 0x45, 0x58, + 0xAC, 0x0E, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0xAB, 0x03, 0x00, 0x00, + 0x6A, 0x08, 0x00, 0x01, 0x59, 0x00, 0x00, 0x07, 0x46, 0x8E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x9C, 0x08, 0x00, 0x07, 0x46, 0xEE, 0x31, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0x00, 0x00, 0x06, + 0x46, 0x7E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9C, 0x08, 0x00, 0x07, + 0x46, 0xEE, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5F, 0x00, 0x00, 0x02, 0x32, 0x00, 0x02, 0x00, 0x68, 0x00, 0x00, 0x02, + 0x09, 0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x04, 0x08, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x09, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x02, - 0x32, 0x00, 0x02, 0x00, 0x68, 0x00, 0x00, 0x02, 0x09, 0x00, 0x00, 0x00, - 0x9B, 0x00, 0x00, 0x04, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, - 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, - 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x29, 0x00, 0x00, 0x06, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x02, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x04, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x1A, 0x00, 0x02, 0x00, 0x50, 0x00, 0x00, 0x07, 0x62, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x06, 0x01, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x06, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x07, - 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1F, 0x00, 0x04, 0x03, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3E, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x01, 0x23, 0x00, 0x00, 0x0C, - 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x02, 0x00, - 0x1A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, - 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x1E, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xA5, 0x00, 0x00, 0x08, 0x32, 0x00, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x46, 0x70, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x55, 0x00, 0x00, 0x0A, 0xC2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x06, 0x04, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x01, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1A, 0x80, 0x30, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, 0x2A, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x86, 0x0D, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, - 0xE0, 0x07, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x14, - 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x0A, 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x0B, 0x42, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x1A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x07, 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x06, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x02, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x04, 0x22, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x02, 0x00, 0x50, 0x00, 0x00, 0x07, + 0xA2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x06, 0x04, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3C, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x01, + 0x23, 0x00, 0x00, 0x0C, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x02, 0x00, 0x1A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA5, 0x00, 0x00, 0x08, + 0x32, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x70, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, 0xC2, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x06, 0x04, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x11, + 0xA2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x56, 0x85, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, + 0x2A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x86, 0x0D, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, + 0xE0, 0x07, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x14, 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, - 0x86, 0x0D, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x0F, - 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x0B, 0x00, 0x00, 0x00, 0x86, 0x0D, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x8A, 0x00, 0x00, 0x0F, 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, + 0x0B, 0x00, 0x00, 0x00, 0x86, 0x0D, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x07, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x1F, 0x00, 0x04, 0x03, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x14, 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, + 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x86, 0x0D, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x0F, + 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x86, 0x0D, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x12, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, - 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x14, - 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, - 0x0B, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x86, 0x0D, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x0F, 0xF2, 0x00, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, - 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x86, 0x0D, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x86, 0x0D, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, - 0xFF, 0xFF, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x01, - 0x55, 0x00, 0x00, 0x0C, 0x72, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x96, 0x85, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x57, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1A, 0x80, 0x30, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, 0x1A, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x14, 0xF2, 0x00, 0x10, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x12, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x86, 0x0D, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, + 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, + 0x15, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1F, 0x00, 0x04, 0x03, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x14, 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, - 0x36, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x2A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0x62, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xF6, 0x0D, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, - 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, - 0x62, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x01, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x56, 0x06, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x55, 0x00, 0x00, 0x0C, + 0x32, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x66, 0x8A, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x07, + 0x42, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x0A, 0xA2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xA6, 0x02, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0x00, 0x00, 0x55, 0x00, 0x00, 0x07, 0x32, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xA6, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0xA2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x0D, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, @@ -203,31 +214,31 @@ const uint8_t texture_tile_16bpp_cs[] = { 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, - 0xA2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x1E, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x2A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, - 0x1F, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x52, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0xF6, 0x0F, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x1F, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x09, - 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, - 0x32, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, + 0x32, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0xF6, 0x0F, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x0A, 0x32, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x46, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x0A, 0x32, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x46, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, @@ -242,7 +253,7 @@ const uint8_t texture_tile_16bpp_cs[] = { 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, @@ -253,7 +264,7 @@ const uint8_t texture_tile_16bpp_cs[] = { 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0xA6, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0xF6, 0x0F, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, @@ -262,7 +273,7 @@ const uint8_t texture_tile_16bpp_cs[] = { 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, @@ -273,45 +284,45 @@ const uint8_t texture_tile_16bpp_cs[] = { 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0xF6, 0x0F, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, - 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0xF2, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x56, 0x05, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x56, 0x05, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, - 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, - 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0xF6, 0x0F, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, - 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, - 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x14, 0xF2, 0x00, 0x10, 0x00, @@ -322,7 +333,7 @@ const uint8_t texture_tile_16bpp_cs[] = { 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, @@ -332,6 +343,22 @@ const uint8_t texture_tile_16bpp_cs[] = { 0x1E, 0x00, 0x00, 0x09, 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x56, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x06, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x02, 0x00, 0x29, 0x00, 0x00, 0x07, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x56, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, 0x2A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x06, 0x05, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, @@ -358,9 +385,9 @@ const uint8_t texture_tile_16bpp_cs[] = { 0x01, 0x00, 0x00, 0x00, 0xF6, 0x0F, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x01, 0x3E, 0x00, 0x00, 0x01, 0x53, 0x54, 0x41, 0x54, 0x94, 0x00, 0x00, 0x00, - 0x5B, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, - 0x16, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x67, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_16bpp_cs.txt b/src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_16bpp_cs.txt index c5e618df2..e59df4d9e 100644 --- a/src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_16bpp_cs.txt +++ b/src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_16bpp_cs.txt @@ -8,7 +8,7 @@ // { // // uint xe_texture_tile_guest_base; // Offset: 0 Size: 4 -// uint xe_texture_tile_endian_format_guest_pitch;// Offset: 4 Size: 4 +// uint xe_texture_tile_info; // Offset: 4 Size: 4 // uint xe_texture_tile_offset; // Offset: 8 Size: 4 // uint xe_texture_tile_size; // Offset: 12 Size: 4 // uint xe_texture_tile_host_base; // Offset: 16 Size: 4 @@ -49,21 +49,23 @@ dcl_thread_group 8, 32, 1 ushr r0.y, CB0[0][0].w, l(16) mov r0.x, CB0[0][0].w and r0.xy, r0.xyxx, l(0x0000ffff, 0x0000ffff, 0, 0) +ubfe r0.z, l(1), l(9), CB0[0][0].y +ishl r0.xy, r0.xyxx, r0.zzzz ishl r1.x, vThreadID.x, l(2) mov r1.y, vThreadID.y -uge r0.yz, r1.xxyx, r0.xxyx -or r0.y, r0.z, r0.y +uge r0.yw, r1.xxxy, r0.xxxy +or r0.y, r0.w, r0.y if_nz r0.y ret endif imad r0.y, vThreadID.y, CB0[0][1].y, CB0[0][1].x -ishl r0.z, r1.x, l(1) -iadd r0.y, r0.z, r0.y +ishl r0.w, r1.x, l(1) +iadd r0.y, r0.w, r0.y ld_raw r2.xy, r0.y, T0[0].xyxx ushr r2.zw, r2.xxxy, l(0, 0, 16, 16) -ubfe r0.y, l(6), l(3), CB0[0][0].y -ieq r0.z, r0.y, l(4) -if_nz r0.z +ubfe r0.yw, l(0, 6, 0, 2), l(0, 3, 0, 1), CB0[0][0].yyyy +ieq r1.z, r0.y, l(4) +if_nz r1.z and r3.xyzw, r2.xzyw, l(2016, 2016, 2016, 2016) bfi r4.xyzw, l(5, 5, 5, 5), l(11, 11, 11, 11), r2.xzyw, l(0, 0, 0, 0) iadd r3.xyzw, r3.xyzw, r4.xyzw @@ -79,50 +81,60 @@ else and r3.xyzw, r2.xzyw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) endif endif -ushr r2.xyz, CB0[0][0].yzyy, l(1, 16, 9, 0) -xor r0.y, r2.x, CB0[0][0].y +and r0.y, CB0[0][0].y, l(7) +xor r0.y, r0.w, r0.y and r0.y, r0.y, l(1) if_nz r0.y - bfi r4.xyzw, l(8, 8, 8, 8), l(8, 8, 8, 8), r3.xyzw, l(0, 0, 0, 0) - ushr r5.xyzw, r3.xyzw, l(8, 8, 8, 8) - iadd r3.xyzw, r4.xyzw, r5.xyzw + bfi r2.xyzw, l(8, 8, 8, 8), l(8, 8, 8, 8), r3.xyzw, l(0, 0, 0, 0) + ushr r4.xyzw, r3.xyzw, l(8, 8, 8, 8) + iadd r3.xyzw, r2.xyzw, r4.xyzw endif -mov r2.w, CB0[0][0].z -and r0.yz, r2.wwyw, l(0, 0x0000ffff, 0x0000ffff, 0) -iadd r0.yz, r1.xxyx, r0.yyzy +ushr r2.xy, CB0[0][0].zyzz, l(16, 10, 0, 0) +mov r2.z, CB0[0][0].z +and r0.yw, r2.zzzx, l(0, 0x0000ffff, 0, 0x0000ffff) +ushr r1.xy, r1.xyxx, r0.zzzz +iadd r0.yw, r0.yyyw, r1.xxxy iadd r1.xyzw, r0.yyyy, l(0, 1, 2, 3) ushr r4.xyzw, r1.xyzw, l(5, 5, 5, 5) -ushr r0.yw, r0.zzzz, l(0, 5, 0, 2) -iadd r2.x, r2.z, l(31) -ushr r2.x, r2.x, l(5) -imad r2.xyzw, r0.yyyy, r2.xxxx, r4.xyzw -ishl r4.xy, r0.zzzz, l(3, 7, 0, 0) -and r4.xy, r4.xyxx, l(112, 2048, 0, 0) -bfi r5.xyzw, l(3, 3, 3, 3), l(1, 1, 1, 1), r1.xyzw, r4.xxxx -ishl r0.y, r4.x, l(1) +ushr r2.xz, r0.wwww, l(5, 0, 2, 0) +iadd r0.y, r2.y, l(31) +ushr r0.y, r0.y, l(5) +imad r4.xyzw, r2.xxxx, r0.yyyy, r4.xyzw +ishl r2.xy, r0.wwww, l(3, 7, 0, 0) +and r2.xy, r2.xyxx, l(112, 2048, 0, 0) +bfi r5.xyzw, l(3, 3, 3, 3), l(1, 1, 1, 1), r1.xyzw, r2.xxxx +ishl r0.y, r2.x, l(1) bfi r6.xyzw, l(3, 3, 3, 3), l(2, 2, 2, 2), r1.xyzw, r0.yyyy and r6.xyzw, r6.xyzw, l(224, 224, 224, 224) -bfi r7.xyzw, l(24, 24, 24, 24), l(8, 8, 8, 8), r2.xyzw, r6.xyzw +bfi r7.xyzw, l(24, 24, 24, 24), l(8, 8, 8, 8), r4.xyzw, r6.xyzw bfi r7.xyzw, l(4, 4, 4, 4), l(0, 0, 0, 0), r5.xyzw, r7.xyzw -bfi r7.xyzw, l(1, 1, 1, 1), l(4, 4, 4, 4), r0.zzzz, r7.xyzw +bfi r7.xyzw, l(1, 1, 1, 1), l(4, 4, 4, 4), r0.wwww, r7.xyzw ishl r8.xyzw, r6.xyzw, l(3, 3, 3, 3) -bfi r8.xyzw, l(24, 24, 24, 24), l(11, 11, 11, 11), r2.xyzw, r8.xyzw +bfi r8.xyzw, l(24, 24, 24, 24), l(11, 11, 11, 11), r4.xyzw, r8.xyzw bfi r8.xyzw, l(4, 4, 4, 4), l(3, 3, 3, 3), r5.xyzw, r8.xyzw -bfi r8.xyzw, l(1, 1, 1, 1), l(7, 7, 7, 7), r0.zzzz, r8.xyzw -bfi r4.xyzw, l(12, 12, 12, 12), l(0, 0, 0, 0), r4.yyyy, r8.xyzw +bfi r8.xyzw, l(1, 1, 1, 1), l(7, 7, 7, 7), r0.wwww, r8.xyzw +bfi r8.xyzw, l(12, 12, 12, 12), l(0, 0, 0, 0), r2.yyyy, r8.xyzw ishl r6.xyzw, r6.xyzw, l(2, 2, 2, 2) -bfi r2.xyzw, l(24, 24, 24, 24), l(10, 10, 10, 10), r2.xyzw, r6.xyzw -bfi r2.xyzw, l(4, 4, 4, 4), l(2, 2, 2, 2), r5.xyzw, r2.xyzw -bfi r2.xyzw, l(1, 1, 1, 1), l(6, 6, 6, 6), r0.zzzz, r2.xyzw -and r2.xyzw, r2.xyzw, l(1792, 1792, 1792, 1792) -iadd r2.xyzw, r4.xyzw, r2.xyzw +bfi r4.xyzw, l(24, 24, 24, 24), l(10, 10, 10, 10), r4.xyzw, r6.xyzw +bfi r4.xyzw, l(4, 4, 4, 4), l(2, 2, 2, 2), r5.xyzw, r4.xyzw +bfi r4.xyzw, l(1, 1, 1, 1), l(6, 6, 6, 6), r0.wwww, r4.xyzw +and r4.xyzw, r4.xyzw, l(1792, 1792, 1792, 1792) +iadd r4.xyzw, r8.xyzw, r4.xyzw ushr r1.xyzw, r1.xyzw, l(3, 3, 3, 3) -and r0.y, r0.w, l(2) +and r0.y, r2.z, l(2) iadd r1.xyzw, r0.yyyy, r1.xyzw bfi r1.xyzw, l(2, 2, 2, 2), l(6, 6, 6, 6), r1.xyzw, l(0, 0, 0, 0) -iadd r1.xyzw, r2.xyzw, r1.xyzw +iadd r1.xyzw, r4.xyzw, r1.xyzw bfi r1.xyzw, l(6, 6, 6, 6), l(0, 0, 0, 0), r7.xyzw, r1.xyzw iadd r1.xyzw, r1.xyzw, CB0[0][0].xxxx +ishl r0.y, r0.z, l(1) +ishl r1.xyzw, r1.xyzw, r0.yyyy +and r0.y, r0.z, vThreadID.y +ishl r0.y, r0.y, l(2) +iadd r1.xyzw, r0.yyyy, r1.xyzw +if_nz r0.z + iadd r1.xyzw, r1.xxyy, l(0, 2, 0, 2) +endif ushr r1.xyzw, r1.xyzw, l(1, 1, 1, 1) store_uav_typed U0[0].xyzw, r1.xxxx, r3.xxxx imad r0.yzw, vThreadID.xxxx, l(0, 4, 4, 4), l(0, 1, 2, 3) @@ -137,4 +149,4 @@ if_nz r0.x endif endif ret -// Approximately 91 instruction slots used +// Approximately 103 instruction slots used diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_16bpp_rgba_cs.cso b/src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_16bpp_rgba_cs.cso index e6d24cd94d38d648c0a19e6c878159c7b46dce85..9ab74828840983c372c7c44ce916dda35a7e5073 100644 GIT binary patch delta 1277 zcmZ8g%}Z5L5TA3u-n;MfKA$hmS6P0b2|-$EWse&~aUN3j z_BC0h__=CQUa)^D`%0|1+ZeMh%uHS4H^xJ5Hyhm_S)w7y@Q2Tv-}+{WlD*_fE+Xa2 zh_oxZ=GI}EH{~EvtS#~#jP!iM;~uNE@kO+EEHA)-hIC6zU1aOzXI5F=;h$E$>g1f= zb|k063?I%!PN+!AC&QOXMD894N*le$=j>g3v8;(uQ8ip@$ue8yOfAmY?Piy_xH|F9 ziy$N>A?2;bMQ{SkRqmmjTsHAb&Hz1_@yOr_x2joCx1GXj_%f|;|M;t2&C{;OlTP*S z9X8r0X#s7piskuJ+`2g;?4h%Oo0{F;b-<&S2^m_B2|{n=-?D=xl&IS}Z-khJA4aaP zZ)(XIuqpm61Uh9wLTBKC5;e$ZIy?)g< zd|Rx)la&QrLKnJeT}~Bw)%Mc5+`xk;oIO00t#UPDoLikdFL@p>*4aaIO;(Vf_IQQM+=8Cib0iubb5C8xG delta 902 zcmY*X%WD&15T9=!NjJ$pl1)i9L1PoK1}h@cTCEUcA6`mLp-nClQmwY2QIjYh1glac zYEc;}o{D-XUPPrALHq;sR8bEe>f_+StDvVso!RVaIxv};otfYKX1;vfv6k)|DCUmz z$Sb*HUp~*>y)@i-(^wo40B|J&ppxB3x?cu3N?IiS76up_7#v!=-xn7jUXBk7wJHI$ zVP2%v26-XJTO`kNyjSE!*~5ORxM`|#a;97H?W}%U?6v*`k z2Hd`uK{%>)Yj@}nzbL2RycWZIT2vh}ERgV-71M43n4D9+T(^@W3r`<|1UF~1ay8`E!Yl<$!dvM=`+Qj#{vAY+(4r)H$Zz+K9f}NVP zDwQbsJ6LGvXeSM5J+p%4&~qVUSid1r(}G^1VBUyh(wNr0Ef~EGg=yncqf03G-Z)5A z-$QZiGNVqjjSu_@JYyzwW=HQ7c9`OELV96Z8<1pttR?WL84Gi5>x&Q#t5-chgaJpa gn}qzys$taXSWZTgLQLXe+txd%DM8B3ek|Lyztm=j!~g&Q diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_16bpp_rgba_cs.h b/src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_16bpp_rgba_cs.h index 4f45ae55b..236a13fad 100644 --- a/src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_16bpp_rgba_cs.h +++ b/src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_16bpp_rgba_cs.h @@ -1,14 +1,14 @@ // generated from `xb buildhlsl` // source: texture_tile_16bpp_rgba.cs.hlsl const uint8_t texture_tile_16bpp_rgba_cs[] = { - 0x44, 0x58, 0x42, 0x43, 0x36, 0x03, 0xD0, 0x42, 0x50, 0xDE, 0xD9, 0x85, - 0x8F, 0x76, 0x47, 0x89, 0xBD, 0x89, 0x9E, 0x4D, 0x01, 0x00, 0x00, 0x00, - 0x7C, 0x12, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, - 0x38, 0x03, 0x00, 0x00, 0x48, 0x03, 0x00, 0x00, 0x58, 0x03, 0x00, 0x00, - 0xE0, 0x11, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0xFC, 0x02, 0x00, 0x00, + 0x44, 0x58, 0x42, 0x43, 0x8E, 0x3F, 0xAB, 0xE8, 0x68, 0x39, 0xCC, 0x27, + 0x64, 0x49, 0x4F, 0x6D, 0x93, 0xA8, 0x94, 0x7B, 0x01, 0x00, 0x00, 0x00, + 0xD4, 0x13, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x24, 0x03, 0x00, 0x00, 0x34, 0x03, 0x00, 0x00, 0x44, 0x03, 0x00, 0x00, + 0x38, 0x13, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0xE8, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01, 0x05, 0x53, 0x43, 0x00, 0x05, 0x00, 0x00, - 0xD3, 0x02, 0x00, 0x00, 0x13, 0x13, 0x44, 0x25, 0x3C, 0x00, 0x00, 0x00, + 0xBE, 0x02, 0x00, 0x00, 0x13, 0x13, 0x44, 0x25, 0x3C, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB4, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, @@ -35,17 +35,17 @@ const uint8_t texture_tile_16bpp_rgba_cs[] = { 0x48, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x24, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x72, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5D, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x24, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x89, 0x02, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x74, 0x02, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x24, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0x9E, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x89, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x24, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0xB8, 0x02, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xA3, 0x02, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x24, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74, @@ -56,344 +56,372 @@ const uint8_t texture_tile_16bpp_rgba_cs[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x02, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x74, 0x69, 0x6C, 0x65, 0x5F, - 0x65, 0x6E, 0x64, 0x69, 0x61, 0x6E, 0x5F, 0x66, 0x6F, 0x72, 0x6D, 0x61, - 0x74, 0x5F, 0x67, 0x75, 0x65, 0x73, 0x74, 0x5F, 0x70, 0x69, 0x74, 0x63, - 0x68, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, - 0x5F, 0x74, 0x69, 0x6C, 0x65, 0x5F, 0x6F, 0x66, 0x66, 0x73, 0x65, 0x74, + 0x69, 0x6E, 0x66, 0x6F, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, + 0x75, 0x72, 0x65, 0x5F, 0x74, 0x69, 0x6C, 0x65, 0x5F, 0x6F, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x5F, 0x74, 0x69, 0x6C, 0x65, 0x5F, 0x73, 0x69, 0x7A, 0x65, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, - 0x74, 0x69, 0x6C, 0x65, 0x5F, 0x73, 0x69, 0x7A, 0x65, 0x00, 0x78, 0x65, - 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x74, 0x69, 0x6C, - 0x65, 0x5F, 0x68, 0x6F, 0x73, 0x74, 0x5F, 0x62, 0x61, 0x73, 0x65, 0x00, - 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x74, - 0x69, 0x6C, 0x65, 0x5F, 0x68, 0x6F, 0x73, 0x74, 0x5F, 0x70, 0x69, 0x74, - 0x63, 0x68, 0x00, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, - 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4C, 0x53, 0x4C, 0x20, 0x53, 0x68, - 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6F, 0x6D, 0x70, 0x69, 0x6C, 0x65, - 0x72, 0x20, 0x31, 0x30, 0x2E, 0x31, 0x00, 0xAB, 0x49, 0x53, 0x47, 0x4E, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x4F, 0x53, 0x47, 0x4E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x53, 0x48, 0x45, 0x58, 0x80, 0x0E, 0x00, 0x00, - 0x51, 0x00, 0x05, 0x00, 0xA0, 0x03, 0x00, 0x00, 0x6A, 0x08, 0x00, 0x01, - 0x59, 0x00, 0x00, 0x07, 0x46, 0x8E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xA1, 0x00, 0x00, 0x06, 0x46, 0x7E, 0x30, 0x00, + 0x74, 0x69, 0x6C, 0x65, 0x5F, 0x68, 0x6F, 0x73, 0x74, 0x5F, 0x62, 0x61, + 0x73, 0x65, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x5F, 0x74, 0x69, 0x6C, 0x65, 0x5F, 0x68, 0x6F, 0x73, 0x74, 0x5F, + 0x70, 0x69, 0x74, 0x63, 0x68, 0x00, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, + 0x6F, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4C, 0x53, 0x4C, + 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6F, 0x6D, 0x70, + 0x69, 0x6C, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2E, 0x31, 0x00, 0xAB, 0xAB, + 0x49, 0x53, 0x47, 0x4E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x4F, 0x53, 0x47, 0x4E, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x53, 0x48, 0x45, 0x58, + 0xEC, 0x0F, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0xFB, 0x03, 0x00, 0x00, + 0x6A, 0x08, 0x00, 0x01, 0x59, 0x00, 0x00, 0x07, 0x46, 0x8E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x9C, 0x08, 0x00, 0x07, 0x46, 0xEE, 0x31, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0x00, 0x00, 0x06, + 0x46, 0x7E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9C, 0x08, 0x00, 0x07, + 0x46, 0xEE, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5F, 0x00, 0x00, 0x02, 0x32, 0x00, 0x02, 0x00, 0x68, 0x00, 0x00, 0x02, + 0x09, 0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x04, 0x08, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x09, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x02, - 0x32, 0x00, 0x02, 0x00, 0x68, 0x00, 0x00, 0x02, 0x09, 0x00, 0x00, 0x00, - 0x9B, 0x00, 0x00, 0x04, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, - 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, - 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x29, 0x00, 0x00, 0x06, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x02, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x04, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x1A, 0x00, 0x02, 0x00, 0x50, 0x00, 0x00, 0x07, 0x62, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x06, 0x01, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x06, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x07, - 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x0A, 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x0B, 0x42, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x1A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x07, 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x06, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x02, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x04, 0x22, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x02, 0x00, 0x50, 0x00, 0x00, 0x07, + 0xA2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x06, 0x04, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3C, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x01, + 0x23, 0x00, 0x00, 0x0C, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x02, 0x00, 0x1A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA5, 0x00, 0x00, 0x08, + 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x7E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x11, 0xA2, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x56, 0x85, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, 0x2A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x0F, 0xF2, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, + 0xE0, 0x03, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, + 0x00, 0x7C, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, + 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, + 0x0F, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x07, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3E, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x01, 0x23, 0x00, 0x00, 0x0C, - 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x02, 0x00, - 0x1A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, - 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x1E, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xA5, 0x00, 0x00, 0x08, 0xF2, 0x00, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x46, 0x7E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x8A, 0x00, 0x00, 0x0B, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x1A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x07, - 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x1F, 0x00, 0x04, 0x03, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x0F, 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, - 0xE0, 0x03, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0x02, 0x40, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, + 0xF0, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, + 0x0C, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, - 0x00, 0x7C, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, + 0x00, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, - 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, + 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x12, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x40, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, - 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x0F, - 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, - 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0xF0, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, - 0xF0, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, - 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, - 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x00, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, - 0x00, 0x0F, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, - 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, - 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x09, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, - 0x15, 0x00, 0x00, 0x01, 0x55, 0x00, 0x00, 0x0C, 0x72, 0x00, 0x10, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x96, 0x85, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x1A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x07, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, - 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x14, - 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x0F, 0xF2, 0x00, 0x10, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, - 0x36, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x2A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0x62, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xF6, 0x0D, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, - 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, - 0x62, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x01, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x56, 0x06, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1E, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x56, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, - 0xA2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x01, 0x55, 0x00, 0x00, 0x0C, 0x32, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x66, 0x8A, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x2A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, + 0xA2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x02, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, + 0x55, 0x00, 0x00, 0x07, 0x32, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x46, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0xA2, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x56, 0x0D, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x04, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x1E, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x2A, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, - 0x1F, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x01, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x09, - 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, - 0x32, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x0A, 0x32, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x46, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x70, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x29, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, 0x52, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0xF6, 0x0F, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, + 0x55, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x09, 0xF2, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x56, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, 0x32, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0xF6, 0x0F, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, + 0x32, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x56, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, - 0xE0, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, + 0xF2, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xF6, 0x0F, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, + 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, - 0xF2, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0xA6, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, - 0xF2, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, - 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, - 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0xF2, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0xF6, 0x0F, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, - 0x0C, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x56, 0x05, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, - 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, - 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, - 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, - 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x56, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x14, 0xF2, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, + 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x1E, 0x00, 0x00, 0x09, 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x80, 0x30, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xF6, 0x0F, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x14, 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x09, + 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x06, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x06, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x02, 0x00, 0x29, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1F, 0x00, 0x04, 0x03, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x06, 0x05, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x55, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0xA4, 0x00, 0x00, 0x08, 0xF2, 0xE0, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x23, 0x00, 0x00, 0x0E, 0xE2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x02, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x00, 0x07, - 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x07, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1F, 0x00, 0x04, 0x03, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA4, 0x00, 0x00, 0x08, 0xF2, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x56, 0x05, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, - 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA4, 0x00, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x0E, + 0xE2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x02, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x00, 0x07, 0x72, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x96, 0x07, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA4, 0x00, 0x00, 0x08, 0xF2, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xA6, 0x0A, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, 0x2A, 0x00, 0x10, 0x00, + 0x56, 0x05, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA4, 0x00, 0x00, 0x08, 0xF2, 0xE0, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0x0F, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0xF6, 0x0F, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x15, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x01, - 0x3E, 0x00, 0x00, 0x01, 0x53, 0x54, 0x41, 0x54, 0x94, 0x00, 0x00, 0x00, - 0x62, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, - 0x1C, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x1F, 0x00, 0x04, 0x03, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xA4, 0x00, 0x00, 0x08, 0xF2, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xF6, 0x0F, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xF6, 0x0F, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, + 0x15, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x01, 0x3E, 0x00, 0x00, 0x01, + 0x53, 0x54, 0x41, 0x54, 0x94, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, }; diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_16bpp_rgba_cs.txt b/src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_16bpp_rgba_cs.txt index 388d8622c..d0e7774df 100644 --- a/src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_16bpp_rgba_cs.txt +++ b/src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_16bpp_rgba_cs.txt @@ -8,7 +8,7 @@ // { // // uint xe_texture_tile_guest_base; // Offset: 0 Size: 4 -// uint xe_texture_tile_endian_format_guest_pitch;// Offset: 4 Size: 4 +// uint xe_texture_tile_info; // Offset: 4 Size: 4 // uint xe_texture_tile_offset; // Offset: 8 Size: 4 // uint xe_texture_tile_size; // Offset: 12 Size: 4 // uint xe_texture_tile_host_base; // Offset: 16 Size: 4 @@ -49,20 +49,22 @@ dcl_thread_group 8, 32, 1 ushr r0.y, CB0[0][0].w, l(16) mov r0.x, CB0[0][0].w and r0.xy, r0.xyxx, l(0x0000ffff, 0x0000ffff, 0, 0) +ubfe r0.z, l(1), l(9), CB0[0][0].y +ishl r0.xy, r0.xyxx, r0.zzzz ishl r1.x, vThreadID.x, l(2) mov r1.y, vThreadID.y -uge r0.yz, r1.xxyx, r0.xxyx -or r0.y, r0.z, r0.y +uge r0.yw, r1.xxxy, r0.xxxy +or r0.y, r0.w, r0.y if_nz r0.y ret endif imad r0.y, vThreadID.y, CB0[0][1].y, CB0[0][1].x -ishl r0.z, r1.x, l(2) -iadd r0.y, r0.z, r0.y +ishl r0.w, r1.x, l(2) +iadd r0.y, r0.w, r0.y ld_raw r2.xyzw, r0.y, T0[0].xyzw -ubfe r0.y, l(6), l(3), CB0[0][0].y -ieq r0.z, r0.y, l(3) -if_nz r0.z +ubfe r0.yw, l(0, 6, 0, 2), l(0, 3, 0, 1), CB0[0][0].yyyy +ieq r1.z, r0.y, l(3) +if_nz r1.z ubfe r3.xyzw, l(5, 5, 5, 5), l(3, 3, 3, 3), r2.xyzw ushr r4.xyzw, r2.xyzw, l(6, 6, 6, 6) and r4.xyzw, r4.xyzw, l(992, 992, 992, 992) @@ -86,50 +88,62 @@ else bfi r2.xyzw, l(12, 12, 12, 12), l(0, 0, 0, 0), r3.xyzw, r4.xyzw endif endif -ushr r3.xyz, CB0[0][0].yzyy, l(1, 16, 9, 0) -xor r0.y, r3.x, CB0[0][0].y +and r0.y, CB0[0][0].y, l(7) +xor r0.y, r0.w, r0.y and r0.y, r0.y, l(1) if_nz r0.y - bfi r4.xyzw, l(8, 8, 8, 8), l(8, 8, 8, 8), r2.xyzw, l(0, 0, 0, 0) - ubfe r5.xyzw, l(8, 8, 8, 8), l(8, 8, 8, 8), r2.xyzw - iadd r2.xyzw, r4.xyzw, r5.xyzw + ishl r3.xyzw, r2.xyzw, l(8, 8, 8, 8) + and r3.xyzw, r3.xyzw, l(0xff00ff00, 0xff00ff00, 0xff00ff00, 0xff00ff00) + ushr r4.xyzw, r2.xyzw, l(8, 8, 8, 8) + and r4.xyzw, r4.xyzw, l(0x00ff00ff, 0x00ff00ff, 0x00ff00ff, 0x00ff00ff) + iadd r2.xyzw, r3.xyzw, r4.xyzw endif -mov r3.w, CB0[0][0].z -and r0.yz, r3.wwyw, l(0, 0x0000ffff, 0x0000ffff, 0) -iadd r0.yz, r1.xxyx, r0.yyzy +ushr r3.xy, CB0[0][0].zyzz, l(16, 10, 0, 0) +mov r3.z, CB0[0][0].z +and r0.yw, r3.zzzx, l(0, 0x0000ffff, 0, 0x0000ffff) +ushr r1.xy, r1.xyxx, r0.zzzz +iadd r0.yw, r0.yyyw, r1.xxxy iadd r1.xyzw, r0.yyyy, l(0, 1, 2, 3) ushr r4.xyzw, r1.xyzw, l(5, 5, 5, 5) -ushr r0.yw, r0.zzzz, l(0, 5, 0, 2) -iadd r3.x, r3.z, l(31) -ushr r3.x, r3.x, l(5) -imad r3.xyzw, r0.yyyy, r3.xxxx, r4.xyzw -ishl r4.xy, r0.zzzz, l(3, 7, 0, 0) -and r4.xy, r4.xyxx, l(112, 2048, 0, 0) -bfi r5.xyzw, l(3, 3, 3, 3), l(1, 1, 1, 1), r1.xyzw, r4.xxxx -ishl r0.y, r4.x, l(1) +ushr r3.xz, r0.wwww, l(5, 0, 2, 0) +iadd r0.y, r3.y, l(31) +ushr r0.y, r0.y, l(5) +imad r4.xyzw, r3.xxxx, r0.yyyy, r4.xyzw +ishl r3.xy, r0.wwww, l(3, 7, 0, 0) +and r3.xy, r3.xyxx, l(112, 2048, 0, 0) +bfi r5.xyzw, l(3, 3, 3, 3), l(1, 1, 1, 1), r1.xyzw, r3.xxxx +ishl r0.y, r3.x, l(1) bfi r6.xyzw, l(3, 3, 3, 3), l(2, 2, 2, 2), r1.xyzw, r0.yyyy and r6.xyzw, r6.xyzw, l(224, 224, 224, 224) -bfi r7.xyzw, l(24, 24, 24, 24), l(8, 8, 8, 8), r3.xyzw, r6.xyzw +bfi r7.xyzw, l(24, 24, 24, 24), l(8, 8, 8, 8), r4.xyzw, r6.xyzw bfi r7.xyzw, l(4, 4, 4, 4), l(0, 0, 0, 0), r5.xyzw, r7.xyzw -bfi r7.xyzw, l(1, 1, 1, 1), l(4, 4, 4, 4), r0.zzzz, r7.xyzw +bfi r7.xyzw, l(1, 1, 1, 1), l(4, 4, 4, 4), r0.wwww, r7.xyzw ishl r8.xyzw, r6.xyzw, l(3, 3, 3, 3) -bfi r8.xyzw, l(24, 24, 24, 24), l(11, 11, 11, 11), r3.xyzw, r8.xyzw +bfi r8.xyzw, l(24, 24, 24, 24), l(11, 11, 11, 11), r4.xyzw, r8.xyzw bfi r8.xyzw, l(4, 4, 4, 4), l(3, 3, 3, 3), r5.xyzw, r8.xyzw -bfi r8.xyzw, l(1, 1, 1, 1), l(7, 7, 7, 7), r0.zzzz, r8.xyzw -bfi r4.xyzw, l(12, 12, 12, 12), l(0, 0, 0, 0), r4.yyyy, r8.xyzw +bfi r8.xyzw, l(1, 1, 1, 1), l(7, 7, 7, 7), r0.wwww, r8.xyzw +bfi r8.xyzw, l(12, 12, 12, 12), l(0, 0, 0, 0), r3.yyyy, r8.xyzw ishl r6.xyzw, r6.xyzw, l(2, 2, 2, 2) -bfi r3.xyzw, l(24, 24, 24, 24), l(10, 10, 10, 10), r3.xyzw, r6.xyzw -bfi r3.xyzw, l(4, 4, 4, 4), l(2, 2, 2, 2), r5.xyzw, r3.xyzw -bfi r3.xyzw, l(1, 1, 1, 1), l(6, 6, 6, 6), r0.zzzz, r3.xyzw -and r3.xyzw, r3.xyzw, l(1792, 1792, 1792, 1792) -iadd r3.xyzw, r4.xyzw, r3.xyzw +bfi r4.xyzw, l(24, 24, 24, 24), l(10, 10, 10, 10), r4.xyzw, r6.xyzw +bfi r4.xyzw, l(4, 4, 4, 4), l(2, 2, 2, 2), r5.xyzw, r4.xyzw +bfi r4.xyzw, l(1, 1, 1, 1), l(6, 6, 6, 6), r0.wwww, r4.xyzw +and r4.xyzw, r4.xyzw, l(1792, 1792, 1792, 1792) +iadd r4.xyzw, r8.xyzw, r4.xyzw ushr r1.xyzw, r1.xyzw, l(3, 3, 3, 3) -and r0.y, r0.w, l(2) +and r0.y, r3.z, l(2) iadd r1.xyzw, r0.yyyy, r1.xyzw bfi r1.xyzw, l(2, 2, 2, 2), l(6, 6, 6, 6), r1.xyzw, l(0, 0, 0, 0) -iadd r1.xyzw, r3.xyzw, r1.xyzw +iadd r1.xyzw, r4.xyzw, r1.xyzw bfi r1.xyzw, l(6, 6, 6, 6), l(0, 0, 0, 0), r7.xyzw, r1.xyzw iadd r1.xyzw, r1.xyzw, CB0[0][0].xxxx +ishl r0.y, r0.z, l(1) +ishl r1.xyzw, r1.xyzw, r0.yyyy +and r0.y, r0.z, vThreadID.y +ishl r0.y, r0.y, l(2) +iadd r1.xyzw, r0.yyyy, r1.xyzw +if_nz r0.z + iadd r1.xyzw, r1.xxyy, l(0, 2, 0, 2) +endif ushr r1.xyzw, r1.xyzw, l(1, 1, 1, 1) store_uav_typed U0[0].xyzw, r1.xxxx, r2.xxxx imad r0.yzw, vThreadID.xxxx, l(0, 4, 4, 4), l(0, 1, 2, 3) @@ -144,4 +158,4 @@ if_nz r0.x endif endif ret -// Approximately 98 instruction slots used +// Approximately 112 instruction slots used diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_32bpp_cs.cso b/src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_32bpp_cs.cso index 044aa8b83fd643614da3541684e1eeb9a1f700ad..1b9b839870269827301ed42f91cd5b9b7703e466 100644 GIT binary patch delta 1059 zcmZWnOKTHR6ux(6?j)H^nh9x%ZS31xfgUkop%rK!?&m8ProT5v^YYD3bw;Yoh7fU@lY{Cu zPA)a&u=KS56n;COXu?>uZmiaC(lg^B70n^%y(`2VUN~z~-Tc(KB}B3;&>JFsXlN6( zVP|s%A!4V)=yYhe9goJXQ$tTe-?ltm#g=6PH3MO6j2c!=-lHGZpd6!=I&l&G-KcV5 z^Q5kbK87EhV&Mgb5D~rz7vE`|j8E36p|a{YUX%1#oslNJQ^U04X6U!d(OXrbS-Wot z?1||%Pgt-WDDM@PITj+U3gPVGY|@T>Ws);F1Gg^E&3=9Bf0R6_1C8VyW-e2AEPpAQ zZQBT{4L`^^IQVDLU9-wFF{^CBs!r%ZEb6h43hp$+bSGAunh!DUr-O*$2g|~x%nS>6 zi1_ac^O><;#H!#c*UjrSC`5wiW=`xdYeAtaO~tb|&%K|frT9RCj||eJ&3LVYJzk3F z0Y^uE#h*)ynu+@cijF#~a6USDdf}`njZ}N3WY`Yl%F)PPXf!EWTfo#S|lX zBt%A|qMxYuT`v_)s{bGDs>8JI<}#eiH}TNoakr@Vz@%OG0Xkk!-I4{8Dmy9tV5=E6 z_tvbVmaU!`7H2yeiMNTR3yc<+FQESB_Lg{Sq8K>VTf;qUu*TN#@qsWl7Ph=guRf$a h*}nuY!PgMZX6b|;g7Tk>(NsF$_-r*=E{&vT{{ow)jM)GH delta 918 zcmY*X&ubG=5T3Wcl1+A-jcGMMXiJ(%V-UvpeOIPcQm1g3mRfhI?ur-0830fIVFqwggs>sM!=|!#_j$007l0-#V79!oO;GZPbC<@CN>NPV zpqdbAoK*J}3dF8Xw0XYr#X%E;U7=&)=Q^R+sBFlq#P||Oq`7g zF~SZN!qPDL_hv)tnX8cvtRl(?93>qQq_)|i`b^jsC`lZJ( zYxLX2AzCZOn8|P8K0wgsiHn5u-mv1^aX5p1l+RVd*o0*a2l>X)VedrB98(VxeZaHk r3U&BtHt<8hdX)-@_zB8(UlhMpwh;MFa-On=%T}z_Ra$EXHm#X|V8bP@7z zf>u4SS_H+kjEGvc30g%9qg5@Ng_{WbzB~8iDE)BGfB)zAo&TKsvgh^Tp^3S%@oM4e z>fICf=Bw8p{JHSq`??X4<82}yHC9go8fyaUeyhmEiL;YGHinAk?W>t7<6U+{(mHLr zy_@)I(ud}V2_pM3>;wGLQD@G*dVT4JzHrv{RH8R?E+;Y#gwJ{<@pXJnBs(SnutZFV z73&OiVWl7YuJnnd2IJhxSa14)j<^H8k77IN22l@c$|!2O;@GfmxKqa0FYeJxHhGWE|N#Zt9P7i3B-ksnfT1_9319-?Ayd)S?7e=ADt&ur4%zH0A2CmYgx<*u89Vm}Ysjq94WbYvj=w z+mi#1`(w6_(CkIw8?51*6T{``d@!KTnpfIEaZi0CFMShy>%4^mdpY(Ew!_zn#pJC1 W$`|##N$FNTW74oj^iw|V66h~pk$nRI delta 913 zcmZ`%&1(};5TCan>F&~|Z#QaULXEVm($+%`RT_!7jj`2Zq)l@WVyo3wF-l!8dhsCQ z2Oh$B@Fdkkj$&yMk1Zm25fl#|Jg9$yy@`c5vmaH84!k$>-hBOj@6GD|mu|6AFCSmJ z^W_Rw_*R<`CidvVN8|XmA%U8M;?YLZ z>4b~zJ(L^A#dT{5s*5dsy81k-+P1<@ipM$OgRthRT!FhYqAY2?6COaG^wc(=z+xgd zOAe^%Va9k;f=1^-0E=;Om49{X;v^FCZ^bcAj#oU|NY?mZu(k3k@jxhT3(Lla9+bmn zBZrfw%a=FJ4OUI-u6~3G;!o=ru6BR5Ooxv2w~)n;YRY6>dC*h~t1>^v9NEX*m?O=F zI2`c{a&8ys_K)l&Kl3kd)ojVssrWP$-^NuVUR;TJu~t0VNP-s)%>Yl3i{IrNozZ1i z#(H~&V2}fcIBGjUCdHEd55Rt0m+AC$L?wufGAtV1j@sAvHvskrZKIe$d~c_5Q)cj; zCDFArcqciEzP(p6h4_2uZPCNASMC)KlyTr@Yq&s(_e4AaE^aE{>zN5eu&`wdrP BdAtAs diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_64bpp_cs.h b/src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_64bpp_cs.h index b3771727f..5999db544 100644 --- a/src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_64bpp_cs.h +++ b/src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_64bpp_cs.h @@ -1,14 +1,14 @@ // generated from `xb buildhlsl` // source: texture_tile_64bpp.cs.hlsl const uint8_t texture_tile_64bpp_cs[] = { - 0x44, 0x58, 0x42, 0x43, 0xA0, 0x7B, 0xAE, 0xA0, 0x60, 0x88, 0x68, 0x44, - 0x56, 0x5C, 0x27, 0x6A, 0x18, 0xD7, 0x24, 0x3C, 0x01, 0x00, 0x00, 0x00, - 0x30, 0x12, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, - 0x38, 0x03, 0x00, 0x00, 0x48, 0x03, 0x00, 0x00, 0x58, 0x03, 0x00, 0x00, - 0x94, 0x11, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0xFC, 0x02, 0x00, 0x00, + 0x44, 0x58, 0x42, 0x43, 0xB3, 0x1A, 0xA7, 0x86, 0x88, 0x35, 0x8F, 0x5B, + 0xB3, 0x6B, 0x9B, 0xFD, 0x4E, 0xC3, 0xE2, 0x8B, 0x01, 0x00, 0x00, 0x00, + 0x34, 0x13, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x24, 0x03, 0x00, 0x00, 0x34, 0x03, 0x00, 0x00, 0x44, 0x03, 0x00, 0x00, + 0x98, 0x12, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0xE8, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01, 0x05, 0x53, 0x43, 0x00, 0x05, 0x00, 0x00, - 0xD3, 0x02, 0x00, 0x00, 0x13, 0x13, 0x44, 0x25, 0x3C, 0x00, 0x00, 0x00, + 0xBE, 0x02, 0x00, 0x00, 0x13, 0x13, 0x44, 0x25, 0x3C, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB4, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, @@ -35,17 +35,17 @@ const uint8_t texture_tile_64bpp_cs[] = { 0x48, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x24, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x72, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5D, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x24, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x89, 0x02, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x74, 0x02, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x24, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0x9E, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x89, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x24, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0xB8, 0x02, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xA3, 0x02, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x24, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74, @@ -56,237 +56,260 @@ const uint8_t texture_tile_64bpp_cs[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x02, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x74, 0x69, 0x6C, 0x65, 0x5F, - 0x65, 0x6E, 0x64, 0x69, 0x61, 0x6E, 0x5F, 0x66, 0x6F, 0x72, 0x6D, 0x61, - 0x74, 0x5F, 0x67, 0x75, 0x65, 0x73, 0x74, 0x5F, 0x70, 0x69, 0x74, 0x63, - 0x68, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, - 0x5F, 0x74, 0x69, 0x6C, 0x65, 0x5F, 0x6F, 0x66, 0x66, 0x73, 0x65, 0x74, + 0x69, 0x6E, 0x66, 0x6F, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, + 0x75, 0x72, 0x65, 0x5F, 0x74, 0x69, 0x6C, 0x65, 0x5F, 0x6F, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x5F, 0x74, 0x69, 0x6C, 0x65, 0x5F, 0x73, 0x69, 0x7A, 0x65, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, - 0x74, 0x69, 0x6C, 0x65, 0x5F, 0x73, 0x69, 0x7A, 0x65, 0x00, 0x78, 0x65, - 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x74, 0x69, 0x6C, - 0x65, 0x5F, 0x68, 0x6F, 0x73, 0x74, 0x5F, 0x62, 0x61, 0x73, 0x65, 0x00, - 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5F, 0x74, - 0x69, 0x6C, 0x65, 0x5F, 0x68, 0x6F, 0x73, 0x74, 0x5F, 0x70, 0x69, 0x74, - 0x63, 0x68, 0x00, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, - 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4C, 0x53, 0x4C, 0x20, 0x53, 0x68, - 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6F, 0x6D, 0x70, 0x69, 0x6C, 0x65, - 0x72, 0x20, 0x31, 0x30, 0x2E, 0x31, 0x00, 0xAB, 0x49, 0x53, 0x47, 0x4E, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x4F, 0x53, 0x47, 0x4E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x53, 0x48, 0x45, 0x58, 0x34, 0x0E, 0x00, 0x00, - 0x51, 0x00, 0x05, 0x00, 0x8D, 0x03, 0x00, 0x00, 0x6A, 0x08, 0x00, 0x01, - 0x59, 0x00, 0x00, 0x07, 0x46, 0x8E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xA1, 0x00, 0x00, 0x06, 0x46, 0x7E, 0x30, 0x00, + 0x74, 0x69, 0x6C, 0x65, 0x5F, 0x68, 0x6F, 0x73, 0x74, 0x5F, 0x62, 0x61, + 0x73, 0x65, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x5F, 0x74, 0x69, 0x6C, 0x65, 0x5F, 0x68, 0x6F, 0x73, 0x74, 0x5F, + 0x70, 0x69, 0x74, 0x63, 0x68, 0x00, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, + 0x6F, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4C, 0x53, 0x4C, + 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6F, 0x6D, 0x70, + 0x69, 0x6C, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2E, 0x31, 0x00, 0xAB, 0xAB, + 0x49, 0x53, 0x47, 0x4E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x4F, 0x53, 0x47, 0x4E, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x53, 0x48, 0x45, 0x58, + 0x4C, 0x0F, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0xD3, 0x03, 0x00, 0x00, + 0x6A, 0x08, 0x00, 0x01, 0x59, 0x00, 0x00, 0x07, 0x46, 0x8E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x9D, 0x00, 0x00, 0x06, 0x46, 0xEE, 0x31, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x02, 0x32, 0x00, 0x02, 0x00, - 0x68, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x04, - 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x55, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0x32, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x06, - 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x02, 0x00, - 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x04, - 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x02, 0x00, - 0x50, 0x00, 0x00, 0x07, 0x62, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x06, 0x01, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x01, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, - 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, - 0x15, 0x00, 0x00, 0x01, 0x55, 0x00, 0x00, 0x0C, 0x32, 0x00, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x66, 0x8A, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x2A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0x00, 0x00, 0x06, + 0x46, 0x7E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9D, 0x00, 0x00, 0x06, + 0x46, 0xEE, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x02, + 0x32, 0x00, 0x02, 0x00, 0x68, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x00, + 0x9B, 0x00, 0x00, 0x04, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, - 0x62, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x08, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1E, 0x00, 0x00, 0x07, 0x62, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x06, 0x01, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x56, 0x06, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, - 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x55, 0x00, 0x00, 0x0A, 0xA2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xA6, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x01, 0x40, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x07, - 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x23, 0x00, 0x00, 0x09, 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x56, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x29, 0x00, 0x00, 0x0A, 0x62, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0xA6, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0x62, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x56, 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x01, 0x00, 0x00, - 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, - 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, - 0xF2, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, - 0xE0, 0x03, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, - 0xF2, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x16, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, - 0x16, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, - 0xF2, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, - 0x16, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x0D, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, - 0x0D, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, - 0xF2, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8A, 0x00, 0x00, 0x0B, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x1A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, + 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x06, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x02, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x04, 0x22, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x02, 0x00, 0x50, 0x00, 0x00, 0x07, 0xA2, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x06, 0x04, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x07, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1F, 0x00, 0x04, 0x03, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3E, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x01, 0x55, 0x00, 0x00, 0x0C, + 0x32, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x66, 0x8A, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x07, + 0x42, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2A, 0x80, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x0A, 0xA2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xA6, 0x02, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0x00, 0x00, 0x55, 0x00, 0x00, 0x07, 0x62, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x06, 0x01, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xA6, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0xA2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x0D, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x56, 0x09, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x56, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, + 0x62, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0xF6, 0x0F, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x1F, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x09, + 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, + 0xA2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0xF6, 0x0F, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x0A, 0xA2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x56, 0x0D, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xC0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, - 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, - 0xF2, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, - 0x16, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, - 0x0C, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, - 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0xA6, 0x0A, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, - 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x14, - 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0xE0, 0x03, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, + 0xE0, 0x03, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0x16, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, + 0xF2, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0xF6, 0x0F, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, + 0xF2, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x16, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0x16, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, + 0x0D, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0xF6, 0x0F, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, + 0xF2, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, + 0x0C, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xF6, 0x0F, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, + 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x16, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0x16, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, + 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0xF6, 0x0F, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x56, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x14, 0xF2, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x09, 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, + 0x29, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, - 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x09, 0xF2, 0x00, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x06, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x0E, 0xE2, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x02, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x4F, 0x00, 0x00, 0x07, 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x96, 0x07, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x0C, 0x82, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x02, 0x00, 0x1A, 0x80, 0x30, 0x00, + 0x56, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x06, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x02, 0x00, 0x29, 0x00, 0x00, 0x07, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x56, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, 0x2A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x06, 0x05, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, + 0x23, 0x00, 0x00, 0x0E, 0xE2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x02, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x00, 0x07, + 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x07, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x0C, 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1A, 0x00, 0x02, 0x00, 0x1A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x0A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, - 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0xA5, 0x00, 0x00, 0x08, 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x7E, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x09, - 0x12, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1A, 0x80, 0x30, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, - 0x0A, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, - 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x16, 0x0B, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x22, 0x00, 0x10, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x12, 0x00, 0x00, 0x01, 0x36, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x1A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, - 0x55, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x1A, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x1A, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, - 0x62, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x56, 0x06, 0x10, 0x00, + 0x29, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0xA5, 0x00, 0x00, 0x08, + 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x7E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0C, 0x32, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x56, 0x85, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, 0x1A, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xF2, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x16, 0x0B, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x05, 0x42, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x01, + 0x36, 0x00, 0x00, 0x05, 0x42, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x0A, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, + 0x55, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x2A, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x2A, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, + 0xC2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0xA6, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1F, 0x00, 0x04, 0x03, 0x2A, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1F, 0x00, 0x04, 0x03, 0x3A, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, @@ -303,7 +326,7 @@ const uint8_t texture_tile_64bpp_cs[] = { 0xFF, 0x00, 0xFF, 0x00, 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, - 0x1F, 0x00, 0x04, 0x03, 0x1A, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x1F, 0x00, 0x04, 0x03, 0x2A, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, @@ -326,67 +349,66 @@ const uint8_t texture_tile_64bpp_cs[] = { 0xA5, 0x00, 0x00, 0x08, 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x7E, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, - 0x0A, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, + 0x1A, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x16, 0x0B, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x12, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x12, 0x00, 0x00, 0x01, 0x36, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1A, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, - 0x55, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x01, 0x55, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, - 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1F, 0x00, 0x04, 0x03, 0x1A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x29, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, 0x0A, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x02, 0x40, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, - 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x55, 0x00, 0x00, 0x0A, - 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, - 0xFF, 0x00, 0xFF, 0x00, 0x1E, 0x00, 0x00, 0x07, 0xF2, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, - 0x1F, 0x00, 0x04, 0x03, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x55, 0x00, 0x00, 0x0A, 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x1E, 0x00, 0x00, 0x07, + 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, + 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x0A, + 0xF2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x8C, 0x00, 0x00, 0x11, 0xF2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x15, 0x00, 0x00, 0x01, 0xA6, 0x00, 0x00, 0x08, 0x32, 0xE0, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x1F, 0x00, 0x04, 0x03, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x46, 0x0E, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x46, 0x0E, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0xA6, 0x00, 0x00, 0x08, 0x32, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, - 0xE6, 0x0A, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, - 0x15, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x01, 0x3E, 0x00, 0x00, 0x01, - 0x53, 0x54, 0x41, 0x54, 0x94, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x46, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x04, 0x03, + 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x08, + 0x32, 0xE0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0xE6, 0x0A, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x01, + 0x15, 0x00, 0x00, 0x01, 0x3E, 0x00, 0x00, 0x01, 0x53, 0x54, 0x41, 0x54, + 0x94, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1C, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, }; diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_64bpp_cs.txt b/src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_64bpp_cs.txt index 4c1a98db6..47815cdbe 100644 --- a/src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_64bpp_cs.txt +++ b/src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_64bpp_cs.txt @@ -8,7 +8,7 @@ // { // // uint xe_texture_tile_guest_base; // Offset: 0 Size: 4 -// uint xe_texture_tile_endian_format_guest_pitch;// Offset: 4 Size: 4 +// uint xe_texture_tile_info; // Offset: 4 Size: 4 // uint xe_texture_tile_offset; // Offset: 8 Size: 4 // uint xe_texture_tile_size; // Offset: 12 Size: 4 // uint xe_texture_tile_host_base; // Offset: 16 Size: 4 @@ -49,74 +49,85 @@ dcl_thread_group 8, 32, 1 ushr r0.y, CB0[0][0].w, l(16) mov r0.x, CB0[0][0].w and r0.xy, r0.xyxx, l(0x0000ffff, 0x0000ffff, 0, 0) +ubfe r0.z, l(1), l(9), CB0[0][0].y +ishl r0.xy, r0.xyxx, r0.zzzz ishl r1.x, vThreadID.x, l(2) mov r1.y, vThreadID.y -uge r0.yz, r1.xxyx, r0.xxyx -or r0.y, r0.z, r0.y +uge r0.yw, r1.xxxy, r0.xxxy +or r0.y, r0.w, r0.y if_nz r0.y ret endif -ushr r2.xy, CB0[0][0].zyzz, l(16, 9, 0, 0) +ushr r2.xy, CB0[0][0].zyzz, l(16, 10, 0, 0) mov r2.z, CB0[0][0].z -and r0.yz, r2.zzxz, l(0, 0x0000ffff, 0x0000ffff, 0) -iadd r0.yz, r1.xxyx, r0.yyzy +and r0.yw, r2.zzzx, l(0, 0x0000ffff, 0, 0x0000ffff) +ushr r1.yz, r1.xxyx, r0.zzzz +iadd r0.yw, r0.yyyw, r1.yyyz iadd r3.xyzw, r0.yyyy, l(0, 1, 2, 3) ushr r4.xyzw, r3.xyzw, l(5, 5, 5, 5) -ushr r0.yw, r0.zzzz, l(0, 5, 0, 2) -iadd r1.y, r2.y, l(31) -ushr r1.y, r1.y, l(5) -imad r2.xyzw, r0.yyyy, r1.yyyy, r4.xyzw -ishl r1.yz, r0.zzzz, l(0, 5, 7, 0) -and r1.yz, r1.yyzy, l(0, 448, 2048, 0) +ushr r1.yz, r0.wwww, l(0, 5, 2, 0) +iadd r0.y, r2.y, l(31) +ushr r0.y, r0.y, l(5) +imad r2.xyzw, r1.yyyy, r0.yyyy, r4.xyzw +ishl r1.yw, r0.wwww, l(0, 5, 0, 7) +and r1.yw, r1.yyyw, l(0, 448, 0, 2048) bfi r4.xyzw, l(3, 3, 3, 3), l(3, 3, 3, 3), r3.xyzw, r1.yyyy ishl r0.y, r1.y, l(1) bfi r5.xyzw, l(3, 3, 3, 3), l(4, 4, 4, 4), r3.xyzw, r0.yyyy and r5.xyzw, r5.xyzw, l(992, 992, 992, 992) bfi r6.xyzw, l(22, 22, 22, 22), l(10, 10, 10, 10), r2.xyzw, r5.xyzw bfi r6.xyzw, l(4, 4, 4, 4), l(0, 0, 0, 0), r4.xyzw, r6.xyzw -bfi r6.xyzw, l(1, 1, 1, 1), l(4, 4, 4, 4), r0.zzzz, r6.xyzw +bfi r6.xyzw, l(1, 1, 1, 1), l(4, 4, 4, 4), r0.wwww, r6.xyzw ishl r7.xyzw, r5.xyzw, l(3, 3, 3, 3) bfi r7.xyzw, l(22, 22, 22, 22), l(13, 13, 13, 13), r2.xyzw, r7.xyzw bfi r7.xyzw, l(4, 4, 4, 4), l(3, 3, 3, 3), r4.xyzw, r7.xyzw -bfi r7.xyzw, l(1, 1, 1, 1), l(7, 7, 7, 7), r0.zzzz, r7.xyzw -bfi r7.xyzw, l(12, 12, 12, 12), l(0, 0, 0, 0), r1.zzzz, r7.xyzw +bfi r7.xyzw, l(1, 1, 1, 1), l(7, 7, 7, 7), r0.wwww, r7.xyzw +bfi r7.xyzw, l(12, 12, 12, 12), l(0, 0, 0, 0), r1.wwww, r7.xyzw ishl r5.xyzw, r5.xyzw, l(2, 2, 2, 2) bfi r2.xyzw, l(22, 22, 22, 22), l(12, 12, 12, 12), r2.xyzw, r5.xyzw bfi r2.xyzw, l(4, 4, 4, 4), l(2, 2, 2, 2), r4.xyzw, r2.xyzw -bfi r2.xyzw, l(1, 1, 1, 1), l(6, 6, 6, 6), r0.zzzz, r2.xyzw +bfi r2.xyzw, l(1, 1, 1, 1), l(6, 6, 6, 6), r0.wwww, r2.xyzw and r2.xyzw, r2.xyzw, l(1792, 1792, 1792, 1792) iadd r2.xyzw, r7.xyzw, r2.xyzw ushr r3.xyzw, r3.xyzw, l(3, 3, 3, 3) -and r0.y, r0.w, l(2) +and r0.y, r1.z, l(2) iadd r3.xyzw, r0.yyyy, r3.xyzw bfi r3.xyzw, l(2, 2, 2, 2), l(6, 6, 6, 6), r3.xyzw, l(0, 0, 0, 0) iadd r2.xyzw, r2.xyzw, r3.xyzw bfi r2.xyzw, l(6, 6, 6, 6), l(0, 0, 0, 0), r6.xyzw, r2.xyzw iadd r2.xyzw, r2.xyzw, CB0[0][0].xxxx +ishl r0.y, r0.z, l(1) +ishl r2.xyzw, r2.xyzw, r0.yyyy +and r0.y, r0.z, vThreadID.y +ishl r0.y, r0.y, l(4) +iadd r2.xyzw, r0.yyyy, r2.xyzw +if_nz r0.z + iadd r2.xyzw, r2.xxyy, l(0, 8, 0, 8) +endif imad r0.yzw, vThreadID.xxxx, l(0, 4, 4, 4), l(0, 1, 2, 3) ult r0.xyz, r0.yzwy, r0.xxxx imad r0.w, vThreadID.y, CB0[0][1].y, CB0[0][1].x ishl r1.x, r1.x, l(3) iadd r0.w, r0.w, r1.x ld_raw r1.xyzw, r0.w, T0[0].xyzw -and r3.x, CB0[0][0].y, l(4) -if_nz r3.x +and r3.xy, CB0[0][0].yyyy, l(7, 4, 0, 0) +if_nz r3.y mov r1.xyzw, r1.yxwz - mov r3.y, l(2) + mov r3.z, l(2) else - mov r3.y, CB0[0][0].y + mov r3.z, r3.x endif -ushr r3.z, r3.y, l(1) -xor r3.z, r3.z, r3.y -and r3.yz, r3.yyzy, l(0, 2, 1, 0) -if_nz r3.z +ushr r3.w, r3.z, l(1) +xor r3.w, r3.w, r3.z +and r3.zw, r3.zzzw, l(0, 0, 2, 1) +if_nz r3.w ishl r4.xyzw, r1.xyzw, l(8, 8, 8, 8) and r4.xyzw, r4.xyzw, l(0xff00ff00, 0xff00ff00, 0xff00ff00, 0xff00ff00) ushr r5.xyzw, r1.xyzw, l(8, 8, 8, 8) and r5.xyzw, r5.xyzw, l(0x00ff00ff, 0x00ff00ff, 0x00ff00ff, 0x00ff00ff) iadd r1.xyzw, r4.xyzw, r5.xyzw endif -if_nz r3.y +if_nz r3.z ushr r4.xyzw, r1.xyzw, l(16, 16, 16, 16) bfi r1.xyzw, l(16, 16, 16, 16), l(16, 16, 16, 16), r1.xyzw, r4.xyzw endif @@ -126,22 +137,21 @@ if_nz r0.x if_nz r0.y iadd r0.x, r0.w, l(16) ld_raw r1.xyzw, r0.x, T0[0].xyzw - if_nz r3.x + if_nz r3.y mov r1.xyzw, r1.yxwz - mov r0.x, l(2) - else - mov r0.x, CB0[0][0].y + mov r3.x, l(2) endif - ushr r0.y, r0.x, l(1) - xor r0.y, r0.y, r0.x - and r0.xy, r0.xyxx, l(2, 1, 0, 0) - if_nz r0.y - ishl r3.xyzw, r1.xyzw, l(8, 8, 8, 8) - and r3.xyzw, r3.xyzw, l(0xff00ff00, 0xff00ff00, 0xff00ff00, 0xff00ff00) - ushr r4.xyzw, r1.xyzw, l(8, 8, 8, 8) - and r4.xyzw, r4.xyzw, l(0x00ff00ff, 0x00ff00ff, 0x00ff00ff, 0x00ff00ff) - iadd r1.xyzw, r3.xyzw, r4.xyzw + ushr r0.x, r3.x, l(1) + xor r0.x, r0.x, r3.x + and r0.x, r0.x, l(1) + if_nz r0.x + ishl r4.xyzw, r1.xyzw, l(8, 8, 8, 8) + and r4.xyzw, r4.xyzw, l(0xff00ff00, 0xff00ff00, 0xff00ff00, 0xff00ff00) + ushr r5.xyzw, r1.xyzw, l(8, 8, 8, 8) + and r5.xyzw, r5.xyzw, l(0x00ff00ff, 0x00ff00ff, 0x00ff00ff, 0x00ff00ff) + iadd r1.xyzw, r4.xyzw, r5.xyzw endif + and r0.x, r3.x, l(2) if_nz r0.x ushr r3.xyzw, r1.xyzw, l(16, 16, 16, 16) bfi r1.xyzw, l(16, 16, 16, 16), l(16, 16, 16, 16), r1.xyzw, r3.xyzw @@ -153,4 +163,4 @@ if_nz r0.x endif endif ret -// Approximately 107 instruction slots used +// Approximately 117 instruction slots used diff --git a/src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_8bpp_cs.cso b/src/xenia/gpu/d3d12/shaders/dxbc/texture_tile_8bpp_cs.cso index bc3449d58339b27321cdb93a904356fbc8fe9826..eb70e2e31ba74658f2d92b5cbb219557985af926 100644 GIT binary patch delta 914 zcmYjPy=zoK5TAWt_x8QJ+zWRRxeGZiAH)xYM1&X(_(;yv!X|+v7sMv0a7{$CR1{Je zw30#4QiU`k8q-)vK+sfn{sDGkW1&T`(fFHvZ^;ep{$_S&elt6}8-q`Wrdyraxv!Of zpNpN&<=x%YSI*9)tBB}unaBs8!WwmfSS_qOeMAeb^X(sxr|W8GYw?2euQ)^@&#Mvt zHnbu?SK}%%_Dk4R(Rjw`c-^(@H~6*lh^O2!JrNVlqrw-y=6;)dNEFXff?7l>#mZ3w zYxgIxAIMRn!pS_go#SSd@HuaC>_u(|USc=|MP`sQocqpfKk;0pB7Wu{U$F_BPC~dH zIVm>C{{8_j<^`oGDJY17CSV9Y%du3-&P;Ju!ScNYL<{R)IrBJaHdIN)Xp9JhZLOBa z%Lp3qO66XkB#2KQW`s!pM!W|-$n%!`tWLYnoRUG~-16rLw=_AVJpZY9+&>{Z`tK5pJT3V6P0dMIF zU&QG~G>BZW-bbTNJBGYH8DwOyV9xk&)abV?Va|p|;wk@_X{;MR0N=0pR=2ll@rkH3 z`#IthUh`n+N6?N2dSEYW^J;jEUOssS5yQtf{HNe0HofI2HbP>S; f!1mQ*qMDarX*q`2h(pjTSn>^g{#dH>+fwI03Y~3$ delta 697 zcmYjO%S%*Y6#sqqF>~)XkM7vG$PvXyr0FUovlPeI6o`unMrSvSk4n%nb%Hk1Vg!ps zkmJIY3xk1HB5evf%Bc;c|X3xwzsWAlg06gpZ4)|UENvB zj`n`sJ=z;o0GuRXvm9W4U;EM*TP~JXZFG!QqrwUG_UhaUUHq z@_h7}QCbiU8^v2omBr<9rSxoVW3^l@J%6>dSuMR>t}eWwL*qSlo84|)19@&;qrCZ> zUR(XQ=i%`XKty?v(L@Rj1JTaFclXmb%T&sxbGvUOOsG2^cw`t^ewePV8Z5Ytlf$^M z@N9$&Q$8~H<~S%@*Ns+2R&p8_5y?CG6`D9sIHmCk(JsKf2yC-< zuv(z!k{&GJ26_Q~kBzLLuIYZX(-oK#6P2TL&7yJ8^#P=dMd#5IWzv>YGdRg`E3B-$ zHQQf<(M|fQ9ZKsSWzmR!#NIJCLkBwDEK5l92+Lg{bx=eT89C6ThkUxMY}c;+8m@U;-Q2xZPHkw+Sg%du#IjeHG{2uX~)^CjFe+_<*$9wA!TX7p70o{NbI$ z?;kap-K1J&+w2sRe$?3R-P6xt+oyJ@Xyei&YRLC$Luyqua7^+(wqMk?t8L}CA)kH% zUXFRAvCwYZXkTBIUU|E*&}v>^z0z=H^J1gbb{89S$#qViQ_ZWb_NA-smRsKtCh_bN za9z41${QI}qdQ)_-|R>Avf6Alm)iA17Y^6YoSi*epIyGR*jTMkHQ%|W9bc^M*fG?bxUs1Gn9gXO28S3O*`0OwA0XH~c{SyjtubMa-As*IQy3@^(4~e6i#!TRgT=AbM<)-** z7T20jK0c(G#ur*^4qX-o`BW=O8wXEixy?V4a+)7bJ{qgt)4T!Ao8Okke9(&oEMj6z z_|cDZKl5nv_aWWe+}+mjvpD|V*^P$}cnC2a)Vc`#VP|g+NRvxGCQ}?^{+LRDc=0D* zVzju4i}$Kv95+HmC8sfDV3Ls-`bJtWj8g5Ikz$DDigw_^ROJbloBB(Gy1u%w*8B9?Q? zZMB&9`A~|#TD&W_k<02+7xNz;(Q{LLNPWr@EJQJkd{E4VgZ%pkj9SJy?{G9);MWRW z37Z@l*6{+&D^XDF^Rs(c79Ue`Ji5^HLEs^|Rd+}3X` z9QhDAhUd=r1Gyg48t}{aq4{+PmmT@Jh=V#de;+pQB76`ZHrLQ=l;8Dj2rl@nqrBp` zCjClCyrbbV=UT7swW6NmSP=tt73cODGaUO)EcT~nJXS|GzdQKOHlaTzE;@et79Ehy z2R-6yXk^eC23(lG4~Yvr5bkInoO@E*g#KD_j~RyI>l>T9uRjy@*-v;UCgahE^gm0U z2Y9)kKZ}N4K8x^$_&_YF zNk#Et^S2^doVzW5_=LZEMSrWanDcCV7ZWj1C1w97Jxu+H&yLV9*I)UZSdQ!q;zMtZ zjTLu>hP&^K7$~eKF$}8~u~H(}(Uc{QBAKzOcP#?Q-o;6nRj; zoLf7?>h_!y>Yp6Y_=0Ecg!;2{C+9wsy`^UN3w}slO=l_2AC`WQfS(KX{C|b&`VY_1 BmMs7P literal 4976 zcmbuCPiS356vpRG)0ZZV{gbvRDcYy4&<2sVh)B^gHf@Yhtv0d7g+9{e#YAjgc<&X9 ziy~bVD&k5iA_@w2ldTKaf-7AJx)p*8moB;x5utv+JNG1W@4F=hPdRVyJ@d_X{>+)l z?djQ56aW15L+!2Zo1Z?>+`aO1`?Ke2&bgI6&TZBBl=PV`&P_>YrN53kcmDL5$$!0b z;Qp4%?4Fg@woXs5=oiiH*>n1FY!68f=Xyxvh!pu&Iw-A6;W0^{vHd9BCfy9TCQOyU zmvUZhHG8eAy(=A!OYgRt-S(BvrIst3=Ud&Ln{CZR=!}pP?d5K7Zn@WWt83yUo?Rkt zXj~WNjSNV6Je0rRm0-7VN_H@t;X1;R`)0VC!co`Fa9;|y>ppPb3Agt?aOI-CeMMDk zUYzT;-28j(&b(V)T~#Nj{^<^gIFbGGRpx0e&o9j_Hy7HS%X7VEWL;V6U0Uozwigz< ztzMtGyYznlmM*p}xU#=&COUX&=~AcNZ7=j1htD5rOr4!R+n8RQn{Ra*6Ya|@YJ*PW z*wH7Cxz!h^UwE0lK^V`K-lwO|%=UIV_o@!WZ#p3FY;(0Y)bf)bAI;X-kJ8WNE49?* zwc;ETUts_9SOg`%O|{r@b=jiEA=y9I_7g`#O0{2eZs@UWx1BrjL6Nr>Vjn!Mct-Dq zac=l{J~x?p6bBTnmM5as4$CIelPNG1o^b z;=fRj@oR4Qj`+C;FKmrAAM_$22I6E+ac4Nr>Ew=x_aWZ1+_k3QzRvT%JzV4igTP5l z)GgLH#!meYXigl3IWWwz{-An;c!|T}WduW9*tM@&U9gp7V4k}h(fm4&dVu#qKaw?m z@jr#i`C0=vOAEz!p7)B|GvxD`dL4r{zPiRk*D#q*6uIkQl5M9 zZM@~WcyU;MHriU|%98rB91L$YHDAVOqYq`am@~a;9OBRJVmQoJFa3===-iIq^BUAu z0UrdGqVJBaAYcSTZp1+H884b%b!WkoP#Lf}Dg2m1lYw&|qoiXe_fQhOh6CbM27<|<4jyQSdj4}GK z(f{cgyH}mFMJ$xqH$S~+cpsQ4o--e?Z1~~%_V(!CzB8-N2srv1@!{TQMAPg02d;b> z7>At^5Iz)Rl*#!}eMU&vIMlP1|Ch4f7c>)UP4Cmg)>A(8=U{x`>@0(`GbD2+^o-Tm z>dweIdewSSeAzzZ8%cd*iPmf?yBm$uhiFSNRW{o%i=pbAjLVDlKJnPz;-P#_=zp-R r0Slk$Nj*=`JU{b^>1Fa);2NLgM_x(n22^uc8f)% zh+x5@A|hVIgNnIC@Zwo-z4#9Zy#x>HNlFi*r~3WO{N85vw_8&1h55bty?OJU_rCLH z_Ls?X$0xo&vv&I5Tep{lA7-T`T~NwuT0pPf80^{00Z zzkk$Zc1P7Jo2Dn2^pnQ6Z=ZYu+aqfGindpJR1Nu2ZAh)E298PI$M%cbu-Zm`Yx3zQ z;N_TC8*}Z()%KNT>7_RtbFJo;<%zy~U=* zQHG8qmzUZX7u^d>7nhr@=0dx^@9h5i$y3v(>eGwo=NrrQiRN3Ewd2e6LkFKaq$Hl7 ze(pu~0YRTGy-%M!aqhN=J)`13s!e!f*i~Ltc~5|}_DyPG$s6}bk|596nuB*Z9%g&ALi974uk@vcBDqTZTG07e2cRz1s~ASpS$p+^HsxMu~@Y7H)KNY2evfO4LNIA`pBp;2{?r7eC=FM(OV?O9b0v0hb zCj98fxu4pS{C!CGHg~r*{49>Yw|3*<10F(5d$cYBf7scZ-O}WekI59rm_M!(AYS~5 zml!Q>;vzondE|_-atw?k{2pk$;|DJ>-@vGIYw@XvivJ_$9%N1C`jGg56KmLrCvV1) z#Ym0jIk6V`q76UtBb(ux_I+$Qz93>Q#0UmshP9>z@@8xCo8p6W4@>6_+lXv=1CQJc zw~PTVdGkSrk}ww^G;5bJA|JAw_Msb-xwe;v!9J5Sdug#T&v-L!YvIRuo-ciDqtbZ; z&vIs786(e^z7M_Yf?+xL!?0XUgMnY(@|^o&qFuqKC#YRo#E$0mk`NmqIZ!!9ymz-?%xtHvIF}}>- z?m+4a8`_87eb-u@vwlGJ8RL{6Ya2du^LvYTakYcB4Hy5e7P@mJ-#iYzc8RT(=WPDv zeaX3_?}HvCVXm!N(oM3zagyagB}v<6G87(nB&fE`K?&LDo-CYAj#|42P`Qku!!Zf za$7FueKC~cuNLphZS;cr)Wz%v2lZSRA5x#P1Pf6Nqwg1U;UNG10i%|2&O02975KG6 zSHe0+hIORCG@tMEYiIRmV^i1aLQJA>vaO#Lcs`_aUkt@N02^oCgno56)pLG!uIslJ zj(mt5!*l2ClIvlu0l$17nqT}F=0miQn?)SdvHANTE;OEhTVZ=hHk!%r`Zfd?eAZE3 z@mrIAB_!U_aG7(hSNBR$&vC4Xfx3!w`-~ZmeJ2+CQ!^f`qwC)tS$Z+uadFY{)3@k= z*7re=IEqGwongR*`TNk#1Ds$}?RSL!N^y@FhT`iRo4cz&6ZP3ocqb;~(T5aSo(Fij zpXC5t4$0ZY4<2oA!Ns3*Xy+IHSljaC8=W~mr0;5Vqj2KNwSg_2#N^{cde3c^i^ag& zD@to@?eR28PtFTx6V2MhMjt8r+P5v*eCZ?PJXZAWyj4PqDL;#bT|SHOh4`@k8?4tT zKCFL}CyR5}DVD9MUh>U-_I^j_eEKLvM|Z7k7q+ zyYGw`=z298hSdfBKCq9eNk#D?os;~mCN`O!&WU0A&^?AX*DN xHg$W>3H477Xneu5c1->0nP+D{m%XKCJBlAtS7Wc3KcaRoVLTV=`Tq)M`aiXhnP>n2 literal 4976 zcmbuCPl(l36vywoj&GcCQX92DW8^ChR47zJLPBniP7_#`GugBnM(0g4k@M`mCrJwl z7lIM3!c7!ZZ9tFq}w z;H8+Co3q{Ko>iK4;>t>qM(R5mt}uFHonc`JFWJ-TUl9AC#e4E2?#i$UGkOVG?(X>=9Xs{TI~yS-PwqGajAQLvB$Et zu+V9Cd(@q!cYBX?v1P&K{)(08;Kil$?N+C?&~5BHv%fKUYU)&DYH@D9*=~%tE?iU_ zv>S&GK6S{gyfF3rOPmdaJe|EyO`e?TZguVz4a6@RkT*BE+Usihi4PAJd+bN)7xbB0 zYT`nSn+^OPQo6*Kl(9gUY4(OB~HB-^+-tf#Gu7` zptKn)}OY{y<&}g>7;DH4-s>U{^KQ zNBhKowjSfx+VCyma}S=~7H{EPv{AJkrUGJxtD#ogPY>pv&j@++lpL> z5e(K0YgGhm$KE>aB~c5nlczUv6uQG@ttE7^^o4A4^>R??JNz0 zb0%kw$zo%l)ySmz!jAPcU!Kv8NTv)PK9TIpG17c__Mz7=doAaF7?!I^FsMz+Y0mvH z(wKSnK|dLRfe*{Y>X!FP+P^$o&X!-lx^0$S%4yxe&oTPdE%%$&4f`C!>SfZ0_)UX9 z*9rB`I)r6tmTyYvK-9bYHGd=&!i7ITFjZ=Gz{SvcQF{It7m_s_BglY*Rlq6 zRlo-si_$*u0Zp8Jat80TYS=FK-588Dte5Y?9JyLP^Y?iy@kvh%XYcCw;#;9u(>`P^ zL_gHXuC$Q2*di*Fh1eb5h=0bCMm#KF0my$`B|bg+>R&OM+P*ywk=A4)&3>0FPO zczn}8Ac{6PI?480HcK4aifzgxoOnHfX+(0|76R_C<+ z?3~c%Puo=O^hiZ&cIUnMD z> 16u; uint2 sample_index = xe_thread_id.xy; sample_index.x *= 2u; - [branch] if (any(sample_index < clear_rect.xy) || - any(sample_index >= clear_rect.zw)) { + bool4 x_in_rect = + sample_index.x >= clear_rect.x && sample_index.x < clear_rect.z; + [branch] if (sample_index.y < clear_rect.y || + sample_index.y >= clear_rect.w || !any(x_in_rect)) { return; } uint2 tile_sample_index = xe_group_thread_id.xy; tile_sample_index.x *= 2u; uint edram_offset = XeEDRAMOffset32bpp(xe_group_id.xy, tile_sample_index); - xe_edram_load_store_dest.Store(edram_offset, xe_edram_clear_color32); - if (sample_index.x + 1u < clear_rect.z) { - xe_edram_load_store_dest.Store(edram_offset + 4u, xe_edram_clear_color32); + [branch] if (XeEDRAMScaleLog2() != 0u) { + [branch] if (x_in_rect.x) { + xe_edram_load_store_dest.Store4(edram_offset, + xe_edram_clear_color32.xxxx); + } + [branch] if (x_in_rect.y) { + xe_edram_load_store_dest.Store4(edram_offset + 16u, + xe_edram_clear_color32.xxxx); + } + } else { + [branch] if (x_in_rect.x) { + xe_edram_load_store_dest.Store(edram_offset, xe_edram_clear_color32); + } + [branch] if (x_in_rect.y) { + xe_edram_load_store_dest.Store(edram_offset + 4u, xe_edram_clear_color32); + } } } diff --git a/src/xenia/gpu/d3d12/shaders/edram_clear_64bpp.cs.hlsl b/src/xenia/gpu/d3d12/shaders/edram_clear_64bpp.cs.hlsl index b0447388d..d931a0e5c 100644 --- a/src/xenia/gpu/d3d12/shaders/edram_clear_64bpp.cs.hlsl +++ b/src/xenia/gpu/d3d12/shaders/edram_clear_64bpp.cs.hlsl @@ -11,15 +11,36 @@ void main(uint3 xe_group_id : SV_GroupID, clear_rect.yw = xe_edram_clear_rect >> 16u; uint2 sample_index = xe_thread_id.xy; sample_index.x *= 2u; - [branch] if (any(sample_index < clear_rect.xy) || - any(sample_index >= clear_rect.zw)) { + bool4 x_in_rect = + sample_index.x >= clear_rect.x && sample_index.x < clear_rect.z; + [branch] if (sample_index.y < clear_rect.y || + sample_index.y >= clear_rect.w || !any(x_in_rect)) { return; } uint2 tile_sample_index = xe_group_thread_id.xy; tile_sample_index.x *= 2u; uint edram_offset = XeEDRAMOffset64bpp(xe_group_id.xy, tile_sample_index); - xe_edram_load_store_dest.Store2(edram_offset, xe_edram_clear_color64); - if (sample_index.x + 1u < clear_rect.z) { - xe_edram_load_store_dest.Store2(edram_offset + 8u, xe_edram_clear_color64); + [branch] if (XeEDRAMScaleLog2() != 0u) { + uint3 edram_offsets = uint3(16u, 32u, 48u) + edram_offset; + [branch] if (x_in_rect.x) { + xe_edram_load_store_dest.Store4(edram_offset, + xe_edram_clear_color64.xyxy); + xe_edram_load_store_dest.Store4(edram_offsets.x, + xe_edram_clear_color64.xyxy); + } + [branch] if (x_in_rect.y) { + xe_edram_load_store_dest.Store4(edram_offsets.y, + xe_edram_clear_color64.xyxy); + xe_edram_load_store_dest.Store4(edram_offsets.z, + xe_edram_clear_color64.xyxy); + } + } else { + [branch] if (x_in_rect.x) { + xe_edram_load_store_dest.Store2(edram_offset, xe_edram_clear_color64); + } + [branch] if (x_in_rect.y) { + xe_edram_load_store_dest.Store2(edram_offset + 8u, + xe_edram_clear_color64); + } } } diff --git a/src/xenia/gpu/d3d12/shaders/edram_load_color_32bpp_2x_resolve.cs.hlsl b/src/xenia/gpu/d3d12/shaders/edram_load_color_32bpp_2x_resolve.cs.hlsl new file mode 100644 index 000000000..9fa234f42 --- /dev/null +++ b/src/xenia/gpu/d3d12/shaders/edram_load_color_32bpp_2x_resolve.cs.hlsl @@ -0,0 +1,39 @@ +#include "edram_load_store.hlsli" + +[numthreads(40, 16, 1)] +void main(uint3 xe_group_id : SV_GroupID, + uint3 xe_group_thread_id : SV_GroupThreadID, + uint3 xe_thread_id : SV_DispatchThreadID) { + // Host pixels within samples in the EDRAM buffer -> samples within host + // pixels in texture data (loading for AA resolve, not for rendering). + // 1 group = 1 tile, 1 thread writes 8 host pixels for 2 samples + // (horizontally). + uint2 tile_sample_index = xe_group_thread_id.xy; + tile_sample_index.x *= 2u; + uint edram_offset = XeEDRAMOffset32bpp(xe_group_id.xy, tile_sample_index); + // 4 host pixels of the left guest pixel (1x/2x AA) / sample (4x AA). + uint4 pixels_0 = xe_edram_load_store_source.Load4(edram_offset); + // 4 host pixels of the right guest pixel/sample. + uint4 pixels_1 = xe_edram_load_store_source.Load4(edram_offset + 16u); + + uint2 sample_count_log2 = XeEDRAMSampleCountLog2(); + if (sample_count_log2.x != 0u) { + // We already have data for 2 horizontal samples - change "host pixels + // within samples" to "samples within host pixels" horizontally. + // pixels_0 is s0pTL s0pTR s0pBL s0pBR currently, and + // pixels_1 is s2pTL s2pTR s2pBL s2pBR. + // Change that to: + // pixels_0 being s0pTL s2pTL s0pBL s2pBL and + // pixels_1 being s0pTR s2pTR s0pBR s2pBR. + uint2 pixels_temp = pixels_0.yw; + pixels_0.yw = pixels_1.xz; + pixels_1.xz = pixels_temp; + } + // Do similar interleaving for rows. + uint rt_offset = ((xe_thread_id.y & ~sample_count_log2.y) * 2u + + (xe_thread_id.y & sample_count_log2.y)) * + xe_edram_rt_color_depth_pitch + xe_thread_id.x * 16u; + xe_edram_load_store_dest.Store4(rt_offset, uint4(pixels_0.xy, pixels_1.xy)); + rt_offset += (1u << sample_count_log2.y) * xe_edram_rt_color_depth_pitch; + xe_edram_load_store_dest.Store4(rt_offset, uint4(pixels_0.zw, pixels_1.zw)); +} diff --git a/src/xenia/gpu/d3d12/shaders/edram_load_color_64bpp_2x_resolve.cs.hlsl b/src/xenia/gpu/d3d12/shaders/edram_load_color_64bpp_2x_resolve.cs.hlsl new file mode 100644 index 000000000..9d77b0546 --- /dev/null +++ b/src/xenia/gpu/d3d12/shaders/edram_load_color_64bpp_2x_resolve.cs.hlsl @@ -0,0 +1,47 @@ +#include "edram_load_store.hlsli" + +[numthreads(40, 16, 1)] +void main(uint3 xe_group_id : SV_GroupID, + uint3 xe_group_thread_id : SV_GroupThreadID, + uint3 xe_thread_id : SV_DispatchThreadID) { + // Host pixels within samples in the EDRAM buffer -> samples within host + // pixels in texture data (loading for AA resolve, not for rendering). + // 1 group = 1 tile, 1 thread writes 8 host pixels for 2 samples + // (horizontally). + uint2 tile_sample_index = xe_group_thread_id.xy; + tile_sample_index.x *= 2u; + uint4 edram_offsets; + edram_offsets.x = XeEDRAMOffset64bpp(xe_group_id.xy, tile_sample_index); + edram_offsets.yzw = uint3(16u, 32u, 48u) + edram_offsets.x; + // 4 host pixels of the left guest pixel (1x/2x AA) / sample (4x AA). + uint4 pixels_0_01 = xe_edram_load_store_source.Load4(edram_offsets.x); + uint4 pixels_0_23 = xe_edram_load_store_source.Load4(edram_offsets.y); + // 4 host pixels of the right guest pixel/sample. + uint4 pixels_1_01 = xe_edram_load_store_source.Load4(edram_offsets.z); + uint4 pixels_1_23 = xe_edram_load_store_source.Load4(edram_offsets.w); + + uint2 sample_count_log2 = XeEDRAMSampleCountLog2(); + [branch] if (sample_count_log2.x != 0u) { + // We already have data for 2 horizontal samples - change "host pixels + // within samples" to "samples within host pixels" horizontally. + // pixels_0 is 01: s0pTL s0pTR, 23: s0pBL s0pBR currently, and + // pixels_1 is 01: s2pTL s2pTR, 23: s2pBL s2pBR. + // Change that to: + // pixels_0 being 01: s0pTL s2pTL, 23: s0pBL s2pBL and + // pixels_1 being 01: s0pTR s2pTR, 23: s0pBR s2pBR. + uint4 pixels_temp = uint4(pixels_0_01.zw, pixels_0_23.zw); + pixels_0_01.zw = pixels_1_01.xy; + pixels_0_23.zw = pixels_1_23.xy; + pixels_1_01.xy = pixels_temp.xy; + pixels_1_23.xy = pixels_temp.zw; + } + // Do similar interleaving for rows. + uint rt_offset = ((xe_thread_id.y & ~sample_count_log2.y) * 2u + + (xe_thread_id.y & sample_count_log2.y)) * + xe_edram_rt_color_depth_pitch + xe_thread_id.x * 32u; + xe_edram_load_store_dest.Store4(rt_offset, pixels_0_01); + xe_edram_load_store_dest.Store4(rt_offset + 16u, pixels_1_01); + rt_offset += (1u << sample_count_log2.y) * xe_edram_rt_color_depth_pitch; + xe_edram_load_store_dest.Store4(rt_offset, pixels_0_23); + xe_edram_load_store_dest.Store4(rt_offset + 16u, pixels_1_23); +} diff --git a/src/xenia/gpu/d3d12/shaders/edram_load_color_7e3.cs.hlsl b/src/xenia/gpu/d3d12/shaders/edram_load_color_7e3.cs.hlsl index 43b85be6e..4cc70d5a4 100644 --- a/src/xenia/gpu/d3d12/shaders/edram_load_color_7e3.cs.hlsl +++ b/src/xenia/gpu/d3d12/shaders/edram_load_color_7e3.cs.hlsl @@ -9,8 +9,10 @@ void main(uint3 xe_group_id : SV_GroupID, tile_sample_index.x *= 2u; uint2 samples_7e3_packed = xe_edram_load_store_source.Load2( XeEDRAMOffset32bpp(xe_group_id.xy, tile_sample_index)); - uint4 sample_0_f16u32 = XeFloat7e3To16(samples_7e3_packed.x); - uint4 sample_1_f16u32 = XeFloat7e3To16(samples_7e3_packed.y); + uint4 sample_0_f16u32 = + f32tof16(asfloat(XeFloat7e3To32(samples_7e3_packed.x))); + uint4 sample_1_f16u32 = + f32tof16(asfloat(XeFloat7e3To32(samples_7e3_packed.y))); uint4 samples_f16u32_packed = uint4(sample_0_f16u32.xz, sample_1_f16u32.xz) | (uint4(sample_0_f16u32.yw, sample_1_f16u32.yw) << 16u); diff --git a/src/xenia/gpu/d3d12/shaders/edram_load_color_7e3_2x_resolve.cs.hlsl b/src/xenia/gpu/d3d12/shaders/edram_load_color_7e3_2x_resolve.cs.hlsl new file mode 100644 index 000000000..b0fb05fc2 --- /dev/null +++ b/src/xenia/gpu/d3d12/shaders/edram_load_color_7e3_2x_resolve.cs.hlsl @@ -0,0 +1,59 @@ +#include "edram_load_store.hlsli" +#include "pixel_formats.hlsli" + +[numthreads(40, 16, 1)] +void main(uint3 xe_group_id : SV_GroupID, + uint3 xe_group_thread_id : SV_GroupThreadID, + uint3 xe_thread_id : SV_DispatchThreadID) { + // Host pixels within samples in the EDRAM buffer -> samples within host + // pixels in texture data (loading for AA resolve, not for rendering). + // 1 group = 1 tile, 1 thread writes 8 host pixels for 2 samples + // (horizontally). + uint2 tile_sample_index = xe_group_thread_id.xy; + tile_sample_index.x *= 2u; + uint edram_offset = XeEDRAMOffset32bpp(xe_group_id.xy, tile_sample_index); + // 4 host pixels of the left guest pixel (1x/2x AA) / sample (4x AA). + uint4 pixels_7e3_0 = xe_edram_load_store_source.Load4(edram_offset); + // 4 host pixels of the right guest pixel/sample. + uint4 pixels_7e3_1 = xe_edram_load_store_source.Load4(edram_offset + 16u); + + uint2 sample_count_log2 = XeEDRAMSampleCountLog2(); + if (sample_count_log2.x != 0u) { + // We already have data for 2 horizontal samples - change "host pixels + // within samples" to "samples within host pixels" horizontally. + // pixels_7e3_0 is s0pTL s0pTR s0pBL s0pBR currently, and + // pixels_7e3_1 is s2pTL s2pTR s2pBL s2pBR. + // Change that to: + // pixels_7e3_0 being s0pTL s2pTL s0pBL s2pBL and + // pixels_7e3_1 being s0pTR s2pTR s0pBR s2pBR. + uint2 pixels_temp = pixels_7e3_0.yw; + pixels_7e3_0.yw = pixels_7e3_1.xz; + pixels_7e3_1.xz = pixels_temp; + } + // Do similar interleaving for rows. + uint rt_offset = ((xe_thread_id.y & ~sample_count_log2.y) * 2u + + (xe_thread_id.y & sample_count_log2.y)) * + xe_edram_rt_color_depth_pitch + xe_thread_id.x * 32u; + uint4 pixel_0_f16u32 = f32tof16(asfloat(XeFloat7e3To32(pixels_7e3_0.x))); + uint4 pixel_1_f16u32 = f32tof16(asfloat(XeFloat7e3To32(pixels_7e3_0.y))); + uint4 pixels_f16u32_packed = + uint4(pixel_0_f16u32.xz, pixel_1_f16u32.xz) | + (uint4(pixel_0_f16u32.yw, pixel_1_f16u32.yw) << 16u); + xe_edram_load_store_dest.Store4(rt_offset, pixels_f16u32_packed); + pixel_0_f16u32 = f32tof16(asfloat(XeFloat7e3To32(pixels_7e3_1.x))); + pixel_1_f16u32 = f32tof16(asfloat(XeFloat7e3To32(pixels_7e3_1.y))); + pixels_f16u32_packed = uint4(pixel_0_f16u32.xz, pixel_1_f16u32.xz) | + (uint4(pixel_0_f16u32.yw, pixel_1_f16u32.yw) << 16u); + xe_edram_load_store_dest.Store4(rt_offset + 16u, pixels_f16u32_packed); + rt_offset += (1u << sample_count_log2.y) * xe_edram_rt_color_depth_pitch; + pixel_0_f16u32 = f32tof16(asfloat(XeFloat7e3To32(pixels_7e3_0.z))); + pixel_1_f16u32 = f32tof16(asfloat(XeFloat7e3To32(pixels_7e3_0.w))); + pixels_f16u32_packed = uint4(pixel_0_f16u32.xz, pixel_1_f16u32.xz) | + (uint4(pixel_0_f16u32.yw, pixel_1_f16u32.yw) << 16u); + xe_edram_load_store_dest.Store4(rt_offset, pixels_f16u32_packed); + pixel_0_f16u32 = f32tof16(asfloat(XeFloat7e3To32(pixels_7e3_1.z))); + pixel_1_f16u32 = f32tof16(asfloat(XeFloat7e3To32(pixels_7e3_1.w))); + pixels_f16u32_packed = uint4(pixel_0_f16u32.xz, pixel_1_f16u32.xz) | + (uint4(pixel_0_f16u32.yw, pixel_1_f16u32.yw) << 16u); + xe_edram_load_store_dest.Store4(rt_offset + 16u, pixels_f16u32_packed); +} diff --git a/src/xenia/gpu/d3d12/shaders/edram_load_store.hlsli b/src/xenia/gpu/d3d12/shaders/edram_load_store.hlsli index b4b6249f3..f19e24e75 100644 --- a/src/xenia/gpu/d3d12/shaders/edram_load_store.hlsli +++ b/src/xenia/gpu/d3d12/shaders/edram_load_store.hlsli @@ -5,9 +5,15 @@ cbuffer XeEDRAMLoadStoreConstants : register(b0) { uint4 xe_edram_load_store_constants; // 0:10 - EDRAM base in tiles. - // 11 - whether it's a depth render target. - // 12: - EDRAM pitch in tiles. - uint xe_edram_base_depth_pitch; + // 11 - log2(vertical sample count), 0 for 1x AA, 1 for 2x/4x AA. + // 12 - log2(horizontal sample count), 0 for 1x/2x AA, 1 for 4x AA. + // 13 - whether 2x resolution scale is used. + // 14 - whether to apply the hack and duplicate the top/left + // half-row/half-column to reduce the impact of half-pixel offset with + // 2x resolution scale. + // 15 - whether it's a depth render target. + // 16: - EDRAM pitch in tiles. + uint xe_edram_base_samples_2x_depth_pitch; }; // For loading and storing render targets. @@ -24,14 +30,12 @@ cbuffer XeEDRAMLoadStoreConstants : register(b0) { #define xe_edram_tile_sample_dimensions (xe_edram_load_store_constants.xy) #define xe_edram_tile_sample_dest_base (xe_edram_load_store_constants.z) // 0:13 - destination pitch. -// 14 - log2(vertical sample count), 0 for 1x AA, 1 for 2x/4x AA. -// 15 - log2(horizontal sample count), 0 for 1x/2x AA, 1 for 4x AA. -// 16:17 - sample to load (16 - vertical index, 17 - horizontal index). -// 18:20 - destination endianness. -// 21:31 - BPP-specific info for swapping red/blue, 0 if not swapping. +// 14:15 - sample to load (14 - vertical index, 15 - horizontal index). +// 16:18 - destination endianness. +// 19:31 - BPP-specific info for swapping red/blue, 0 if not swapping. // For 32 bits per sample: -// 21:25 - red/blue bit depth. -// 26:30 - blue offset. +// 19:23 - red/blue bit depth. +// 24:28 - blue offset. // For 64 bits per sample, it's 1 if need to swap 0:15 and 32:47. #define xe_edram_tile_sample_dest_info (xe_edram_load_store_constants.w) @@ -49,26 +53,56 @@ ByteAddressBuffer xe_edram_load_store_source : register(t0); #endif RWByteAddressBuffer xe_edram_load_store_dest : register(u0); -uint XeEDRAMOffset32bpp(uint2 tile_index, uint2 tile_sample_index) { - if (xe_edram_base_depth_pitch & (1u << 11u)) { +uint2 XeEDRAMSampleCountLog2() { + return (xe_edram_base_samples_2x_depth_pitch >> uint2(12u, 11u)) & 1u; +} + +uint XeEDRAMScaleLog2() { + return (xe_edram_base_samples_2x_depth_pitch >> 13u) & 1u; +} + +// X - log2(horizontal sample count) +// Y - log2(vertical sample count) +// Z - log2(resolution scale) +// W - whether to apply the host pixel duplication hack for 2x resolution scale +// resolves +uint4 XeEDRAMSampleCountAndScaleInfo() { + return + (xe_edram_base_samples_2x_depth_pitch >> uint4(12u, 11u, 13u, 14u)) & 1u; +} + +uint XeEDRAMOffset32bpp(uint2 tile_index, uint2 tile_sample_index, + uint2 scaled_2x_pixel_index = uint2(0u, 0u)) { + if (xe_edram_base_samples_2x_depth_pitch & (1u << 15u)) { // Depth render targets apparently have samples 0:39 and 40:79 swapped - // affects loading depth to EDRAM via color aliasing in GTA IV and Halo 3. tile_sample_index.x += 40u * uint(tile_sample_index.x < 40u) - 40u * uint(tile_sample_index.x >= 40u); } - return ((xe_edram_base_depth_pitch & 2047u) + - tile_index.y * (xe_edram_base_depth_pitch >> 12u) + tile_index.x) * - 5120u + tile_sample_index.y * 320u + tile_sample_index.x * 4u; + uint offset = ((xe_edram_base_samples_2x_depth_pitch & 2047u) + + tile_index.y * (xe_edram_base_samples_2x_depth_pitch >> 16u) + + tile_index.x) * 5120u + tile_sample_index.y * 320u + + tile_sample_index.x * 4u; + uint resolution_scale_log2 = XeEDRAMScaleLog2(); + scaled_2x_pixel_index &= resolution_scale_log2; + return (offset << (resolution_scale_log2 * 2u)) + + scaled_2x_pixel_index.y * 8u + scaled_2x_pixel_index.x * 4u; } // Instead of individual tiles, this works on two consecutive tiles, the first // one containing the top 80x8 samples, and the second one containing the bottom // 80x8 samples. -uint XeEDRAMOffset64bpp(uint2 tile_pair_index, uint2 tile_pair_sample_index) { - return ((xe_edram_base_depth_pitch & 2047u) + - tile_pair_index.y * (xe_edram_base_depth_pitch >> 12u) + - (tile_pair_index.x << 1u)) * 5120u + - tile_pair_sample_index.y * 640u + tile_pair_sample_index.x * 8u; +uint XeEDRAMOffset64bpp(uint2 tile_pair_index, uint2 tile_pair_sample_index, + uint2 scaled_2x_pixel_index = uint2(0u, 0u)) { + uint offset = ((xe_edram_base_samples_2x_depth_pitch & 2047u) + + tile_pair_index.y * + (xe_edram_base_samples_2x_depth_pitch >> 16u) + + (tile_pair_index.x << 1u)) * 5120u + + tile_pair_sample_index.y * 640u + tile_pair_sample_index.x * 8u; + uint resolution_scale_log2 = XeEDRAMScaleLog2(); + scaled_2x_pixel_index &= resolution_scale_log2; + return (offset << (resolution_scale_log2 * 2u)) + + scaled_2x_pixel_index.y * 16u + scaled_2x_pixel_index.x * 8u; } #endif // XENIA_GPU_D3D12_SHADERS_EDRAM_LOAD_STORE_HLSLI_ diff --git a/src/xenia/gpu/d3d12/shaders/edram_store_color_7e3.cs.hlsl b/src/xenia/gpu/d3d12/shaders/edram_store_color_7e3.cs.hlsl index 71d4e5f36..d0e9789ad 100644 --- a/src/xenia/gpu/d3d12/shaders/edram_store_color_7e3.cs.hlsl +++ b/src/xenia/gpu/d3d12/shaders/edram_store_color_7e3.cs.hlsl @@ -10,8 +10,9 @@ void main(uint3 xe_group_id : SV_GroupID, uint4 samples_f16u32_packed = xe_edram_load_store_source.Load4(rt_offset); uint4 sample_0_f16u32 = samples_f16u32_packed.xxyy >> uint4(0u, 16u, 0u, 16u); uint4 sample_1_f16u32 = samples_f16u32_packed.zzww >> uint4(0u, 16u, 0u, 16u); - uint2 samples_7e3_packed = - uint2(XeFloat16To7e3(sample_0_f16u32), XeFloat16To7e3(sample_1_f16u32)); + uint2 samples_7e3_packed = uint2( + XeFloat32To7e3(asuint(f16tof32(sample_0_f16u32))), + XeFloat32To7e3(asuint(f16tof32(sample_1_f16u32)))); uint2 tile_sample_index = xe_group_thread_id.xy; tile_sample_index.x *= 2u; xe_edram_load_store_dest.Store2( diff --git a/src/xenia/gpu/d3d12/shaders/edram_tile_sample_32bpp.cs.hlsl b/src/xenia/gpu/d3d12/shaders/edram_tile_sample_32bpp.cs.hlsl index 545ee5d22..8543e0fba 100644 --- a/src/xenia/gpu/d3d12/shaders/edram_tile_sample_32bpp.cs.hlsl +++ b/src/xenia/gpu/d3d12/shaders/edram_tile_sample_32bpp.cs.hlsl @@ -6,37 +6,111 @@ void main(uint3 xe_group_id : SV_GroupID, uint3 xe_group_thread_id : SV_GroupThreadID, uint3 xe_thread_id : SV_DispatchThreadID) { - // Check if not outside of the destination texture completely. - uint2 source_offset = xe_edram_tile_sample_dimensions >> 17u; - [branch] if (any(xe_thread_id.xy * uint2(4u, 1u) < source_offset.xy)) { - return; - } - uint2 texel_index = xe_thread_id.xy - source_offset; - texel_index.x *= 4u; - uint2 copy_size = xe_edram_tile_sample_dimensions & 0xFFFu; - [branch] if (any(texel_index >= copy_size)) { + // 1 group = 80x16 destination (with resolution scale applied) pixels. + // 1 thread = 4 destination pixels. + + uint4 sample_count_and_scale_info = XeEDRAMSampleCountAndScaleInfo(); + + // Check if the whole thread is not out of the rectangle's Y bounds, and if X + // coordinates in the thread are inside the rectangle's X bounds. + uint2 dispatch_pixel_index_unscaled = + (xe_thread_id.xy >> sample_count_and_scale_info.z) * uint2(4u, 1u); + uint2 source_rect_unscaled_tl = xe_edram_tile_sample_dimensions >> 17u; + uint2 source_rect_unscaled_br = + source_rect_unscaled_tl + (xe_edram_tile_sample_dimensions & 0xFFFu); + uint4 dispatch_pixel_x_coords_unscaled = + dispatch_pixel_index_unscaled.x + uint4(0u, 1u, 2u, 3u); + bool4 x_in_rect = + dispatch_pixel_x_coords_unscaled >= source_rect_unscaled_tl.x && + dispatch_pixel_x_coords_unscaled < source_rect_unscaled_br.x; + [branch] if (dispatch_pixel_index_unscaled.y < source_rect_unscaled_tl.y || + dispatch_pixel_index_unscaled.y >= source_rect_unscaled_br.y || + !any(x_in_rect)) { return; } - // Get the samples from the EDRAM buffer. - // XY - log2(pixel size), ZW - selected sample offset. - uint4 sample_info = - (xe_edram_tile_sample_dest_info.xxxx >> uint4(15u, 14u, 17u, 16u)) & 1u; - uint2 edram_tile_quarter = - uint2(uint2(10u, 8u) <= xe_group_thread_id.xy) * sample_info.xy; - uint edram_offset = XeEDRAMOffset32bpp( - (xe_group_id.xy << sample_info.xy) + edram_tile_quarter, - ((xe_group_thread_id.xy - edram_tile_quarter * uint2(10u, 8u)) << - (sample_info.xy + uint2(2u, 0u))) + sample_info.zw); - // At 1x and 2x, this contains samples of 4 pixels. At 4x, this contains - // samples of 2, need to load 2 more. - uint4 pixels = xe_edram_load_store_source.Load4(edram_offset); - [branch] if (sample_info.x != 0u) { - pixels.xy = pixels.xz; - pixels.zw = xe_edram_load_store_source.Load3(edram_offset + 16u).xz; + uint2 texel_sub_index_scaled = + xe_group_thread_id.xy & sample_count_and_scale_info.z; + + // Calculate the EDRAM offset of the samples of the pixel. + // 1 group uses: + // - 1x resolution, 1x AA - 1x1 tile. + // - 1x resolution, 2x AA - 1x2 tiles + // (group thread ID Y < or >= 8 to choose the tile). + // - 1x resolution, 4x AA - 2x2 tiles + // (same, plus group thread ID X < or >= 10 to choose the tile). + // - 2x resolution, 1x AA - 0.5x0.5 tiles + // (group ID & 1 to choose the quarter of the tile). + // - 2x resolution, 2x AA - 0.5x1 tiles + // (group ID X & 1 to choose the X half of the tile). + // - 2x resolution, 4x AA - 1x1 tile. + uint2 edram_tile_index, edram_tile_sample_index; + [branch] if (sample_count_and_scale_info.z != 0u) { + edram_tile_index = xe_group_id.xy >> (sample_count_and_scale_info.xy ^ 1u); + edram_tile_sample_index = + ((xe_group_id.xy & 1u) >> sample_count_and_scale_info.xy) * + uint2(40u, 8u) + + (xe_group_thread_id.xy >> 1u << + (sample_count_and_scale_info.xy + uint2(2u, 0u))); + } else { + uint2 edram_multisample_tile = + uint2(uint2(10u, 8u) <= xe_group_thread_id.xy) * + sample_count_and_scale_info.xy; + edram_tile_index = + (xe_group_id.xy << sample_count_and_scale_info.xy) + + edram_multisample_tile; + edram_tile_sample_index = + ((xe_group_thread_id.xy - edram_multisample_tile * uint2(10u, 8u)) << + (sample_count_and_scale_info.xy + uint2(2u, 0u))); + } + edram_tile_sample_index += + (xe_edram_tile_sample_dest_info.xx >> uint2(15u, 14u)) & 1u; + // Force use the lower host texel for the topmost guest texel row to reduce + // the impact of half-pixel offset. + uint2 edram_texel_sub_index = texel_sub_index_scaled; + if (sample_count_and_scale_info.w != 0u) { + edram_texel_sub_index.y |= + uint(dispatch_pixel_index_unscaled.y == source_rect_unscaled_tl.y); + } + uint4 edram_offsets; + edram_offsets.x = XeEDRAMOffset32bpp(edram_tile_index, + edram_tile_sample_index, + edram_texel_sub_index); + // Read pixels from the EDRAM buffer. + uint4 pixels; + [branch] if (sample_count_and_scale_info.z != 0u) { + // 4 host pixels within each sample, thus guest pixels are each 4 dwords + // away from each other at 1x/2x AA and 8 dwords away at 4x AA. + edram_offsets.yzw = + (uint3(16u, 32u, 48u) << sample_count_and_scale_info.x) + + edram_offsets.x; + if (sample_count_and_scale_info.w != 0u) { + // Force use the right host texel for the leftmost guest texel column to + // reduce the impact of half-pixel offset. + edram_offsets |= + (dispatch_pixel_x_coords_unscaled == source_rect_unscaled_tl.x) ? 4u + : 0u; + } + pixels.x = xe_edram_load_store_source.Load(edram_offsets.x); + pixels.y = xe_edram_load_store_source.Load(edram_offsets.y); + pixels.z = xe_edram_load_store_source.Load(edram_offsets.z); + pixels.w = xe_edram_load_store_source.Load(edram_offsets.w); + } else { + // At 1x and 2x, this contains samples of 4 pixels. At 4x, this contains + // samples of 2, need to load 2 more. + [branch] if (sample_count_and_scale_info.x != 0u) { + edram_offsets.yzw = uint3(8u, 16u, 24u) + edram_offsets.x; + pixels.x = xe_edram_load_store_source.Load(edram_offsets.x); + pixels.y = xe_edram_load_store_source.Load(edram_offsets.y); + pixels.z = xe_edram_load_store_source.Load(edram_offsets.z); + pixels.w = xe_edram_load_store_source.Load(edram_offsets.w); + } else { + pixels = xe_edram_load_store_source.Load4(edram_offsets.x); + } } - uint red_blue_swap = xe_edram_tile_sample_dest_info >> 21u; + // Swap blue and red if needed. + uint red_blue_swap = xe_edram_tile_sample_dest_info >> 19u; if (red_blue_swap != 0u) { uint red_mask = (1u << (red_blue_swap & 31u)) - 1u; // No need to be ready for a long shift Barney, it's just 16 or 20. @@ -47,22 +121,30 @@ void main(uint3 xe_group_id : SV_GroupID, ((pixels >> blue_shift) & red_mask); } - // Tile the pixels to the shared memory. - pixels = XeByteSwap(pixels, xe_edram_tile_sample_dest_info >> 18u); + // Tile the pixels to the shared memory or to the scaled resolve memory. + pixels = XeByteSwap(pixels, xe_edram_tile_sample_dest_info >> 16u); + uint2 texel_offset_unscaled = + ((xe_edram_tile_sample_dimensions >> 12u) & 31u) + + dispatch_pixel_index_unscaled - source_rect_unscaled_tl; + // If texel_offset_unscaled.x is negative (if the rectangle is not + // 4-pixel-aligned, for example), the result will be ignored anyway due to + // x_in_rect. uint4 texel_addresses = - xe_edram_tile_sample_dest_base + - XeTextureTiledOffset2D( - ((xe_edram_tile_sample_dimensions >> 12u) & 31u) + texel_index, - xe_edram_tile_sample_dest_info & 16383u, 2u); - xe_edram_load_store_dest.Store(texel_addresses.x, pixels.x); - bool3 texels_in_rect = uint3(1u, 2u, 3u) + texel_index.x < copy_size.x; - [branch] if (texels_in_rect.x) { + (xe_edram_tile_sample_dest_base + XeTextureTiledOffset2D( + texel_offset_unscaled, xe_edram_tile_sample_dest_info & 16383u, 2u)) + << (sample_count_and_scale_info.z * 2u); + texel_addresses += + texel_sub_index_scaled.x * 4u + texel_sub_index_scaled.y * 8u; + [branch] if (x_in_rect.x) { + xe_edram_load_store_dest.Store(texel_addresses.x, pixels.x); + } + [branch] if (x_in_rect.y) { xe_edram_load_store_dest.Store(texel_addresses.y, pixels.y); - [branch] if (texels_in_rect.y) { - xe_edram_load_store_dest.Store(texel_addresses.z, pixels.z); - [branch] if (texels_in_rect.z) { - xe_edram_load_store_dest.Store(texel_addresses.w, pixels.w); - } - } + } + [branch] if (x_in_rect.z) { + xe_edram_load_store_dest.Store(texel_addresses.z, pixels.z); + } + [branch] if (x_in_rect.w) { + xe_edram_load_store_dest.Store(texel_addresses.w, pixels.w); } } diff --git a/src/xenia/gpu/d3d12/shaders/edram_tile_sample_64bpp.cs.hlsl b/src/xenia/gpu/d3d12/shaders/edram_tile_sample_64bpp.cs.hlsl index afa832039..8d540a7f4 100644 --- a/src/xenia/gpu/d3d12/shaders/edram_tile_sample_64bpp.cs.hlsl +++ b/src/xenia/gpu/d3d12/shaders/edram_tile_sample_64bpp.cs.hlsl @@ -6,64 +6,146 @@ void main(uint3 xe_group_id : SV_GroupID, uint3 xe_group_thread_id : SV_GroupThreadID, uint3 xe_thread_id : SV_DispatchThreadID) { - // Check if not outside of the destination texture completely. - uint2 source_offset = xe_edram_tile_sample_dimensions >> 17u; - [branch] if (any(xe_thread_id.xy * uint2(4u, 1u) < source_offset.xy)) { - return; - } - uint2 texel_index = xe_thread_id.xy - source_offset; - texel_index.x *= 4u; - uint2 copy_size = xe_edram_tile_sample_dimensions & 0xFFFu; - [branch] if (any(texel_index >= copy_size)) { + // 1 group = 80x16 destination (with resolution scale applied) pixels. + // 1 thread = 4 destination pixels. + + uint4 sample_count_and_scale_info = XeEDRAMSampleCountAndScaleInfo(); + + // Check if the whole thread is not out of the rectangle's Y bounds, and if X + // coordinates in the thread are inside the rectangle's X bounds. + uint2 dispatch_pixel_index_unscaled = + (xe_thread_id.xy >> sample_count_and_scale_info.z) * uint2(4u, 1u); + uint2 source_rect_unscaled_tl = xe_edram_tile_sample_dimensions >> 17u; + uint2 source_rect_unscaled_br = + source_rect_unscaled_tl + (xe_edram_tile_sample_dimensions & 0xFFFu); + uint4 dispatch_pixel_x_coords_unscaled = + dispatch_pixel_index_unscaled.x + uint4(0u, 1u, 2u, 3u); + bool4 x_in_rect = + dispatch_pixel_x_coords_unscaled >= source_rect_unscaled_tl.x && + dispatch_pixel_x_coords_unscaled < source_rect_unscaled_br.x; + [branch] if (dispatch_pixel_index_unscaled.y < source_rect_unscaled_tl.y || + dispatch_pixel_index_unscaled.y >= source_rect_unscaled_br.y || + !any(x_in_rect)) { return; } - // Get the samples from the EDRAM buffer. - // XY - log2(pixel size), ZW - selected sample offset. - uint4 sample_info = - (xe_edram_tile_sample_dest_info.xxxx >> uint4(15u, 14u, 17u, 16u)) & 1u; - uint2 edram_tile_quarter = - uint2(uint2(10u, 8u) <= xe_group_thread_id.xy) * sample_info.xy; - uint edram_offset = XeEDRAMOffset64bpp( - (xe_group_id.xy << sample_info.xy) + edram_tile_quarter, - ((xe_group_thread_id.xy - edram_tile_quarter * uint2(10u, 8u)) << - (sample_info.xy + uint2(2u, 0u))) + sample_info.zw); - // Loaded with the first 2 pixels at 1x and 2x, or the first 1 pixel at 4x. - uint4 pixels_01 = xe_edram_load_store_source.Load4(edram_offset); - // Loaded with the second 2 pixels at 1x and 2x, or the second 1 pixel at 4x. - uint4 pixels_23 = xe_edram_load_store_source.Load4(edram_offset + 16u); - [branch] if (sample_info.x != 0u) { - // Rather than 4 pixels, at 4x, we only have 2 - in xy of each variable - // rather than in xyzw of pixels_01. Combine and load 2 more. - pixels_01.zw = pixels_23.xy; - pixels_23.xy = xe_edram_load_store_source.Load2(edram_offset + 32u); - pixels_23.zw = xe_edram_load_store_source.Load2(edram_offset + 48u); + uint2 texel_sub_index_scaled = + xe_group_thread_id.xy & sample_count_and_scale_info.z; + + // Calculate the EDRAM offset of the samples of the pixel. + // 1 group uses: + // - 1x resolution, 1x AA - 1x1 tile. + // - 1x resolution, 2x AA - 1x2 tiles + // (group thread ID Y < or >= 8 to choose the tile). + // - 1x resolution, 4x AA - 2x2 tiles + // (same, plus group thread ID X < or >= 10 to choose the tile). + // - 2x resolution, 1x AA - 0.5x0.5 tiles + // (group ID & 1 to choose the quarter of the tile). + // - 2x resolution, 2x AA - 0.5x1 tiles + // (group ID X & 1 to choose the X half of the tile). + // - 2x resolution, 4x AA - 1x1 tile. + // In sample info, XY - log2(sample count), ZW - selected sample offset. + uint2 edram_tile_index, edram_tile_sample_index; + [branch] if (sample_count_and_scale_info.z != 0u) { + edram_tile_index = xe_group_id.xy >> (sample_count_and_scale_info.xy ^ 1u); + edram_tile_sample_index = + ((xe_group_id.xy & 1u) >> sample_count_and_scale_info.xy) * + uint2(40u, 8u) + + (xe_group_thread_id.xy >> 1u << + (sample_count_and_scale_info.xy + uint2(2u, 0u))); + } else { + uint2 edram_multisample_tile = + uint2(uint2(10u, 8u) <= xe_group_thread_id.xy) * + sample_count_and_scale_info.xy; + edram_tile_index = + (xe_group_id.xy << sample_count_and_scale_info.xy) + + edram_multisample_tile; + edram_tile_sample_index = + ((xe_group_thread_id.xy - edram_multisample_tile * uint2(10u, 8u)) << + (sample_count_and_scale_info.xy + uint2(2u, 0u))); + } + edram_tile_sample_index += + (xe_edram_tile_sample_dest_info.xx >> uint2(15u, 14u)) & 1u; + // Force use the lower host texel for the topmost guest texel row to reduce + // the impact of half-pixel offset. + uint2 edram_texel_sub_index = texel_sub_index_scaled; + if (sample_count_and_scale_info.w != 0u) { + edram_texel_sub_index.y |= + uint(dispatch_pixel_index_unscaled.y == source_rect_unscaled_tl.y); + } + uint4 edram_offsets; + edram_offsets.x = XeEDRAMOffset64bpp(edram_tile_index, + edram_tile_sample_index, + edram_texel_sub_index); + + // Read four pixels from the EDRAM buffer. + uint4 pixels_01, pixels_23; + [branch] if (sample_count_and_scale_info.z != 0u) { + // 4 host pixels within each sample, thus guest pixels are each 4 dwords + // away from each other at 1x/2x AA and 8 dwords away at 4x AA. + edram_offsets.yzw = + (uint3(32u, 64u, 96u) << sample_count_and_scale_info.x) + + edram_offsets.x; + if (sample_count_and_scale_info.w != 0u) { + // Force use the right host texel for the leftmost guest texel column to + // reduce the impact of half-pixel offset. + edram_offsets |= + (dispatch_pixel_x_coords_unscaled == source_rect_unscaled_tl.x) ? 8u + : 0u; + } + pixels_01.xy = xe_edram_load_store_source.Load2(edram_offsets.x); + pixels_01.zw = xe_edram_load_store_source.Load2(edram_offsets.y); + pixels_23.xy = xe_edram_load_store_source.Load2(edram_offsets.z); + pixels_23.zw = xe_edram_load_store_source.Load2(edram_offsets.w); + } else { + edram_offsets.yzw = uint3(16u, 32u, 48u) + edram_offsets.x; + // Loaded with the first 2 pixels at 1x and 2x, or the first 1 pixel at 4x. + pixels_01 = xe_edram_load_store_source.Load4(edram_offsets.x); + // Loaded with the second 2 pixels at 1x and 2x, or the second 1 pixel at + // 4x. + pixels_23 = xe_edram_load_store_source.Load4(edram_offsets.y); + [branch] if (sample_count_and_scale_info.x != 0u) { + // Rather than 4 pixels, at 4x, we only have 2 - in xy of each variable + // rather than in xyzw of pixels_01. Combine and load 2 more. + pixels_01.zw = pixels_23.xy; + pixels_23.xy = xe_edram_load_store_source.Load2(edram_offsets.z); + pixels_23.zw = xe_edram_load_store_source.Load2(edram_offsets.w); + } } - if ((xe_edram_tile_sample_dest_info >> 21u) != 0u) { + if ((xe_edram_tile_sample_dest_info >> 19u) != 0u) { // Swap red and blue - all 64bpp formats where this is possible are // 16:16:16:16. pixels_01 = (pixels_01 & 0xFFFF0000u) | (pixels_01.yxwz & 0xFFFFu); pixels_23 = (pixels_23 & 0xFFFF0000u) | (pixels_23.yxwz & 0xFFFFu); } - // Tile the pixels to the shared memory. - pixels_01 = XeByteSwap64(pixels_01, xe_edram_tile_sample_dest_info >> 18u); - pixels_23 = XeByteSwap64(pixels_23, xe_edram_tile_sample_dest_info >> 18u); + // Tile the pixels to the shared memory or to the scaled resolve memory. + uint endian = xe_edram_tile_sample_dest_info >> 16u; + pixels_01 = XeByteSwap64(pixels_01, endian); + pixels_23 = XeByteSwap64(pixels_23, endian); + uint2 texel_offset_unscaled = + ((xe_edram_tile_sample_dimensions >> 12u) & 31u) + + dispatch_pixel_index_unscaled - source_rect_unscaled_tl; + // If texel_offset_unscaled.x is negative (if the rectangle is not + // 4-pixel-aligned, for example), the result will be ignored anyway due to + // x_in_rect. uint4 texel_addresses = - xe_edram_tile_sample_dest_base + - XeTextureTiledOffset2D( - ((xe_edram_tile_sample_dimensions >> 12u) & 31u) + texel_index, - xe_edram_tile_sample_dest_info & 16383u, 3u); - xe_edram_load_store_dest.Store2(texel_addresses.x, pixels_01.xy); - bool3 texels_in_rect = uint3(1u, 2u, 3u) + texel_index.x < copy_size.x; - [branch] if (texels_in_rect.x) { + (xe_edram_tile_sample_dest_base + XeTextureTiledOffset2D( + texel_offset_unscaled, xe_edram_tile_sample_dest_info & 16383u, 3u)) + << (sample_count_and_scale_info.z * 2u); + texel_addresses += + texel_sub_index_scaled.x * 8u + texel_sub_index_scaled.y * 16u; + [branch] if (x_in_rect.x) { + xe_edram_load_store_dest.Store2(texel_addresses.x, pixels_01.xy); + } + [branch] if (x_in_rect.y) { xe_edram_load_store_dest.Store2(texel_addresses.y, pixels_01.zw); - [branch] if (texels_in_rect.y) { - xe_edram_load_store_dest.Store2(texel_addresses.z, pixels_23.xy); - [branch] if (texels_in_rect.z) { - xe_edram_load_store_dest.Store2(texel_addresses.w, pixels_23.zw); - } - } + } + [branch] if (x_in_rect.z) { + xe_edram_load_store_dest.Store2(texel_addresses.z, pixels_23.xy); + } + [branch] if (x_in_rect.w) { + xe_edram_load_store_dest.Store2(texel_addresses.w, pixels_23.zw); } } diff --git a/src/xenia/gpu/d3d12/shaders/pixel_formats.hlsli b/src/xenia/gpu/d3d12/shaders/pixel_formats.hlsli index 9caffafd0..d29b46b4b 100644 --- a/src/xenia/gpu/d3d12/shaders/pixel_formats.hlsli +++ b/src/xenia/gpu/d3d12/shaders/pixel_formats.hlsli @@ -29,28 +29,28 @@ uint4 XeSNorm11To16(uint4 s11) { // https://github.com/Microsoft/DirectXTex/blob/master/DirectXTex/DirectXTexConvert.cpp -uint XeFloat16To7e3(uint4 rgba_f16u32) { - float4 rgba_f32 = f16tof32(rgba_f16u32); - uint3 rgb_f32u32 = asuint(rgba_f32.xyz); +uint XeFloat32To7e3(uint4 rgba_f32u32) { // Keep only positive integers and saturate to 31.875 (also dropping NaNs). // Was previously done with `asuint(clamp(asint(rgb_f32u32), 0, 0x41FF0000))`, // but FXC decides to ignore the uint->int cast, and negative numbers become // 0x41FF0000. - rgb_f32u32 = - min((rgb_f32u32 <= 0x7FFFFFFFu) ? rgb_f32u32 : (0u).xxx, 0x41FF0000u); - uint3 denormalized = ((rgb_f32u32 & 0x7FFFFFu) | 0x800000u) >> - ((125u).xxx - (rgb_f32u32 >> 23u)); + rgba_f32u32.rgb = min( + (rgba_f32u32.rgb <= 0x7FFFFFFFu) ? rgba_f32u32.rgb : (0u).xxx, + 0x41FF0000u); + uint3 denormalized = ((rgba_f32u32.rgb & 0x7FFFFFu) | 0x800000u) >> + ((125u).xxx - (rgba_f32u32.rgb >> 23u)); uint3 rgb_f10u32 = - (rgb_f32u32 < 0x3E800000u) ? denormalized : (rgb_f32u32 + 0xC2000000u); + (rgba_f32u32.rgb < 0x3E800000u) ? denormalized + : (rgba_f32u32.rgb + 0xC2000000u); rgb_f10u32 = ((rgb_f10u32 + 0x7FFFu + ((rgb_f10u32 >> 16u) & 1u)) >> 16u) & 0x3FFu; // Rounding alpha to the nearest integer. // https://docs.microsoft.com/en-us/windows/desktop/direct3d10/d3d10-graphics-programming-guide-resources-data-conversion return rgb_f10u32.r | (rgb_f10u32.g << 10u) | (rgb_f10u32.b << 20u) | - (uint(round(saturate(rgba_f32.a) * 3.0)) << 30u); + (uint(round(saturate(asfloat(rgba_f32u32.a)) * 3.0)) << 30u); } -uint4 XeFloat7e3To16(uint rgba_packed) { +uint4 XeFloat7e3To32(uint rgba_packed) { uint3 rgb_f10u32 = (rgba_packed.xxx >> uint3(0u, 10u, 20u)) & 0x3FFu; uint3 mantissa = rgb_f10u32 & 0x7Fu; uint3 exponent = rgb_f10u32 >> 7u; @@ -66,8 +66,7 @@ uint4 XeFloat7e3To16(uint rgba_packed) { uint3 rgb_f32u32 = (rgb_f10u32 != 0u) ? (((exponent + 124u) << 23u) | (mantissa << 16u)) : (0u).xxx; - return f32tof16(float4(asfloat(rgb_f32u32), - float(rgba_packed >> 30u) * (1.0 / 3.0))); + return uint4(rgb_f32u32, asuint(float(rgba_packed >> 30u) * (1.0 / 3.0))); } // Based on CFloat24 from d3dref9.dll and the 6e4 code from: diff --git a/src/xenia/gpu/d3d12/shaders/resolve.ps.hlsl b/src/xenia/gpu/d3d12/shaders/resolve.ps.hlsl index eb87264d3..ad285b749 100644 --- a/src/xenia/gpu/d3d12/shaders/resolve.ps.hlsl +++ b/src/xenia/gpu/d3d12/shaders/resolve.ps.hlsl @@ -14,7 +14,10 @@ cbuffer XeResolveConstants : register(b0) { // 0 for the left samples with 4x AA. // 1 for 1x/2x AA or to mix samples with 4x AA. // 2 for the right samples with 4x AA. - // 6:11 - exponent bias. + // 6 - whether to apply the hack and duplicate the top/left + // half-row/half-column to reduce the impact of half-pixel offset with + // 2x resolution scale. + // 7:12 - exponent bias. uint xe_resolve_info; }; @@ -34,14 +37,15 @@ float4 main(float4 xe_position : SV_Position) : SV_Target { // texel centers, if AA is resolved, it's sampled between texels). // Go to sample coordinates and select the needed samples. - float2 resolve_position = xe_position.xy * + float2 resolve_position = + max(xe_position.xy, (float((xe_resolve_info >> 6u) & 1u) + 0.5).xx) * float2(((xe_resolve_info.xx >> uint2(1u, 0u)) & 1u) + 1u) + (float2((xe_resolve_info.xx >> uint2(4u, 2u)) & 3u) * 0.5 - 0.5); // Clamp, offset and normalize the position. - resolve_position = clamp(resolve_position, (0.5).xx, - float2(xe_resolve_rect_samples >> 16u) - 0.5) + - float2(xe_resolve_rect_samples & 0xFFFFu); + resolve_position = + min(resolve_position, float2(xe_resolve_rect_samples >> 16u) - 0.5) + + float2(xe_resolve_rect_samples & 0xFFFFu); resolve_position /= float2((xe_resolve_source_size >> uint2(0u, 16u)) & 0xFFFFu); @@ -50,7 +54,7 @@ float4 main(float4 xe_position : SV_Position) : SV_Target { resolve_position, 0.0); // Bias the exponent. - pixel *= exp2(float(int(xe_resolve_info << (32u - 12u)) >> 26)); + pixel *= exp2(float(int(xe_resolve_info << (32u - 13u)) >> 26)); return pixel; } diff --git a/src/xenia/gpu/d3d12/shaders/texture_load_128bpb.cs.hlsl b/src/xenia/gpu/d3d12/shaders/texture_load_128bpb.cs.hlsl index 1ecd12332..debba84b6 100644 --- a/src/xenia/gpu/d3d12/shaders/texture_load_128bpb.cs.hlsl +++ b/src/xenia/gpu/d3d12/shaders/texture_load_128bpb.cs.hlsl @@ -18,10 +18,11 @@ void main(uint3 xe_thread_id : SV_DispatchThreadID) { block_1 = XeByteSwap(block_1, xe_texture_load_endianness); block_2 = XeByteSwap(block_2, xe_texture_load_endianness); block_3 = XeByteSwap(block_3, xe_texture_load_endianness); - uint block_offset_host = XeTextureHostLinearOffset( + uint4 block_offsets_host; + block_offsets_host.x = XeTextureHostLinearOffset( block_index, xe_texture_load_size_blocks.y, xe_texture_load_host_pitch, 16u) + xe_texture_load_host_base; - uint4 block_offsets_host = uint4(0u, 16u, 32u, 48u) + block_offset_host; + block_offsets_host.yzw = uint3(16u, 32u, 48u) + block_offsets_host.x; xe_texture_load_dest.Store4(block_offsets_host.x, block_0); xe_texture_load_dest.Store4(block_offsets_host.y, block_1); xe_texture_load_dest.Store4(block_offsets_host.z, block_2); diff --git a/src/xenia/gpu/d3d12/shaders/texture_load_128bpb_2x.cs.hlsl b/src/xenia/gpu/d3d12/shaders/texture_load_128bpb_2x.cs.hlsl new file mode 100644 index 000000000..3939cc22c --- /dev/null +++ b/src/xenia/gpu/d3d12/shaders/texture_load_128bpb_2x.cs.hlsl @@ -0,0 +1,29 @@ +#include "texture_load.hlsli" + +[numthreads(16, 16, 1)] +void main(uint3 xe_thread_id : SV_DispatchThreadID) { + // 1 thread = 1 uint4 guest texel. + [branch] if (any(xe_thread_id >= xe_texture_load_size_blocks)) { + return; + } + uint4 block_offsets_guest; + block_offsets_guest.x = + XeTextureLoadGuestBlockOffsets(xe_thread_id, 16u, 4u).x << 2u; + block_offsets_guest.yzw = uint3(16u, 32u, 48u) + block_offsets_guest.x; + uint4 block_0 = xe_texture_load_source.Load4(block_offsets_guest.x); + uint4 block_1 = xe_texture_load_source.Load4(block_offsets_guest.y); + uint4 block_2 = xe_texture_load_source.Load4(block_offsets_guest.z); + uint4 block_3 = xe_texture_load_source.Load4(block_offsets_guest.w); + block_0 = XeByteSwap(block_0, xe_texture_load_endianness); + block_1 = XeByteSwap(block_1, xe_texture_load_endianness); + block_2 = XeByteSwap(block_2, xe_texture_load_endianness); + block_3 = XeByteSwap(block_3, xe_texture_load_endianness); + uint block_offset_host = XeTextureHostLinearOffset( + xe_thread_id << uint3(1u, 1u, 0u), xe_texture_load_size_blocks.y << 1u, + xe_texture_load_host_pitch, 16u) + xe_texture_load_host_base; + xe_texture_load_dest.Store4(block_offset_host, block_0); + xe_texture_load_dest.Store4(block_offset_host + 16u, block_1); + block_offset_host += xe_texture_load_host_pitch; + xe_texture_load_dest.Store4(block_offset_host, block_2); + xe_texture_load_dest.Store4(block_offset_host + 16u, block_3); +} diff --git a/src/xenia/gpu/d3d12/shaders/texture_load_16bpb.cs.hlsl b/src/xenia/gpu/d3d12/shaders/texture_load_16bpb.cs.hlsl index 828727b81..976b74cf7 100644 --- a/src/xenia/gpu/d3d12/shaders/texture_load_16bpb.cs.hlsl +++ b/src/xenia/gpu/d3d12/shaders/texture_load_16bpb.cs.hlsl @@ -23,16 +23,14 @@ void main(uint3 xe_thread_id : SV_DispatchThreadID) { if (xe_texture_load_guest_format == 3u) { // k_1_5_5_5. blocks = (blocks & ((31u << 5u) | (1u << 15u))) | ((blocks & 31u) << 10u) | - ((blocks >> 10u) & 31u); + (blocks >> 10u); } else if (xe_texture_load_guest_format == 4u) { // k_5_6_5. - blocks = (blocks & (63u << 5u)) | ((blocks & 31u) << 11u) | - ((blocks >> 11u) & 31u); + blocks = (blocks & (63u << 5u)) | ((blocks & 31u) << 11u) | (blocks >> 11u); } else if (xe_texture_load_guest_format == 5u) { // k_6_5_5 - RRRRR GGGGG BBBBBB to GGGGG BBBBBB RRRRR (use RBGA swizzle when // reading). - blocks = ((blocks & 31u) << 11u) | ((blocks >> 5u) & 31u) | - ((blocks >> 10u) << 5u); + blocks = ((blocks & 31u) << 11u) | (blocks >> 5u); } else if (xe_texture_load_guest_format == 15u) { // k_4_4_4_4. blocks = diff --git a/src/xenia/gpu/d3d12/shaders/texture_load_16bpb_2x.cs.hlsl b/src/xenia/gpu/d3d12/shaders/texture_load_16bpb_2x.cs.hlsl new file mode 100644 index 000000000..70f21a3dd --- /dev/null +++ b/src/xenia/gpu/d3d12/shaders/texture_load_16bpb_2x.cs.hlsl @@ -0,0 +1,43 @@ +#include "texture_load.hlsli" + +[numthreads(8, 16, 1)] +void main(uint3 xe_thread_id : SV_DispatchThreadID) { + // 1 thread = 2x1 ushort guest texels. + uint3 block_index = xe_thread_id; + block_index.x <<= 1u; + [branch] if (any(block_index >= xe_texture_load_size_blocks)) { + return; + } + uint2 block_offsets_guest = + XeTextureLoadGuestBlockOffsets(block_index, 2u, 1u).xy << 2u; + uint4 blocks = uint4(xe_texture_load_source.Load2(block_offsets_guest.x), + xe_texture_load_source.Load2(block_offsets_guest.y)); + blocks = XeByteSwap16(blocks, xe_texture_load_endianness); + + // Swap components - Xenos 16-bit packed textures are RGBA, but in Direct3D 12 + // they are BGRA. + if (xe_texture_load_guest_format == 3u) { + // k_1_5_5_5. + blocks = (blocks & 0x83E083E0u) | ((blocks & 0x001F001Fu) << 10u) | + ((blocks & 0x7C007C00u) >> 10u); + } else if (xe_texture_load_guest_format == 4u) { + // k_5_6_5. + blocks = (blocks & 0x07E007E0u) | ((blocks & 0x001F001Fu) << 11u) | + ((blocks & 0xF800F800u) >> 11u); + } else if (xe_texture_load_guest_format == 5u) { + // k_6_5_5 - RRRRR GGGGG BBBBBB to GGGGG BBBBBB RRRRR (use RBGA swizzle when + // reading). + blocks = ((blocks & 0x001F001Fu) << 11u) | ((blocks & 0xFFE0FFE0) >> 5u); + } else if (xe_texture_load_guest_format == 15u) { + // k_4_4_4_4. + blocks = (blocks & 0xF0F0F0F0u) | ((blocks & 0x000F000Fu) << 8u) | + ((blocks & 0x0F000F00u) >> 8u); + } + + uint block_offset_host = XeTextureHostLinearOffset( + xe_thread_id << uint3(2u, 1u, 0u), xe_texture_load_size_blocks.y << 1u, + xe_texture_load_host_pitch, 2u) + xe_texture_load_host_base; + xe_texture_load_dest.Store2(block_offset_host, blocks.xz); + xe_texture_load_dest.Store2(block_offset_host + xe_texture_load_host_pitch, + blocks.yw); +} diff --git a/src/xenia/gpu/d3d12/shaders/texture_load_32bpb_2x.cs.hlsl b/src/xenia/gpu/d3d12/shaders/texture_load_32bpb_2x.cs.hlsl new file mode 100644 index 000000000..8a0719dcc --- /dev/null +++ b/src/xenia/gpu/d3d12/shaders/texture_load_32bpb_2x.cs.hlsl @@ -0,0 +1,18 @@ +#include "texture_load.hlsli" + +[numthreads(16, 16, 1)] +void main(uint3 xe_thread_id : SV_DispatchThreadID) { + // 1 thread = 1 uint guest texel. + [branch] if (any(xe_thread_id >= xe_texture_load_size_blocks)) { + return; + } + uint4 blocks = xe_texture_load_source.Load4( + XeTextureLoadGuestBlockOffsets(xe_thread_id, 4u, 2u).x << 2u); + blocks = XeByteSwap(blocks, xe_texture_load_endianness); + uint block_offset_host = XeTextureHostLinearOffset( + xe_thread_id << uint3(1u, 1u, 0u), xe_texture_load_size_blocks.y << 1u, + xe_texture_load_host_pitch, 4u) + xe_texture_load_host_base; + xe_texture_load_dest.Store2(block_offset_host, blocks.xy); + xe_texture_load_dest.Store2(block_offset_host + xe_texture_load_host_pitch, + blocks.zw); +} diff --git a/src/xenia/gpu/d3d12/shaders/texture_load_64bpb_2x.cs.hlsl b/src/xenia/gpu/d3d12/shaders/texture_load_64bpb_2x.cs.hlsl new file mode 100644 index 000000000..0d8e5009d --- /dev/null +++ b/src/xenia/gpu/d3d12/shaders/texture_load_64bpb_2x.cs.hlsl @@ -0,0 +1,21 @@ +#include "texture_load.hlsli" + +[numthreads(16, 16, 1)] +void main(uint3 xe_thread_id : SV_DispatchThreadID) { + // 1 thread = 1 uint2 guest texel. + [branch] if (any(xe_thread_id >= xe_texture_load_size_blocks)) { + return; + } + uint block_offset_guest = + XeTextureLoadGuestBlockOffsets(xe_thread_id, 8u, 3u).x << 2u; + uint4 blocks_01 = xe_texture_load_source.Load4(block_offset_guest); + uint4 blocks_23 = xe_texture_load_source.Load4(block_offset_guest + 16u); + blocks_01 = XeByteSwap(blocks_01, xe_texture_load_endianness); + blocks_23 = XeByteSwap(blocks_23, xe_texture_load_endianness); + uint block_offset_host = XeTextureHostLinearOffset( + xe_thread_id << uint3(1u, 1u, 0u), xe_texture_load_size_blocks.y << 1u, + xe_texture_load_host_pitch, 8u) + xe_texture_load_host_base; + xe_texture_load_dest.Store4(block_offset_host, blocks_01); + xe_texture_load_dest.Store4(block_offset_host + xe_texture_load_host_pitch, + blocks_23); +} diff --git a/src/xenia/gpu/d3d12/shaders/texture_load_8bpb_2x.cs.hlsl b/src/xenia/gpu/d3d12/shaders/texture_load_8bpb_2x.cs.hlsl new file mode 100644 index 000000000..98a668612 --- /dev/null +++ b/src/xenia/gpu/d3d12/shaders/texture_load_8bpb_2x.cs.hlsl @@ -0,0 +1,24 @@ +#include "texture_load.hlsli" + +[numthreads(4, 16, 1)] +void main(uint3 xe_thread_id : SV_DispatchThreadID) { + // 1 thread = 4x1 ubyte guest texels. + uint3 block_index = xe_thread_id; + block_index.x <<= 2u; + [branch] if (any(block_index >= xe_texture_load_size_blocks)) { + return; + } + uint4 block_offsets_guest = + XeTextureLoadGuestBlockOffsets(block_index, 1u, 0u) << 2u; + uint4 blocks = uint4(xe_texture_load_source.Load(block_offsets_guest.x), + xe_texture_load_source.Load(block_offsets_guest.y), + xe_texture_load_source.Load(block_offsets_guest.z), + xe_texture_load_source.Load(block_offsets_guest.w)); + uint block_offset_host = XeTextureHostLinearOffset( + xe_thread_id << uint3(3u, 1u, 0u), xe_texture_load_size_blocks.y << 1u, + xe_texture_load_host_pitch, 1u) + xe_texture_load_host_base; + xe_texture_load_dest.Store2(block_offset_host, + (blocks.xz & 0x0000FFFFu) | (blocks.yw << 16u)); + xe_texture_load_dest.Store2(block_offset_host + xe_texture_load_host_pitch, + (blocks.xz >> 16u) | (blocks.yw & 0xFFFF0000u)); +} diff --git a/src/xenia/gpu/d3d12/shaders/texture_load_depth_float_2x.cs.hlsl b/src/xenia/gpu/d3d12/shaders/texture_load_depth_float_2x.cs.hlsl new file mode 100644 index 000000000..6e4520abd --- /dev/null +++ b/src/xenia/gpu/d3d12/shaders/texture_load_depth_float_2x.cs.hlsl @@ -0,0 +1,22 @@ +#include "pixel_formats.hlsli" +#include "texture_load.hlsli" + +[numthreads(16, 16, 1)] +void main(uint3 xe_thread_id : SV_DispatchThreadID) { + // 1 thread = 1 guest depth texel (24-bit unorm depth converted to 32-bit, + // can't read stencil in shaders anyway because it would require a separate + // DXGI_FORMAT_X24_TYPELESS_G8_UINT SRV). + [branch] if (any(xe_thread_id >= xe_texture_load_size_blocks)) { + return; + } + uint4 blocks = xe_texture_load_source.Load4( + XeTextureLoadGuestBlockOffsets(xe_thread_id, 4u, 2u).x << 2u); + blocks = + XeFloat20e4To32(XeByteSwap(blocks, xe_texture_load_endianness) >> 8u); + uint block_offset_host = XeTextureHostLinearOffset( + xe_thread_id << uint3(1u, 1u, 0u), xe_texture_load_size_blocks.y << 1u, + xe_texture_load_host_pitch, 4u) + xe_texture_load_host_base; + xe_texture_load_dest.Store2(block_offset_host, blocks.xy); + xe_texture_load_dest.Store2(block_offset_host + xe_texture_load_host_pitch, + blocks.zw); +} diff --git a/src/xenia/gpu/d3d12/shaders/texture_load_depth_unorm_2x.cs.hlsl b/src/xenia/gpu/d3d12/shaders/texture_load_depth_unorm_2x.cs.hlsl new file mode 100644 index 000000000..a18192f0f --- /dev/null +++ b/src/xenia/gpu/d3d12/shaders/texture_load_depth_unorm_2x.cs.hlsl @@ -0,0 +1,22 @@ +#include "pixel_formats.hlsli" +#include "texture_load.hlsli" + +[numthreads(16, 16, 1)] +void main(uint3 xe_thread_id : SV_DispatchThreadID) { + // 1 thread = 1 guest depth texel (24-bit unorm depth converted to 32-bit, + // can't read stencil in shaders anyway because it would require a separate + // DXGI_FORMAT_X24_TYPELESS_G8_UINT SRV). + [branch] if (any(xe_thread_id >= xe_texture_load_size_blocks)) { + return; + } + uint4 blocks = xe_texture_load_source.Load4( + XeTextureLoadGuestBlockOffsets(xe_thread_id, 4u, 2u).x << 2u); + blocks = asuint(float4(XeByteSwap(blocks, xe_texture_load_endianness) >> 8u) / + 16777215.0); + uint block_offset_host = XeTextureHostLinearOffset( + xe_thread_id << uint3(1u, 1u, 0u), xe_texture_load_size_blocks.y << 1u, + xe_texture_load_host_pitch, 4u) + xe_texture_load_host_base; + xe_texture_load_dest.Store2(block_offset_host, blocks.xy); + xe_texture_load_dest.Store2(block_offset_host + xe_texture_load_host_pitch, + blocks.zw); +} diff --git a/src/xenia/gpu/d3d12/shaders/texture_load_r10g11b11_rgba16_2x.cs.hlsl b/src/xenia/gpu/d3d12/shaders/texture_load_r10g11b11_rgba16_2x.cs.hlsl new file mode 100644 index 000000000..de8f64acd --- /dev/null +++ b/src/xenia/gpu/d3d12/shaders/texture_load_r10g11b11_rgba16_2x.cs.hlsl @@ -0,0 +1,44 @@ +#include "texture_load.hlsli" + +[numthreads(16, 16, 1)] +void main(uint3 xe_thread_id : SV_DispatchThreadID) { + // 1 thread = 1 uint R10G11B11_UNORM guest texel to RGBA16. + uint3 block_index = xe_thread_id; + block_index.x <<= 2u; + [branch] if (any(block_index >= xe_texture_load_size_blocks)) { + return; + } + uint4 blocks = xe_texture_load_source.Load4( + XeTextureLoadGuestBlockOffsets(xe_thread_id, 4u, 2u).x << 2u); + blocks = XeByteSwap(blocks, xe_texture_load_endianness); + uint block_offset_host = XeTextureHostLinearOffset( + xe_thread_id << uint3(1u, 1u, 0u), xe_texture_load_size_blocks.y << 1u, + xe_texture_load_host_pitch, 8u) + xe_texture_load_host_base; + + // Upper 2 host texels. + // Red and blue. + uint4 blocks_host = + (((blocks.xxyy >> uint2(0u, 21u).xyxy) & uint2(1023u, 2047u).xyxy) << + uint2(6u, 5u).xyxy) | + ((blocks.xxyy >> uint2(4u, 27u).xyxy) & uint2(63u, 31u).xyxy); + // Green. The 5 bits to be duplicated to the bottom are already at 16. + blocks_host.xz |= ((blocks.xy & (2047u << 10u)) << (21u - 10u)) | + (blocks.xy & (31u << 16u)); + // Alpha. + blocks_host.yw |= 0xFFFF0000u; + xe_texture_load_dest.Store4(block_offset_host, blocks_host); + + // Lower 2 host texels. + // Red and blue. + blocks_host = + (((blocks.zzww >> uint2(0u, 21u).xyxy) & uint2(1023u, 2047u).xyxy) << + uint2(6u, 5u).xyxy) | + ((blocks.zzww >> uint2(4u, 27u).xyxy) & uint2(63u, 31u).xyxy); + // Green. The 5 bits to be duplicated to the bottom are already at 16. + blocks_host.xz |= ((blocks.zw & (2047u << 10u)) << (21u - 10u)) | + (blocks.zw & (31u << 16u)); + // Alpha. + blocks_host.yw |= 0xFFFF0000u; + xe_texture_load_dest.Store4(block_offset_host + xe_texture_load_host_pitch, + blocks_host); +} diff --git a/src/xenia/gpu/d3d12/shaders/texture_load_r10g11b11_rgba16_snorm_2x.cs.hlsl b/src/xenia/gpu/d3d12/shaders/texture_load_r10g11b11_rgba16_snorm_2x.cs.hlsl new file mode 100644 index 000000000..18fc94e30 --- /dev/null +++ b/src/xenia/gpu/d3d12/shaders/texture_load_r10g11b11_rgba16_snorm_2x.cs.hlsl @@ -0,0 +1,29 @@ +#include "pixel_formats.hlsli" +#include "texture_load.hlsli" + +[numthreads(16, 16, 1)] +void main(uint3 xe_thread_id : SV_DispatchThreadID) { + // 1 thread = 1 uint R10G11B11_SNORM guest texel to RGBA16. + uint3 block_index = xe_thread_id; + block_index.x <<= 2u; + [branch] if (any(block_index >= xe_texture_load_size_blocks)) { + return; + } + uint4 blocks = xe_texture_load_source.Load4( + XeTextureLoadGuestBlockOffsets(xe_thread_id, 4u, 2u).x << 2u); + blocks = XeByteSwap(blocks, xe_texture_load_endianness); + uint block_offset_host = XeTextureHostLinearOffset( + xe_thread_id << uint3(1u, 1u, 0u), xe_texture_load_size_blocks.y << 1u, + xe_texture_load_host_pitch, 8u) + xe_texture_load_host_base; + + // Expand two's complement. + uint4 blocks_host_rg = + XeSNorm10To16(blocks & 1023u) | XeSNorm11To16((blocks >> 10u) & 2047u); + uint4 blocks_host_ba = XeSNorm11To16(blocks >> 21u) | 0x7FFF0000u; + + // Store the texels. + xe_texture_load_dest.Store4(block_offset_host, + uint4(blocks_host_rg.xy, blocks_host_ba.xy).xzyw); + xe_texture_load_dest.Store4(block_offset_host + xe_texture_load_host_pitch, + uint4(blocks_host_rg.zw, blocks_host_ba.zw).xzyw); +} diff --git a/src/xenia/gpu/d3d12/shaders/texture_load_r11g11b10_rgba16_2x.cs.hlsl b/src/xenia/gpu/d3d12/shaders/texture_load_r11g11b10_rgba16_2x.cs.hlsl new file mode 100644 index 000000000..254a1d909 --- /dev/null +++ b/src/xenia/gpu/d3d12/shaders/texture_load_r11g11b10_rgba16_2x.cs.hlsl @@ -0,0 +1,44 @@ +#include "texture_load.hlsli" + +[numthreads(16, 16, 1)] +void main(uint3 xe_thread_id : SV_DispatchThreadID) { + // 1 thread = 1 uint R11G11B10_UNORM guest texel to RGBA16. + uint3 block_index = xe_thread_id; + block_index.x <<= 2u; + [branch] if (any(block_index >= xe_texture_load_size_blocks)) { + return; + } + uint4 blocks = xe_texture_load_source.Load4( + XeTextureLoadGuestBlockOffsets(xe_thread_id, 4u, 2u).x << 2u); + blocks = XeByteSwap(blocks, xe_texture_load_endianness); + uint block_offset_host = XeTextureHostLinearOffset( + xe_thread_id << uint3(1u, 1u, 0u), xe_texture_load_size_blocks.y << 1u, + xe_texture_load_host_pitch, 8u) + xe_texture_load_host_base; + + // Upper 2 host texels. + // Red and blue. + uint4 blocks_host = + (((blocks.xxyy >> uint2(0u, 22u).xyxy) & uint2(2047u, 1023u).xyxy) << + uint2(5u, 6u).xyxy) | + ((blocks.xxyy >> uint2(6u, 26u).xyxy) & uint2(31u, 63u).xyxy); + // Green. + blocks_host.xz |= ((blocks.xy & (2047u << 11u)) << (21u - 11u)) | + ((blocks.xy & (31u << 17u)) >> (17u - 16u)); + // Alpha. + blocks_host.yw |= 0xFFFF0000u; + xe_texture_load_dest.Store4(block_offset_host, blocks_host); + + // Lower 2 host texels. + // Red and blue. + blocks_host = + (((blocks.zzww >> uint2(0u, 22u).xyxy) & uint2(2047u, 1023u).xyxy) << + uint2(5u, 6u).xyxy) | + ((blocks.zzww >> uint2(6u, 26u).xyxy) & uint2(31u, 63u).xyxy); + // Green. + blocks_host.xz |= ((blocks.zw & (2047u << 11u)) << (21u - 11u)) | + ((blocks.zw & (31u << 17u)) >> (17u - 16u)); + // Alpha. + blocks_host.yw |= 0xFFFF0000u; + xe_texture_load_dest.Store4(block_offset_host + xe_texture_load_host_pitch, + blocks_host); +} diff --git a/src/xenia/gpu/d3d12/shaders/texture_load_r11g11b10_rgba16_snorm_2x.cs.hlsl b/src/xenia/gpu/d3d12/shaders/texture_load_r11g11b10_rgba16_snorm_2x.cs.hlsl new file mode 100644 index 000000000..6d05f447d --- /dev/null +++ b/src/xenia/gpu/d3d12/shaders/texture_load_r11g11b10_rgba16_snorm_2x.cs.hlsl @@ -0,0 +1,29 @@ +#include "pixel_formats.hlsli" +#include "texture_load.hlsli" + +[numthreads(16, 16, 1)] +void main(uint3 xe_thread_id : SV_DispatchThreadID) { + // 1 thread = 1 uint R11G11B10_SNORM guest texel to RGBA16. + uint3 block_index = xe_thread_id; + block_index.x <<= 2u; + [branch] if (any(block_index >= xe_texture_load_size_blocks)) { + return; + } + uint4 blocks = xe_texture_load_source.Load4( + XeTextureLoadGuestBlockOffsets(xe_thread_id, 4u, 2u).x << 2u); + blocks = XeByteSwap(blocks, xe_texture_load_endianness); + uint block_offset_host = XeTextureHostLinearOffset( + xe_thread_id << uint3(1u, 1u, 0u), xe_texture_load_size_blocks.y << 1u, + xe_texture_load_host_pitch, 8u) + xe_texture_load_host_base; + + // Expand two's complement. + uint4 blocks_host_rg = + XeSNorm11To16(blocks & 2047u) | XeSNorm11To16((blocks >> 11u) & 2047u); + uint4 blocks_host_ba = XeSNorm10To16(blocks >> 22u) | 0x7FFF0000u; + + // Store the texels. + xe_texture_load_dest.Store4(block_offset_host, + uint4(blocks_host_rg.xy, blocks_host_ba.xy).xzyw); + xe_texture_load_dest.Store4(block_offset_host + xe_texture_load_host_pitch, + uint4(blocks_host_rg.zw, blocks_host_ba.zw).xzyw); +} diff --git a/src/xenia/gpu/d3d12/shaders/texture_tile.hlsli b/src/xenia/gpu/d3d12/shaders/texture_tile.hlsli index bbc113e62..b2d192949 100644 --- a/src/xenia/gpu/d3d12/shaders/texture_tile.hlsli +++ b/src/xenia/gpu/d3d12/shaders/texture_tile.hlsli @@ -11,8 +11,9 @@ cbuffer XeTextureTileConstants : register(b0) { uint xe_texture_tile_guest_base; // 0:2 - endianness (up to Xin128). // 3:8 - guest format (primarily for 16-bit textures). - // 9:31 - actual guest texture width. - uint xe_texture_tile_endian_format_guest_pitch; + // 9 - whether 2x resolution scale is used. + // 10:31 - actual guest texture width. + uint xe_texture_tile_info; // Origin of the written data in the destination texture. X in the lower 16 // bits, Y in the upper. uint xe_texture_tile_offset; @@ -28,4 +29,49 @@ cbuffer XeTextureTileConstants : register(b0) { ByteAddressBuffer xe_texture_tile_source : register(t0); // The target is u0, may be a raw UAV or a typed UAV depending on the format. +uint XeTextureTileEndian() { + return xe_texture_tile_info & 7u; +} + +uint XeTextureTileFormat() { + return (xe_texture_tile_info >> 3u) & 63u; +} + +uint XeTextureTileScaleLog2() { + return (xe_texture_tile_info >> 9u) & 1u; +} + +uint XeTextureTileGuestPitch() { + return xe_texture_tile_info >> 10u; +} + +uint2 XeTextureTileSizeUnscaled() { + return (xe_texture_tile_size >> uint2(0u, 16u)) & 0xFFFFu; +} + +uint2 XeTextureTileSizeScaled() { + return XeTextureTileSizeUnscaled() << XeTextureTileScaleLog2(); +} + +uint4 XeTextureTileGuestAddress(uint2 texel_index_scaled, uint bpb_log2) { + // Consecutive pixels in the host texture are written to addresses in XYZW. + // Without 2x scaling, the addresses map to 4x1 guest pixels, so need to + // return four separate tiled addresses. + // With 2x scaling, they map to 2x0.5 guest pixels, so need to return + // addresses that belong to two tiled guest pixels. + uint scale_log2 = XeTextureTileScaleLog2(); + uint4 addresses = (xe_texture_tile_guest_base + XeTextureTiledOffset2D( + ((xe_texture_tile_offset >> uint2(0u, 16u)) & 0xFFFFu) + + (texel_index_scaled >> scale_log2), + XeTextureTileGuestPitch(), bpb_log2)) << + (scale_log2 * 2u); + addresses += (texel_index_scaled.y & scale_log2) << (bpb_log2 + 1u); + if (scale_log2 != 0u) { + uint x_odd = texel_index_scaled.x & 1u; + addresses = x_odd ? addresses.xyyz : addresses.xxyy; + addresses += ((uint2(0u, 1u) ^ x_odd) << bpb_log2).xyxy; + } + return addresses; +} + #endif // XENIA_GPU_D3D12_SHADERS_TEXTURE_TILE_HLSLI_ diff --git a/src/xenia/gpu/d3d12/shaders/texture_tile_128bpp.cs.hlsl b/src/xenia/gpu/d3d12/shaders/texture_tile_128bpp.cs.hlsl index 135530b51..3d12fc908 100644 --- a/src/xenia/gpu/d3d12/shaders/texture_tile_128bpp.cs.hlsl +++ b/src/xenia/gpu/d3d12/shaders/texture_tile_128bpp.cs.hlsl @@ -5,17 +5,14 @@ RWByteAddressBuffer xe_texture_tile_dest : register(u0); [numthreads(32, 32, 1)] void main(uint3 xe_thread_id : SV_DispatchThreadID) { // 1 thread = 1 texel (no benefit from reading 4 texels here). - uint2 texture_size = (xe_texture_tile_size >> uint2(0u, 16u)) & 0xFFFFu; + uint2 texture_size = XeTextureTileSizeScaled(); [branch] if (any(xe_thread_id.xy >= texture_size)) { return; } - uint texel_address = xe_texture_tile_guest_base + XeTextureTiledOffset2D( - ((xe_texture_tile_offset >> uint2(0u, 16u)) & 0xFFFFu) + xe_thread_id.xy, - xe_texture_tile_endian_format_guest_pitch >> 9u, 4u).x; + uint texel_address = XeTextureTileGuestAddress(xe_thread_id.xy, 4u).x; uint texel_source_offset = xe_texture_tile_host_base + xe_thread_id.y * xe_texture_tile_host_pitch + xe_thread_id.x * 16u; uint4 texel = XeByteSwap128( - xe_texture_tile_source.Load4(texel_source_offset), - xe_texture_tile_endian_format_guest_pitch); + xe_texture_tile_source.Load4(texel_source_offset), XeTextureTileEndian()); xe_texture_tile_dest.Store4(texel_address, texel); } diff --git a/src/xenia/gpu/d3d12/shaders/texture_tile_16bpp.cs.hlsl b/src/xenia/gpu/d3d12/shaders/texture_tile_16bpp.cs.hlsl index 1e35b7143..75786e6cd 100644 --- a/src/xenia/gpu/d3d12/shaders/texture_tile_16bpp.cs.hlsl +++ b/src/xenia/gpu/d3d12/shaders/texture_tile_16bpp.cs.hlsl @@ -5,9 +5,9 @@ RWBuffer xe_texture_tile_dest : register(u0); [numthreads(8, 32, 1)] void main(uint3 xe_thread_id : SV_DispatchThreadID) { // 1 thread = 4 texels. - uint2 texture_size = (xe_texture_tile_size >> uint2(0u, 16u)) & 0xFFFFu; + uint2 texture_size = XeTextureTileSizeScaled(); uint2 texel_index = xe_thread_id.xy; - texel_index.x <<= 2u; + texel_index.x *= 4u; [branch] if (any(texel_index >= texture_size)) { return; } @@ -17,21 +17,18 @@ void main(uint3 xe_thread_id : SV_DispatchThreadID) { texel_index.x * 2u).xxyy >> uint4(0u, 16u, 0u, 16u)) & 0xFFFFu; // Swap components - Xenos 16-bit packed textures are RGBA, but in Direct3D 12 // they are BGRA. - uint format = (xe_texture_tile_endian_format_guest_pitch >> 3u) & 63u; + uint format = XeTextureTileFormat(); if (format == 4u) { // k_5_6_5. texels = (texels & (63u << 5u)) | ((texels & 31u) << 11u) | (texels >> 11u); } else if (format == 5u) { // k_6_5_5 - GGGGG BBBBBB RRRRR to RRRRR GGGGG BBBBBB (use RBGA swizzle when // resolving). - texels = ((texels & 31u) << 5u) | ((texels & (63u << 5u)) << (10u - 5u)) | - (texels >> 11u); + texels = ((texels & 0x07FFu) << 5u) | (texels >> 11u); } - texels = XeByteSwap16(texels, xe_texture_tile_endian_format_guest_pitch); + texels = XeByteSwap16(texels, XeTextureTileEndian()); - uint4 texel_addresses = (xe_texture_tile_guest_base + XeTextureTiledOffset2D( - ((xe_texture_tile_offset >> uint2(0u, 16u)) & 0xFFFFu) + texel_index, - xe_texture_tile_endian_format_guest_pitch >> 9u, 1u)) >> 1u; + uint4 texel_addresses = XeTextureTileGuestAddress(texel_index, 1u) >> 1u; xe_texture_tile_dest[texel_addresses.x] = texels.x; bool3 texels_inside = uint3(1u, 2u, 3u) + texel_index.x < texture_size.x; [branch] if (texels_inside.x) { diff --git a/src/xenia/gpu/d3d12/shaders/texture_tile_16bpp_rgba.cs.hlsl b/src/xenia/gpu/d3d12/shaders/texture_tile_16bpp_rgba.cs.hlsl index 5b5f0efcb..aea01e791 100644 --- a/src/xenia/gpu/d3d12/shaders/texture_tile_16bpp_rgba.cs.hlsl +++ b/src/xenia/gpu/d3d12/shaders/texture_tile_16bpp_rgba.cs.hlsl @@ -5,9 +5,9 @@ RWBuffer xe_texture_tile_dest : register(u0); [numthreads(8, 32, 1)] void main(uint3 xe_thread_id : SV_DispatchThreadID) { // 1 thread = 4 R8G8B8A8 texels to R5G5B5A1 or R4G4B4A4. - uint2 texture_size = (xe_texture_tile_size >> uint2(0u, 16u)) & 0xFFFFu; + uint2 texture_size = XeTextureTileSizeScaled(); uint2 texel_index = xe_thread_id.xy; - texel_index.x <<= 2u; + texel_index.x *= 4u; [branch] if (any(texel_index >= texture_size)) { return; } @@ -15,7 +15,7 @@ void main(uint3 xe_thread_id : SV_DispatchThreadID) { uint4 texels = xe_texture_tile_source.Load4( xe_texture_tile_host_base + texel_index.y * xe_texture_tile_host_pitch + texel_index.x * 4u); - uint format = (xe_texture_tile_endian_format_guest_pitch >> 3u) & 63u; + uint format = XeTextureTileFormat(); if (format == 3u) { // k_1_5_5_5. texels = ((texels & (31u << 3u)) >> 3u) | @@ -29,11 +29,9 @@ void main(uint3 xe_thread_id : SV_DispatchThreadID) { ((texels & (15u << 20u)) >> (20u - 8u)) | ((texels & (15u << 28u)) >> (28u - 12u)); } - texels = XeByteSwap16(texels, xe_texture_tile_endian_format_guest_pitch); + texels = XeByteSwap16(texels, XeTextureTileEndian()); - uint4 texel_addresses = (xe_texture_tile_guest_base + XeTextureTiledOffset2D( - ((xe_texture_tile_offset >> uint2(0u, 16u)) & 0xFFFFu) + texel_index, - xe_texture_tile_endian_format_guest_pitch >> 9u, 1u)) >> 1u; + uint4 texel_addresses = XeTextureTileGuestAddress(texel_index, 1u) >> 1u; xe_texture_tile_dest[texel_addresses.x] = texels.x; bool3 texels_inside = uint3(1u, 2u, 3u) + texel_index.x < texture_size.x; [branch] if (texels_inside.x) { diff --git a/src/xenia/gpu/d3d12/shaders/texture_tile_32bpp.cs.hlsl b/src/xenia/gpu/d3d12/shaders/texture_tile_32bpp.cs.hlsl index 27b80e728..be00465a7 100644 --- a/src/xenia/gpu/d3d12/shaders/texture_tile_32bpp.cs.hlsl +++ b/src/xenia/gpu/d3d12/shaders/texture_tile_32bpp.cs.hlsl @@ -5,19 +5,17 @@ RWByteAddressBuffer xe_texture_tile_dest : register(u0); [numthreads(8, 32, 1)] void main(uint3 xe_thread_id : SV_DispatchThreadID) { // 1 thread = 4 texels. - uint2 texture_size = (xe_texture_tile_size >> uint2(0u, 16u)) & 0xFFFFu; + uint2 texture_size = XeTextureTileSizeScaled(); uint2 texel_index = xe_thread_id.xy; - texel_index.x <<= 2u; + texel_index.x *= 4u; [branch] if (any(texel_index >= texture_size)) { return; } uint4 texels = xe_texture_tile_source.Load4( xe_texture_tile_host_base + texel_index.y * xe_texture_tile_host_pitch + texel_index.x * 4u); - texels = XeByteSwap(texels, xe_texture_tile_endian_format_guest_pitch); - uint4 texel_addresses = xe_texture_tile_guest_base + XeTextureTiledOffset2D( - ((xe_texture_tile_offset >> uint2(0u, 16u)) & 0xFFFFu) + texel_index, - xe_texture_tile_endian_format_guest_pitch >> 9u, 2u); + texels = XeByteSwap(texels, XeTextureTileEndian()); + uint4 texel_addresses = XeTextureTileGuestAddress(texel_index, 2u); xe_texture_tile_dest.Store(texel_addresses.x, texels.x); bool3 texels_inside = uint3(1u, 2u, 3u) + texel_index.x < texture_size.x; [branch] if (texels_inside.x) { diff --git a/src/xenia/gpu/d3d12/shaders/texture_tile_64bpp.cs.hlsl b/src/xenia/gpu/d3d12/shaders/texture_tile_64bpp.cs.hlsl index 0afd5a0e9..29ba6d794 100644 --- a/src/xenia/gpu/d3d12/shaders/texture_tile_64bpp.cs.hlsl +++ b/src/xenia/gpu/d3d12/shaders/texture_tile_64bpp.cs.hlsl @@ -5,30 +5,27 @@ RWByteAddressBuffer xe_texture_tile_dest : register(u0); [numthreads(8, 32, 1)] void main(uint3 xe_thread_id : SV_DispatchThreadID) { // 1 thread = 4 texels. - uint2 texture_size = (xe_texture_tile_size >> uint2(0u, 16u)) & 0xFFFFu; + uint2 texture_size = XeTextureTileSizeScaled(); uint2 texel_index = xe_thread_id.xy; - texel_index.x <<= 2u; + texel_index.x *= 4u; [branch] if (any(texel_index >= texture_size)) { return; } - uint4 texel_addresses = xe_texture_tile_guest_base + XeTextureTiledOffset2D( - ((xe_texture_tile_offset >> uint2(0u, 16u)) & 0xFFFFu) + texel_index, - xe_texture_tile_endian_format_guest_pitch >> 9u, 3u); + uint4 texel_addresses = XeTextureTileGuestAddress(texel_index, 3u); bool3 texels_inside = uint3(1u, 2u, 3u) + texel_index.x < texture_size.x; + uint endian = XeTextureTileEndian(); uint texels_source_offset = xe_texture_tile_host_base + texel_index.y * xe_texture_tile_host_pitch + texel_index.x * 8u; uint4 texels = XeByteSwap64( - xe_texture_tile_source.Load4(texels_source_offset), - xe_texture_tile_endian_format_guest_pitch); + xe_texture_tile_source.Load4(texels_source_offset), endian); xe_texture_tile_dest.Store2(texel_addresses.x, texels.xy); [branch] if (texels_inside.x) { xe_texture_tile_dest.Store2(texel_addresses.y, texels.zw); [branch] if (texels_inside.y) { texels = XeByteSwap64( - xe_texture_tile_source.Load4(texels_source_offset + 16u), - xe_texture_tile_endian_format_guest_pitch); + xe_texture_tile_source.Load4(texels_source_offset + 16u), endian); xe_texture_tile_dest.Store2(texel_addresses.z, texels.xy); [branch] if (texels_inside.z) { xe_texture_tile_dest.Store2(texel_addresses.w, texels.zw); diff --git a/src/xenia/gpu/d3d12/shaders/texture_tile_8bpp.cs.hlsl b/src/xenia/gpu/d3d12/shaders/texture_tile_8bpp.cs.hlsl index 4b4365c75..645e1c8b1 100644 --- a/src/xenia/gpu/d3d12/shaders/texture_tile_8bpp.cs.hlsl +++ b/src/xenia/gpu/d3d12/shaders/texture_tile_8bpp.cs.hlsl @@ -5,18 +5,16 @@ RWBuffer xe_texture_tile_dest : register(u0); [numthreads(8, 32, 1)] void main(uint3 xe_thread_id : SV_DispatchThreadID) { // 1 thread = 4 texels. - uint2 texture_size = (xe_texture_tile_size >> uint2(0u, 16u)) & 0xFFFFu; + uint2 texture_size = XeTextureTileSizeScaled(); uint2 texel_index = xe_thread_id.xy; - texel_index.x <<= 2u; + texel_index.x *= 4u; [branch] if (any(texel_index >= texture_size)) { return; } uint4 texels = (xe_texture_tile_source.Load( xe_texture_tile_host_base + texel_index.y * xe_texture_tile_host_pitch + texel_index.x).xxxx >> uint4(0u, 8u, 16u, 24u)) & 0xFFu; - uint4 texel_addresses = xe_texture_tile_guest_base + XeTextureTiledOffset2D( - ((xe_texture_tile_offset >> uint2(0u, 16u)) & 0xFFFFu) + texel_index, - xe_texture_tile_endian_format_guest_pitch >> 9u, 0u); + uint4 texel_addresses = XeTextureTileGuestAddress(texel_index, 0u); xe_texture_tile_dest[texel_addresses.x] = texels.x; bool3 texels_inside = uint3(1u, 2u, 3u) + texel_index.x < texture_size.x; [branch] if (texels_inside.x) { diff --git a/src/xenia/gpu/d3d12/shaders/texture_tile_r10g11b11_rgba16.cs.hlsl b/src/xenia/gpu/d3d12/shaders/texture_tile_r10g11b11_rgba16.cs.hlsl index 160a58d65..51257ca54 100644 --- a/src/xenia/gpu/d3d12/shaders/texture_tile_r10g11b11_rgba16.cs.hlsl +++ b/src/xenia/gpu/d3d12/shaders/texture_tile_r10g11b11_rgba16.cs.hlsl @@ -5,25 +5,23 @@ RWByteAddressBuffer xe_texture_tile_dest : register(u0); [numthreads(8, 32, 1)] void main(uint3 xe_thread_id : SV_DispatchThreadID) { // 1 thread = 4 texels. - uint2 texture_size = (xe_texture_tile_size >> uint2(0u, 16u)) & 0xFFFFu; + uint2 texture_size = XeTextureTileSizeScaled(); uint2 texel_index = xe_thread_id.xy; - texel_index.x <<= 2u; + texel_index.x *= 4u; [branch] if (any(texel_index >= texture_size)) { return; } - uint4 texel_addresses = xe_texture_tile_guest_base + XeTextureTiledOffset2D( - ((xe_texture_tile_offset >> uint2(0u, 16u)) & 0xFFFFu) + texel_index, - xe_texture_tile_endian_format_guest_pitch >> 9u, 2u); + uint4 texel_addresses = XeTextureTileGuestAddress(texel_index, 2u); bool3 texels_inside = uint3(1u, 2u, 3u) + texel_index.x < texture_size.x; + uint endian = XeTextureTileEndian(); uint texels_host_offset = xe_texture_tile_host_base + texel_index.y * xe_texture_tile_host_pitch + texel_index.x * 8u; uint4 texels_host = xe_texture_tile_source.Load4(texels_host_offset); uint2 texels = XeByteSwap( ((texels_host.xz >> 6u) & 1023u) | ((texels_host.xz >> 21u) << 10u) | - ((texels_host.yw >> 5u) << 21u), - xe_texture_tile_endian_format_guest_pitch); + ((texels_host.yw >> 5u) << 21u), endian); xe_texture_tile_dest.Store(texel_addresses.x, texels.x); [branch] if (texels_inside.x) { xe_texture_tile_dest.Store(texel_addresses.y, texels.y); @@ -31,8 +29,7 @@ void main(uint3 xe_thread_id : SV_DispatchThreadID) { texels_host = xe_texture_tile_source.Load4(texels_host_offset + 16u); texels = XeByteSwap( ((texels_host.xz >> 6u) & 1023u) | ((texels_host.xz >> 21u) << 10u) | - ((texels_host.yw >> 5u) << 21u), - xe_texture_tile_endian_format_guest_pitch); + ((texels_host.yw >> 5u) << 21u), endian); xe_texture_tile_dest.Store(texel_addresses.z, texels.x); [branch] if (texels_inside.z) { xe_texture_tile_dest.Store(texel_addresses.w, texels.y); diff --git a/src/xenia/gpu/d3d12/shaders/texture_tile_r11g11b10_rgba16.cs.hlsl b/src/xenia/gpu/d3d12/shaders/texture_tile_r11g11b10_rgba16.cs.hlsl index 269704e0a..53c4b6d0c 100644 --- a/src/xenia/gpu/d3d12/shaders/texture_tile_r11g11b10_rgba16.cs.hlsl +++ b/src/xenia/gpu/d3d12/shaders/texture_tile_r11g11b10_rgba16.cs.hlsl @@ -5,25 +5,23 @@ RWByteAddressBuffer xe_texture_tile_dest : register(u0); [numthreads(8, 32, 1)] void main(uint3 xe_thread_id : SV_DispatchThreadID) { // 1 thread = 4 texels. - uint2 texture_size = (xe_texture_tile_size >> uint2(0u, 16u)) & 0xFFFFu; + uint2 texture_size = XeTextureTileSizeScaled(); uint2 texel_index = xe_thread_id.xy; - texel_index.x <<= 2u; + texel_index.x *= 4u; [branch] if (any(texel_index >= texture_size)) { return; } - uint4 texel_addresses = xe_texture_tile_guest_base + XeTextureTiledOffset2D( - ((xe_texture_tile_offset >> uint2(0u, 16u)) & 0xFFFFu) + texel_index, - xe_texture_tile_endian_format_guest_pitch >> 9u, 2u); + uint4 texel_addresses = XeTextureTileGuestAddress(texel_index, 2u); bool3 texels_inside = uint3(1u, 2u, 3u) + texel_index.x < texture_size.x; + uint endian = XeTextureTileEndian(); uint texels_host_offset = xe_texture_tile_host_base + texel_index.y * xe_texture_tile_host_pitch + texel_index.x * 8u; uint4 texels_host = xe_texture_tile_source.Load4(texels_host_offset); uint2 texels = XeByteSwap( ((texels_host.xz >> 5u) & 2047u) | ((texels_host.xz >> 21u) << 11u) | - ((texels_host.yw >> 6u) << 22u), - xe_texture_tile_endian_format_guest_pitch); + ((texels_host.yw >> 6u) << 22u), endian); xe_texture_tile_dest.Store(texel_addresses.x, texels.x); [branch] if (texels_inside.x) { xe_texture_tile_dest.Store(texel_addresses.y, texels.y); @@ -31,8 +29,7 @@ void main(uint3 xe_thread_id : SV_DispatchThreadID) { texels_host = xe_texture_tile_source.Load4(texels_host_offset + 16u); texels = XeByteSwap( ((texels_host.xz >> 5u) & 2047u) | ((texels_host.xz >> 21u) << 11u) | - ((texels_host.yw >> 6u) << 22u), - xe_texture_tile_endian_format_guest_pitch); + ((texels_host.yw >> 6u) << 22u), endian); xe_texture_tile_dest.Store(texel_addresses.z, texels.x); [branch] if (texels_inside.z) { xe_texture_tile_dest.Store(texel_addresses.w, texels.y); diff --git a/src/xenia/gpu/d3d12/shaders/xenos_draw.hlsli b/src/xenia/gpu/d3d12/shaders/xenos_draw.hlsli index 361aa6be9..4c946ffc9 100644 --- a/src/xenia/gpu/d3d12/shaders/xenos_draw.hlsli +++ b/src/xenia/gpu/d3d12/shaders/xenos_draw.hlsli @@ -32,7 +32,7 @@ cbuffer xe_system_cbuffer : register(b0) { float2 xe_edram_poly_offset_front; // vec4 9 float2 xe_edram_poly_offset_back; - float2 xe_system_constant_padding_9; + uint xe_edram_resolution_scale_log2; // vec4 10 uint xe_edram_stencil_reference; uint xe_edram_stencil_read_mask; diff --git a/src/xenia/gpu/d3d12/shared_memory.cc b/src/xenia/gpu/d3d12/shared_memory.cc index 6c5fe478b..c4b6a147d 100644 --- a/src/xenia/gpu/d3d12/shared_memory.cc +++ b/src/xenia/gpu/d3d12/shared_memory.cc @@ -35,8 +35,6 @@ namespace d3d12 { constexpr uint32_t SharedMemory::kBufferSizeLog2; constexpr uint32_t SharedMemory::kBufferSize; constexpr uint32_t SharedMemory::kAddressMask; -constexpr uint32_t SharedMemory::kTileSizeLog2; -constexpr uint32_t SharedMemory::kTileSize; constexpr uint32_t SharedMemory::kHeapSizeLog2; constexpr uint32_t SharedMemory::kHeapSize; constexpr uint32_t SharedMemory::kWatchBucketSizeLog2; @@ -110,6 +108,8 @@ bool SharedMemory::Initialize() { } void SharedMemory::Shutdown() { + // TODO(Triang3l): Do something in case any watches are still registered. + if (physical_write_watch_handle_ != nullptr) { memory_->UnregisterPhysicalWriteWatch(physical_write_watch_handle_); physical_write_watch_handle_ = nullptr; @@ -118,17 +118,11 @@ void SharedMemory::Shutdown() { upload_buffer_pool_.reset(); // First free the buffer to detach it from the heaps. - if (buffer_ != nullptr) { - buffer_->Release(); - buffer_ = nullptr; - } + ui::d3d12::util::ReleaseAndNull(buffer_); if (AreTiledResourcesUsed()) { for (uint32_t i = 0; i < xe::countof(heaps_); ++i) { - if (heaps_[i] != nullptr) { - heaps_[i]->Release(); - heaps_[i] = nullptr; - } + ui::d3d12::util::ReleaseAndNull(heaps_[i]); } } } @@ -140,13 +134,40 @@ void SharedMemory::BeginFrame() { void SharedMemory::EndFrame() { upload_buffer_pool_->EndFrame(); } +SharedMemory::GlobalWatchHandle SharedMemory::RegisterGlobalWatch( + GlobalWatchCallback callback, void* callback_context) { + GlobalWatch* watch = new GlobalWatch; + watch->callback = callback; + watch->callback_context = callback_context; + + std::lock_guard lock(validity_mutex_); + global_watches_.push_back(watch); + + return reinterpret_cast(watch); +} + +void SharedMemory::UnregisterGlobalWatch(GlobalWatchHandle handle) { + auto watch = reinterpret_cast(handle); + + { + std::lock_guard lock(validity_mutex_); + auto it = std::find(global_watches_.begin(), global_watches_.end(), watch); + assert_false(it == global_watches_.end()); + if (it != global_watches_.end()) { + global_watches_.erase(it); + } + } + + delete watch; +} + SharedMemory::WatchHandle SharedMemory::WatchMemoryRange( uint32_t start, uint32_t length, WatchCallback callback, void* callback_context, void* callback_data, uint64_t callback_argument) { - start &= kAddressMask; - if (start >= kBufferSize || length == 0) { + if (length == 0) { return nullptr; } + start &= kAddressMask; length = std::min(length, kBufferSize - start); uint32_t watch_page_first = start >> page_size_log2_; uint32_t watch_page_last = (start + length - 1) >> page_size_log2_; @@ -224,7 +245,7 @@ bool SharedMemory::MakeTilesResident(uint32_t start, uint32_t length) { return true; } start &= kAddressMask; - if (start >= kBufferSize || (kBufferSize - start) < length) { + if ((kBufferSize - start) < length) { // Exceeds the physical address space. return false; } @@ -257,16 +278,17 @@ bool SharedMemory::MakeTilesResident(uint32_t start, uint32_t length) { return false; } D3D12_TILED_RESOURCE_COORDINATE region_start_coordinates; - region_start_coordinates.X = i << (kHeapSizeLog2 - kTileSizeLog2); + region_start_coordinates.X = + (i << kHeapSizeLog2) / D3D12_TILED_RESOURCE_TILE_SIZE_IN_BYTES; region_start_coordinates.Y = 0; region_start_coordinates.Z = 0; region_start_coordinates.Subresource = 0; D3D12_TILE_REGION_SIZE region_size; - region_size.NumTiles = kHeapSize >> kTileSizeLog2; + region_size.NumTiles = kHeapSize / D3D12_TILED_RESOURCE_TILE_SIZE_IN_BYTES; region_size.UseBox = FALSE; D3D12_TILE_RANGE_FLAGS range_flags = D3D12_TILE_RANGE_FLAG_NONE; UINT heap_range_start_offset = 0; - UINT range_tile_count = kHeapSize >> kTileSizeLog2; + UINT range_tile_count = kHeapSize / D3D12_TILED_RESOURCE_TILE_SIZE_IN_BYTES; // FIXME(Triang3l): This may cause issues if the emulator is shut down // mid-frame and the heaps are destroyed before tile mappings are updated // (AwaitAllFramesCompletion won't catch this then). Defer this until the @@ -285,7 +307,7 @@ bool SharedMemory::RequestRange(uint32_t start, uint32_t length) { return true; } start &= kAddressMask; - if (start >= kBufferSize || (kBufferSize - start) < length) { + if ((kBufferSize - start) < length) { // Exceeds the physical address space. return false; } @@ -343,12 +365,23 @@ bool SharedMemory::RequestRange(uint32_t start, uint32_t length) { return true; } -void SharedMemory::FireWatches(uint32_t page_first, uint32_t page_last) { - uint32_t bucket_first = page_first << page_size_log2_ >> kWatchBucketSizeLog2; - uint32_t bucket_last = page_last << page_size_log2_ >> kWatchBucketSizeLog2; +void SharedMemory::FireWatches(uint32_t page_first, uint32_t page_last, + bool invalidated_by_gpu) { + uint32_t address_first = page_first << page_size_log2_; + uint32_t address_last = + (page_last << page_size_log2_) + ((1 << page_size_log2_) - 1); + uint32_t bucket_first = address_first >> kWatchBucketSizeLog2; + uint32_t bucket_last = address_last >> kWatchBucketSizeLog2; std::lock_guard lock(validity_mutex_); + // Fire global watches. + for (const auto global_watch : global_watches_) { + global_watch->callback(global_watch->callback_context, address_first, + address_last, invalidated_by_gpu); + } + + // Fire per-range watches. for (uint32_t i = bucket_first; i <= bucket_last; ++i) { WatchNode* node = watch_buckets_[i]; while (node != nullptr) { @@ -358,7 +391,7 @@ void SharedMemory::FireWatches(uint32_t page_first, uint32_t page_last) { node = node->bucket_node_next; if (page_first <= range->page_last && page_last >= range->page_first) { range->callback(range->callback_context, range->callback_data, - range->callback_argument); + range->callback_argument, invalidated_by_gpu); UnlinkWatchRange(range); } } @@ -367,7 +400,7 @@ void SharedMemory::FireWatches(uint32_t page_first, uint32_t page_last) { void SharedMemory::RangeWrittenByGPU(uint32_t start, uint32_t length) { start &= kAddressMask; - if (length == 0 || start >= kBufferSize) { + if (length == 0) { return; } length = std::min(length, kBufferSize - start); @@ -377,7 +410,7 @@ void SharedMemory::RangeWrittenByGPU(uint32_t start, uint32_t length) { // Trigger modification callbacks so, for instance, resolved data is loaded to // the texture. - FireWatches(page_first, page_last); + FireWatches(page_first, page_last, true); // Mark the range as valid (so pages are not reuploaded until modified by the // CPU) and watch it so the CPU can reuse it and this will be caught. @@ -529,7 +562,7 @@ void SharedMemory::MemoryWriteCallback(uint32_t page_first, valid_pages_[i] &= ~invalidate_bits; } - FireWatches(page_first, page_last); + FireWatches(page_first, page_last, false); } void SharedMemory::TransitionBuffer(D3D12_RESOURCE_STATES new_state) { diff --git a/src/xenia/gpu/d3d12/shared_memory.h b/src/xenia/gpu/d3d12/shared_memory.h index 3713ef805..f6922e0fb 100644 --- a/src/xenia/gpu/d3d12/shared_memory.h +++ b/src/xenia/gpu/d3d12/shared_memory.h @@ -43,16 +43,35 @@ class SharedMemory { void BeginFrame(); void EndFrame(); - typedef void (*WatchCallback)(void* context, void* data, uint64_t argument); - typedef void* WatchHandle; - // Registers a callback invoked when something is written to the specified - // memory range by the CPU or (if triggered explicitly - such as by a resolve) - // the GPU. + typedef void (*GlobalWatchCallback)(void* context, uint32_t address_first, + uint32_t address_last, + bool invalidated_by_gpu); + typedef void* GlobalWatchHandle; + // Registers a callback invoked when something is invalidated in the GPU + // memory copy by the CPU or (if triggered explicitly - such as by a resolve) + // by the GPU. It will be fired for writes to pages previously requested, but + // may also be fired regardless of whether it was used by GPU emulation - for + // example, if the game changes protection level of a memory range containing + // the watched range. // - // Generally the context is the subsystem pointer (for example, the - // texture cache), the data is the object (such as a texture), and the - // argument is additional subsystem/object-specific data (such as whether the - // range belongs to the base mip level or to the rest of the mips). + // The callback is called with the mutex locked. + GlobalWatchHandle RegisterGlobalWatch(GlobalWatchCallback callback, + void* callback_context); + void UnregisterGlobalWatch(GlobalWatchHandle handle); + typedef void (*WatchCallback)(void* context, void* data, uint64_t argument, + bool invalidated_by_gpu); + typedef void* WatchHandle; + // Registers a callback invoked when the specified memory range is invalidated + // in the GPU memory copy by the CPU or (if triggered explicitly - such as by + // a resolve) by the GPU. It will be fired for writes to pages previously + // requested, but may also be fired regardless of whether it was used by GPU + // emulation - for example, if the game changes protection level of a memory + // range containing the watched range. + // + // Generally the context is the subsystem pointer (for example, the texture + // cache), the data is the object (such as a texture), and the argument is + // additional subsystem/object-specific data (such as whether the range + // belongs to the base mip level or to the rest of the mips). // // The callback is called with the mutex locked. Do NOT watch or unwatch // ranges from within it! The watch for the callback is cancelled after the @@ -111,12 +130,11 @@ class SharedMemory { D3D12_GPU_VIRTUAL_ADDRESS buffer_gpu_address_ = 0; D3D12_RESOURCE_STATES buffer_state_ = D3D12_RESOURCE_STATE_COPY_DEST; - // D3D resource tiles are 64 KB in size. - static constexpr uint32_t kTileSizeLog2 = 16; - static constexpr uint32_t kTileSize = 1 << kTileSizeLog2; // Heaps are 16 MB, so not too many of them are allocated. static constexpr uint32_t kHeapSizeLog2 = 24; static constexpr uint32_t kHeapSize = 1 << kHeapSizeLog2; + static_assert((kHeapSize % D3D12_TILED_RESOURCE_TILE_SIZE_IN_BYTES) == 0, + "Heap size must be a multiple of Direct3D tile size"); // Resident portions of the tiled buffer. ID3D12Heap* heaps_[kBufferSize >> kHeapSizeLog2] = {}; // Whether creation of a heap has failed in the current frame. @@ -146,6 +164,11 @@ class SharedMemory { uint32_t page_last); void MemoryWriteCallback(uint32_t page_first, uint32_t page_last); + struct GlobalWatch { + GlobalWatchCallback callback; + void* callback_context; + }; + std::vector global_watches_; struct WatchNode; // Watched range placed by other GPU subsystems. struct WatchRange { @@ -193,8 +216,10 @@ class SharedMemory { uint32_t watch_node_current_pool_allocated_ = 0; WatchRange* watch_range_first_free_ = nullptr; WatchNode* watch_node_first_free_ = nullptr; - // Triggers the watches, removing them when triggered. - void FireWatches(uint32_t page_first, uint32_t page_last); + // Triggers the watches (global and per-range), removing triggered range + // watches. + void FireWatches(uint32_t page_first, uint32_t page_last, + bool invalidated_by_gpu); // Unlinks and frees the range and its nodes. Call this with the mutex locked. void UnlinkWatchRange(WatchRange* range); diff --git a/src/xenia/gpu/d3d12/texture_cache.cc b/src/xenia/gpu/d3d12/texture_cache.cc index 9f43a9cd3..928f0ecb1 100644 --- a/src/xenia/gpu/d3d12/texture_cache.cc +++ b/src/xenia/gpu/d3d12/texture_cache.cc @@ -9,6 +9,7 @@ #include "xenia/gpu/d3d12/texture_cache.h" +#include #include "third_party/xxhash/xxhash.h" #include @@ -23,18 +24,29 @@ #include "xenia/gpu/texture_util.h" #include "xenia/ui/d3d12/d3d12_util.h" +DEFINE_int32(d3d12_resolution_scale, 1, + "Scale of rendering width and height (currently only 1 and 2 " + "are available)."); + namespace xe { namespace gpu { namespace d3d12 { // Generated with `xb buildhlsl`. +#include "xenia/gpu/d3d12/shaders/dxbc/texture_load_128bpb_2x_cs.h" #include "xenia/gpu/d3d12/shaders/dxbc/texture_load_128bpb_cs.h" +#include "xenia/gpu/d3d12/shaders/dxbc/texture_load_16bpb_2x_cs.h" #include "xenia/gpu/d3d12/shaders/dxbc/texture_load_16bpb_cs.h" +#include "xenia/gpu/d3d12/shaders/dxbc/texture_load_32bpb_2x_cs.h" #include "xenia/gpu/d3d12/shaders/dxbc/texture_load_32bpb_cs.h" +#include "xenia/gpu/d3d12/shaders/dxbc/texture_load_64bpb_2x_cs.h" #include "xenia/gpu/d3d12/shaders/dxbc/texture_load_64bpb_cs.h" +#include "xenia/gpu/d3d12/shaders/dxbc/texture_load_8bpb_2x_cs.h" #include "xenia/gpu/d3d12/shaders/dxbc/texture_load_8bpb_cs.h" #include "xenia/gpu/d3d12/shaders/dxbc/texture_load_ctx1_cs.h" +#include "xenia/gpu/d3d12/shaders/dxbc/texture_load_depth_float_2x_cs.h" #include "xenia/gpu/d3d12/shaders/dxbc/texture_load_depth_float_cs.h" +#include "xenia/gpu/d3d12/shaders/dxbc/texture_load_depth_unorm_2x_cs.h" #include "xenia/gpu/d3d12/shaders/dxbc/texture_load_depth_unorm_cs.h" #include "xenia/gpu/d3d12/shaders/dxbc/texture_load_dxn_rg8_cs.h" #include "xenia/gpu/d3d12/shaders/dxbc/texture_load_dxt1_rgba8_cs.h" @@ -42,9 +54,13 @@ namespace d3d12 { #include "xenia/gpu/d3d12/shaders/dxbc/texture_load_dxt3a_cs.h" #include "xenia/gpu/d3d12/shaders/dxbc/texture_load_dxt5_rgba8_cs.h" #include "xenia/gpu/d3d12/shaders/dxbc/texture_load_dxt5a_r8_cs.h" +#include "xenia/gpu/d3d12/shaders/dxbc/texture_load_r10g11b11_rgba16_2x_cs.h" #include "xenia/gpu/d3d12/shaders/dxbc/texture_load_r10g11b11_rgba16_cs.h" +#include "xenia/gpu/d3d12/shaders/dxbc/texture_load_r10g11b11_rgba16_snorm_2x_cs.h" #include "xenia/gpu/d3d12/shaders/dxbc/texture_load_r10g11b11_rgba16_snorm_cs.h" +#include "xenia/gpu/d3d12/shaders/dxbc/texture_load_r11g11b10_rgba16_2x_cs.h" #include "xenia/gpu/d3d12/shaders/dxbc/texture_load_r11g11b10_rgba16_cs.h" +#include "xenia/gpu/d3d12/shaders/dxbc/texture_load_r11g11b10_rgba16_snorm_2x_cs.h" #include "xenia/gpu/d3d12/shaders/dxbc/texture_load_r11g11b10_rgba16_snorm_cs.h" #include "xenia/gpu/d3d12/shaders/dxbc/texture_tile_128bpp_cs.h" #include "xenia/gpu/d3d12/shaders/dxbc/texture_tile_16bpp_cs.h" @@ -56,6 +72,10 @@ namespace d3d12 { #include "xenia/gpu/d3d12/shaders/dxbc/texture_tile_r11g11b10_rgba16_cs.h" constexpr uint32_t TextureCache::LoadConstants::kGuestPitchTiled; +constexpr uint32_t TextureCache::kScaledResolveBufferSizeLog2; +constexpr uint32_t TextureCache::kScaledResolveBufferSize; +constexpr uint32_t TextureCache::kScaledResolveHeapSizeLog2; +constexpr uint32_t TextureCache::kScaledResolveHeapSize; const TextureCache::HostFormat TextureCache::host_formats_[64] = { // k_1_REVERSE @@ -345,28 +365,44 @@ const char* const TextureCache::dimension_names_[4] = {"1D", "2D", "3D", "cube"}; const TextureCache::LoadModeInfo TextureCache::load_mode_info_[] = { - {texture_load_8bpb_cs, sizeof(texture_load_8bpb_cs)}, - {texture_load_16bpb_cs, sizeof(texture_load_16bpb_cs)}, - {texture_load_32bpb_cs, sizeof(texture_load_32bpb_cs)}, - {texture_load_64bpb_cs, sizeof(texture_load_64bpb_cs)}, - {texture_load_128bpb_cs, sizeof(texture_load_128bpb_cs)}, - {texture_load_r11g11b10_rgba16_cs, - sizeof(texture_load_r11g11b10_rgba16_cs)}, + {texture_load_8bpb_cs, sizeof(texture_load_8bpb_cs), + texture_load_8bpb_2x_cs, sizeof(texture_load_8bpb_2x_cs)}, + {texture_load_16bpb_cs, sizeof(texture_load_16bpb_cs), + texture_load_16bpb_2x_cs, sizeof(texture_load_16bpb_2x_cs)}, + {texture_load_32bpb_cs, sizeof(texture_load_32bpb_cs), + texture_load_32bpb_2x_cs, sizeof(texture_load_32bpb_2x_cs)}, + {texture_load_64bpb_cs, sizeof(texture_load_64bpb_cs), + texture_load_64bpb_2x_cs, sizeof(texture_load_64bpb_2x_cs)}, + {texture_load_128bpb_cs, sizeof(texture_load_128bpb_cs), + texture_load_128bpb_2x_cs, sizeof(texture_load_128bpb_2x_cs)}, + {texture_load_r11g11b10_rgba16_cs, sizeof(texture_load_r11g11b10_rgba16_cs), + texture_load_r11g11b10_rgba16_2x_cs, + sizeof(texture_load_r11g11b10_rgba16_2x_cs)}, {texture_load_r11g11b10_rgba16_snorm_cs, - sizeof(texture_load_r11g11b10_rgba16_snorm_cs)}, - {texture_load_r10g11b11_rgba16_cs, - sizeof(texture_load_r10g11b11_rgba16_cs)}, + sizeof(texture_load_r11g11b10_rgba16_snorm_cs), + texture_load_r11g11b10_rgba16_snorm_2x_cs, + sizeof(texture_load_r11g11b10_rgba16_snorm_2x_cs)}, + {texture_load_r10g11b11_rgba16_cs, sizeof(texture_load_r10g11b11_rgba16_cs), + texture_load_r10g11b11_rgba16_2x_cs, + sizeof(texture_load_r10g11b11_rgba16_2x_cs)}, {texture_load_r10g11b11_rgba16_snorm_cs, - sizeof(texture_load_r10g11b11_rgba16_snorm_cs)}, - {texture_load_dxt1_rgba8_cs, sizeof(texture_load_dxt1_rgba8_cs)}, - {texture_load_dxt3_rgba8_cs, sizeof(texture_load_dxt3_rgba8_cs)}, - {texture_load_dxt5_rgba8_cs, sizeof(texture_load_dxt5_rgba8_cs)}, - {texture_load_dxn_rg8_cs, sizeof(texture_load_dxn_rg8_cs)}, - {texture_load_dxt3a_cs, sizeof(texture_load_dxt3a_cs)}, - {texture_load_dxt5a_r8_cs, sizeof(texture_load_dxt5a_r8_cs)}, - {texture_load_ctx1_cs, sizeof(texture_load_ctx1_cs)}, - {texture_load_depth_unorm_cs, sizeof(texture_load_depth_unorm_cs)}, - {texture_load_depth_float_cs, sizeof(texture_load_depth_float_cs)}, + sizeof(texture_load_r10g11b11_rgba16_snorm_cs), + texture_load_r10g11b11_rgba16_snorm_2x_cs, + sizeof(texture_load_r10g11b11_rgba16_snorm_2x_cs)}, + {texture_load_dxt1_rgba8_cs, sizeof(texture_load_dxt1_rgba8_cs), nullptr, + 0}, + {texture_load_dxt3_rgba8_cs, sizeof(texture_load_dxt3_rgba8_cs), nullptr, + 0}, + {texture_load_dxt5_rgba8_cs, sizeof(texture_load_dxt5_rgba8_cs), nullptr, + 0}, + {texture_load_dxn_rg8_cs, sizeof(texture_load_dxn_rg8_cs), nullptr, 0}, + {texture_load_dxt3a_cs, sizeof(texture_load_dxt3a_cs), nullptr, 0}, + {texture_load_dxt5a_r8_cs, sizeof(texture_load_dxt5a_r8_cs), nullptr, 0}, + {texture_load_ctx1_cs, sizeof(texture_load_ctx1_cs), nullptr, 0}, + {texture_load_depth_unorm_cs, sizeof(texture_load_depth_unorm_cs), + texture_load_depth_unorm_2x_cs, sizeof(texture_load_depth_unorm_2x_cs)}, + {texture_load_depth_float_cs, sizeof(texture_load_depth_float_cs), + texture_load_depth_float_2x_cs, sizeof(texture_load_depth_float_2x_cs)}, }; const TextureCache::ResolveTileModeInfo @@ -402,6 +438,36 @@ bool TextureCache::Initialize() { auto provider = command_processor_->GetD3D12Context()->GetD3D12Provider(); auto device = provider->GetDevice(); + // Try to create the tiled buffer 2x resolution scaling. + // Not currently supported with the RTV/DSV output path for various reasons. + // As of November 27th, 2018, PIX doesn't support tiled buffers. + if (FLAGS_d3d12_resolution_scale >= 2 && + command_processor_->IsROVUsedForEDRAM() && + provider->GetTiledResourcesTier() >= 1 && + provider->GetGraphicsAnalysis() == nullptr && + provider->GetVirtualAddressBitsPerResource() >= + kScaledResolveBufferSizeLog2) { + D3D12_RESOURCE_DESC scaled_resolve_buffer_desc; + ui::d3d12::util::FillBufferResourceDesc( + scaled_resolve_buffer_desc, kScaledResolveBufferSize, + D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS); + scaled_resolve_buffer_state_ = D3D12_RESOURCE_STATE_UNORDERED_ACCESS; + if (FAILED(device->CreateReservedResource( + &scaled_resolve_buffer_desc, scaled_resolve_buffer_state_, nullptr, + IID_PPV_ARGS(&scaled_resolve_buffer_)))) { + XELOGE( + "Texture cache: Failed to create the 2 GB tiled buffer for 2x " + "resolution scale - switching to 1x"); + } + const uint32_t scaled_resolve_page_dword_count = + (512 * 1024 * 1024) / 4096 / 32; + scaled_resolve_pages_ = new uint32_t[scaled_resolve_page_dword_count]; + std::memset(scaled_resolve_pages_, 0, + scaled_resolve_page_dword_count * sizeof(uint32_t)); + std::memset(scaled_resolve_pages_l2_, 0, sizeof(scaled_resolve_pages_l2_)); + } + std::memset(scaled_resolve_heaps_, 0, sizeof(scaled_resolve_heaps_)); + // Create the loading root signature. D3D12_ROOT_PARAMETER root_parameters[2]; // Parameter 0 is constants (changed very often when untiling). @@ -463,6 +529,19 @@ bool TextureCache::Initialize() { Shutdown(); return false; } + if (IsResolutionScale2X() && mode_info.shader_2x != nullptr) { + load_pipelines_2x_[i] = ui::d3d12::util::CreateComputePipeline( + device, mode_info.shader_2x, mode_info.shader_2x_size, + load_root_signature_); + if (load_pipelines_2x_[i] == nullptr) { + XELOGE( + "Failed to create the 2x-scaled texture loading pipeline for mode " + "%u", + i); + Shutdown(); + return false; + } + } } for (uint32_t i = 0; i < uint32_t(ResolveTileMode::kCount); ++i) { const ResolveTileModeInfo& mode_info = resolve_tile_mode_info_[i]; @@ -476,20 +555,41 @@ bool TextureCache::Initialize() { } } + if (IsResolutionScale2X()) { + scaled_resolve_global_watch_handle_ = shared_memory_->RegisterGlobalWatch( + ScaledResolveGlobalWatchCallbackThunk, this); + } + return true; } void TextureCache::Shutdown() { ClearCache(); + if (scaled_resolve_global_watch_handle_ != nullptr) { + shared_memory_->UnregisterGlobalWatch(scaled_resolve_global_watch_handle_); + scaled_resolve_global_watch_handle_ = nullptr; + } + for (uint32_t i = 0; i < uint32_t(ResolveTileMode::kCount); ++i) { ui::d3d12::util::ReleaseAndNull(resolve_tile_pipelines_[i]); } ui::d3d12::util::ReleaseAndNull(resolve_tile_root_signature_); for (uint32_t i = 0; i < uint32_t(LoadMode::kCount); ++i) { + ui::d3d12::util::ReleaseAndNull(load_pipelines_2x_[i]); ui::d3d12::util::ReleaseAndNull(load_pipelines_[i]); } ui::d3d12::util::ReleaseAndNull(load_root_signature_); + + if (scaled_resolve_pages_ != nullptr) { + delete[] scaled_resolve_pages_; + scaled_resolve_pages_ = nullptr; + } + // First free the buffer to detach it from the heaps. + ui::d3d12::util::ReleaseAndNull(scaled_resolve_buffer_); + for (uint32_t i = 0; i < xe::countof(scaled_resolve_heaps_); ++i) { + ui::d3d12::util::ReleaseAndNull(scaled_resolve_heaps_[i]); + } } void TextureCache::ClearCache() { @@ -910,12 +1010,44 @@ void TextureCache::WriteSampler(SamplerParameters parameters, device->CreateSampler(&desc, handle); } +void TextureCache::MarkRangeAsResolved(uint32_t start_unscaled, + uint32_t length_unscaled) { + if (length_unscaled == 0) { + return; + } + start_unscaled &= 0x1FFFFFFF; + length_unscaled = std::min(length_unscaled, 0x20000000 - start_unscaled); + + if (IsResolutionScale2X()) { + uint32_t page_first = start_unscaled >> 12; + uint32_t page_last = (start_unscaled + length_unscaled - 1) >> 12; + uint32_t block_first = page_first >> 5; + uint32_t block_last = page_last >> 5; + shared_memory_->LockWatchMutex(); + for (uint32_t i = block_first; i <= block_last; ++i) { + uint32_t add_bits = UINT32_MAX; + if (i == block_first) { + add_bits &= ~((1u << (page_first & 31)) - 1); + } + if (i == block_last && (page_last & 31) != 31) { + add_bits &= (1u << ((page_last & 31) + 1)) - 1; + } + scaled_resolve_pages_[i] |= add_bits; + scaled_resolve_pages_l2_[i >> 6] |= 1ull << (i & 63); + } + shared_memory_->UnlockWatchMutex(); + } + + // Invalidate textures. Toggling individual textures between scaled and + // unscaled also relies on invalidation through shared memory. + shared_memory_->RangeWrittenByGPU(start_unscaled, length_unscaled); +} + bool TextureCache::TileResolvedTexture( TextureFormat format, uint32_t texture_base, uint32_t texture_pitch, - uint32_t texture_height, uint32_t offset_x, uint32_t offset_y, - uint32_t resolve_width, uint32_t resolve_height, Endian128 endian, - ID3D12Resource* buffer, uint32_t buffer_size, - const D3D12_PLACED_SUBRESOURCE_FOOTPRINT& footprint) { + uint32_t offset_x, uint32_t offset_y, uint32_t resolve_width, + uint32_t resolve_height, Endian128 endian, ID3D12Resource* buffer, + uint32_t buffer_size, const D3D12_PLACED_SUBRESOURCE_FOOTPRINT& footprint) { ResolveTileMode resolve_tile_mode = host_formats_[uint32_t(format)].resolve_tile_mode; if (resolve_tile_mode == ResolveTileMode::kUnknown) { @@ -931,6 +1063,7 @@ bool TextureCache::TileResolvedTexture( } auto provider = command_processor_->GetD3D12Context()->GetD3D12Provider(); auto device = provider->GetDevice(); + uint32_t resolution_scale_log2 = IsResolutionScale2X() ? 1 : 0; texture_base &= 0x1FFFFFFF; if (resolve_tile_mode_info.typed_uav_format == DXGI_FORMAT_UNKNOWN) { @@ -944,17 +1077,32 @@ bool TextureCache::TileResolvedTexture( assert_false(texture_pitch & 31); texture_pitch = xe::align(texture_pitch, 32u); - texture_height = xe::align(texture_height, 32u); - // Calculate the texture size for memory operations and ensure we can write to - // the specified shared memory location. + // Calculate the address and the size of the region that specifically + // is being resolved. Can't just use the texture height for size calculation + // because it's sometimes bigger than needed (in Red Dead Redemption, an UI + // texture used for the letterbox bars alpha is located within a 1280x720 + // resolve target, but only 1280x208 is being resolved, and with scaled + // resolution the UI texture gets ignored). + texture_base += texture_util::GetTiledOffset2D( + offset_x & ~31u, offset_y & ~31u, texture_pitch, + xe::log2_floor(FormatInfo::Get(format)->bits_per_pixel >> 3)); + offset_x &= 31; + offset_y &= 31; uint32_t texture_size = texture_util::GetGuestMipSliceStorageSize( - texture_pitch, texture_height, 1, true, format, nullptr); + texture_pitch, xe::align(offset_y + resolve_height, 32u), 1, true, format, + nullptr); if (texture_size == 0) { return true; } - if (!shared_memory_->MakeTilesResident(texture_base, texture_size)) { - return false; + if (resolution_scale_log2) { + if (!EnsureScaledResolveBufferResident(texture_base, texture_size)) { + return false; + } + } else { + if (!shared_memory_->MakeTilesResident(texture_base, texture_size)) { + return false; + } } // Tile the texture. @@ -964,12 +1112,17 @@ bool TextureCache::TileResolvedTexture( descriptor_gpu_start) == 0) { return false; } - shared_memory_->UseForWriting(); + if (resolution_scale_log2) { + UseScaledResolveBufferForWriting(); + } else { + shared_memory_->UseForWriting(); + } command_processor_->SubmitBarriers(); command_list->SetComputeRootSignature(resolve_tile_root_signature_); ResolveTileConstants resolve_tile_constants; - resolve_tile_constants.endian_format_guest_pitch = - uint32_t(endian) | (uint32_t(format) << 3) | (texture_pitch << 9); + resolve_tile_constants.info = uint32_t(endian) | (uint32_t(format) << 3) | + (resolution_scale_log2 << 9) | + (texture_pitch << 10); resolve_tile_constants.offset = offset_x | (offset_y << 16); resolve_tile_constants.size = resolve_width | (resolve_height << 16); resolve_tile_constants.host_base = uint32_t(footprint.Offset); @@ -984,23 +1137,34 @@ bool TextureCache::TileResolvedTexture( // there can't be more than 128M texels in one // (D3D12_REQ_BUFFER_RESOURCE_TEXEL_COUNT_2_TO_EXP). resolve_tile_constants.guest_base = - (texture_base & 15u) >> resolve_tile_mode_info.uav_texel_size_log2; + (texture_base & 0xFFFu) >> resolve_tile_mode_info.uav_texel_size_log2; D3D12_UNORDERED_ACCESS_VIEW_DESC uav_desc; uav_desc.Format = resolve_tile_mode_info.typed_uav_format; uav_desc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; uav_desc.Buffer.FirstElement = - (texture_base & ~15u) >> resolve_tile_mode_info.uav_texel_size_log2; + (texture_base & ~0xFFFu) >> resolve_tile_mode_info.uav_texel_size_log2 + << (resolution_scale_log2 * 2); uav_desc.Buffer.NumElements = - xe::align(texture_size + (texture_base & 15u), 16u) >> - resolve_tile_mode_info.uav_texel_size_log2; + xe::align(texture_size + (texture_base & 0xFFFu), 0x1000u) >> + resolve_tile_mode_info.uav_texel_size_log2 + << (resolution_scale_log2 * 2); uav_desc.Buffer.StructureByteStride = 0; uav_desc.Buffer.CounterOffsetInBytes = 0; uav_desc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_NONE; - device->CreateUnorderedAccessView(shared_memory_->GetBuffer(), nullptr, - &uav_desc, descriptor_cpu_uav); + device->CreateUnorderedAccessView(resolution_scale_log2 + ? scaled_resolve_buffer_ + : shared_memory_->GetBuffer(), + nullptr, &uav_desc, descriptor_cpu_uav); } else { - resolve_tile_constants.guest_base = texture_base; - shared_memory_->CreateRawUAV(descriptor_cpu_uav); + if (resolution_scale_log2) { + resolve_tile_constants.guest_base = texture_base & 0xFFF; + CreateScaledResolveBufferRawUAV( + descriptor_cpu_uav, texture_base >> 12, + ((texture_base + texture_size - 1) >> 12) - (texture_base >> 12) + 1); + } else { + resolve_tile_constants.guest_base = texture_base; + shared_memory_->CreateRawUAV(descriptor_cpu_uav); + } } command_list->SetComputeRootDescriptorTable(1, descriptor_gpu_start); command_list->SetComputeRoot32BitConstants( @@ -1008,18 +1172,125 @@ bool TextureCache::TileResolvedTexture( &resolve_tile_constants, 0); command_processor_->SetComputePipeline( resolve_tile_pipelines_[uint32_t(resolve_tile_mode)]); - command_list->Dispatch((resolve_width + 31) >> 5, (resolve_height + 31) >> 5, + // Each group processes 32x32 texels after resolution scaling has been + // applied. + command_list->Dispatch(((resolve_width << resolution_scale_log2) + 31) >> 5, + ((resolve_height << resolution_scale_log2) + 31) >> 5, 1); // Commit the write. - command_processor_->PushUAVBarrier(shared_memory_->GetBuffer()); + command_processor_->PushUAVBarrier(resolution_scale_log2 + ? scaled_resolve_buffer_ + : shared_memory_->GetBuffer()); - // Invalidate textures. - shared_memory_->RangeWrittenByGPU(texture_base, texture_size); + // Invalidate textures and mark the range as scaled if needed. + MarkRangeAsResolved(texture_base, texture_size); return true; } +bool TextureCache::EnsureScaledResolveBufferResident(uint32_t start_unscaled, + uint32_t length_unscaled) { + assert_true(IsResolutionScale2X()); + + if (length_unscaled == 0) { + return true; + } + start_unscaled &= 0x1FFFFFFF; + if ((0x20000000 - start_unscaled) < length_unscaled) { + // Exceeds the physical address space. + return false; + } + + uint32_t heap_first = (start_unscaled << 2) >> kScaledResolveHeapSizeLog2; + uint32_t heap_last = ((start_unscaled + length_unscaled - 1) << 2) >> + kScaledResolveHeapSizeLog2; + for (uint32_t i = heap_first; i <= heap_last; ++i) { + if (scaled_resolve_heaps_[i] != nullptr) { + continue; + } + auto provider = command_processor_->GetD3D12Context()->GetD3D12Provider(); + auto device = provider->GetDevice(); + auto direct_queue = provider->GetDirectQueue(); + D3D12_HEAP_DESC heap_desc = {}; + heap_desc.SizeInBytes = kScaledResolveHeapSize; + heap_desc.Properties.Type = D3D12_HEAP_TYPE_DEFAULT; + heap_desc.Flags = D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS; + if (FAILED(device->CreateHeap(&heap_desc, + IID_PPV_ARGS(&scaled_resolve_heaps_[i])))) { + XELOGE("Texture cache: Failed to create a scaled resolve tile heap"); + return false; + } + D3D12_TILED_RESOURCE_COORDINATE region_start_coordinates; + region_start_coordinates.X = (i << kScaledResolveHeapSizeLog2) / + D3D12_TILED_RESOURCE_TILE_SIZE_IN_BYTES; + region_start_coordinates.Y = 0; + region_start_coordinates.Z = 0; + region_start_coordinates.Subresource = 0; + D3D12_TILE_REGION_SIZE region_size; + region_size.NumTiles = + kScaledResolveHeapSize / D3D12_TILED_RESOURCE_TILE_SIZE_IN_BYTES; + region_size.UseBox = FALSE; + D3D12_TILE_RANGE_FLAGS range_flags = D3D12_TILE_RANGE_FLAG_NONE; + UINT heap_range_start_offset = 0; + UINT range_tile_count = + kScaledResolveHeapSize / D3D12_TILED_RESOURCE_TILE_SIZE_IN_BYTES; + // FIXME(Triang3l): This may cause issues if the emulator is shut down + // mid-frame and the heaps are destroyed before tile mappings are updated + // (AwaitAllFramesCompletion won't catch this then). Defer this until the + // actual command list submission at the end of the frame. + direct_queue->UpdateTileMappings( + scaled_resolve_buffer_, 1, ®ion_start_coordinates, ®ion_size, + scaled_resolve_heaps_[i], 1, &range_flags, &heap_range_start_offset, + &range_tile_count, D3D12_TILE_MAPPING_FLAG_NONE); + } + return true; +} + +void TextureCache::UseScaledResolveBufferForReading() { + assert_true(IsResolutionScale2X()); + command_processor_->PushTransitionBarrier( + scaled_resolve_buffer_, scaled_resolve_buffer_state_, + D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE); + scaled_resolve_buffer_state_ = D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE; +} + +void TextureCache::UseScaledResolveBufferForWriting() { + assert_true(IsResolutionScale2X()); + command_processor_->PushTransitionBarrier( + scaled_resolve_buffer_, scaled_resolve_buffer_state_, + D3D12_RESOURCE_STATE_UNORDERED_ACCESS); + scaled_resolve_buffer_state_ = D3D12_RESOURCE_STATE_UNORDERED_ACCESS; +} + +void TextureCache::CreateScaledResolveBufferRawSRV( + D3D12_CPU_DESCRIPTOR_HANDLE handle, uint32_t first_unscaled_4kb_page, + uint32_t unscaled_4kb_page_count) { + assert_true(IsResolutionScale2X()); + first_unscaled_4kb_page = std::min(first_unscaled_4kb_page, 0x1FFFFu); + unscaled_4kb_page_count = std::max( + std::min(unscaled_4kb_page_count, 0x20000u - first_unscaled_4kb_page), + 1u); + ui::d3d12::util::CreateRawBufferSRV( + command_processor_->GetD3D12Context()->GetD3D12Provider()->GetDevice(), + handle, scaled_resolve_buffer_, unscaled_4kb_page_count << 14, + first_unscaled_4kb_page << 14); +} + +void TextureCache::CreateScaledResolveBufferRawUAV( + D3D12_CPU_DESCRIPTOR_HANDLE handle, uint32_t first_unscaled_4kb_page, + uint32_t unscaled_4kb_page_count) { + assert_true(IsResolutionScale2X()); + first_unscaled_4kb_page = std::min(first_unscaled_4kb_page, 0x1FFFFu); + unscaled_4kb_page_count = std::max( + std::min(unscaled_4kb_page_count, 0x20000u - first_unscaled_4kb_page), + 1u); + ui::d3d12::util::CreateRawBufferUAV( + command_processor_->GetD3D12Context()->GetD3D12Provider()->GetDevice(), + handle, scaled_resolve_buffer_, unscaled_4kb_page_count << 14, + first_unscaled_4kb_page << 14); +} + bool TextureCache::RequestSwapTexture(D3D12_CPU_DESCRIPTOR_HANDLE handle, TextureFormat& format_out) { auto group = reinterpret_cast( @@ -1069,6 +1340,17 @@ bool TextureCache::IsDecompressionNeeded(TextureFormat format, uint32_t width, (height & (format_info->block_height - 1)) != 0; } +TextureCache::LoadMode TextureCache::GetLoadMode(TextureKey key) { + const HostFormat& host_format = host_formats_[uint32_t(key.format)]; + if (key.signed_separate) { + return host_format.load_mode_snorm; + } + if (IsDecompressionNeeded(key.format, key.width, key.height)) { + return host_format.decompress_mode; + } + return host_format.load_mode; +} + void TextureCache::BindingInfoFromFetchConstant( const xenos::xe_gpu_texture_fetch_t& fetch, TextureKey& key_out, uint32_t* swizzle_out, bool* has_unsigned_out, bool* has_signed_out) { @@ -1217,9 +1499,10 @@ void TextureCache::BindingInfoFromFetchConstant( void TextureCache::LogTextureKeyAction(TextureKey key, const char* action) { XELOGGPU( - "%s %s %ux%ux%u %s %s texture with %u %spacked mip level%s, " + "%s %s %s%ux%ux%u %s %s texture with %u %spacked mip level%s, " "base at 0x%.8X, mips at 0x%.8X", - action, key.tiled ? "tiled" : "linear", key.width, key.height, key.depth, + action, key.tiled ? "tiled" : "linear", + key.scaled_resolve ? "2x-scaled " : "", key.width, key.height, key.depth, dimension_names_[uint32_t(key.dimension)], FormatInfo::Get(key.format)->name, key.mip_max_level + 1, key.packed_mips ? "" : "un", key.mip_max_level != 0 ? "s" : "", @@ -1229,9 +1512,10 @@ void TextureCache::LogTextureKeyAction(TextureKey key, const char* action) { void TextureCache::LogTextureAction(const Texture* texture, const char* action) { XELOGGPU( - "%s %s %ux%ux%u %s %s texture with %u %spacked mip level%s, " + "%s %s %s%ux%ux%u %s %s texture with %u %spacked mip level%s, " "base at 0x%.8X (size %u), mips at 0x%.8X (size %u)", - action, texture->key.tiled ? "tiled" : "linear", texture->key.width, + action, texture->key.tiled ? "tiled" : "linear", + texture->key.scaled_resolve ? "2x-scaled " : "", texture->key.width, texture->key.height, texture->key.depth, dimension_names_[uint32_t(texture->key.dimension)], FormatInfo::Get(texture->key.format)->name, @@ -1241,6 +1525,26 @@ void TextureCache::LogTextureAction(const Texture* texture, } TextureCache::Texture* TextureCache::FindOrCreateTexture(TextureKey key) { + // Check if the texture is a 2x-scaled resolve texture. + if (IsResolutionScale2X() && key.tiled) { + LoadMode load_mode = GetLoadMode(key); + if (load_mode != LoadMode::kUnknown && + load_pipelines_2x_[uint32_t(load_mode)] != nullptr) { + uint32_t base_size = 0, mip_size = 0; + texture_util::GetTextureTotalSize( + key.dimension, key.width, key.height, key.depth, key.format, + key.tiled, key.packed_mips, key.mip_max_level, + key.base_page != 0 ? &base_size : nullptr, + key.mip_page != 0 ? &mip_size : nullptr); + if ((base_size != 0 && + IsRangeScaledResolved(key.base_page << 12, base_size)) || + (mip_size != 0 && + IsRangeScaledResolved(key.mip_page << 12, mip_size))) { + key.scaled_resolve = 1; + } + } + } + uint64_t map_key = key.GetMapKey(); // Try to find an existing texture. @@ -1270,6 +1574,10 @@ TextureCache::Texture* TextureCache::FindOrCreateTexture(TextureKey key) { desc.Alignment = 0; desc.Width = key.width; desc.Height = key.height; + if (key.scaled_resolve) { + desc.Width *= 2; + desc.Height *= 2; + } desc.DepthOrArraySize = key.depth; desc.MipLevels = key.mip_max_level + 1; desc.SampleDesc.Count = 1; @@ -1378,29 +1686,24 @@ bool TextureCache::LoadTextureData(Texture* texture) { auto device = provider->GetDevice(); // Get the pipeline. - TextureFormat guest_format = texture->key.format; - uint32_t width = texture->key.width; - uint32_t height = texture->key.height; - const HostFormat& host_format = host_formats_[uint32_t(guest_format)]; - LoadMode load_mode; - if (texture->key.signed_separate) { - load_mode = host_format.load_mode_snorm; - } else { - if (IsDecompressionNeeded(guest_format, width, height)) { - load_mode = host_format.decompress_mode; - } else { - load_mode = host_format.load_mode; - } - } + LoadMode load_mode = GetLoadMode(texture->key); if (load_mode == LoadMode::kUnknown) { return false; } - ID3D12PipelineState* pipeline = load_pipelines_[uint32_t(load_mode)]; + bool scaled_resolve = texture->key.scaled_resolve ? true : false; + ID3D12PipelineState* pipeline = scaled_resolve + ? load_pipelines_2x_[uint32_t(load_mode)] + : load_pipelines_[uint32_t(load_mode)]; if (pipeline == nullptr) { return false; } // Request uploading of the texture data to the shared memory. + // This is also necessary when resolution scale is used - the texture cache + // relies on shared memory for invalidation of both unscaled and scaled + // textures! Plus a texture may be unscaled partially, when only a portion of + // its pages is invalidated, in this case we'll need the texture from the + // shared memory to load the unscaled parts. if (!base_in_sync) { if (!shared_memory_->RequestRange(texture->key.base_page << 12, texture->base_size)) { @@ -1413,11 +1716,25 @@ bool TextureCache::LoadTextureData(Texture* texture) { return false; } } + if (scaled_resolve) { + // Make sure all heaps are created. + if (!EnsureScaledResolveBufferResident(texture->key.base_page << 12, + texture->base_size)) { + return false; + } + if (!EnsureScaledResolveBufferResident(texture->key.mip_page << 12, + texture->mip_size)) { + return false; + } + } // Get the guest layout. bool is_3d = texture->key.dimension == Dimension::k3D; + uint32_t width = texture->key.width; + uint32_t height = texture->key.height; uint32_t depth = is_3d ? texture->key.depth : 1; uint32_t slice_count = is_3d ? 1 : texture->key.depth; + TextureFormat guest_format = texture->key.format; const FormatInfo* guest_format_info = FormatInfo::Get(guest_format); uint32_t block_width = guest_format_info->block_width; uint32_t block_height = guest_format_info->block_height; @@ -1445,28 +1762,63 @@ bool TextureCache::LoadTextureData(Texture* texture) { } // Begin loading. + uint32_t mip_first = base_in_sync ? 1 : 0; + uint32_t mip_last = mips_in_sync ? 0 : resource_desc.MipLevels - 1; + // Can't address more than 512 MB directly on Nvidia - need two separate UAV + // descriptors for base and mips. + bool separate_base_and_mips_descriptors = + scaled_resolve && mip_first == 0 && mip_last != 0; + uint32_t descriptor_count = separate_base_and_mips_descriptors ? 4 : 2; D3D12_CPU_DESCRIPTOR_HANDLE descriptor_cpu_start; D3D12_GPU_DESCRIPTOR_HANDLE descriptor_gpu_start; - if (command_processor_->RequestViewDescriptors(0, 2, 2, descriptor_cpu_start, - descriptor_gpu_start) == 0) { + if (command_processor_->RequestViewDescriptors( + 0, descriptor_count, descriptor_count, descriptor_cpu_start, + descriptor_gpu_start) == 0) { command_processor_->ReleaseScratchGPUBuffer(copy_buffer, copy_buffer_state); return false; } - shared_memory_->UseForReading(); - shared_memory_->CreateSRV(descriptor_cpu_start); - ui::d3d12::util::CreateRawBufferUAV( - device, provider->OffsetViewDescriptor(descriptor_cpu_start, 1), - copy_buffer, uint32_t(host_slice_size)); + if (scaled_resolve) { + // TODO(Triang3l): Allow partial invalidation of scaled textures - send a + // part of scaled_resolve_pages_ to the shader and choose the source + // according to whether a specific page contains scaled texture data. If + // it's not, duplicate the texels from the unscaled version - will be + // blocky with filtering, but better than nothing. + UseScaledResolveBufferForReading(); + uint32_t srv_descriptor_offset = 0; + if (mip_first == 0) { + CreateScaledResolveBufferRawSRV( + provider->OffsetViewDescriptor(descriptor_cpu_start, + srv_descriptor_offset), + texture->key.base_page, (texture->base_size + 0xFFF) >> 12); + srv_descriptor_offset += 2; + } + if (mip_last != 0) { + CreateScaledResolveBufferRawSRV( + provider->OffsetViewDescriptor(descriptor_cpu_start, + srv_descriptor_offset), + texture->key.mip_page, (texture->mip_size + 0xFFF) >> 12); + } + } else { + shared_memory_->UseForReading(); + shared_memory_->CreateSRV(descriptor_cpu_start); + } + // Create two destination descriptors since the table has both. + for (uint32_t i = 1; i < descriptor_count; i += 2) { + ui::d3d12::util::CreateRawBufferUAV( + device, provider->OffsetViewDescriptor(descriptor_cpu_start, i), + copy_buffer, uint32_t(host_slice_size)); + } command_processor_->SetComputePipeline(pipeline); command_list->SetComputeRootSignature(load_root_signature_); - command_list->SetComputeRootDescriptorTable(1, descriptor_gpu_start); + if (!separate_base_and_mips_descriptors) { + // Will be bound later. + command_list->SetComputeRootDescriptorTable(1, descriptor_gpu_start); + } // Submit commands. command_processor_->PushTransitionBarrier(texture->resource, texture->state, D3D12_RESOURCE_STATE_COPY_DEST); texture->state = D3D12_RESOURCE_STATE_COPY_DEST; - uint32_t mip_first = base_in_sync ? 1 : 0; - uint32_t mip_last = mips_in_sync ? 0 : resource_desc.MipLevels - 1; auto cbuffer_pool = command_processor_->GetConstantBufferPool(); LoadConstants load_constants; load_constants.is_3d = is_3d ? 1 : 0; @@ -1482,10 +1834,16 @@ bool TextureCache::LoadTextureData(Texture* texture) { copy_buffer, copy_buffer_state, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); copy_buffer_state = D3D12_RESOURCE_STATE_UNORDERED_ACCESS; for (uint32_t j = mip_first; j <= mip_last; ++j) { - if (j == 0) { - load_constants.guest_base = texture->key.base_page << 12; + if (scaled_resolve) { + // Offset already applied in the buffer because more than 512 MB can't + // be directly addresses on Nvidia. + load_constants.guest_base = 0; } else { - load_constants.guest_base = texture->key.mip_page << 12; + if (j == 0) { + load_constants.guest_base = texture->key.base_page << 12; + } else { + load_constants.guest_base = texture->key.mip_page << 12; + } } load_constants.guest_base += texture->mip_offsets[j] + i * texture->slice_sizes[j]; @@ -1530,10 +1888,26 @@ bool TextureCache::LoadTextureData(Texture* texture) { } std::memcpy(cbuffer_mapping, &load_constants, sizeof(load_constants)); command_list->SetComputeRootConstantBufferView(0, cbuffer_gpu_address); + if (separate_base_and_mips_descriptors) { + if (j == 0) { + command_list->SetComputeRootDescriptorTable(1, descriptor_gpu_start); + } else if (j == 1) { + command_list->SetComputeRootDescriptorTable( + 1, provider->OffsetViewDescriptor(descriptor_gpu_start, 2)); + } + } command_processor_->SubmitBarriers(); - // Each thread group processes 32x32x1 blocks. - command_list->Dispatch((load_constants.size_blocks[0] + 31) >> 5, - (load_constants.size_blocks[1] + 31) >> 5, + // Each thread group processes 32x32x1 blocks after resolution scaling has + // been applied. + uint32_t group_count_x = load_constants.size_blocks[0]; + uint32_t group_count_y = load_constants.size_blocks[1]; + if (texture->key.scaled_resolve) { + group_count_x *= 2; + group_count_y *= 2; + } + group_count_x = (group_count_x + 31) >> 5; + group_count_y = (group_count_y + 31) >> 5; + command_list->Dispatch(group_count_x, group_count_y, load_constants.size_blocks[2]); } command_processor_->PushUAVBarrier(copy_buffer); @@ -1557,7 +1931,10 @@ bool TextureCache::LoadTextureData(Texture* texture) { command_processor_->ReleaseScratchGPUBuffer(copy_buffer, copy_buffer_state); - // Mark the ranges as uploaded and watch them. + // Mark the ranges as uploaded and watch them. This is needed for scaled + // resolves as well to detect when the CPU wants to reuse the memory for a + // regular texture or a vertex buffer, and thus the scaled resolve version is + // not up to date anymore. shared_memory_->LockWatchMutex(); texture->base_in_sync = true; texture->mips_in_sync = true; @@ -1578,7 +1955,8 @@ bool TextureCache::LoadTextureData(Texture* texture) { } void TextureCache::WatchCallbackThunk(void* context, void* data, - uint64_t argument) { + uint64_t argument, + bool invalidated_by_gpu) { TextureCache* texture_cache = reinterpret_cast(context); texture_cache->WatchCallback(reinterpret_cast(data), argument != 0); } @@ -1602,6 +1980,102 @@ void TextureCache::ClearBindings() { texture_invalidated_.store(false, std::memory_order_relaxed); } +bool TextureCache::IsRangeScaledResolved(uint32_t start_unscaled, + uint32_t length_unscaled) { + if (!IsResolutionScale2X() || length_unscaled == 0) { + return false; + } + + start_unscaled &= 0x1FFFFFFF; + length_unscaled = std::min(length_unscaled, 0x20000000 - start_unscaled); + + // Two-level check for faster rejection since resolve targets are usually + // placed in relatively small and localized memory portions (confirmed by + // testing - pretty much all times the deeper level was entered, the texture + // was a resolve target). + uint32_t page_first = start_unscaled >> 12; + uint32_t page_last = (start_unscaled + length_unscaled - 1) >> 12; + uint32_t block_first = page_first >> 5; + uint32_t block_last = page_last >> 5; + uint32_t l2_block_first = block_first >> 6; + uint32_t l2_block_last = block_last >> 6; + shared_memory_->LockWatchMutex(); + for (uint32_t i = l2_block_first; i <= l2_block_last; ++i) { + uint64_t l2_block = scaled_resolve_pages_l2_[i]; + if (i == l2_block_first) { + l2_block &= ~((1ull << (block_first & 63)) - 1); + } + if (i == l2_block_last && (block_last & 63) != 63) { + l2_block &= (1ull << ((block_last & 63) + 1)) - 1; + } + uint32_t block_relative_index; + while (xe::bit_scan_forward(l2_block, &block_relative_index)) { + l2_block &= ~(1ull << block_relative_index); + uint32_t block_index = (i << 6) + block_relative_index; + uint32_t check_bits = UINT32_MAX; + if (block_index == block_first) { + check_bits &= ~((1u << (page_first & 31)) - 1); + } + if (block_index == block_last && (page_last & 31) != 31) { + check_bits &= (1u << ((page_last & 31) + 1)) - 1; + } + if (scaled_resolve_pages_[block_index] & check_bits) { + shared_memory_->UnlockWatchMutex(); + return true; + } + } + } + shared_memory_->UnlockWatchMutex(); + return false; +} + +void TextureCache::ScaledResolveGlobalWatchCallbackThunk( + void* context, uint32_t address_first, uint32_t address_last, + bool invalidated_by_gpu) { + TextureCache* texture_cache = reinterpret_cast(context); + texture_cache->ScaledResolveGlobalWatchCallback(address_first, address_last, + invalidated_by_gpu); +} + +void TextureCache::ScaledResolveGlobalWatchCallback(uint32_t address_first, + uint32_t address_last, + bool invalidated_by_gpu) { + assert_true(IsResolutionScale2X()); + if (invalidated_by_gpu) { + // Resolves themselves do exactly the opposite of what this should do. + return; + } + // Mark scaled resolve ranges as non-scaled. Textures themselves will be + // invalidated by their own per-range watches. + uint32_t resolve_page_first = address_first >> 12; + uint32_t resolve_page_last = address_last >> 12; + uint32_t resolve_block_first = resolve_page_first >> 5; + uint32_t resolve_block_last = resolve_page_last >> 5; + uint32_t resolve_l2_block_first = resolve_block_first >> 6; + uint32_t resolve_l2_block_last = resolve_block_last >> 6; + for (uint32_t i = resolve_l2_block_first; i <= resolve_l2_block_last; ++i) { + uint64_t resolve_l2_block = scaled_resolve_pages_l2_[i]; + uint32_t resolve_block_relative_index; + while ( + xe::bit_scan_forward(resolve_l2_block, &resolve_block_relative_index)) { + resolve_l2_block &= ~(1ull << resolve_block_relative_index); + uint32_t resolve_block_index = (i << 6) + resolve_block_relative_index; + uint32_t resolve_keep_bits = 0; + if (resolve_block_index == resolve_block_first) { + resolve_keep_bits |= (1u << (resolve_page_first & 31)) - 1; + } + if (resolve_block_index == resolve_block_last && + (resolve_page_last & 31) != 31) { + resolve_keep_bits |= ~((1u << ((resolve_page_last & 31) + 1)) - 1); + } + scaled_resolve_pages_[resolve_block_index] &= resolve_keep_bits; + if (scaled_resolve_pages_[resolve_block_index] == 0) { + scaled_resolve_pages_l2_[i] &= ~(1ull << resolve_block_relative_index); + } + } + } +} + } // namespace d3d12 } // namespace gpu } // namespace xe diff --git a/src/xenia/gpu/d3d12/texture_cache.h b/src/xenia/gpu/d3d12/texture_cache.h index 1e00fb88c..ee8aebcee 100644 --- a/src/xenia/gpu/d3d12/texture_cache.h +++ b/src/xenia/gpu/d3d12/texture_cache.h @@ -11,6 +11,7 @@ #define XENIA_GPU_D3D12_TEXTURE_CACHE_H_ #include +#include #include #include "xenia/gpu/d3d12/d3d12_shader.h" @@ -125,18 +126,37 @@ class TextureCache { void WriteSampler(SamplerParameters parameters, D3D12_CPU_DESCRIPTOR_HANDLE handle) const; + void MarkRangeAsResolved(uint32_t start_unscaled, uint32_t length_unscaled); static inline DXGI_FORMAT GetResolveDXGIFormat(TextureFormat format) { return host_formats_[uint32_t(format)].dxgi_format_resolve_tile; } // The source buffer must be in the non-pixel-shader SRV state. bool TileResolvedTexture(TextureFormat format, uint32_t texture_base, - uint32_t texture_pitch, uint32_t texture_height, - uint32_t offset_x, uint32_t offset_y, - uint32_t resolve_width, uint32_t resolve_height, - Endian128 endian, ID3D12Resource* buffer, - uint32_t buffer_size, + uint32_t texture_pitch, uint32_t offset_x, + uint32_t offset_y, uint32_t resolve_width, + uint32_t resolve_height, Endian128 endian, + ID3D12Resource* buffer, uint32_t buffer_size, const D3D12_PLACED_SUBRESOURCE_FOOTPRINT& footprint); + inline bool IsResolutionScale2X() const { + return scaled_resolve_buffer_ != nullptr; + } + ID3D12Resource* GetScaledResolveBuffer() const { + return scaled_resolve_buffer_; + } + // Ensures the buffer tiles backing the range are resident. + bool EnsureScaledResolveBufferResident(uint32_t start_unscaled, + uint32_t length_unscaled); + void UseScaledResolveBufferForReading(); + void UseScaledResolveBufferForWriting(); + // Can't address more than 512 MB on Nvidia, so an offset is required. + void CreateScaledResolveBufferRawSRV(D3D12_CPU_DESCRIPTOR_HANDLE handle, + uint32_t first_unscaled_4kb_page, + uint32_t unscaled_4kb_page_count); + void CreateScaledResolveBufferRawUAV(D3D12_CPU_DESCRIPTOR_HANDLE handle, + uint32_t first_unscaled_4kb_page, + uint32_t unscaled_4kb_page_count); + bool RequestSwapTexture(D3D12_CPU_DESCRIPTOR_HANDLE handle, TextureFormat& format_out); @@ -169,6 +189,9 @@ class TextureCache { struct LoadModeInfo { const void* shader; size_t shader_size; + // Optional shader for loading 2x-scaled resolve targets. + const void* shader_2x; + size_t shader_2x_size; }; // Tiling modes for storing textures after resolving - needed only for the @@ -262,6 +285,8 @@ class TextureCache { // Whether this texture is signed and has a different host representation // than an unsigned view of the same guest texture. uint32_t signed_separate : 1; // 87 + // Whether this texture is a 2x-scaled resolve target. + uint32_t scaled_resolve : 1; // 88 }; struct { // The key used for unordered_multimap lookup. Single uint32_t instead of @@ -371,8 +396,8 @@ class TextureCache { uint32_t guest_base; // 0:2 - endianness (up to Xin128). // 3:8 - guest format (primarily for 16-bit textures). - // 9:31 - actual guest texture width. - uint32_t endian_format_guest_pitch; + // 10:31 - actual guest texture width. + uint32_t info; // Origin of the written data in the destination texture. X in the lower 16 // bits, Y in the upper. uint32_t offset; @@ -434,6 +459,8 @@ class TextureCache { return GetDXGIUnormFormat(key.format, key.width, key.height); } + static LoadMode GetLoadMode(TextureKey key); + // Converts a texture fetch constant to a texture key, normalizing and // validating the values, or creating an invalid key, and also gets the // swizzle and used signedness. @@ -454,7 +481,8 @@ class TextureCache { bool LoadTextureData(Texture* texture); // Shared memory callback for texture data invalidation. - static void WatchCallbackThunk(void* context, void* data, uint64_t argument); + static void WatchCallbackThunk(void* context, void* data, uint64_t argument, + bool invalidated_by_gpu); void WatchCallback(Texture* texture, bool is_mip); // Makes all bindings invalid. Also requesting textures after calling this @@ -462,6 +490,19 @@ class TextureCache { // an error. void ClearBindings(); + // Checks if there are any pages that contain scaled resolve data within the + // range. + bool IsRangeScaledResolved(uint32_t start_unscaled, uint32_t length_unscaled); + // Global shared memory invalidation callback for invalidating scaled resolved + // texture data. + static void ScaledResolveGlobalWatchCallbackThunk(void* context, + uint32_t address_first, + uint32_t address_last, + bool invalidated_by_gpu); + void ScaledResolveGlobalWatchCallback(uint32_t address_first, + uint32_t address_last, + bool invalidated_by_gpu); + static const HostFormat host_formats_[64]; static const char* const dimension_names_[4]; @@ -473,6 +514,8 @@ class TextureCache { static const LoadModeInfo load_mode_info_[]; ID3D12RootSignature* load_root_signature_ = nullptr; ID3D12PipelineState* load_pipelines_[size_t(LoadMode::kCount)] = {}; + // Load pipelines for 2x-scaled resolved targets. + ID3D12PipelineState* load_pipelines_2x_[size_t(LoadMode::kCount)] = {}; static const ResolveTileModeInfo resolve_tile_mode_info_[]; ID3D12RootSignature* resolve_tile_root_signature_ = nullptr; ID3D12PipelineState* @@ -498,6 +541,35 @@ class TextureCache { kUnsupportedSnormBit = kUnsupportedUnormBit << 1, }; uint8_t unsupported_format_features_used_[64]; + + // The 2 GB tiled buffer for resolved data with 2x resolution scale. + static constexpr uint32_t kScaledResolveBufferSizeLog2 = 31; + static constexpr uint32_t kScaledResolveBufferSize = + 1u << kScaledResolveBufferSizeLog2; + ID3D12Resource* scaled_resolve_buffer_ = nullptr; + D3D12_RESOURCE_STATES scaled_resolve_buffer_state_ = + D3D12_RESOURCE_STATE_UNORDERED_ACCESS; + // Not very big heaps (32 MB) because they are needed pretty sparsely. One + // scaled 1280x720x32bpp texture is slighly bigger than 14 MB. + static constexpr uint32_t kScaledResolveHeapSizeLog2 = 25; + static constexpr uint32_t kScaledResolveHeapSize = + 1 << kScaledResolveHeapSizeLog2; + static_assert( + (kScaledResolveHeapSize % D3D12_TILED_RESOURCE_TILE_SIZE_IN_BYTES) == 0, + "Scaled resolve heap size must be a multiple of Direct3D tile size"); + // Resident portions of the tiled buffer. + ID3D12Heap* scaled_resolve_heaps_[kScaledResolveBufferSize >> + kScaledResolveHeapSizeLog2] = {}; + // Bit vector storing whether each 4 KB physical memory page contains scaled + // resolve data. uint32_t rather than uint64_t because parts of it are sent to + // shaders. + // PROTECTED BY THE SHARED MEMORY WATCH MUTEX! + uint32_t* scaled_resolve_pages_ = nullptr; + // Second level of the bit vector for faster rejection of non-scaled textures. + // PROTECTED BY THE SHARED MEMORY WATCH MUTEX! + uint64_t scaled_resolve_pages_l2_[(512 << 20) >> (12 + 5 + 6)]; + // Global watch for scaled resolve data invalidation. + SharedMemory::GlobalWatchHandle scaled_resolve_global_watch_handle_ = nullptr; }; } // namespace d3d12 diff --git a/src/xenia/gpu/dxbc_shader_translator.cc b/src/xenia/gpu/dxbc_shader_translator.cc index 0f7694b83..816ff2292 100644 --- a/src/xenia/gpu/dxbc_shader_translator.cc +++ b/src/xenia/gpu/dxbc_shader_translator.cc @@ -1037,8 +1037,8 @@ void DxbcShaderTranslator::StartPixelShader() { ++stat_.instruction_count; ++stat_.float_instruction_count; } - // Floor VPOS so with AA, the resulting pixel corner/center is written, not - // the sample position (games likely don't expect it to be fractional). + // Floor VPOS so with SSAA, the resulting pixel corner/center is written, not + // the sample position. shader_code_.push_back(ENCODE_D3D10_SB_OPCODE_TYPE(D3D10_SB_OPCODE_ROUND_NI) | ENCODE_D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH(5)); shader_code_.push_back( @@ -1071,6 +1071,44 @@ void DxbcShaderTranslator::StartPixelShader() { shader_code_.push_back(kSysConst_PixelHalfPixelOffset_Vec); ++stat_.instruction_count; ++stat_.float_instruction_count; + // Undo 2x resolution scale in VPOS. + if (edram_rov_used_) { + // Get inverse of the width/height scale. + system_constants_used_ |= 1ull << kSysConst_EDRAMResolutionScaleLog2_Index; + shader_code_.push_back(ENCODE_D3D10_SB_OPCODE_TYPE(D3D10_SB_OPCODE_IMAD) | + ENCODE_D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH(11)); + shader_code_.push_back( + EncodeVectorMaskedOperand(D3D10_SB_OPERAND_TYPE_TEMP, 0b0100, 1)); + shader_code_.push_back(param_gen_value_temp); + shader_code_.push_back( + EncodeVectorSelectOperand(D3D10_SB_OPERAND_TYPE_CONSTANT_BUFFER, + kSysConst_EDRAMResolutionScaleLog2_Comp, 3)); + shader_code_.push_back(cbuffer_index_system_constants_); + shader_code_.push_back(uint32_t(CbufferRegister::kSystemConstants)); + shader_code_.push_back(kSysConst_EDRAMResolutionScaleLog2_Vec); + shader_code_.push_back( + EncodeScalarOperand(D3D10_SB_OPERAND_TYPE_IMMEDIATE32, 0)); + shader_code_.push_back(uint32_t(-(1 << 23))); + shader_code_.push_back( + EncodeScalarOperand(D3D10_SB_OPERAND_TYPE_IMMEDIATE32, 0)); + shader_code_.push_back(0x3F800000); + ++stat_.instruction_count; + ++stat_.int_instruction_count; + // Convert to guest pixels. + shader_code_.push_back(ENCODE_D3D10_SB_OPCODE_TYPE(D3D10_SB_OPCODE_MUL) | + ENCODE_D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH(7)); + shader_code_.push_back( + EncodeVectorMaskedOperand(D3D10_SB_OPERAND_TYPE_TEMP, 0b0011, 1)); + shader_code_.push_back(param_gen_value_temp); + shader_code_.push_back(EncodeVectorSwizzledOperand( + D3D10_SB_OPERAND_TYPE_INPUT, kSwizzleXYZW, 1)); + shader_code_.push_back(uint32_t(InOutRegister::kPSInPosition)); + shader_code_.push_back( + EncodeVectorReplicatedOperand(D3D10_SB_OPERAND_TYPE_TEMP, 2, 1)); + shader_code_.push_back(param_gen_value_temp); + ++stat_.instruction_count; + ++stat_.float_instruction_count; + } // Write point sprite coordinates to ZW. shader_code_.push_back(ENCODE_D3D10_SB_OPCODE_TYPE(D3D10_SB_OPCODE_MOV) | ENCODE_D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH(5)); @@ -2431,6 +2469,97 @@ void DxbcShaderTranslator::CompletePixelShader_WriteToROV_DepthStencil( ++stat_.instruction_count; ++stat_.int_instruction_count; + // Apply pixel width and height scale. + system_constants_used_ |= 1ull << kSysConst_EDRAMResolutionScaleLog2_Index; + for (uint32_t i = 0; i < 2; ++i) { + shader_code_.push_back(ENCODE_D3D10_SB_OPCODE_TYPE(D3D10_SB_OPCODE_ISHL) | + ENCODE_D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH(9)); + shader_code_.push_back( + EncodeVectorMaskedOperand(D3D10_SB_OPERAND_TYPE_TEMP, 0b1111, 1)); + shader_code_.push_back(edram_dword_offset_temp); + shader_code_.push_back(EncodeVectorSwizzledOperand( + D3D10_SB_OPERAND_TYPE_TEMP, kSwizzleXYZW, 1)); + shader_code_.push_back(edram_dword_offset_temp); + shader_code_.push_back(EncodeVectorReplicatedOperand( + D3D10_SB_OPERAND_TYPE_CONSTANT_BUFFER, + kSysConst_EDRAMResolutionScaleLog2_Comp, 3)); + shader_code_.push_back(cbuffer_index_system_constants_); + shader_code_.push_back(uint32_t(CbufferRegister::kSystemConstants)); + shader_code_.push_back(kSysConst_EDRAMResolutionScaleLog2_Vec); + ++stat_.instruction_count; + ++stat_.int_instruction_count; + } + + // Choose the pixel for 2x scaling. + uint32_t resolution_scale_pixel_temp = PushSystemTemp(); + + // 1) Convert pixel position to integer. + shader_code_.push_back(ENCODE_D3D10_SB_OPCODE_TYPE(D3D10_SB_OPCODE_FTOU) | + ENCODE_D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH(5)); + shader_code_.push_back( + EncodeVectorMaskedOperand(D3D10_SB_OPERAND_TYPE_TEMP, 0b0011, 1)); + shader_code_.push_back(resolution_scale_pixel_temp); + shader_code_.push_back(EncodeVectorSwizzledOperand( + D3D10_SB_OPERAND_TYPE_INPUT, kSwizzleXYZW, 1)); + shader_code_.push_back(uint32_t(InOutRegister::kPSInPosition)); + ++stat_.instruction_count; + ++stat_.conversion_instruction_count; + + // 2) For 2x, get the current pixel in the quad. For 1x, write 0 for it. + system_constants_used_ |= 1ull << kSysConst_EDRAMResolutionScaleLog2_Index; + shader_code_.push_back(ENCODE_D3D10_SB_OPCODE_TYPE(D3D10_SB_OPCODE_AND) | + ENCODE_D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH(9)); + shader_code_.push_back( + EncodeVectorMaskedOperand(D3D10_SB_OPERAND_TYPE_TEMP, 0b0011, 1)); + shader_code_.push_back(resolution_scale_pixel_temp); + shader_code_.push_back( + EncodeVectorSwizzledOperand(D3D10_SB_OPERAND_TYPE_TEMP, kSwizzleXYZW, 1)); + shader_code_.push_back(resolution_scale_pixel_temp); + shader_code_.push_back(EncodeVectorReplicatedOperand( + D3D10_SB_OPERAND_TYPE_CONSTANT_BUFFER, + kSysConst_EDRAMResolutionScaleLog2_Comp, 3)); + shader_code_.push_back(cbuffer_index_system_constants_); + shader_code_.push_back(uint32_t(CbufferRegister::kSystemConstants)); + shader_code_.push_back(kSysConst_EDRAMResolutionScaleLog2_Vec); + ++stat_.instruction_count; + ++stat_.uint_instruction_count; + + // 3) Calculate dword offset of the pixel in the quad. + shader_code_.push_back(ENCODE_D3D10_SB_OPCODE_TYPE(D3D10_SB_OPCODE_UMAD) | + ENCODE_D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH(9)); + shader_code_.push_back( + EncodeVectorMaskedOperand(D3D10_SB_OPERAND_TYPE_TEMP, 0b0001, 1)); + shader_code_.push_back(resolution_scale_pixel_temp); + shader_code_.push_back( + EncodeVectorSelectOperand(D3D10_SB_OPERAND_TYPE_TEMP, 1, 1)); + shader_code_.push_back(resolution_scale_pixel_temp); + shader_code_.push_back( + EncodeScalarOperand(D3D10_SB_OPERAND_TYPE_IMMEDIATE32, 0)); + shader_code_.push_back(2); + shader_code_.push_back( + EncodeVectorSelectOperand(D3D10_SB_OPERAND_TYPE_TEMP, 0, 1)); + shader_code_.push_back(resolution_scale_pixel_temp); + ++stat_.instruction_count; + ++stat_.uint_instruction_count; + + // 4) Add the quad pixel offset. + shader_code_.push_back(ENCODE_D3D10_SB_OPCODE_TYPE(D3D10_SB_OPCODE_IADD) | + ENCODE_D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH(7)); + shader_code_.push_back( + EncodeVectorMaskedOperand(D3D10_SB_OPERAND_TYPE_TEMP, 0b1111, 1)); + shader_code_.push_back(edram_dword_offset_temp); + shader_code_.push_back( + EncodeVectorSwizzledOperand(D3D10_SB_OPERAND_TYPE_TEMP, kSwizzleXYZW, 1)); + shader_code_.push_back(edram_dword_offset_temp); + shader_code_.push_back( + EncodeVectorReplicatedOperand(D3D10_SB_OPERAND_TYPE_TEMP, 0, 1)); + shader_code_.push_back(resolution_scale_pixel_temp); + ++stat_.instruction_count; + ++stat_.int_instruction_count; + + // Release resolution_scale_pixel_temp. + PopSystemTemp(); + // Load the previous depth/stencil values. uint32_t depth_values_temp = PushSystemTemp(); for (uint32_t i = 0; i < 4; ++i) { @@ -5132,6 +5261,26 @@ void DxbcShaderTranslator::CompletePixelShader_WriteToROV() { ++stat_.instruction_count; ++stat_.conversion_instruction_count; + // Get guest pixel position as if increased resolution is disabled - addresses + // within the quad with 2x resolution will be calculated later. + system_constants_used_ |= 1ull << kSysConst_EDRAMResolutionScaleLog2_Index; + shader_code_.push_back(ENCODE_D3D10_SB_OPCODE_TYPE(D3D10_SB_OPCODE_USHR) | + ENCODE_D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH(9)); + shader_code_.push_back( + EncodeVectorMaskedOperand(D3D10_SB_OPERAND_TYPE_TEMP, 0b0011, 1)); + shader_code_.push_back(edram_coord_pixel_temp); + shader_code_.push_back( + EncodeVectorSwizzledOperand(D3D10_SB_OPERAND_TYPE_TEMP, kSwizzleXYZW, 1)); + shader_code_.push_back(edram_coord_pixel_temp); + shader_code_.push_back(EncodeVectorReplicatedOperand( + D3D10_SB_OPERAND_TYPE_CONSTANT_BUFFER, + kSysConst_EDRAMResolutionScaleLog2_Comp, 3)); + shader_code_.push_back(cbuffer_index_system_constants_); + shader_code_.push_back(uint32_t(CbufferRegister::kSystemConstants)); + shader_code_.push_back(kSysConst_EDRAMResolutionScaleLog2_Vec); + ++stat_.instruction_count; + ++stat_.uint_instruction_count; + // Convert the position from pixels to samples. system_constants_used_ |= 1ull << kSysConst_SampleCountLog2_Index; shader_code_.push_back(ENCODE_D3D10_SB_OPCODE_TYPE(D3D10_SB_OPCODE_ISHL) | @@ -5590,6 +5739,112 @@ void DxbcShaderTranslator::CompletePixelShader_WriteToROV() { // Release rt_write_masks_temp. PopSystemTemp(); + // Apply pixel width and height scale. + system_constants_used_ |= 1ull << kSysConst_EDRAMResolutionScaleLog2_Index; + for (uint32_t i = 0; i < 2; ++i) { + shader_code_.push_back(ENCODE_D3D10_SB_OPCODE_TYPE(D3D10_SB_OPCODE_ISHL) | + ENCODE_D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH(9)); + shader_code_.push_back( + EncodeVectorMaskedOperand(D3D10_SB_OPERAND_TYPE_TEMP, 0b1111, 1)); + shader_code_.push_back(edram_coord_pixel_temp); + shader_code_.push_back(EncodeVectorSwizzledOperand( + D3D10_SB_OPERAND_TYPE_TEMP, kSwizzleXYZW, 1)); + shader_code_.push_back(edram_coord_pixel_temp); + shader_code_.push_back(EncodeVectorReplicatedOperand( + D3D10_SB_OPERAND_TYPE_CONSTANT_BUFFER, + kSysConst_EDRAMResolutionScaleLog2_Comp, 3)); + shader_code_.push_back(cbuffer_index_system_constants_); + shader_code_.push_back(uint32_t(CbufferRegister::kSystemConstants)); + shader_code_.push_back(kSysConst_EDRAMResolutionScaleLog2_Vec); + ++stat_.instruction_count; + ++stat_.int_instruction_count; + } + + // Choose the pixel for 2x scaling. + uint32_t resolution_scale_pixel_temp = PushSystemTemp(); + + // 1) Convert pixel position to integer. + shader_code_.push_back(ENCODE_D3D10_SB_OPCODE_TYPE(D3D10_SB_OPCODE_FTOU) | + ENCODE_D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH(5)); + shader_code_.push_back( + EncodeVectorMaskedOperand(D3D10_SB_OPERAND_TYPE_TEMP, 0b0011, 1)); + shader_code_.push_back(resolution_scale_pixel_temp); + shader_code_.push_back(EncodeVectorSwizzledOperand( + D3D10_SB_OPERAND_TYPE_INPUT, kSwizzleXYZW, 1)); + shader_code_.push_back(uint32_t(InOutRegister::kPSInPosition)); + ++stat_.instruction_count; + ++stat_.conversion_instruction_count; + + // 2) For 2x, get the current pixel in the quad. For 1x, write 0 for it. + system_constants_used_ |= 1ull << kSysConst_EDRAMResolutionScaleLog2_Index; + shader_code_.push_back(ENCODE_D3D10_SB_OPCODE_TYPE(D3D10_SB_OPCODE_AND) | + ENCODE_D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH(9)); + shader_code_.push_back( + EncodeVectorMaskedOperand(D3D10_SB_OPERAND_TYPE_TEMP, 0b0011, 1)); + shader_code_.push_back(resolution_scale_pixel_temp); + shader_code_.push_back(EncodeVectorSwizzledOperand( + D3D10_SB_OPERAND_TYPE_TEMP, kSwizzleXYZW, 1)); + shader_code_.push_back(resolution_scale_pixel_temp); + shader_code_.push_back(EncodeVectorReplicatedOperand( + D3D10_SB_OPERAND_TYPE_CONSTANT_BUFFER, + kSysConst_EDRAMResolutionScaleLog2_Comp, 3)); + shader_code_.push_back(cbuffer_index_system_constants_); + shader_code_.push_back(uint32_t(CbufferRegister::kSystemConstants)); + shader_code_.push_back(kSysConst_EDRAMResolutionScaleLog2_Vec); + ++stat_.instruction_count; + ++stat_.uint_instruction_count; + + // 3) Calculate dword offset of the pixel in the quad. + shader_code_.push_back(ENCODE_D3D10_SB_OPCODE_TYPE(D3D10_SB_OPCODE_UMAD) | + ENCODE_D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH(9)); + shader_code_.push_back( + EncodeVectorMaskedOperand(D3D10_SB_OPERAND_TYPE_TEMP, 0b0001, 1)); + shader_code_.push_back(resolution_scale_pixel_temp); + shader_code_.push_back( + EncodeVectorSelectOperand(D3D10_SB_OPERAND_TYPE_TEMP, 1, 1)); + shader_code_.push_back(resolution_scale_pixel_temp); + shader_code_.push_back( + EncodeScalarOperand(D3D10_SB_OPERAND_TYPE_IMMEDIATE32, 0)); + shader_code_.push_back(2); + shader_code_.push_back( + EncodeVectorSelectOperand(D3D10_SB_OPERAND_TYPE_TEMP, 0, 1)); + shader_code_.push_back(resolution_scale_pixel_temp); + ++stat_.instruction_count; + ++stat_.uint_instruction_count; + + // 4) Multiply the quad pixel offset by dword count per pixel for each RT. + shader_code_.push_back(ENCODE_D3D10_SB_OPCODE_TYPE(D3D10_SB_OPCODE_ISHL) | + ENCODE_D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH(7)); + shader_code_.push_back( + EncodeVectorMaskedOperand(D3D10_SB_OPERAND_TYPE_TEMP, 0b1111, 1)); + shader_code_.push_back(resolution_scale_pixel_temp); + shader_code_.push_back( + EncodeVectorReplicatedOperand(D3D10_SB_OPERAND_TYPE_TEMP, 0, 1)); + shader_code_.push_back(resolution_scale_pixel_temp); + shader_code_.push_back(EncodeVectorSwizzledOperand( + D3D10_SB_OPERAND_TYPE_TEMP, kSwizzleXYZW, 1)); + shader_code_.push_back(rt_64bpp_temp); + ++stat_.instruction_count; + ++stat_.int_instruction_count; + + // 5) Add the quad pixel offsets. + shader_code_.push_back(ENCODE_D3D10_SB_OPCODE_TYPE(D3D10_SB_OPCODE_IADD) | + ENCODE_D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH(7)); + shader_code_.push_back( + EncodeVectorMaskedOperand(D3D10_SB_OPERAND_TYPE_TEMP, 0b1111, 1)); + shader_code_.push_back(edram_coord_pixel_temp); + shader_code_.push_back(EncodeVectorSwizzledOperand( + D3D10_SB_OPERAND_TYPE_TEMP, kSwizzleXYZW, 1)); + shader_code_.push_back(edram_coord_pixel_temp); + shader_code_.push_back(EncodeVectorSwizzledOperand( + D3D10_SB_OPERAND_TYPE_TEMP, kSwizzleXYZW, 1)); + shader_code_.push_back(resolution_scale_pixel_temp); + ++stat_.instruction_count; + ++stat_.int_instruction_count; + + // Release resolution_scale_pixel_temp. + PopSystemTemp(); + // Get what render targets need gamma conversion. uint32_t rt_gamma_temp = PushSystemTemp(); system_constants_used_ |= 1ull << kSysConst_Flags_Index; @@ -5757,27 +6012,54 @@ void DxbcShaderTranslator::CompletePixelShader_WriteToROV() { ++stat_.instruction_count; ++stat_.uint_instruction_count; - // Get per-sample EDRAM addresses offsets. First, multiply the relative - // sample offset by sample size. + // Get per-sample EDRAM addresses offsets. uint32_t edram_coord_sample_temp = PushSystemTemp(); - shader_code_.push_back(ENCODE_D3D10_SB_OPCODE_TYPE(D3D10_SB_OPCODE_ISHL) | - ENCODE_D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH(10)); + + // 1) Choose the strides according to the resolution scale (1x or 2x2x). + system_constants_used_ |= 1ull + << kSysConst_EDRAMResolutionScaleLog2_Index; + shader_code_.push_back(ENCODE_D3D10_SB_OPCODE_TYPE(D3D10_SB_OPCODE_MOVC) | + ENCODE_D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH(17)); shader_code_.push_back( EncodeVectorMaskedOperand(D3D10_SB_OPERAND_TYPE_TEMP, 0b1111, 1)); shader_code_.push_back(edram_coord_sample_temp); + shader_code_.push_back(EncodeVectorReplicatedOperand( + D3D10_SB_OPERAND_TYPE_CONSTANT_BUFFER, + kSysConst_EDRAMResolutionScaleLog2_Comp, 3)); + shader_code_.push_back(cbuffer_index_system_constants_); + shader_code_.push_back(uint32_t(CbufferRegister::kSystemConstants)); + shader_code_.push_back(kSysConst_EDRAMResolutionScaleLog2_Vec); + shader_code_.push_back(EncodeVectorSwizzledOperand( + D3D10_SB_OPERAND_TYPE_IMMEDIATE32, kSwizzleXYZW, 0)); + shader_code_.push_back(0); + shader_code_.push_back(320); + shader_code_.push_back(4); + shader_code_.push_back(324); shader_code_.push_back(EncodeVectorSwizzledOperand( D3D10_SB_OPERAND_TYPE_IMMEDIATE32, kSwizzleXYZW, 0)); shader_code_.push_back(0); shader_code_.push_back(80); shader_code_.push_back(1); shader_code_.push_back(81); + ++stat_.instruction_count; + ++stat_.movc_instruction_count; + + // 2) Multiply the relative sample offset by sample size. + shader_code_.push_back(ENCODE_D3D10_SB_OPCODE_TYPE(D3D10_SB_OPCODE_ISHL) | + ENCODE_D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH(7)); + shader_code_.push_back( + EncodeVectorMaskedOperand(D3D10_SB_OPERAND_TYPE_TEMP, 0b1111, 1)); + shader_code_.push_back(edram_coord_sample_temp); + shader_code_.push_back(EncodeVectorSwizzledOperand( + D3D10_SB_OPERAND_TYPE_TEMP, kSwizzleXYZW, 1)); + shader_code_.push_back(edram_coord_sample_temp); shader_code_.push_back( EncodeVectorReplicatedOperand(D3D10_SB_OPERAND_TYPE_TEMP, i, 1)); shader_code_.push_back(rt_64bpp_temp); ++stat_.instruction_count; ++stat_.int_instruction_count; - // Add the EDRAM base for the render target to the sample EDRAM addresses. + // 3) Add the first sample EDRAM addresses to the sample offsets. shader_code_.push_back(ENCODE_D3D10_SB_OPCODE_TYPE(D3D10_SB_OPCODE_IADD) | ENCODE_D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH(7)); shader_code_.push_back( @@ -12978,6 +13260,7 @@ const DxbcShaderTranslator::SystemConstantRdef DxbcShaderTranslator:: {"xe_edram_poly_offset_front", RdefTypeIndex::kFloat2, 136, 8}, // vec4 9 {"xe_edram_poly_offset_back", RdefTypeIndex::kFloat2, 144, 8}, + {"xe_edram_resolution_scale_log2", RdefTypeIndex::kUint, 152, 4}, // vec4 10 {"xe_edram_stencil_reference", RdefTypeIndex::kUint, 160, 4}, {"xe_edram_stencil_read_mask", RdefTypeIndex::kUint, 164, 4}, diff --git a/src/xenia/gpu/dxbc_shader_translator.h b/src/xenia/gpu/dxbc_shader_translator.h index 8a9ca494d..1ce158e7b 100644 --- a/src/xenia/gpu/dxbc_shader_translator.h +++ b/src/xenia/gpu/dxbc_shader_translator.h @@ -324,7 +324,8 @@ class DxbcShaderTranslator : public ShaderTranslator { }; float edram_poly_offset_back[2]; }; - uint32_t padding_9[2]; + uint32_t edram_resolution_scale_log2; + uint32_t padding_9; // vec4 10 uint32_t edram_stencil_reference; @@ -576,10 +577,15 @@ class DxbcShaderTranslator : public ShaderTranslator { kSysConst_EDRAMPolyOffsetBack_Vec = kSysConst_EDRAMPolyOffsetFront_Vec + 1, kSysConst_EDRAMPolyOffsetBackScale_Comp = 0, kSysConst_EDRAMPolyOffsetBackOffset_Comp = 1, + kSysConst_EDRAMResolutionScaleLog2_Index = + kSysConst_EDRAMPolyOffsetBack_Index + 1, + kSysConst_EDRAMResolutionScaleLog2_Vec = kSysConst_EDRAMPolyOffsetBack_Vec, + kSysConst_EDRAMResolutionScaleLog2_Comp = 2, kSysConst_EDRAMStencilReference_Index = - kSysConst_EDRAMPolyOffsetBack_Index + 1, - kSysConst_EDRAMStencilReference_Vec = kSysConst_EDRAMPolyOffsetBack_Vec + 1, + kSysConst_EDRAMResolutionScaleLog2_Index + 1, + kSysConst_EDRAMStencilReference_Vec = + kSysConst_EDRAMResolutionScaleLog2_Vec + 1, kSysConst_EDRAMStencilReference_Comp = 0, kSysConst_EDRAMStencilReadMask_Index = kSysConst_EDRAMStencilReference_Index + 1, diff --git a/src/xenia/gpu/texture_util.cc b/src/xenia/gpu/texture_util.cc index 33f163fba..f46f1655d 100644 --- a/src/xenia/gpu/texture_util.cc +++ b/src/xenia/gpu/texture_util.cc @@ -164,6 +164,41 @@ bool GetPackedMipOffset(uint32_t width, uint32_t height, uint32_t depth, return true; } +void GetTextureTotalSize(Dimension dimension, uint32_t width, uint32_t height, + uint32_t depth, TextureFormat format, bool is_tiled, + bool packed_mips, uint32_t mip_max_level, + uint32_t* base_size, uint32_t* mip_size) { + bool is_3d = dimension == Dimension::k3D; + uint32_t width_blocks, height_blocks, depth_blocks; + if (base_size != nullptr) { + GetGuestMipBlocks(dimension, width, height, depth, format, 0, width_blocks, + height_blocks, depth_blocks); + uint32_t size = GetGuestMipSliceStorageSize( + width_blocks, height_blocks, depth_blocks, is_tiled, format, nullptr); + if (!is_3d) { + size *= depth; + } + *base_size = size; + } + if (mip_size != nullptr) { + mip_max_level = std::min( + mip_max_level, + GetSmallestMipLevel(width, height, is_3d ? depth : 1, packed_mips)); + uint32_t size = 0; + for (uint32_t i = 1; i <= mip_max_level; ++i) { + GetGuestMipBlocks(dimension, width, height, depth, format, i, + width_blocks, height_blocks, depth_blocks); + uint32_t level_size = GetGuestMipSliceStorageSize( + width_blocks, height_blocks, depth_blocks, is_tiled, format, nullptr); + if (!is_3d) { + level_size *= depth; + } + size += level_size; + } + *mip_size = size; + } +} + int32_t GetTiledOffset2D(int32_t x, int32_t y, uint32_t width, uint32_t log2_bpb) { // https://github.com/gildor2/UModel/blob/de8fbd3bc922427ea056b7340202dcdcc19ccff5/Unreal/UnTexture.cpp#L489 diff --git a/src/xenia/gpu/texture_util.h b/src/xenia/gpu/texture_util.h index 780e6de18..c30d4a149 100644 --- a/src/xenia/gpu/texture_util.h +++ b/src/xenia/gpu/texture_util.h @@ -64,6 +64,13 @@ inline uint32_t GetSmallestMipLevel(uint32_t width, uint32_t height, return smallest_mip; } +// Returns the total size of memory the texture uses starting from its base and +// mip addresses, in bytes (both are optional). +void GetTextureTotalSize(Dimension dimension, uint32_t width, uint32_t height, + uint32_t depth, TextureFormat format, bool is_tiled, + bool packed_mips, uint32_t mip_max_level, + uint32_t* base_size, uint32_t* mip_size); + int32_t GetTiledOffset2D(int32_t x, int32_t y, uint32_t width, uint32_t log2_bpb);