/* * Copyright 2016-2017 Józef Kucia for CodeWeavers * Copyright 2020-2021 Philip Rebohle for Valve Corporation * Copyright 2020-2021 Joshua Ashton for Valve Corporation * Copyright 2020-2021 Hans-Kristian Arntzen for Valve Corporation * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #define VKD3D_DBG_CHANNEL VKD3D_DBG_CHANNEL_API #include "d3d12_crosstest.h" static uint32_t compute_tile_count(uint32_t resource_size, uint32_t mip, uint32_t tile_size) { uint32_t mip_size = max(resource_size >> mip, 1u); return (mip_size / tile_size) + (mip_size % tile_size ? 1 : 0); } void test_get_resource_tiling(void) { D3D12_FEATURE_DATA_D3D12_OPTIONS options; D3D12_SUBRESOURCE_TILING tilings_alt[16]; D3D12_PACKED_MIP_INFO packed_mip_info; D3D12_SUBRESOURCE_TILING tilings[16]; UINT num_resource_tiles, num_tilings; D3D12_RESOURCE_DESC resource_desc; struct test_context_desc desc; struct test_context context; D3D12_TILE_SHAPE tile_shape; ID3D12Resource *resource; unsigned int i, j; HRESULT hr; static const struct { D3D12_RESOURCE_DIMENSION dim; DXGI_FORMAT format; UINT width; UINT height; UINT depth_or_array_layers; UINT mip_levels; UINT expected_tile_count; UINT expected_tiling_count; UINT expected_standard_mips; UINT tile_shape_w; UINT tile_shape_h; UINT tile_shape_d; D3D12_TILED_RESOURCES_TIER min_tier; bool todo_radv; } tests[] = { /* Test buffers */ { D3D12_RESOURCE_DIMENSION_BUFFER, DXGI_FORMAT_UNKNOWN, 1024, 1, 1, 1, 1, 1, 0, 65536, 1, 1, D3D12_TILED_RESOURCES_TIER_1 }, { D3D12_RESOURCE_DIMENSION_BUFFER, DXGI_FORMAT_UNKNOWN, 16*65536, 1, 1, 1, 16, 1, 0, 65536, 1, 1, D3D12_TILED_RESOURCES_TIER_1 }, /* Test small resource behavior */ { D3D12_RESOURCE_DIMENSION_TEXTURE2D, DXGI_FORMAT_R8_UNORM, 1, 1, 1, 1, 1, 1, 0, 256, 256, 1, D3D12_TILED_RESOURCES_TIER_1 }, { D3D12_RESOURCE_DIMENSION_TEXTURE2D, DXGI_FORMAT_R8_UNORM, 2, 2, 1, 2, 1, 2, 0, 256, 256, 1, D3D12_TILED_RESOURCES_TIER_1 }, { D3D12_RESOURCE_DIMENSION_TEXTURE2D, DXGI_FORMAT_R8_UNORM, 4, 4, 1, 3, 1, 3, 0, 256, 256, 1, D3D12_TILED_RESOURCES_TIER_1 }, { D3D12_RESOURCE_DIMENSION_TEXTURE2D, DXGI_FORMAT_R8_UNORM, 8, 8, 1, 4, 1, 4, 0, 256, 256, 1, D3D12_TILED_RESOURCES_TIER_1 }, { D3D12_RESOURCE_DIMENSION_TEXTURE2D, DXGI_FORMAT_R8_UNORM, 16, 16, 1, 5, 1, 5, 0, 256, 256, 1, D3D12_TILED_RESOURCES_TIER_1 }, { D3D12_RESOURCE_DIMENSION_TEXTURE2D, DXGI_FORMAT_R8_UNORM, 32, 32, 1, 6, 1, 6, 0, 256, 256, 1, D3D12_TILED_RESOURCES_TIER_1 }, { D3D12_RESOURCE_DIMENSION_TEXTURE2D, DXGI_FORMAT_R8_UNORM, 64, 64, 1, 7, 1, 7, 0, 256, 256, 1, D3D12_TILED_RESOURCES_TIER_1 }, { D3D12_RESOURCE_DIMENSION_TEXTURE2D, DXGI_FORMAT_R8_UNORM, 128, 128, 1, 8, 1, 8, 0, 256, 256, 1, D3D12_TILED_RESOURCES_TIER_1 }, { D3D12_RESOURCE_DIMENSION_TEXTURE2D, DXGI_FORMAT_R8_UNORM, 256, 256, 1, 9, 2, 9, 1, 256, 256, 1, D3D12_TILED_RESOURCES_TIER_1 }, /* Test various image formats */ { D3D12_RESOURCE_DIMENSION_TEXTURE2D, DXGI_FORMAT_R8_UNORM, 512, 512, 1, 1, 4, 1, 1, 256, 256, 1, D3D12_TILED_RESOURCES_TIER_1 }, { D3D12_RESOURCE_DIMENSION_TEXTURE2D, DXGI_FORMAT_R8G8_UNORM, 512, 512, 1, 1, 8, 1, 1, 256, 128, 1, D3D12_TILED_RESOURCES_TIER_1 }, { D3D12_RESOURCE_DIMENSION_TEXTURE2D, DXGI_FORMAT_R8G8B8A8_UNORM, 512, 512, 1, 1, 16, 1, 1, 128, 128, 1, D3D12_TILED_RESOURCES_TIER_1 }, { D3D12_RESOURCE_DIMENSION_TEXTURE2D, DXGI_FORMAT_R16G16B16A16_UNORM, 512, 512, 1, 1, 32, 1, 1, 128, 64, 1, D3D12_TILED_RESOURCES_TIER_1 }, { D3D12_RESOURCE_DIMENSION_TEXTURE2D, DXGI_FORMAT_R32G32B32A32_FLOAT, 512, 512, 1, 1, 64, 1, 1, 64, 64, 1, D3D12_TILED_RESOURCES_TIER_1 }, { D3D12_RESOURCE_DIMENSION_TEXTURE2D, DXGI_FORMAT_D16_UNORM, 512, 512, 1, 1, 8, 1, 1, 256, 128, 1, D3D12_TILED_RESOURCES_TIER_1, true }, { D3D12_RESOURCE_DIMENSION_TEXTURE2D, DXGI_FORMAT_D32_FLOAT, 512, 512, 1, 1, 16, 1, 1, 128, 128, 1, D3D12_TILED_RESOURCES_TIER_1, true }, { D3D12_RESOURCE_DIMENSION_TEXTURE2D, DXGI_FORMAT_BC1_UNORM, 512, 512, 1, 1, 2, 1, 1, 512, 256, 1, D3D12_TILED_RESOURCES_TIER_1 }, { D3D12_RESOURCE_DIMENSION_TEXTURE2D, DXGI_FORMAT_BC3_UNORM, 512, 512, 1, 1, 4, 1, 1, 256, 256, 1, D3D12_TILED_RESOURCES_TIER_1 }, /* Test rectangular textures */ { D3D12_RESOURCE_DIMENSION_TEXTURE2D, DXGI_FORMAT_R8G8B8A8_UNORM, 1024, 256, 1, 1, 16, 1, 1, 128, 128, 1, D3D12_TILED_RESOURCES_TIER_1 }, { D3D12_RESOURCE_DIMENSION_TEXTURE2D, DXGI_FORMAT_R8G8B8A8_UNORM, 256, 1024, 1, 1, 16, 1, 1, 128, 128, 1, D3D12_TILED_RESOURCES_TIER_1 }, { D3D12_RESOURCE_DIMENSION_TEXTURE2D, DXGI_FORMAT_R8G8B8A8_UNORM, 192, 128, 1, 1, 2, 1, 1, 128, 128, 1, D3D12_TILED_RESOURCES_TIER_2 }, { D3D12_RESOURCE_DIMENSION_TEXTURE2D, DXGI_FORMAT_R8G8B8A8_UNORM, 128, 192, 1, 1, 2, 1, 1, 128, 128, 1, D3D12_TILED_RESOURCES_TIER_2 }, { D3D12_RESOURCE_DIMENSION_TEXTURE2D, DXGI_FORMAT_R8G8B8A8_UNORM, 320, 192, 1, 1, 6, 1, 1, 128, 128, 1, D3D12_TILED_RESOURCES_TIER_2 }, /* Test array layers and packed mip levels */ { D3D12_RESOURCE_DIMENSION_TEXTURE2D, DXGI_FORMAT_R8G8B8A8_UNORM, 128, 128, 16, 1, 16, 16, 1, 128, 128, 1, D3D12_TILED_RESOURCES_TIER_1 }, { D3D12_RESOURCE_DIMENSION_TEXTURE2D, DXGI_FORMAT_R8G8B8A8_UNORM, 128, 128, 1, 8, 1, 8, 1, 128, 128, 1, D3D12_TILED_RESOURCES_TIER_1 }, { D3D12_RESOURCE_DIMENSION_TEXTURE2D, DXGI_FORMAT_R8G8B8A8_UNORM, 512, 512, 1, 10, 21, 10, 3, 128, 128, 1, D3D12_TILED_RESOURCES_TIER_1 }, { D3D12_RESOURCE_DIMENSION_TEXTURE2D, DXGI_FORMAT_R8G8B8A8_UNORM, 512, 512, 4, 3, 84, 12, 3, 128, 128, 1, D3D12_TILED_RESOURCES_TIER_1 }, { D3D12_RESOURCE_DIMENSION_TEXTURE2D, DXGI_FORMAT_R8G8B8A8_UNORM, 64, 64, 1, 1, 1, 1, 0, 128, 128, 1, D3D12_TILED_RESOURCES_TIER_1 }, /* Test 3D textures */ { D3D12_RESOURCE_DIMENSION_TEXTURE3D, DXGI_FORMAT_R8_UNORM, 64, 64, 64, 1, 4, 1, 1, 64, 32, 32, D3D12_TILED_RESOURCES_TIER_3 }, { D3D12_RESOURCE_DIMENSION_TEXTURE3D, DXGI_FORMAT_R8G8_UNORM, 64, 64, 64, 1, 8, 1, 1, 32, 32, 32, D3D12_TILED_RESOURCES_TIER_3 }, { D3D12_RESOURCE_DIMENSION_TEXTURE3D, DXGI_FORMAT_R8G8B8A8_UNORM, 64, 64, 64, 1, 16, 1, 1, 32, 32, 16, D3D12_TILED_RESOURCES_TIER_3 }, { D3D12_RESOURCE_DIMENSION_TEXTURE3D, DXGI_FORMAT_R32G32B32A32_FLOAT, 64, 64, 64, 3, 73, 3, 3, 16, 16, 16, D3D12_TILED_RESOURCES_TIER_3 }, }; memset(&desc, 0, sizeof(desc)); desc.rt_width = 640; desc.rt_height = 480; desc.rt_format = DXGI_FORMAT_R8G8B8A8_UNORM; if (!init_test_context(&context, &desc)) return; hr = ID3D12Device_CheckFeatureSupport(context.device, D3D12_FEATURE_D3D12_OPTIONS, &options, sizeof(options)); ok(hr == S_OK, "Failed to check feature support, hr %#x.\n", hr); if (!options.TiledResourcesTier) { skip("Tiled resources not supported by device.\n"); destroy_test_context(&context); return; } /* Test behaviour with various parameter combinations */ resource_desc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D; resource_desc.Alignment = 0; resource_desc.Width = 512; resource_desc.Height = 512; resource_desc.DepthOrArraySize = 1; resource_desc.MipLevels = 10; resource_desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; resource_desc.SampleDesc.Count = 1; resource_desc.SampleDesc.Quality = 0; resource_desc.Layout = D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE; resource_desc.Flags = D3D12_RESOURCE_FLAG_NONE; hr = ID3D12Device_CreateReservedResource(context.device, &resource_desc, D3D12_RESOURCE_STATE_GENERIC_READ, NULL, &IID_ID3D12Resource, (void **)&resource); ok(hr == S_OK, "Failed to create reserved resource, hr %#x.\n", hr); /* This is nonsense, but it doesn't crash or generate errors. */ ID3D12Device_GetResourceTiling(context.device, resource, NULL, NULL, NULL, NULL, 0, NULL); /* If num_tilings is NULL, tilings_alt is ignored. */ memset(tilings, 0, sizeof(tilings)); memset(tilings_alt, 0, sizeof(tilings_alt)); ID3D12Device_GetResourceTiling(context.device, resource, NULL, NULL, NULL, NULL, 0, tilings_alt); ok(memcmp(tilings, tilings_alt, sizeof(tilings_alt)) == 0, "Mismatch.\n"); num_tilings = 0; ID3D12Device_GetResourceTiling(context.device, resource, NULL, NULL, NULL, &num_tilings, 0, NULL); ok(num_tilings == 0, "Unexpected tiling count %u.\n", num_tilings); num_tilings = ARRAY_SIZE(tilings); ID3D12Device_GetResourceTiling(context.device, resource, NULL, NULL, NULL, &num_tilings, 10, tilings); ok(num_tilings == 0, "Unexpected tiling count %u.\n", num_tilings); num_tilings = ARRAY_SIZE(tilings); ID3D12Device_GetResourceTiling(context.device, resource, NULL, NULL, NULL, &num_tilings, 2, tilings); ok(num_tilings == 8, "Unexpected tiling count %u.\n", num_tilings); ok(tilings[0].StartTileIndexInOverallResource == 20, "Unexpected start tile index %u.\n", tilings[0].StartTileIndexInOverallResource); num_tilings = 1; memset(&tilings, 0xaa, sizeof(tilings)); ID3D12Device_GetResourceTiling(context.device, resource, NULL, NULL, NULL, &num_tilings, 2, tilings); ok(num_tilings == 1, "Unexpected tiling count %u.\n", num_tilings); ok(tilings[0].StartTileIndexInOverallResource == 20, "Unexpected start tile index %u.\n", tilings[0].StartTileIndexInOverallResource); ok(tilings[1].StartTileIndexInOverallResource == 0xaaaaaaaa, "Tiling array got modified.\n"); ID3D12Resource_Release(resource); /* Test actual tiling properties */ for (i = 0; i < ARRAY_SIZE(tests); i++) { unsigned int tile_index = 0; vkd3d_test_set_context("test %u", i); if (tests[i].min_tier > options.TiledResourcesTier) { skip("Tiled resources tier %u not supported.\n", tests[i].min_tier); continue; } memset(&packed_mip_info, 0xaa, sizeof(packed_mip_info)); memset(&tile_shape, 0xaa, sizeof(tile_shape)); memset(&tilings, 0xaa, sizeof(tilings)); num_resource_tiles = 0xdeadbeef; num_tilings = ARRAY_SIZE(tilings); resource_desc.Dimension = tests[i].dim; resource_desc.Alignment = 0; resource_desc.Width = tests[i].width; resource_desc.Height = tests[i].height; resource_desc.DepthOrArraySize = tests[i].depth_or_array_layers; resource_desc.MipLevels = tests[i].mip_levels; resource_desc.Format = tests[i].format; resource_desc.SampleDesc.Count = 1; resource_desc.SampleDesc.Quality = 0; resource_desc.Layout = D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE; resource_desc.Flags = D3D12_RESOURCE_FLAG_NONE; if (tests[i].dim == D3D12_RESOURCE_DIMENSION_BUFFER) resource_desc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; hr = ID3D12Device_CreateReservedResource(context.device, &resource_desc, D3D12_RESOURCE_STATE_GENERIC_READ, NULL, &IID_ID3D12Resource, (void **)&resource); todo_if(is_radv_device(context.device) && tests[i].todo_radv) ok(hr == S_OK, "Failed to create reserved resource, hr %#x.\n", hr); if (hr != S_OK) continue; ID3D12Device_GetResourceTiling(context.device, resource, &num_resource_tiles, &packed_mip_info, &tile_shape, &num_tilings, 0, tilings); ok(num_resource_tiles >= tests[i].expected_tile_count, "Unexpected resource tile count %u.\n", num_resource_tiles); ok(num_tilings == tests[i].expected_tiling_count, "Unexpected subresource tiling count %u.\n", num_tilings); ok(packed_mip_info.NumStandardMips >= tests[i].expected_standard_mips, "Unexpected standard mip count %u.\n", packed_mip_info.NumStandardMips); ok(packed_mip_info.NumPackedMips == (tests[i].dim == D3D12_RESOURCE_DIMENSION_BUFFER ? 0 : tests[i].mip_levels - packed_mip_info.NumStandardMips), "Unexpected packed mip count %u.\n", packed_mip_info.NumPackedMips); ok((packed_mip_info.NumTilesForPackedMips == 0) == (packed_mip_info.NumPackedMips == 0), "Unexpected packed tile count %u.\n", packed_mip_info.NumTilesForPackedMips); /* Docs say that tile shape should be cleared to zero if there is no standard mip, but drivers don't seem to care about this. */ ok(tile_shape.WidthInTexels == tests[i].tile_shape_w, "Unexpected tile width %u.\n", tile_shape.WidthInTexels); ok(tile_shape.HeightInTexels == tests[i].tile_shape_h, "Unexpected tile height %u.\n", tile_shape.HeightInTexels); ok(tile_shape.DepthInTexels == tests[i].tile_shape_d, "Unexpected tile depth %u.\n", tile_shape.DepthInTexels); for (j = 0; j < tests[i].expected_tiling_count; j++) { uint32_t mip = j % tests[i].mip_levels; if (mip < packed_mip_info.NumStandardMips || !packed_mip_info.NumPackedMips) { uint32_t expected_w = compute_tile_count(tests[i].width, mip, tests[i].tile_shape_w); uint32_t expected_h = compute_tile_count(tests[i].height, mip, tests[i].tile_shape_h); uint32_t expected_d = 1; if (tests[i].dim == D3D12_RESOURCE_DIMENSION_TEXTURE3D) expected_d = compute_tile_count(tests[i].depth_or_array_layers, mip, tests[i].tile_shape_d); ok(tilings[j].WidthInTiles == expected_w, "Unexpected width %u for subresource %u.\n", tilings[j].WidthInTiles, j); ok(tilings[j].HeightInTiles == expected_h, "Unexpected width %u for subresource %u.\n", tilings[j].HeightInTiles, j); ok(tilings[j].DepthInTiles == expected_d, "Unexpected width %u for subresource %u.\n", tilings[j].DepthInTiles, j); ok(tilings[j].StartTileIndexInOverallResource == tile_index, "Unexpected start tile index %u for subresource %u.\n", tilings[j].StartTileIndexInOverallResource, j); tile_index += tilings[j].WidthInTiles * tilings[j].HeightInTiles * tilings[j].DepthInTiles; } else { ok(!tilings[j].WidthInTiles && !tilings[j].HeightInTiles && !tilings[j].DepthInTiles, "Unexpected tile count (%u,%u,%u) for packed subresource %u.\n", tilings[j].WidthInTiles, tilings[j].HeightInTiles, tilings[j].DepthInTiles, j); ok(tilings[j].StartTileIndexInOverallResource == 0xffffffff, "Unexpected start tile index %u for packed subresource %u.\n", tilings[j].StartTileIndexInOverallResource, j); } } ok(num_resource_tiles == tile_index + packed_mip_info.NumTilesForPackedMips, "Unexpected resource tile count %u.\n", num_resource_tiles); ok(packed_mip_info.StartTileIndexInOverallResource == (packed_mip_info.NumPackedMips ? tile_index : 0), "Unexpected mip tail start tile index %u.\n", packed_mip_info.StartTileIndexInOverallResource); ID3D12Resource_Release(resource); } vkd3d_test_set_context(NULL); destroy_test_context(&context); } static void set_region_offset(D3D12_TILED_RESOURCE_COORDINATE *region, uint32_t x, uint32_t y, uint32_t z, uint32_t subresource) { region->X = x; region->Y = y; region->Z = z; region->Subresource = subresource; } static void set_region_size(D3D12_TILE_REGION_SIZE *region, uint32_t num_tiles, bool use_box, uint32_t w, uint32_t h, uint32_t d) { region->NumTiles = num_tiles; region->UseBox = use_box; region->Width = w; region->Height = h; region->Depth = d; } void test_update_tile_mappings(void) { D3D12_TILED_RESOURCE_COORDINATE region_offsets[8]; ID3D12PipelineState *check_texture_3d_pipeline; D3D12_ROOT_SIGNATURE_DESC root_signature_desc; ID3D12PipelineState *clear_texture_pipeline; ID3D12PipelineState *check_texture_pipeline; ID3D12PipelineState *check_buffer_pipeline; ID3D12Resource *resource, *readback_buffer; D3D12_UNORDERED_ACCESS_VIEW_DESC uav_desc; ID3D12DescriptorHeap *cpu_heap, *gpu_heap; ID3D12RootSignature *clear_root_signature; D3D12_FEATURE_DATA_D3D12_OPTIONS options; D3D12_SHADER_RESOURCE_VIEW_DESC srv_desc; D3D12_DESCRIPTOR_RANGE descriptor_range; D3D12_ROOT_PARAMETER root_parameters[2]; D3D12_TILE_REGION_SIZE region_sizes[8]; D3D12_GPU_VIRTUAL_ADDRESS readback_va; D3D12_PACKED_MIP_INFO packed_mip_info; D3D12_HEAP_PROPERTIES heap_properties; D3D12_SUBRESOURCE_TILING tilings[10]; D3D12_TILE_RANGE_FLAGS tile_flags[8]; ID3D12RootSignature *root_signature; D3D12_RESOURCE_DESC resource_desc; struct test_context_desc desc; struct resource_readback rb; struct test_context context; D3D12_TILE_SHAPE tile_shape; unsigned int i, j, x, y, z; D3D12_HEAP_DESC heap_desc; UINT tile_offsets[8]; UINT tile_counts[8]; ID3D12Heap *heap; UINT num_tilings; D3D12_BOX box; HRESULT hr; #if 0 StructuredBuffer tiled_buffer : register(t0); RWStructuredBuffer out_buffer : register(u0); [numthreads(64, 1, 1)] void main(uint3 thread_id : SV_DispatchThreadID) { out_buffer[thread_id.x] = tiled_buffer[16384 * thread_id.x]; } #endif static const DWORD cs_buffer_code[] = { 0x43425844, 0xa8625c41, 0xfd85df89, 0xcedb7945, 0x0e3444ea, 0x00000001, 0x00000108, 0x00000003, 0x0000002c, 0x0000003c, 0x0000004c, 0x4e475349, 0x00000008, 0x00000000, 0x00000008, 0x4e47534f, 0x00000008, 0x00000000, 0x00000008, 0x58454853, 0x000000b4, 0x00050050, 0x0000002d, 0x0100086a, 0x040000a2, 0x00107000, 0x00000000, 0x00000004, 0x0400009e, 0x0011e000, 0x00000000, 0x00000004, 0x0200005f, 0x00020012, 0x02000068, 0x00000001, 0x0400009b, 0x00000040, 0x00000001, 0x00000001, 0x06000029, 0x00100012, 0x00000000, 0x0002000a, 0x00004001, 0x0000000e, 0x8b0000a7, 0x80002302, 0x00199983, 0x00100012, 0x00000000, 0x0010000a, 0x00000000, 0x00004001, 0x00000000, 0x00107006, 0x00000000, 0x080000a8, 0x0011e012, 0x00000000, 0x0002000a, 0x00004001, 0x00000000, 0x0010000a, 0x00000000, 0x0100003e, }; #if 0 Texture2D tiled_texture : register(t0); RWStructuredBuffer out_buffer : register(u0); [numthreads(28,1,1)] void main(uint3 thread_id : SV_DispatchThreadID) { uint2 tile_size = uint2(128, 128); uint tile_index = 0; uint tile_count = 4; uint mip_count = 10; uint mip_level = 0; while (thread_id.x >= tile_index + tile_count * tile_count && mip_level < mip_count) { tile_index += tile_count * tile_count; tile_count = max(tile_count / 2, 1); mip_level += 1; } uint2 tile_coord; tile_coord.x = (thread_id.x - tile_index) % tile_count; tile_coord.y = (thread_id.x - tile_index) / tile_count; out_buffer[thread_id.x] = tiled_texture.mips[mip_level][tile_coord * tile_size]; } #endif static const DWORD cs_texture_code[] = { 0x43425844, 0x03e118db, 0xda7deb90, 0xedb39031, 0x6b646a0b, 0x00000001, 0x00000288, 0x00000003, 0x0000002c, 0x0000003c, 0x0000004c, 0x4e475349, 0x00000008, 0x00000000, 0x00000008, 0x4e47534f, 0x00000008, 0x00000000, 0x00000008, 0x58454853, 0x00000234, 0x00050050, 0x0000008d, 0x0100086a, 0x04001858, 0x00107000, 0x00000000, 0x00004444, 0x0400009e, 0x0011e000, 0x00000000, 0x00000004, 0x0200005f, 0x00020012, 0x02000068, 0x00000003, 0x0400009b, 0x0000001c, 0x00000001, 0x00000001, 0x08000036, 0x00100072, 0x00000000, 0x00004002, 0x00000000, 0x00000004, 0x00000000, 0x00000000, 0x01000030, 0x09000023, 0x00100082, 0x00000000, 0x0010001a, 0x00000000, 0x0010001a, 0x00000000, 0x0010000a, 0x00000000, 0x06000050, 0x00100012, 0x00000001, 0x0002000a, 0x0010003a, 0x00000000, 0x0700004f, 0x00100022, 0x00000001, 0x0010002a, 0x00000000, 0x00004001, 0x0000000a, 0x07000001, 0x00100012, 0x00000001, 0x0010001a, 0x00000001, 0x0010000a, 0x00000001, 0x03000003, 0x0010000a, 0x00000001, 0x07000055, 0x00100012, 0x00000001, 0x0010001a, 0x00000000, 0x00004001, 0x00000001, 0x07000053, 0x00100022, 0x00000000, 0x0010000a, 0x00000001, 0x00004001, 0x00000001, 0x0700001e, 0x00100042, 0x00000000, 0x0010002a, 0x00000000, 0x00004001, 0x00000001, 0x05000036, 0x00100012, 0x00000000, 0x0010003a, 0x00000000, 0x01000016, 0x05000036, 0x001000c2, 0x00000001, 0x00100aa6, 0x00000000, 0x0700001e, 0x00100012, 0x00000000, 0x8010000a, 0x00000041, 0x00000000, 0x0002000a, 0x0900004e, 0x00100012, 0x00000000, 0x00100012, 0x00000002, 0x0010000a, 0x00000000, 0x0010001a, 0x00000000, 0x05000036, 0x00100022, 0x00000002, 0x0010000a, 0x00000000, 0x0a000029, 0x00100032, 0x00000001, 0x00100046, 0x00000002, 0x00004002, 0x00000007, 0x00000007, 0x00000000, 0x00000000, 0x8900002d, 0x800000c2, 0x00111103, 0x00100012, 0x00000000, 0x00100e46, 0x00000001, 0x00107e46, 0x00000000, 0x080000a8, 0x0011e012, 0x00000000, 0x0002000a, 0x00004001, 0x00000000, 0x0010000a, 0x00000000, 0x0100003e, }; #if 0 Texture3D tiled_texture : register(t0); RWStructuredBuffer out_buffer : register(u0); [numthreads(9,1,1)] void main(uint3 thread_id : SV_DispatchThreadID) { uint3 tile_size = uint3(32, 32, 16); uint tile_index = 0; uint tile_count = 2; uint mip_count = 2; uint mip_level = 0; while (thread_id.x >= tile_index + tile_count * tile_count * tile_count && mip_level < mip_count) { tile_index += tile_count * tile_count * tile_count; tile_count = max(tile_count / 2, 1); mip_level += 1; } uint3 tile_coord; tile_coord.x = (thread_id.x - tile_index) % tile_count; tile_coord.y = ((thread_id.x - tile_index) / tile_count) % tile_count; tile_coord.z = (thread_id.x - tile_index) / (tile_count * tile_count); out_buffer[thread_id.x] = tiled_texture.mips[mip_level][tile_coord * tile_size]; } #endif static const DWORD cs_texture_3d_code[] = { 0x43425844, 0x71b4eb36, 0x2c65e68d, 0x7763693f, 0xfd4eafc6, 0x00000001, 0x000002f4, 0x00000003, 0x0000002c, 0x0000003c, 0x0000004c, 0x4e475349, 0x00000008, 0x00000000, 0x00000008, 0x4e47534f, 0x00000008, 0x00000000, 0x00000008, 0x58454853, 0x000002a0, 0x00050050, 0x000000a8, 0x0100086a, 0x04002858, 0x00107000, 0x00000000, 0x00004444, 0x0400009e, 0x0011e000, 0x00000000, 0x00000004, 0x0200005f, 0x00020012, 0x02000068, 0x00000004, 0x0400009b, 0x00000009, 0x00000001, 0x00000001, 0x08000036, 0x00100032, 0x00000000, 0x00004002, 0x00000000, 0x00000002, 0x00000000, 0x00000000, 0x05000036, 0x00100082, 0x00000001, 0x00004001, 0x00000000, 0x01000030, 0x08000026, 0x0000d000, 0x00100042, 0x00000000, 0x0010001a, 0x00000000, 0x0010001a, 0x00000000, 0x09000023, 0x00100042, 0x00000000, 0x0010002a, 0x00000000, 0x0010001a, 0x00000000, 0x0010000a, 0x00000000, 0x06000050, 0x00100082, 0x00000000, 0x0002000a, 0x0010002a, 0x00000000, 0x0700004f, 0x00100012, 0x00000002, 0x0010003a, 0x00000001, 0x00004001, 0x00000002, 0x07000001, 0x00100082, 0x00000000, 0x0010003a, 0x00000000, 0x0010000a, 0x00000002, 0x03000003, 0x0010003a, 0x00000000, 0x07000055, 0x00100082, 0x00000000, 0x0010001a, 0x00000000, 0x00004001, 0x00000001, 0x07000053, 0x00100022, 0x00000000, 0x0010003a, 0x00000000, 0x00004001, 0x00000001, 0x0700001e, 0x00100082, 0x00000001, 0x0010003a, 0x00000001, 0x00004001, 0x00000001, 0x05000036, 0x00100012, 0x00000000, 0x0010002a, 0x00000000, 0x01000016, 0x0700001e, 0x00100012, 0x00000000, 0x8010000a, 0x00000041, 0x00000000, 0x0002000a, 0x0900004e, 0x00100012, 0x00000002, 0x00100012, 0x00000003, 0x0010000a, 0x00000000, 0x0010001a, 0x00000000, 0x0800004e, 0x0000d000, 0x00100022, 0x00000003, 0x0010000a, 0x00000002, 0x0010001a, 0x00000000, 0x08000026, 0x0000d000, 0x00100022, 0x00000000, 0x0010001a, 0x00000000, 0x0010001a, 0x00000000, 0x0800004e, 0x00100042, 0x00000003, 0x0000d000, 0x0010000a, 0x00000000, 0x0010001a, 0x00000000, 0x0a000029, 0x00100072, 0x00000001, 0x00100246, 0x00000003, 0x00004002, 0x00000005, 0x00000005, 0x00000004, 0x00000000, 0x8900002d, 0x80000142, 0x00111103, 0x00100012, 0x00000000, 0x00100e46, 0x00000001, 0x00107e46, 0x00000000, 0x080000a8, 0x0011e012, 0x00000000, 0x0002000a, 0x00004001, 0x00000000, 0x0010000a, 0x00000000, 0x0100003e, }; #if 0 RWTexture3D uav : register(u0); cbuffer clear_args { uint3 offset; uint value; }; [numthreads(4, 4, 4)] void main(uint3 coord : SV_DispatchThreadID) { uav[offset + coord] = value; } #endif static const DWORD cs_clear_code[] = { 0x43425844, 0x288d0bcd, 0xbe5e644d, 0x95665c2e, 0xd8f02c36, 0x00000001, 0x000000e0, 0x00000003, 0x0000002c, 0x0000003c, 0x0000004c, 0x4e475349, 0x00000008, 0x00000000, 0x00000008, 0x4e47534f, 0x00000008, 0x00000000, 0x00000008, 0x58454853, 0x0000008c, 0x00050050, 0x00000023, 0x0100086a, 0x04000059, 0x00208e46, 0x00000000, 0x00000001, 0x0400289c, 0x0011e000, 0x00000000, 0x00004444, 0x0200005f, 0x00020072, 0x02000068, 0x00000001, 0x0400009b, 0x00000004, 0x00000004, 0x00000004, 0x0700001e, 0x001000f2, 0x00000000, 0x00020a46, 0x00208a46, 0x00000000, 0x00000000, 0x080000a4, 0x0011e0f2, 0x00000000, 0x00100e46, 0x00000000, 0x00208ff6, 0x00000000, 0x00000000, 0x0100003e, }; static const D3D12_SHADER_BYTECODE cs_texture = { cs_texture_code, sizeof(cs_texture_code) }; static const D3D12_SHADER_BYTECODE cs_texture_3d = { cs_texture_3d_code, sizeof(cs_texture_3d_code) }; static const D3D12_SHADER_BYTECODE cs_buffer = { cs_buffer_code, sizeof(cs_buffer_code) }; static const D3D12_SHADER_BYTECODE cs_clear = { cs_clear_code, sizeof(cs_clear_code) }; static const uint32_t buffer_region_tiles[] = { /* 0 1 2 3 4 5 6 7 8 9 */ /*0*/ 33, 34, 35, 36, 37, 6, 7, 8, 9, 10, /*1*/ 11, 12, 38, 39, 40, 41, 1, 18, 2, 20, /*2*/ 21, 22, 23, 3, 4, 4, 4, 0, 0, 25, /*3*/ 26, 27, 28, 29, 30, 36, 37, 38, 39, 40, /*4*/ 9, 11, 43, 44, 45, 46, 45, 46, 49, 50, /*5*/ 0, 0, 17, 18, 19, 20, 21, 22, 23, 24, /*6*/ 61, 62, 63, 12, }; static const uint32_t texture_region_tiles[] = { 1, 2, 4, 5, 6, 7, 1, 1, 9, 1, 17, 14, 8, 14, 3, 0, 17, 18, 19, 18, 19, 22, 23, 24, 25, 26, 27, 28, }; static const uint32_t texture_3d_region_tiles[] = { 3, 2, 0, 7, 8, 2, 4, 5, 6, }; memset(&desc, 0, sizeof(desc)); desc.rt_width = 640; desc.rt_height = 480; desc.rt_format = DXGI_FORMAT_R8G8B8A8_UNORM; if (!init_test_context(&context, &desc)) return; hr = ID3D12Device_CheckFeatureSupport(context.device, D3D12_FEATURE_D3D12_OPTIONS, &options, sizeof(options)); ok(hr == S_OK, "Failed to check feature support, hr %#x.\n", hr); if (!options.TiledResourcesTier) { skip("Tiled resources not supported by device.\n"); destroy_test_context(&context); return; } descriptor_range.RangeType = D3D12_DESCRIPTOR_RANGE_TYPE_SRV; descriptor_range.NumDescriptors = 1; descriptor_range.BaseShaderRegister = 0; descriptor_range.RegisterSpace = 0; descriptor_range.OffsetInDescriptorsFromTableStart = 0; root_parameters[0].ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE; root_parameters[0].DescriptorTable.NumDescriptorRanges = 1; root_parameters[0].DescriptorTable.pDescriptorRanges = &descriptor_range; root_parameters[0].ShaderVisibility = D3D12_SHADER_VISIBILITY_ALL; root_parameters[1].ParameterType = D3D12_ROOT_PARAMETER_TYPE_UAV; root_parameters[1].Descriptor.ShaderRegister = 0; root_parameters[1].Descriptor.RegisterSpace = 0; root_parameters[1].ShaderVisibility = D3D12_SHADER_VISIBILITY_ALL; root_signature_desc.NumParameters = ARRAY_SIZE(root_parameters); root_signature_desc.pParameters = root_parameters; root_signature_desc.NumStaticSamplers = 0; root_signature_desc.pStaticSamplers = NULL; root_signature_desc.Flags = D3D12_ROOT_SIGNATURE_FLAG_NONE; hr = create_root_signature(context.device, &root_signature_desc, &root_signature); ok(hr == S_OK, "Failed to create root signature, hr %#x.\n", hr); descriptor_range.RangeType = D3D12_DESCRIPTOR_RANGE_TYPE_UAV; root_parameters[1].ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS; root_parameters[1].Constants.ShaderRegister = 0; root_parameters[1].Constants.RegisterSpace = 0; root_parameters[1].Constants.Num32BitValues = 4; root_parameters[1].ShaderVisibility = D3D12_SHADER_VISIBILITY_ALL; hr = create_root_signature(context.device, &root_signature_desc, &clear_root_signature); ok(hr == S_OK, "Failed to create root signature, hr %#x.\n", hr); clear_texture_pipeline = create_compute_pipeline_state(context.device, clear_root_signature, cs_clear); check_texture_pipeline = create_compute_pipeline_state(context.device, root_signature, cs_texture); check_texture_3d_pipeline = create_compute_pipeline_state(context.device, root_signature, cs_texture_3d); check_buffer_pipeline = create_compute_pipeline_state(context.device, root_signature, cs_buffer); cpu_heap = create_cpu_descriptor_heap(context.device, D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV, 11); gpu_heap = create_gpu_descriptor_heap(context.device, D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV, 11); memset(&heap_properties, 0, sizeof(heap_properties)); heap_properties.Type = D3D12_HEAP_TYPE_DEFAULT; resource_desc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; resource_desc.Alignment = 0; resource_desc.Width = 64 * sizeof(uint32_t); resource_desc.Height = 1; resource_desc.DepthOrArraySize = 1; resource_desc.MipLevels = 1; resource_desc.Format = DXGI_FORMAT_UNKNOWN; resource_desc.SampleDesc.Count = 1; resource_desc.SampleDesc.Quality = 0; resource_desc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; resource_desc.Flags = D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS; hr = ID3D12Device_CreateCommittedResource(context.device, &heap_properties, D3D12_HEAP_FLAG_NONE, &resource_desc, D3D12_RESOURCE_STATE_UNORDERED_ACCESS, NULL, &IID_ID3D12Resource, (void **)&readback_buffer); ok(hr == S_OK, "Failed to create readback buffer, hr %#x.\n", hr); readback_va = ID3D12Resource_GetGPUVirtualAddress(readback_buffer); /* Test buffer tile mappings */ heap_desc.Properties = heap_properties; heap_desc.Alignment = 0; heap_desc.SizeInBytes = 64 * 65536; heap_desc.Flags = D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS; hr = ID3D12Device_CreateHeap(context.device, &heap_desc, &IID_ID3D12Heap, (void **)&heap); ok(hr == S_OK, "Failed to create heap, hr %#x.\n", hr); resource_desc.Width = 64 * 65536; hr = ID3D12Device_CreateReservedResource(context.device, &resource_desc, D3D12_RESOURCE_STATE_UNORDERED_ACCESS, NULL, &IID_ID3D12Resource, (void **)&resource); ok(hr == S_OK, "Failed to create reserved buffer, hr %#x.\n", hr); srv_desc.Format = DXGI_FORMAT_UNKNOWN; srv_desc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER; srv_desc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; srv_desc.Buffer.FirstElement = 0; srv_desc.Buffer.NumElements = resource_desc.Width / sizeof(uint32_t); srv_desc.Buffer.StructureByteStride = sizeof(uint32_t); srv_desc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_NONE; ID3D12Device_CreateShaderResourceView(context.device, resource, &srv_desc, get_cpu_descriptor_handle(&context, gpu_heap, 0)); uav_desc.Format = DXGI_FORMAT_R32_UINT; uav_desc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; uav_desc.Buffer.FirstElement = 0; uav_desc.Buffer.NumElements = resource_desc.Width / sizeof(uint32_t); uav_desc.Buffer.StructureByteStride = 0; uav_desc.Buffer.CounterOffsetInBytes = 0; uav_desc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_NONE; ID3D12Device_CreateUnorderedAccessView(context.device, resource, NULL, &uav_desc, get_cpu_descriptor_handle(&context, cpu_heap, 1)); ID3D12Device_CreateUnorderedAccessView(context.device, resource, NULL, &uav_desc, get_cpu_descriptor_handle(&context, gpu_heap, 1)); /* Map entire buffer, linearly, and initialize tile data */ tile_offsets[0] = 0; ID3D12CommandQueue_UpdateTileMappings(context.queue, resource, 1, NULL, NULL, heap, 1, NULL, tile_offsets, NULL, D3D12_TILE_MAPPING_FLAG_NONE); for (i = 0; i < 64; i++) { UINT clear_value[4] = { 0, 0, 0, 0 }; D3D12_RECT clear_rect; set_rect(&clear_rect, 16384 * i, 0, 16384 * (i + 1), 1); clear_value[0] = i + 1; ID3D12GraphicsCommandList_ClearUnorderedAccessViewUint(context.list, get_gpu_descriptor_handle(&context, gpu_heap, 1), get_cpu_descriptor_handle(&context, cpu_heap, 1), resource, clear_value, 1, &clear_rect); } transition_resource_state(context.list, resource, D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE); ID3D12GraphicsCommandList_SetDescriptorHeaps(context.list, 1, &gpu_heap); ID3D12GraphicsCommandList_SetComputeRootSignature(context.list, root_signature); ID3D12GraphicsCommandList_SetPipelineState(context.list, check_buffer_pipeline); ID3D12GraphicsCommandList_SetComputeRootDescriptorTable(context.list, 0, get_gpu_descriptor_handle(&context, gpu_heap, 0)); ID3D12GraphicsCommandList_SetComputeRootUnorderedAccessView(context.list, 1, readback_va); ID3D12GraphicsCommandList_Dispatch(context.list, 1, 1, 1); transition_resource_state(context.list, readback_buffer, D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_COPY_SOURCE); get_buffer_readback_with_command_list(readback_buffer, DXGI_FORMAT_R32_UINT, &rb, context.queue, context.list); for (i = 0; i < 64; i++) { set_box(&box, i, 0, 0, i + 1, 1, 1); check_readback_data_uint(&rb, &box, i + 1, 0); } release_resource_readback(&rb); /* Test arbitrary tile mappings */ set_region_offset(®ion_offsets[0], 16, 0, 0, 0); set_region_offset(®ion_offsets[1], 18, 0, 0, 0); set_region_offset(®ion_offsets[2], 23, 0, 0, 0); set_region_offset(®ion_offsets[3], 40, 0, 0, 0); set_region_offset(®ion_offsets[4], 41, 0, 0, 0); set_region_offset(®ion_offsets[5], 63, 0, 0, 0); tile_offsets[0] = 0; tile_offsets[1] = 8; tile_offsets[2] = 10; tile_counts[0] = 3; tile_counts[1] = 1; tile_counts[2] = 2; ID3D12CommandQueue_UpdateTileMappings(context.queue, resource, 6, region_offsets, NULL, heap, 3, NULL, tile_offsets, tile_counts, D3D12_TILE_MAPPING_FLAG_NONE); set_region_offset(®ion_offsets[0], 24, 0, 0, 0); set_region_offset(®ion_offsets[1], 50, 0, 0, 0); set_region_offset(®ion_offsets[2], 0, 0, 0, 0); set_region_offset(®ion_offsets[3], 52, 0, 0, 0); set_region_offset(®ion_offsets[4], 29, 0, 0, 0); set_region_size(®ion_sizes[0], 5, false, 0, 0, 0); set_region_size(®ion_sizes[1], 2, false, 0, 0, 0); set_region_size(®ion_sizes[2], 16, false, 0, 0, 0); set_region_size(®ion_sizes[3], 8, false, 0, 0, 0); set_region_size(®ion_sizes[4], 6, false, 0, 0, 0); tile_flags[0] = D3D12_TILE_RANGE_FLAG_REUSE_SINGLE_TILE; tile_flags[1] = D3D12_TILE_RANGE_FLAG_NULL; tile_flags[2] = D3D12_TILE_RANGE_FLAG_NONE; tile_flags[3] = D3D12_TILE_RANGE_FLAG_SKIP; tile_flags[4] = D3D12_TILE_RANGE_FLAG_NONE; tile_flags[5] = D3D12_TILE_RANGE_FLAG_NONE; tile_offsets[0] = 3; tile_offsets[1] = 0; tile_offsets[2] = 32; tile_offsets[3] = 0; tile_offsets[4] = 37; tile_offsets[5] = 16; tile_counts[0] = 3; tile_counts[1] = 4; tile_counts[2] = 5; tile_counts[3] = 7; tile_counts[4] = 4; tile_counts[5] = 14; ID3D12CommandQueue_UpdateTileMappings(context.queue, resource, 5, region_offsets, region_sizes, heap, 6, tile_flags, tile_offsets, tile_counts, D3D12_TILE_MAPPING_FLAG_NONE); set_region_offset(®ion_offsets[0], 46, 0, 0, 0); set_region_offset(®ion_offsets[1], 44, 0, 0, 0); set_region_size(®ion_sizes[0], 2, false, 0, 0, 0); ID3D12CommandQueue_CopyTileMappings(context.queue, resource, ®ion_offsets[0], resource, ®ion_offsets[1], ®ion_sizes[0], D3D12_TILE_MAPPING_FLAG_NONE); reset_command_list(context.list, context.allocator); transition_resource_state(context.list, readback_buffer, D3D12_RESOURCE_STATE_COPY_SOURCE, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); ID3D12GraphicsCommandList_SetDescriptorHeaps(context.list, 1, &gpu_heap); ID3D12GraphicsCommandList_SetComputeRootSignature(context.list, root_signature); ID3D12GraphicsCommandList_SetPipelineState(context.list, check_buffer_pipeline); ID3D12GraphicsCommandList_SetComputeRootDescriptorTable(context.list, 0, get_gpu_descriptor_handle(&context, gpu_heap, 0)); ID3D12GraphicsCommandList_SetComputeRootUnorderedAccessView(context.list, 1, readback_va); ID3D12GraphicsCommandList_Dispatch(context.list, 1, 1, 1); transition_resource_state(context.list, readback_buffer, D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_COPY_SOURCE); get_buffer_readback_with_command_list(readback_buffer, DXGI_FORMAT_R32_UINT, &rb, context.queue, context.list); for (i = 0; i < ARRAY_SIZE(buffer_region_tiles); i++) { if (options.TiledResourcesTier > D3D12_TILED_RESOURCES_TIER_2 || buffer_region_tiles[i]) { set_box(&box, i, 0, 0, i + 1, 1, 1); check_readback_data_uint(&rb, &box, buffer_region_tiles[i], 0); } } release_resource_readback(&rb); ID3D12Resource_Release(resource); ID3D12Heap_Release(heap); /* Test 2D image tile mappings */ heap_desc.Properties = heap_properties; heap_desc.Alignment = 0; heap_desc.SizeInBytes = 64 * 65536; heap_desc.Flags = D3D12_HEAP_FLAG_ALLOW_ONLY_NON_RT_DS_TEXTURES; hr = ID3D12Device_CreateHeap(context.device, &heap_desc, &IID_ID3D12Heap, (void **)&heap); ok(hr == S_OK, "Failed to create heap, hr %#x.\n", hr); resource_desc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D; resource_desc.Alignment = 0; resource_desc.Width = 512; resource_desc.Height = 512; resource_desc.DepthOrArraySize = 1; resource_desc.MipLevels = 10; resource_desc.Format = DXGI_FORMAT_R32_UINT; resource_desc.SampleDesc.Count = 1; resource_desc.SampleDesc.Quality = 0; resource_desc.Layout = D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE; resource_desc.Flags = D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS; hr = ID3D12Device_CreateReservedResource(context.device, &resource_desc, D3D12_RESOURCE_STATE_UNORDERED_ACCESS, NULL, &IID_ID3D12Resource, (void **)&resource); ok(hr == S_OK, "Failed to create reserved texture, hr %#x.\n", hr); num_tilings = resource_desc.MipLevels; ID3D12Device_GetResourceTiling(context.device, resource, NULL, &packed_mip_info, &tile_shape, &num_tilings, 0, tilings); ok(packed_mip_info.NumStandardMips >= 3, "Unexpected number of standard mips %u.\n", packed_mip_info.NumStandardMips); srv_desc.Format = DXGI_FORMAT_R32_UINT; srv_desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; srv_desc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; srv_desc.Texture2D.MostDetailedMip = 0; srv_desc.Texture2D.MipLevels = resource_desc.MipLevels; srv_desc.Texture2D.PlaneSlice = 0; srv_desc.Texture2D.ResourceMinLODClamp = 0.0f; ID3D12Device_CreateShaderResourceView(context.device, resource, &srv_desc, get_cpu_descriptor_handle(&context, gpu_heap, 0)); /* Map entire image */ tile_offsets[0] = 0; ID3D12CommandQueue_UpdateTileMappings(context.queue, resource, 1, NULL, NULL, heap, 1, NULL, tile_offsets, NULL, D3D12_TILE_MAPPING_FLAG_NONE); reset_command_list(context.list, context.allocator); for (i = 0, j = 0; i < resource_desc.MipLevels; i++) { uav_desc.Format = DXGI_FORMAT_R32_UINT; uav_desc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2D; uav_desc.Texture2D.MipSlice = i; uav_desc.Texture2D.PlaneSlice = 0; ID3D12Device_CreateUnorderedAccessView(context.device, resource, NULL, &uav_desc, get_cpu_descriptor_handle(&context, cpu_heap, 1 + i)); ID3D12Device_CreateUnorderedAccessView(context.device, resource, NULL, &uav_desc, get_cpu_descriptor_handle(&context, gpu_heap, 1 + i)); for (y = 0; y < max(1u, tilings[i].HeightInTiles); y++) { for (x = 0; x < max(1u, tilings[i].WidthInTiles); x++) { UINT clear_value[4] = { 0, 0, 0, 0 }; D3D12_RECT clear_rect; clear_value[0] = ++j; set_rect(&clear_rect, x * tile_shape.WidthInTexels, y * tile_shape.HeightInTexels, min(resource_desc.Width >> i, (x + 1) * tile_shape.WidthInTexels), min(resource_desc.Height >> i, (y + 1) * tile_shape.HeightInTexels)); ID3D12GraphicsCommandList_ClearUnorderedAccessViewUint(context.list, get_gpu_descriptor_handle(&context, gpu_heap, 1 + i), get_cpu_descriptor_handle(&context, cpu_heap, 1 + i), resource, clear_value, 1, &clear_rect); } } } transition_resource_state(context.list, resource, D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE); transition_resource_state(context.list, readback_buffer, D3D12_RESOURCE_STATE_COPY_SOURCE, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); ID3D12GraphicsCommandList_SetDescriptorHeaps(context.list, 1, &gpu_heap); ID3D12GraphicsCommandList_SetComputeRootSignature(context.list, root_signature); ID3D12GraphicsCommandList_SetPipelineState(context.list, check_texture_pipeline); ID3D12GraphicsCommandList_SetComputeRootDescriptorTable(context.list, 0, get_gpu_descriptor_handle(&context, gpu_heap, 0)); ID3D12GraphicsCommandList_SetComputeRootUnorderedAccessView(context.list, 1, readback_va); ID3D12GraphicsCommandList_Dispatch(context.list, 1, 1, 1); transition_resource_state(context.list, readback_buffer, D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_COPY_SOURCE); get_buffer_readback_with_command_list(readback_buffer, DXGI_FORMAT_R32_UINT, &rb, context.queue, context.list); for (i = 0; i < j; i++) { set_box(&box, i, 0, 0, i + 1, 1, 1); check_readback_data_uint(&rb, &box, i + 1, 0); } release_resource_readback(&rb); set_region_offset(®ion_offsets[0], 2, 0, 0, 0); set_region_offset(®ion_offsets[1], 1, 1, 0, 0); set_region_offset(®ion_offsets[2], 1, 1, 0, 1); set_region_offset(®ion_offsets[3], 0, 3, 0, 0); set_region_size(®ion_sizes[0], 3, false, 0, 0, 0); set_region_size(®ion_sizes[1], 4, true, 2, 2, 1); set_region_size(®ion_sizes[2], 2, false, 0, 0, 0); set_region_size(®ion_sizes[3], 4, true, 4, 1, 1); tile_flags[0] = D3D12_TILE_RANGE_FLAG_NONE; tile_flags[1] = D3D12_TILE_RANGE_FLAG_REUSE_SINGLE_TILE; tile_flags[2] = D3D12_TILE_RANGE_FLAG_NONE; tile_flags[3] = D3D12_TILE_RANGE_FLAG_NONE; tile_flags[4] = D3D12_TILE_RANGE_FLAG_SKIP; tile_flags[5] = D3D12_TILE_RANGE_FLAG_NONE; tile_flags[6] = D3D12_TILE_RANGE_FLAG_NULL; tile_offsets[0] = 3; tile_offsets[1] = 0; tile_offsets[2] = 16; tile_offsets[3] = 7; tile_offsets[4] = 0; tile_offsets[5] = 2; tile_offsets[6] = 0; tile_counts[0] = 4; tile_counts[1] = 2; tile_counts[2] = 3; tile_counts[3] = 1; tile_counts[4] = 1; tile_counts[5] = 1; tile_counts[6] = 1; ID3D12CommandQueue_UpdateTileMappings(context.queue, resource, 4, region_offsets, region_sizes, heap, 7, tile_flags, tile_offsets, tile_counts, D3D12_TILE_MAPPING_FLAG_NONE); set_region_offset(®ion_offsets[0], 3, 1, 0, 0); set_region_offset(®ion_offsets[1], 1, 2, 0, 0); set_region_size(®ion_sizes[0], 2, true, 1, 2, 1); ID3D12CommandQueue_CopyTileMappings(context.queue, resource, ®ion_offsets[0], resource, ®ion_offsets[1], ®ion_sizes[0], D3D12_TILE_MAPPING_FLAG_NONE); reset_command_list(context.list, context.allocator); transition_resource_state(context.list, readback_buffer, D3D12_RESOURCE_STATE_COPY_SOURCE, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); ID3D12GraphicsCommandList_SetDescriptorHeaps(context.list, 1, &gpu_heap); ID3D12GraphicsCommandList_SetComputeRootSignature(context.list, root_signature); ID3D12GraphicsCommandList_SetPipelineState(context.list, check_texture_pipeline); ID3D12GraphicsCommandList_SetComputeRootDescriptorTable(context.list, 0, get_gpu_descriptor_handle(&context, gpu_heap, 0)); ID3D12GraphicsCommandList_SetComputeRootUnorderedAccessView(context.list, 1, readback_va); ID3D12GraphicsCommandList_Dispatch(context.list, 1, 1, 1); transition_resource_state(context.list, readback_buffer, D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_COPY_SOURCE); get_buffer_readback_with_command_list(readback_buffer, DXGI_FORMAT_R32_UINT, &rb, context.queue, context.list); for (i = 0; i < j; i++) { if (options.TiledResourcesTier > D3D12_TILED_RESOURCES_TIER_2 || texture_region_tiles[i]) { set_box(&box, i, 0, 0, i + 1, 1, 1); check_readback_data_uint(&rb, &box, texture_region_tiles[i], 0); } } release_resource_readback(&rb); ID3D12Resource_Release(resource); if (options.TiledResourcesTier >= D3D12_TILED_RESOURCES_TIER_3) { /* Test 3D image tile mappings */ resource_desc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE3D; resource_desc.Alignment = 0; resource_desc.Width = 64; resource_desc.Height = 64; resource_desc.DepthOrArraySize = 32; resource_desc.MipLevels = 2; resource_desc.Format = DXGI_FORMAT_R32_UINT; resource_desc.SampleDesc.Count = 1; resource_desc.SampleDesc.Quality = 0; resource_desc.Layout = D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE; resource_desc.Flags = D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS; hr = ID3D12Device_CreateReservedResource(context.device, &resource_desc, D3D12_RESOURCE_STATE_UNORDERED_ACCESS, NULL, &IID_ID3D12Resource, (void **)&resource); ok(hr == S_OK, "Failed to create reserved texture, hr %#x.\n", hr); num_tilings = resource_desc.MipLevels; ID3D12Device_GetResourceTiling(context.device, resource, NULL, &packed_mip_info, &tile_shape, &num_tilings, 0, tilings); ok(packed_mip_info.NumStandardMips == 2, "Unexpected number of standard mips %u.\n", packed_mip_info.NumStandardMips); srv_desc.Format = DXGI_FORMAT_R32_UINT; srv_desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE3D; srv_desc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; srv_desc.Texture3D.MostDetailedMip = 0; srv_desc.Texture3D.MipLevels = resource_desc.MipLevels; srv_desc.Texture3D.ResourceMinLODClamp = 0.0f; ID3D12Device_CreateShaderResourceView(context.device, resource, &srv_desc, get_cpu_descriptor_handle(&context, gpu_heap, 0)); /* Map entire image */ tile_offsets[0] = 0; ID3D12CommandQueue_UpdateTileMappings(context.queue, resource, 1, NULL, NULL, heap, 1, NULL, tile_offsets, NULL, D3D12_TILE_MAPPING_FLAG_NONE); reset_command_list(context.list, context.allocator); for (i = 0, j = 0; i < resource_desc.MipLevels; i++) { uav_desc.Format = DXGI_FORMAT_R32_UINT; uav_desc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE3D; uav_desc.Texture3D.MipSlice = i; uav_desc.Texture3D.FirstWSlice = 0; uav_desc.Texture3D.WSize = resource_desc.DepthOrArraySize >> i; ID3D12Device_CreateUnorderedAccessView(context.device, resource, NULL, &uav_desc, get_cpu_descriptor_handle(&context, cpu_heap, 1 + i)); ID3D12Device_CreateUnorderedAccessView(context.device, resource, NULL, &uav_desc, get_cpu_descriptor_handle(&context, gpu_heap, 1 + i)); /* ClearUnorderedAccessView only takes 2D coordinates so we have to * bring our own shader to initialize portions of a 3D image */ ID3D12GraphicsCommandList_SetDescriptorHeaps(context.list, 1, &gpu_heap); ID3D12GraphicsCommandList_SetComputeRootSignature(context.list, clear_root_signature); ID3D12GraphicsCommandList_SetComputeRootDescriptorTable(context.list, 0, get_gpu_descriptor_handle(&context, gpu_heap, 1 + i)); ID3D12GraphicsCommandList_SetPipelineState(context.list, clear_texture_pipeline); for (z = 0; z < max(1u, tilings[i].DepthInTiles); z++) { for (y = 0; y < max(1u, tilings[i].HeightInTiles); y++) { for (x = 0; x < max(1u, tilings[i].WidthInTiles); x++) { UINT shader_args[4]; shader_args[0] = tile_shape.WidthInTexels * x; shader_args[1] = tile_shape.HeightInTexels * y; shader_args[2] = tile_shape.DepthInTexels * z; shader_args[3] = ++j; ID3D12GraphicsCommandList_SetComputeRoot32BitConstants(context.list, 1, ARRAY_SIZE(shader_args), shader_args, 0); ID3D12GraphicsCommandList_Dispatch(context.list, tile_shape.WidthInTexels / 4, tile_shape.HeightInTexels / 4, tile_shape.DepthInTexels / 4); } } } } transition_resource_state(context.list, resource, D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE); transition_resource_state(context.list, readback_buffer, D3D12_RESOURCE_STATE_COPY_SOURCE, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); ID3D12GraphicsCommandList_SetDescriptorHeaps(context.list, 1, &gpu_heap); ID3D12GraphicsCommandList_SetComputeRootSignature(context.list, root_signature); ID3D12GraphicsCommandList_SetPipelineState(context.list, check_texture_3d_pipeline); ID3D12GraphicsCommandList_SetComputeRootDescriptorTable(context.list, 0, get_gpu_descriptor_handle(&context, gpu_heap, 0)); ID3D12GraphicsCommandList_SetComputeRootUnorderedAccessView(context.list, 1, readback_va); ID3D12GraphicsCommandList_Dispatch(context.list, 1, 1, 1); transition_resource_state(context.list, readback_buffer, D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_COPY_SOURCE); get_buffer_readback_with_command_list(readback_buffer, DXGI_FORMAT_R32_UINT, &rb, context.queue, context.list); for (i = 0; i < j; i++) { set_box(&box, i, 0, 0, i + 1, 1, 1); check_readback_data_uint(&rb, &box, i + 1, 0); } release_resource_readback(&rb); set_region_offset(®ion_offsets[0], 0, 0, 0, 0); set_region_offset(®ion_offsets[1], 0, 1, 1, 0); set_region_offset(®ion_offsets[2], 1, 1, 0, 0); set_region_offset(®ion_offsets[3], 1, 0, 0, 0); set_region_offset(®ion_offsets[4], 0, 1, 0, 0); set_region_size(®ion_sizes[0], 1, false, 0, 0, 0); set_region_size(®ion_sizes[1], 3, false, 0, 0, 0); set_region_size(®ion_sizes[2], 2, false, 0, 0, 0); set_region_size(®ion_sizes[3], 2, true, 1, 1, 2); set_region_size(®ion_sizes[4], 1, true, 1, 1, 1); tile_flags[0] = D3D12_TILE_RANGE_FLAG_NONE; tile_flags[1] = D3D12_TILE_RANGE_FLAG_REUSE_SINGLE_TILE; tile_flags[2] = D3D12_TILE_RANGE_FLAG_NULL; tile_offsets[0] = 2; tile_offsets[1] = 1; tile_offsets[2] = 0; tile_counts[0] = 6; tile_counts[1] = 2; tile_counts[2] = 1; ID3D12CommandQueue_UpdateTileMappings(context.queue, resource, 5, region_offsets, region_sizes, heap, 3, tile_flags, tile_offsets, tile_counts, D3D12_TILE_MAPPING_FLAG_NONE); reset_command_list(context.list, context.allocator); transition_resource_state(context.list, readback_buffer, D3D12_RESOURCE_STATE_COPY_SOURCE, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); ID3D12GraphicsCommandList_SetDescriptorHeaps(context.list, 1, &gpu_heap); ID3D12GraphicsCommandList_SetComputeRootSignature(context.list, root_signature); ID3D12GraphicsCommandList_SetPipelineState(context.list, check_texture_3d_pipeline); ID3D12GraphicsCommandList_SetComputeRootDescriptorTable(context.list, 0, get_gpu_descriptor_handle(&context, gpu_heap, 0)); ID3D12GraphicsCommandList_SetComputeRootUnorderedAccessView(context.list, 1, readback_va); ID3D12GraphicsCommandList_Dispatch(context.list, 1, 1, 1); transition_resource_state(context.list, readback_buffer, D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_COPY_SOURCE); get_buffer_readback_with_command_list(readback_buffer, DXGI_FORMAT_R32_UINT, &rb, context.queue, context.list); for (i = 0; i < j; i++) { set_box(&box, i, 0, 0, i + 1, 1, 1); check_readback_data_uint(&rb, &box, texture_3d_region_tiles[i], 0); } release_resource_readback(&rb); ID3D12Resource_Release(resource); } else { skip("Tiles resources tier 3 not supported.\n"); } ID3D12Heap_Release(heap); ID3D12DescriptorHeap_Release(gpu_heap); ID3D12DescriptorHeap_Release(cpu_heap); ID3D12Resource_Release(readback_buffer); ID3D12PipelineState_Release(clear_texture_pipeline); ID3D12PipelineState_Release(check_texture_3d_pipeline); ID3D12PipelineState_Release(check_texture_pipeline); ID3D12PipelineState_Release(check_buffer_pipeline); ID3D12RootSignature_Release(clear_root_signature); ID3D12RootSignature_Release(root_signature); destroy_test_context(&context); } void test_copy_tiles(void) { #define TILE_SIZE 65536 ID3D12Resource *tiled_resource, *dst_buffer, *src_buffer; D3D12_TILED_RESOURCE_COORDINATE region_offset; D3D12_FEATURE_DATA_D3D12_OPTIONS options; uint32_t tile_offset, buffer_offset; D3D12_TILE_REGION_SIZE region_size; D3D12_RESOURCE_DESC resource_desc; struct test_context_desc desc; struct resource_readback rb; struct test_context context; D3D12_HEAP_DESC heap_desc; uint32_t *buffer_data; unsigned int i, x, y; ID3D12Heap *heap; D3D12_BOX box; HRESULT hr; static const struct { uint32_t x; uint32_t y; uint32_t tile_idx; } image_tiles[] = { {1, 0, 0}, {2, 0, 1}, {1, 1, 2}, {2, 1, 3}, {3, 1, 4}, {0, 2, 5}, {1, 2, 6}, }; memset(&desc, 0, sizeof(desc)); desc.rt_width = 640; desc.rt_height = 480; desc.rt_format = DXGI_FORMAT_R8G8B8A8_UNORM; if (!init_test_context(&context, &desc)) return; hr = ID3D12Device_CheckFeatureSupport(context.device, D3D12_FEATURE_D3D12_OPTIONS, &options, sizeof(options)); ok(hr == S_OK, "Failed to check feature support, hr %#x.\n"); if (!options.TiledResourcesTier) { skip("Tiled resources not supported by device.\n"); destroy_test_context(&context); return; } memset(&heap_desc, 0, sizeof(heap_desc)); heap_desc.Properties.Type = D3D12_HEAP_TYPE_DEFAULT; heap_desc.SizeInBytes = TILE_SIZE * 16; resource_desc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; resource_desc.Alignment = 0; resource_desc.Width = heap_desc.SizeInBytes; resource_desc.Height = 1; resource_desc.DepthOrArraySize = 1; resource_desc.MipLevels = 1; resource_desc.Format = DXGI_FORMAT_UNKNOWN; resource_desc.SampleDesc.Count = 1; resource_desc.SampleDesc.Quality = 0; resource_desc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; resource_desc.Flags = D3D12_RESOURCE_FLAG_NONE; hr = ID3D12Device_CreateCommittedResource(context.device, &heap_desc.Properties, D3D12_HEAP_FLAG_NONE, &resource_desc, D3D12_RESOURCE_STATE_COPY_DEST, NULL, &IID_ID3D12Resource, (void **)&src_buffer); ok(hr == S_OK, "Failed to create buffer, hr %#x.\n", hr); hr = ID3D12Device_CreateCommittedResource(context.device, &heap_desc.Properties, D3D12_HEAP_FLAG_NONE, &resource_desc, D3D12_RESOURCE_STATE_COPY_DEST, NULL, &IID_ID3D12Resource, (void **)&dst_buffer); ok(hr == S_OK, "Failed to create buffer, hr %#x.\n", hr); buffer_data = malloc(resource_desc.Width); for (i = 0; i < resource_desc.Width / sizeof(*buffer_data); i++) buffer_data[i] = i; upload_buffer_data(src_buffer, 0, resource_desc.Width, buffer_data, context.queue, context.list); reset_command_list(context.list, context.allocator); transition_resource_state(context.list, src_buffer, D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_COPY_SOURCE); /* Test buffer */ hr = ID3D12Device_CreateReservedResource(context.device, &resource_desc, D3D12_RESOURCE_STATE_COPY_DEST, NULL, &IID_ID3D12Resource, (void **)&tiled_resource); ok(hr == S_OK, "Failed to create tiled buffer, hr %#x.\n", hr); heap_desc.Flags = D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS; hr = ID3D12Device_CreateHeap(context.device, &heap_desc, &IID_ID3D12Heap, (void **)&heap); ok(hr == S_OK, "Failed to create heap, hr %#x.\n", hr); tile_offset = 0; ID3D12CommandQueue_UpdateTileMappings(context.queue, tiled_resource, 1, NULL, NULL, heap, 1, NULL, &tile_offset, NULL, D3D12_TILE_MAPPING_FLAG_NONE); /* Copy source tiles 0-2 with a 32-byte offset to buffer tiles 4-6 */ set_region_offset(®ion_offset, 4, 0, 0, 0); set_region_size(®ion_size, 3, false, 0, 0, 0); buffer_offset = 32; ID3D12GraphicsCommandList_CopyTiles(context.list, tiled_resource, ®ion_offset, ®ion_size, src_buffer, buffer_offset, D3D12_TILE_COPY_FLAG_LINEAR_BUFFER_TO_SWIZZLED_TILED_RESOURCE); transition_resource_state(context.list, tiled_resource, D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_COPY_SOURCE); get_buffer_readback_with_command_list(tiled_resource, DXGI_FORMAT_R32_UINT, &rb, context.queue, context.list); for (i = 0; i < 3 * TILE_SIZE / sizeof(*buffer_data); i += 1024) { uint32_t offset = i + 4 * TILE_SIZE / sizeof(*buffer_data); set_box(&box, offset, 0, 0, offset + 1, 1, 1); check_readback_data_uint(&rb, &box, buffer_data[i + buffer_offset / sizeof(*buffer_data)], 0); } release_resource_readback(&rb); reset_command_list(context.list, context.allocator); /* Read tiles 5-6 from the tiled resource */ set_region_offset(®ion_offset, 5, 0, 0, 0); set_region_size(®ion_size, 1, false, 0, 0, 0); ID3D12GraphicsCommandList_CopyTiles(context.list, tiled_resource, ®ion_offset, ®ion_size, dst_buffer, 0, D3D12_TILE_COPY_FLAG_SWIZZLED_TILED_RESOURCE_TO_LINEAR_BUFFER); /* NONE behaves the same as SWIZZLED_TILED_RESOURCE_TO_LINEAR_BUFFER */ set_region_offset(®ion_offset, 6, 0, 0, 0); ID3D12GraphicsCommandList_CopyTiles(context.list, tiled_resource, ®ion_offset, ®ion_size, dst_buffer, TILE_SIZE, D3D12_TILE_COPY_FLAG_NONE); transition_resource_state(context.list, dst_buffer, D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_COPY_SOURCE); get_buffer_readback_with_command_list(dst_buffer, DXGI_FORMAT_R32_UINT, &rb, context.queue, context.list); for (i = 0; i < 2 * TILE_SIZE / sizeof(*buffer_data); i += 1024) { uint32_t offset = i + (TILE_SIZE + buffer_offset) / sizeof(*buffer_data); set_box(&box, i, 0, 0, i + 1, 1, 1); check_readback_data_uint(&rb, &box, buffer_data[offset], 0); } release_resource_readback(&rb); ID3D12Resource_Release(tiled_resource); ID3D12Heap_Release(heap); /* Test image */ resource_desc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D; resource_desc.Alignment = 0; resource_desc.Width = 512; resource_desc.Height = 512; resource_desc.DepthOrArraySize = 1; resource_desc.MipLevels = 1; resource_desc.Format = DXGI_FORMAT_R32_UINT; resource_desc.SampleDesc.Count = 1; resource_desc.SampleDesc.Quality = 0; resource_desc.Layout = D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE; resource_desc.Flags = D3D12_RESOURCE_FLAG_NONE; hr = ID3D12Device_CreateReservedResource(context.device, &resource_desc, D3D12_RESOURCE_STATE_COPY_DEST, NULL, &IID_ID3D12Resource, (void **)&tiled_resource); ok(hr == S_OK, "Failed to create tiled buffer, hr %#x.\n", hr); heap_desc.Flags = D3D12_HEAP_FLAG_ALLOW_ONLY_NON_RT_DS_TEXTURES; hr = ID3D12Device_CreateHeap(context.device, &heap_desc, &IID_ID3D12Heap, (void **)&heap); ok(hr == S_OK, "Failed to create heap, hr %#x.\n", hr); tile_offset = 0; ID3D12CommandQueue_UpdateTileMappings(context.queue, tiled_resource, 1, NULL, NULL, heap, 1, NULL, &tile_offset, NULL, D3D12_TILE_MAPPING_FLAG_NONE); reset_command_list(context.list, context.allocator); /* Copy source tiles 0-3 to 2x2 region at (1,0) */ set_region_offset(®ion_offset, 1, 0, 0, 0); set_region_size(®ion_size, 4, true, 2, 2, 1); ID3D12GraphicsCommandList_CopyTiles(context.list, tiled_resource, ®ion_offset, ®ion_size, src_buffer, 0, D3D12_TILE_COPY_FLAG_LINEAR_BUFFER_TO_SWIZZLED_TILED_RESOURCE); /* Copy source tiles 4-6 to (3,1), (0,2) and (1,2) */ set_region_offset(®ion_offset, 3, 1, 0, 0); set_region_size(®ion_size, 3, false, 0, 0, 0); ID3D12GraphicsCommandList_CopyTiles(context.list, tiled_resource, ®ion_offset, ®ion_size, src_buffer, 4 * TILE_SIZE, D3D12_TILE_COPY_FLAG_LINEAR_BUFFER_TO_SWIZZLED_TILED_RESOURCE); transition_resource_state(context.list, tiled_resource, D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_COPY_SOURCE); get_texture_readback_with_command_list(tiled_resource, 0, &rb, context.queue, context.list); for (i = 0; i < ARRAY_SIZE(image_tiles); i++) { for (y = 0; y < 128; y += 32) { for (x = 0; x < 128; x += 32) { uint32_t offset = image_tiles[i].tile_idx * TILE_SIZE / sizeof(*buffer_data) + 128 * y + x; set_box(&box, 128 * image_tiles[i].x + x, 128 * image_tiles[i].y + y, 0, 128 * image_tiles[i].x + x + 1, 128 * image_tiles[i].y + y + 1, 1); check_readback_data_uint(&rb, &box, buffer_data[offset], 0); } } } release_resource_readback(&rb); reset_command_list(context.list, context.allocator); transition_resource_state(context.list, dst_buffer, D3D12_RESOURCE_STATE_COPY_SOURCE, D3D12_RESOURCE_STATE_COPY_DEST); /* Read 0-3 to 2x2 region at (1,0) */ set_region_offset(®ion_offset, 1, 0, 0, 0); set_region_size(®ion_size, 4, true, 2, 2, 1); ID3D12GraphicsCommandList_CopyTiles(context.list, tiled_resource, ®ion_offset, ®ion_size, dst_buffer, 0, D3D12_TILE_COPY_FLAG_SWIZZLED_TILED_RESOURCE_TO_LINEAR_BUFFER); /* Read tiles (3,1), (0,2) and (1,2) */ set_region_offset(®ion_offset, 3, 1, 0, 0); set_region_size(®ion_size, 3, false, 0, 0, 0); ID3D12GraphicsCommandList_CopyTiles(context.list, tiled_resource, ®ion_offset, ®ion_size, dst_buffer, 4 * TILE_SIZE, D3D12_TILE_COPY_FLAG_NONE); transition_resource_state(context.list, dst_buffer, D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_COPY_SOURCE); get_buffer_readback_with_command_list(dst_buffer, DXGI_FORMAT_R32_UINT, &rb, context.queue, context.list); for (i = 0; i < ARRAY_SIZE(image_tiles); i++) { for (x = 0; x < TILE_SIZE / sizeof(uint32_t); x += 1024) { uint32_t offset = image_tiles[i].tile_idx * TILE_SIZE / sizeof(uint32_t) + x; set_box(&box, offset, 0, 0, offset + 1, 1, 1); check_readback_data_uint(&rb, &box, buffer_data[offset], 0); } } release_resource_readback(&rb); ID3D12Resource_Release(tiled_resource); ID3D12Heap_Release(heap); ID3D12Resource_Release(src_buffer); ID3D12Resource_Release(dst_buffer); free(buffer_data); destroy_test_context(&context); #undef TILE_SIZE } static void test_buffer_feedback_instructions(bool use_dxil) { #define TILE_SIZE 65536 D3D12_TILED_RESOURCE_COORDINATE tile_regions[2]; D3D12_ROOT_SIGNATURE_DESC root_signature_desc; D3D12_DESCRIPTOR_RANGE descriptor_ranges[2]; ID3D12DescriptorHeap *cpu_heap, *gpu_heap; ID3D12Resource *tiled_buffer, *out_buffer; D3D12_UNORDERED_ACCESS_VIEW_DESC uav_desc; D3D12_FEATURE_DATA_D3D12_OPTIONS options; D3D12_SHADER_RESOURCE_VIEW_DESC srv_desc; D3D12_ROOT_PARAMETER root_parameters[3]; ID3D12PipelineState *pipeline_state; ID3D12RootSignature *root_signature; D3D12_RESOURCE_DESC resource_desc; struct test_context_desc desc; struct resource_readback rb; struct test_context context; D3D12_HEAP_DESC heap_desc; unsigned int i, j; ID3D12Heap *heap; UINT tile_offset; bool test_is_raw; HRESULT hr; #if 0 Buffer buf : register(t0); RWByteAddressBuffer uav : register(u0); cbuffer args : register(b0) { uint stride; }; [numthreads(64, 1, 1)] void main(uint3 tid : SV_DISPATCHTHREADID) { uint fb; uint v = buf.Load(tid.x * stride, fb); uint s = CheckAccessFullyMapped(fb) ? 1 : 0; uav.Store2(8 * tid.x, uint2(v, s)); } #endif static const DWORD cs_ld_typed_dxbc[] = { 0x43425844, 0xdf4dd82e, 0x7200a243, 0xf2ca5d6f, 0x9dfaa650, 0x00000001, 0x0000017c, 0x00000004, 0x00000030, 0x00000040, 0x00000050, 0x0000016c, 0x4e475349, 0x00000008, 0x00000000, 0x00000008, 0x4e47534f, 0x00000008, 0x00000000, 0x00000008, 0x58454853, 0x00000114, 0x00050050, 0x00000045, 0x0100086a, 0x04000059, 0x00208e46, 0x00000000, 0x00000001, 0x04000858, 0x00107000, 0x00000000, 0x00004444, 0x0300009d, 0x0011e000, 0x00000000, 0x0200005f, 0x00020012, 0x02000068, 0x00000002, 0x0400009b, 0x00000040, 0x00000001, 0x00000001, 0x08000026, 0x0000d000, 0x00100012, 0x00000000, 0x0002000a, 0x0020800a, 0x00000000, 0x00000000, 0x8b0000df, 0x80000042, 0x00111103, 0x00100012, 0x00000000, 0x00100012, 0x00000001, 0x00100006, 0x00000000, 0x00107e46, 0x00000000, 0x050000ea, 0x00100042, 0x00000000, 0x0010000a, 0x00000001, 0x09000037, 0x00100022, 0x00000000, 0x0010002a, 0x00000000, 0x00004001, 0x00000001, 0x00004001, 0x00000000, 0x06000029, 0x00100042, 0x00000000, 0x0002000a, 0x00004001, 0x00000003, 0x070000a6, 0x0011e032, 0x00000000, 0x0010002a, 0x00000000, 0x00100046, 0x00000000, 0x0100003e, 0x30494653, 0x00000008, 0x00000100, 0x00000000, }; static const BYTE cs_ld_typed_dxil[] = { 0x44, 0x58, 0x42, 0x43, 0xdc, 0x3d, 0x27, 0x4b, 0xc3, 0x35, 0x33, 0xac, 0xb2, 0xec, 0xa0, 0x75, 0x16, 0xf3, 0x38, 0xaa, 0x01, 0x00, 0x00, 0x00, 0x04, 0x08, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x4f, 0x53, 0x47, 0x31, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x53, 0x56, 0x30, 0x6c, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 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, 0x07, 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, 0x44, 0x58, 0x49, 0x4c, 0x24, 0x07, 0x00, 0x00, 0x60, 0x00, 0x05, 0x00, 0xc9, 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0c, 0x07, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x52, 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, 0x91, 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x29, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, 0x86, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x01, 0xd5, 0x06, 0x62, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x00, 0x49, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, 0x09, 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, 0x4c, 0x10, 0x78, 0x73, 0x04, 0x60, 0x30, 0x93, 0x36, 0x0e, 0xec, 0x10, 0x0e, 0xf3, 0x30, 0x0f, 0x6e, 0x20, 0x0a, 0xf5, 0x60, 0x0e, 0xe6, 0x50, 0x0e, 0xf2, 0xc0, 0x07, 0xf5, 0xe0, 0x0e, 0xf3, 0x90, 0x0e, 0xe7, 0xe0, 0x0e, 0xe5, 0x40, 0x0e, 0x60, 0x90, 0x0e, 0xee, 0x40, 0x0f, 0x7e, 0x80, 0x02, 0x40, 0xe1, 0x34, 0x69, 0x8a, 0x28, 0x61, 0xf2, 0x57, 0x78, 0xc3, 0x26, 0x42, 0x1b, 0x86, 0x88, 0x90, 0xa4, 0x8d, 0x2a, 0x0a, 0x22, 0x42, 0x01, 0xa0, 0x71, 0x04, 0x10, 0x19, 0x12, 0x0a, 0x00, 0x95, 0x11, 0x80, 0x12, 0x1c, 0x42, 0x65, 0x00, 0x00, 0x90, 0x3a, 0x6a, 0xb8, 0xfc, 0x09, 0x7b, 0x08, 0xc9, 0xe7, 0x36, 0xaa, 0x58, 0x89, 0xc9, 0x47, 0x6e, 0x1b, 0x11, 0x00, 0x00, 0x30, 0x47, 0x80, 0x50, 0xbb, 0x67, 0xb8, 0xfc, 0x09, 0x7b, 0x08, 0xc9, 0x0f, 0x81, 0x66, 0x58, 0x08, 0x14, 0xb8, 0x42, 0x30, 0xf0, 0x00, 0xc1, 0x9b, 0x86, 0xcb, 0x9f, 0xb0, 0x87, 0x90, 0xfc, 0x95, 0x90, 0x56, 0x62, 0xf2, 0x91, 0xdb, 0x46, 0x05, 0x00, 0x00, 0x80, 0x52, 0x48, 0xf0, 0x00, 0xa0, 0x39, 0x47, 0x10, 0x94, 0xa1, 0x02, 0x40, 0xb6, 0x18, 0x0f, 0x34, 0x00, 0x2a, 0xe1, 0xa2, 0x1c, 0xf0, 0x00, 0x00, 0x00, 0x80, 0x46, 0x7a, 0x20, 0x60, 0x8e, 0x00, 0x14, 0x00, 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x3a, 0x0f, 0x64, 0x90, 0x21, 0x23, 0x45, 0x44, 0x00, 0x66, 0x00, 0xc0, 0xdc, 0x00, 0x80, 0xd9, 0x01, 0x00, 0x0c, 0x79, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, 0x28, 0x40, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4, 0x81, 0x80, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xc8, 0x33, 0x01, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x90, 0xc7, 0x02, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x21, 0x0f, 0x06, 0x04, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x1e, 0x0d, 0x08, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb2, 0x40, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x02, 0x25, 0x30, 0x02, 0x50, 0x08, 0xc5, 0x50, 0x14, 0xa5, 0x50, 0x16, 0x65, 0x50, 0x0e, 0x05, 0x18, 0x40, 0xbd, 0x40, 0x81, 0xa8, 0x8e, 0x00, 0xd0, 0x98, 0x01, 0x20, 0x32, 0x03, 0x40, 0x65, 0x06, 0x80, 0xcc, 0x0c, 0x00, 0x89, 0x19, 0x00, 0x0a, 0x33, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0xc4, 0x83, 0x0c, 0x6f, 0x0c, 0x24, 0xc6, 0x45, 0x66, 0x43, 0x10, 0x4c, 0x10, 0x00, 0x65, 0x82, 0x00, 0x2c, 0x1b, 0x84, 0x81, 0x98, 0x20, 0x00, 0xcc, 0x06, 0x61, 0x30, 0x28, 0x8c, 0xcd, 0x4d, 0x10, 0x80, 0x66, 0xc3, 0x80, 0x24, 0xc4, 0x04, 0x41, 0xd0, 0x38, 0x88, 0xd5, 0x99, 0x4d, 0x10, 0x00, 0x67, 0x82, 0x00, 0x3c, 0x1b, 0x04, 0xc2, 0xd9, 0x90, 0x10, 0x0b, 0x43, 0x10, 0x43, 0x43, 0x3c, 0x1b, 0x02, 0x68, 0x82, 0x40, 0x5c, 0x1c, 0xea, 0xc2, 0xec, 0x26, 0x08, 0x00, 0x34, 0x41, 0xa8, 0xaa, 0x0d, 0x0b, 0x21, 0x4d, 0x04, 0x31, 0x50, 0x55, 0x55, 0x01, 0x1b, 0x02, 0x6b, 0x82, 0x60, 0x64, 0x24, 0xc2, 0xe4, 0xce, 0xe6, 0x36, 0x20, 0x04, 0x96, 0x11, 0xc4, 0x60, 0x00, 0x1b, 0x02, 0x6d, 0x03, 0x11, 0x5d, 0x1b, 0x30, 0x41, 0x08, 0x36, 0x06, 0x68, 0x13, 0x04, 0x20, 0x9a, 0x20, 0x00, 0xd2, 0x06, 0x23, 0xf1, 0x3e, 0x02, 0x0c, 0x9c, 0x0d, 0x82, 0x11, 0x06, 0x13, 0x84, 0xc1, 0xda, 0x60, 0x24, 0xde, 0x47, 0x80, 0x81, 0xb1, 0x41, 0x30, 0xc8, 0x60, 0x82, 0x50, 0x60, 0x34, 0xe6, 0xe8, 0xe4, 0xd2, 0xc8, 0xca, 0x36, 0x18, 0xc9, 0x19, 0x7c, 0x04, 0x18, 0x38, 0x1b, 0x04, 0x03, 0x0d, 0x36, 0x1c, 0x44, 0x27, 0x06, 0x63, 0x50, 0x06, 0x66, 0x90, 0x06, 0x13, 0x84, 0x64, 0xd8, 0x00, 0x6c, 0x18, 0x08, 0x36, 0x60, 0x83, 0x0d, 0x41, 0x1b, 0x6c, 0x18, 0x86, 0x35, 0x70, 0x03, 0x12, 0x6d, 0x61, 0x69, 0x6e, 0x13, 0x84, 0x8e, 0x9a, 0x20, 0x00, 0xd3, 0x86, 0x41, 0x0e, 0x86, 0x61, 0x03, 0x41, 0xc4, 0x81, 0x31, 0x07, 0x1b, 0x8a, 0x35, 0x80, 0x03, 0x80, 0xa3, 0x83, 0x2a, 0x6c, 0x6c, 0x76, 0x6d, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x53, 0x82, 0xa0, 0x0a, 0x19, 0x9e, 0x8b, 0x5d, 0x99, 0xdc, 0x5c, 0xda, 0x9b, 0xdb, 0x94, 0x80, 0x68, 0x42, 0x86, 0xe7, 0x62, 0x17, 0xc6, 0x66, 0x57, 0x26, 0x37, 0x25, 0x30, 0xea, 0x90, 0xe1, 0xb9, 0xcc, 0xa1, 0x85, 0x91, 0x95, 0xc9, 0x35, 0xbd, 0x91, 0x95, 0xb1, 0x4d, 0x09, 0x92, 0x32, 0x64, 0x78, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x53, 0x82, 0xad, 0x12, 0x19, 0x9e, 0x0b, 0x5d, 0x1e, 0x5c, 0x59, 0x90, 0x9b, 0xdb, 0x1b, 0x5d, 0x18, 0x5d, 0xda, 0x9b, 0xdb, 0xdc, 0x14, 0x21, 0x0d, 0xdc, 0xa0, 0x0e, 0x19, 0x9e, 0x4b, 0x99, 0x1b, 0x9d, 0x5c, 0x1e, 0xd4, 0x5b, 0x9a, 0x1b, 0xdd, 0xdc, 0x94, 0x80, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x8c, 0xcc, 0x21, 0x07, 0x7c, 0x70, 0x03, 0x74, 0x60, 0x07, 0x37, 0x90, 0x87, 0x72, 0x98, 0x87, 0x77, 0xa8, 0x07, 0x79, 0x18, 0x87, 0x72, 0x70, 0x83, 0x70, 0xa0, 0x07, 0x7a, 0x90, 0x87, 0x74, 0x10, 0x87, 0x7a, 0xa0, 0x87, 0x72, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x36, 0x40, 0x30, 0x00, 0xd2, 0x58, 0xc1, 0x36, 0x5c, 0xbe, 0xf3, 0xf8, 0x42, 0x40, 0x15, 0x05, 0x11, 0x95, 0x0e, 0x30, 0x94, 0x84, 0x01, 0x08, 0x98, 0x8f, 0xdc, 0xb6, 0x1d, 0x80, 0xc1, 0x70, 0xf9, 0xce, 0xe3, 0x0b, 0x07, 0x21, 0x28, 0x9a, 0x20, 0x10, 0x92, 0xf4, 0x51, 0xcb, 0x82, 0x99, 0xc0, 0xf3, 0x10, 0x83, 0x8f, 0xdc, 0x76, 0x01, 0x58, 0x81, 0x9f, 0xb8, 0x6e, 0x06, 0x02, 0x67, 0xd6, 0x1f, 0x49, 0x58, 0x37, 0x9b, 0xcb, 0x72, 0x60, 0x12, 0x08, 0x0c, 0x9a, 0x00, 0x01, 0x44, 0x86, 0x64, 0x06, 0xd4, 0x70, 0xf9, 0xce, 0xe3, 0x07, 0x54, 0x51, 0x10, 0x51, 0xe9, 0x00, 0x83, 0x8f, 0xdc, 0x76, 0x05, 0x7c, 0x81, 0x5f, 0x3d, 0x6c, 0x07, 0x02, 0x67, 0x55, 0xe9, 0x55, 0x98, 0xa7, 0x97, 0x83, 0x64, 0xb2, 0xbc, 0x3c, 0x9f, 0x0b, 0xeb, 0x66, 0x73, 0x59, 0x0e, 0x04, 0x06, 0x0d, 0x41, 0x1a, 0x2e, 0xdf, 0x79, 0x7c, 0x21, 0x22, 0x80, 0x89, 0x08, 0x81, 0x66, 0x58, 0x08, 0x23, 0x90, 0x86, 0xcb, 0x77, 0x1e, 0x7f, 0x3a, 0x22, 0x02, 0x18, 0xc4, 0xc1, 0x47, 0x6e, 0xdb, 0x12, 0xaa, 0xe1, 0xf2, 0x9d, 0xc7, 0x0f, 0xa8, 0xa2, 0x20, 0x22, 0x76, 0x72, 0x22, 0xc2, 0x47, 0x6e, 0x1b, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x66, 0x00, 0x4a, 0xae, 0x74, 0x03, 0xca, 0xae, 0x10, 0x03, 0xca, 0x31, 0xa0, 0x14, 0x03, 0xa8, 0x95, 0xc0, 0x08, 0x40, 0x11, 0x94, 0x01, 0x00, 0x00, 0x00, 0x00, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x80, 0x7d, 0x0a, 0xc1, 0x71, 0xd2, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x60, 0x60, 0xb0, 0x10, 0x5d, 0x37, 0x8d, 0x18, 0x24, 0x00, 0x08, 0x82, 0x01, 0x16, 0x06, 0x0c, 0xe1, 0x79, 0xd4, 0x88, 0x81, 0x01, 0x80, 0x20, 0x18, 0x28, 0x66, 0xc0, 0x7c, 0x23, 0x06, 0x07, 0x00, 0x82, 0x60, 0x00, 0x99, 0x01, 0x23, 0x80, 0xc1, 0x68, 0x42, 0x00, 0x54, 0x30, 0xc8, 0x88, 0x01, 0x02, 0x80, 0x20, 0x18, 0x4c, 0x68, 0xe0, 0x18, 0x81, 0x34, 0x9a, 0x10, 0x00, 0xa3, 0x09, 0x02, 0x31, 0x62, 0x60, 0x00, 0x20, 0x08, 0x06, 0x96, 0x1a, 0x40, 0xc1, 0x05, 0x20, 0x2a, 0x11, 0x83, 0x1b, 0x31, 0x68, 0x00, 0x10, 0x04, 0x03, 0x6d, 0x0d, 0xa4, 0x26, 0xc0, 0x0a, 0x01, 0xc3, 0x1c, 0x0c, 0x07, 0x02, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x86, 0xf2, 0x04, 0x54, 0xf1, 0x4f, 0xc4, 0x35, 0x51, 0x11, 0xf1, 0x07, 0x54, 0x61, 0x29, 0x0c, 0x10, 0x19, 0xd2, 0x2f, 0x04, 0x54, 0x51, 0x10, 0x91, 0xb9, 0x28, 0x1b, 0x55, 0x14, 0x44, 0x54, 0x3a, 0xc0, 0x60, 0x27, 0x0e, 0x05, 0x54, 0xbf, 0xab, 0xbd, 0x7f, 0x04, 0x58, 0x01, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; #if 0 /* uint4 to work around what looks like an fxc bug */ RWBuffer buf : register(u1); RWByteAddressBuffer uav : register(u0); cbuffer args : register(b0) { uint stride; }; [numthreads(64, 1, 1)] void main(uint3 tid : SV_DISPATCHTHREADID) { uint fb; uint v = buf.Load(tid.x * stride, fb).r; uint s = CheckAccessFullyMapped(fb) ? 1 : 0; uav.Store2(8 * tid.x, uint2(v, s)); } #endif static const DWORD cs_ld_typed_uav_dxbc[] = { 0x43425844, 0xd7dc177d, 0x5722245f, 0x5af69a70, 0x281d24ee, 0x00000001, 0x0000017c, 0x00000004, 0x00000030, 0x00000040, 0x00000050, 0x0000016c, 0x4e475349, 0x00000008, 0x00000000, 0x00000008, 0x4e47534f, 0x00000008, 0x00000000, 0x00000008, 0x58454853, 0x00000114, 0x00050050, 0x00000045, 0x0100086a, 0x04000059, 0x00208e46, 0x00000000, 0x00000001, 0x0300009d, 0x0011e000, 0x00000000, 0x0400089c, 0x0011e000, 0x00000001, 0x00004444, 0x0200005f, 0x00020012, 0x02000068, 0x00000002, 0x0400009b, 0x00000040, 0x00000001, 0x00000001, 0x08000026, 0x0000d000, 0x00100012, 0x00000000, 0x0002000a, 0x0020800a, 0x00000000, 0x00000000, 0x8b0000e1, 0x80000042, 0x00111103, 0x00100012, 0x00000000, 0x00100012, 0x00000001, 0x00100006, 0x00000000, 0x0011ee46, 0x00000001, 0x050000ea, 0x00100042, 0x00000000, 0x0010000a, 0x00000001, 0x09000037, 0x00100022, 0x00000000, 0x0010002a, 0x00000000, 0x00004001, 0x00000001, 0x00004001, 0x00000000, 0x06000029, 0x00100042, 0x00000000, 0x0002000a, 0x00004001, 0x00000003, 0x070000a6, 0x0011e032, 0x00000000, 0x0010002a, 0x00000000, 0x00100046, 0x00000000, 0x0100003e, 0x30494653, 0x00000008, 0x00000900, 0x00000000, }; static const BYTE cs_ld_typed_uav_dxil[] = { 0x44, 0x58, 0x42, 0x43, 0x6d, 0xbe, 0x19, 0x57, 0x7a, 0xca, 0x09, 0xe9, 0x8b, 0x07, 0x51, 0x69, 0xd5, 0x03, 0x66, 0x06, 0x01, 0x00, 0x00, 0x00, 0x30, 0x08, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x4f, 0x53, 0x47, 0x31, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x53, 0x56, 0x30, 0x6c, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 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, 0x44, 0x58, 0x49, 0x4c, 0x50, 0x07, 0x00, 0x00, 0x60, 0x00, 0x05, 0x00, 0xd4, 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x38, 0x07, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xcb, 0x01, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x52, 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, 0x91, 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x29, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, 0x86, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x01, 0xd5, 0x06, 0x62, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x00, 0x49, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, 0x09, 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, 0x4c, 0x10, 0x7c, 0x73, 0x04, 0x60, 0x30, 0x8c, 0x40, 0x00, 0x33, 0xa1, 0xc1, 0x38, 0xb0, 0x43, 0x38, 0xcc, 0xc3, 0x3c, 0xb8, 0x81, 0x2c, 0xdc, 0x82, 0x28, 0xd4, 0x83, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x03, 0x1f, 0xd8, 0x43, 0x39, 0x8c, 0x03, 0x3d, 0xbc, 0x83, 0x3c, 0xf0, 0x41, 0x3d, 0xb8, 0xc3, 0x3c, 0xa4, 0xc3, 0x39, 0xb8, 0x43, 0x39, 0x90, 0x03, 0x18, 0xa4, 0x83, 0x3b, 0xd0, 0x03, 0x1b, 0x80, 0x01, 0x1d, 0xf8, 0x01, 0x18, 0xf8, 0x01, 0x0a, 0x02, 0x89, 0xd3, 0xa4, 0x29, 0xa2, 0x84, 0xc9, 0x5f, 0xe1, 0x0d, 0x9b, 0x08, 0x6d, 0x18, 0x22, 0x42, 0x92, 0x36, 0xaa, 0x28, 0x88, 0x08, 0x05, 0x80, 0xc8, 0x11, 0x40, 0x64, 0x48, 0x28, 0x00, 0x64, 0x46, 0x00, 0x4a, 0x80, 0x28, 0x95, 0x01, 0x00, 0x40, 0xeb, 0xa8, 0xe1, 0xf2, 0x27, 0xec, 0x21, 0x24, 0x9f, 0xdb, 0xa8, 0x62, 0x25, 0x26, 0x1f, 0xb9, 0x6d, 0x44, 0x00, 0x00, 0xc0, 0x1c, 0x01, 0x42, 0xee, 0x9e, 0xe1, 0xf2, 0x27, 0xec, 0x21, 0x24, 0x3f, 0x04, 0x9a, 0x61, 0x21, 0x50, 0xf0, 0x0a, 0xd1, 0x00, 0x04, 0x14, 0x6f, 0x1a, 0x2e, 0x7f, 0xc2, 0x1e, 0x42, 0xf2, 0x57, 0x42, 0x5a, 0x89, 0xc9, 0x47, 0x6e, 0x1b, 0x15, 0x00, 0x00, 0x00, 0x4a, 0x31, 0x01, 0x04, 0x80, 0xe8, 0x1c, 0x41, 0x50, 0x06, 0x0b, 0x00, 0xdd, 0x62, 0x40, 0xe0, 0x00, 0xb0, 0x94, 0x8b, 0x82, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1c, 0xed, 0x81, 0x80, 0x39, 0x02, 0x50, 0x00, 0x00, 0x00, 0x00, 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x3a, 0x0f, 0x64, 0x90, 0x21, 0x23, 0x45, 0x44, 0x00, 0x6a, 0x00, 0xc0, 0xe4, 0x00, 0x80, 0xe9, 0x01, 0x00, 0x0c, 0x79, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, 0x2c, 0x40, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4, 0x89, 0x80, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xc8, 0x43, 0x01, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x90, 0xe7, 0x02, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x21, 0x4f, 0x06, 0x04, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x9e, 0x0d, 0x08, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb2, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x02, 0x25, 0x30, 0x02, 0x50, 0x08, 0xc5, 0x50, 0x14, 0xa5, 0x50, 0x16, 0x05, 0x52, 0x06, 0xe5, 0x50, 0x80, 0x01, 0xe4, 0x0b, 0x14, 0x38, 0x80, 0xec, 0x08, 0x00, 0x91, 0x19, 0x00, 0x2a, 0x33, 0x00, 0x64, 0x66, 0x00, 0xe8, 0xcc, 0x00, 0xd0, 0x98, 0x01, 0x20, 0x31, 0x03, 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0xc4, 0x83, 0x0c, 0x6f, 0x0c, 0x24, 0xc6, 0x45, 0x66, 0x43, 0x10, 0x4c, 0x10, 0x00, 0x65, 0x82, 0x00, 0x2c, 0x1b, 0x84, 0x81, 0x98, 0x20, 0x00, 0xcc, 0x06, 0x61, 0x30, 0x28, 0x8c, 0xcd, 0x4d, 0x10, 0x80, 0x66, 0xc3, 0x80, 0x24, 0xc4, 0x04, 0x61, 0xd8, 0x38, 0x88, 0xd5, 0x99, 0x4d, 0x10, 0x00, 0x67, 0x82, 0x60, 0x59, 0x13, 0x04, 0xe0, 0xd9, 0x20, 0x10, 0xcf, 0x86, 0x85, 0x58, 0x18, 0x62, 0x18, 0x1a, 0xc7, 0x71, 0xa0, 0x09, 0x42, 0x81, 0x71, 0xa8, 0x0b, 0xb3, 0x9b, 0x20, 0x00, 0xd0, 0x86, 0x65, 0x90, 0x26, 0x82, 0x18, 0x28, 0xc7, 0x71, 0x80, 0x0d, 0x42, 0x54, 0x4d, 0x10, 0x0e, 0x8d, 0x44, 0x98, 0xdc, 0xd9, 0xdc, 0x06, 0x84, 0xb8, 0x30, 0x82, 0x18, 0x0c, 0x60, 0x43, 0x90, 0x6d, 0x20, 0x00, 0x4b, 0x03, 0x26, 0x08, 0x02, 0x37, 0x41, 0x00, 0x22, 0x06, 0x68, 0x13, 0x04, 0x40, 0x9a, 0x20, 0x00, 0xd3, 0x06, 0x23, 0xf1, 0x3e, 0x02, 0x0c, 0x9e, 0x0d, 0x42, 0x17, 0x06, 0x13, 0x04, 0xe2, 0xda, 0x60, 0x24, 0xde, 0x47, 0x80, 0x81, 0xb1, 0x41, 0x30, 0xc8, 0x60, 0x82, 0x60, 0x64, 0x34, 0xe6, 0xe8, 0xe4, 0xd2, 0xc8, 0xca, 0x36, 0x18, 0xc9, 0x19, 0x7c, 0x04, 0x18, 0x3c, 0x1b, 0x04, 0x03, 0x0d, 0x36, 0x1c, 0x04, 0x27, 0x06, 0x63, 0x50, 0x06, 0x66, 0x90, 0x06, 0x13, 0x04, 0x65, 0xd8, 0x00, 0x6c, 0x18, 0x08, 0x36, 0x60, 0x83, 0x0d, 0x41, 0x1b, 0x6c, 0x18, 0x86, 0x35, 0x70, 0x03, 0x12, 0x6d, 0x61, 0x69, 0x6e, 0x13, 0x04, 0xaf, 0x9a, 0x20, 0x00, 0xd4, 0x86, 0x41, 0x0e, 0x86, 0x61, 0x03, 0x41, 0xc4, 0x81, 0x31, 0x07, 0x1b, 0x8a, 0x35, 0x80, 0x03, 0x60, 0xa3, 0x83, 0x2a, 0x6c, 0x6c, 0x76, 0x6d, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x53, 0x82, 0xa0, 0x0a, 0x19, 0x9e, 0x8b, 0x5d, 0x99, 0xdc, 0x5c, 0xda, 0x9b, 0xdb, 0x94, 0x80, 0x68, 0x42, 0x86, 0xe7, 0x62, 0x17, 0xc6, 0x66, 0x57, 0x26, 0x37, 0x25, 0x30, 0xea, 0x90, 0xe1, 0xb9, 0xcc, 0xa1, 0x85, 0x91, 0x95, 0xc9, 0x35, 0xbd, 0x91, 0x95, 0xb1, 0x4d, 0x09, 0x92, 0x32, 0x64, 0x78, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x53, 0x02, 0xad, 0x12, 0x19, 0x9e, 0x0b, 0x5d, 0x1e, 0x5c, 0x59, 0x90, 0x9b, 0xdb, 0x1b, 0x5d, 0x18, 0x5d, 0xda, 0x9b, 0xdb, 0xdc, 0x14, 0x21, 0x0d, 0xdc, 0xa0, 0x0e, 0x19, 0x9e, 0x4b, 0x99, 0x1b, 0x9d, 0x5c, 0x1e, 0xd4, 0x5b, 0x9a, 0x1b, 0xdd, 0xdc, 0x94, 0x80, 0x0e, 0x00, 0x79, 0x18, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x8c, 0xcc, 0x21, 0x07, 0x7c, 0x70, 0x03, 0x74, 0x60, 0x07, 0x37, 0x90, 0x87, 0x72, 0x98, 0x87, 0x77, 0xa8, 0x07, 0x79, 0x18, 0x87, 0x72, 0x70, 0x83, 0x70, 0xa0, 0x07, 0x7a, 0x90, 0x87, 0x74, 0x10, 0x87, 0x7a, 0xa0, 0x87, 0x72, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x36, 0x40, 0x30, 0x00, 0xd2, 0x58, 0xc1, 0x36, 0x5c, 0xbe, 0xf3, 0xf8, 0x42, 0x40, 0x15, 0x05, 0x11, 0x95, 0x0e, 0x30, 0x94, 0x84, 0x01, 0x08, 0x98, 0x8f, 0xdc, 0x76, 0x01, 0x9c, 0x41, 0xe0, 0x27, 0xae, 0x9b, 0x81, 0xc0, 0x99, 0xf5, 0x47, 0x92, 0x5e, 0x85, 0x75, 0xb3, 0xb9, 0x2c, 0x07, 0x5a, 0x7f, 0x24, 0x7b, 0x79, 0x4c, 0x7f, 0xcb, 0x81, 0x49, 0x12, 0x6c, 0x06, 0x04, 0x02, 0x81, 0x41, 0x3b, 0x00, 0x83, 0xe1, 0xf2, 0x9d, 0xc7, 0x17, 0x0e, 0x42, 0x50, 0x34, 0x41, 0x20, 0x24, 0xe9, 0xa3, 0x96, 0x05, 0x33, 0x81, 0xe7, 0x21, 0x06, 0x1f, 0xb9, 0x6d, 0x13, 0x20, 0x80, 0xc8, 0x90, 0xcc, 0x80, 0x1a, 0x2e, 0xdf, 0x79, 0xfc, 0x80, 0x2a, 0x0a, 0x22, 0x2a, 0x1d, 0x60, 0xf0, 0x91, 0xdb, 0xae, 0x80, 0x2f, 0xf0, 0xab, 0x87, 0xed, 0x40, 0xe0, 0xac, 0x2a, 0xbd, 0x0a, 0xf3, 0xf4, 0x72, 0x90, 0x4c, 0x96, 0x97, 0xe7, 0x73, 0x61, 0xdd, 0x6c, 0x2e, 0xcb, 0x81, 0xc0, 0xa0, 0x21, 0x48, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x44, 0x04, 0x30, 0x11, 0x21, 0xd0, 0x0c, 0x0b, 0x61, 0x04, 0xd2, 0x70, 0xf9, 0xce, 0xe3, 0x4f, 0x47, 0x44, 0x00, 0x83, 0x38, 0xf8, 0xc8, 0x6d, 0x5b, 0x42, 0x35, 0x5c, 0xbe, 0xf3, 0xf8, 0x01, 0x55, 0x14, 0x44, 0xc4, 0x4e, 0x4e, 0x44, 0xf8, 0xc8, 0x6d, 0x03, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x66, 0x00, 0x4a, 0xae, 0x74, 0x03, 0xca, 0xae, 0x10, 0x03, 0xca, 0x31, 0xa0, 0x14, 0x03, 0xc8, 0x95, 0x40, 0x11, 0x94, 0x01, 0x00, 0x00, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x90, 0x7d, 0xc9, 0xd0, 0x71, 0xd1, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x64, 0x60, 0xa0, 0x10, 0x9d, 0x27, 0x8d, 0x18, 0x24, 0x00, 0x08, 0x82, 0x41, 0x16, 0x06, 0x0b, 0xe1, 0x79, 0xd3, 0x88, 0x81, 0x01, 0x80, 0x20, 0x18, 0x2c, 0x66, 0xb0, 0x7c, 0x23, 0x06, 0x07, 0x00, 0x82, 0x60, 0x10, 0x99, 0xc1, 0x22, 0x80, 0xc1, 0x68, 0x42, 0x00, 0x54, 0x30, 0xc8, 0x88, 0x01, 0x02, 0x80, 0x20, 0x18, 0x50, 0x68, 0xd0, 0x18, 0x41, 0x34, 0x9a, 0x10, 0x00, 0xa3, 0x09, 0x02, 0x31, 0x62, 0x60, 0x00, 0x20, 0x08, 0x06, 0x97, 0x1a, 0x3c, 0xc1, 0x05, 0x20, 0x2a, 0x09, 0x83, 0x1b, 0x31, 0x68, 0x00, 0x10, 0x04, 0x83, 0x6d, 0x0d, 0xa2, 0x26, 0xb8, 0x0a, 0xe1, 0xba, 0x1c, 0x0c, 0x07, 0x02, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x86, 0xb2, 0x04, 0x54, 0xf1, 0xbb, 0xda, 0xfb, 0x07, 0x54, 0x61, 0x29, 0x0c, 0x10, 0x19, 0xd2, 0x2f, 0x04, 0x54, 0x51, 0x10, 0x91, 0xb9, 0x28, 0x1b, 0x55, 0x14, 0x44, 0x54, 0x3a, 0xc0, 0x60, 0x27, 0x0e, 0x05, 0x54, 0xbf, 0xab, 0xbd, 0x7f, 0x04, 0x58, 0x01, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; #if 0 ByteAddressBuffer buf : register(t0); RWByteAddressBuffer uav : register(u0); cbuffer args : register(b0) { uint stride; }; [numthreads(64, 1, 1)] void main(uint3 tid : SV_DISPATCHTHREADID) { uint fb; uint v = buf.Load(tid.x * stride, fb); uint s = CheckAccessFullyMapped(fb) ? 1 : 0; uav.Store2(8 * tid.x, uint2(v, s)); } #endif static const DWORD cs_ld_raw_dxbc[] = { 0x43425844, 0xb925f9c1, 0x36734268, 0x213bf8fc, 0x3e097b37, 0x00000001, 0x00000178, 0x00000004, 0x00000030, 0x00000040, 0x00000050, 0x00000168, 0x4e475349, 0x00000008, 0x00000000, 0x00000008, 0x4e47534f, 0x00000008, 0x00000000, 0x00000008, 0x58454853, 0x00000110, 0x00050050, 0x00000044, 0x0100086a, 0x04000059, 0x00208e46, 0x00000000, 0x00000001, 0x030000a1, 0x00107000, 0x00000000, 0x0300009d, 0x0011e000, 0x00000000, 0x0200005f, 0x00020012, 0x02000068, 0x00000002, 0x0400009b, 0x00000040, 0x00000001, 0x00000001, 0x08000026, 0x0000d000, 0x00100012, 0x00000000, 0x0002000a, 0x0020800a, 0x00000000, 0x00000000, 0x8b0000e2, 0x800002c2, 0x00199983, 0x00100012, 0x00000000, 0x00100012, 0x00000001, 0x0010000a, 0x00000000, 0x00107006, 0x00000000, 0x050000ea, 0x00100042, 0x00000000, 0x0010000a, 0x00000001, 0x09000037, 0x00100022, 0x00000000, 0x0010002a, 0x00000000, 0x00004001, 0x00000001, 0x00004001, 0x00000000, 0x06000029, 0x00100042, 0x00000000, 0x0002000a, 0x00004001, 0x00000003, 0x070000a6, 0x0011e032, 0x00000000, 0x0010002a, 0x00000000, 0x00100046, 0x00000000, 0x0100003e, 0x30494653, 0x00000008, 0x00000100, 0x00000000, }; static const BYTE cs_ld_raw_dxil[] = { 0x44, 0x58, 0x42, 0x43, 0xa6, 0x4d, 0x81, 0x45, 0xbb, 0x45, 0x0d, 0x9b, 0x5c, 0xad, 0x97, 0xdb, 0xe7, 0x38, 0x8a, 0x70, 0x01, 0x00, 0x00, 0x00, 0xdc, 0x07, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x4f, 0x53, 0x47, 0x31, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x53, 0x56, 0x30, 0x6c, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 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, 0x07, 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, 0x44, 0x58, 0x49, 0x4c, 0xfc, 0x06, 0x00, 0x00, 0x60, 0x00, 0x05, 0x00, 0xbf, 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xe4, 0x06, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xb6, 0x01, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x52, 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, 0x91, 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x29, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, 0x86, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x01, 0xd5, 0x06, 0x62, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x00, 0x49, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, 0x09, 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, 0x4c, 0x10, 0x78, 0x73, 0x04, 0x60, 0x70, 0x98, 0x34, 0x45, 0x94, 0x30, 0xf9, 0x1b, 0x36, 0x11, 0xda, 0x30, 0x44, 0x84, 0x24, 0x6d, 0x54, 0x51, 0x10, 0x11, 0x0a, 0x00, 0x85, 0xd3, 0xa4, 0x29, 0xa2, 0x84, 0xc9, 0x5f, 0xe1, 0x0d, 0x9b, 0x08, 0x6d, 0x18, 0x22, 0x42, 0x92, 0x36, 0xaa, 0x28, 0x88, 0x08, 0x05, 0x80, 0xc6, 0x11, 0x40, 0x64, 0x48, 0x28, 0x00, 0x54, 0x46, 0x00, 0x4a, 0x70, 0x08, 0x95, 0x01, 0x00, 0x40, 0xea, 0xa8, 0xe1, 0xf2, 0x27, 0xec, 0x21, 0x24, 0x9f, 0xdb, 0xa8, 0x62, 0x25, 0x26, 0x1f, 0xb9, 0x6d, 0x44, 0x00, 0x00, 0xc0, 0x1c, 0x01, 0x42, 0xed, 0x9e, 0xe1, 0xf2, 0x27, 0xec, 0x21, 0x24, 0x3f, 0x04, 0x9a, 0x61, 0x21, 0x50, 0xe0, 0x0a, 0xc1, 0xc0, 0x03, 0x04, 0xe7, 0x08, 0x82, 0x32, 0x48, 0x00, 0x68, 0x16, 0xe3, 0x81, 0x06, 0x80, 0xa4, 0x7a, 0xd3, 0x70, 0xf9, 0x13, 0xf6, 0x10, 0x92, 0xbf, 0x12, 0xd2, 0x4a, 0x4c, 0x3e, 0x72, 0xdb, 0xa8, 0x00, 0x00, 0x00, 0x50, 0x8a, 0x0b, 0x1e, 0x00, 0x84, 0x8b, 0x72, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x1a, 0xe9, 0x81, 0x80, 0x39, 0x02, 0x50, 0x00, 0x00, 0x00, 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x3a, 0x0f, 0x64, 0x90, 0x21, 0x23, 0x45, 0x44, 0x00, 0x66, 0x00, 0xc0, 0xdc, 0x00, 0x80, 0xd9, 0x01, 0x00, 0x0c, 0x79, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, 0x28, 0x40, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4, 0x81, 0x80, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xc8, 0x33, 0x01, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x90, 0xa7, 0x02, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x21, 0x0f, 0x06, 0x04, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x1e, 0x0d, 0x08, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb2, 0x40, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x02, 0x25, 0x30, 0x02, 0x50, 0x08, 0xc5, 0x50, 0x16, 0x65, 0x50, 0x0e, 0xa5, 0x50, 0x80, 0x01, 0xd4, 0x0b, 0x14, 0x88, 0xe4, 0x08, 0x00, 0x8d, 0x19, 0x00, 0x22, 0x33, 0x00, 0x54, 0x66, 0x00, 0xc8, 0xcc, 0x00, 0x90, 0x98, 0x01, 0xa0, 0x30, 0x03, 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0xc4, 0x83, 0x0c, 0x6f, 0x0c, 0x24, 0xc6, 0x45, 0x66, 0x43, 0x10, 0x4c, 0x10, 0x00, 0x65, 0x82, 0x00, 0x2c, 0x1b, 0x84, 0x81, 0x98, 0x20, 0x00, 0xcc, 0x06, 0x61, 0x30, 0x28, 0x8c, 0xcd, 0x4d, 0x10, 0x80, 0x66, 0xc3, 0x80, 0x24, 0xc4, 0x04, 0x41, 0xc8, 0x38, 0x88, 0xd5, 0x99, 0x4d, 0x10, 0x00, 0x67, 0x43, 0x42, 0x2c, 0x0c, 0x41, 0x0c, 0x0d, 0x01, 0x6c, 0x08, 0x9c, 0x09, 0x02, 0x61, 0x71, 0xa8, 0x0b, 0xb3, 0x9b, 0x20, 0x48, 0xd4, 0x86, 0x85, 0x80, 0x22, 0x82, 0x18, 0x1a, 0x49, 0x92, 0x80, 0x0d, 0xc1, 0x34, 0x41, 0x30, 0x30, 0x12, 0x61, 0x72, 0x67, 0x73, 0x1b, 0x10, 0xa2, 0xb2, 0x08, 0x62, 0x30, 0x80, 0x0d, 0xc1, 0xb5, 0x81, 0x78, 0x28, 0x0c, 0x98, 0x20, 0x04, 0x1a, 0x03, 0xb4, 0x09, 0x02, 0xf0, 0x4c, 0x10, 0x00, 0x68, 0x83, 0x91, 0x6c, 0x1c, 0xd1, 0x19, 0x1b, 0x04, 0xc3, 0x9b, 0x20, 0x0c, 0xd5, 0x04, 0xa1, 0xb8, 0x68, 0xcc, 0xd1, 0xc9, 0xa5, 0x91, 0x95, 0x4d, 0x10, 0x80, 0x68, 0x83, 0x91, 0x88, 0x01, 0x47, 0x74, 0x63, 0xb0, 0x41, 0x30, 0xc8, 0x60, 0xc3, 0x41, 0x68, 0x1f, 0x18, 0x7c, 0x61, 0x50, 0x06, 0x13, 0x84, 0x64, 0xd8, 0x00, 0x6c, 0x18, 0x08, 0x34, 0x40, 0x83, 0x0d, 0x41, 0x1a, 0x6c, 0x18, 0x86, 0x33, 0x50, 0x03, 0x12, 0x6d, 0x61, 0x69, 0x6e, 0x13, 0x84, 0x6e, 0x9a, 0x20, 0x00, 0xd2, 0x86, 0xc1, 0x0d, 0x86, 0x61, 0x03, 0x41, 0xb4, 0x81, 0xf1, 0x06, 0x1b, 0x8a, 0x33, 0x60, 0x03, 0x20, 0x83, 0x83, 0x2a, 0x6c, 0x6c, 0x76, 0x6d, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x53, 0x82, 0xa0, 0x0a, 0x19, 0x9e, 0x8b, 0x5d, 0x99, 0xdc, 0x5c, 0xda, 0x9b, 0xdb, 0x94, 0x80, 0x68, 0x42, 0x86, 0xe7, 0x62, 0x17, 0xc6, 0x66, 0x57, 0x26, 0x37, 0x25, 0x30, 0xea, 0x90, 0xe1, 0xb9, 0xcc, 0xa1, 0x85, 0x91, 0x95, 0xc9, 0x35, 0xbd, 0x91, 0x95, 0xb1, 0x4d, 0x09, 0x92, 0x32, 0x64, 0x78, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x53, 0x02, 0xac, 0x12, 0x19, 0x9e, 0x0b, 0x5d, 0x1e, 0x5c, 0x59, 0x90, 0x9b, 0xdb, 0x1b, 0x5d, 0x18, 0x5d, 0xda, 0x9b, 0xdb, 0xdc, 0x14, 0xa1, 0x0c, 0xd4, 0xa0, 0x0e, 0x19, 0x9e, 0x4b, 0x99, 0x1b, 0x9d, 0x5c, 0x1e, 0xd4, 0x5b, 0x9a, 0x1b, 0xdd, 0xdc, 0x94, 0x00, 0x0e, 0x00, 0x79, 0x18, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x8c, 0xcc, 0x21, 0x07, 0x7c, 0x70, 0x03, 0x74, 0x60, 0x07, 0x37, 0x90, 0x87, 0x72, 0x98, 0x87, 0x77, 0xa8, 0x07, 0x79, 0x18, 0x87, 0x72, 0x70, 0x83, 0x70, 0xa0, 0x07, 0x7a, 0x90, 0x87, 0x74, 0x10, 0x87, 0x7a, 0xa0, 0x87, 0x72, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x36, 0x40, 0x30, 0x00, 0xd2, 0x58, 0xc1, 0x36, 0x5c, 0xbe, 0xf3, 0xf8, 0x42, 0x40, 0x15, 0x05, 0x11, 0x95, 0x0e, 0x30, 0x94, 0x84, 0x01, 0x08, 0x98, 0x8f, 0xdc, 0xb6, 0x19, 0x80, 0xc1, 0x70, 0xf9, 0xce, 0xe3, 0x0b, 0x07, 0x21, 0x28, 0x9a, 0x20, 0x10, 0x92, 0xf4, 0x51, 0xcb, 0x82, 0x99, 0xc0, 0xf3, 0x10, 0x83, 0x8f, 0xdc, 0xb6, 0x09, 0x10, 0x40, 0x64, 0x48, 0x86, 0x40, 0x0d, 0x97, 0xef, 0x3c, 0x7e, 0x40, 0x15, 0x05, 0x11, 0x95, 0x0e, 0x30, 0xf8, 0xc8, 0x6d, 0x57, 0xc0, 0x17, 0xf8, 0xd5, 0xc3, 0x76, 0x20, 0x70, 0x56, 0x95, 0x5e, 0x85, 0x79, 0x7a, 0x39, 0x48, 0x26, 0xcb, 0xcb, 0xf3, 0xb9, 0xb0, 0x6e, 0x36, 0x97, 0xe5, 0x40, 0x60, 0xd0, 0x08, 0xa4, 0xe1, 0xf2, 0x9d, 0xc7, 0x9f, 0x8e, 0x88, 0x00, 0x06, 0x71, 0xf0, 0x91, 0xdb, 0x2e, 0x80, 0x2e, 0xf0, 0x13, 0xd7, 0xcd, 0x40, 0xe0, 0xac, 0x2a, 0xcc, 0xd3, 0xcb, 0x41, 0x32, 0x59, 0x5e, 0x9e, 0xcf, 0x85, 0x75, 0xb3, 0xb9, 0x2c, 0x07, 0x02, 0x83, 0x96, 0x50, 0x0d, 0x97, 0xef, 0x3c, 0x7e, 0x40, 0x15, 0x05, 0x11, 0xb1, 0x93, 0x13, 0x11, 0x3e, 0x72, 0xdb, 0x76, 0x20, 0x0d, 0x97, 0xef, 0x3c, 0xbe, 0x10, 0x11, 0xc0, 0x44, 0x84, 0x40, 0x33, 0x2c, 0x04, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x66, 0x00, 0x4a, 0xae, 0x74, 0x03, 0xca, 0xae, 0x10, 0x03, 0xca, 0x31, 0xa0, 0x14, 0x03, 0xa8, 0x95, 0xc0, 0x08, 0x40, 0x11, 0x94, 0x01, 0x00, 0x00, 0x00, 0x00, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x50, 0x7d, 0x0a, 0xb1, 0x6d, 0xd2, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x54, 0x60, 0xb0, 0x10, 0x1c, 0x37, 0x8d, 0x18, 0x24, 0x00, 0x08, 0x82, 0x41, 0x15, 0x06, 0x0c, 0xd1, 0x75, 0xd4, 0x88, 0x81, 0x01, 0x80, 0x20, 0x18, 0x28, 0x65, 0xc0, 0x78, 0x23, 0x06, 0x07, 0x00, 0x82, 0x60, 0x00, 0x95, 0x01, 0x23, 0x7c, 0xa3, 0x09, 0x01, 0x50, 0xc1, 0x20, 0x23, 0x06, 0x08, 0x00, 0x82, 0x60, 0x80, 0x95, 0x81, 0x63, 0x04, 0xd2, 0x68, 0x42, 0x00, 0x8c, 0x26, 0x08, 0xc4, 0x88, 0x81, 0x01, 0x80, 0x20, 0x18, 0x4c, 0x6a, 0x00, 0x05, 0x17, 0x80, 0xa8, 0x64, 0x0c, 0x6e, 0xc4, 0xa0, 0x01, 0x40, 0x10, 0x0c, 0x34, 0x35, 0x90, 0x9a, 0x00, 0x2b, 0x04, 0x0c, 0x73, 0x30, 0x1c, 0x08, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x76, 0x22, 0x05, 0x54, 0xf1, 0x4f, 0xc4, 0x35, 0x51, 0x11, 0xf1, 0x47, 0x80, 0x15, 0x50, 0x85, 0xa1, 0x30, 0x40, 0x64, 0x48, 0xbf, 0x10, 0x50, 0x45, 0x41, 0x44, 0x66, 0xe2, 0x50, 0x40, 0xf5, 0xbb, 0xda, 0xfb, 0x47, 0x80, 0x15, 0x50, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; #if 0 StructuredBuffer buf : register(t0); RWByteAddressBuffer uav : register(u0); cbuffer args : register(b0) { uint stride; }; [numthreads(64, 1, 1)] void main(uint3 tid : SV_DISPATCHTHREADID) { uint fb; uint v = buf.Load(tid.x * stride, fb); uint s = CheckAccessFullyMapped(fb) ? 1 : 0; uav.Store2(8 * tid.x, uint2(v, s)); } #endif static const DWORD cs_ld_structured_dxbc[] = { 0x43425844, 0x5b283603, 0xf1cbfe03, 0x2e0ecde6, 0x0d858acc, 0x00000001, 0x00000184, 0x00000004, 0x00000030, 0x00000040, 0x00000050, 0x00000174, 0x4e475349, 0x00000008, 0x00000000, 0x00000008, 0x4e47534f, 0x00000008, 0x00000000, 0x00000008, 0x58454853, 0x0000011c, 0x00050050, 0x00000047, 0x0100086a, 0x04000059, 0x00208e46, 0x00000000, 0x00000001, 0x040000a2, 0x00107000, 0x00000000, 0x00000004, 0x0300009d, 0x0011e000, 0x00000000, 0x0200005f, 0x00020012, 0x02000068, 0x00000002, 0x0400009b, 0x00000040, 0x00000001, 0x00000001, 0x08000026, 0x0000d000, 0x00100012, 0x00000000, 0x0002000a, 0x0020800a, 0x00000000, 0x00000000, 0x8d0000e3, 0x80002302, 0x00199983, 0x00100012, 0x00000000, 0x00100012, 0x00000001, 0x0010000a, 0x00000000, 0x00004001, 0x00000000, 0x00107006, 0x00000000, 0x050000ea, 0x00100042, 0x00000000, 0x0010000a, 0x00000001, 0x09000037, 0x00100022, 0x00000000, 0x0010002a, 0x00000000, 0x00004001, 0x00000001, 0x00004001, 0x00000000, 0x06000029, 0x00100042, 0x00000000, 0x0002000a, 0x00004001, 0x00000003, 0x070000a6, 0x0011e032, 0x00000000, 0x0010002a, 0x00000000, 0x00100046, 0x00000000, 0x0100003e, 0x30494653, 0x00000008, 0x00000100, 0x00000000, }; static const BYTE cs_ld_structured_dxil[] = { 0x44, 0x58, 0x42, 0x43, 0x1d, 0xe5, 0x6d, 0xa8, 0x2f, 0x74, 0x1a, 0xfa, 0x70, 0xfd, 0x2b, 0xbf, 0x11, 0x95, 0xa0, 0x75, 0x01, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x4f, 0x53, 0x47, 0x31, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x53, 0x56, 0x30, 0x6c, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 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, 0x07, 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, 0x44, 0x58, 0x49, 0x4c, 0x30, 0x07, 0x00, 0x00, 0x60, 0x00, 0x05, 0x00, 0xcc, 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x18, 0x07, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xc3, 0x01, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x52, 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, 0x91, 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x29, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, 0x86, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x01, 0xd5, 0x06, 0x62, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x00, 0x49, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, 0x09, 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, 0x4c, 0x10, 0x78, 0x73, 0x04, 0x60, 0x30, 0x13, 0x19, 0x8c, 0x03, 0x3b, 0x84, 0xc3, 0x3c, 0xcc, 0x83, 0x1b, 0xcc, 0x02, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xd4, 0x83, 0x3c, 0x94, 0x03, 0x39, 0x88, 0x42, 0x3d, 0x98, 0x83, 0x39, 0x94, 0x83, 0x3c, 0xf0, 0x41, 0x3d, 0xb8, 0xc3, 0x3c, 0xa4, 0xc3, 0x39, 0xb8, 0x43, 0x39, 0x90, 0x03, 0x18, 0xa4, 0x83, 0x3b, 0xd0, 0x83, 0x1f, 0xa0, 0x00, 0x50, 0x38, 0x4d, 0x9a, 0x22, 0x4a, 0x98, 0xfc, 0x15, 0xde, 0xb0, 0x89, 0xd0, 0x86, 0x21, 0x22, 0x24, 0x69, 0xa3, 0x8a, 0x82, 0x88, 0x50, 0x00, 0x68, 0x1c, 0x01, 0x44, 0x86, 0x84, 0x02, 0x40, 0x65, 0x04, 0xa0, 0x04, 0x87, 0x50, 0x19, 0x00, 0x00, 0xa4, 0x8e, 0x1a, 0x2e, 0x7f, 0xc2, 0x1e, 0x42, 0xf2, 0xb9, 0x8d, 0x2a, 0x56, 0x62, 0xf2, 0x91, 0xdb, 0x46, 0x04, 0x00, 0x00, 0xcc, 0x11, 0x20, 0xd4, 0xee, 0x19, 0x2e, 0x7f, 0xc2, 0x1e, 0x42, 0xf2, 0x43, 0xa0, 0x19, 0x16, 0x02, 0x05, 0xae, 0x10, 0x0c, 0x3c, 0x40, 0x70, 0x8e, 0x20, 0x28, 0x83, 0x04, 0x80, 0x66, 0x31, 0x1e, 0x68, 0x00, 0x48, 0xaa, 0x37, 0x0d, 0x97, 0x3f, 0x61, 0x0f, 0x21, 0xf9, 0x2b, 0x21, 0xad, 0xc4, 0xe4, 0x23, 0xb7, 0x8d, 0x0a, 0x00, 0x00, 0x00, 0xa5, 0xb8, 0xe0, 0x01, 0x40, 0xb8, 0x28, 0x07, 0x3c, 0x00, 0x00, 0x00, 0xa0, 0x91, 0x1e, 0x08, 0x98, 0x23, 0x00, 0x05, 0x00, 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x3a, 0x0f, 0x64, 0x90, 0x21, 0x23, 0x45, 0x44, 0x00, 0x66, 0x00, 0xc0, 0xdc, 0x00, 0x80, 0xd9, 0x01, 0x00, 0x0c, 0x79, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, 0x28, 0x40, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4, 0x81, 0x80, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xc8, 0x33, 0x01, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x90, 0xa7, 0x02, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x21, 0x0f, 0x06, 0x04, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x1e, 0x0d, 0x08, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb2, 0x40, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x02, 0x25, 0x30, 0x02, 0x50, 0x08, 0xc5, 0x50, 0x18, 0x65, 0x51, 0x06, 0xe5, 0x50, 0x0a, 0x05, 0x18, 0x40, 0xbd, 0x40, 0x81, 0x48, 0x8e, 0x00, 0xd0, 0x98, 0x01, 0x20, 0x32, 0x03, 0x40, 0x65, 0x06, 0x80, 0xcc, 0x0c, 0x00, 0x89, 0x19, 0x00, 0x0a, 0x33, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0xc4, 0x83, 0x0c, 0x6f, 0x0c, 0x24, 0xc6, 0x45, 0x66, 0x43, 0x10, 0x4c, 0x10, 0x00, 0x65, 0x82, 0x00, 0x2c, 0x1b, 0x84, 0x81, 0x98, 0x20, 0x00, 0xcc, 0x06, 0x61, 0x30, 0x28, 0x8c, 0xcd, 0x4d, 0x10, 0x80, 0x66, 0xc3, 0x80, 0x24, 0xc4, 0x04, 0x41, 0xd0, 0x38, 0x88, 0xd5, 0x99, 0x4d, 0x10, 0x00, 0x67, 0x43, 0x42, 0x2c, 0x0c, 0x41, 0x0c, 0x0d, 0x71, 0x6c, 0x08, 0x9c, 0x09, 0x02, 0x71, 0x71, 0xa8, 0x0b, 0xb3, 0x9b, 0x20, 0x00, 0xcf, 0x04, 0x41, 0xaa, 0x36, 0x2c, 0x04, 0x14, 0x11, 0xc4, 0x20, 0x4d, 0xd3, 0x04, 0x6c, 0x08, 0xa8, 0x09, 0x82, 0x91, 0x91, 0x08, 0x93, 0x3b, 0x9b, 0xdb, 0x80, 0x10, 0xd6, 0x45, 0x10, 0x83, 0x01, 0x6c, 0x08, 0xb0, 0x0d, 0xc4, 0x53, 0x65, 0xc0, 0x04, 0x21, 0xd8, 0x18, 0xa0, 0x4d, 0x10, 0x00, 0x68, 0x82, 0x00, 0x44, 0x13, 0x04, 0x40, 0xda, 0x60, 0x24, 0x5c, 0x47, 0x78, 0xdf, 0x06, 0xc1, 0x00, 0x83, 0x09, 0xc2, 0x60, 0x6d, 0x30, 0x12, 0xae, 0x23, 0x3c, 0x63, 0x83, 0x60, 0x8c, 0xc1, 0x04, 0xa1, 0xc0, 0x68, 0xcc, 0xd1, 0xc9, 0xa5, 0x91, 0x95, 0x6d, 0x30, 0x12, 0x33, 0xe8, 0x08, 0xef, 0xdb, 0x20, 0x18, 0x67, 0xb0, 0xe1, 0x20, 0xb6, 0x30, 0x10, 0x03, 0x32, 0x28, 0x03, 0x34, 0x98, 0x20, 0x24, 0xc3, 0x06, 0x60, 0xc3, 0x40, 0xac, 0xc1, 0x1a, 0x6c, 0x08, 0xd8, 0x60, 0xc3, 0x30, 0xa8, 0x41, 0x1b, 0x90, 0x68, 0x0b, 0x4b, 0x73, 0x9b, 0x20, 0x74, 0xd4, 0x04, 0x01, 0x98, 0x36, 0x0c, 0x71, 0x30, 0x0c, 0x1b, 0x08, 0x02, 0x0e, 0x0c, 0x39, 0xd8, 0x50, 0xa8, 0xc1, 0x1b, 0x00, 0xda, 0x1c, 0x54, 0x61, 0x63, 0xb3, 0x6b, 0x73, 0x49, 0x23, 0x2b, 0x73, 0xa3, 0x9b, 0x12, 0x04, 0x55, 0xc8, 0xf0, 0x5c, 0xec, 0xca, 0xe4, 0xe6, 0xd2, 0xde, 0xdc, 0xa6, 0x04, 0x44, 0x13, 0x32, 0x3c, 0x17, 0xbb, 0x30, 0x36, 0xbb, 0x32, 0xb9, 0x29, 0x81, 0x51, 0x87, 0x0c, 0xcf, 0x65, 0x0e, 0x2d, 0x8c, 0xac, 0x4c, 0xae, 0xe9, 0x8d, 0xac, 0x8c, 0x6d, 0x4a, 0x90, 0x94, 0x21, 0xc3, 0x73, 0x91, 0x2b, 0x9b, 0x7b, 0xab, 0x93, 0x1b, 0x2b, 0x9b, 0x9b, 0x12, 0x64, 0x95, 0xc8, 0xf0, 0x5c, 0xe8, 0xf2, 0xe0, 0xca, 0x82, 0xdc, 0xdc, 0xde, 0xe8, 0xc2, 0xe8, 0xd2, 0xde, 0xdc, 0xe6, 0xa6, 0x08, 0x68, 0xd0, 0x06, 0x75, 0xc8, 0xf0, 0x5c, 0xca, 0xdc, 0xe8, 0xe4, 0xf2, 0xa0, 0xde, 0xd2, 0xdc, 0xe8, 0xe6, 0xa6, 0x04, 0x73, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x8c, 0xcc, 0x21, 0x07, 0x7c, 0x70, 0x03, 0x74, 0x60, 0x07, 0x37, 0x90, 0x87, 0x72, 0x98, 0x87, 0x77, 0xa8, 0x07, 0x79, 0x18, 0x87, 0x72, 0x70, 0x83, 0x70, 0xa0, 0x07, 0x7a, 0x90, 0x87, 0x74, 0x10, 0x87, 0x7a, 0xa0, 0x87, 0x72, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x81, 0x9f, 0xb8, 0x6e, 0x06, 0x02, 0x67, 0xd6, 0x1f, 0x69, 0x4a, 0x97, 0xd7, 0xc7, 0xf4, 0xba, 0xbc, 0x4c, 0x16, 0xd6, 0xcd, 0xe6, 0xb2, 0x1c, 0x98, 0x04, 0x02, 0x83, 0x36, 0x40, 0x30, 0x00, 0xd2, 0x58, 0xc1, 0x36, 0x5c, 0xbe, 0xf3, 0xf8, 0x42, 0x40, 0x15, 0x05, 0x11, 0x95, 0x0e, 0x30, 0x94, 0x84, 0x01, 0x08, 0x98, 0x8f, 0xdc, 0xb6, 0x19, 0x80, 0xc1, 0x70, 0xf9, 0xce, 0xe3, 0x0b, 0x07, 0x21, 0x28, 0x9a, 0x20, 0x10, 0x92, 0xf4, 0x51, 0xcb, 0x82, 0x99, 0xc0, 0xf3, 0x10, 0x83, 0x8f, 0xdc, 0xb6, 0x09, 0x10, 0x40, 0x64, 0x48, 0x86, 0x40, 0x0d, 0x97, 0xef, 0x3c, 0x7e, 0x40, 0x15, 0x05, 0x11, 0x95, 0x0e, 0x30, 0xf8, 0xc8, 0x6d, 0x57, 0xc0, 0x17, 0xf8, 0xd5, 0xc3, 0x76, 0x20, 0x70, 0x56, 0x95, 0x5e, 0x85, 0x79, 0x7a, 0x39, 0x48, 0x26, 0xcb, 0xcb, 0xf3, 0xb9, 0xb0, 0x6e, 0x36, 0x97, 0xe5, 0x40, 0x60, 0xd0, 0x08, 0xa4, 0xe1, 0xf2, 0x9d, 0xc7, 0x9f, 0x8e, 0x88, 0x00, 0x06, 0x71, 0xf0, 0x91, 0xdb, 0xb6, 0x03, 0x69, 0xb8, 0x7c, 0xe7, 0xf1, 0x85, 0x88, 0x00, 0x26, 0x22, 0x04, 0x9a, 0x61, 0x21, 0x2c, 0xa1, 0x1a, 0x2e, 0xdf, 0x79, 0xfc, 0x80, 0x2a, 0x0a, 0x22, 0x62, 0x27, 0x27, 0x22, 0x7c, 0xe4, 0xb6, 0x01, 0x61, 0x20, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x4a, 0x6e, 0x06, 0xa0, 0x74, 0x03, 0xca, 0xae, 0x10, 0x03, 0xca, 0x31, 0xa0, 0x14, 0x03, 0xa8, 0x95, 0xc0, 0x08, 0x40, 0x11, 0x94, 0x01, 0x00, 0x00, 0x00, 0x00, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x50, 0x81, 0xc1, 0x42, 0x70, 0x9c, 0x34, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x55, 0x18, 0x30, 0x44, 0xd7, 0x4d, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x50, 0x89, 0x41, 0x43, 0x78, 0x1e, 0x35, 0x62, 0x60, 0x00, 0x20, 0x08, 0x06, 0x8a, 0x19, 0x30, 0xdf, 0x88, 0xc1, 0x01, 0x80, 0x20, 0x18, 0x40, 0x66, 0xc0, 0x08, 0x60, 0x30, 0x9a, 0x10, 0x00, 0x15, 0x0c, 0x32, 0x62, 0x80, 0x00, 0x20, 0x08, 0x06, 0x98, 0x19, 0x38, 0x46, 0x30, 0x06, 0xa3, 0x09, 0x01, 0x30, 0x9a, 0x20, 0x10, 0x23, 0x06, 0x06, 0x00, 0x82, 0x60, 0x30, 0xad, 0x01, 0x14, 0x5c, 0x00, 0xa2, 0x92, 0x31, 0xb8, 0x11, 0x83, 0x06, 0x00, 0x41, 0x30, 0xd0, 0xd6, 0x40, 0x6a, 0x82, 0xab, 0x10, 0xae, 0xcb, 0xc1, 0x70, 0x20, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x96, 0xc2, 0x00, 0x91, 0x21, 0xfd, 0x42, 0x40, 0x15, 0x05, 0x11, 0xd9, 0x89, 0x43, 0x01, 0xd5, 0xef, 0x6a, 0xef, 0x1f, 0x01, 0x56, 0x40, 0x15, 0x86, 0x52, 0x05, 0x54, 0xf1, 0x4f, 0xc4, 0x35, 0x51, 0x11, 0xf1, 0x4b, 0x53, 0x44, 0x09, 0x53, 0x40, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; static const struct { D3D12_SHADER_BYTECODE cs_dxbc; D3D12_SHADER_BYTECODE cs_dxil; bool is_structured; bool is_raw; bool is_uav; } tests[] = { { SHADER_BYTECODE(cs_ld_typed_dxbc), SHADER_BYTECODE(cs_ld_typed_dxil), false, false, false }, { SHADER_BYTECODE(cs_ld_typed_uav_dxbc), SHADER_BYTECODE(cs_ld_typed_uav_dxil), false, false, true }, { SHADER_BYTECODE(cs_ld_raw_dxbc), SHADER_BYTECODE(cs_ld_raw_dxil), false, true, false }, { SHADER_BYTECODE(cs_ld_structured_dxbc), SHADER_BYTECODE(cs_ld_structured_dxil), true, false, false }, }; struct shader_args { uint32_t stride; } shader_args; memset(&desc, 0, sizeof(desc)); desc.no_render_target = true; if (!init_test_context(&context, &desc)) return; if (use_dxil && !context_supports_dxil(&context)) { destroy_test_context(&context); return; } hr = ID3D12Device_CheckFeatureSupport(context.device, D3D12_FEATURE_D3D12_OPTIONS, &options, sizeof(options)); ok(hr == S_OK, "Failed to check feature support, hr %#x.\n", hr); if (options.TiledResourcesTier < D3D12_TILED_RESOURCES_TIER_2) { skip("Tiled resources Tier 2 not supported by device.\n"); destroy_test_context(&context); return; } descriptor_ranges[0].RangeType = D3D12_DESCRIPTOR_RANGE_TYPE_SRV; descriptor_ranges[0].NumDescriptors = 1; descriptor_ranges[0].BaseShaderRegister = 0; descriptor_ranges[0].RegisterSpace = 0; descriptor_ranges[0].OffsetInDescriptorsFromTableStart = 0; descriptor_ranges[1].RangeType = D3D12_DESCRIPTOR_RANGE_TYPE_UAV; descriptor_ranges[1].NumDescriptors = 1; descriptor_ranges[1].BaseShaderRegister = 1; descriptor_ranges[1].RegisterSpace = 0; descriptor_ranges[1].OffsetInDescriptorsFromTableStart = 1; root_parameters[0].ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE; root_parameters[0].DescriptorTable.NumDescriptorRanges = ARRAY_SIZE(descriptor_ranges); root_parameters[0].DescriptorTable.pDescriptorRanges = descriptor_ranges; root_parameters[0].ShaderVisibility = D3D12_SHADER_VISIBILITY_ALL; root_parameters[1].ParameterType = D3D12_ROOT_PARAMETER_TYPE_UAV; root_parameters[1].Descriptor.ShaderRegister = 0; root_parameters[1].Descriptor.RegisterSpace = 0; root_parameters[1].ShaderVisibility = D3D12_SHADER_VISIBILITY_ALL; root_parameters[2].ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS; root_parameters[2].Constants.Num32BitValues = sizeof(shader_args) / sizeof(uint32_t); root_parameters[2].Constants.ShaderRegister = 0; root_parameters[2].Constants.RegisterSpace = 0; root_parameters[2].ShaderVisibility = D3D12_SHADER_VISIBILITY_ALL; root_signature_desc.NumParameters = ARRAY_SIZE(root_parameters); root_signature_desc.pParameters = root_parameters; root_signature_desc.NumStaticSamplers = 0; root_signature_desc.pStaticSamplers = NULL; root_signature_desc.Flags = D3D12_ROOT_SIGNATURE_FLAG_NONE; hr = create_root_signature(context.device, &root_signature_desc, &root_signature); ok(hr == S_OK, "Failed to create root signature, hr %#x.\n", hr); memset(&heap_desc, 0, sizeof(heap_desc)); heap_desc.Properties.Type = D3D12_HEAP_TYPE_DEFAULT; heap_desc.SizeInBytes = TILE_SIZE * 2; resource_desc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; resource_desc.Alignment = 0; resource_desc.Width = 128 * sizeof(uint32_t); resource_desc.Height = 1; resource_desc.DepthOrArraySize = 1; resource_desc.MipLevels = 1; resource_desc.Format = DXGI_FORMAT_UNKNOWN; resource_desc.SampleDesc.Count = 1; resource_desc.SampleDesc.Quality = 0; resource_desc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; resource_desc.Flags = D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS; hr = ID3D12Device_CreateCommittedResource(context.device, &heap_desc.Properties, D3D12_HEAP_FLAG_NONE, &resource_desc, D3D12_RESOURCE_STATE_COPY_SOURCE, NULL, &IID_ID3D12Resource, (void **)&out_buffer); ok(hr == S_OK, "Failed to create committed resource, hr %#x.\n", hr); resource_desc.Width = 4 * TILE_SIZE; hr = ID3D12Device_CreateReservedResource(context.device, &resource_desc, D3D12_RESOURCE_STATE_UNORDERED_ACCESS, NULL, &IID_ID3D12Resource, (void **)&tiled_buffer); ok(hr == S_OK, "Failed to create reserved resource, hr %#x.\n", hr); hr = ID3D12Device_CreateHeap(context.device, &heap_desc, &IID_ID3D12Heap, (void **)&heap); ok(hr == S_OK, "Failed to create heap, hr %#x.\n", hr); /* Map the 0k-64k range and the 128k-192k range, leave the rest unmapped */ set_region_offset(&tile_regions[0], 0, 0, 0, 0); set_region_offset(&tile_regions[1], 2, 0, 0, 0); tile_offset = 0; ID3D12CommandQueue_UpdateTileMappings(context.queue, tiled_buffer, ARRAY_SIZE(tile_regions), tile_regions, NULL, heap, 1, NULL, &tile_offset, NULL, D3D12_TILE_MAPPING_FLAG_NONE); gpu_heap = create_gpu_descriptor_heap(context.device, D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV, 2); cpu_heap = create_cpu_descriptor_heap(context.device, D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV, 1); uav_desc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; uav_desc.Format = DXGI_FORMAT_R32_UINT; uav_desc.Buffer.FirstElement = 0; uav_desc.Buffer.NumElements = resource_desc.Width / sizeof(uint32_t); uav_desc.Buffer.StructureByteStride = 0; uav_desc.Buffer.CounterOffsetInBytes = 0; uav_desc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_NONE; ID3D12Device_CreateUnorderedAccessView(context.device, tiled_buffer, NULL, &uav_desc, get_cpu_descriptor_handle(&context, cpu_heap, 0)); ID3D12Device_CreateUnorderedAccessView(context.device, tiled_buffer, NULL, &uav_desc, get_cpu_descriptor_handle(&context, gpu_heap, 1)); for (i = 0; i < resource_desc.Width / TILE_SIZE; i++) { UINT clear_values[] = { i + 1, 0, 0, 0 }; D3D12_RECT rect; set_rect(&rect, i * TILE_SIZE / sizeof(uint32_t), 0, (i + 1) * TILE_SIZE / sizeof(uint32_t), 1); ID3D12GraphicsCommandList_ClearUnorderedAccessViewUint(context.list, get_gpu_descriptor_handle(&context, gpu_heap, 1), get_cpu_descriptor_handle(&context, cpu_heap, 0), tiled_buffer, clear_values, 1, &rect); }; transition_resource_state(context.list, tiled_buffer, D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE); for (i = 0; i < ARRAY_SIZE(tests); i++) { vkd3d_test_set_context("Test %u", i); test_is_raw = (i == 2) || (i == 3); todo_if(use_dxil && test_is_raw) pipeline_state = create_compute_pipeline_state(context.device, root_signature, use_dxil ? tests[i].cs_dxil : tests[i].cs_dxbc); /* This will fail for SSBO buffer feedback case on DXIL. */ todo_if(use_dxil && test_is_raw) ok(!!pipeline_state, "Failed to create pipeline state.\n"); if (!pipeline_state) continue; srv_desc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER; srv_desc.Format = tests[i].is_structured ? DXGI_FORMAT_UNKNOWN : (tests[i].is_raw ? DXGI_FORMAT_R32_TYPELESS : DXGI_FORMAT_R32_UINT); srv_desc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; srv_desc.Buffer.FirstElement = 0; srv_desc.Buffer.NumElements = resource_desc.Width / sizeof(uint32_t); srv_desc.Buffer.StructureByteStride = tests[i].is_structured ? sizeof(uint32_t) : 0; srv_desc.Buffer.Flags = tests[i].is_raw ? D3D12_BUFFER_SRV_FLAG_RAW : D3D12_BUFFER_SRV_FLAG_NONE; uav_desc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; uav_desc.Format = srv_desc.Format; uav_desc.Buffer.FirstElement = srv_desc.Buffer.FirstElement; uav_desc.Buffer.NumElements = srv_desc.Buffer.NumElements; uav_desc.Buffer.StructureByteStride = srv_desc.Buffer.StructureByteStride; uav_desc.Buffer.CounterOffsetInBytes = 0; uav_desc.Buffer.Flags = tests[i].is_raw ? D3D12_BUFFER_UAV_FLAG_RAW : D3D12_BUFFER_UAV_FLAG_NONE; if (tests[i].is_uav) { ID3D12Device_CreateUnorderedAccessView(context.device, tiled_buffer, NULL, &uav_desc, get_cpu_descriptor_handle(&context, gpu_heap, 1)); transition_resource_state(context.list, tiled_buffer, D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); } else ID3D12Device_CreateShaderResourceView(context.device, tiled_buffer, &srv_desc, get_cpu_descriptor_handle(&context, gpu_heap, 0)); transition_resource_state(context.list, out_buffer, D3D12_RESOURCE_STATE_COPY_SOURCE, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); shader_args.stride = resource_desc.Width / 64; if (!tests[i].is_raw) shader_args.stride /= sizeof(uint32_t); ID3D12GraphicsCommandList_SetDescriptorHeaps(context.list, 1, &gpu_heap); ID3D12GraphicsCommandList_SetComputeRootSignature(context.list, root_signature); ID3D12GraphicsCommandList_SetPipelineState(context.list, pipeline_state); ID3D12GraphicsCommandList_SetComputeRootDescriptorTable(context.list, 0, get_gpu_descriptor_handle(&context, gpu_heap, 0)); ID3D12GraphicsCommandList_SetComputeRootUnorderedAccessView(context.list, 1, ID3D12Resource_GetGPUVirtualAddress(out_buffer)); ID3D12GraphicsCommandList_SetComputeRoot32BitConstants(context.list, 2, sizeof(shader_args) / sizeof(uint32_t), &shader_args, 0); ID3D12GraphicsCommandList_Dispatch(context.list, 1, 1, 1); transition_resource_state(context.list, out_buffer, D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_COPY_SOURCE); if (tests[i].is_uav) { transition_resource_state(context.list, tiled_buffer, D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE); } get_buffer_readback_with_command_list(out_buffer, DXGI_FORMAT_R32_UINT, &rb, context.queue, context.list); for (j = 0; j < 64; j++) { D3D12_BOX box; UINT tile_index = j / 16; set_box(&box, 2 * j, 0, 0, 2 * j + 1, 1, 1); todo_if(test_is_raw) check_readback_data_uint(&rb, &box, (tile_index & 1) ? 0 : (tile_index + 1), 0); set_box(&box, 2 * j + 1, 0, 0, 2 * j + 2, 1, 1); todo_if(test_is_raw) check_readback_data_uint(&rb, &box, (tile_index & 1) ? 0 : 1, 0); } release_resource_readback(&rb); reset_command_list(context.list, context.allocator); ID3D12PipelineState_Release(pipeline_state); } ID3D12DescriptorHeap_Release(cpu_heap); ID3D12DescriptorHeap_Release(gpu_heap); ID3D12Heap_Release(heap); ID3D12Resource_Release(tiled_buffer); ID3D12Resource_Release(out_buffer); ID3D12RootSignature_Release(root_signature); destroy_test_context(&context); #undef TILE_SIZE } void test_buffer_feedback_instructions_sm51(void) { test_buffer_feedback_instructions(false); } void test_buffer_feedback_instructions_dxil(void) { test_buffer_feedback_instructions(true); } static void test_texture_feedback_instructions(bool use_dxil) { #define TILE_SIZE 65536 ID3D12DescriptorHeap *gpu_heap, *sampler_heap, *rtv_heap; ID3D12Resource *tiled_image, *color_rt, *residency_rt; D3D12_GRAPHICS_PIPELINE_STATE_DESC pipeline_desc; D3D12_TILED_RESOURCE_COORDINATE tile_regions[3]; D3D12_ROOT_SIGNATURE_DESC root_signature_desc; D3D12_DESCRIPTOR_RANGE descriptor_ranges[3]; D3D12_UNORDERED_ACCESS_VIEW_DESC uav_desc; D3D12_FEATURE_DATA_D3D12_OPTIONS options; D3D12_SHADER_RESOURCE_VIEW_DESC srv_desc; D3D12_ROOT_PARAMETER root_parameters[3]; D3D12_RENDER_TARGET_VIEW_DESC rtv_desc; ID3D12PipelineState *pipeline_state; ID3D12RootSignature *root_signature; D3D12_RESOURCE_DESC resource_desc; D3D12_SAMPLER_DESC sampler_desc; struct test_context_desc desc; struct resource_readback rb; struct test_context context; D3D12_HEAP_DESC heap_desc; D3D12_VIEWPORT viewport; D3D12_RECT scissor; ID3D12Heap *heap; UINT tile_offset; unsigned int i; HRESULT hr; #if 0 void main(uint idx : SV_VERTEXID, out float4 pos : SV_POSITION, out float2 uv : UV_TEXCOORD) { uv = float2((idx << 1) & 2, idx & 2); pos = float4(2.0f * uv - 1.0f, 0.0f, 1.0f); } #endif static const DWORD vs_code_dxbc[] = { 0x43425844, 0x7964a10a, 0x2d3d08ae, 0x83dfabe2, 0x129879ea, 0x00000001, 0x00000204, 0x00000003, 0x0000002c, 0x00000060, 0x000000b8, 0x4e475349, 0x0000002c, 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000006, 0x00000001, 0x00000000, 0x00000101, 0x565f5653, 0x45545245, 0x00444958, 0x4e47534f, 0x00000050, 0x00000002, 0x00000008, 0x00000038, 0x00000000, 0x00000001, 0x00000003, 0x00000000, 0x0000000f, 0x00000044, 0x00000000, 0x00000000, 0x00000003, 0x00000001, 0x00000c03, 0x505f5653, 0x5449534f, 0x004e4f49, 0x545f5655, 0x4f435845, 0x0044524f, 0x58454853, 0x00000144, 0x00010050, 0x00000051, 0x0100086a, 0x04000060, 0x00101012, 0x00000000, 0x00000006, 0x04000067, 0x001020f2, 0x00000000, 0x00000001, 0x03000065, 0x00102032, 0x00000001, 0x02000068, 0x00000001, 0x07000001, 0x00100012, 0x00000000, 0x0010100a, 0x00000000, 0x00004001, 0x00000002, 0x05000056, 0x00100022, 0x00000000, 0x0010000a, 0x00000000, 0x08000000, 0x00100042, 0x00000000, 0x8010001a, 0x00000041, 0x00000000, 0x00004001, 0x3f800000, 0x0b00008c, 0x00100082, 0x00000000, 0x00004001, 0x00000001, 0x00004001, 0x00000001, 0x0010100a, 0x00000000, 0x00004001, 0x00000000, 0x05000056, 0x00100012, 0x00000000, 0x0010003a, 0x00000000, 0x0f000032, 0x00102032, 0x00000000, 0x00100086, 0x00000000, 0x00004002, 0x40000000, 0x40000000, 0x00000000, 0x00000000, 0x00004002, 0xbf800000, 0xbf800000, 0x00000000, 0x00000000, 0x05000036, 0x00102032, 0x00000001, 0x00100046, 0x00000000, 0x08000036, 0x001020c2, 0x00000000, 0x00004002, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x0100003e, }; static const BYTE vs_code_dxil[] = { 0x44, 0x58, 0x42, 0x43, 0xbd, 0xa3, 0x7e, 0x42, 0x8b, 0xca, 0xb7, 0x1e, 0xe1, 0x6a, 0x91, 0xef, 0xe8, 0xfe, 0xd3, 0xa9, 0x01, 0x00, 0x00, 0x00, 0x9c, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xe8, 0x00, 0x00, 0x00, 0x7c, 0x01, 0x00, 0x00, 0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31, 0x34, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x49, 0x44, 0x00, 0x4f, 0x53, 0x47, 0x31, 0x60, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x55, 0x56, 0x5f, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x50, 0x53, 0x56, 0x30, 0x8c, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x55, 0x56, 0x5f, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x41, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x03, 0x03, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x42, 0x00, 0x03, 0x02, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x18, 0x05, 0x00, 0x00, 0x60, 0x00, 0x01, 0x00, 0x46, 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0x3d, 0x01, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x10, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0x84, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x42, 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, 0x11, 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x21, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, 0x84, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x01, 0x00, 0x00, 0x00, 0x49, 0x18, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x32, 0x22, 0x08, 0x09, 0x20, 0x64, 0x85, 0x04, 0x13, 0x22, 0xa4, 0x84, 0x04, 0x13, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x88, 0x8c, 0x0b, 0x84, 0x84, 0x4c, 0x10, 0x30, 0x23, 0x00, 0x25, 0x00, 0x8a, 0x39, 0x02, 0x30, 0x98, 0x23, 0x40, 0x8a, 0x31, 0x33, 0x43, 0x43, 0x35, 0x03, 0x50, 0x0c, 0x98, 0x19, 0x3a, 0xc2, 0x81, 0x80, 0x1c, 0x18, 0x00, 0x00, 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x43, 0x9e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, 0x05, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x79, 0x10, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x02, 0x01, 0x0b, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x10, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x9a, 0x12, 0x18, 0x01, 0x28, 0x84, 0x62, 0x20, 0x2a, 0x85, 0x12, 0x18, 0x01, 0x28, 0x89, 0x32, 0x28, 0x84, 0x22, 0xa0, 0x1d, 0x6b, 0x08, 0x8c, 0x39, 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0xc4, 0x83, 0x0c, 0x6f, 0x0c, 0x24, 0xc6, 0x45, 0x66, 0x43, 0x10, 0x4c, 0x10, 0x86, 0x61, 0x82, 0x30, 0x10, 0x1b, 0x84, 0x81, 0x98, 0x20, 0x0c, 0xc5, 0x06, 0x61, 0x30, 0x28, 0xd8, 0xcd, 0x4d, 0x10, 0x06, 0x63, 0xc3, 0x80, 0x24, 0xc4, 0x04, 0x41, 0x00, 0x36, 0x00, 0x1b, 0x06, 0x82, 0x61, 0x36, 0x04, 0xcd, 0x86, 0x61, 0x58, 0x9c, 0x09, 0xc2, 0xe2, 0x6c, 0x08, 0x20, 0x12, 0x6d, 0x61, 0x69, 0x6e, 0x5c, 0xa6, 0xac, 0xbe, 0xac, 0xca, 0xe4, 0xe8, 0xca, 0xf0, 0x92, 0x88, 0x26, 0x08, 0xc4, 0x31, 0x41, 0x20, 0x90, 0x0d, 0x01, 0x31, 0x41, 0x20, 0x92, 0x0d, 0x0b, 0x31, 0x51, 0x95, 0x75, 0x0d, 0x15, 0x71, 0x01, 0x1b, 0x02, 0x8c, 0xcb, 0x94, 0xd5, 0x17, 0xd4, 0xdb, 0x5c, 0x1a, 0x5d, 0xda, 0x9b, 0xdb, 0x04, 0x81, 0x50, 0x26, 0x08, 0xc4, 0x32, 0x41, 0x20, 0x98, 0x0d, 0x0b, 0xa1, 0x6d, 0x9c, 0xd5, 0x0d, 0x1d, 0x71, 0x01, 0x5c, 0xaa, 0xac, 0xbe, 0xa8, 0x8a, 0xb0, 0x86, 0x9e, 0x9e, 0xa4, 0x88, 0x26, 0x08, 0x44, 0xb3, 0x61, 0x19, 0xbe, 0xed, 0xb2, 0xc0, 0x60, 0x00, 0x83, 0xe1, 0x02, 0x36, 0x08, 0x5e, 0x18, 0x6c, 0x18, 0x32, 0x31, 0x00, 0x36, 0x14, 0x8b, 0x34, 0x06, 0x00, 0x50, 0x85, 0x8d, 0xcd, 0xae, 0xcd, 0x25, 0x8d, 0xac, 0xcc, 0x8d, 0x6e, 0x4a, 0x10, 0x54, 0x21, 0xc3, 0x73, 0xb1, 0x2b, 0x93, 0x9b, 0x4b, 0x7b, 0x73, 0x9b, 0x12, 0x10, 0x4d, 0xc8, 0xf0, 0x5c, 0xec, 0xc2, 0xd8, 0xec, 0xca, 0xe4, 0xa6, 0x04, 0x46, 0x1d, 0x32, 0x3c, 0x97, 0x39, 0xb4, 0x30, 0xb2, 0x32, 0xb9, 0xa6, 0x37, 0xb2, 0x32, 0xb6, 0x29, 0x41, 0x52, 0x89, 0x0c, 0xcf, 0x85, 0x2e, 0x0f, 0xae, 0x2c, 0xc8, 0xcd, 0xed, 0x8d, 0x2e, 0x8c, 0x2e, 0xed, 0xcd, 0x6d, 0x6e, 0x4a, 0xe0, 0xd4, 0x21, 0xc3, 0x73, 0xb1, 0x4b, 0x2b, 0xbb, 0x4b, 0x22, 0x9b, 0xa2, 0x0b, 0xa3, 0x2b, 0x9b, 0x12, 0x40, 0x75, 0xc8, 0xf0, 0x5c, 0xca, 0xdc, 0xe8, 0xe4, 0xf2, 0xa0, 0xde, 0xd2, 0xdc, 0xe8, 0xe6, 0xa6, 0x04, 0x63, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0x03, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x16, 0x30, 0x0d, 0x97, 0xef, 0x3c, 0xfe, 0xe2, 0x00, 0x83, 0xd8, 0x3c, 0xd4, 0xe4, 0x23, 0xb7, 0x6d, 0x00, 0x04, 0x03, 0x20, 0x8d, 0x09, 0x54, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x4d, 0x4e, 0x44, 0xa0, 0xd4, 0xf4, 0x50, 0x93, 0x5f, 0xdc, 0x36, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x34, 0xa5, 0x50, 0x04, 0x33, 0x00, 0x74, 0x63, 0x04, 0x20, 0x08, 0x82, 0xf8, 0x37, 0x46, 0x00, 0x82, 0x20, 0x08, 0x82, 0xc1, 0x18, 0x01, 0x08, 0x82, 0x20, 0xfe, 0x0b, 0x23, 0x00, 0x00, 0x00, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x50, 0x54, 0x91, 0x24, 0x35, 0x45, 0x05, 0xd4, 0x55, 0x80, 0xe8, 0x05, 0x57, 0x45, 0x28, 0x7a, 0xc1, 0x95, 0x29, 0x41, 0x7c, 0x8c, 0x50, 0xe4, 0x63, 0xc2, 0x22, 0x1f, 0x13, 0x16, 0xf8, 0x98, 0xc0, 0xc0, 0x67, 0xc4, 0x20, 0x01, 0x40, 0x10, 0x0c, 0x90, 0x4f, 0xea, 0x3a, 0x4c, 0x18, 0x31, 0x48, 0x00, 0x10, 0x04, 0x03, 0xe4, 0x93, 0xba, 0x2e, 0x0b, 0x46, 0x0c, 0x12, 0x00, 0x04, 0xc1, 0x00, 0xf9, 0xa4, 0xae, 0xa3, 0x98, 0x11, 0x83, 0x04, 0x00, 0x41, 0x30, 0x40, 0x3e, 0xa9, 0xeb, 0xac, 0x67, 0xc4, 0x20, 0x01, 0x40, 0x10, 0x0c, 0x90, 0x4f, 0xf2, 0x3a, 0x0c, 0x19, 0x31, 0x48, 0x00, 0x10, 0x04, 0x03, 0xe4, 0x93, 0xbc, 0x2e, 0x33, 0x30, 0x1c, 0x08, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0xd6, 0x31, 0xf8, 0x08, 0x6d, 0x1e, 0x83, 0x8f, 0xd4, 0xf6, 0x41, 0xf8, 0x08, 0x5d, 0x1b, 0x08, 0xe1, 0x23, 0xb5, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; #if 0 SamplerState samp : register(s0); Texture2D tex : register(t0); cbuffer args : register(b0) { float lod_clamp; }; void main(float4 pos : SV_POSITION, float2 uv : UV_TEXCOORD, out float4 o0 : SV_TARGET0, out uint o1 : SV_TARGET1) { uint fb; o0 = tex.Sample(samp, uv, int2(0, 0), lod_clamp, fb); o1 = CheckAccessFullyMapped(fb) ? 1 : 0; } #endif static const DWORD ps_sample_dxbc[] = { 0x43425844, 0xb83eba7f, 0x7b287256, 0x98a2ccc3, 0x4fe6a5e0, 0x00000001, 0x000001e4, 0x00000004, 0x00000030, 0x00000088, 0x000000d4, 0x000001d4, 0x4e475349, 0x00000050, 0x00000002, 0x00000008, 0x00000038, 0x00000000, 0x00000001, 0x00000003, 0x00000000, 0x0000000f, 0x00000044, 0x00000000, 0x00000000, 0x00000003, 0x00000001, 0x00000303, 0x505f5653, 0x5449534f, 0x004e4f49, 0x545f5655, 0x4f435845, 0x0044524f, 0x4e47534f, 0x00000044, 0x00000002, 0x00000008, 0x00000038, 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x0000000f, 0x00000038, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000e01, 0x545f5653, 0x45475241, 0xabab0054, 0x58454853, 0x000000f8, 0x00000050, 0x0000003e, 0x0100086a, 0x04000059, 0x00208e46, 0x00000000, 0x00000001, 0x0300005a, 0x00106000, 0x00000000, 0x04001858, 0x00107000, 0x00000000, 0x00005555, 0x03001062, 0x00101032, 0x00000001, 0x03000065, 0x001020f2, 0x00000000, 0x03000065, 0x00102012, 0x00000001, 0x02000068, 0x00000002, 0x910000e6, 0x800000c2, 0x00155543, 0x001000f2, 0x00000000, 0x00100012, 0x00000001, 0x00101046, 0x00000001, 0x00107e46, 0x00000000, 0x00106000, 0x00000000, 0x0020800a, 0x00000000, 0x00000000, 0x00000000, 0x05000036, 0x001020f2, 0x00000000, 0x00100e46, 0x00000000, 0x050000ea, 0x00100012, 0x00000000, 0x0010000a, 0x00000001, 0x09000037, 0x00102012, 0x00000001, 0x0010000a, 0x00000000, 0x00004001, 0x00000001, 0x00004001, 0x00000000, 0x0100003e, 0x30494653, 0x00000008, 0x00000100, 0x00000000, }; static const BYTE ps_sample_dxil[] = { 0x44, 0x58, 0x42, 0x43, 0x5b, 0x3d, 0xa0, 0x0c, 0x79, 0x14, 0x7b, 0x9b, 0xfb, 0x3a, 0x98, 0xbe, 0x7a, 0x47, 0xda, 0xc2, 0x01, 0x00, 0x00, 0x00, 0xce, 0x0a, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0xf2, 0x01, 0x00, 0x00, 0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31, 0x60, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x55, 0x56, 0x5f, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x4f, 0x53, 0x47, 0x31, 0x52, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x00, 0x50, 0x53, 0x56, 0x30, 0xe4, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 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, 0x10, 0x00, 0x00, 0x00, 0x00, 0x55, 0x56, 0x5f, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x03, 0x03, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x42, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x10, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x41, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0xd4, 0x08, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x35, 0x02, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xbc, 0x08, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0x2c, 0x02, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x18, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xc4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x62, 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, 0x11, 0x23, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x31, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, 0x84, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x6d, 0x30, 0x86, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa8, 0x00, 0x49, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x32, 0x22, 0x88, 0x09, 0x20, 0x64, 0x85, 0x04, 0x13, 0x23, 0xa4, 0x84, 0x04, 0x13, 0x23, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8c, 0x8c, 0x0b, 0x84, 0xc4, 0x4c, 0x10, 0x90, 0xc1, 0x1c, 0x01, 0x18, 0xdc, 0x24, 0x4d, 0x11, 0x25, 0x4c, 0x3e, 0x0b, 0x30, 0xcf, 0x42, 0x44, 0xec, 0x04, 0x4c, 0x04, 0x0a, 0x00, 0x0a, 0x66, 0x00, 0x86, 0x11, 0x88, 0x61, 0xa6, 0x36, 0x18, 0x07, 0x76, 0x08, 0x87, 0x79, 0x98, 0x07, 0x37, 0xa0, 0x85, 0x72, 0xc0, 0x07, 0x7a, 0xa8, 0x07, 0x79, 0x28, 0x07, 0x39, 0x20, 0x05, 0x3e, 0xb0, 0x87, 0x72, 0x18, 0x07, 0x7a, 0x78, 0x07, 0x79, 0xe0, 0x03, 0x73, 0x60, 0x87, 0x77, 0x08, 0x07, 0x7a, 0x60, 0x03, 0x30, 0xa0, 0x03, 0x3f, 0x00, 0x03, 0x3f, 0xd0, 0x03, 0x3d, 0x68, 0x87, 0x74, 0x80, 0x87, 0x79, 0xf8, 0x05, 0x7a, 0xc8, 0x07, 0x78, 0x28, 0x07, 0x14, 0x00, 0x33, 0x89, 0xc1, 0x38, 0xb0, 0x43, 0x38, 0xcc, 0xc3, 0x3c, 0xb8, 0x01, 0x2d, 0x94, 0x03, 0x3e, 0xd0, 0x43, 0x3d, 0xc8, 0x43, 0x39, 0xc8, 0x01, 0x29, 0xf0, 0x81, 0x3d, 0x94, 0xc3, 0x38, 0xd0, 0xc3, 0x3b, 0xc8, 0x03, 0x1f, 0x98, 0x03, 0x3b, 0xbc, 0x43, 0x38, 0xd0, 0x03, 0x1b, 0x80, 0x01, 0x1d, 0xf8, 0x01, 0x18, 0xf8, 0x01, 0x12, 0x88, 0x82, 0x8c, 0x23, 0x80, 0xc8, 0x90, 0x50, 0x30, 0x10, 0x32, 0x02, 0x50, 0x02, 0x85, 0x96, 0x39, 0x02, 0xa4, 0x18, 0x03, 0x00, 0x00, 0x0d, 0x40, 0x4e, 0x31, 0x14, 0x00, 0x00, 0x9a, 0x81, 0xa0, 0x62, 0x28, 0x00, 0x00, 0x34, 0x00, 0x49, 0x47, 0x0d, 0x97, 0x3f, 0x61, 0x0f, 0x21, 0xf9, 0xdc, 0x46, 0x15, 0x2b, 0x31, 0xf9, 0xc5, 0x6d, 0x23, 0x62, 0x18, 0x86, 0x81, 0x9a, 0x7b, 0x86, 0xcb, 0x9f, 0xb0, 0x87, 0x90, 0xfc, 0x10, 0x68, 0x86, 0x85, 0x40, 0x41, 0x55, 0x08, 0x0a, 0xb0, 0x00, 0xba, 0x6e, 0x1a, 0x2e, 0x7f, 0xc2, 0x1e, 0x42, 0xf2, 0x57, 0x42, 0x5a, 0x89, 0xc9, 0x2f, 0x6e, 0x1b, 0x15, 0xc3, 0x30, 0x0c, 0x40, 0x61, 0x32, 0xc0, 0xb2, 0x86, 0x61, 0x18, 0x00, 0x00, 0x18, 0x48, 0x9b, 0x23, 0x08, 0xca, 0xc0, 0x01, 0x00, 0x75, 0xc5, 0xb0, 0x80, 0x06, 0x00, 0x38, 0xfa, 0x06, 0x02, 0x12, 0x01, 0x98, 0x23, 0x00, 0x05, 0x00, 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x3a, 0x0f, 0x84, 0x90, 0x21, 0x23, 0x45, 0x44, 0x00, 0xc6, 0x00, 0x80, 0x69, 0x03, 0x00, 0x26, 0x0e, 0x00, 0x60, 0xc8, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x90, 0xc7, 0x01, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x21, 0x0f, 0x04, 0x04, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x1e, 0x09, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, 0x17, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x79, 0x34, 0x20, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, 0x74, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4, 0xf9, 0x80, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x0b, 0x04, 0x14, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x18, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x02, 0x4a, 0x60, 0x04, 0xa0, 0x10, 0x8a, 0xa1, 0x08, 0x4a, 0xa2, 0x50, 0xca, 0xa0, 0x1c, 0x0a, 0xa4, 0x14, 0x68, 0x2c, 0x40, 0x20, 0x6a, 0x4a, 0xa0, 0x14, 0x0a, 0xa4, 0x08, 0x46, 0x00, 0x4a, 0xa2, 0x0c, 0x0a, 0x81, 0x92, 0x19, 0x00, 0x42, 0x66, 0x00, 0xe8, 0x98, 0x01, 0x20, 0x63, 0x06, 0x80, 0x8a, 0x19, 0x00, 0x12, 0xc7, 0x42, 0x8c, 0x02, 0x00, 0x00, 0xe0, 0xfb, 0x48, 0x98, 0x01, 0x00, 0x79, 0x18, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0xc4, 0x83, 0x0c, 0x6f, 0x0c, 0x24, 0xc6, 0x45, 0x66, 0x43, 0x10, 0x4c, 0x10, 0x80, 0x65, 0x82, 0x00, 0x30, 0x1b, 0x84, 0x81, 0x98, 0x20, 0x00, 0xcd, 0x06, 0x61, 0x30, 0x28, 0xc0, 0xcd, 0x4d, 0x10, 0x00, 0x67, 0xc3, 0x80, 0x24, 0xc4, 0x04, 0xe1, 0x08, 0x03, 0x0e, 0x74, 0x65, 0x78, 0x13, 0x04, 0xe0, 0x99, 0x20, 0x00, 0xd0, 0x06, 0x81, 0x70, 0x36, 0x24, 0xc4, 0xc2, 0x10, 0xc4, 0xd0, 0x10, 0xcf, 0x86, 0x00, 0x9a, 0x20, 0x24, 0x1f, 0x89, 0x30, 0xb9, 0xb3, 0xb9, 0x0d, 0x08, 0x21, 0x4d, 0x04, 0x31, 0x18, 0xc0, 0x86, 0x80, 0x9a, 0x20, 0x08, 0x65, 0x40, 0x62, 0x2e, 0xac, 0x0d, 0x6e, 0x03, 0x42, 0x58, 0x17, 0x41, 0x0c, 0x04, 0xb0, 0x21, 0xc0, 0x36, 0x10, 0x11, 0x50, 0x65, 0x13, 0x04, 0x43, 0x0c, 0x26, 0x08, 0x40, 0xc4, 0x00, 0x6d, 0x82, 0x00, 0x48, 0x13, 0x04, 0x60, 0xda, 0x60, 0x24, 0x9d, 0x47, 0x7c, 0x0e, 0x89, 0xb6, 0x34, 0xb8, 0xb9, 0x09, 0x02, 0x40, 0x6d, 0x20, 0x92, 0x30, 0xf0, 0xc4, 0x60, 0xc3, 0xc0, 0x81, 0xc1, 0x18, 0x4c, 0x10, 0x8a, 0x31, 0xa0, 0x81, 0x16, 0xe6, 0x46, 0xc6, 0x56, 0x36, 0x41, 0x00, 0xaa, 0x0d, 0x46, 0x62, 0x06, 0x1e, 0xf1, 0x9d, 0xc1, 0x06, 0xc1, 0x40, 0x83, 0x09, 0x02, 0x02, 0x06, 0x4c, 0xd8, 0xde, 0xc8, 0xbe, 0xc6, 0xd8, 0xc2, 0xda, 0xe0, 0x36, 0x18, 0xc9, 0x1a, 0x78, 0xc4, 0xe7, 0x6c, 0x10, 0x0c, 0x36, 0xd8, 0x70, 0x10, 0x1b, 0x19, 0x94, 0x41, 0x1a, 0xa8, 0x41, 0x1b, 0x4c, 0x10, 0x98, 0x61, 0x03, 0xb0, 0x61, 0x20, 0xe0, 0x00, 0x0e, 0x36, 0x04, 0x71, 0xb0, 0x61, 0x18, 0xde, 0x40, 0x0e, 0x26, 0x08, 0x62, 0x40, 0x06, 0x1b, 0x02, 0x3a, 0x20, 0xd1, 0x16, 0x96, 0xe6, 0xc6, 0x65, 0xca, 0xea, 0x0b, 0xea, 0x6d, 0x2e, 0x8d, 0x2e, 0xed, 0xcd, 0x6d, 0x82, 0xd0, 0x70, 0x13, 0x84, 0xa6, 0xdb, 0x10, 0x10, 0x13, 0x84, 0xc6, 0x9b, 0x20, 0x34, 0xdb, 0x86, 0x85, 0xb8, 0x03, 0x3c, 0xc8, 0x03, 0x3d, 0xd8, 0x83, 0x61, 0x0f, 0x08, 0x3e, 0x00, 0xb8, 0x54, 0x59, 0x7d, 0x51, 0x15, 0x61, 0x0d, 0x3d, 0x3d, 0x49, 0x11, 0x4d, 0x10, 0x1a, 0x6d, 0xc3, 0x32, 0xf8, 0x01, 0x1e, 0xf0, 0x81, 0x1e, 0xfc, 0xc1, 0xf0, 0x07, 0x03, 0x1f, 0x00, 0x1b, 0x84, 0x3e, 0x00, 0x05, 0x26, 0x53, 0x56, 0x5f, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x13, 0x84, 0x26, 0xdb, 0xb0, 0x10, 0xa2, 0x80, 0x07, 0xa3, 0xa0, 0x07, 0x7c, 0x30, 0xec, 0x01, 0xc1, 0x07, 0xc0, 0x04, 0xa1, 0xc1, 0x36, 0x04, 0xc3, 0x04, 0xa1, 0xb9, 0x36, 0x2c, 0x83, 0x28, 0x94, 0xc2, 0x28, 0x98, 0x02, 0x1f, 0x0c, 0xa7, 0x30, 0xf0, 0x01, 0xb0, 0x41, 0x20, 0x05, 0x54, 0xd8, 0x30, 0x84, 0x42, 0x2a, 0x00, 0x13, 0x84, 0x31, 0xb0, 0x36, 0x08, 0xc4, 0x2a, 0x6c, 0x28, 0xde, 0xc0, 0x0e, 0x54, 0x41, 0x63, 0x85, 0x2a, 0x6c, 0x6c, 0x76, 0x6d, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x53, 0x82, 0xa0, 0x0a, 0x19, 0x9e, 0x8b, 0x5d, 0x99, 0xdc, 0x5c, 0xda, 0x9b, 0xdb, 0x94, 0x80, 0x68, 0x42, 0x86, 0xe7, 0x62, 0x17, 0xc6, 0x66, 0x57, 0x26, 0x37, 0x25, 0x30, 0xea, 0x90, 0xe1, 0xb9, 0xcc, 0xa1, 0x85, 0x91, 0x95, 0xc9, 0x35, 0xbd, 0x91, 0x95, 0xb1, 0x4d, 0x09, 0x92, 0x32, 0x64, 0x78, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x53, 0x82, 0xac, 0x12, 0x19, 0x9e, 0x0b, 0x5d, 0x1e, 0x5c, 0x59, 0x90, 0x9b, 0xdb, 0x1b, 0x5d, 0x18, 0x5d, 0xda, 0x9b, 0xdb, 0xdc, 0x14, 0xa1, 0x0d, 0xe4, 0xa0, 0x0e, 0x19, 0x9e, 0x8b, 0x5d, 0x5a, 0xd9, 0x5d, 0x12, 0xd9, 0x14, 0x5d, 0x18, 0x5d, 0xd9, 0x94, 0x80, 0x0e, 0xea, 0x90, 0xe1, 0xb9, 0x94, 0xb9, 0xd1, 0xc9, 0xe5, 0x41, 0xbd, 0xa5, 0xb9, 0xd1, 0xcd, 0x4d, 0x09, 0x58, 0x01, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x8c, 0xcc, 0x21, 0x07, 0x7c, 0x70, 0x03, 0x74, 0x60, 0x07, 0x37, 0x90, 0x87, 0x72, 0x98, 0x87, 0x77, 0xa8, 0x07, 0x79, 0x18, 0x87, 0x72, 0x70, 0x83, 0x70, 0xa0, 0x07, 0x7a, 0x90, 0x87, 0x74, 0x10, 0x87, 0x7a, 0xa0, 0x87, 0x72, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x46, 0x30, 0x0d, 0x97, 0xef, 0x3c, 0xfe, 0xe2, 0x00, 0x83, 0xd8, 0x3c, 0xd4, 0xe4, 0x17, 0xb7, 0x6d, 0x07, 0xdb, 0x70, 0xf9, 0xce, 0xe3, 0x0b, 0x01, 0x55, 0x14, 0x44, 0x54, 0x3a, 0xc0, 0x50, 0x12, 0x06, 0x20, 0x60, 0x7e, 0x71, 0xdb, 0x15, 0x80, 0x06, 0x81, 0x1f, 0xbd, 0x8c, 0x07, 0x02, 0x67, 0xd6, 0x1f, 0x89, 0x5a, 0xc6, 0xd3, 0xeb, 0xf2, 0xb2, 0x8c, 0x08, 0xb4, 0xfe, 0x48, 0xf6, 0xf2, 0x98, 0xfe, 0x96, 0x03, 0x9b, 0x24, 0xd8, 0x0c, 0x08, 0x04, 0x02, 0x83, 0x36, 0x40, 0x30, 0x00, 0xd2, 0x58, 0x02, 0x18, 0x0c, 0x97, 0xef, 0x3c, 0xbe, 0x70, 0x10, 0x82, 0xa2, 0x09, 0x02, 0x21, 0x49, 0x1f, 0xb5, 0x2c, 0x98, 0x09, 0x3c, 0x0f, 0x31, 0xf8, 0xc8, 0x6d, 0x9b, 0x00, 0x01, 0x44, 0x86, 0x54, 0x00, 0x59, 0xe0, 0x37, 0x0f, 0xb7, 0xe1, 0x40, 0xe0, 0xac, 0x3a, 0x0d, 0xb7, 0xe1, 0xec, 0xb2, 0x7c, 0x4a, 0x0f, 0xd3, 0xcb, 0x40, 0x60, 0xd0, 0x0a, 0xaa, 0xe1, 0xf2, 0x9d, 0xc7, 0x97, 0x26, 0x27, 0x22, 0x50, 0x6a, 0x7a, 0xa8, 0xc9, 0x2f, 0x6e, 0xdb, 0x0c, 0xaa, 0xe1, 0xf2, 0x9d, 0xc7, 0x97, 0x26, 0x27, 0x22, 0x50, 0x6a, 0x7a, 0xa8, 0xc9, 0x47, 0x6e, 0xdb, 0x10, 0xa0, 0xe1, 0xf2, 0x9d, 0xc7, 0x97, 0x00, 0xe6, 0x59, 0x08, 0xbf, 0xb8, 0x6d, 0x53, 0x90, 0x86, 0xcb, 0x77, 0x1e, 0x5f, 0x88, 0x08, 0x60, 0x22, 0x42, 0xa0, 0x19, 0x16, 0x02, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x94, 0xdc, 0x0c, 0x40, 0xd9, 0x15, 0x5e, 0x39, 0x06, 0x10, 0x37, 0x02, 0x40, 0xc3, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0xf0, 0x8d, 0xc1, 0x21, 0x85, 0x41, 0x18, 0x08, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0xf0, 0x91, 0x01, 0x12, 0x89, 0x81, 0x18, 0x0c, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0xf0, 0x95, 0x41, 0x52, 0x8d, 0xc1, 0x18, 0x10, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0xe0, 0xb0, 0xc1, 0x18, 0x94, 0x01, 0x19, 0x54, 0xc9, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x38, 0x6d, 0x40, 0x06, 0x66, 0x50, 0x06, 0x9a, 0x32, 0x62, 0x70, 0x00, 0x20, 0x08, 0x06, 0xd7, 0x1a, 0x28, 0x83, 0x19, 0x8c, 0x26, 0x04, 0xc0, 0x88, 0xc1, 0x03, 0x80, 0x20, 0x18, 0x68, 0x6c, 0xb0, 0x1c, 0x06, 0x31, 0x20, 0x08, 0x1a, 0xa0, 0x41, 0x13, 0x8c, 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c, 0x26, 0x0c, 0xc2, 0x68, 0x02, 0x31, 0x8c, 0x26, 0x14, 0xc4, 0x88, 0x81, 0x01, 0x80, 0x20, 0x18, 0x74, 0x71, 0x00, 0x05, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x00, 0xd9, 0x81, 0x19, 0xbc, 0xc1, 0x1b, 0x80, 0x81, 0x31, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x90, 0x1d, 0x98, 0xc1, 0x1b, 0xbc, 0x01, 0x19, 0x14, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x00, 0xd9, 0x81, 0x19, 0xbc, 0xc1, 0x1b, 0x84, 0x01, 0x31, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x90, 0x1d, 0x98, 0xc1, 0x1b, 0xbc, 0x81, 0x37, 0x5c, 0x00, 0xc4, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x48, 0x76, 0x70, 0x06, 0x71, 0x00, 0x07, 0x61, 0x10, 0x60, 0x38, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, 0xe6, 0xc2, 0x48, 0x00, 0xf3, 0xfc, 0x12, 0xc0, 0x3c, 0x0b, 0x11, 0x59, 0x8b, 0x33, 0x11, 0xd7, 0x3f, 0x11, 0xd7, 0x44, 0x45, 0xc4, 0x6f, 0x0f, 0xf6, 0xc2, 0x00, 0x91, 0x21, 0xfd, 0x42, 0x40, 0x15, 0x05, 0x11, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; #if 0 SamplerState samp : register(s0); Texture2D tex : register(t0); cbuffer args : register(b0) { float lod_clamp; float lod_bias; }; void main(float4 pos : SV_POSITION, float2 uv : UV_TEXCOORD, out float4 o0 : SV_TARGET0, out uint o1 : SV_TARGET1) { uint fb; o0 = tex.SampleBias(samp, uv, lod_bias, int2(0, 0), lod_clamp, fb); o1 = CheckAccessFullyMapped(fb) ? 1 : 0; } #endif static const DWORD ps_sample_bias_dxbc[] = { 0x43425844, 0xafcb01e1, 0x3f4af08e, 0x56bda673, 0x8e911618, 0x00000001, 0x000001f0, 0x00000004, 0x00000030, 0x00000088, 0x000000d4, 0x000001e0, 0x4e475349, 0x00000050, 0x00000002, 0x00000008, 0x00000038, 0x00000000, 0x00000001, 0x00000003, 0x00000000, 0x0000000f, 0x00000044, 0x00000000, 0x00000000, 0x00000003, 0x00000001, 0x00000303, 0x505f5653, 0x5449534f, 0x004e4f49, 0x545f5655, 0x4f435845, 0x0044524f, 0x4e47534f, 0x00000044, 0x00000002, 0x00000008, 0x00000038, 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x0000000f, 0x00000038, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000e01, 0x545f5653, 0x45475241, 0xabab0054, 0x58454853, 0x00000104, 0x00000050, 0x00000041, 0x0100086a, 0x04000059, 0x00208e46, 0x00000000, 0x00000001, 0x0300005a, 0x00106000, 0x00000000, 0x04001858, 0x00107000, 0x00000000, 0x00005555, 0x03001062, 0x00101032, 0x00000001, 0x03000065, 0x001020f2, 0x00000000, 0x03000065, 0x00102012, 0x00000001, 0x02000068, 0x00000002, 0x940000e7, 0x800000c2, 0x00155543, 0x001000f2, 0x00000000, 0x00100012, 0x00000001, 0x00101046, 0x00000001, 0x00107e46, 0x00000000, 0x00106000, 0x00000000, 0x0020801a, 0x00000000, 0x00000000, 0x0020800a, 0x00000000, 0x00000000, 0x00000000, 0x05000036, 0x001020f2, 0x00000000, 0x00100e46, 0x00000000, 0x050000ea, 0x00100012, 0x00000000, 0x0010000a, 0x00000001, 0x09000037, 0x00102012, 0x00000001, 0x0010000a, 0x00000000, 0x00004001, 0x00000001, 0x00004001, 0x00000000, 0x0100003e, 0x30494653, 0x00000008, 0x00000100, 0x00000000, }; static const BYTE ps_sample_bias_dxil[] = { 0x44, 0x58, 0x42, 0x43, 0xc2, 0xe2, 0xfa, 0xbc, 0xae, 0x78, 0xac, 0x1b, 0x8b, 0xa7, 0x22, 0xa3, 0xdf, 0xc2, 0xeb, 0x67, 0x01, 0x00, 0x00, 0x00, 0xf6, 0x0a, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0xf2, 0x01, 0x00, 0x00, 0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31, 0x60, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x55, 0x56, 0x5f, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x4f, 0x53, 0x47, 0x31, 0x52, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x00, 0x50, 0x53, 0x56, 0x30, 0xe4, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 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, 0x10, 0x00, 0x00, 0x00, 0x00, 0x55, 0x56, 0x5f, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x03, 0x03, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x42, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x10, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x41, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0xfc, 0x08, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x3f, 0x02, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xe4, 0x08, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x18, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xc4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x62, 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, 0x11, 0x23, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x31, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, 0x84, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x6d, 0x30, 0x86, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa8, 0x00, 0x49, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x32, 0x22, 0x88, 0x09, 0x20, 0x64, 0x85, 0x04, 0x13, 0x23, 0xa4, 0x84, 0x04, 0x13, 0x23, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8c, 0x8c, 0x0b, 0x84, 0xc4, 0x4c, 0x10, 0x90, 0xc1, 0x1c, 0x01, 0x18, 0xdc, 0x24, 0x4d, 0x11, 0x25, 0x4c, 0x3e, 0x0b, 0x30, 0xcf, 0x42, 0x44, 0xec, 0x04, 0x4c, 0x04, 0x0a, 0x00, 0x0a, 0x66, 0x00, 0x86, 0x11, 0x88, 0x61, 0xa6, 0x36, 0x18, 0x07, 0x76, 0x08, 0x87, 0x79, 0x98, 0x07, 0x37, 0xa0, 0x85, 0x72, 0xc0, 0x07, 0x7a, 0xa8, 0x07, 0x79, 0x28, 0x07, 0x39, 0x20, 0x05, 0x3e, 0xb0, 0x87, 0x72, 0x18, 0x07, 0x7a, 0x78, 0x07, 0x79, 0xe0, 0x03, 0x73, 0x60, 0x87, 0x77, 0x08, 0x07, 0x7a, 0x60, 0x03, 0x30, 0xa0, 0x03, 0x3f, 0x00, 0x03, 0x3f, 0xd0, 0x03, 0x3d, 0x68, 0x87, 0x74, 0x80, 0x87, 0x79, 0xf8, 0x05, 0x7a, 0xc8, 0x07, 0x78, 0x28, 0x07, 0x14, 0x00, 0x33, 0x89, 0xc1, 0x38, 0xb0, 0x43, 0x38, 0xcc, 0xc3, 0x3c, 0xb8, 0x01, 0x2d, 0x94, 0x03, 0x3e, 0xd0, 0x43, 0x3d, 0xc8, 0x43, 0x39, 0xc8, 0x01, 0x29, 0xf0, 0x81, 0x3d, 0x94, 0xc3, 0x38, 0xd0, 0xc3, 0x3b, 0xc8, 0x03, 0x1f, 0x98, 0x03, 0x3b, 0xbc, 0x43, 0x38, 0xd0, 0x03, 0x1b, 0x80, 0x01, 0x1d, 0xf8, 0x01, 0x18, 0xf8, 0x01, 0x12, 0x88, 0x82, 0x8c, 0x23, 0x80, 0xc8, 0x90, 0x90, 0x30, 0x0c, 0x84, 0x8c, 0x00, 0x94, 0x40, 0xa1, 0x65, 0x8e, 0x00, 0x29, 0xc6, 0x00, 0x00, 0x40, 0x03, 0x90, 0x53, 0x0c, 0x05, 0x00, 0x80, 0x66, 0x20, 0xa8, 0x18, 0x0a, 0x00, 0x00, 0x0d, 0x40, 0xd2, 0x51, 0xc3, 0xe5, 0x4f, 0xd8, 0x43, 0x48, 0x3e, 0xb7, 0x51, 0xc5, 0x4a, 0x4c, 0x7e, 0x71, 0xdb, 0x88, 0x18, 0x86, 0x61, 0xa0, 0xe6, 0x9e, 0xe1, 0xf2, 0x27, 0xec, 0x21, 0x24, 0x3f, 0x04, 0x9a, 0x61, 0x21, 0x50, 0x50, 0x15, 0x82, 0x02, 0x2c, 0x80, 0xae, 0x9b, 0x86, 0xcb, 0x9f, 0xb0, 0x87, 0x90, 0xfc, 0x95, 0x90, 0x56, 0x62, 0xf2, 0x8b, 0xdb, 0x46, 0xc5, 0x30, 0x0c, 0x03, 0x50, 0x9a, 0x0c, 0xb0, 0xac, 0x61, 0x18, 0x06, 0x00, 0x00, 0x86, 0x81, 0xb4, 0x39, 0x82, 0xa0, 0x0c, 0x1c, 0x00, 0x50, 0x57, 0x0c, 0x0b, 0x68, 0x00, 0x80, 0xa3, 0x6f, 0x20, 0x20, 0x11, 0x80, 0x39, 0x02, 0x50, 0x00, 0x00, 0x00, 0x00, 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x3a, 0x0f, 0x84, 0x90, 0x21, 0x23, 0x45, 0x44, 0x00, 0xc6, 0x00, 0x80, 0x69, 0x03, 0x00, 0x26, 0x0e, 0x00, 0x60, 0xc8, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x90, 0xc7, 0x01, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x21, 0x0f, 0x04, 0x04, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x1e, 0x09, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, 0x17, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x79, 0x34, 0x20, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, 0x74, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4, 0xf9, 0x80, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x0b, 0x04, 0x15, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x18, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x02, 0x4a, 0x60, 0x04, 0xa0, 0x10, 0x8a, 0xa1, 0x08, 0x4a, 0xa2, 0x20, 0x0a, 0xa5, 0x0c, 0xca, 0xa1, 0x40, 0x4a, 0x81, 0xc6, 0x02, 0x04, 0xa2, 0xa6, 0x04, 0x4a, 0xa1, 0x40, 0x8a, 0x60, 0x04, 0xa0, 0x24, 0xca, 0xa0, 0x10, 0x28, 0x99, 0x01, 0x20, 0x64, 0x06, 0x80, 0x8e, 0x19, 0x00, 0x32, 0x66, 0x00, 0xa8, 0x98, 0x01, 0x20, 0x71, 0x2c, 0xc4, 0x28, 0x00, 0x00, 0x00, 0xbe, 0x8f, 0x84, 0x19, 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0xc4, 0x83, 0x0c, 0x6f, 0x0c, 0x24, 0xc6, 0x45, 0x66, 0x43, 0x10, 0x4c, 0x10, 0x80, 0x65, 0x82, 0x00, 0x30, 0x1b, 0x84, 0x81, 0x98, 0x20, 0x00, 0xcd, 0x06, 0x61, 0x30, 0x28, 0xc0, 0xcd, 0x4d, 0x10, 0x00, 0x67, 0xc3, 0x80, 0x24, 0xc4, 0x04, 0xe1, 0x10, 0x03, 0x0e, 0x74, 0x65, 0x78, 0x13, 0x04, 0xe0, 0x99, 0x20, 0x00, 0xd0, 0x06, 0x81, 0x70, 0x36, 0x24, 0xc4, 0xc2, 0x10, 0xc4, 0xd0, 0x10, 0xcf, 0x86, 0x00, 0x9a, 0x20, 0x24, 0x60, 0x40, 0x22, 0x4c, 0xee, 0x6c, 0x6e, 0x82, 0x00, 0x44, 0x1b, 0x10, 0x42, 0x9a, 0x08, 0x62, 0xa0, 0x80, 0x0d, 0x41, 0x35, 0x41, 0x10, 0xcc, 0x80, 0xc4, 0x5c, 0x58, 0x1b, 0xdc, 0x06, 0x84, 0xb8, 0x30, 0x82, 0x18, 0x08, 0x60, 0x43, 0x90, 0x6d, 0x20, 0x22, 0xc0, 0xd2, 0x26, 0x08, 0xc6, 0x18, 0x4c, 0x10, 0x00, 0x89, 0x01, 0xda, 0x04, 0x01, 0x98, 0x26, 0x08, 0x00, 0xb5, 0xc1, 0x48, 0xbc, 0x8f, 0x00, 0x03, 0x87, 0x44, 0x5b, 0x1a, 0xdc, 0xdc, 0x04, 0x01, 0xa8, 0x36, 0x10, 0x89, 0x18, 0x7c, 0x63, 0xb0, 0x61, 0xe8, 0xc2, 0x80, 0x0c, 0x26, 0x08, 0x05, 0x19, 0xd0, 0x40, 0x0b, 0x73, 0x23, 0x63, 0x2b, 0x9b, 0x20, 0x00, 0xd6, 0x06, 0x23, 0x39, 0x83, 0x8f, 0x00, 0x03, 0x34, 0xd8, 0x20, 0x18, 0x69, 0x30, 0x41, 0x40, 0xc2, 0x80, 0x09, 0xdb, 0x1b, 0xd9, 0xd7, 0x18, 0x5b, 0x58, 0x1b, 0xdc, 0x06, 0x23, 0x61, 0x83, 0x8f, 0x00, 0x03, 0x87, 0x08, 0xdb, 0x1b, 0xd9, 0x97, 0x58, 0x5a, 0xd8, 0xdc, 0x06, 0x23, 0x71, 0x83, 0xcf, 0x00, 0x03, 0x67, 0xc3, 0x40, 0xb5, 0xc1, 0x1b, 0x6c, 0x38, 0x08, 0xae, 0x0c, 0xcc, 0x40, 0x0d, 0xd6, 0x00, 0x0e, 0x26, 0x08, 0xcc, 0xb0, 0x01, 0xd8, 0x30, 0x10, 0x73, 0x30, 0x07, 0x1b, 0x02, 0x3a, 0xd8, 0x30, 0x0c, 0x72, 0x50, 0x07, 0x13, 0x04, 0x31, 0x28, 0x83, 0x0d, 0xc1, 0x1d, 0x90, 0x68, 0x0b, 0x4b, 0x73, 0xe3, 0x32, 0x65, 0xf5, 0x05, 0xf5, 0x36, 0x97, 0x46, 0x97, 0xf6, 0xe6, 0x36, 0x41, 0x68, 0xba, 0x09, 0x42, 0xe3, 0x6d, 0x08, 0x88, 0x09, 0x42, 0xf3, 0x4d, 0x10, 0x1a, 0x6e, 0xc3, 0x42, 0xe8, 0xc1, 0x1e, 0xf0, 0x41, 0x1f, 0xf8, 0xc1, 0xe0, 0x07, 0xc4, 0x1f, 0x00, 0x5c, 0xaa, 0xac, 0xbe, 0xa8, 0x8a, 0xb0, 0x86, 0x9e, 0x9e, 0xa4, 0x88, 0x26, 0x08, 0xcd, 0xb6, 0x61, 0x19, 0x42, 0x61, 0x0f, 0xfe, 0xa0, 0x0f, 0x44, 0x61, 0x10, 0x85, 0xe1, 0x0f, 0x80, 0x0d, 0x02, 0x28, 0x8c, 0x02, 0x93, 0x29, 0xab, 0x2f, 0xaa, 0x30, 0xb9, 0xb3, 0x32, 0xba, 0x09, 0x42, 0xa3, 0x6d, 0x58, 0x88, 0x52, 0xd8, 0x03, 0x53, 0xe8, 0x83, 0x3f, 0x18, 0xfc, 0x80, 0xf8, 0x03, 0x60, 0x82, 0xd0, 0x64, 0x1b, 0x82, 0x61, 0x82, 0xd0, 0x60, 0x1b, 0x96, 0xa1, 0x14, 0x50, 0xc1, 0x14, 0x52, 0xe1, 0x0f, 0x06, 0x55, 0x18, 0xfe, 0x00, 0xd8, 0x20, 0x9c, 0xc2, 0x2a, 0x6c, 0x18, 0x48, 0x81, 0x15, 0x80, 0x09, 0xc2, 0x18, 0x5c, 0x1b, 0x04, 0xc2, 0x15, 0x36, 0x14, 0x72, 0x90, 0x07, 0xad, 0xb0, 0xbd, 0x42, 0x15, 0x36, 0x36, 0xbb, 0x36, 0x97, 0x34, 0xb2, 0x32, 0x37, 0xba, 0x29, 0x41, 0x50, 0x85, 0x0c, 0xcf, 0xc5, 0xae, 0x4c, 0x6e, 0x2e, 0xed, 0xcd, 0x6d, 0x4a, 0x40, 0x34, 0x21, 0xc3, 0x73, 0xb1, 0x0b, 0x63, 0xb3, 0x2b, 0x93, 0x9b, 0x12, 0x18, 0x75, 0xc8, 0xf0, 0x5c, 0xe6, 0xd0, 0xc2, 0xc8, 0xca, 0xe4, 0x9a, 0xde, 0xc8, 0xca, 0xd8, 0xa6, 0x04, 0x49, 0x19, 0x32, 0x3c, 0x17, 0xb9, 0xb2, 0xb9, 0xb7, 0x3a, 0xb9, 0xb1, 0xb2, 0xb9, 0x29, 0x81, 0x56, 0x89, 0x0c, 0xcf, 0x85, 0x2e, 0x0f, 0xae, 0x2c, 0xc8, 0xcd, 0xed, 0x8d, 0x2e, 0x8c, 0x2e, 0xed, 0xcd, 0x6d, 0x6e, 0x8a, 0x00, 0x07, 0x75, 0x50, 0x87, 0x0c, 0xcf, 0xc5, 0x2e, 0xad, 0xec, 0x2e, 0x89, 0x6c, 0x8a, 0x2e, 0x8c, 0xae, 0x6c, 0x4a, 0x70, 0x07, 0x75, 0xc8, 0xf0, 0x5c, 0xca, 0xdc, 0xe8, 0xe4, 0xf2, 0xa0, 0xde, 0xd2, 0xdc, 0xe8, 0xe6, 0xa6, 0x04, 0xaf, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x8c, 0xcc, 0x21, 0x07, 0x7c, 0x70, 0x03, 0x74, 0x60, 0x07, 0x37, 0x90, 0x87, 0x72, 0x98, 0x87, 0x77, 0xa8, 0x07, 0x79, 0x18, 0x87, 0x72, 0x70, 0x83, 0x70, 0xa0, 0x07, 0x7a, 0x90, 0x87, 0x74, 0x10, 0x87, 0x7a, 0xa0, 0x87, 0x72, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x46, 0x30, 0x0d, 0x97, 0xef, 0x3c, 0xfe, 0xe2, 0x00, 0x83, 0xd8, 0x3c, 0xd4, 0xe4, 0x17, 0xb7, 0x5d, 0x01, 0x68, 0x10, 0xf8, 0xd1, 0xcb, 0x78, 0x20, 0x70, 0x66, 0xfd, 0x91, 0xa8, 0x65, 0x3c, 0xbd, 0x2e, 0x2f, 0xcb, 0x88, 0x40, 0xeb, 0x8f, 0x64, 0x2f, 0x8f, 0xe9, 0x6f, 0x39, 0xb0, 0x49, 0x82, 0xcd, 0x80, 0x40, 0x20, 0x30, 0x68, 0x03, 0x04, 0x03, 0x20, 0x8d, 0x1d, 0x6c, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x04, 0x54, 0x51, 0x10, 0x51, 0xe9, 0x00, 0x43, 0x49, 0x18, 0x80, 0x80, 0xf9, 0xc5, 0x6d, 0x5b, 0x02, 0x18, 0x0c, 0x97, 0xef, 0x3c, 0xbe, 0x70, 0x10, 0x82, 0xa2, 0x09, 0x02, 0x21, 0x49, 0x1f, 0xb5, 0x2c, 0x98, 0x09, 0x3c, 0x0f, 0x31, 0xf8, 0xc8, 0x6d, 0x9b, 0x00, 0x01, 0x44, 0x86, 0x54, 0x00, 0x59, 0xe0, 0x37, 0x0f, 0xb7, 0xe1, 0x40, 0xe0, 0xac, 0x3a, 0x0d, 0xb7, 0xe1, 0xec, 0xb2, 0x7c, 0x4a, 0x0f, 0xd3, 0xcb, 0x40, 0x60, 0xd0, 0x0a, 0xaa, 0xe1, 0xf2, 0x9d, 0xc7, 0x97, 0x26, 0x27, 0x22, 0x50, 0x6a, 0x7a, 0xa8, 0xc9, 0x2f, 0x6e, 0xdb, 0x0c, 0xaa, 0xe1, 0xf2, 0x9d, 0xc7, 0x97, 0x26, 0x27, 0x22, 0x50, 0x6a, 0x7a, 0xa8, 0xc9, 0x47, 0x6e, 0xdb, 0x10, 0xa8, 0xe1, 0xf2, 0x9d, 0xc7, 0x97, 0x00, 0xe6, 0x59, 0x88, 0x0d, 0x01, 0x24, 0xbf, 0xb8, 0x6d, 0x53, 0x90, 0x86, 0xcb, 0x77, 0x1e, 0x5f, 0x88, 0x08, 0x60, 0x22, 0x42, 0xa0, 0x19, 0x16, 0x02, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x94, 0xdc, 0x0c, 0x40, 0xd9, 0x95, 0x5e, 0x39, 0x06, 0x10, 0x37, 0x02, 0x40, 0xc3, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0xf0, 0x91, 0xc1, 0x21, 0x89, 0x81, 0x18, 0x08, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0xf0, 0x95, 0x01, 0x12, 0x8d, 0xc1, 0x18, 0x0c, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0xf0, 0x99, 0x41, 0x52, 0x91, 0x01, 0x19, 0x10, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0xe0, 0xb4, 0x01, 0x19, 0x98, 0x41, 0x19, 0x54, 0xc9, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x38, 0x6e, 0x50, 0x06, 0x67, 0x60, 0x06, 0x9a, 0x32, 0x62, 0x70, 0x00, 0x20, 0x08, 0x06, 0x17, 0x1b, 0x28, 0xc3, 0x19, 0x8c, 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c, 0x18, 0x40, 0x00, 0x08, 0x82, 0x81, 0xe6, 0x06, 0x0c, 0x72, 0x14, 0x44, 0x92, 0xa8, 0x81, 0x1a, 0x38, 0x81, 0x30, 0x9a, 0x10, 0x00, 0xa3, 0x09, 0x42, 0x30, 0x9a, 0x30, 0x08, 0xa3, 0x09, 0xc4, 0x30, 0x9a, 0x50, 0x10, 0x23, 0x06, 0x06, 0x00, 0x82, 0x60, 0xd0, 0xcd, 0x41, 0x14, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x01, 0x84, 0x07, 0x67, 0x10, 0x07, 0x71, 0x10, 0x06, 0xc6, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x40, 0x78, 0x70, 0x06, 0x71, 0x10, 0x07, 0x65, 0x50, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x01, 0x84, 0x07, 0x67, 0x10, 0x07, 0x71, 0x20, 0x06, 0xc4, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x40, 0x78, 0x70, 0x06, 0x71, 0x10, 0x07, 0xdf, 0x70, 0x01, 0x10, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x20, 0xe1, 0x01, 0x1a, 0xcc, 0x81, 0x1c, 0x88, 0x41, 0x80, 0xe1, 0x40, 0x00, 0x09, 0x00, 0x00, 0x00, 0xf6, 0xc2, 0x48, 0x00, 0xf3, 0xfc, 0x12, 0xc0, 0x3c, 0x0b, 0x11, 0x99, 0x8b, 0x33, 0x11, 0xd7, 0x3f, 0x11, 0xd7, 0x44, 0x45, 0xc4, 0x6f, 0x0f, 0x06, 0xc3, 0x00, 0x91, 0x21, 0xfd, 0x42, 0x40, 0x15, 0x05, 0x11, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; #if 0 SamplerState samp : register(s0); Texture2D tex : register(t0); cbuffer args : register(b0) { float lod_clamp; float ddx; float ddy; }; void main(float4 pos : SV_POSITION, float2 uv : UV_TEXCOORD, out float4 o0 : SV_TARGET0, out uint o1 : SV_TARGET1) { uint fb; o0 = tex.SampleGrad(samp, uv, ddx, ddy, int2(0, 0), lod_clamp, fb); o1 = CheckAccessFullyMapped(fb) ? 1 : 0; } #endif static const DWORD ps_sample_grad_dxbc[] = { 0x43425844, 0x3446d50e, 0x26d0c876, 0x2d6ba03a, 0xab028756, 0x00000001, 0x000001fc, 0x00000004, 0x00000030, 0x00000088, 0x000000d4, 0x000001ec, 0x4e475349, 0x00000050, 0x00000002, 0x00000008, 0x00000038, 0x00000000, 0x00000001, 0x00000003, 0x00000000, 0x0000000f, 0x00000044, 0x00000000, 0x00000000, 0x00000003, 0x00000001, 0x00000303, 0x505f5653, 0x5449534f, 0x004e4f49, 0x545f5655, 0x4f435845, 0x0044524f, 0x4e47534f, 0x00000044, 0x00000002, 0x00000008, 0x00000038, 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x0000000f, 0x00000038, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000e01, 0x545f5653, 0x45475241, 0xabab0054, 0x58454853, 0x00000110, 0x00000050, 0x00000044, 0x0100086a, 0x04000059, 0x00208e46, 0x00000000, 0x00000001, 0x0300005a, 0x00106000, 0x00000000, 0x04001858, 0x00107000, 0x00000000, 0x00005555, 0x03001062, 0x00101032, 0x00000001, 0x03000065, 0x001020f2, 0x00000000, 0x03000065, 0x00102012, 0x00000001, 0x02000068, 0x00000002, 0x970000e8, 0x800000c2, 0x00155543, 0x001000f2, 0x00000000, 0x00100012, 0x00000001, 0x00101046, 0x00000001, 0x00107e46, 0x00000000, 0x00106000, 0x00000000, 0x00208556, 0x00000000, 0x00000000, 0x00208aa6, 0x00000000, 0x00000000, 0x0020800a, 0x00000000, 0x00000000, 0x00002000, 0x05000036, 0x001020f2, 0x00000000, 0x00100e46, 0x00000000, 0x050000ea, 0x00100012, 0x00000000, 0x0010000a, 0x00000001, 0x09000037, 0x00102012, 0x00000001, 0x0010000a, 0x00000000, 0x00004001, 0x00000001, 0x00004001, 0x00000000, 0x0100003e, 0x30494653, 0x00000008, 0x00000100, 0x00000000, }; static const BYTE ps_sample_grad_dxil[] = { 0x44, 0x58, 0x42, 0x43, 0x68, 0xe1, 0x46, 0x09, 0xda, 0xc5, 0x9d, 0x05, 0xe8, 0x4a, 0x2d, 0x42, 0xe3, 0xdb, 0x9c, 0x76, 0x01, 0x00, 0x00, 0x00, 0x12, 0x0b, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0xf2, 0x01, 0x00, 0x00, 0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31, 0x60, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x55, 0x56, 0x5f, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x4f, 0x53, 0x47, 0x31, 0x52, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x00, 0x50, 0x53, 0x56, 0x30, 0xe4, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 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, 0x10, 0x00, 0x00, 0x00, 0x00, 0x55, 0x56, 0x5f, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x03, 0x03, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x42, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x10, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x41, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x18, 0x09, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x46, 0x02, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0x3d, 0x02, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x18, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xc4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x62, 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, 0x11, 0x23, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x31, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, 0x84, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x6d, 0x30, 0x86, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa8, 0x00, 0x49, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x32, 0x22, 0x88, 0x09, 0x20, 0x64, 0x85, 0x04, 0x13, 0x23, 0xa4, 0x84, 0x04, 0x13, 0x23, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8c, 0x8c, 0x0b, 0x84, 0xc4, 0x4c, 0x10, 0x90, 0xc1, 0x1c, 0x01, 0x18, 0xdc, 0x24, 0x4d, 0x11, 0x25, 0x4c, 0x3e, 0x0b, 0x30, 0xcf, 0x42, 0x44, 0xec, 0x04, 0x4c, 0x04, 0x0a, 0x00, 0x0a, 0x66, 0x00, 0x86, 0x11, 0x88, 0x61, 0xa6, 0x36, 0x18, 0x07, 0x76, 0x08, 0x87, 0x79, 0x98, 0x07, 0x37, 0xa0, 0x85, 0x72, 0xc0, 0x07, 0x7a, 0xa8, 0x07, 0x79, 0x28, 0x07, 0x39, 0x20, 0x05, 0x3e, 0xb0, 0x87, 0x72, 0x18, 0x07, 0x7a, 0x78, 0x07, 0x79, 0xe0, 0x03, 0x73, 0x60, 0x87, 0x77, 0x08, 0x07, 0x7a, 0x60, 0x03, 0x30, 0xa0, 0x03, 0x3f, 0x00, 0x03, 0x3f, 0xd0, 0x03, 0x3d, 0x68, 0x87, 0x74, 0x80, 0x87, 0x79, 0xf8, 0x05, 0x7a, 0xc8, 0x07, 0x78, 0x28, 0x07, 0x14, 0x00, 0x33, 0x89, 0xc1, 0x38, 0xb0, 0x43, 0x38, 0xcc, 0xc3, 0x3c, 0xb8, 0x01, 0x2d, 0x94, 0x03, 0x3e, 0xd0, 0x43, 0x3d, 0xc8, 0x43, 0x39, 0xc8, 0x01, 0x29, 0xf0, 0x81, 0x3d, 0x94, 0xc3, 0x38, 0xd0, 0xc3, 0x3b, 0xc8, 0x03, 0x1f, 0x98, 0x03, 0x3b, 0xbc, 0x43, 0x38, 0xd0, 0x03, 0x1b, 0x80, 0x01, 0x1d, 0xf8, 0x01, 0x18, 0xf8, 0x01, 0x12, 0x88, 0x82, 0x8c, 0x23, 0x80, 0xc8, 0x90, 0xd0, 0x30, 0x0c, 0x03, 0x21, 0x23, 0x00, 0x25, 0x50, 0x68, 0x99, 0x23, 0x40, 0x8a, 0x31, 0x00, 0x00, 0xd0, 0x00, 0xe4, 0x14, 0x43, 0x01, 0x00, 0xa0, 0x19, 0x08, 0x2a, 0x86, 0x02, 0x00, 0x40, 0x03, 0x90, 0x74, 0xd4, 0x70, 0xf9, 0x13, 0xf6, 0x10, 0x92, 0xcf, 0x6d, 0x54, 0xb1, 0x12, 0x93, 0x5f, 0xdc, 0x36, 0x22, 0x86, 0x61, 0x18, 0xa8, 0xb9, 0x67, 0xb8, 0xfc, 0x09, 0x7b, 0x08, 0xc9, 0x0f, 0x81, 0x66, 0x58, 0x08, 0x14, 0x54, 0x85, 0xa0, 0x00, 0x0b, 0xa0, 0xeb, 0xa6, 0xe1, 0xf2, 0x27, 0xec, 0x21, 0x24, 0x7f, 0x25, 0xa4, 0x95, 0x98, 0xfc, 0xe2, 0xb6, 0x51, 0x31, 0x0c, 0xc3, 0x00, 0x14, 0x29, 0x03, 0x2c, 0x6b, 0x18, 0x86, 0x01, 0x00, 0x80, 0x61, 0x18, 0x86, 0x61, 0x18, 0x48, 0x9b, 0x23, 0x08, 0xca, 0xc0, 0x01, 0x00, 0x75, 0xc5, 0xb0, 0x80, 0x06, 0x00, 0x38, 0xfa, 0x06, 0x02, 0x12, 0x01, 0x98, 0x23, 0x00, 0x05, 0x00, 0x00, 0x00, 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x3a, 0x0f, 0x84, 0x90, 0x21, 0x23, 0x45, 0x44, 0x00, 0xc6, 0x00, 0x80, 0x69, 0x03, 0x00, 0x26, 0x0e, 0x00, 0x60, 0xc8, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x90, 0xc7, 0x01, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x21, 0x0f, 0x04, 0x04, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x1e, 0x09, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, 0x17, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x79, 0x34, 0x20, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, 0x74, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4, 0xf9, 0x80, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x0b, 0x04, 0x15, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x18, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x02, 0x4a, 0x60, 0x04, 0xa0, 0x10, 0x8a, 0xa1, 0x08, 0x4a, 0xa2, 0x30, 0x0a, 0xa5, 0x0c, 0xca, 0xa1, 0x40, 0x4a, 0xa1, 0x20, 0x68, 0x2c, 0x40, 0x20, 0x6a, 0x4a, 0xa0, 0x14, 0x0a, 0xa4, 0x08, 0x46, 0x00, 0x4a, 0xa2, 0x0c, 0x0a, 0x81, 0x92, 0x19, 0x00, 0x42, 0x66, 0x00, 0xe8, 0x98, 0x01, 0x20, 0x63, 0x06, 0x80, 0x8a, 0x19, 0x00, 0x12, 0xc7, 0x42, 0x8c, 0x02, 0x00, 0x00, 0xe0, 0xfb, 0x48, 0x98, 0x01, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0xc4, 0x83, 0x0c, 0x6f, 0x0c, 0x24, 0xc6, 0x45, 0x66, 0x43, 0x10, 0x4c, 0x10, 0x80, 0x65, 0x82, 0x00, 0x30, 0x1b, 0x84, 0x81, 0x98, 0x20, 0x00, 0xcd, 0x06, 0x61, 0x30, 0x28, 0xc0, 0xcd, 0x4d, 0x10, 0x00, 0x67, 0xc3, 0x80, 0x24, 0xc4, 0x04, 0xe1, 0x18, 0x03, 0x0e, 0x74, 0x65, 0x78, 0x13, 0x04, 0xe0, 0x99, 0x20, 0x00, 0xd0, 0x06, 0x81, 0x70, 0x36, 0x24, 0xc4, 0xc2, 0x10, 0xc4, 0xd0, 0x10, 0xcf, 0x86, 0x00, 0x9a, 0x20, 0x24, 0x61, 0x40, 0x22, 0x4c, 0xee, 0x6c, 0x6e, 0x82, 0x00, 0x44, 0x1b, 0x10, 0x42, 0x9a, 0x08, 0x62, 0xa0, 0x80, 0x0d, 0x41, 0x35, 0x41, 0x10, 0xce, 0x80, 0xc4, 0x5c, 0x58, 0x1b, 0xdc, 0x06, 0x84, 0xb8, 0x30, 0x82, 0x18, 0x08, 0x60, 0x43, 0x90, 0x6d, 0x20, 0x22, 0xc0, 0xd2, 0x26, 0x08, 0x06, 0x19, 0x4c, 0x10, 0x00, 0x89, 0x01, 0xda, 0x04, 0x01, 0x98, 0x26, 0x08, 0x00, 0xb5, 0xc1, 0x48, 0xbc, 0x8f, 0x00, 0x03, 0x87, 0x44, 0x5b, 0x1a, 0xdc, 0xdc, 0x04, 0x01, 0xa8, 0x36, 0x10, 0x89, 0x18, 0x7c, 0x63, 0xb0, 0x61, 0xe8, 0xc2, 0x80, 0x0c, 0x26, 0x08, 0x45, 0x19, 0xd0, 0x40, 0x0b, 0x73, 0x23, 0x63, 0x2b, 0x9b, 0x20, 0x00, 0xd6, 0x06, 0x23, 0x39, 0x83, 0x8f, 0x00, 0x03, 0x34, 0xd8, 0x20, 0x18, 0x69, 0x30, 0x41, 0x40, 0xc4, 0x80, 0x09, 0xdb, 0x1b, 0xd9, 0xd7, 0x18, 0x5b, 0x58, 0x1b, 0xdc, 0x06, 0x23, 0x61, 0x83, 0x8f, 0x00, 0x03, 0x87, 0x03, 0x19, 0x19, 0xde, 0x06, 0x23, 0x71, 0x83, 0xcf, 0x00, 0x03, 0x87, 0x03, 0x19, 0x59, 0xde, 0x04, 0x01, 0xb8, 0x36, 0x18, 0x09, 0x1c, 0x7c, 0x71, 0x00, 0x06, 0xce, 0x06, 0x82, 0x6a, 0x83, 0x37, 0x90, 0x83, 0x0d, 0x07, 0xc1, 0x95, 0x81, 0x19, 0xa8, 0xc1, 0x1a, 0xcc, 0xc1, 0x04, 0x81, 0x19, 0x36, 0x00, 0x1b, 0x06, 0xc2, 0x0e, 0xec, 0x60, 0x43, 0x70, 0x07, 0x1b, 0x86, 0xa1, 0x0e, 0xf0, 0x60, 0x82, 0x20, 0x06, 0x66, 0xb0, 0x21, 0xd0, 0x03, 0x12, 0x6d, 0x61, 0x69, 0x6e, 0x5c, 0xa6, 0xac, 0xbe, 0xa0, 0xde, 0xe6, 0xd2, 0xe8, 0xd2, 0xde, 0xdc, 0x26, 0x08, 0x8d, 0x37, 0x41, 0x68, 0xbe, 0x0d, 0x01, 0x31, 0x41, 0x68, 0xc0, 0x60, 0x82, 0xd0, 0x74, 0x1b, 0x16, 0xa2, 0x0f, 0xfc, 0xe0, 0x0f, 0x40, 0x21, 0x14, 0x86, 0x50, 0x20, 0x44, 0x01, 0xe0, 0x52, 0x65, 0xf5, 0x45, 0x55, 0x84, 0x35, 0xf4, 0xf4, 0x24, 0x45, 0x34, 0x41, 0x68, 0xb8, 0x0d, 0xcb, 0x40, 0x0a, 0x7e, 0x20, 0x0a, 0xa0, 0x50, 0x0a, 0x43, 0x29, 0x0c, 0xa2, 0x00, 0x6c, 0x10, 0x46, 0xc1, 0x14, 0x98, 0x4c, 0x59, 0x7d, 0x51, 0x85, 0xc9, 0x9d, 0x95, 0xd1, 0x4d, 0x10, 0x9a, 0x6d, 0xc3, 0x42, 0xa0, 0x82, 0x1f, 0xa4, 0x02, 0x28, 0x88, 0xc2, 0x10, 0x0a, 0x84, 0x28, 0x00, 0x13, 0x84, 0x46, 0xdb, 0x10, 0x0c, 0x13, 0x84, 0x26, 0xdb, 0xb0, 0x0c, 0xa8, 0xb0, 0x0a, 0xa9, 0xc0, 0x0a, 0xa2, 0x30, 0xb4, 0xc2, 0x20, 0x0a, 0xc0, 0x06, 0x41, 0x15, 0x5c, 0x61, 0xc3, 0x70, 0x0a, 0xaf, 0x00, 0x4c, 0x10, 0xc6, 0x00, 0xdb, 0x20, 0x10, 0xb1, 0xb0, 0xa1, 0xa8, 0x03, 0x3e, 0x80, 0x85, 0x4d, 0x16, 0xaa, 0xb0, 0xb1, 0xd9, 0xb5, 0xb9, 0xa4, 0x91, 0x95, 0xb9, 0xd1, 0x4d, 0x09, 0x82, 0x2a, 0x64, 0x78, 0x2e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x02, 0xa2, 0x09, 0x19, 0x9e, 0x8b, 0x5d, 0x18, 0x9b, 0x5d, 0x99, 0xdc, 0x94, 0xc0, 0xa8, 0x43, 0x86, 0xe7, 0x32, 0x87, 0x16, 0x46, 0x56, 0x26, 0xd7, 0xf4, 0x46, 0x56, 0xc6, 0x36, 0x25, 0x48, 0xca, 0x90, 0xe1, 0xb9, 0xc8, 0x95, 0xcd, 0xbd, 0xd5, 0xc9, 0x8d, 0x95, 0xcd, 0x4d, 0x09, 0xb4, 0x4a, 0x64, 0x78, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x84, 0x39, 0xc0, 0x83, 0x3a, 0x64, 0x78, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x49, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x53, 0x02, 0x3d, 0xa8, 0x43, 0x86, 0xe7, 0x52, 0xe6, 0x46, 0x27, 0x97, 0x07, 0xf5, 0x96, 0xe6, 0x46, 0x37, 0x37, 0x25, 0x90, 0x05, 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x8c, 0xcc, 0x21, 0x07, 0x7c, 0x70, 0x03, 0x74, 0x60, 0x07, 0x37, 0x90, 0x87, 0x72, 0x98, 0x87, 0x77, 0xa8, 0x07, 0x79, 0x18, 0x87, 0x72, 0x70, 0x83, 0x70, 0xa0, 0x07, 0x7a, 0x90, 0x87, 0x74, 0x10, 0x87, 0x7a, 0xa0, 0x87, 0x72, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x46, 0x30, 0x0d, 0x97, 0xef, 0x3c, 0xfe, 0xe2, 0x00, 0x83, 0xd8, 0x3c, 0xd4, 0xe4, 0x17, 0xb7, 0x6d, 0x07, 0xdb, 0x70, 0xf9, 0xce, 0xe3, 0x0b, 0x01, 0x55, 0x14, 0x44, 0x54, 0x3a, 0xc0, 0x50, 0x12, 0x06, 0x20, 0x60, 0x7e, 0x71, 0xdb, 0x15, 0x80, 0x06, 0x81, 0x1f, 0xbd, 0x8c, 0x07, 0x02, 0x67, 0xd6, 0x1f, 0x89, 0x5a, 0xc6, 0xd3, 0xeb, 0xf2, 0xb2, 0x8c, 0x08, 0xb4, 0xfe, 0x48, 0xf6, 0xf2, 0x98, 0xfe, 0x96, 0x03, 0x9b, 0x24, 0xd8, 0x0c, 0x08, 0x04, 0x02, 0x83, 0x36, 0x40, 0x30, 0x00, 0xd2, 0x58, 0x02, 0x18, 0x0c, 0x97, 0xef, 0x3c, 0xbe, 0x70, 0x10, 0x82, 0xa2, 0x09, 0x02, 0x21, 0x49, 0x1f, 0xb5, 0x2c, 0x98, 0x09, 0x3c, 0x0f, 0x31, 0xf8, 0xc8, 0x6d, 0x9b, 0x00, 0x01, 0x44, 0x86, 0x64, 0x05, 0xd5, 0x70, 0xf9, 0xce, 0xe3, 0x4b, 0x93, 0x13, 0x11, 0x28, 0x35, 0x3d, 0xd4, 0xe4, 0x17, 0xb7, 0x6d, 0x08, 0xd4, 0x70, 0xf9, 0xce, 0xe3, 0x4b, 0x00, 0xf3, 0x2c, 0x04, 0x18, 0x01, 0x83, 0x5f, 0xdc, 0xb6, 0x19, 0x54, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x4d, 0x4e, 0x44, 0xa0, 0xd4, 0xf4, 0x50, 0x93, 0x8f, 0xdc, 0x76, 0x01, 0x64, 0x81, 0xdf, 0x3c, 0xdc, 0x86, 0x03, 0x81, 0xb3, 0xea, 0x34, 0xdc, 0x86, 0xb3, 0xcb, 0xf2, 0x29, 0x3d, 0x4c, 0x2f, 0x03, 0x81, 0x41, 0x53, 0x90, 0x86, 0xcb, 0x77, 0x1e, 0x5f, 0x88, 0x08, 0x60, 0x22, 0x42, 0xa0, 0x19, 0x16, 0x02, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x94, 0xdc, 0x0c, 0x40, 0xd9, 0x95, 0x5f, 0x39, 0x06, 0x10, 0x37, 0x02, 0x40, 0xc3, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0xf0, 0x95, 0xc1, 0x21, 0x8d, 0xc1, 0x18, 0x08, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0xf0, 0x99, 0x01, 0x12, 0x91, 0x01, 0x19, 0x0c, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0xf0, 0x9d, 0x41, 0x52, 0x95, 0x41, 0x19, 0x10, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0xe0, 0xb8, 0x41, 0x19, 0x9c, 0x81, 0x19, 0x54, 0xc9, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x38, 0x6f, 0x60, 0x06, 0x68, 0x70, 0x06, 0x9a, 0x32, 0x62, 0x70, 0x00, 0x20, 0x08, 0x06, 0x57, 0x1b, 0x28, 0x03, 0x1a, 0x8c, 0x26, 0x04, 0xc0, 0x68, 0x82, 0x20, 0x8c, 0x26, 0x0c, 0xc1, 0x88, 0x41, 0x05, 0x80, 0x20, 0x18, 0x68, 0x70, 0xd0, 0x24, 0x88, 0x51, 0x28, 0x0a, 0x1b, 0xb0, 0xc1, 0x13, 0x04, 0x8a, 0x20, 0x28, 0xc3, 0x68, 0x42, 0x00, 0x8c, 0x26, 0x08, 0xc1, 0x68, 0xc2, 0x20, 0x8c, 0x26, 0x10, 0xc3, 0x68, 0x42, 0x41, 0x8c, 0x18, 0x18, 0x00, 0x08, 0x82, 0x41, 0x57, 0x07, 0x52, 0x30, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x90, 0x1e, 0xa4, 0xc1, 0x1c, 0xcc, 0x81, 0x18, 0x18, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x00, 0xe9, 0x41, 0x1a, 0xcc, 0xc1, 0x1c, 0x98, 0x41, 0x31, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x90, 0x1e, 0xa4, 0xc1, 0x1c, 0xcc, 0xc1, 0x18, 0x10, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x00, 0xe9, 0x41, 0x1a, 0xcc, 0xc1, 0x1c, 0x80, 0xc1, 0x70, 0x01, 0x10, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x20, 0xe9, 0x81, 0x1a, 0xd4, 0x01, 0x1d, 0x8c, 0x41, 0x80, 0xe1, 0x40, 0x00, 0x09, 0x00, 0x00, 0x00, 0x06, 0xc3, 0x48, 0x00, 0xf3, 0xfc, 0x12, 0xc0, 0x3c, 0x0b, 0x11, 0xd9, 0x8b, 0x33, 0x11, 0xd7, 0x3f, 0x11, 0xd7, 0x44, 0x45, 0xc4, 0x6f, 0x0f, 0x16, 0xc3, 0x00, 0x91, 0x21, 0xfd, 0x42, 0x40, 0x15, 0x05, 0x11, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; #if 0 SamplerState samp : register(s0); Texture2D tex : register(t0); cbuffer args : register(b0) { float lod; }; void main(float4 pos : SV_POSITION, float2 uv : UV_TEXCOORD, out float4 o0 : SV_TARGET0, out uint o1 : SV_TARGET1) { uint fb; o0 = tex.SampleLevel(samp, uv, lod, int2(0, 0), fb); o1 = CheckAccessFullyMapped(fb) ? 1 : 0; } #endif static const DWORD ps_sample_lod_dxbc[] = { 0x43425844, 0xcde27032, 0xe798d71a, 0x2983b30e, 0xba80d74a, 0x00000001, 0x000001e4, 0x00000004, 0x00000030, 0x00000088, 0x000000d4, 0x000001d4, 0x4e475349, 0x00000050, 0x00000002, 0x00000008, 0x00000038, 0x00000000, 0x00000001, 0x00000003, 0x00000000, 0x0000000f, 0x00000044, 0x00000000, 0x00000000, 0x00000003, 0x00000001, 0x00000303, 0x505f5653, 0x5449534f, 0x004e4f49, 0x545f5655, 0x4f435845, 0x0044524f, 0x4e47534f, 0x00000044, 0x00000002, 0x00000008, 0x00000038, 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x0000000f, 0x00000038, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000e01, 0x545f5653, 0x45475241, 0xabab0054, 0x58454853, 0x000000f8, 0x00000050, 0x0000003e, 0x0100086a, 0x04000059, 0x00208e46, 0x00000000, 0x00000001, 0x0300005a, 0x00106000, 0x00000000, 0x04001858, 0x00107000, 0x00000000, 0x00005555, 0x03001062, 0x00101032, 0x00000001, 0x03000065, 0x001020f2, 0x00000000, 0x03000065, 0x00102012, 0x00000001, 0x02000068, 0x00000002, 0x910000e4, 0x800000c2, 0x00155543, 0x001000f2, 0x00000000, 0x00100012, 0x00000001, 0x00101046, 0x00000001, 0x00107e46, 0x00000000, 0x00106000, 0x00000000, 0x0020800a, 0x00000000, 0x00000000, 0x00000000, 0x05000036, 0x001020f2, 0x00000000, 0x00100e46, 0x00000000, 0x050000ea, 0x00100012, 0x00000000, 0x0010000a, 0x00000001, 0x09000037, 0x00102012, 0x00000001, 0x0010000a, 0x00000000, 0x00004001, 0x00000001, 0x00004001, 0x00000000, 0x0100003e, 0x30494653, 0x00000008, 0x00000100, 0x00000000, }; static const BYTE ps_sample_lod_dxil[] = { 0x44, 0x58, 0x42, 0x43, 0xc8, 0x56, 0xaa, 0x6f, 0x14, 0x0d, 0x7b, 0x3c, 0x13, 0x36, 0xb5, 0x40, 0x42, 0xf7, 0x4c, 0x86, 0x01, 0x00, 0x00, 0x00, 0xca, 0x0a, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0xf2, 0x01, 0x00, 0x00, 0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31, 0x60, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x55, 0x56, 0x5f, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x4f, 0x53, 0x47, 0x31, 0x52, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x00, 0x50, 0x53, 0x56, 0x30, 0xe4, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 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, 0x10, 0x00, 0x00, 0x00, 0x00, 0x55, 0x56, 0x5f, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x03, 0x03, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x42, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x10, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x41, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0xd0, 0x08, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x34, 0x02, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xb8, 0x08, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0x2b, 0x02, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x18, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xc4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x62, 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, 0x11, 0x23, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x31, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, 0x84, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x6d, 0x30, 0x86, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa8, 0x00, 0x49, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x32, 0x22, 0x88, 0x09, 0x20, 0x64, 0x85, 0x04, 0x13, 0x23, 0xa4, 0x84, 0x04, 0x13, 0x23, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8c, 0x8c, 0x0b, 0x84, 0xc4, 0x4c, 0x10, 0x90, 0xc1, 0x1c, 0x01, 0x18, 0xdc, 0x24, 0x4d, 0x11, 0x25, 0x4c, 0x3e, 0x0b, 0x30, 0xcf, 0x42, 0x44, 0xec, 0x04, 0x4c, 0x04, 0x0a, 0x00, 0x0a, 0x66, 0x00, 0x86, 0x11, 0x88, 0x61, 0xa6, 0x36, 0x18, 0x07, 0x76, 0x08, 0x87, 0x79, 0x98, 0x07, 0x37, 0xa0, 0x85, 0x72, 0xc0, 0x07, 0x7a, 0xa8, 0x07, 0x79, 0x28, 0x07, 0x39, 0x20, 0x05, 0x3e, 0xb0, 0x87, 0x72, 0x18, 0x07, 0x7a, 0x78, 0x07, 0x79, 0xe0, 0x03, 0x73, 0x60, 0x87, 0x77, 0x08, 0x07, 0x7a, 0x60, 0x03, 0x30, 0xa0, 0x03, 0x3f, 0x00, 0x03, 0x3f, 0xd0, 0x03, 0x3d, 0x68, 0x87, 0x74, 0x80, 0x87, 0x79, 0xf8, 0x05, 0x7a, 0xc8, 0x07, 0x78, 0x28, 0x07, 0x14, 0x00, 0x33, 0x89, 0xc1, 0x38, 0xb0, 0x43, 0x38, 0xcc, 0xc3, 0x3c, 0xb8, 0x01, 0x2d, 0x94, 0x03, 0x3e, 0xd0, 0x43, 0x3d, 0xc8, 0x43, 0x39, 0xc8, 0x01, 0x29, 0xf0, 0x81, 0x3d, 0x94, 0xc3, 0x38, 0xd0, 0xc3, 0x3b, 0xc8, 0x03, 0x1f, 0x98, 0x03, 0x3b, 0xbc, 0x43, 0x38, 0xd0, 0x03, 0x1b, 0x80, 0x01, 0x1d, 0xf8, 0x01, 0x18, 0xf8, 0x01, 0x12, 0x88, 0x82, 0x8c, 0x23, 0x80, 0xc8, 0x90, 0x50, 0x30, 0x10, 0x32, 0x02, 0x50, 0x02, 0x85, 0x96, 0x39, 0x02, 0xa4, 0x18, 0x03, 0x00, 0x00, 0x0d, 0x40, 0x4e, 0x31, 0x14, 0x00, 0x00, 0x9a, 0x81, 0xa0, 0x62, 0x28, 0x00, 0x00, 0x34, 0x00, 0x49, 0x47, 0x0d, 0x97, 0x3f, 0x61, 0x0f, 0x21, 0xf9, 0xdc, 0x46, 0x15, 0x2b, 0x31, 0xf9, 0xc5, 0x6d, 0x23, 0x62, 0x18, 0x86, 0x81, 0x9a, 0x7b, 0x86, 0xcb, 0x9f, 0xb0, 0x87, 0x90, 0xfc, 0x10, 0x68, 0x86, 0x85, 0x40, 0x41, 0x55, 0x08, 0x0a, 0xb0, 0x00, 0xba, 0x6e, 0x1a, 0x2e, 0x7f, 0xc2, 0x1e, 0x42, 0xf2, 0x57, 0x42, 0x5a, 0x89, 0xc9, 0x2f, 0x6e, 0x1b, 0x15, 0xc3, 0x30, 0x0c, 0x40, 0x61, 0x32, 0xc0, 0xb2, 0x86, 0x61, 0x18, 0x00, 0x00, 0x18, 0x48, 0x9b, 0x23, 0x08, 0xca, 0xc0, 0x01, 0x00, 0x75, 0xc5, 0xb0, 0x80, 0x06, 0x00, 0x38, 0xfa, 0x06, 0x02, 0x12, 0x01, 0x98, 0x23, 0x00, 0x05, 0x00, 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x3a, 0x0f, 0x84, 0x90, 0x21, 0x23, 0x45, 0x44, 0x00, 0xc6, 0x00, 0x80, 0x69, 0x03, 0x00, 0x26, 0x0e, 0x00, 0x60, 0xc8, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x90, 0xc7, 0x01, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x21, 0x0f, 0x04, 0x04, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x1e, 0x09, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, 0x17, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x79, 0x34, 0x20, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, 0x74, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4, 0xf9, 0x80, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x0b, 0x04, 0x14, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x18, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x02, 0x4a, 0x60, 0x04, 0xa0, 0x10, 0x8a, 0xa1, 0x08, 0x4a, 0xa2, 0x50, 0xca, 0xa0, 0x1c, 0x0a, 0xa4, 0x14, 0x68, 0x2c, 0x40, 0x20, 0x6a, 0x4a, 0xa0, 0x14, 0x0a, 0xa4, 0x08, 0x46, 0x00, 0x4a, 0xa2, 0x0c, 0x0a, 0x81, 0x92, 0x19, 0x00, 0x42, 0x66, 0x00, 0xe8, 0x98, 0x01, 0x20, 0x63, 0x06, 0x80, 0x8a, 0x19, 0x00, 0x12, 0xc7, 0x42, 0x8c, 0x02, 0x00, 0x00, 0xe0, 0xfb, 0x48, 0x98, 0x01, 0x00, 0x79, 0x18, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0xc4, 0x83, 0x0c, 0x6f, 0x0c, 0x24, 0xc6, 0x45, 0x66, 0x43, 0x10, 0x4c, 0x10, 0x80, 0x65, 0x82, 0x00, 0x30, 0x1b, 0x84, 0x81, 0x98, 0x20, 0x00, 0xcd, 0x06, 0x61, 0x30, 0x28, 0xc0, 0xcd, 0x4d, 0x10, 0x00, 0x67, 0xc3, 0x80, 0x24, 0xc4, 0x04, 0xe1, 0x08, 0x03, 0x0e, 0x74, 0x65, 0x78, 0x13, 0x04, 0xe0, 0x99, 0x20, 0x00, 0xd0, 0x06, 0x81, 0x70, 0x36, 0x24, 0xc4, 0xc2, 0x10, 0xc4, 0xd0, 0x10, 0xcf, 0x86, 0x00, 0x9a, 0x20, 0x24, 0x1f, 0x89, 0x30, 0xb9, 0xb3, 0xb9, 0x0d, 0x08, 0x21, 0x4d, 0x04, 0x31, 0x18, 0xc0, 0x86, 0x80, 0x9a, 0x20, 0x08, 0x65, 0x40, 0x62, 0x2e, 0xac, 0x0d, 0x6e, 0x03, 0x42, 0x58, 0x17, 0x41, 0x0c, 0x04, 0xb0, 0x21, 0xc0, 0x36, 0x10, 0x11, 0x50, 0x65, 0x13, 0x04, 0x43, 0x0c, 0x26, 0x08, 0x40, 0xc4, 0x00, 0x6d, 0x82, 0x00, 0x48, 0x13, 0x04, 0x60, 0xda, 0x60, 0x24, 0x9d, 0x47, 0x7c, 0x0e, 0x89, 0xb6, 0x34, 0xb8, 0xb9, 0x09, 0x02, 0x40, 0x6d, 0x20, 0x92, 0x30, 0xf0, 0xc4, 0x60, 0xc3, 0xc0, 0x81, 0xc1, 0x18, 0x4c, 0x10, 0x8a, 0x31, 0xa0, 0x81, 0x16, 0xe6, 0x46, 0xc6, 0x56, 0x36, 0x41, 0x00, 0xaa, 0x0d, 0x46, 0x62, 0x06, 0x1e, 0xf1, 0x9d, 0xc1, 0x06, 0xc1, 0x40, 0x83, 0x09, 0x02, 0x02, 0x06, 0x1c, 0xd8, 0xde, 0xc8, 0x36, 0x18, 0xc9, 0x1a, 0x78, 0xc4, 0xe7, 0x6c, 0x10, 0x0c, 0x36, 0xd8, 0x70, 0x10, 0x1b, 0x19, 0x94, 0x41, 0x1a, 0xa8, 0x41, 0x1b, 0x4c, 0x10, 0x98, 0x61, 0x03, 0xb0, 0x61, 0x20, 0xe0, 0x00, 0x0e, 0x36, 0x04, 0x71, 0xb0, 0x61, 0x18, 0xde, 0x40, 0x0e, 0x26, 0x08, 0x62, 0x40, 0x06, 0x1b, 0x02, 0x3a, 0x20, 0xd1, 0x16, 0x96, 0xe6, 0xc6, 0x65, 0xca, 0xea, 0x0b, 0xea, 0x6d, 0x2e, 0x8d, 0x2e, 0xed, 0xcd, 0x6d, 0x82, 0xd0, 0x70, 0x13, 0x84, 0xa6, 0xdb, 0x10, 0x10, 0x13, 0x84, 0xc6, 0x9b, 0x20, 0x34, 0xdb, 0x86, 0x85, 0xb8, 0x03, 0x3c, 0xc8, 0x03, 0x3d, 0xd8, 0x83, 0x61, 0x0f, 0x08, 0x3e, 0x00, 0xb8, 0x54, 0x59, 0x7d, 0x51, 0x15, 0x61, 0x0d, 0x3d, 0x3d, 0x49, 0x11, 0x4d, 0x10, 0x1a, 0x6d, 0xc3, 0x32, 0xf8, 0x01, 0x1e, 0xf0, 0x81, 0x1e, 0xfc, 0xc1, 0xf0, 0x07, 0x03, 0x1f, 0x00, 0x1b, 0x84, 0x3e, 0x00, 0x05, 0x26, 0x53, 0x56, 0x5f, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x13, 0x84, 0x26, 0xdb, 0xb0, 0x10, 0xa2, 0x80, 0x07, 0xa3, 0xa0, 0x07, 0x7c, 0x30, 0xec, 0x01, 0xc1, 0x07, 0xc0, 0x04, 0xa1, 0xc1, 0x36, 0x04, 0xc3, 0x04, 0xa1, 0xb9, 0x36, 0x2c, 0x83, 0x28, 0x94, 0xc2, 0x28, 0x98, 0x02, 0x1f, 0x0c, 0xa7, 0x30, 0xf0, 0x01, 0xb0, 0x41, 0x20, 0x05, 0x54, 0xd8, 0x30, 0x84, 0x42, 0x2a, 0x00, 0x13, 0x84, 0x31, 0xb0, 0x36, 0x08, 0xc4, 0x2a, 0x6c, 0x28, 0xde, 0xc0, 0x0e, 0x54, 0x41, 0x63, 0x85, 0x2a, 0x6c, 0x6c, 0x76, 0x6d, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x53, 0x82, 0xa0, 0x0a, 0x19, 0x9e, 0x8b, 0x5d, 0x99, 0xdc, 0x5c, 0xda, 0x9b, 0xdb, 0x94, 0x80, 0x68, 0x42, 0x86, 0xe7, 0x62, 0x17, 0xc6, 0x66, 0x57, 0x26, 0x37, 0x25, 0x30, 0xea, 0x90, 0xe1, 0xb9, 0xcc, 0xa1, 0x85, 0x91, 0x95, 0xc9, 0x35, 0xbd, 0x91, 0x95, 0xb1, 0x4d, 0x09, 0x92, 0x32, 0x64, 0x78, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x53, 0x82, 0xac, 0x12, 0x19, 0x9e, 0x0b, 0x5d, 0x1e, 0x5c, 0x59, 0x90, 0x9b, 0xdb, 0x1b, 0x5d, 0x18, 0x5d, 0xda, 0x9b, 0xdb, 0xdc, 0x14, 0xa1, 0x0d, 0xe4, 0xa0, 0x0e, 0x19, 0x9e, 0x8b, 0x5d, 0x5a, 0xd9, 0x5d, 0x12, 0xd9, 0x14, 0x5d, 0x18, 0x5d, 0xd9, 0x94, 0x80, 0x0e, 0xea, 0x90, 0xe1, 0xb9, 0x94, 0xb9, 0xd1, 0xc9, 0xe5, 0x41, 0xbd, 0xa5, 0xb9, 0xd1, 0xcd, 0x4d, 0x09, 0x58, 0x01, 0x79, 0x18, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x8c, 0xcc, 0x21, 0x07, 0x7c, 0x70, 0x03, 0x74, 0x60, 0x07, 0x37, 0x90, 0x87, 0x72, 0x98, 0x87, 0x77, 0xa8, 0x07, 0x79, 0x18, 0x87, 0x72, 0x70, 0x83, 0x70, 0xa0, 0x07, 0x7a, 0x90, 0x87, 0x74, 0x10, 0x87, 0x7a, 0xa0, 0x87, 0x72, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x46, 0x30, 0x0d, 0x97, 0xef, 0x3c, 0xfe, 0xe2, 0x00, 0x83, 0xd8, 0x3c, 0xd4, 0xe4, 0x17, 0xb7, 0x6d, 0x07, 0xdb, 0x70, 0xf9, 0xce, 0xe3, 0x0b, 0x01, 0x55, 0x14, 0x44, 0x54, 0x3a, 0xc0, 0x50, 0x12, 0x06, 0x20, 0x60, 0x7e, 0x71, 0xdb, 0x15, 0x80, 0x06, 0x81, 0x1f, 0xbd, 0x8c, 0x07, 0x02, 0x67, 0xd6, 0x1f, 0x89, 0x5a, 0xc6, 0xd3, 0xeb, 0xf2, 0xb2, 0x8c, 0x08, 0xb4, 0xfe, 0x48, 0xf6, 0xf2, 0x98, 0xfe, 0x96, 0x03, 0x9b, 0x24, 0xd8, 0x0c, 0x08, 0x04, 0x02, 0x83, 0x36, 0x40, 0x30, 0x00, 0xd2, 0x58, 0x02, 0x18, 0x0c, 0x97, 0xef, 0x3c, 0xbe, 0x70, 0x10, 0x82, 0xa2, 0x09, 0x02, 0x21, 0x49, 0x1f, 0xb5, 0x2c, 0x98, 0x09, 0x3c, 0x0f, 0x31, 0xf8, 0xc8, 0x6d, 0x1b, 0x42, 0x35, 0x5c, 0xbe, 0xf3, 0xf8, 0x12, 0xc0, 0x3c, 0x0b, 0x51, 0x12, 0x15, 0xb1, 0xf8, 0xc5, 0x6d, 0x9b, 0x00, 0x01, 0x44, 0x86, 0x64, 0x05, 0xd5, 0x70, 0xf9, 0xce, 0xe3, 0x4b, 0x93, 0x13, 0x11, 0x28, 0x35, 0x3d, 0xd4, 0xe4, 0x17, 0xb7, 0x5d, 0x00, 0x59, 0xe0, 0x37, 0x0f, 0xb7, 0xe1, 0x40, 0xe0, 0xac, 0x3a, 0x0d, 0xb7, 0xe1, 0xec, 0xb2, 0x7c, 0x4a, 0x0f, 0xd3, 0xcb, 0x40, 0x60, 0xd0, 0x0c, 0xaa, 0xe1, 0xf2, 0x9d, 0xc7, 0x97, 0x26, 0x27, 0x22, 0x50, 0x6a, 0x7a, 0xa8, 0xc9, 0x47, 0x6e, 0xdb, 0x14, 0xa4, 0xe1, 0xf2, 0x9d, 0xc7, 0x17, 0x22, 0x02, 0x98, 0x88, 0x10, 0x68, 0x86, 0x85, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x94, 0xdc, 0x0c, 0x40, 0xd9, 0x15, 0x5f, 0x39, 0x06, 0x10, 0x37, 0x02, 0x40, 0xc3, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0xf0, 0x8d, 0xc1, 0x21, 0x85, 0x41, 0x18, 0x08, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0xf0, 0x91, 0x01, 0x12, 0x89, 0x81, 0x18, 0x0c, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0xf0, 0x95, 0x41, 0x52, 0x8d, 0xc1, 0x18, 0x10, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0xe0, 0xb0, 0xc1, 0x18, 0x94, 0x01, 0x19, 0x54, 0xc9, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x38, 0x6d, 0x40, 0x06, 0x66, 0x50, 0x06, 0x9a, 0x32, 0x62, 0x70, 0x00, 0x20, 0x08, 0x06, 0xd7, 0x1a, 0x28, 0x83, 0x19, 0x8c, 0x26, 0x04, 0xc0, 0x88, 0xc1, 0x03, 0x80, 0x20, 0x18, 0x68, 0x6c, 0xb0, 0x1c, 0x06, 0x31, 0x20, 0x08, 0x1a, 0xa0, 0x41, 0x13, 0x8c, 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c, 0x26, 0x0c, 0xc2, 0x68, 0x02, 0x31, 0x8c, 0x26, 0x14, 0xc4, 0x88, 0x81, 0x01, 0x80, 0x20, 0x18, 0x74, 0x71, 0x00, 0x05, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x00, 0xd9, 0x81, 0x19, 0xbc, 0xc1, 0x1b, 0x80, 0x81, 0x31, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x90, 0x1d, 0x98, 0xc1, 0x1b, 0xbc, 0x01, 0x19, 0x14, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x00, 0xd9, 0x81, 0x19, 0xbc, 0xc1, 0x1b, 0x84, 0x01, 0x31, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x90, 0x1d, 0x98, 0xc1, 0x1b, 0xbc, 0x81, 0x37, 0x5c, 0x00, 0xc4, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x48, 0x76, 0x70, 0x06, 0x71, 0x00, 0x07, 0x61, 0x10, 0x60, 0x38, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, 0xe6, 0xc2, 0x48, 0x00, 0xf3, 0xfc, 0x12, 0xc0, 0x3c, 0x0b, 0x11, 0x59, 0x8b, 0x33, 0x11, 0xd7, 0x3f, 0x11, 0xd7, 0x44, 0x45, 0xc4, 0x6f, 0x0f, 0xf6, 0xc2, 0x00, 0x91, 0x21, 0xfd, 0x42, 0x40, 0x15, 0x05, 0x11, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; #if 0 SamplerState samp : register(s0); Texture2D tex : register(t0); void main(float4 pos : SV_POSITION, float2 uv : UV_TEXCOORD, out float4 o0 : SV_TARGET0, out uint o1 : SV_TARGET1) { uint fb; o0 = tex.Gather(samp, uv, int2(0, 0), fb); o1 = CheckAccessFullyMapped(fb) ? 1 : 0; } #endif static const DWORD ps_gather_dxbc[] = { 0x43425844, 0xc880fe7b, 0x43ca814e, 0xb2213fd2, 0x0b33a886, 0x00000001, 0x000001c4, 0x00000004, 0x00000030, 0x00000088, 0x000000d4, 0x000001b4, 0x4e475349, 0x00000050, 0x00000002, 0x00000008, 0x00000038, 0x00000000, 0x00000001, 0x00000003, 0x00000000, 0x0000000f, 0x00000044, 0x00000000, 0x00000000, 0x00000003, 0x00000001, 0x00000303, 0x505f5653, 0x5449534f, 0x004e4f49, 0x545f5655, 0x4f435845, 0x0044524f, 0x4e47534f, 0x00000044, 0x00000002, 0x00000008, 0x00000038, 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x0000000f, 0x00000038, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000e01, 0x545f5653, 0x45475241, 0xabab0054, 0x58454853, 0x000000d8, 0x00000050, 0x00000036, 0x0100086a, 0x0300005a, 0x00106000, 0x00000000, 0x04001858, 0x00107000, 0x00000000, 0x00005555, 0x03001062, 0x00101032, 0x00000001, 0x03000065, 0x001020f2, 0x00000000, 0x03000065, 0x00102012, 0x00000001, 0x02000068, 0x00000002, 0x8d0000db, 0x800000c2, 0x00155543, 0x001000f2, 0x00000000, 0x00100012, 0x00000001, 0x00101046, 0x00000001, 0x00107e46, 0x00000000, 0x0010600a, 0x00000000, 0x05000036, 0x001020f2, 0x00000000, 0x00100e46, 0x00000000, 0x050000ea, 0x00100012, 0x00000000, 0x0010000a, 0x00000001, 0x09000037, 0x00102012, 0x00000001, 0x0010000a, 0x00000000, 0x00004001, 0x00000001, 0x00004001, 0x00000000, 0x0100003e, 0x30494653, 0x00000008, 0x00000100, 0x00000000, }; static const BYTE ps_gather_dxil[] = { 0x44, 0x58, 0x42, 0x43, 0xb3, 0xf3, 0x2a, 0x90, 0x1a, 0x83, 0x22, 0xdd, 0x58, 0x26, 0xac, 0x7e, 0xc3, 0x74, 0xdf, 0x91, 0x01, 0x00, 0x00, 0x00, 0x06, 0x0a, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0xe2, 0x01, 0x00, 0x00, 0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31, 0x60, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x55, 0x56, 0x5f, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x4f, 0x53, 0x47, 0x31, 0x52, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x00, 0x50, 0x53, 0x56, 0x30, 0xd4, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x10, 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, 0x10, 0x00, 0x00, 0x00, 0x00, 0x55, 0x56, 0x5f, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x03, 0x03, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x42, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x10, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x41, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x1c, 0x08, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x08, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x52, 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, 0x91, 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x29, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, 0x84, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x6d, 0x30, 0x86, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa8, 0x00, 0x49, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, 0x09, 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, 0x4c, 0x10, 0x7c, 0x73, 0x04, 0x60, 0x70, 0x93, 0x34, 0x45, 0x94, 0x30, 0xf9, 0x2c, 0xc0, 0x3c, 0x0b, 0x11, 0xb1, 0x13, 0x30, 0x11, 0x28, 0x00, 0x14, 0x66, 0x00, 0x86, 0x11, 0x88, 0x61, 0xa6, 0x36, 0x18, 0x07, 0x76, 0x08, 0x87, 0x79, 0x98, 0x07, 0x37, 0xa0, 0x85, 0x72, 0xc0, 0x07, 0x7a, 0xa8, 0x07, 0x79, 0x28, 0x07, 0x39, 0x20, 0x05, 0x3e, 0xb0, 0x87, 0x72, 0x18, 0x07, 0x7a, 0x78, 0x07, 0x79, 0xe0, 0x03, 0x73, 0x60, 0x87, 0x77, 0x08, 0x07, 0x7a, 0x60, 0x03, 0x30, 0xa0, 0x03, 0x3f, 0x00, 0x03, 0x3f, 0xd0, 0x03, 0x3d, 0x68, 0x87, 0x74, 0x80, 0x87, 0x79, 0xf8, 0x05, 0x7a, 0xc8, 0x07, 0x78, 0x28, 0x07, 0x14, 0x80, 0x99, 0xc4, 0x60, 0x1c, 0xd8, 0x21, 0x1c, 0xe6, 0x61, 0x1e, 0xdc, 0x80, 0x16, 0xca, 0x01, 0x1f, 0xe8, 0xa1, 0x1e, 0xe4, 0xa1, 0x1c, 0xe4, 0x80, 0x14, 0xf8, 0xc0, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0xe1, 0x1d, 0xe4, 0x81, 0x0f, 0xcc, 0x81, 0x1d, 0xde, 0x21, 0x1c, 0xe8, 0x81, 0x0d, 0xc0, 0x80, 0x0e, 0xfc, 0x00, 0x0c, 0xfc, 0x00, 0x09, 0xa4, 0x90, 0x19, 0x01, 0x28, 0x01, 0xa2, 0x34, 0x47, 0x80, 0x14, 0x63, 0x00, 0x00, 0x16, 0x20, 0x56, 0x0c, 0x04, 0x00, 0x58, 0x83, 0x5c, 0x31, 0x10, 0x00, 0x60, 0x01, 0x82, 0x37, 0x0d, 0x97, 0x3f, 0x61, 0x0f, 0x21, 0xf9, 0x2b, 0x21, 0xad, 0xc4, 0xe4, 0x17, 0xb7, 0x8d, 0x8a, 0x31, 0xc6, 0x00, 0xb4, 0xee, 0x19, 0x2e, 0x7f, 0xc2, 0x1e, 0x42, 0xf2, 0x43, 0xa0, 0x19, 0x16, 0x02, 0x05, 0xb3, 0x2c, 0x12, 0x50, 0x3a, 0xc6, 0x18, 0x00, 0x00, 0xaa, 0x73, 0x04, 0x41, 0x19, 0x2e, 0x00, 0x84, 0x8b, 0x41, 0xc1, 0x02, 0xe0, 0x92, 0x1e, 0x08, 0x48, 0x04, 0x30, 0x47, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x3a, 0x0f, 0x64, 0x90, 0x21, 0x23, 0x45, 0x44, 0x00, 0x66, 0x00, 0xc0, 0xf4, 0x00, 0x80, 0x87, 0x3c, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x79, 0x18, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, 0x38, 0x40, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4, 0x81, 0x80, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xc8, 0x53, 0x01, 0x01, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x90, 0x07, 0x03, 0x02, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x21, 0x8f, 0x06, 0x04, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x20, 0x00, 0x13, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x18, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x02, 0x25, 0x30, 0x02, 0x50, 0x08, 0xc5, 0x50, 0x04, 0x25, 0x51, 0x28, 0x65, 0x50, 0x0e, 0x05, 0x52, 0x0a, 0xe4, 0x0b, 0x10, 0x88, 0x56, 0x09, 0x94, 0x42, 0x81, 0x94, 0x44, 0x19, 0x14, 0xc2, 0x08, 0x40, 0x11, 0xd0, 0x99, 0x01, 0x20, 0x33, 0x03, 0x40, 0x65, 0x06, 0x80, 0xfa, 0x58, 0x88, 0x51, 0x00, 0x00, 0x00, 0x7c, 0x1f, 0x89, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0xc4, 0x83, 0x0c, 0x6f, 0x0c, 0x24, 0xc6, 0x45, 0x66, 0x43, 0x10, 0x4c, 0x10, 0x80, 0x64, 0x82, 0x00, 0x28, 0x1b, 0x84, 0x81, 0x98, 0x20, 0x00, 0xcb, 0x06, 0x61, 0x30, 0x28, 0xc0, 0xcd, 0x4d, 0x10, 0x00, 0x66, 0xc3, 0x80, 0x24, 0xc4, 0x04, 0xe1, 0xe8, 0x38, 0xd0, 0x95, 0xe1, 0x4d, 0x10, 0x80, 0x66, 0x82, 0x00, 0x38, 0x1b, 0x04, 0xc2, 0xd9, 0x90, 0x10, 0x0b, 0x43, 0x10, 0x43, 0x43, 0x3c, 0x1b, 0x02, 0x68, 0x82, 0x20, 0x84, 0x01, 0x89, 0xb9, 0xb0, 0x36, 0xb8, 0x0d, 0x08, 0x21, 0x4d, 0x04, 0x31, 0x10, 0xc0, 0x86, 0x80, 0xda, 0x40, 0x44, 0x00, 0x50, 0x4d, 0x10, 0x0c, 0x6f, 0x82, 0x00, 0x3c, 0x0c, 0xd0, 0x26, 0x08, 0x00, 0x34, 0x41, 0x00, 0xa2, 0x0d, 0x46, 0x92, 0x69, 0xc4, 0xe6, 0x90, 0x68, 0x4b, 0x83, 0x9b, 0x9b, 0x20, 0x00, 0xd2, 0x06, 0x22, 0xe9, 0x34, 0x6f, 0xc3, 0x80, 0x71, 0xdf, 0x04, 0xa1, 0xf8, 0x68, 0xa0, 0x85, 0xb9, 0x91, 0xb1, 0x95, 0x4d, 0x10, 0x80, 0x69, 0x83, 0x91, 0x88, 0x81, 0x46, 0x6c, 0x63, 0xb0, 0x41, 0x30, 0xc8, 0x60, 0x43, 0x41, 0x5c, 0x60, 0x10, 0x06, 0x65, 0x30, 0x41, 0x50, 0x84, 0x0d, 0xc0, 0x86, 0x81, 0x40, 0x03, 0x34, 0xd8, 0x10, 0xa4, 0xc1, 0x86, 0x61, 0x38, 0x03, 0x35, 0x98, 0x20, 0x74, 0x60, 0xb0, 0x21, 0x60, 0x03, 0x12, 0x6d, 0x61, 0x69, 0x6e, 0x5c, 0xa6, 0xac, 0xbe, 0xa0, 0xde, 0xe6, 0xd2, 0xe8, 0xd2, 0xde, 0xdc, 0x26, 0x08, 0x0b, 0x36, 0x41, 0x58, 0xb2, 0x0d, 0x01, 0x31, 0x41, 0x58, 0xb4, 0x09, 0xc2, 0xb2, 0x6d, 0x58, 0x88, 0x37, 0x80, 0x83, 0x38, 0x90, 0x83, 0x39, 0x18, 0xe6, 0x80, 0xa0, 0x03, 0x80, 0x4b, 0x95, 0xd5, 0x17, 0x55, 0x11, 0xd6, 0xd0, 0xd3, 0x93, 0x14, 0xd1, 0x04, 0x61, 0xe1, 0x36, 0x2c, 0x83, 0x1d, 0xc0, 0x01, 0x1d, 0xc8, 0xc1, 0x1d, 0x0c, 0x77, 0x30, 0xd0, 0x01, 0xb0, 0x41, 0xa8, 0x03, 0x3c, 0x60, 0x32, 0x65, 0xf5, 0x45, 0x15, 0x26, 0x77, 0x56, 0x46, 0x37, 0x41, 0x58, 0xae, 0x0d, 0x0b, 0xa1, 0x07, 0x70, 0xb0, 0x07, 0x72, 0x40, 0x07, 0xc3, 0x1c, 0x10, 0x74, 0x00, 0x4c, 0x10, 0x16, 0x6b, 0x43, 0x30, 0x4c, 0x10, 0x96, 0x6a, 0xc3, 0x32, 0xe8, 0x41, 0x1f, 0xec, 0x81, 0x1f, 0xd0, 0xc1, 0xf0, 0x07, 0x03, 0x1d, 0x00, 0x1b, 0x04, 0x3e, 0x00, 0x85, 0x0d, 0x43, 0x1e, 0x84, 0x02, 0x30, 0x41, 0xf0, 0xa8, 0x0d, 0x02, 0x31, 0x0a, 0x1b, 0x8a, 0x33, 0x70, 0x03, 0x51, 0xb0, 0x48, 0xa1, 0x0a, 0x1b, 0x9b, 0x5d, 0x9b, 0x4b, 0x1a, 0x59, 0x99, 0x1b, 0xdd, 0x94, 0x20, 0xa8, 0x42, 0x86, 0xe7, 0x62, 0x57, 0x26, 0x37, 0x97, 0xf6, 0xe6, 0x36, 0x25, 0x20, 0x9a, 0x90, 0xe1, 0xb9, 0xd8, 0x85, 0xb1, 0xd9, 0x95, 0xc9, 0x4d, 0x09, 0x8c, 0x3a, 0x64, 0x78, 0x2e, 0x73, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x53, 0x82, 0xa4, 0x0c, 0x19, 0x9e, 0x8b, 0x5c, 0xd9, 0xdc, 0x5b, 0x9d, 0xdc, 0x58, 0xd9, 0xdc, 0x94, 0xa0, 0xaa, 0x44, 0x86, 0xe7, 0x42, 0x97, 0x07, 0x57, 0x16, 0xe4, 0xe6, 0xf6, 0x46, 0x17, 0x46, 0x97, 0xf6, 0xe6, 0x36, 0x37, 0x45, 0x28, 0x03, 0x35, 0xa8, 0x43, 0x86, 0xe7, 0x62, 0x97, 0x56, 0x76, 0x97, 0x44, 0x36, 0x45, 0x17, 0x46, 0x57, 0x36, 0x25, 0x60, 0x83, 0x3a, 0x64, 0x78, 0x2e, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x53, 0x02, 0x52, 0x00, 0x79, 0x18, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x8c, 0xcc, 0x21, 0x07, 0x7c, 0x70, 0x03, 0x74, 0x60, 0x07, 0x37, 0x90, 0x87, 0x72, 0x98, 0x87, 0x77, 0xa8, 0x07, 0x79, 0x18, 0x87, 0x72, 0x70, 0x83, 0x70, 0xa0, 0x07, 0x7a, 0x90, 0x87, 0x74, 0x10, 0x87, 0x7a, 0xa0, 0x87, 0x72, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x36, 0x30, 0x0d, 0x97, 0xef, 0x3c, 0xfe, 0xe2, 0x00, 0x83, 0xd8, 0x3c, 0xd4, 0xe4, 0x17, 0xb7, 0x5d, 0x01, 0x68, 0x10, 0xf8, 0xd1, 0xcb, 0x78, 0x20, 0x70, 0x66, 0xfd, 0x91, 0xa8, 0x65, 0x3c, 0xbd, 0x2e, 0x2f, 0xcb, 0x88, 0x40, 0xeb, 0x8f, 0x64, 0x2f, 0x8f, 0xe9, 0x6f, 0x39, 0xb0, 0x49, 0x82, 0xcd, 0x80, 0x40, 0x20, 0x30, 0x68, 0x02, 0x04, 0x03, 0x20, 0x8d, 0x1d, 0x80, 0xc1, 0x70, 0xf9, 0xce, 0xe3, 0x0b, 0x07, 0x21, 0x28, 0x9a, 0x20, 0x10, 0x92, 0xf4, 0x51, 0xcb, 0x82, 0x99, 0xc0, 0xf3, 0x10, 0x83, 0x8f, 0xdc, 0xb6, 0x11, 0x54, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x4d, 0x4e, 0x44, 0xa0, 0xd4, 0xf4, 0x50, 0x93, 0x5f, 0xdc, 0x76, 0x01, 0x64, 0x81, 0xdf, 0x3c, 0xdc, 0x86, 0x03, 0x81, 0xb3, 0xea, 0x34, 0xdc, 0x86, 0xb3, 0xcb, 0xf2, 0x29, 0x3d, 0x4c, 0x2f, 0x03, 0x81, 0x41, 0x2b, 0xa8, 0x86, 0xcb, 0x77, 0x1e, 0x5f, 0x9a, 0x9c, 0x88, 0x40, 0xa9, 0xe9, 0xa1, 0x26, 0x1f, 0xb9, 0x6d, 0x43, 0x90, 0x86, 0xcb, 0x77, 0x1e, 0x5f, 0x88, 0x08, 0x60, 0x22, 0x42, 0xa0, 0x19, 0x16, 0xc2, 0x0c, 0xae, 0xe1, 0xf2, 0x9d, 0xc7, 0x9f, 0x88, 0x6b, 0xa2, 0x22, 0x02, 0x04, 0xa6, 0x83, 0x88, 0xfc, 0xe2, 0xb6, 0x01, 0x00, 0x61, 0x20, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x4a, 0x6e, 0x06, 0xa0, 0x24, 0x03, 0xca, 0x31, 0x80, 0xee, 0x08, 0x00, 0x8d, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0xa0, 0x81, 0x81, 0xd1, 0x78, 0x9e, 0x30, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x5a, 0x18, 0x1c, 0xd0, 0xf7, 0x0d, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0xc0, 0x9c, 0xc1, 0x17, 0x06, 0x60, 0xf0, 0x1c, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0xc0, 0xa0, 0x01, 0x18, 0x88, 0x41, 0x18, 0x58, 0xc8, 0x88, 0x81, 0x03, 0x80, 0x20, 0x18, 0x54, 0x66, 0x80, 0x10, 0x83, 0x10, 0x14, 0x85, 0x18, 0x88, 0x81, 0x18, 0x8c, 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c, 0x26, 0x0c, 0xc2, 0x68, 0x02, 0x31, 0x8c, 0x26, 0x14, 0xc4, 0x88, 0x81, 0x01, 0x80, 0x20, 0x18, 0x60, 0x6b, 0xd0, 0x04, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0xe0, 0xbc, 0x01, 0x18, 0xa4, 0x41, 0x1a, 0x60, 0xc6, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x38, 0x6f, 0x00, 0x06, 0x69, 0x90, 0x06, 0x5e, 0x31, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0xce, 0x1b, 0x80, 0x41, 0x1a, 0xa4, 0xc1, 0x45, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x81, 0xf3, 0x06, 0x60, 0x90, 0x06, 0x69, 0xa0, 0x0d, 0x17, 0x80, 0x18, 0x31, 0x48, 0x00, 0x10, 0x04, 0x03, 0xe8, 0x0d, 0xc2, 0x60, 0x0d, 0xd4, 0x20, 0x0b, 0x30, 0x1c, 0x08, 0x00, 0x07, 0x00, 0x00, 0x00, 0x96, 0xc2, 0x48, 0x00, 0xf3, 0xfc, 0x12, 0xc0, 0x3c, 0x0b, 0x11, 0x19, 0x8a, 0x33, 0x11, 0xd7, 0x3f, 0x11, 0xd7, 0x44, 0x45, 0xc4, 0x6f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; #if 0 SamplerState samp : register(s0); Texture2D tex : register(t0); cbuffer args : register(b0) { float2 offset; }; void main(float4 pos : SV_POSITION, float2 uv : UV_TEXCOORD, out float4 o0 : SV_TARGET0, out uint o1 : SV_TARGET1) { uint fb; int2 ofs = int2(offset); o0 = tex.GatherRed(samp, uv, ofs, ofs, ofs, ofs, fb); o1 = CheckAccessFullyMapped(fb) ? 1 : 0; } #endif static const DWORD ps_gather_po_dxbc[] = { 0x43425844, 0x866266cf, 0xf5812e71, 0xe43abe96, 0x391fee80, 0x00000001, 0x000001f4, 0x00000004, 0x00000030, 0x00000088, 0x000000d4, 0x000001e4, 0x4e475349, 0x00000050, 0x00000002, 0x00000008, 0x00000038, 0x00000000, 0x00000001, 0x00000003, 0x00000000, 0x0000000f, 0x00000044, 0x00000000, 0x00000000, 0x00000003, 0x00000001, 0x00000303, 0x505f5653, 0x5449534f, 0x004e4f49, 0x545f5655, 0x4f435845, 0x0044524f, 0x4e47534f, 0x00000044, 0x00000002, 0x00000008, 0x00000038, 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x0000000f, 0x00000038, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000e01, 0x545f5653, 0x45475241, 0xabab0054, 0x58454853, 0x00000108, 0x00000050, 0x00000042, 0x0100086a, 0x04000059, 0x00208e46, 0x00000000, 0x00000001, 0x0300005a, 0x00106000, 0x00000000, 0x04001858, 0x00107000, 0x00000000, 0x00005555, 0x03001062, 0x00101032, 0x00000001, 0x03000065, 0x001020f2, 0x00000000, 0x03000065, 0x00102012, 0x00000001, 0x02000068, 0x00000002, 0x0600001b, 0x00100032, 0x00000000, 0x00208046, 0x00000000, 0x00000000, 0x8f0000dd, 0x800000c2, 0x00155543, 0x001000f2, 0x00000000, 0x00100012, 0x00000001, 0x00101046, 0x00000001, 0x00100046, 0x00000000, 0x00107e46, 0x00000000, 0x0010600a, 0x00000000, 0x05000036, 0x001020f2, 0x00000000, 0x00100e46, 0x00000000, 0x050000ea, 0x00100012, 0x00000000, 0x0010000a, 0x00000001, 0x09000037, 0x00102012, 0x00000001, 0x0010000a, 0x00000000, 0x00004001, 0x00000001, 0x00004001, 0x00000000, 0x0100003e, 0x30494653, 0x00000008, 0x00000100, 0x00000000, }; static const BYTE ps_gather_po_dxil[] = { 0x44, 0x58, 0x42, 0x43, 0xfc, 0xc6, 0xf7, 0x22, 0x4d, 0x23, 0xc3, 0x7f, 0x71, 0x61, 0x46, 0x25, 0xb5, 0xc8, 0x98, 0x47, 0x01, 0x00, 0x00, 0x00, 0xee, 0x0a, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0xf2, 0x01, 0x00, 0x00, 0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31, 0x60, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x55, 0x56, 0x5f, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x4f, 0x53, 0x47, 0x31, 0x52, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x00, 0x50, 0x53, 0x56, 0x30, 0xe4, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 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, 0x10, 0x00, 0x00, 0x00, 0x00, 0x55, 0x56, 0x5f, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x03, 0x03, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x42, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x10, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x41, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0xf4, 0x08, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x3d, 0x02, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xdc, 0x08, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0x34, 0x02, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x18, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xc4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x62, 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, 0x11, 0x23, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x31, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, 0x84, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x6d, 0x30, 0x86, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa8, 0x00, 0x49, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x32, 0x22, 0x88, 0x09, 0x20, 0x64, 0x85, 0x04, 0x13, 0x23, 0xa4, 0x84, 0x04, 0x13, 0x23, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8c, 0x8c, 0x0b, 0x84, 0xc4, 0x4c, 0x10, 0x94, 0xc1, 0x1c, 0x01, 0x18, 0xdc, 0x24, 0x4d, 0x11, 0x25, 0x4c, 0x3e, 0x0b, 0x30, 0xcf, 0x42, 0x44, 0xec, 0x04, 0x4c, 0x04, 0x0a, 0x00, 0x0a, 0x66, 0x00, 0x86, 0x11, 0x88, 0x61, 0xa6, 0x36, 0x18, 0x07, 0x76, 0x08, 0x87, 0x79, 0x98, 0x07, 0x37, 0xa0, 0x85, 0x72, 0xc0, 0x07, 0x7a, 0xa8, 0x07, 0x79, 0x28, 0x07, 0x39, 0x20, 0x05, 0x3e, 0xb0, 0x87, 0x72, 0x18, 0x07, 0x7a, 0x78, 0x07, 0x79, 0xe0, 0x03, 0x73, 0x60, 0x87, 0x77, 0x08, 0x07, 0x7a, 0x60, 0x03, 0x30, 0xa0, 0x03, 0x3f, 0x00, 0x03, 0x3f, 0xd0, 0x03, 0x3d, 0x68, 0x87, 0x74, 0x80, 0x87, 0x79, 0xf8, 0x05, 0x7a, 0xc8, 0x07, 0x78, 0x28, 0x07, 0x14, 0x00, 0x33, 0x89, 0xc1, 0x38, 0xb0, 0x43, 0x38, 0xcc, 0xc3, 0x3c, 0xb8, 0x01, 0x2d, 0x94, 0x03, 0x3e, 0xd0, 0x43, 0x3d, 0xc8, 0x43, 0x39, 0xc8, 0x01, 0x29, 0xf0, 0x81, 0x3d, 0x94, 0xc3, 0x38, 0xd0, 0xc3, 0x3b, 0xc8, 0x03, 0x1f, 0x98, 0x03, 0x3b, 0xbc, 0x43, 0x38, 0xd0, 0x03, 0x1b, 0x80, 0x01, 0x1d, 0xf8, 0x01, 0x18, 0xf8, 0x01, 0x12, 0x88, 0x82, 0x8c, 0x61, 0x04, 0x61, 0x38, 0x02, 0x88, 0x0c, 0x09, 0x05, 0x08, 0x25, 0x23, 0x00, 0x25, 0x58, 0x88, 0x99, 0x23, 0x40, 0x8a, 0x31, 0x00, 0x00, 0xe0, 0x00, 0xf4, 0x14, 0x63, 0x01, 0x00, 0xc0, 0x19, 0x28, 0x2a, 0xc6, 0x02, 0x00, 0x80, 0x03, 0xd0, 0x74, 0xd4, 0x70, 0xf9, 0x13, 0xf6, 0x10, 0x92, 0xcf, 0x6d, 0x54, 0xb1, 0x12, 0x93, 0x5f, 0xdc, 0x36, 0x22, 0x86, 0x61, 0x18, 0xc8, 0xb9, 0x67, 0xb8, 0xfc, 0x09, 0x7b, 0x08, 0xc9, 0x0f, 0x81, 0x66, 0x58, 0x08, 0x14, 0x58, 0x85, 0xa8, 0x80, 0x0b, 0x20, 0xec, 0xa6, 0xe1, 0xf2, 0x27, 0xec, 0x21, 0x24, 0x7f, 0x25, 0xa4, 0x95, 0x98, 0xfc, 0xe2, 0xb6, 0x51, 0x31, 0x0c, 0xc3, 0x00, 0x94, 0x45, 0x03, 0xae, 0x6b, 0x18, 0x86, 0x01, 0x00, 0x00, 0xda, 0xe6, 0x08, 0x82, 0x32, 0x74, 0x00, 0x40, 0x5e, 0x31, 0x2e, 0xc0, 0x01, 0x80, 0x8e, 0xc0, 0x81, 0x80, 0x44, 0x00, 0xe6, 0x08, 0x40, 0x01, 0x00, 0x00, 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x3a, 0x0f, 0x84, 0x90, 0x21, 0x23, 0x45, 0x44, 0x00, 0xc6, 0x00, 0x80, 0x69, 0x03, 0x00, 0x66, 0x0e, 0x00, 0x60, 0xc8, 0xc3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x90, 0xe7, 0x01, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x21, 0x4f, 0x04, 0x04, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x9e, 0x09, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, 0x18, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x79, 0x36, 0x20, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, 0x78, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4, 0x01, 0x03, 0x20, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x02, 0x01, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x18, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x02, 0x4a, 0x60, 0x04, 0xa0, 0x10, 0x8a, 0xa1, 0x08, 0x4a, 0xa2, 0x20, 0x0a, 0xa5, 0x0c, 0xca, 0xa1, 0x40, 0x4a, 0x81, 0xc8, 0x02, 0x04, 0x22, 0xa7, 0x04, 0x4a, 0xa1, 0x40, 0x8a, 0x60, 0x04, 0xa0, 0x24, 0xca, 0xa0, 0x10, 0x48, 0x99, 0x01, 0xa0, 0x64, 0x06, 0x80, 0x8e, 0x19, 0x00, 0x32, 0x66, 0x00, 0xa8, 0x98, 0x01, 0xa0, 0x71, 0x2c, 0xc4, 0x28, 0x00, 0x00, 0x00, 0xbe, 0x8f, 0x84, 0x19, 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0xc4, 0x83, 0x0c, 0x6f, 0x0c, 0x24, 0xc6, 0x45, 0x66, 0x43, 0x10, 0x4c, 0x10, 0x80, 0x65, 0x82, 0x00, 0x30, 0x1b, 0x84, 0x81, 0x98, 0x20, 0x00, 0xcd, 0x06, 0x61, 0x30, 0x28, 0xc0, 0xcd, 0x4d, 0x10, 0x00, 0x67, 0xc3, 0x80, 0x24, 0xc4, 0x04, 0xe1, 0x10, 0x03, 0x0e, 0x74, 0x65, 0x78, 0x13, 0x04, 0xe0, 0x99, 0x20, 0x00, 0xd0, 0x06, 0x81, 0x70, 0x36, 0x24, 0xc4, 0xc2, 0x10, 0xc4, 0xd0, 0x10, 0xcf, 0x86, 0x00, 0x9a, 0x20, 0x28, 0x60, 0x40, 0x22, 0x4c, 0xee, 0x6c, 0x6e, 0x82, 0x00, 0x44, 0x1b, 0x10, 0x42, 0x9a, 0x08, 0x62, 0xa0, 0x80, 0x0d, 0x41, 0x35, 0x41, 0x10, 0xcc, 0x80, 0xc4, 0x5c, 0x58, 0x1b, 0xdc, 0x06, 0x84, 0xb8, 0x30, 0x82, 0x18, 0x08, 0x60, 0x43, 0x90, 0x6d, 0x20, 0x22, 0xc0, 0xd2, 0x26, 0x08, 0xc6, 0x18, 0x4c, 0x10, 0x00, 0x89, 0x01, 0xda, 0x04, 0x01, 0x98, 0x26, 0x08, 0x00, 0xb5, 0xc1, 0x48, 0xbc, 0x8f, 0x00, 0x03, 0x87, 0x44, 0x5b, 0x1a, 0xdc, 0xdc, 0x04, 0x01, 0xa8, 0x36, 0x10, 0x89, 0x18, 0x7c, 0x63, 0xb0, 0x61, 0xe8, 0xc2, 0x80, 0x0c, 0x26, 0x08, 0x05, 0x19, 0xd0, 0x40, 0x0b, 0x73, 0x23, 0x63, 0x2b, 0x9b, 0x20, 0x00, 0xd6, 0x06, 0x23, 0x39, 0x83, 0x8f, 0x00, 0x03, 0x34, 0xd8, 0x20, 0x18, 0x69, 0x30, 0x41, 0x48, 0xc2, 0x80, 0xc6, 0x9b, 0x99, 0xd9, 0x5c, 0x19, 0xdd, 0x06, 0x23, 0x61, 0x83, 0x8f, 0x00, 0x03, 0x67, 0x83, 0x40, 0xb5, 0xc1, 0x86, 0x83, 0xe0, 0xca, 0xc0, 0x0c, 0xd4, 0x60, 0x0d, 0xdc, 0x60, 0x82, 0xd0, 0x0c, 0x1b, 0x80, 0x0d, 0x03, 0x11, 0x07, 0x71, 0xb0, 0x21, 0x90, 0x83, 0x0d, 0xc3, 0x00, 0x07, 0x73, 0x30, 0x41, 0x18, 0x83, 0x32, 0xd8, 0x10, 0xd4, 0x01, 0x89, 0xb6, 0xb0, 0x34, 0x37, 0x2e, 0x53, 0x56, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x13, 0x04, 0xa7, 0x9b, 0x20, 0x38, 0xde, 0x86, 0x80, 0x98, 0x20, 0x38, 0xdf, 0x04, 0xc1, 0xe1, 0x36, 0x2c, 0x04, 0x1e, 0xe4, 0x81, 0x1e, 0xec, 0x01, 0x1f, 0x0c, 0x7c, 0x40, 0xf4, 0x01, 0xc0, 0xa5, 0xca, 0xea, 0x8b, 0xaa, 0x08, 0x6b, 0xe8, 0xe9, 0x49, 0x8a, 0x68, 0x82, 0xe0, 0x6c, 0x1b, 0x96, 0xe1, 0x0f, 0xf2, 0xa0, 0x0f, 0xf6, 0x00, 0x14, 0x06, 0x50, 0x18, 0xfa, 0x00, 0xd8, 0x20, 0xf8, 0x41, 0x28, 0x30, 0x99, 0xb2, 0xfa, 0xa2, 0x0a, 0x93, 0x3b, 0x2b, 0xa3, 0x9b, 0x20, 0x38, 0xda, 0x86, 0x85, 0x18, 0x85, 0x3c, 0x20, 0x85, 0x3d, 0xe8, 0x83, 0x81, 0x0f, 0x88, 0x3e, 0x00, 0x26, 0x08, 0x4e, 0xb6, 0x21, 0x18, 0x26, 0x08, 0x0e, 0xb6, 0x61, 0x19, 0x46, 0xc1, 0x14, 0x48, 0xe1, 0x14, 0xfa, 0x60, 0x40, 0x85, 0xa1, 0x0f, 0x80, 0x0d, 0x42, 0x29, 0xa4, 0xc2, 0x86, 0x41, 0x14, 0x54, 0x01, 0x98, 0x20, 0x90, 0xc1, 0xb5, 0x41, 0x20, 0x58, 0x61, 0x43, 0x01, 0x07, 0x77, 0xb0, 0x0a, 0x5b, 0x2b, 0x54, 0x61, 0x63, 0xb3, 0x6b, 0x73, 0x49, 0x23, 0x2b, 0x73, 0xa3, 0x9b, 0x12, 0x04, 0x55, 0xc8, 0xf0, 0x5c, 0xec, 0xca, 0xe4, 0xe6, 0xd2, 0xde, 0xdc, 0xa6, 0x04, 0x44, 0x13, 0x32, 0x3c, 0x17, 0xbb, 0x30, 0x36, 0xbb, 0x32, 0xb9, 0x29, 0x81, 0x51, 0x87, 0x0c, 0xcf, 0x65, 0x0e, 0x2d, 0x8c, 0xac, 0x4c, 0xae, 0xe9, 0x8d, 0xac, 0x8c, 0x6d, 0x4a, 0x90, 0x94, 0x21, 0xc3, 0x73, 0x91, 0x2b, 0x9b, 0x7b, 0xab, 0x93, 0x1b, 0x2b, 0x9b, 0x9b, 0x12, 0x68, 0x95, 0xc8, 0xf0, 0x5c, 0xe8, 0xf2, 0xe0, 0xca, 0x82, 0xdc, 0xdc, 0xde, 0xe8, 0xc2, 0xe8, 0xd2, 0xde, 0xdc, 0xe6, 0xa6, 0x08, 0x6e, 0x30, 0x07, 0x75, 0xc8, 0xf0, 0x5c, 0xec, 0xd2, 0xca, 0xee, 0x92, 0xc8, 0xa6, 0xe8, 0xc2, 0xe8, 0xca, 0xa6, 0x04, 0x75, 0x50, 0x87, 0x0c, 0xcf, 0xa5, 0xcc, 0x8d, 0x4e, 0x2e, 0x0f, 0xea, 0x2d, 0xcd, 0x8d, 0x6e, 0x6e, 0x4a, 0xd0, 0x0a, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x8c, 0xcc, 0x21, 0x07, 0x7c, 0x70, 0x03, 0x74, 0x60, 0x07, 0x37, 0x90, 0x87, 0x72, 0x98, 0x87, 0x77, 0xa8, 0x07, 0x79, 0x18, 0x87, 0x72, 0x70, 0x83, 0x70, 0xa0, 0x07, 0x7a, 0x90, 0x87, 0x74, 0x10, 0x87, 0x7a, 0xa0, 0x87, 0x72, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x46, 0x30, 0x0d, 0x97, 0xef, 0x3c, 0xfe, 0xe2, 0x00, 0x83, 0xd8, 0x3c, 0xd4, 0xe4, 0x17, 0xb7, 0x6d, 0x07, 0xdb, 0x70, 0xf9, 0xce, 0xe3, 0x0b, 0x01, 0x55, 0x14, 0x44, 0x54, 0x3a, 0xc0, 0x50, 0x12, 0x06, 0x20, 0x60, 0x7e, 0x71, 0xdb, 0x15, 0x80, 0x06, 0x81, 0x1f, 0xbd, 0x8c, 0x07, 0x02, 0x67, 0xd6, 0x1f, 0x89, 0x5a, 0xc6, 0xd3, 0xeb, 0xf2, 0xb2, 0x8c, 0x08, 0xb4, 0xfe, 0x48, 0xf6, 0xf2, 0x98, 0xfe, 0x96, 0x03, 0x9b, 0x24, 0xd8, 0x0c, 0x08, 0x04, 0x02, 0x83, 0x36, 0x40, 0x30, 0x00, 0xd2, 0x58, 0x02, 0x18, 0x0c, 0x97, 0xef, 0x3c, 0xbe, 0x70, 0x10, 0x82, 0xa2, 0x09, 0x02, 0x21, 0x49, 0x1f, 0xb5, 0x2c, 0x98, 0x09, 0x3c, 0x0f, 0x31, 0xf8, 0xc8, 0x6d, 0x9b, 0x00, 0x01, 0x44, 0x86, 0x54, 0x00, 0x59, 0xe0, 0x37, 0x0f, 0xb7, 0xe1, 0x40, 0xe0, 0xac, 0x3a, 0x0d, 0xb7, 0xe1, 0xec, 0xb2, 0x7c, 0x4a, 0x0f, 0xd3, 0xcb, 0x40, 0x60, 0xd0, 0x0a, 0xaa, 0xe1, 0xf2, 0x9d, 0xc7, 0x97, 0x26, 0x27, 0x22, 0x50, 0x6a, 0x7a, 0xa8, 0xc9, 0x2f, 0x6e, 0xdb, 0x0c, 0xaa, 0xe1, 0xf2, 0x9d, 0xc7, 0x97, 0x26, 0x27, 0x22, 0x50, 0x6a, 0x7a, 0xa8, 0xc9, 0x47, 0x6e, 0xdb, 0x14, 0xa4, 0xe1, 0xf2, 0x9d, 0xc7, 0x17, 0x22, 0x02, 0x98, 0x88, 0x10, 0x68, 0x86, 0x85, 0x30, 0x84, 0x6b, 0xb8, 0x7c, 0xe7, 0xf1, 0x27, 0xe2, 0x9a, 0xa8, 0x88, 0x00, 0x81, 0xe9, 0x20, 0x22, 0xbf, 0xb8, 0x6d, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x94, 0xdc, 0x0c, 0x40, 0xd9, 0x95, 0x64, 0x40, 0x39, 0x06, 0x50, 0x37, 0x02, 0x40, 0xc3, 0x0c, 0x00, 0x00, 0x00, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x00, 0x06, 0x64, 0x70, 0x48, 0x62, 0x20, 0x06, 0xc2, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x80, 0x41, 0x19, 0x20, 0xd1, 0x18, 0x8c, 0xc1, 0x30, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x60, 0x60, 0x06, 0x49, 0x45, 0x06, 0x64, 0x40, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0xc1, 0xd3, 0x06, 0x64, 0x60, 0x06, 0x65, 0x50, 0x25, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0xf0, 0xb8, 0x41, 0x19, 0x9c, 0x81, 0x19, 0x68, 0xca, 0x88, 0xc1, 0x01, 0x80, 0x20, 0x18, 0x60, 0x6c, 0xa0, 0x0c, 0x67, 0x30, 0x9a, 0x10, 0x00, 0xa3, 0x09, 0x42, 0x70, 0x02, 0x40, 0x27, 0x00, 0x34, 0x62, 0xe0, 0x00, 0x20, 0x08, 0x06, 0x1b, 0x1c, 0x38, 0x4a, 0x72, 0x18, 0xcb, 0x22, 0x04, 0x6c, 0x30, 0x9a, 0x10, 0x00, 0xa3, 0x09, 0x42, 0x30, 0x9a, 0x30, 0x08, 0xa3, 0x09, 0xc4, 0x30, 0x9a, 0x50, 0x10, 0x23, 0x06, 0x06, 0x00, 0x82, 0x60, 0xe0, 0xd5, 0xc1, 0x14, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x41, 0xa4, 0x07, 0x69, 0x30, 0x07, 0x73, 0x30, 0x06, 0xc6, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x44, 0x7a, 0x90, 0x06, 0x73, 0x30, 0x07, 0x67, 0x50, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x41, 0xa4, 0x07, 0x69, 0x30, 0x07, 0x73, 0x40, 0x06, 0xc4, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x44, 0x7a, 0x90, 0x06, 0x73, 0x30, 0x07, 0x61, 0x30, 0x5c, 0x00, 0xc4, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x4c, 0x7a, 0xa0, 0x06, 0x75, 0x40, 0x07, 0x64, 0x10, 0x60, 0x38, 0x10, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0xf6, 0xc2, 0x48, 0x00, 0xf3, 0xfc, 0x12, 0xc0, 0x3c, 0x0b, 0x11, 0x99, 0x8b, 0x33, 0x11, 0xd7, 0x3f, 0x11, 0xd7, 0x44, 0x45, 0xc4, 0x6f, 0x0f, 0x06, 0xc3, 0x00, 0x91, 0x21, 0xfd, 0x42, 0x40, 0x15, 0x05, 0x11, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; #if 0 Texture2D tex : register(t0); cbuffer args : register(b0) { float lod; }; void main(float4 pos : SV_POSITION, out float4 o0 : SV_TARGET0, out uint o1 : SV_TARGET1) { uint fb; o0 = tex.Load(int3(pos.xy, int(lod)), int2(0, 0), fb); o1 = CheckAccessFullyMapped(fb) ? 1 : 0; } #endif static const DWORD ps_ld_dxbc[] = { 0x43425844, 0xe165b596, 0xe7589c76, 0xe38a2020, 0x4ca87505, 0x00000001, 0x000001cc, 0x00000004, 0x00000030, 0x00000064, 0x000000b0, 0x000001bc, 0x4e475349, 0x0000002c, 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000001, 0x00000003, 0x00000000, 0x0000030f, 0x505f5653, 0x5449534f, 0x004e4f49, 0x4e47534f, 0x00000044, 0x00000002, 0x00000008, 0x00000038, 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x0000000f, 0x00000038, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000e01, 0x545f5653, 0x45475241, 0xabab0054, 0x58454853, 0x00000104, 0x00000050, 0x00000041, 0x0100086a, 0x04000059, 0x00208e46, 0x00000000, 0x00000001, 0x04001858, 0x00107000, 0x00000000, 0x00005555, 0x04002064, 0x00101032, 0x00000000, 0x00000001, 0x03000065, 0x001020f2, 0x00000000, 0x03000065, 0x00102012, 0x00000001, 0x02000068, 0x00000002, 0x0600001b, 0x001000c2, 0x00000000, 0x00208006, 0x00000000, 0x00000000, 0x0500001b, 0x00100032, 0x00000000, 0x00101046, 0x00000000, 0x8b0000df, 0x800000c2, 0x00155543, 0x001000f2, 0x00000000, 0x00100012, 0x00000001, 0x00100e46, 0x00000000, 0x00107e46, 0x00000000, 0x05000036, 0x001020f2, 0x00000000, 0x00100e46, 0x00000000, 0x050000ea, 0x00100012, 0x00000000, 0x0010000a, 0x00000001, 0x09000037, 0x00102012, 0x00000001, 0x0010000a, 0x00000000, 0x00004001, 0x00000001, 0x00004001, 0x00000000, 0x0100003e, 0x30494653, 0x00000008, 0x00000100, 0x00000000, }; static const BYTE ps_ld_dxil[] = { 0x44, 0x58, 0x42, 0x43, 0xad, 0x5f, 0x86, 0xc6, 0xd4, 0x91, 0x0f, 0xeb, 0xf1, 0xe6, 0xe0, 0xf5, 0x1d, 0xa1, 0x6d, 0xf3, 0x01, 0x00, 0x00, 0x00, 0xee, 0x09, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, 0x8a, 0x01, 0x00, 0x00, 0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31, 0x34, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x4f, 0x53, 0x47, 0x31, 0x52, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x00, 0x50, 0x53, 0x56, 0x30, 0xa8, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 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, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x03, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x10, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x41, 0x10, 0x01, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x5c, 0x08, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x17, 0x02, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x44, 0x08, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x18, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xc4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x62, 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, 0x11, 0x23, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x31, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, 0x84, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x6d, 0x30, 0x86, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa8, 0x00, 0x49, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x32, 0x22, 0x88, 0x09, 0x20, 0x64, 0x85, 0x04, 0x13, 0x23, 0xa4, 0x84, 0x04, 0x13, 0x23, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8c, 0x8c, 0x0b, 0x84, 0xc4, 0x4c, 0x10, 0x88, 0xc1, 0x0c, 0xc0, 0x30, 0x02, 0x01, 0xcc, 0x11, 0x80, 0xc1, 0x4c, 0x6d, 0x30, 0x0e, 0xec, 0x10, 0x0e, 0xf3, 0x30, 0x0f, 0x6e, 0x40, 0x0b, 0xe5, 0x80, 0x0f, 0xf4, 0x50, 0x0f, 0xf2, 0x50, 0x0e, 0x72, 0x40, 0x0a, 0x7c, 0x60, 0x0f, 0xe5, 0x30, 0x0e, 0xf4, 0xf0, 0x0e, 0xf2, 0xc0, 0x07, 0xe6, 0xc0, 0x0e, 0xef, 0x10, 0x0e, 0xf4, 0xc0, 0x06, 0x60, 0x40, 0x07, 0x7e, 0x00, 0x06, 0x7e, 0xa0, 0x07, 0x7a, 0xd0, 0x0e, 0xe9, 0x00, 0x0f, 0xf3, 0xf0, 0x0b, 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x28, 0x10, 0x66, 0x12, 0x83, 0x71, 0x60, 0x87, 0x70, 0x98, 0x87, 0x79, 0x70, 0x03, 0x5a, 0x28, 0x07, 0x7c, 0xa0, 0x87, 0x7a, 0x90, 0x87, 0x72, 0x90, 0x03, 0x52, 0xe0, 0x03, 0x7b, 0x28, 0x87, 0x71, 0xa0, 0x87, 0x77, 0x90, 0x07, 0x3e, 0x30, 0x07, 0x76, 0x78, 0x87, 0x70, 0xa0, 0x07, 0x36, 0x00, 0x03, 0x3a, 0xf0, 0x03, 0x30, 0xf0, 0x03, 0x24, 0x04, 0x03, 0x11, 0x47, 0x00, 0x91, 0x21, 0xa1, 0x00, 0x20, 0x63, 0x04, 0xa0, 0x04, 0x08, 0x25, 0x73, 0x04, 0x48, 0x31, 0x00, 0x41, 0x10, 0x16, 0x81, 0x98, 0x62, 0x20, 0x82, 0x20, 0x2c, 0x00, 0x39, 0xc5, 0x40, 0x04, 0x41, 0x58, 0x04, 0x82, 0x8e, 0x1a, 0x2e, 0x7f, 0xc2, 0x1e, 0x42, 0xf2, 0xb9, 0x8d, 0x2a, 0x56, 0x62, 0xf2, 0x8b, 0xdb, 0x46, 0x04, 0x00, 0x00, 0x00, 0x2d, 0xf7, 0x0c, 0x97, 0x3f, 0x61, 0x0f, 0x21, 0xf9, 0x21, 0xd0, 0x0c, 0x0b, 0x81, 0x82, 0xa9, 0x10, 0x92, 0x40, 0x09, 0x54, 0xdd, 0x34, 0x5c, 0xfe, 0x84, 0x3d, 0x84, 0xe4, 0xaf, 0x84, 0xb4, 0x12, 0x93, 0x5f, 0xdc, 0x36, 0x2a, 0x00, 0x00, 0x00, 0x84, 0xa2, 0x5c, 0x02, 0x25, 0x08, 0x82, 0x20, 0x08, 0x02, 0x61, 0x73, 0x04, 0x41, 0x19, 0x34, 0x41, 0xa0, 0xad, 0x18, 0x94, 0xb0, 0x08, 0x82, 0x46, 0xdd, 0x40, 0x40, 0x1a, 0x08, 0x73, 0x04, 0xa0, 0x00, 0x00, 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x3a, 0x0f, 0x64, 0x90, 0x21, 0x23, 0x45, 0x44, 0x00, 0x72, 0x00, 0xc0, 0xf4, 0x00, 0x00, 0x86, 0x3c, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x79, 0x18, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, 0x38, 0x40, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4, 0x81, 0x80, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xc8, 0x53, 0x01, 0x01, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x90, 0x07, 0x03, 0x02, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x21, 0xcf, 0x06, 0x04, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x9e, 0x0e, 0x08, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb2, 0x40, 0x13, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x18, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x12, 0x4a, 0x60, 0x04, 0xa0, 0x10, 0x8a, 0xa1, 0x08, 0x4a, 0xa2, 0x50, 0xca, 0xa0, 0x1c, 0x0a, 0xa4, 0x14, 0x28, 0x2c, 0x40, 0x20, 0x5a, 0x4a, 0xa0, 0x14, 0x0a, 0x64, 0x04, 0xa0, 0x24, 0xca, 0xa0, 0x10, 0xe8, 0x98, 0x01, 0x20, 0x63, 0x06, 0x80, 0x8a, 0x19, 0x00, 0x22, 0x66, 0x00, 0x08, 0x1c, 0xcb, 0x20, 0x8a, 0xef, 0x03, 0x00, 0x1a, 0x66, 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0xc4, 0x83, 0x0c, 0x6f, 0x0c, 0x24, 0xc6, 0x45, 0x66, 0x43, 0x10, 0x4c, 0x10, 0x04, 0x65, 0x82, 0x20, 0x2c, 0x1b, 0x84, 0x81, 0x98, 0x20, 0x08, 0xcc, 0x06, 0x61, 0x30, 0x28, 0xc0, 0xcd, 0x4d, 0x10, 0x84, 0x66, 0xc3, 0x80, 0x24, 0xc4, 0x04, 0xa1, 0xf8, 0x38, 0xd0, 0x95, 0xe1, 0x4d, 0x10, 0x04, 0x67, 0x82, 0x20, 0x3c, 0x1b, 0x04, 0xc2, 0xd9, 0x90, 0x10, 0x0b, 0x43, 0x10, 0x43, 0x43, 0x3c, 0x1b, 0x02, 0x68, 0x82, 0x70, 0x74, 0x24, 0xc2, 0xe4, 0xce, 0xe6, 0x36, 0x20, 0x84, 0x34, 0x11, 0xc4, 0x60, 0x00, 0x1b, 0x02, 0x6a, 0x03, 0x11, 0x01, 0x15, 0x30, 0x41, 0x20, 0xc0, 0x60, 0x82, 0x20, 0x40, 0x0c, 0xd0, 0x26, 0x08, 0x42, 0x34, 0x41, 0x10, 0xa4, 0x0d, 0x46, 0x92, 0x69, 0xc4, 0xe6, 0x90, 0x68, 0x4b, 0x83, 0x9b, 0x9b, 0x20, 0x08, 0xd3, 0x06, 0x22, 0xe9, 0x34, 0x6f, 0xc3, 0x80, 0x71, 0xdf, 0x04, 0x61, 0x10, 0x03, 0x1a, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x13, 0x04, 0x81, 0xda, 0x60, 0x24, 0x62, 0xa0, 0x11, 0xdb, 0x18, 0x6c, 0x10, 0x0c, 0x32, 0x98, 0x20, 0x18, 0x1e, 0x07, 0xb6, 0x37, 0xb2, 0x0d, 0x46, 0x72, 0x06, 0x1a, 0xb1, 0x39, 0x1b, 0x04, 0x03, 0x0d, 0x36, 0x1c, 0xc4, 0x05, 0x06, 0x61, 0x50, 0x06, 0x66, 0x90, 0x06, 0x13, 0x04, 0x45, 0xd8, 0x00, 0x6c, 0x18, 0x08, 0x36, 0x60, 0x83, 0x0d, 0x41, 0x1b, 0x6c, 0x18, 0x86, 0x35, 0x70, 0x83, 0x09, 0x02, 0x18, 0x84, 0xc1, 0x86, 0x00, 0x0e, 0x48, 0xb4, 0x85, 0xa5, 0xb9, 0x71, 0x99, 0xb2, 0xfa, 0x82, 0x7a, 0x9b, 0x4b, 0xa3, 0x4b, 0x7b, 0x73, 0x9b, 0x20, 0x2c, 0xda, 0x04, 0x61, 0xd9, 0x36, 0x04, 0xc4, 0x04, 0x61, 0xe1, 0x26, 0x08, 0x4b, 0xb6, 0x61, 0x21, 0xe6, 0x80, 0x0e, 0xea, 0xc0, 0x0e, 0xee, 0x60, 0xb8, 0x03, 0x02, 0x0f, 0x80, 0x0d, 0x41, 0x1e, 0x30, 0x99, 0xb2, 0xfa, 0xa2, 0x0a, 0x93, 0x3b, 0x2b, 0xa3, 0x9b, 0x20, 0x2c, 0xd8, 0x86, 0x85, 0xd8, 0x03, 0x3a, 0xe0, 0x03, 0x3b, 0xc0, 0x83, 0xe1, 0x0e, 0x08, 0x3c, 0x00, 0x26, 0x08, 0xcb, 0xb5, 0x21, 0x18, 0x26, 0x08, 0x8b, 0xb5, 0x61, 0x19, 0xf6, 0xc0, 0x0f, 0xf8, 0xe0, 0x0f, 0xf0, 0x60, 0x00, 0x85, 0x01, 0x0f, 0x80, 0x0d, 0x42, 0x1f, 0x84, 0xc2, 0x86, 0x41, 0x0f, 0x44, 0x01, 0x98, 0x20, 0x84, 0x41, 0xb5, 0x41, 0x20, 0x48, 0x61, 0x43, 0xb1, 0x06, 0x72, 0x30, 0x0a, 0x56, 0x29, 0x54, 0x61, 0x63, 0xb3, 0x6b, 0x73, 0x49, 0x23, 0x2b, 0x73, 0xa3, 0x9b, 0x12, 0x04, 0x55, 0xc8, 0xf0, 0x5c, 0xec, 0xca, 0xe4, 0xe6, 0xd2, 0xde, 0xdc, 0xa6, 0x04, 0x44, 0x13, 0x32, 0x3c, 0x17, 0xbb, 0x30, 0x36, 0xbb, 0x32, 0xb9, 0x29, 0x81, 0x51, 0x87, 0x0c, 0xcf, 0x65, 0x0e, 0x2d, 0x8c, 0xac, 0x4c, 0xae, 0xe9, 0x8d, 0xac, 0x8c, 0x6d, 0x4a, 0x90, 0x94, 0x21, 0xc3, 0x73, 0x91, 0x2b, 0x9b, 0x7b, 0xab, 0x93, 0x1b, 0x2b, 0x9b, 0x9b, 0x12, 0x54, 0x95, 0xc8, 0xf0, 0x5c, 0xe8, 0xf2, 0xe0, 0xca, 0x82, 0xdc, 0xdc, 0xde, 0xe8, 0xc2, 0xe8, 0xd2, 0xde, 0xdc, 0xe6, 0xa6, 0x08, 0x69, 0xe0, 0x06, 0x75, 0xc8, 0xf0, 0x5c, 0xec, 0xd2, 0xca, 0xee, 0x92, 0xc8, 0xa6, 0xe8, 0xc2, 0xe8, 0xca, 0xa6, 0x04, 0x70, 0x50, 0x87, 0x0c, 0xcf, 0xa5, 0xcc, 0x8d, 0x4e, 0x2e, 0x0f, 0xea, 0x2d, 0xcd, 0x8d, 0x6e, 0x6e, 0x4a, 0x50, 0x0a, 0x00, 0x79, 0x18, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x8c, 0xcc, 0x21, 0x07, 0x7c, 0x70, 0x03, 0x74, 0x60, 0x07, 0x37, 0x90, 0x87, 0x72, 0x98, 0x87, 0x77, 0xa8, 0x07, 0x79, 0x18, 0x87, 0x72, 0x70, 0x83, 0x70, 0xa0, 0x07, 0x7a, 0x90, 0x87, 0x74, 0x10, 0x87, 0x7a, 0xa0, 0x87, 0x72, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x36, 0x30, 0x0d, 0x97, 0xef, 0x3c, 0xfe, 0xe2, 0x00, 0x83, 0xd8, 0x3c, 0xd4, 0xe4, 0x17, 0xb7, 0x6d, 0x07, 0xd5, 0x70, 0xf9, 0xce, 0xe3, 0x4f, 0xc4, 0x35, 0x51, 0x11, 0x51, 0x3a, 0xc0, 0xe0, 0x17, 0xb7, 0x6d, 0x06, 0xdb, 0x70, 0xf9, 0xce, 0xe3, 0x0b, 0x01, 0x55, 0x14, 0x44, 0x54, 0x3a, 0xc0, 0x50, 0x12, 0x06, 0x20, 0x60, 0x7e, 0x71, 0xdb, 0x05, 0x80, 0x06, 0x81, 0x1f, 0xbd, 0x8c, 0x07, 0x02, 0x67, 0xd6, 0x1f, 0x89, 0x5a, 0xc6, 0xd3, 0xeb, 0xf2, 0xb2, 0x8c, 0x08, 0xb4, 0xfe, 0x48, 0xf6, 0xf2, 0x98, 0xfe, 0x96, 0x03, 0x9b, 0x24, 0xd8, 0x0c, 0x08, 0x04, 0x02, 0x83, 0x26, 0x40, 0x30, 0x00, 0xd2, 0x18, 0x02, 0x18, 0x0c, 0x97, 0xef, 0x3c, 0xbe, 0x70, 0x10, 0x82, 0xa2, 0x09, 0x02, 0x21, 0x49, 0x1f, 0xb5, 0x2c, 0x98, 0x09, 0x3c, 0x0f, 0x31, 0xf8, 0xc8, 0x6d, 0x5b, 0x00, 0x01, 0x44, 0x86, 0x64, 0x04, 0xd5, 0x70, 0xf9, 0xce, 0xe3, 0x4b, 0x93, 0x13, 0x11, 0x28, 0x35, 0x3d, 0xd4, 0xe4, 0x17, 0xb7, 0x6d, 0x05, 0xd5, 0x70, 0xf9, 0xce, 0xe3, 0x4b, 0x93, 0x13, 0x11, 0x28, 0x35, 0x3d, 0xd4, 0xe4, 0x23, 0xb7, 0x6d, 0x09, 0xd2, 0x70, 0xf9, 0xce, 0xe3, 0x0b, 0x11, 0x01, 0x4c, 0x44, 0x08, 0x34, 0xc3, 0x42, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x24, 0xcc, 0x00, 0x94, 0x5c, 0xd9, 0x15, 0x61, 0x40, 0x39, 0x06, 0xd0, 0x52, 0x04, 0xa4, 0x8d, 0x00, 0x00, 0x00, 0x00, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0xd0, 0x85, 0x81, 0x11, 0x7d, 0x5f, 0x30, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x9d, 0x18, 0x1c, 0x03, 0x18, 0x80, 0x81, 0x30, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x4c, 0x1a, 0x80, 0x41, 0x18, 0x84, 0xc1, 0x94, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x01, 0xa3, 0x06, 0x61, 0x20, 0x06, 0x62, 0x70, 0x29, 0x23, 0x06, 0x07, 0x00, 0x82, 0x60, 0x50, 0xa1, 0x41, 0x32, 0x8c, 0xc1, 0x68, 0x42, 0x00, 0x5c, 0x20, 0xd0, 0x15, 0x02, 0x5d, 0x21, 0xd0, 0x88, 0x41, 0x03, 0x80, 0x20, 0x18, 0x60, 0x6c, 0xd0, 0x24, 0x83, 0x10, 0x40, 0x68, 0x80, 0x06, 0xd0, 0x68, 0x42, 0x00, 0x8c, 0x26, 0x08, 0xc1, 0x68, 0xc2, 0x20, 0x8c, 0x26, 0x10, 0xc3, 0x68, 0x42, 0x41, 0x8c, 0x18, 0x18, 0x00, 0x08, 0x82, 0xc1, 0x16, 0x07, 0x52, 0x30, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x8e, 0x1d, 0x98, 0xc1, 0x1b, 0xbc, 0x41, 0x18, 0x18, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0xe0, 0xd8, 0x81, 0x19, 0xbc, 0xc1, 0x1b, 0x90, 0x41, 0x31, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x8e, 0x1d, 0x98, 0xc1, 0x1b, 0xbc, 0x81, 0x44, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x81, 0x63, 0x07, 0x66, 0xf0, 0x06, 0x6f, 0xf0, 0x0d, 0x17, 0x08, 0x31, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x90, 0x1d, 0x9c, 0x41, 0x1c, 0xc0, 0x81, 0x18, 0x04, 0x18, 0x0e, 0x04, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x36, 0xb3, 0xb4, 0xc4, 0x35, 0x51, 0x11, 0x51, 0x3a, 0xc0, 0x60, 0x2a, 0xce, 0x44, 0x5c, 0xff, 0x44, 0x5c, 0x13, 0x15, 0x11, 0xbf, 0x3d, 0xd8, 0x0a, 0x03, 0x44, 0x86, 0xf4, 0x0b, 0x01, 0x55, 0x14, 0x44, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; #if 0 RWTexture2D tex : register(u2); void main(float4 pos : SV_POSITION, out float4 o0 : SV_TARGET0, out uint o1 : SV_TARGET1) { uint fb; o0 = tex.Load(int2(pos.xy), fb); o1 = CheckAccessFullyMapped(fb) ? 1 : 0; } #endif static const DWORD ps_ld_uav_dxbc[] = { 0x43425844, 0x802cf0fb, 0x86d1616b, 0xff4c948c, 0x700640db, 0x00000001, 0x000001a4, 0x00000004, 0x00000030, 0x00000064, 0x000000b0, 0x00000194, 0x4e475349, 0x0000002c, 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000001, 0x00000003, 0x00000000, 0x0000030f, 0x505f5653, 0x5449534f, 0x004e4f49, 0x4e47534f, 0x00000044, 0x00000002, 0x00000008, 0x00000038, 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x0000000f, 0x00000038, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000e01, 0x545f5653, 0x45475241, 0xabab0054, 0x58454853, 0x000000dc, 0x00000050, 0x00000037, 0x0100086a, 0x0400189c, 0x0011e000, 0x00000002, 0x00001111, 0x04002064, 0x00101032, 0x00000000, 0x00000001, 0x03000065, 0x001020f2, 0x00000000, 0x03000065, 0x00102012, 0x00000001, 0x02000068, 0x00000002, 0x0500001b, 0x001000f2, 0x00000000, 0x00101546, 0x00000000, 0x8b0000e1, 0x800000c2, 0x00044443, 0x001000f2, 0x00000000, 0x00100012, 0x00000001, 0x00100e46, 0x00000000, 0x0011ee46, 0x00000002, 0x05000036, 0x001020f2, 0x00000000, 0x00100e46, 0x00000000, 0x050000ea, 0x00100012, 0x00000000, 0x0010000a, 0x00000001, 0x09000037, 0x00102012, 0x00000001, 0x0010000a, 0x00000000, 0x00004001, 0x00000001, 0x00004001, 0x00000000, 0x0100003e, 0x30494653, 0x00000008, 0x00000900, 0x00000000, }; static const BYTE ps_ld_uav_dxil[] = { 0x44, 0x58, 0x42, 0x43, 0x2c, 0xdf, 0x91, 0xcf, 0xb6, 0x34, 0x1e, 0x7c, 0x91, 0xdc, 0x5d, 0xf3, 0x0d, 0x82, 0x04, 0xb4, 0x01, 0x00, 0x00, 0x00, 0xa2, 0x08, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, 0x7a, 0x01, 0x00, 0x00, 0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31, 0x34, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x4f, 0x53, 0x47, 0x31, 0x52, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x00, 0x50, 0x53, 0x56, 0x30, 0x98, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x03, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x10, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x41, 0x10, 0x01, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x20, 0x07, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xc8, 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x07, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xbf, 0x01, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x52, 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, 0x91, 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x29, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, 0x84, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x6d, 0x30, 0x86, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa8, 0x00, 0x49, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, 0x09, 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, 0x4c, 0x10, 0x70, 0x33, 0x00, 0xc3, 0x08, 0x04, 0x30, 0x13, 0x19, 0x8c, 0x03, 0x3b, 0x84, 0xc3, 0x3c, 0xcc, 0x83, 0x1b, 0xc8, 0xc2, 0x2d, 0xd0, 0x42, 0x39, 0xe0, 0x03, 0x3d, 0xd4, 0x83, 0x3c, 0x94, 0x83, 0x1c, 0x90, 0x02, 0x1f, 0xd8, 0x43, 0x39, 0x8c, 0x03, 0x3d, 0xbc, 0x83, 0x3c, 0xf0, 0x81, 0x39, 0xb0, 0xc3, 0x3b, 0x84, 0x03, 0x3d, 0xb0, 0x01, 0x18, 0xd0, 0x81, 0x1f, 0x80, 0x81, 0x1f, 0xa0, 0x20, 0x90, 0x18, 0x01, 0x28, 0x01, 0xa1, 0x32, 0x47, 0x00, 0x06, 0x73, 0x04, 0x48, 0x31, 0xc0, 0x39, 0x07, 0x1d, 0x4a, 0xc5, 0x20, 0xe7, 0x1c, 0x04, 0x68, 0x15, 0x83, 0x9c, 0x73, 0xd0, 0xa1, 0x76, 0xd3, 0x70, 0xf9, 0x13, 0xf6, 0x10, 0x92, 0xbf, 0x12, 0xd2, 0x4a, 0x4c, 0x7e, 0x71, 0xdb, 0xa8, 0x00, 0x00, 0x80, 0x43, 0xe8, 0x9e, 0xe1, 0xf2, 0x27, 0xec, 0x21, 0x24, 0x3f, 0x04, 0x9a, 0x61, 0x21, 0x50, 0x00, 0x8b, 0xf2, 0x4e, 0x3c, 0xe7, 0x9c, 0x73, 0x0e, 0xc9, 0x39, 0x82, 0xa0, 0x0c, 0xf4, 0x1c, 0xaa, 0xc5, 0x88, 0x07, 0x9d, 0x43, 0xe9, 0x0e, 0x04, 0xa4, 0xc1, 0x99, 0x23, 0x00, 0x05, 0x00, 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x3a, 0x0f, 0x44, 0x90, 0x21, 0x23, 0x45, 0x44, 0x00, 0x3a, 0x00, 0xe0, 0x21, 0x4f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x9e, 0x04, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, 0x0b, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x79, 0x1a, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, 0x48, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4, 0xa9, 0x80, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xc8, 0x73, 0x01, 0x01, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x16, 0x08, 0x11, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0xda, 0x05, 0x08, 0x1c, 0x40, 0x74, 0x04, 0x80, 0x4e, 0x09, 0x8c, 0x00, 0x14, 0x42, 0x31, 0x14, 0x41, 0x49, 0x14, 0x48, 0x19, 0x94, 0x03, 0xa1, 0x92, 0x28, 0x83, 0x42, 0x18, 0x01, 0x28, 0x90, 0x52, 0x28, 0x01, 0x1a, 0x33, 0x00, 0xa4, 0xc7, 0x32, 0x88, 0xe2, 0xfb, 0x00, 0x80, 0xc4, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0xc4, 0x83, 0x0c, 0x6f, 0x0c, 0x24, 0xc6, 0x45, 0x66, 0x43, 0x10, 0x4c, 0x10, 0x0e, 0x65, 0x82, 0x70, 0x2c, 0x1b, 0x84, 0x81, 0x98, 0x20, 0x1c, 0xcc, 0x06, 0x61, 0x30, 0x28, 0xc0, 0xcd, 0x4d, 0x10, 0x8e, 0x66, 0xc3, 0x80, 0x24, 0xc4, 0x04, 0x61, 0xd0, 0x38, 0xd0, 0x95, 0xe1, 0x4d, 0x10, 0x0e, 0x67, 0x82, 0x40, 0x25, 0x13, 0x84, 0xe3, 0xd9, 0x20, 0x10, 0xcf, 0x86, 0x85, 0x58, 0x18, 0xa2, 0x19, 0x1a, 0xc7, 0x71, 0xa0, 0x0d, 0x41, 0xb4, 0x81, 0x00, 0x24, 0x00, 0x98, 0x20, 0x08, 0xdc, 0x04, 0xe1, 0x80, 0x18, 0xa0, 0x4d, 0x10, 0x8e, 0x68, 0x82, 0x70, 0x48, 0x1b, 0x8c, 0xc4, 0xba, 0x08, 0xec, 0xd9, 0x20, 0x54, 0xd9, 0x86, 0x81, 0xa0, 0xb4, 0x09, 0x82, 0x11, 0x6c, 0x00, 0x36, 0x0c, 0x44, 0xd7, 0x6d, 0x08, 0xbc, 0x0d, 0xc3, 0xc0, 0x7d, 0x13, 0x04, 0x6d, 0xdb, 0x10, 0x84, 0x01, 0x89, 0xb6, 0xb0, 0x34, 0x37, 0x2e, 0x53, 0x56, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x13, 0x04, 0x64, 0x9a, 0x20, 0x20, 0xd4, 0x86, 0x80, 0x98, 0x20, 0x20, 0xd5, 0x04, 0x01, 0xb1, 0x36, 0x2c, 0x04, 0x19, 0x94, 0x81, 0x19, 0x9c, 0x01, 0x1a, 0x0c, 0x68, 0x40, 0xa4, 0x01, 0xb0, 0x21, 0x50, 0x03, 0x26, 0x53, 0x56, 0x5f, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x13, 0x04, 0xe4, 0xda, 0xb0, 0x10, 0x6c, 0x50, 0x06, 0x6d, 0x70, 0x06, 0x69, 0x30, 0xa0, 0x01, 0x91, 0x06, 0xc0, 0x04, 0x01, 0xc1, 0x36, 0x04, 0xc3, 0x04, 0x01, 0xc9, 0x36, 0x2c, 0x03, 0x1b, 0xbc, 0x41, 0x1b, 0xc0, 0x41, 0x1a, 0x0c, 0x71, 0x30, 0xa4, 0x01, 0xb0, 0x41, 0x70, 0x03, 0x39, 0xd8, 0x30, 0xac, 0xc1, 0x1c, 0x00, 0x13, 0x84, 0x0d, 0xd9, 0x20, 0x10, 0x75, 0xb0, 0xa1, 0xe0, 0xc6, 0x80, 0x0e, 0x26, 0x3b, 0xa8, 0xc2, 0xc6, 0x66, 0xd7, 0xe6, 0x92, 0x46, 0x56, 0xe6, 0x46, 0x37, 0x25, 0x08, 0xaa, 0x90, 0xe1, 0xb9, 0xd8, 0x95, 0xc9, 0xcd, 0xa5, 0xbd, 0xb9, 0x4d, 0x09, 0x88, 0x26, 0x64, 0x78, 0x2e, 0x76, 0x61, 0x6c, 0x76, 0x65, 0x72, 0x53, 0x02, 0xa3, 0x0e, 0x19, 0x9e, 0xcb, 0x1c, 0x5a, 0x18, 0x59, 0x99, 0x5c, 0xd3, 0x1b, 0x59, 0x19, 0xdb, 0x94, 0x20, 0x29, 0x43, 0x86, 0xe7, 0x22, 0x57, 0x36, 0xf7, 0x56, 0x27, 0x37, 0x56, 0x36, 0x37, 0x25, 0x90, 0x2a, 0x91, 0xe1, 0xb9, 0xd0, 0xe5, 0xc1, 0x95, 0x05, 0xb9, 0xb9, 0xbd, 0xd1, 0x85, 0xd1, 0xa5, 0xbd, 0xb9, 0xcd, 0x4d, 0x11, 0xb4, 0xaf, 0x0e, 0x19, 0x9e, 0x8b, 0x5d, 0x5a, 0xd9, 0x5d, 0x12, 0xd9, 0x14, 0x5d, 0x18, 0x5d, 0xd9, 0x94, 0x20, 0x0c, 0xea, 0x90, 0xe1, 0xb9, 0x94, 0xb9, 0xd1, 0xc9, 0xe5, 0x41, 0xbd, 0xa5, 0xb9, 0xd1, 0xcd, 0x4d, 0x09, 0xec, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x8c, 0xcc, 0x21, 0x07, 0x7c, 0x70, 0x03, 0x74, 0x60, 0x07, 0x37, 0x90, 0x87, 0x72, 0x98, 0x87, 0x77, 0xa8, 0x07, 0x79, 0x18, 0x87, 0x72, 0x70, 0x83, 0x70, 0xa0, 0x07, 0x7a, 0x90, 0x87, 0x74, 0x10, 0x87, 0x7a, 0xa0, 0x87, 0x72, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x26, 0x30, 0x0d, 0x97, 0xef, 0x3c, 0xfe, 0xe2, 0x00, 0x83, 0xd8, 0x3c, 0xd4, 0xe4, 0x17, 0xb7, 0x6d, 0x04, 0xd5, 0x70, 0xf9, 0xce, 0xe3, 0x4b, 0x93, 0x13, 0x11, 0x28, 0x35, 0x3d, 0xd4, 0xe4, 0x23, 0xb7, 0x6d, 0x05, 0xd5, 0x70, 0xf9, 0xce, 0xe3, 0x4f, 0xc4, 0x35, 0x51, 0x11, 0x51, 0x3a, 0xc0, 0xe0, 0x17, 0xb7, 0x6d, 0x01, 0x04, 0x03, 0x20, 0x8d, 0x19, 0x80, 0xc1, 0x70, 0xf9, 0xce, 0xe3, 0x0b, 0x07, 0x21, 0x28, 0x9a, 0x20, 0x10, 0x92, 0xf4, 0x51, 0xcb, 0x82, 0x99, 0xc0, 0xf3, 0x10, 0x83, 0x8f, 0xdc, 0xb6, 0x1d, 0x48, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x44, 0x04, 0x30, 0x11, 0x21, 0xd0, 0x0c, 0x0b, 0x61, 0x03, 0xd5, 0x70, 0xf9, 0xce, 0xe3, 0x4b, 0x93, 0x13, 0x11, 0x28, 0x35, 0x3d, 0xd4, 0xe4, 0x17, 0xb7, 0x5d, 0x00, 0x6a, 0x10, 0xf8, 0xd1, 0xcb, 0x78, 0x20, 0x70, 0x66, 0xfd, 0x91, 0xa4, 0x57, 0x6a, 0x19, 0x4f, 0xaf, 0xcb, 0xcb, 0x32, 0x22, 0xd0, 0xfa, 0x23, 0xd9, 0xcb, 0x63, 0xfa, 0x5b, 0x0e, 0x6c, 0x92, 0x60, 0x33, 0x20, 0x10, 0x08, 0x0c, 0x02, 0x00, 0x61, 0x20, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x74, 0x66, 0x00, 0x4a, 0xa1, 0xe4, 0x8a, 0x30, 0xa0, 0x1c, 0x03, 0x08, 0x15, 0x01, 0x00, 0x00, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x70, 0x71, 0x84, 0x82, 0x55, 0xda, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x24, 0x62, 0x80, 0x65, 0x99, 0x73, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x41, 0x32, 0x06, 0x99, 0xa6, 0x31, 0xc8, 0x09, 0x87, 0x4e, 0x38, 0x34, 0x62, 0xd0, 0x00, 0x20, 0x08, 0x06, 0xd2, 0x18, 0x20, 0xc5, 0x22, 0x04, 0xcb, 0xb2, 0x2c, 0xa3, 0x09, 0x01, 0x30, 0x9a, 0x20, 0x04, 0xa3, 0x09, 0x83, 0x30, 0x9a, 0x40, 0x0c, 0xa3, 0x09, 0x05, 0x31, 0x62, 0x60, 0x00, 0x20, 0x08, 0x06, 0x15, 0x1a, 0x34, 0xc1, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x2c, 0x6c, 0x10, 0x91, 0x01, 0x19, 0x64, 0xc6, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x2c, 0x6c, 0x10, 0x91, 0x01, 0x19, 0x58, 0xc5, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x2c, 0x6c, 0x10, 0x91, 0x01, 0x19, 0x34, 0xc4, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x2c, 0x6c, 0x10, 0x91, 0x01, 0x19, 0x6c, 0xc3, 0x05, 0x27, 0x46, 0x0c, 0x12, 0x00, 0x04, 0xc1, 0xa0, 0x61, 0x03, 0xc9, 0x0c, 0xca, 0x40, 0x0b, 0x30, 0x1c, 0x08, 0x06, 0x00, 0x00, 0x00, 0x36, 0xa2, 0x4c, 0xc4, 0xf5, 0xbb, 0xda, 0xfb, 0xdb, 0x83, 0xa1, 0x2c, 0x2d, 0x71, 0x4d, 0x54, 0x44, 0x94, 0x0e, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; struct shader_args { float args[4]; }; static const struct { D3D12_SHADER_BYTECODE ps_dxbc; D3D12_SHADER_BYTECODE ps_dxil; uint32_t expected_mip; struct shader_args args; bool is_gather; } tests[] = { { SHADER_BYTECODE(ps_sample_dxbc), SHADER_BYTECODE(ps_sample_dxil), 0, {{0.0f}} }, { SHADER_BYTECODE(ps_sample_dxbc), SHADER_BYTECODE(ps_sample_dxil), 1, {{1.0f}} }, { SHADER_BYTECODE(ps_sample_bias_dxbc), SHADER_BYTECODE(ps_sample_bias_dxil), 0, {{0.0f, 0.0f}} }, { SHADER_BYTECODE(ps_sample_bias_dxbc), SHADER_BYTECODE(ps_sample_bias_dxil), 1, {{1.0f, 0.0f}} }, { SHADER_BYTECODE(ps_sample_bias_dxbc), SHADER_BYTECODE(ps_sample_bias_dxil), 1, {{0.0f, 1.0f}} }, { SHADER_BYTECODE(ps_sample_grad_dxbc), SHADER_BYTECODE(ps_sample_grad_dxil), 0, {{0.0f, 0.0f, 0.0f}} }, { SHADER_BYTECODE(ps_sample_grad_dxbc), SHADER_BYTECODE(ps_sample_grad_dxil), 1, {{0.0f, 1.0f, 1.0f}} }, { SHADER_BYTECODE(ps_sample_lod_dxbc), SHADER_BYTECODE(ps_sample_lod_dxil), 0, {{0.0f}} }, { SHADER_BYTECODE(ps_sample_lod_dxbc), SHADER_BYTECODE(ps_sample_lod_dxil), 1, {{1.0f}} }, { SHADER_BYTECODE(ps_gather_dxbc), SHADER_BYTECODE(ps_gather_dxil), 0, {{0.0f}}, true }, { SHADER_BYTECODE(ps_gather_po_dxbc), SHADER_BYTECODE(ps_gather_po_dxil), 0, {{0.0f, 0.0f}}, true }, { SHADER_BYTECODE(ps_ld_dxbc), SHADER_BYTECODE(ps_ld_dxil), 0, {{0.0f}} }, { SHADER_BYTECODE(ps_ld_uav_dxbc), SHADER_BYTECODE(ps_ld_uav_dxil), 0, {{0.0f}} }, }; static const FLOAT clear_colors[2][4] = { { 0.2f, 0.4f, 0.6f, 0.8f }, { 0.5f, 0.5f, 0.5f, 0.5f }, }; memset(&desc, 0, sizeof(desc)); desc.no_render_target = true; if (!init_test_context(&context, &desc)) return; if (use_dxil && !context_supports_dxil(&context)) { destroy_test_context(&context); return; } hr = ID3D12Device_CheckFeatureSupport(context.device, D3D12_FEATURE_D3D12_OPTIONS, &options, sizeof(options)); ok(hr == S_OK, "Failed to check feature support, hr %#x.\n", hr); if (options.TiledResourcesTier < D3D12_TILED_RESOURCES_TIER_2) { skip("Tiled resources Tier 2 not supported by device.\n"); destroy_test_context(&context); return; } descriptor_ranges[0].RangeType = D3D12_DESCRIPTOR_RANGE_TYPE_SRV; descriptor_ranges[0].NumDescriptors = 1; descriptor_ranges[0].BaseShaderRegister = 0; descriptor_ranges[0].RegisterSpace = 0; descriptor_ranges[0].OffsetInDescriptorsFromTableStart = 0; descriptor_ranges[1].RangeType = D3D12_DESCRIPTOR_RANGE_TYPE_UAV; descriptor_ranges[1].NumDescriptors = 1; descriptor_ranges[1].BaseShaderRegister = 2; descriptor_ranges[1].RegisterSpace = 0; descriptor_ranges[1].OffsetInDescriptorsFromTableStart = 1; descriptor_ranges[2].RangeType = D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER; descriptor_ranges[2].NumDescriptors = 1; descriptor_ranges[2].BaseShaderRegister = 0; descriptor_ranges[2].RegisterSpace = 0; descriptor_ranges[2].OffsetInDescriptorsFromTableStart = 0; root_parameters[0].ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE; root_parameters[0].DescriptorTable.NumDescriptorRanges = 2; root_parameters[0].DescriptorTable.pDescriptorRanges = &descriptor_ranges[0]; root_parameters[0].ShaderVisibility = D3D12_SHADER_VISIBILITY_PIXEL; root_parameters[1].ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE; root_parameters[1].DescriptorTable.NumDescriptorRanges = 1; root_parameters[1].DescriptorTable.pDescriptorRanges = &descriptor_ranges[2]; root_parameters[1].ShaderVisibility = D3D12_SHADER_VISIBILITY_PIXEL; root_parameters[2].ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS; root_parameters[2].Constants.Num32BitValues = sizeof(struct shader_args) / sizeof(uint32_t); root_parameters[2].Constants.ShaderRegister = 0; root_parameters[2].Constants.RegisterSpace = 0; root_parameters[2].ShaderVisibility = D3D12_SHADER_VISIBILITY_PIXEL; root_signature_desc.NumParameters = ARRAY_SIZE(root_parameters); root_signature_desc.pParameters = root_parameters; root_signature_desc.NumStaticSamplers = 0; root_signature_desc.pStaticSamplers = NULL; root_signature_desc.Flags = D3D12_ROOT_SIGNATURE_FLAG_NONE; hr = create_root_signature(context.device, &root_signature_desc, &root_signature); ok(hr == S_OK, "Failed to create root signature, hr %#x.\n", hr); memset(&heap_desc, 0, sizeof(heap_desc)); heap_desc.Properties.Type = D3D12_HEAP_TYPE_DEFAULT; heap_desc.SizeInBytes = TILE_SIZE * 3; resource_desc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D; resource_desc.Alignment = 0; resource_desc.Width = 256; resource_desc.Height = 256; resource_desc.DepthOrArraySize = 1; resource_desc.MipLevels = 1; resource_desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; resource_desc.SampleDesc.Count = 1; resource_desc.SampleDesc.Quality = 0; resource_desc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN; resource_desc.Flags = D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET; hr = ID3D12Device_CreateCommittedResource(context.device, &heap_desc.Properties, D3D12_HEAP_FLAG_NONE, &resource_desc, D3D12_RESOURCE_STATE_RENDER_TARGET, NULL, &IID_ID3D12Resource, (void **)&color_rt); ok(hr == S_OK, "Failed to create committed resource, hr %#x.\n", hr); resource_desc.Format = DXGI_FORMAT_R32_UINT; hr = ID3D12Device_CreateCommittedResource(context.device, &heap_desc.Properties, D3D12_HEAP_FLAG_NONE, &resource_desc, D3D12_RESOURCE_STATE_RENDER_TARGET, NULL, &IID_ID3D12Resource, (void **)&residency_rt); ok(hr == S_OK, "Failed to create committed resource, hr %#x.\n", hr); resource_desc.MipLevels = 2; resource_desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; resource_desc.Layout = D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE; resource_desc.Flags = D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET | D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS; hr = ID3D12Device_CreateReservedResource(context.device, &resource_desc, D3D12_RESOURCE_STATE_RENDER_TARGET, NULL, &IID_ID3D12Resource, (void **)&tiled_image); ok(hr == S_OK, "Failed to create reserved resource, hr %#x.\n", hr); hr = ID3D12Device_CreateHeap(context.device, &heap_desc, &IID_ID3D12Heap, (void **)&heap); ok(hr == S_OK, "Failed to create heap, hr %#x.\n", hr); /* Map top-left + bottom-right of mip 0 + entire mip 1 */ set_region_offset(&tile_regions[0], 0, 0, 0, 0); set_region_offset(&tile_regions[1], 1, 1, 0, 0); set_region_offset(&tile_regions[2], 0, 0, 0, 1); tile_offset = 0; ID3D12CommandQueue_UpdateTileMappings(context.queue, tiled_image, ARRAY_SIZE(tile_regions), tile_regions, NULL, heap, 1, NULL, &tile_offset, NULL, D3D12_TILE_MAPPING_FLAG_NONE); rtv_heap = create_cpu_descriptor_heap(context.device, D3D12_DESCRIPTOR_HEAP_TYPE_RTV, 4); gpu_heap = create_gpu_descriptor_heap(context.device, D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV, 2); sampler_heap = create_gpu_descriptor_heap(context.device, D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER, 1); rtv_desc.Format = DXGI_FORMAT_UNKNOWN; rtv_desc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2D; rtv_desc.Texture2D.MipSlice = 0; rtv_desc.Texture2D.PlaneSlice = 0; ID3D12Device_CreateRenderTargetView(context.device, color_rt, &rtv_desc, get_cpu_rtv_handle(&context, rtv_heap, 0)); ID3D12Device_CreateRenderTargetView(context.device, residency_rt, &rtv_desc, get_cpu_rtv_handle(&context, rtv_heap, 1)); ID3D12Device_CreateRenderTargetView(context.device, tiled_image, &rtv_desc, get_cpu_rtv_handle(&context, rtv_heap, 2)); rtv_desc.Texture2D.MipSlice = 1; ID3D12Device_CreateRenderTargetView(context.device, tiled_image, &rtv_desc, get_cpu_rtv_handle(&context, rtv_heap, 3)); ID3D12GraphicsCommandList_ClearRenderTargetView(context.list, get_cpu_rtv_handle(&context, rtv_heap, 2), clear_colors[0], 0, NULL); ID3D12GraphicsCommandList_ClearRenderTargetView(context.list, get_cpu_rtv_handle(&context, rtv_heap, 3), clear_colors[1], 0, NULL); transition_resource_state(context.list, tiled_image, D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); srv_desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; srv_desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; srv_desc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; srv_desc.Texture2D.MostDetailedMip = 0; srv_desc.Texture2D.MipLevels = ~0u; srv_desc.Texture2D.PlaneSlice = 0; srv_desc.Texture2D.ResourceMinLODClamp = 0; ID3D12Device_CreateShaderResourceView(context.device, tiled_image, &srv_desc, get_cpu_descriptor_handle(&context, gpu_heap, 0)); uav_desc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2D; uav_desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; uav_desc.Texture2D.MipSlice = 0; uav_desc.Texture2D.PlaneSlice = 0; ID3D12Device_CreateUnorderedAccessView(context.device, tiled_image, NULL, &uav_desc, get_cpu_descriptor_handle(&context, gpu_heap, 1)); memset(&sampler_desc, 0, sizeof(sampler_desc)); sampler_desc.Filter = D3D12_FILTER_MIN_MAG_MIP_POINT; sampler_desc.AddressU = D3D12_TEXTURE_ADDRESS_MODE_CLAMP; sampler_desc.AddressV = D3D12_TEXTURE_ADDRESS_MODE_CLAMP; sampler_desc.AddressW = D3D12_TEXTURE_ADDRESS_MODE_CLAMP; sampler_desc.MipLODBias = 0.0f; sampler_desc.MaxAnisotropy = 1; sampler_desc.MinLOD = -16.0f; sampler_desc.MaxLOD = 16.0f; ID3D12Device_CreateSampler(context.device, &sampler_desc, get_cpu_sampler_handle(&context, sampler_heap, 0)); memset(&pipeline_desc, 0, sizeof(pipeline_desc)); pipeline_desc.pRootSignature = root_signature; pipeline_desc.VS.BytecodeLength = use_dxil ? sizeof(vs_code_dxil) : sizeof(vs_code_dxbc); pipeline_desc.VS.pShaderBytecode = use_dxil ? (const void*)vs_code_dxil : (const void*)vs_code_dxbc; pipeline_desc.BlendState.RenderTarget[0].RenderTargetWriteMask = D3D12_COLOR_WRITE_ENABLE_ALL; pipeline_desc.BlendState.RenderTarget[1].RenderTargetWriteMask = D3D12_COLOR_WRITE_ENABLE_ALL; pipeline_desc.SampleMask = 0xFFFFFFFF; pipeline_desc.RasterizerState.FillMode = D3D12_FILL_MODE_SOLID; pipeline_desc.RasterizerState.CullMode = D3D12_CULL_MODE_NONE; pipeline_desc.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE; pipeline_desc.NumRenderTargets = 2; pipeline_desc.RTVFormats[0] = DXGI_FORMAT_R8G8B8A8_UNORM; pipeline_desc.RTVFormats[1] = DXGI_FORMAT_R32_UINT; pipeline_desc.SampleDesc.Count = 1; set_viewport(&viewport, 0.0f, 0.0f, 256.0f, 256.0f, 0.0f, 1.0f); set_rect(&scissor, 0, 0, 256, 256); for (i = 0; i < ARRAY_SIZE(tests); i++) { D3D12_CPU_DESCRIPTOR_HANDLE rt_handle = get_cpu_rtv_handle(&context, rtv_heap, 0); ID3D12DescriptorHeap *descriptor_heaps[2] = { gpu_heap, sampler_heap }; const FLOAT clear_residency_rt[] = { 100.0f, 0.0f, 0.0f, 0.0f }; const FLOAT clear_color_rt[] = { 1.0f, 1.0f, 1.0f, 1.0f }; unsigned int color, expected_a, expected_b; vkd3d_test_set_context("Test %u", i); expected_a = tests[i].expected_mip ? 0x80808080 : (tests[i].is_gather ? 0x33333333 : 0xcc996633); expected_b = tests[i].expected_mip ? expected_a : 0; pipeline_desc.PS = use_dxil ? tests[i].ps_dxil : tests[i].ps_dxbc; hr = ID3D12Device_CreateGraphicsPipelineState(context.device, &pipeline_desc, &IID_ID3D12PipelineState, (void **)&pipeline_state); ok(hr == S_OK, "Failed to compile graphics pipeline, hr %#x.\n", hr); ID3D12GraphicsCommandList_OMSetRenderTargets(context.list, 2, &rt_handle, true, NULL); ID3D12GraphicsCommandList_ClearRenderTargetView(context.list, get_cpu_rtv_handle(&context, rtv_heap, 1), clear_residency_rt, 0, NULL); ID3D12GraphicsCommandList_ClearRenderTargetView(context.list, get_cpu_rtv_handle(&context, rtv_heap, 0), clear_color_rt, 0, NULL); ID3D12GraphicsCommandList_IASetPrimitiveTopology(context.list, D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST); ID3D12GraphicsCommandList_RSSetViewports(context.list, 1, &viewport); ID3D12GraphicsCommandList_RSSetScissorRects(context.list, 1, &scissor); ID3D12GraphicsCommandList_SetDescriptorHeaps(context.list, ARRAY_SIZE(descriptor_heaps), descriptor_heaps); ID3D12GraphicsCommandList_SetGraphicsRootSignature(context.list, root_signature); ID3D12GraphicsCommandList_SetPipelineState(context.list, pipeline_state); ID3D12GraphicsCommandList_SetGraphicsRootDescriptorTable(context.list, 0, get_gpu_descriptor_handle(&context, gpu_heap, 0)); ID3D12GraphicsCommandList_SetGraphicsRootDescriptorTable(context.list, 1, get_gpu_sampler_handle(&context, sampler_heap, 0)); ID3D12GraphicsCommandList_SetGraphicsRoot32BitConstants(context.list, 2, sizeof(tests[i].args) / sizeof(uint32_t), tests[i].args.args, 0); ID3D12GraphicsCommandList_DrawInstanced(context.list, 3, 1, 0, 0); transition_resource_state(context.list, color_rt, D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_COPY_SOURCE); transition_resource_state(context.list, residency_rt, D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_COPY_SOURCE); get_texture_readback_with_command_list(color_rt, 0, &rb, context.queue, context.list); color = get_readback_uint(&rb, 64, 64, 0); ok(compare_color(color, expected_a, 1), "Got color 0x%08x, expected %08x.\n", color, expected_a); color = get_readback_uint(&rb, 192, 64, 0); ok(compare_color(color, expected_b, 1), "Got color 0x%08x, expected %08x.\n", color, expected_b); color = get_readback_uint(&rb, 64, 192, 0); ok(compare_color(color, expected_b, 1), "Got color 0x%08x, expected %08x.\n", color, expected_b); color = get_readback_uint(&rb, 192, 192, 0); ok(compare_color(color, expected_a, 1), "Got color 0x%08x, expected %08x.\n", color, expected_a); release_resource_readback(&rb); reset_command_list(context.list, context.allocator); get_texture_readback_with_command_list(residency_rt, 0, &rb, context.queue, context.list); color = get_readback_uint(&rb, 64, 64, 0); ok(compare_color(color, !!expected_a, 0), "Got residency %#x, expected %#x.\n", color, !!expected_a); color = get_readback_uint(&rb, 192, 64, 0); ok(compare_color(color, !!expected_b, 0), "Got residency %#x, expected %#x.\n", color, !!expected_b); color = get_readback_uint(&rb, 64, 192, 0); ok(compare_color(color, !!expected_b, 0), "Got residency %#x, expected %#x.\n", color, !!expected_b); color = get_readback_uint(&rb, 192, 192, 0); ok(compare_color(color, !!expected_a, 0), "Got residency %#x, expected %#x.\n", color, !!expected_a); release_resource_readback(&rb); reset_command_list(context.list, context.allocator); transition_resource_state(context.list, color_rt, D3D12_RESOURCE_STATE_COPY_SOURCE, D3D12_RESOURCE_STATE_RENDER_TARGET); transition_resource_state(context.list, residency_rt, D3D12_RESOURCE_STATE_COPY_SOURCE, D3D12_RESOURCE_STATE_RENDER_TARGET); ID3D12PipelineState_Release(pipeline_state); } ID3D12DescriptorHeap_Release(rtv_heap); ID3D12DescriptorHeap_Release(gpu_heap); ID3D12DescriptorHeap_Release(sampler_heap); ID3D12Heap_Release(heap); ID3D12Resource_Release(tiled_image); ID3D12Resource_Release(color_rt); ID3D12Resource_Release(residency_rt); ID3D12RootSignature_Release(root_signature); destroy_test_context(&context); #undef TILE_SIZE } void test_texture_feedback_instructions_sm51(void) { test_texture_feedback_instructions(false); } void test_texture_feedback_instructions_dxil(void) { test_texture_feedback_instructions(true); } void test_sparse_buffer_memory_lifetime(void) { /* Attempt to bind sparse memory, then free the underlying heap, but keep the sparse resource * alive. This should confuse drivers that attempt to track BO lifetimes. */ D3D12_UNORDERED_ACCESS_VIEW_DESC uav_desc; D3D12_SHADER_RESOURCE_VIEW_DESC srv_desc; D3D12_FEATURE_DATA_D3D12_OPTIONS options; const UINT values[] = { 42, 42, 42, 42 }; D3D12_ROOT_PARAMETER root_parameters[2]; D3D12_TILE_REGION_SIZE region_size; D3D12_GPU_DESCRIPTOR_HANDLE h_gpu; D3D12_CPU_DESCRIPTOR_HANDLE h_cpu; D3D12_ROOT_SIGNATURE_DESC rs_desc; D3D12_DESCRIPTOR_RANGE desc_range; struct test_context context; struct resource_readback rb; ID3D12DescriptorHeap *cpu; ID3D12DescriptorHeap *gpu; D3D12_HEAP_DESC heap_desc; D3D12_RESOURCE_DESC desc; ID3D12Resource *sparse; ID3D12Resource *buffer; ID3D12Heap *heap_live; ID3D12Heap *heap; unsigned int i; HRESULT hr; static const DWORD cs_sparse_query_dxbc[] = { #if 0 RWStructuredBuffer RWBuf : register(u0); Buffer Buf : register(t0); [numthreads(1, 1, 1)] void main(uint thr : SV_DispatchThreadID) { uint code; // Sample mapped, but freed memory. See what CheckAccessFullyMapped returns. uint data = Buf.Load(thr, code); uint value = CheckAccessFullyMapped(code) ? (1u << 16) : 0u; value |= data & 0xffffu; RWBuf[2 * thr + 0] = value; // Sample not yet mapped memory. See what CheckAccessFullyMapped returns. data = Buf.Load(thr + 1024 * 1024, code); value = CheckAccessFullyMapped(code) ? (1u << 16) : 0u; value |= data & 0xffffu; RWBuf[2 * thr + 1] = value; } #endif 0x43425844, 0x8c2a40af, 0x2a9b20a6, 0xa99f0977, 0x37daacf5, 0x00000001, 0x00000280, 0x00000004, 0x00000030, 0x00000040, 0x00000050, 0x00000270, 0x4e475349, 0x00000008, 0x00000000, 0x00000008, 0x4e47534f, 0x00000008, 0x00000000, 0x00000008, 0x58454853, 0x00000218, 0x00050050, 0x00000086, 0x0100086a, 0x04000858, 0x00107000, 0x00000000, 0x00004444, 0x0400009e, 0x0011e000, 0x00000000, 0x00000004, 0x0200005f, 0x00020012, 0x02000068, 0x00000002, 0x0400009b, 0x00000001, 0x00000001, 0x00000001, 0x8a0000df, 0x80000042, 0x00111103, 0x00100012, 0x00000000, 0x00100012, 0x00000001, 0x00020006, 0x00107e46, 0x00000000, 0x050000ea, 0x00100022, 0x00000000, 0x0010000a, 0x00000001, 0x09000037, 0x00100022, 0x00000000, 0x0010001a, 0x00000000, 0x00004001, 0x00010000, 0x00004001, 0x00000000, 0x0b00008c, 0x00100012, 0x00000000, 0x00004001, 0x00000010, 0x00004001, 0x00000000, 0x0010000a, 0x00000000, 0x0010001a, 0x00000000, 0x06000029, 0x00100022, 0x00000000, 0x0002000a, 0x00004001, 0x00000001, 0x090000a8, 0x0011e012, 0x00000000, 0x0010001a, 0x00000000, 0x00004001, 0x00000000, 0x0010000a, 0x00000000, 0x1300008c, 0x00100052, 0x00000000, 0x00004002, 0x00000014, 0x00000000, 0x0000001f, 0x00000000, 0x00004002, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00020006, 0x00004002, 0x00100000, 0x00000000, 0x00000001, 0x00000000, 0x8b0000df, 0x80000042, 0x00111103, 0x00100012, 0x00000000, 0x00100012, 0x00000001, 0x00100006, 0x00000000, 0x00107e46, 0x00000000, 0x050000ea, 0x00100082, 0x00000000, 0x0010000a, 0x00000001, 0x09000037, 0x00100082, 0x00000000, 0x0010003a, 0x00000000, 0x00004001, 0x00010000, 0x00004001, 0x00000000, 0x0b00008c, 0x00100012, 0x00000000, 0x00004001, 0x00000010, 0x00004001, 0x00000000, 0x0010000a, 0x00000000, 0x0010003a, 0x00000000, 0x090000a8, 0x0011e012, 0x00000000, 0x0010002a, 0x00000000, 0x00004001, 0x00000000, 0x0010000a, 0x00000000, 0x0100003e, 0x30494653, 0x00000008, 0x00000100, 0x00000000, }; static const D3D12_SHADER_BYTECODE cs_sparse_query = SHADER_BYTECODE(cs_sparse_query_dxbc); if (!init_compute_test_context(&context)) return; hr = ID3D12Device_CheckFeatureSupport(context.device, D3D12_FEATURE_D3D12_OPTIONS, &options, sizeof(options)); ok(hr == S_OK, "Failed to check feature support, hr %#x.\n", hr); if (options.TiledResourcesTier < D3D12_TILED_RESOURCES_TIER_2) { skip("Tiled resources Tier 2 not supported by device.\n"); destroy_test_context(&context); return; } memset(&rs_desc, 0, sizeof(rs_desc)); memset(root_parameters, 0, sizeof(root_parameters)); memset(&desc_range, 0, sizeof(desc_range)); rs_desc.NumParameters = ARRAY_SIZE(root_parameters); rs_desc.pParameters = root_parameters; root_parameters[0].ShaderVisibility = D3D12_SHADER_VISIBILITY_ALL; root_parameters[0].ParameterType = D3D12_ROOT_PARAMETER_TYPE_UAV; root_parameters[1].ShaderVisibility = D3D12_SHADER_VISIBILITY_ALL; root_parameters[1].ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE; root_parameters[1].DescriptorTable.NumDescriptorRanges = 1; root_parameters[1].DescriptorTable.pDescriptorRanges = &desc_range; desc_range.NumDescriptors = 1; desc_range.RangeType = D3D12_DESCRIPTOR_RANGE_TYPE_SRV; create_root_signature(context.device, &rs_desc, &context.root_signature); context.pipeline_state = create_compute_pipeline_state(context.device, context.root_signature, cs_sparse_query); memset(&heap_desc, 0, sizeof(heap_desc)); heap_desc.SizeInBytes = 4 * 1024 * 1024; heap_desc.Properties.Type = D3D12_HEAP_TYPE_DEFAULT; heap_desc.Alignment = D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT; heap_desc.Flags = D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS; hr = ID3D12Device_CreateHeap(context.device, &heap_desc, &IID_ID3D12Heap, (void**)&heap); ok(SUCCEEDED(hr), "Failed to create heap, hr #%x.\n", hr); hr = ID3D12Device_CreateHeap(context.device, &heap_desc, &IID_ID3D12Heap, (void**)&heap_live); ok(SUCCEEDED(hr), "Failed to create heap, hr #%x.\n", hr); memset(&desc, 0, sizeof(desc)); desc.Width = 64 * 1024 * 1024; desc.Height = 1; desc.DepthOrArraySize = 1; desc.SampleDesc.Count = 1; desc.Format = DXGI_FORMAT_UNKNOWN; desc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; desc.MipLevels = 1; desc.Alignment = D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT; desc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; desc.Flags = D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS; hr = ID3D12Device_CreateReservedResource(context.device, &desc, D3D12_RESOURCE_STATE_UNORDERED_ACCESS, NULL, &IID_ID3D12Resource, (void**)&sparse); ok(SUCCEEDED(hr), "Failed to create reserved resource, hr #%x.\n", hr); { const D3D12_TILED_RESOURCE_COORDINATE region_start_coordinate = { 0 }; const D3D12_TILE_RANGE_FLAGS range_flag = D3D12_TILE_RANGE_FLAG_NULL; const UINT offset = 0; const UINT count = desc.Width / (64 * 1024); region_size.UseBox = FALSE; region_size.NumTiles = desc.Width / (64 * 1024); ID3D12CommandQueue_UpdateTileMappings(context.queue, sparse, 1, ®ion_start_coordinate, ®ion_size, NULL, 1, &range_flag, &offset, &count, D3D12_TILE_MAPPING_FLAG_NONE); } region_size.UseBox = FALSE; region_size.NumTiles = 1; for (i = 0; i < 2; i++) { const D3D12_TILED_RESOURCE_COORDINATE region_start_coordinate = { i, 0, 0, 0 }; const D3D12_TILE_RANGE_FLAGS range_flag = D3D12_TILE_RANGE_FLAG_NONE; const UINT offset = i; const UINT count = 1; ID3D12CommandQueue_UpdateTileMappings(context.queue, sparse, 1, ®ion_start_coordinate, ®ion_size, i == 0 ? heap : heap_live, 1, &range_flag, &offset, &count, D3D12_TILE_MAPPING_FLAG_NONE); } wait_queue_idle(context.device, context.queue); buffer = create_default_buffer(context.device, 128 * 1024, D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_COPY_DEST); cpu = create_cpu_descriptor_heap(context.device, D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV, 1); gpu = create_gpu_descriptor_heap(context.device, D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV, 2); memset(&uav_desc, 0, sizeof(uav_desc)); uav_desc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; uav_desc.Format = DXGI_FORMAT_R32_UINT; uav_desc.Buffer.NumElements = 128 * 1024 / 4; uav_desc.Buffer.FirstElement = 0; ID3D12Device_CreateUnorderedAccessView(context.device, sparse, NULL, &uav_desc, ID3D12DescriptorHeap_GetCPUDescriptorHandleForHeapStart(cpu)); ID3D12Device_CreateUnorderedAccessView(context.device, sparse, NULL, &uav_desc, ID3D12DescriptorHeap_GetCPUDescriptorHandleForHeapStart(gpu)); memset(&srv_desc, 0, sizeof(srv_desc)); srv_desc.Buffer.FirstElement = 0; srv_desc.Buffer.NumElements = 2 * 1024 * 1024; srv_desc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER; srv_desc.Format = DXGI_FORMAT_R32_UINT; srv_desc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; h_cpu = ID3D12DescriptorHeap_GetCPUDescriptorHandleForHeapStart(gpu); h_cpu.ptr += ID3D12Device_GetDescriptorHandleIncrementSize(context.device, D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); ID3D12Device_CreateShaderResourceView(context.device, sparse, &srv_desc, h_cpu); ID3D12GraphicsCommandList_SetDescriptorHeaps(context.list, 1, &gpu); ID3D12GraphicsCommandList_ClearUnorderedAccessViewUint(context.list, ID3D12DescriptorHeap_GetGPUDescriptorHandleForHeapStart(gpu), ID3D12DescriptorHeap_GetCPUDescriptorHandleForHeapStart(cpu), sparse, values, 0, NULL); transition_resource_state(context.list, sparse, D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_COPY_SOURCE); ID3D12GraphicsCommandList_CopyBufferRegion(context.list, buffer, 0, sparse, 0, 128 * 1024); transition_resource_state(context.list, buffer, D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_COPY_SOURCE); get_buffer_readback_with_command_list(buffer, DXGI_FORMAT_R32_UINT, &rb, context.queue, context.list); reset_command_list(context.list, context.allocator); ok(get_readback_uint(&rb, 0, 0, 0) == 42, "Got #%x, expected 42.\n", get_readback_uint(&rb, 0, 0, 0)); ok(get_readback_uint(&rb, 64 * 1024 / 4, 0, 0) == 42, "Got #%x, expected 42.\n", get_readback_uint(&rb, 64 * 1024 / 4, 0, 0)); release_resource_readback(&rb); ID3D12Heap_Release(heap); /* Access a resource where we can hypothetically access the freed heap memory. */ /* On AMD Windows native at least, if we read the freed region, we read garbage, which proves it's not required to unbind explicitly. * We'd read 0 in that case. */ ID3D12GraphicsCommandList_CopyBufferRegion(context.list, buffer, 0, sparse, 64 * 1024, 64 * 1024); #define EXPLORE_UNDEFINED_BEHAVIOR 0 #if EXPLORE_UNDEFINED_BEHAVIOR /* This reads unmapped memory. */ ID3D12GraphicsCommandList_CopyBufferRegion(context.list, buffer, 1024, sparse, 1024, 1024); #endif transition_resource_state(context.list, buffer, D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); h_gpu = ID3D12DescriptorHeap_GetGPUDescriptorHandleForHeapStart(gpu); h_gpu.ptr += ID3D12Device_GetDescriptorHandleIncrementSize(context.device, D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); ID3D12GraphicsCommandList_SetDescriptorHeaps(context.list, 1, &gpu); ID3D12GraphicsCommandList_SetComputeRootSignature(context.list, context.root_signature); ID3D12GraphicsCommandList_SetPipelineState(context.list, context.pipeline_state); ID3D12GraphicsCommandList_SetComputeRootUnorderedAccessView(context.list, 0, ID3D12Resource_GetGPUVirtualAddress(buffer)); ID3D12GraphicsCommandList_SetComputeRootDescriptorTable(context.list, 1, h_gpu); #if EXPLORE_UNDEFINED_BEHAVIOR ID3D12GraphicsCommandList_Dispatch(context.list, 1, 1, 1); #endif transition_resource_state(context.list, buffer, D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_COPY_SOURCE); get_buffer_readback_with_command_list(buffer, DXGI_FORMAT_R32_UINT, &rb, context.queue, context.list); #if EXPLORE_UNDEFINED_BEHAVIOR skip("Reading undefined value #%x.\n", get_readback_uint(&rb, 0, 0, 0)); skip("Reading value #%x (expect 0).\n", get_readback_uint(&rb, 1, 0, 0)); skip("Reading undefined value #%x.\n", get_readback_uint(&rb, 1024 / 4, 0, 0)); #endif ok(get_readback_uint(&rb, 2048 / 4, 0, 0) == 42, "Got #%x, expected 42.\n", get_readback_uint(&rb, 2048 / 4, 0, 0)); ok(get_readback_uint(&rb, 64 * 1024 / 4, 0, 0) == 42, "Got #%x, expected 42.\n", get_readback_uint(&rb, 64 * 1024 / 4, 0, 0)); release_resource_readback(&rb); ID3D12Resource_Release(buffer); ID3D12Resource_Release(sparse); ID3D12DescriptorHeap_Release(cpu); ID3D12DescriptorHeap_Release(gpu); ID3D12Heap_Release(heap_live); destroy_test_context(&context); }