From 30f41c02aec763d32e62351452da9ef582bc3472 Mon Sep 17 00:00:00 2001 From: 3gg <3gg@shellblade.net> Date: Fri, 6 Mar 2026 13:30:59 -0800 Subject: Move contrib libraries to contrib repo --- contrib/SDL-3.2.8/src/gpu/SDL_gpu.c | 2965 ----- contrib/SDL-3.2.8/src/gpu/SDL_sysgpu.h | 998 -- contrib/SDL-3.2.8/src/gpu/d3d12/D3D12_Blit.h | 3349 ------ contrib/SDL-3.2.8/src/gpu/d3d12/D3D_Blit.hlsl | 97 - contrib/SDL-3.2.8/src/gpu/d3d12/SDL_gpu_d3d12.c | 9113 -------------- .../SDL-3.2.8/src/gpu/d3d12/compile_shaders.bat | 18 - .../src/gpu/d3d12/compile_shaders_xbox.bat | 13 - contrib/SDL-3.2.8/src/gpu/metal/Metal_Blit.h | 10088 ---------------- contrib/SDL-3.2.8/src/gpu/metal/Metal_Blit.metal | 110 - contrib/SDL-3.2.8/src/gpu/metal/SDL_gpu_metal.m | 4580 ------- contrib/SDL-3.2.8/src/gpu/metal/compile_shaders.sh | 68 - contrib/SDL-3.2.8/src/gpu/vulkan/SDL_gpu_vulkan.c | 11841 ------------------- .../src/gpu/vulkan/SDL_gpu_vulkan_vkfuncs.h | 176 - 13 files changed, 43416 deletions(-) delete mode 100644 contrib/SDL-3.2.8/src/gpu/SDL_gpu.c delete mode 100644 contrib/SDL-3.2.8/src/gpu/SDL_sysgpu.h delete mode 100644 contrib/SDL-3.2.8/src/gpu/d3d12/D3D12_Blit.h delete mode 100644 contrib/SDL-3.2.8/src/gpu/d3d12/D3D_Blit.hlsl delete mode 100644 contrib/SDL-3.2.8/src/gpu/d3d12/SDL_gpu_d3d12.c delete mode 100644 contrib/SDL-3.2.8/src/gpu/d3d12/compile_shaders.bat delete mode 100644 contrib/SDL-3.2.8/src/gpu/d3d12/compile_shaders_xbox.bat delete mode 100644 contrib/SDL-3.2.8/src/gpu/metal/Metal_Blit.h delete mode 100644 contrib/SDL-3.2.8/src/gpu/metal/Metal_Blit.metal delete mode 100644 contrib/SDL-3.2.8/src/gpu/metal/SDL_gpu_metal.m delete mode 100755 contrib/SDL-3.2.8/src/gpu/metal/compile_shaders.sh delete mode 100644 contrib/SDL-3.2.8/src/gpu/vulkan/SDL_gpu_vulkan.c delete mode 100644 contrib/SDL-3.2.8/src/gpu/vulkan/SDL_gpu_vulkan_vkfuncs.h (limited to 'contrib/SDL-3.2.8/src/gpu') diff --git a/contrib/SDL-3.2.8/src/gpu/SDL_gpu.c b/contrib/SDL-3.2.8/src/gpu/SDL_gpu.c deleted file mode 100644 index 0897d1c..0000000 --- a/contrib/SDL-3.2.8/src/gpu/SDL_gpu.c +++ /dev/null @@ -1,2965 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2025 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ -#include "SDL_internal.h" -#include "SDL_sysgpu.h" - -// FIXME: This could probably use SDL_ObjectValid -#define CHECK_DEVICE_MAGIC(device, retval) \ - if (device == NULL) { \ - SDL_SetError("Invalid GPU device"); \ - return retval; \ - } - -#define CHECK_COMMAND_BUFFER \ - if (((CommandBufferCommonHeader *)command_buffer)->submitted) { \ - SDL_assert_release(!"Command buffer already submitted!"); \ - return; \ - } - -#define CHECK_COMMAND_BUFFER_RETURN_FALSE \ - if (((CommandBufferCommonHeader *)command_buffer)->submitted) { \ - SDL_assert_release(!"Command buffer already submitted!"); \ - return false; \ - } - -#define CHECK_COMMAND_BUFFER_RETURN_NULL \ - if (((CommandBufferCommonHeader *)command_buffer)->submitted) { \ - SDL_assert_release(!"Command buffer already submitted!"); \ - return NULL; \ - } - -#define CHECK_ANY_PASS_IN_PROGRESS(msg, retval) \ - if ( \ - ((CommandBufferCommonHeader *)command_buffer)->render_pass.in_progress || \ - ((CommandBufferCommonHeader *)command_buffer)->compute_pass.in_progress || \ - ((CommandBufferCommonHeader *)command_buffer)->copy_pass.in_progress) { \ - SDL_assert_release(!msg); \ - return retval; \ - } - -#define CHECK_RENDERPASS \ - if (!((Pass *)render_pass)->in_progress) { \ - SDL_assert_release(!"Render pass not in progress!"); \ - return; \ - } - -#define CHECK_GRAPHICS_PIPELINE_BOUND \ - if (!((CommandBufferCommonHeader *)RENDERPASS_COMMAND_BUFFER)->graphics_pipeline_bound) { \ - SDL_assert_release(!"Graphics pipeline not bound!"); \ - return; \ - } - -#define CHECK_COMPUTEPASS \ - if (!((Pass *)compute_pass)->in_progress) { \ - SDL_assert_release(!"Compute pass not in progress!"); \ - return; \ - } - -#define CHECK_COMPUTE_PIPELINE_BOUND \ - if (!((CommandBufferCommonHeader *)COMPUTEPASS_COMMAND_BUFFER)->compute_pipeline_bound) { \ - SDL_assert_release(!"Compute pipeline not bound!"); \ - return; \ - } - -#define CHECK_COPYPASS \ - if (!((Pass *)copy_pass)->in_progress) { \ - SDL_assert_release(!"Copy pass not in progress!"); \ - return; \ - } - -#define CHECK_TEXTUREFORMAT_ENUM_INVALID(enumval, retval) \ - if (enumval <= SDL_GPU_TEXTUREFORMAT_INVALID || enumval >= SDL_GPU_TEXTUREFORMAT_MAX_ENUM_VALUE) { \ - SDL_assert_release(!"Invalid texture format enum!"); \ - return retval; \ - } - -#define CHECK_VERTEXELEMENTFORMAT_ENUM_INVALID(enumval, retval) \ - if (enumval <= SDL_GPU_VERTEXELEMENTFORMAT_INVALID || enumval >= SDL_GPU_VERTEXELEMENTFORMAT_MAX_ENUM_VALUE) { \ - SDL_assert_release(!"Invalid vertex format enum!"); \ - return retval; \ - } - -#define CHECK_COMPAREOP_ENUM_INVALID(enumval, retval) \ - if (enumval <= SDL_GPU_COMPAREOP_INVALID || enumval >= SDL_GPU_COMPAREOP_MAX_ENUM_VALUE) { \ - SDL_assert_release(!"Invalid compare op enum!"); \ - return retval; \ - } - -#define CHECK_STENCILOP_ENUM_INVALID(enumval, retval) \ - if (enumval <= SDL_GPU_STENCILOP_INVALID || enumval >= SDL_GPU_STENCILOP_MAX_ENUM_VALUE) { \ - SDL_assert_release(!"Invalid stencil op enum!"); \ - return retval; \ - } - -#define CHECK_BLENDOP_ENUM_INVALID(enumval, retval) \ - if (enumval <= SDL_GPU_BLENDOP_INVALID || enumval >= SDL_GPU_BLENDOP_MAX_ENUM_VALUE) { \ - SDL_assert_release(!"Invalid blend op enum!"); \ - return retval; \ - } - -#define CHECK_BLENDFACTOR_ENUM_INVALID(enumval, retval) \ - if (enumval <= SDL_GPU_BLENDFACTOR_INVALID || enumval >= SDL_GPU_BLENDFACTOR_MAX_ENUM_VALUE) { \ - SDL_assert_release(!"Invalid blend factor enum!"); \ - return retval; \ - } - -#define CHECK_SWAPCHAINCOMPOSITION_ENUM_INVALID(enumval, retval) \ - if (enumval < 0 || enumval >= SDL_GPU_SWAPCHAINCOMPOSITION_MAX_ENUM_VALUE) { \ - SDL_assert_release(!"Invalid swapchain composition enum!"); \ - return retval; \ - } - -#define CHECK_PRESENTMODE_ENUM_INVALID(enumval, retval) \ - if (enumval < 0 || enumval >= SDL_GPU_PRESENTMODE_MAX_ENUM_VALUE) { \ - SDL_assert_release(!"Invalid present mode enum!"); \ - return retval; \ - } - -#define COMMAND_BUFFER_DEVICE \ - ((CommandBufferCommonHeader *)command_buffer)->device - -#define RENDERPASS_COMMAND_BUFFER \ - ((Pass *)render_pass)->command_buffer - -#define RENDERPASS_DEVICE \ - ((CommandBufferCommonHeader *)RENDERPASS_COMMAND_BUFFER)->device - -#define COMPUTEPASS_COMMAND_BUFFER \ - ((Pass *)compute_pass)->command_buffer - -#define COMPUTEPASS_DEVICE \ - ((CommandBufferCommonHeader *)COMPUTEPASS_COMMAND_BUFFER)->device - -#define COPYPASS_COMMAND_BUFFER \ - ((Pass *)copy_pass)->command_buffer - -#define COPYPASS_DEVICE \ - ((CommandBufferCommonHeader *)COPYPASS_COMMAND_BUFFER)->device - -// Drivers - -#ifndef SDL_GPU_DISABLED -static const SDL_GPUBootstrap *backends[] = { -#ifdef SDL_GPU_PRIVATE - &PrivateGPUDriver, -#endif -#ifdef SDL_GPU_METAL - &MetalDriver, -#endif -#ifdef SDL_GPU_VULKAN - &VulkanDriver, -#endif -#ifdef SDL_GPU_D3D12 - &D3D12Driver, -#endif - NULL -}; -#endif // !SDL_GPU_DISABLED - -// Internal Utility Functions - -SDL_GPUGraphicsPipeline *SDL_GPU_FetchBlitPipeline( - SDL_GPUDevice *device, - SDL_GPUTextureType source_texture_type, - SDL_GPUTextureFormat destination_format, - SDL_GPUShader *blit_vertex_shader, - SDL_GPUShader *blit_from_2d_shader, - SDL_GPUShader *blit_from_2d_array_shader, - SDL_GPUShader *blit_from_3d_shader, - SDL_GPUShader *blit_from_cube_shader, - SDL_GPUShader *blit_from_cube_array_shader, - BlitPipelineCacheEntry **blit_pipelines, - Uint32 *blit_pipeline_count, - Uint32 *blit_pipeline_capacity) -{ - SDL_GPUGraphicsPipelineCreateInfo blit_pipeline_create_info; - SDL_GPUColorTargetDescription color_target_desc; - SDL_GPUGraphicsPipeline *pipeline; - - if (blit_pipeline_count == NULL) { - // use pre-created, format-agnostic pipelines - return (*blit_pipelines)[source_texture_type].pipeline; - } - - for (Uint32 i = 0; i < *blit_pipeline_count; i += 1) { - if ((*blit_pipelines)[i].type == source_texture_type && (*blit_pipelines)[i].format == destination_format) { - return (*blit_pipelines)[i].pipeline; - } - } - - // No pipeline found, we'll need to make one! - SDL_zero(blit_pipeline_create_info); - - SDL_zero(color_target_desc); - color_target_desc.blend_state.color_write_mask = 0xF; - color_target_desc.format = destination_format; - - blit_pipeline_create_info.target_info.color_target_descriptions = &color_target_desc; - blit_pipeline_create_info.target_info.num_color_targets = 1; - blit_pipeline_create_info.target_info.depth_stencil_format = SDL_GPU_TEXTUREFORMAT_D16_UNORM; // arbitrary - blit_pipeline_create_info.target_info.has_depth_stencil_target = false; - - blit_pipeline_create_info.vertex_shader = blit_vertex_shader; - if (source_texture_type == SDL_GPU_TEXTURETYPE_CUBE) { - blit_pipeline_create_info.fragment_shader = blit_from_cube_shader; - } else if (source_texture_type == SDL_GPU_TEXTURETYPE_CUBE_ARRAY) { - blit_pipeline_create_info.fragment_shader = blit_from_cube_array_shader; - } else if (source_texture_type == SDL_GPU_TEXTURETYPE_2D_ARRAY) { - blit_pipeline_create_info.fragment_shader = blit_from_2d_array_shader; - } else if (source_texture_type == SDL_GPU_TEXTURETYPE_3D) { - blit_pipeline_create_info.fragment_shader = blit_from_3d_shader; - } else { - blit_pipeline_create_info.fragment_shader = blit_from_2d_shader; - } - - blit_pipeline_create_info.multisample_state.sample_count = SDL_GPU_SAMPLECOUNT_1; - blit_pipeline_create_info.multisample_state.enable_mask = false; - - blit_pipeline_create_info.primitive_type = SDL_GPU_PRIMITIVETYPE_TRIANGLELIST; - - pipeline = SDL_CreateGPUGraphicsPipeline( - device, - &blit_pipeline_create_info); - - if (pipeline == NULL) { - SDL_SetError("Failed to create GPU pipeline for blit"); - return NULL; - } - - // Cache the new pipeline - EXPAND_ARRAY_IF_NEEDED( - (*blit_pipelines), - BlitPipelineCacheEntry, - *blit_pipeline_count + 1, - *blit_pipeline_capacity, - *blit_pipeline_capacity * 2); - - (*blit_pipelines)[*blit_pipeline_count].pipeline = pipeline; - (*blit_pipelines)[*blit_pipeline_count].type = source_texture_type; - (*blit_pipelines)[*blit_pipeline_count].format = destination_format; - *blit_pipeline_count += 1; - - return pipeline; -} - -void SDL_GPU_BlitCommon( - SDL_GPUCommandBuffer *command_buffer, - const SDL_GPUBlitInfo *info, - SDL_GPUSampler *blit_linear_sampler, - SDL_GPUSampler *blit_nearest_sampler, - SDL_GPUShader *blit_vertex_shader, - SDL_GPUShader *blit_from_2d_shader, - SDL_GPUShader *blit_from_2d_array_shader, - SDL_GPUShader *blit_from_3d_shader, - SDL_GPUShader *blit_from_cube_shader, - SDL_GPUShader *blit_from_cube_array_shader, - BlitPipelineCacheEntry **blit_pipelines, - Uint32 *blit_pipeline_count, - Uint32 *blit_pipeline_capacity) -{ - CommandBufferCommonHeader *cmdbufHeader = (CommandBufferCommonHeader *)command_buffer; - SDL_GPURenderPass *render_pass; - TextureCommonHeader *src_header = (TextureCommonHeader *)info->source.texture; - TextureCommonHeader *dst_header = (TextureCommonHeader *)info->destination.texture; - SDL_GPUGraphicsPipeline *blit_pipeline; - SDL_GPUColorTargetInfo color_target_info; - SDL_GPUViewport viewport; - SDL_GPUTextureSamplerBinding texture_sampler_binding; - BlitFragmentUniforms blit_fragment_uniforms; - Uint32 layer_divisor; - - blit_pipeline = SDL_GPU_FetchBlitPipeline( - cmdbufHeader->device, - src_header->info.type, - dst_header->info.format, - blit_vertex_shader, - blit_from_2d_shader, - blit_from_2d_array_shader, - blit_from_3d_shader, - blit_from_cube_shader, - blit_from_cube_array_shader, - blit_pipelines, - blit_pipeline_count, - blit_pipeline_capacity); - - SDL_assert(blit_pipeline != NULL); - - color_target_info.load_op = info->load_op; - color_target_info.clear_color = info->clear_color; - color_target_info.store_op = SDL_GPU_STOREOP_STORE; - - color_target_info.texture = info->destination.texture; - color_target_info.mip_level = info->destination.mip_level; - color_target_info.layer_or_depth_plane = info->destination.layer_or_depth_plane; - color_target_info.cycle = info->cycle; - - render_pass = SDL_BeginGPURenderPass( - command_buffer, - &color_target_info, - 1, - NULL); - - viewport.x = (float)info->destination.x; - viewport.y = (float)info->destination.y; - viewport.w = (float)info->destination.w; - viewport.h = (float)info->destination.h; - viewport.min_depth = 0; - viewport.max_depth = 1; - - SDL_SetGPUViewport( - render_pass, - &viewport); - - SDL_BindGPUGraphicsPipeline( - render_pass, - blit_pipeline); - - texture_sampler_binding.texture = info->source.texture; - texture_sampler_binding.sampler = - info->filter == SDL_GPU_FILTER_NEAREST ? blit_nearest_sampler : blit_linear_sampler; - - SDL_BindGPUFragmentSamplers( - render_pass, - 0, - &texture_sampler_binding, - 1); - - blit_fragment_uniforms.left = (float)info->source.x / (src_header->info.width >> info->source.mip_level); - blit_fragment_uniforms.top = (float)info->source.y / (src_header->info.height >> info->source.mip_level); - blit_fragment_uniforms.width = (float)info->source.w / (src_header->info.width >> info->source.mip_level); - blit_fragment_uniforms.height = (float)info->source.h / (src_header->info.height >> info->source.mip_level); - blit_fragment_uniforms.mip_level = info->source.mip_level; - - layer_divisor = (src_header->info.type == SDL_GPU_TEXTURETYPE_3D) ? src_header->info.layer_count_or_depth : 1; - blit_fragment_uniforms.layer_or_depth = (float)info->source.layer_or_depth_plane / layer_divisor; - - if (info->flip_mode & SDL_FLIP_HORIZONTAL) { - blit_fragment_uniforms.left += blit_fragment_uniforms.width; - blit_fragment_uniforms.width *= -1; - } - - if (info->flip_mode & SDL_FLIP_VERTICAL) { - blit_fragment_uniforms.top += blit_fragment_uniforms.height; - blit_fragment_uniforms.height *= -1; - } - - SDL_PushGPUFragmentUniformData( - command_buffer, - 0, - &blit_fragment_uniforms, - sizeof(blit_fragment_uniforms)); - - SDL_DrawGPUPrimitives(render_pass, 3, 1, 0, 0); - SDL_EndGPURenderPass(render_pass); -} - -// Driver Functions - -#ifndef SDL_GPU_DISABLED -static const SDL_GPUBootstrap * SDL_GPUSelectBackend(SDL_PropertiesID props) -{ - Uint32 i; - SDL_GPUShaderFormat format_flags = 0; - const char *gpudriver; - SDL_VideoDevice *_this = SDL_GetVideoDevice(); - - if (_this == NULL) { - SDL_SetError("Video subsystem not initialized"); - return NULL; - } - - if (SDL_GetBooleanProperty(props, SDL_PROP_GPU_DEVICE_CREATE_SHADERS_PRIVATE_BOOLEAN, false)) { - format_flags |= SDL_GPU_SHADERFORMAT_PRIVATE; - } - if (SDL_GetBooleanProperty(props, SDL_PROP_GPU_DEVICE_CREATE_SHADERS_SPIRV_BOOLEAN, false)) { - format_flags |= SDL_GPU_SHADERFORMAT_SPIRV; - } - if (SDL_GetBooleanProperty(props, SDL_PROP_GPU_DEVICE_CREATE_SHADERS_DXBC_BOOLEAN, false)) { - format_flags |= SDL_GPU_SHADERFORMAT_DXBC; - } - if (SDL_GetBooleanProperty(props, SDL_PROP_GPU_DEVICE_CREATE_SHADERS_DXIL_BOOLEAN, false)) { - format_flags |= SDL_GPU_SHADERFORMAT_DXIL; - } - if (SDL_GetBooleanProperty(props, SDL_PROP_GPU_DEVICE_CREATE_SHADERS_MSL_BOOLEAN, false)) { - format_flags |= SDL_GPU_SHADERFORMAT_MSL; - } - if (SDL_GetBooleanProperty(props, SDL_PROP_GPU_DEVICE_CREATE_SHADERS_METALLIB_BOOLEAN, false)) { - format_flags |= SDL_GPU_SHADERFORMAT_METALLIB; - } - - gpudriver = SDL_GetHint(SDL_HINT_GPU_DRIVER); - if (gpudriver == NULL) { - gpudriver = SDL_GetStringProperty(props, SDL_PROP_GPU_DEVICE_CREATE_NAME_STRING, NULL); - } - - // Environment/Properties override... - if (gpudriver != NULL) { - for (i = 0; backends[i]; i += 1) { - if (SDL_strcasecmp(gpudriver, backends[i]->name) == 0) { - if (!(backends[i]->shader_formats & format_flags)) { - SDL_SetError("Required shader format for backend %s not provided!", gpudriver); - return NULL; - } - if (backends[i]->PrepareDriver(_this)) { - return backends[i]; - } - } - } - - SDL_SetError("SDL_HINT_GPU_DRIVER %s unsupported!", gpudriver); - return NULL; - } - - for (i = 0; backends[i]; i += 1) { - if ((backends[i]->shader_formats & format_flags) == 0) { - // Don't select a backend which doesn't support the app's shaders. - continue; - } - if (backends[i]->PrepareDriver(_this)) { - return backends[i]; - } - } - - SDL_SetError("No supported SDL_GPU backend found!"); - return NULL; -} - -static void SDL_GPU_FillProperties( - SDL_PropertiesID props, - SDL_GPUShaderFormat format_flags, - bool debug_mode, - const char *name) -{ - if (format_flags & SDL_GPU_SHADERFORMAT_PRIVATE) { - SDL_SetBooleanProperty(props, SDL_PROP_GPU_DEVICE_CREATE_SHADERS_PRIVATE_BOOLEAN, true); - } - if (format_flags & SDL_GPU_SHADERFORMAT_SPIRV) { - SDL_SetBooleanProperty(props, SDL_PROP_GPU_DEVICE_CREATE_SHADERS_SPIRV_BOOLEAN, true); - } - if (format_flags & SDL_GPU_SHADERFORMAT_DXBC) { - SDL_SetBooleanProperty(props, SDL_PROP_GPU_DEVICE_CREATE_SHADERS_DXBC_BOOLEAN, true); - } - if (format_flags & SDL_GPU_SHADERFORMAT_DXIL) { - SDL_SetBooleanProperty(props, SDL_PROP_GPU_DEVICE_CREATE_SHADERS_DXIL_BOOLEAN, true); - } - if (format_flags & SDL_GPU_SHADERFORMAT_MSL) { - SDL_SetBooleanProperty(props, SDL_PROP_GPU_DEVICE_CREATE_SHADERS_MSL_BOOLEAN, true); - } - if (format_flags & SDL_GPU_SHADERFORMAT_METALLIB) { - SDL_SetBooleanProperty(props, SDL_PROP_GPU_DEVICE_CREATE_SHADERS_METALLIB_BOOLEAN, true); - } - SDL_SetBooleanProperty(props, SDL_PROP_GPU_DEVICE_CREATE_DEBUGMODE_BOOLEAN, debug_mode); - SDL_SetStringProperty(props, SDL_PROP_GPU_DEVICE_CREATE_NAME_STRING, name); -} -#endif // SDL_GPU_DISABLED - -bool SDL_GPUSupportsShaderFormats( - SDL_GPUShaderFormat format_flags, - const char *name) -{ -#ifndef SDL_GPU_DISABLED - bool result; - SDL_PropertiesID props = SDL_CreateProperties(); - SDL_GPU_FillProperties(props, format_flags, false, name); - result = SDL_GPUSupportsProperties(props); - SDL_DestroyProperties(props); - return result; -#else - SDL_SetError("SDL not built with GPU support"); - return false; -#endif -} - -bool SDL_GPUSupportsProperties(SDL_PropertiesID props) -{ -#ifndef SDL_GPU_DISABLED - return (SDL_GPUSelectBackend(props) != NULL); -#else - SDL_SetError("SDL not built with GPU support"); - return false; -#endif -} - -SDL_GPUDevice *SDL_CreateGPUDevice( - SDL_GPUShaderFormat format_flags, - bool debug_mode, - const char *name) -{ -#ifndef SDL_GPU_DISABLED - SDL_GPUDevice *result; - SDL_PropertiesID props = SDL_CreateProperties(); - SDL_GPU_FillProperties(props, format_flags, debug_mode, name); - result = SDL_CreateGPUDeviceWithProperties(props); - SDL_DestroyProperties(props); - return result; -#else - SDL_SetError("SDL not built with GPU support"); - return NULL; -#endif // SDL_GPU_DISABLED -} - -SDL_GPUDevice *SDL_CreateGPUDeviceWithProperties(SDL_PropertiesID props) -{ -#ifndef SDL_GPU_DISABLED - bool debug_mode; - bool preferLowPower; - SDL_GPUDevice *result = NULL; - const SDL_GPUBootstrap *selectedBackend; - - selectedBackend = SDL_GPUSelectBackend(props); - if (selectedBackend != NULL) { - debug_mode = SDL_GetBooleanProperty(props, SDL_PROP_GPU_DEVICE_CREATE_DEBUGMODE_BOOLEAN, true); - preferLowPower = SDL_GetBooleanProperty(props, SDL_PROP_GPU_DEVICE_CREATE_PREFERLOWPOWER_BOOLEAN, false); - - result = selectedBackend->CreateDevice(debug_mode, preferLowPower, props); - if (result != NULL) { - result->backend = selectedBackend->name; - result->shader_formats = selectedBackend->shader_formats; - result->debug_mode = debug_mode; - } - } - return result; -#else - SDL_SetError("SDL not built with GPU support"); - return NULL; -#endif // SDL_GPU_DISABLED -} - -void SDL_DestroyGPUDevice(SDL_GPUDevice *device) -{ - CHECK_DEVICE_MAGIC(device, ); - - device->DestroyDevice(device); -} - -int SDL_GetNumGPUDrivers(void) -{ -#ifndef SDL_GPU_DISABLED - return SDL_arraysize(backends) - 1; -#else - return 0; -#endif -} - -const char * SDL_GetGPUDriver(int index) -{ - if (index < 0 || index >= SDL_GetNumGPUDrivers()) { - SDL_InvalidParamError("index"); - return NULL; - } -#ifndef SDL_GPU_DISABLED - return backends[index]->name; -#else - return NULL; -#endif -} - -const char * SDL_GetGPUDeviceDriver(SDL_GPUDevice *device) -{ - CHECK_DEVICE_MAGIC(device, NULL); - - return device->backend; -} - -SDL_GPUShaderFormat SDL_GetGPUShaderFormats(SDL_GPUDevice *device) -{ - CHECK_DEVICE_MAGIC(device, SDL_GPU_SHADERFORMAT_INVALID); - - return device->shader_formats; -} - -Uint32 SDL_GPUTextureFormatTexelBlockSize( - SDL_GPUTextureFormat format) -{ - switch (format) { - case SDL_GPU_TEXTUREFORMAT_BC1_RGBA_UNORM: - case SDL_GPU_TEXTUREFORMAT_BC1_RGBA_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_BC4_R_UNORM: - return 8; - case SDL_GPU_TEXTUREFORMAT_BC2_RGBA_UNORM: - case SDL_GPU_TEXTUREFORMAT_BC3_RGBA_UNORM: - case SDL_GPU_TEXTUREFORMAT_BC5_RG_UNORM: - case SDL_GPU_TEXTUREFORMAT_BC7_RGBA_UNORM: - case SDL_GPU_TEXTUREFORMAT_BC6H_RGB_FLOAT: - case SDL_GPU_TEXTUREFORMAT_BC6H_RGB_UFLOAT: - case SDL_GPU_TEXTUREFORMAT_BC2_RGBA_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_BC3_RGBA_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_BC7_RGBA_UNORM_SRGB: - return 16; - case SDL_GPU_TEXTUREFORMAT_R8_UNORM: - case SDL_GPU_TEXTUREFORMAT_R8_SNORM: - case SDL_GPU_TEXTUREFORMAT_A8_UNORM: - case SDL_GPU_TEXTUREFORMAT_R8_UINT: - case SDL_GPU_TEXTUREFORMAT_R8_INT: - return 1; - case SDL_GPU_TEXTUREFORMAT_B5G6R5_UNORM: - case SDL_GPU_TEXTUREFORMAT_B4G4R4A4_UNORM: - case SDL_GPU_TEXTUREFORMAT_B5G5R5A1_UNORM: - case SDL_GPU_TEXTUREFORMAT_R16_FLOAT: - case SDL_GPU_TEXTUREFORMAT_R8G8_SNORM: - case SDL_GPU_TEXTUREFORMAT_R8G8_UNORM: - case SDL_GPU_TEXTUREFORMAT_R8G8_UINT: - case SDL_GPU_TEXTUREFORMAT_R8G8_INT: - case SDL_GPU_TEXTUREFORMAT_R16_UNORM: - case SDL_GPU_TEXTUREFORMAT_R16_SNORM: - case SDL_GPU_TEXTUREFORMAT_R16_UINT: - case SDL_GPU_TEXTUREFORMAT_R16_INT: - case SDL_GPU_TEXTUREFORMAT_D16_UNORM: - return 2; - case SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM: - case SDL_GPU_TEXTUREFORMAT_B8G8R8A8_UNORM: - case SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_B8G8R8A8_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_R32_FLOAT: - case SDL_GPU_TEXTUREFORMAT_R16G16_FLOAT: - case SDL_GPU_TEXTUREFORMAT_R11G11B10_UFLOAT: - case SDL_GPU_TEXTUREFORMAT_R8G8B8A8_SNORM: - case SDL_GPU_TEXTUREFORMAT_R10G10B10A2_UNORM: - case SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UINT: - case SDL_GPU_TEXTUREFORMAT_R8G8B8A8_INT: - case SDL_GPU_TEXTUREFORMAT_R16G16_UINT: - case SDL_GPU_TEXTUREFORMAT_R16G16_INT: - case SDL_GPU_TEXTUREFORMAT_R16G16_UNORM: - case SDL_GPU_TEXTUREFORMAT_R16G16_SNORM: - case SDL_GPU_TEXTUREFORMAT_D24_UNORM: - case SDL_GPU_TEXTUREFORMAT_D32_FLOAT: - case SDL_GPU_TEXTUREFORMAT_R32_UINT: - case SDL_GPU_TEXTUREFORMAT_R32_INT: - case SDL_GPU_TEXTUREFORMAT_D24_UNORM_S8_UINT: - return 4; - case SDL_GPU_TEXTUREFORMAT_D32_FLOAT_S8_UINT: - return 5; - case SDL_GPU_TEXTUREFORMAT_R16G16B16A16_FLOAT: - case SDL_GPU_TEXTUREFORMAT_R16G16B16A16_UNORM: - case SDL_GPU_TEXTUREFORMAT_R16G16B16A16_SNORM: - case SDL_GPU_TEXTUREFORMAT_R16G16B16A16_UINT: - case SDL_GPU_TEXTUREFORMAT_R16G16B16A16_INT: - case SDL_GPU_TEXTUREFORMAT_R32G32_FLOAT: - case SDL_GPU_TEXTUREFORMAT_R32G32_UINT: - case SDL_GPU_TEXTUREFORMAT_R32G32_INT: - return 8; - case SDL_GPU_TEXTUREFORMAT_R32G32B32A32_FLOAT: - case SDL_GPU_TEXTUREFORMAT_R32G32B32A32_INT: - case SDL_GPU_TEXTUREFORMAT_R32G32B32A32_UINT: - return 16; - case SDL_GPU_TEXTUREFORMAT_ASTC_4x4_UNORM: - case SDL_GPU_TEXTUREFORMAT_ASTC_5x4_UNORM: - case SDL_GPU_TEXTUREFORMAT_ASTC_5x5_UNORM: - case SDL_GPU_TEXTUREFORMAT_ASTC_6x5_UNORM: - case SDL_GPU_TEXTUREFORMAT_ASTC_6x6_UNORM: - case SDL_GPU_TEXTUREFORMAT_ASTC_8x5_UNORM: - case SDL_GPU_TEXTUREFORMAT_ASTC_8x6_UNORM: - case SDL_GPU_TEXTUREFORMAT_ASTC_8x8_UNORM: - case SDL_GPU_TEXTUREFORMAT_ASTC_10x5_UNORM: - case SDL_GPU_TEXTUREFORMAT_ASTC_10x6_UNORM: - case SDL_GPU_TEXTUREFORMAT_ASTC_10x8_UNORM: - case SDL_GPU_TEXTUREFORMAT_ASTC_10x10_UNORM: - case SDL_GPU_TEXTUREFORMAT_ASTC_12x10_UNORM: - case SDL_GPU_TEXTUREFORMAT_ASTC_12x12_UNORM: - case SDL_GPU_TEXTUREFORMAT_ASTC_4x4_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_5x4_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_5x5_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_6x5_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_6x6_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_8x5_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_8x6_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_8x8_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_10x5_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_10x6_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_10x8_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_10x10_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_12x10_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_12x12_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_4x4_FLOAT: - case SDL_GPU_TEXTUREFORMAT_ASTC_5x4_FLOAT: - case SDL_GPU_TEXTUREFORMAT_ASTC_5x5_FLOAT: - case SDL_GPU_TEXTUREFORMAT_ASTC_6x5_FLOAT: - case SDL_GPU_TEXTUREFORMAT_ASTC_6x6_FLOAT: - case SDL_GPU_TEXTUREFORMAT_ASTC_8x5_FLOAT: - case SDL_GPU_TEXTUREFORMAT_ASTC_8x6_FLOAT: - case SDL_GPU_TEXTUREFORMAT_ASTC_8x8_FLOAT: - case SDL_GPU_TEXTUREFORMAT_ASTC_10x5_FLOAT: - case SDL_GPU_TEXTUREFORMAT_ASTC_10x6_FLOAT: - case SDL_GPU_TEXTUREFORMAT_ASTC_10x8_FLOAT: - case SDL_GPU_TEXTUREFORMAT_ASTC_10x10_FLOAT: - case SDL_GPU_TEXTUREFORMAT_ASTC_12x10_FLOAT: - case SDL_GPU_TEXTUREFORMAT_ASTC_12x12_FLOAT: - return 16; - default: - SDL_assert_release(!"Unrecognized TextureFormat!"); - return 0; - } -} - -bool SDL_GPUTextureSupportsFormat( - SDL_GPUDevice *device, - SDL_GPUTextureFormat format, - SDL_GPUTextureType type, - SDL_GPUTextureUsageFlags usage) -{ - CHECK_DEVICE_MAGIC(device, false); - - if (device->debug_mode) { - CHECK_TEXTUREFORMAT_ENUM_INVALID(format, false) - } - - return device->SupportsTextureFormat( - device->driverData, - format, - type, - usage); -} - -bool SDL_GPUTextureSupportsSampleCount( - SDL_GPUDevice *device, - SDL_GPUTextureFormat format, - SDL_GPUSampleCount sample_count) -{ - CHECK_DEVICE_MAGIC(device, 0); - - if (device->debug_mode) { - CHECK_TEXTUREFORMAT_ENUM_INVALID(format, 0) - } - - return device->SupportsSampleCount( - device->driverData, - format, - sample_count); -} - -// State Creation - -SDL_GPUComputePipeline *SDL_CreateGPUComputePipeline( - SDL_GPUDevice *device, - const SDL_GPUComputePipelineCreateInfo *createinfo) -{ - CHECK_DEVICE_MAGIC(device, NULL); - if (createinfo == NULL) { - SDL_InvalidParamError("createinfo"); - return NULL; - } - - if (device->debug_mode) { - if (createinfo->format == SDL_GPU_SHADERFORMAT_INVALID) { - SDL_assert_release(!"Shader format cannot be INVALID!"); - return NULL; - } - if (!(createinfo->format & device->shader_formats)) { - SDL_assert_release(!"Incompatible shader format for GPU backend"); - return NULL; - } - if (createinfo->num_readwrite_storage_textures > MAX_COMPUTE_WRITE_TEXTURES) { - SDL_assert_release(!"Compute pipeline write-only texture count cannot be higher than 8!"); - return NULL; - } - if (createinfo->num_readwrite_storage_buffers > MAX_COMPUTE_WRITE_BUFFERS) { - SDL_assert_release(!"Compute pipeline write-only buffer count cannot be higher than 8!"); - return NULL; - } - if (createinfo->threadcount_x == 0 || - createinfo->threadcount_y == 0 || - createinfo->threadcount_z == 0) { - SDL_assert_release(!"Compute pipeline threadCount dimensions must be at least 1!"); - return NULL; - } - } - - return device->CreateComputePipeline( - device->driverData, - createinfo); -} - -SDL_GPUGraphicsPipeline *SDL_CreateGPUGraphicsPipeline( - SDL_GPUDevice *device, - const SDL_GPUGraphicsPipelineCreateInfo *graphicsPipelineCreateInfo) -{ - CHECK_DEVICE_MAGIC(device, NULL); - if (graphicsPipelineCreateInfo == NULL) { - SDL_InvalidParamError("graphicsPipelineCreateInfo"); - return NULL; - } - - if (device->debug_mode) { - if (graphicsPipelineCreateInfo->vertex_shader == NULL) { - SDL_assert_release(!"Vertex shader cannot be NULL!"); - return NULL; - } - if (graphicsPipelineCreateInfo->fragment_shader == NULL) { - SDL_assert_release(!"Fragment shader cannot be NULL!"); - return NULL; - } - if (graphicsPipelineCreateInfo->target_info.num_color_targets > 0 && graphicsPipelineCreateInfo->target_info.color_target_descriptions == NULL) { - SDL_assert_release(!"Color target descriptions array pointer cannot be NULL if num_color_targets is greater than zero!"); - return NULL; - } - for (Uint32 i = 0; i < graphicsPipelineCreateInfo->target_info.num_color_targets; i += 1) { - CHECK_TEXTUREFORMAT_ENUM_INVALID(graphicsPipelineCreateInfo->target_info.color_target_descriptions[i].format, NULL); - if (IsDepthFormat(graphicsPipelineCreateInfo->target_info.color_target_descriptions[i].format)) { - SDL_assert_release(!"Color target formats cannot be a depth format!"); - return NULL; - } - if (!SDL_GPUTextureSupportsFormat(device, graphicsPipelineCreateInfo->target_info.color_target_descriptions[i].format, SDL_GPU_TEXTURETYPE_2D, SDL_GPU_TEXTUREUSAGE_COLOR_TARGET)) { - SDL_assert_release(!"Format is not supported for color targets on this device!"); - return NULL; - } - if (graphicsPipelineCreateInfo->target_info.color_target_descriptions[i].blend_state.enable_blend) { - const SDL_GPUColorTargetBlendState *blend_state = &graphicsPipelineCreateInfo->target_info.color_target_descriptions[i].blend_state; - CHECK_BLENDFACTOR_ENUM_INVALID(blend_state->src_color_blendfactor, NULL) - CHECK_BLENDFACTOR_ENUM_INVALID(blend_state->dst_color_blendfactor, NULL) - CHECK_BLENDOP_ENUM_INVALID(blend_state->color_blend_op, NULL) - CHECK_BLENDFACTOR_ENUM_INVALID(blend_state->src_alpha_blendfactor, NULL) - CHECK_BLENDFACTOR_ENUM_INVALID(blend_state->dst_alpha_blendfactor, NULL) - CHECK_BLENDOP_ENUM_INVALID(blend_state->alpha_blend_op, NULL) - } - } - if (graphicsPipelineCreateInfo->target_info.has_depth_stencil_target) { - CHECK_TEXTUREFORMAT_ENUM_INVALID(graphicsPipelineCreateInfo->target_info.depth_stencil_format, NULL); - if (!IsDepthFormat(graphicsPipelineCreateInfo->target_info.depth_stencil_format)) { - SDL_assert_release(!"Depth-stencil target format must be a depth format!"); - return NULL; - } - if (!SDL_GPUTextureSupportsFormat(device, graphicsPipelineCreateInfo->target_info.depth_stencil_format, SDL_GPU_TEXTURETYPE_2D, SDL_GPU_TEXTUREUSAGE_DEPTH_STENCIL_TARGET)) { - SDL_assert_release(!"Format is not supported for depth targets on this device!"); - return NULL; - } - } - if (graphicsPipelineCreateInfo->vertex_input_state.num_vertex_buffers > 0 && graphicsPipelineCreateInfo->vertex_input_state.vertex_buffer_descriptions == NULL) { - SDL_assert_release(!"Vertex buffer descriptions array pointer cannot be NULL!"); - return NULL; - } - if (graphicsPipelineCreateInfo->vertex_input_state.num_vertex_buffers > MAX_VERTEX_BUFFERS) { - SDL_assert_release(!"The number of vertex buffer descriptions in a vertex input state must not exceed 16!"); - return NULL; - } - if (graphicsPipelineCreateInfo->vertex_input_state.num_vertex_attributes > 0 && graphicsPipelineCreateInfo->vertex_input_state.vertex_attributes == NULL) { - SDL_assert_release(!"Vertex attributes array pointer cannot be NULL!"); - return NULL; - } - if (graphicsPipelineCreateInfo->vertex_input_state.num_vertex_attributes > MAX_VERTEX_ATTRIBUTES) { - SDL_assert_release(!"The number of vertex attributes in a vertex input state must not exceed 16!"); - return NULL; - } - for (Uint32 i = 0; i < graphicsPipelineCreateInfo->vertex_input_state.num_vertex_buffers; i += 1) { - if (graphicsPipelineCreateInfo->vertex_input_state.vertex_buffer_descriptions[i].instance_step_rate != 0) { - SDL_assert_release(!"For all vertex buffer descriptions, instance_step_rate must be 0!"); - return NULL; - } - } - Uint32 locations[MAX_VERTEX_ATTRIBUTES]; - for (Uint32 i = 0; i < graphicsPipelineCreateInfo->vertex_input_state.num_vertex_attributes; i += 1) { - CHECK_VERTEXELEMENTFORMAT_ENUM_INVALID(graphicsPipelineCreateInfo->vertex_input_state.vertex_attributes[i].format, NULL); - - locations[i] = graphicsPipelineCreateInfo->vertex_input_state.vertex_attributes[i].location; - for (Uint32 j = 0; j < i; j += 1) { - if (locations[j] == locations[i]) { - SDL_assert_release(!"Each vertex attribute location in a vertex input state must be unique!"); - return NULL; - } - } - } - if (graphicsPipelineCreateInfo->multisample_state.enable_mask) { - SDL_assert_release(!"For multisample states, enable_mask must be false!"); - return NULL; - } - if (graphicsPipelineCreateInfo->multisample_state.sample_mask != 0) { - SDL_assert_release(!"For multisample states, sample_mask must be 0!"); - return NULL; - } - if (graphicsPipelineCreateInfo->depth_stencil_state.enable_depth_test) { - CHECK_COMPAREOP_ENUM_INVALID(graphicsPipelineCreateInfo->depth_stencil_state.compare_op, NULL) - } - if (graphicsPipelineCreateInfo->depth_stencil_state.enable_stencil_test) { - const SDL_GPUStencilOpState *stencil_state = &graphicsPipelineCreateInfo->depth_stencil_state.back_stencil_state; - CHECK_COMPAREOP_ENUM_INVALID(stencil_state->compare_op, NULL) - CHECK_STENCILOP_ENUM_INVALID(stencil_state->fail_op, NULL) - CHECK_STENCILOP_ENUM_INVALID(stencil_state->pass_op, NULL) - CHECK_STENCILOP_ENUM_INVALID(stencil_state->depth_fail_op, NULL) - } - } - - return device->CreateGraphicsPipeline( - device->driverData, - graphicsPipelineCreateInfo); -} - -SDL_GPUSampler *SDL_CreateGPUSampler( - SDL_GPUDevice *device, - const SDL_GPUSamplerCreateInfo *createinfo) -{ - CHECK_DEVICE_MAGIC(device, NULL); - if (createinfo == NULL) { - SDL_InvalidParamError("createinfo"); - return NULL; - } - - return device->CreateSampler( - device->driverData, - createinfo); -} - -SDL_GPUShader *SDL_CreateGPUShader( - SDL_GPUDevice *device, - const SDL_GPUShaderCreateInfo *createinfo) -{ - CHECK_DEVICE_MAGIC(device, NULL); - if (createinfo == NULL) { - SDL_InvalidParamError("createinfo"); - return NULL; - } - - if (device->debug_mode) { - if (createinfo->format == SDL_GPU_SHADERFORMAT_INVALID) { - SDL_assert_release(!"Shader format cannot be INVALID!"); - return NULL; - } - if (!(createinfo->format & device->shader_formats)) { - SDL_assert_release(!"Incompatible shader format for GPU backend"); - return NULL; - } - } - - return device->CreateShader( - device->driverData, - createinfo); -} - -SDL_GPUTexture *SDL_CreateGPUTexture( - SDL_GPUDevice *device, - const SDL_GPUTextureCreateInfo *createinfo) -{ - CHECK_DEVICE_MAGIC(device, NULL); - if (createinfo == NULL) { - SDL_InvalidParamError("createinfo"); - return NULL; - } - - if (device->debug_mode) { - bool failed = false; - - const Uint32 MAX_2D_DIMENSION = 16384; - const Uint32 MAX_3D_DIMENSION = 2048; - - // Common checks for all texture types - CHECK_TEXTUREFORMAT_ENUM_INVALID(createinfo->format, NULL) - - if (createinfo->width <= 0 || createinfo->height <= 0 || createinfo->layer_count_or_depth <= 0) { - SDL_assert_release(!"For any texture: width, height, and layer_count_or_depth must be >= 1"); - failed = true; - } - if (createinfo->num_levels <= 0) { - SDL_assert_release(!"For any texture: num_levels must be >= 1"); - failed = true; - } - if ((createinfo->usage & SDL_GPU_TEXTUREUSAGE_GRAPHICS_STORAGE_READ) && (createinfo->usage & SDL_GPU_TEXTUREUSAGE_SAMPLER)) { - SDL_assert_release(!"For any texture: usage cannot contain both GRAPHICS_STORAGE_READ and SAMPLER"); - failed = true; - } - if (createinfo->sample_count > SDL_GPU_SAMPLECOUNT_1 && - (createinfo->usage & (SDL_GPU_TEXTUREUSAGE_SAMPLER | - SDL_GPU_TEXTUREUSAGE_GRAPHICS_STORAGE_READ | - SDL_GPU_TEXTUREUSAGE_COMPUTE_STORAGE_READ | - SDL_GPU_TEXTUREUSAGE_COMPUTE_STORAGE_WRITE))) { - SDL_assert_release(!"For multisample textures: usage cannot contain SAMPLER or STORAGE flags"); - failed = true; - } - if (IsDepthFormat(createinfo->format) && (createinfo->usage & ~(SDL_GPU_TEXTUREUSAGE_DEPTH_STENCIL_TARGET | SDL_GPU_TEXTUREUSAGE_SAMPLER))) { - SDL_assert_release(!"For depth textures: usage cannot contain any flags except for DEPTH_STENCIL_TARGET and SAMPLER"); - failed = true; - } - if (IsIntegerFormat(createinfo->format) && (createinfo->usage & SDL_GPU_TEXTUREUSAGE_SAMPLER)) { - SDL_assert_release(!"For any texture: usage cannot contain SAMPLER for textures with an integer format"); - failed = true; - } - - if (createinfo->type == SDL_GPU_TEXTURETYPE_CUBE) { - // Cubemap validation - if (createinfo->width != createinfo->height) { - SDL_assert_release(!"For cube textures: width and height must be identical"); - failed = true; - } - if (createinfo->width > MAX_2D_DIMENSION || createinfo->height > MAX_2D_DIMENSION) { - SDL_assert_release(!"For cube textures: width and height must be <= 16384"); - failed = true; - } - if (createinfo->layer_count_or_depth != 6) { - SDL_assert_release(!"For cube textures: layer_count_or_depth must be 6"); - failed = true; - } - if (createinfo->sample_count > SDL_GPU_SAMPLECOUNT_1) { - SDL_assert_release(!"For cube textures: sample_count must be SDL_GPU_SAMPLECOUNT_1"); - failed = true; - } - if (!SDL_GPUTextureSupportsFormat(device, createinfo->format, SDL_GPU_TEXTURETYPE_CUBE, createinfo->usage)) { - SDL_assert_release(!"For cube textures: the format is unsupported for the given usage"); - failed = true; - } - } else if (createinfo->type == SDL_GPU_TEXTURETYPE_CUBE_ARRAY) { - // Cubemap array validation - if (createinfo->width != createinfo->height) { - SDL_assert_release(!"For cube array textures: width and height must be identical"); - failed = true; - } - if (createinfo->width > MAX_2D_DIMENSION || createinfo->height > MAX_2D_DIMENSION) { - SDL_assert_release(!"For cube array textures: width and height must be <= 16384"); - failed = true; - } - if (createinfo->layer_count_or_depth % 6 != 0) { - SDL_assert_release(!"For cube array textures: layer_count_or_depth must be a multiple of 6"); - failed = true; - } - if (createinfo->sample_count > SDL_GPU_SAMPLECOUNT_1) { - SDL_assert_release(!"For cube array textures: sample_count must be SDL_GPU_SAMPLECOUNT_1"); - failed = true; - } - if (!SDL_GPUTextureSupportsFormat(device, createinfo->format, SDL_GPU_TEXTURETYPE_CUBE_ARRAY, createinfo->usage)) { - SDL_assert_release(!"For cube array textures: the format is unsupported for the given usage"); - failed = true; - } - } else if (createinfo->type == SDL_GPU_TEXTURETYPE_3D) { - // 3D Texture Validation - if (createinfo->width > MAX_3D_DIMENSION || createinfo->height > MAX_3D_DIMENSION || createinfo->layer_count_or_depth > MAX_3D_DIMENSION) { - SDL_assert_release(!"For 3D textures: width, height, and layer_count_or_depth must be <= 2048"); - failed = true; - } - if (createinfo->usage & SDL_GPU_TEXTUREUSAGE_DEPTH_STENCIL_TARGET) { - SDL_assert_release(!"For 3D textures: usage must not contain DEPTH_STENCIL_TARGET"); - failed = true; - } - if (createinfo->sample_count > SDL_GPU_SAMPLECOUNT_1) { - SDL_assert_release(!"For 3D textures: sample_count must be SDL_GPU_SAMPLECOUNT_1"); - failed = true; - } - if (!SDL_GPUTextureSupportsFormat(device, createinfo->format, SDL_GPU_TEXTURETYPE_3D, createinfo->usage)) { - SDL_assert_release(!"For 3D textures: the format is unsupported for the given usage"); - failed = true; - } - } else { - if (createinfo->type == SDL_GPU_TEXTURETYPE_2D_ARRAY) { - // Array Texture Validation - if (createinfo->usage & SDL_GPU_TEXTUREUSAGE_DEPTH_STENCIL_TARGET) { - SDL_assert_release(!"For array textures: usage must not contain DEPTH_STENCIL_TARGET"); - failed = true; - } - if (createinfo->sample_count > SDL_GPU_SAMPLECOUNT_1) { - SDL_assert_release(!"For array textures: sample_count must be SDL_GPU_SAMPLECOUNT_1"); - failed = true; - } - } - if (createinfo->sample_count > SDL_GPU_SAMPLECOUNT_1 && createinfo->num_levels > 1) { - SDL_assert_release(!"For 2D multisample textures: num_levels must be 1"); - failed = true; - } - if (!SDL_GPUTextureSupportsFormat(device, createinfo->format, SDL_GPU_TEXTURETYPE_2D, createinfo->usage)) { - SDL_assert_release(!"For 2D textures: the format is unsupported for the given usage"); - failed = true; - } - } - - if (failed) { - return NULL; - } - } - - return device->CreateTexture( - device->driverData, - createinfo); -} - -SDL_GPUBuffer *SDL_CreateGPUBuffer( - SDL_GPUDevice *device, - const SDL_GPUBufferCreateInfo *createinfo) -{ - CHECK_DEVICE_MAGIC(device, NULL); - if (createinfo == NULL) { - SDL_InvalidParamError("createinfo"); - return NULL; - } - - const char *debugName = SDL_GetStringProperty(createinfo->props, SDL_PROP_GPU_BUFFER_CREATE_NAME_STRING, NULL); - - return device->CreateBuffer( - device->driverData, - createinfo->usage, - createinfo->size, - debugName); -} - -SDL_GPUTransferBuffer *SDL_CreateGPUTransferBuffer( - SDL_GPUDevice *device, - const SDL_GPUTransferBufferCreateInfo *createinfo) -{ - CHECK_DEVICE_MAGIC(device, NULL); - if (createinfo == NULL) { - SDL_InvalidParamError("createinfo"); - return NULL; - } - - const char *debugName = SDL_GetStringProperty(createinfo->props, SDL_PROP_GPU_TRANSFERBUFFER_CREATE_NAME_STRING, NULL); - - return device->CreateTransferBuffer( - device->driverData, - createinfo->usage, - createinfo->size, - debugName); -} - -// Debug Naming - -void SDL_SetGPUBufferName( - SDL_GPUDevice *device, - SDL_GPUBuffer *buffer, - const char *text) -{ - CHECK_DEVICE_MAGIC(device, ); - if (buffer == NULL) { - SDL_InvalidParamError("buffer"); - return; - } - if (text == NULL) { - SDL_InvalidParamError("text"); - } - - device->SetBufferName( - device->driverData, - buffer, - text); -} - -void SDL_SetGPUTextureName( - SDL_GPUDevice *device, - SDL_GPUTexture *texture, - const char *text) -{ - CHECK_DEVICE_MAGIC(device, ); - if (texture == NULL) { - SDL_InvalidParamError("texture"); - return; - } - if (text == NULL) { - SDL_InvalidParamError("text"); - } - - device->SetTextureName( - device->driverData, - texture, - text); -} - -void SDL_InsertGPUDebugLabel( - SDL_GPUCommandBuffer *command_buffer, - const char *text) -{ - if (command_buffer == NULL) { - SDL_InvalidParamError("command_buffer"); - return; - } - if (text == NULL) { - SDL_InvalidParamError("text"); - return; - } - - if (COMMAND_BUFFER_DEVICE->debug_mode) { - CHECK_COMMAND_BUFFER - } - - COMMAND_BUFFER_DEVICE->InsertDebugLabel( - command_buffer, - text); -} - -void SDL_PushGPUDebugGroup( - SDL_GPUCommandBuffer *command_buffer, - const char *name) -{ - if (command_buffer == NULL) { - SDL_InvalidParamError("command_buffer"); - return; - } - if (name == NULL) { - SDL_InvalidParamError("name"); - return; - } - - if (COMMAND_BUFFER_DEVICE->debug_mode) { - CHECK_COMMAND_BUFFER - } - - COMMAND_BUFFER_DEVICE->PushDebugGroup( - command_buffer, - name); -} - -void SDL_PopGPUDebugGroup( - SDL_GPUCommandBuffer *command_buffer) -{ - if (command_buffer == NULL) { - SDL_InvalidParamError("command_buffer"); - return; - } - - if (COMMAND_BUFFER_DEVICE->debug_mode) { - CHECK_COMMAND_BUFFER - } - - COMMAND_BUFFER_DEVICE->PopDebugGroup( - command_buffer); -} - -// Disposal - -void SDL_ReleaseGPUTexture( - SDL_GPUDevice *device, - SDL_GPUTexture *texture) -{ - CHECK_DEVICE_MAGIC(device, ); - if (texture == NULL) { - return; - } - - device->ReleaseTexture( - device->driverData, - texture); -} - -void SDL_ReleaseGPUSampler( - SDL_GPUDevice *device, - SDL_GPUSampler *sampler) -{ - CHECK_DEVICE_MAGIC(device, ); - if (sampler == NULL) { - return; - } - - device->ReleaseSampler( - device->driverData, - sampler); -} - -void SDL_ReleaseGPUBuffer( - SDL_GPUDevice *device, - SDL_GPUBuffer *buffer) -{ - CHECK_DEVICE_MAGIC(device, ); - if (buffer == NULL) { - return; - } - - device->ReleaseBuffer( - device->driverData, - buffer); -} - -void SDL_ReleaseGPUTransferBuffer( - SDL_GPUDevice *device, - SDL_GPUTransferBuffer *transfer_buffer) -{ - CHECK_DEVICE_MAGIC(device, ); - if (transfer_buffer == NULL) { - return; - } - - device->ReleaseTransferBuffer( - device->driverData, - transfer_buffer); -} - -void SDL_ReleaseGPUShader( - SDL_GPUDevice *device, - SDL_GPUShader *shader) -{ - CHECK_DEVICE_MAGIC(device, ); - if (shader == NULL) { - return; - } - - device->ReleaseShader( - device->driverData, - shader); -} - -void SDL_ReleaseGPUComputePipeline( - SDL_GPUDevice *device, - SDL_GPUComputePipeline *compute_pipeline) -{ - CHECK_DEVICE_MAGIC(device, ); - if (compute_pipeline == NULL) { - return; - } - - device->ReleaseComputePipeline( - device->driverData, - compute_pipeline); -} - -void SDL_ReleaseGPUGraphicsPipeline( - SDL_GPUDevice *device, - SDL_GPUGraphicsPipeline *graphics_pipeline) -{ - CHECK_DEVICE_MAGIC(device, ); - if (graphics_pipeline == NULL) { - return; - } - - device->ReleaseGraphicsPipeline( - device->driverData, - graphics_pipeline); -} - -// Command Buffer - -SDL_GPUCommandBuffer *SDL_AcquireGPUCommandBuffer( - SDL_GPUDevice *device) -{ - SDL_GPUCommandBuffer *command_buffer; - CommandBufferCommonHeader *commandBufferHeader; - - CHECK_DEVICE_MAGIC(device, NULL); - - command_buffer = device->AcquireCommandBuffer( - device->driverData); - - if (command_buffer == NULL) { - return NULL; - } - - commandBufferHeader = (CommandBufferCommonHeader *)command_buffer; - commandBufferHeader->device = device; - commandBufferHeader->render_pass.command_buffer = command_buffer; - commandBufferHeader->render_pass.in_progress = false; - commandBufferHeader->graphics_pipeline_bound = false; - commandBufferHeader->compute_pass.command_buffer = command_buffer; - commandBufferHeader->compute_pass.in_progress = false; - commandBufferHeader->compute_pipeline_bound = false; - commandBufferHeader->copy_pass.command_buffer = command_buffer; - commandBufferHeader->copy_pass.in_progress = false; - commandBufferHeader->swapchain_texture_acquired = false; - commandBufferHeader->submitted = false; - - return command_buffer; -} - -// Uniforms - -void SDL_PushGPUVertexUniformData( - SDL_GPUCommandBuffer *command_buffer, - Uint32 slot_index, - const void *data, - Uint32 length) -{ - if (command_buffer == NULL) { - SDL_InvalidParamError("command_buffer"); - return; - } - if (data == NULL) { - SDL_InvalidParamError("data"); - return; - } - - if (COMMAND_BUFFER_DEVICE->debug_mode) { - CHECK_COMMAND_BUFFER - } - - COMMAND_BUFFER_DEVICE->PushVertexUniformData( - command_buffer, - slot_index, - data, - length); -} - -void SDL_PushGPUFragmentUniformData( - SDL_GPUCommandBuffer *command_buffer, - Uint32 slot_index, - const void *data, - Uint32 length) -{ - if (command_buffer == NULL) { - SDL_InvalidParamError("command_buffer"); - return; - } - if (data == NULL) { - SDL_InvalidParamError("data"); - return; - } - - if (COMMAND_BUFFER_DEVICE->debug_mode) { - CHECK_COMMAND_BUFFER - } - - COMMAND_BUFFER_DEVICE->PushFragmentUniformData( - command_buffer, - slot_index, - data, - length); -} - -void SDL_PushGPUComputeUniformData( - SDL_GPUCommandBuffer *command_buffer, - Uint32 slot_index, - const void *data, - Uint32 length) -{ - if (command_buffer == NULL) { - SDL_InvalidParamError("command_buffer"); - return; - } - if (data == NULL) { - SDL_InvalidParamError("data"); - return; - } - - if (COMMAND_BUFFER_DEVICE->debug_mode) { - CHECK_COMMAND_BUFFER - } - - COMMAND_BUFFER_DEVICE->PushComputeUniformData( - command_buffer, - slot_index, - data, - length); -} - -// Render Pass - -SDL_GPURenderPass *SDL_BeginGPURenderPass( - SDL_GPUCommandBuffer *command_buffer, - const SDL_GPUColorTargetInfo *color_target_infos, - Uint32 num_color_targets, - const SDL_GPUDepthStencilTargetInfo *depth_stencil_target_info) -{ - CommandBufferCommonHeader *commandBufferHeader; - - if (command_buffer == NULL) { - SDL_InvalidParamError("command_buffer"); - return NULL; - } - if (color_target_infos == NULL && num_color_targets > 0) { - SDL_InvalidParamError("color_target_infos"); - return NULL; - } - - if (num_color_targets > MAX_COLOR_TARGET_BINDINGS) { - SDL_SetError("num_color_targets exceeds MAX_COLOR_TARGET_BINDINGS"); - return NULL; - } - - if (COMMAND_BUFFER_DEVICE->debug_mode) { - CHECK_COMMAND_BUFFER_RETURN_NULL - CHECK_ANY_PASS_IN_PROGRESS("Cannot begin render pass during another pass!", NULL) - - for (Uint32 i = 0; i < num_color_targets; i += 1) { - TextureCommonHeader *textureHeader = (TextureCommonHeader *)color_target_infos[i].texture; - - if (color_target_infos[i].cycle && color_target_infos[i].load_op == SDL_GPU_LOADOP_LOAD) { - SDL_assert_release(!"Cannot cycle color target when load op is LOAD!"); - } - - if (color_target_infos[i].store_op == SDL_GPU_STOREOP_RESOLVE || color_target_infos[i].store_op == SDL_GPU_STOREOP_RESOLVE_AND_STORE) { - if (color_target_infos[i].resolve_texture == NULL) { - SDL_assert_release(!"Store op is RESOLVE or RESOLVE_AND_STORE but resolve_texture is NULL!"); - } else { - TextureCommonHeader *resolveTextureHeader = (TextureCommonHeader *)color_target_infos[i].resolve_texture; - if (textureHeader->info.sample_count == SDL_GPU_SAMPLECOUNT_1) { - SDL_assert_release(!"Store op is RESOLVE or RESOLVE_AND_STORE but texture is not multisample!"); - } - if (resolveTextureHeader->info.sample_count != SDL_GPU_SAMPLECOUNT_1) { - SDL_assert_release(!"Resolve texture must have a sample count of 1!"); - } - if (resolveTextureHeader->info.format != textureHeader->info.format) { - SDL_assert_release(!"Resolve texture must have the same format as its corresponding color target!"); - } - if (resolveTextureHeader->info.type == SDL_GPU_TEXTURETYPE_3D) { - SDL_assert_release(!"Resolve texture must not be of TEXTURETYPE_3D!"); - } - if (!(resolveTextureHeader->info.usage & SDL_GPU_TEXTUREUSAGE_COLOR_TARGET)) { - SDL_assert_release(!"Resolve texture usage must include COLOR_TARGET!"); - } - } - } - } - - if (depth_stencil_target_info != NULL) { - - TextureCommonHeader *textureHeader = (TextureCommonHeader *)depth_stencil_target_info->texture; - if (!(textureHeader->info.usage & SDL_GPU_TEXTUREUSAGE_DEPTH_STENCIL_TARGET)) { - SDL_assert_release(!"Depth target must have been created with the DEPTH_STENCIL_TARGET usage flag!"); - } - - if (depth_stencil_target_info->cycle && (depth_stencil_target_info->load_op == SDL_GPU_LOADOP_LOAD || depth_stencil_target_info->stencil_load_op == SDL_GPU_LOADOP_LOAD)) { - SDL_assert_release(!"Cannot cycle depth target when load op or stencil load op is LOAD!"); - } - - if (depth_stencil_target_info->store_op == SDL_GPU_STOREOP_RESOLVE || - depth_stencil_target_info->stencil_store_op == SDL_GPU_STOREOP_RESOLVE || - depth_stencil_target_info->store_op == SDL_GPU_STOREOP_RESOLVE_AND_STORE || - depth_stencil_target_info->stencil_store_op == SDL_GPU_STOREOP_RESOLVE_AND_STORE) { - SDL_assert_release(!"RESOLVE store ops are not supported for depth-stencil targets!"); - } - } - } - - COMMAND_BUFFER_DEVICE->BeginRenderPass( - command_buffer, - color_target_infos, - num_color_targets, - depth_stencil_target_info); - - commandBufferHeader = (CommandBufferCommonHeader *)command_buffer; - commandBufferHeader->render_pass.in_progress = true; - return (SDL_GPURenderPass *)&(commandBufferHeader->render_pass); -} - -void SDL_BindGPUGraphicsPipeline( - SDL_GPURenderPass *render_pass, - SDL_GPUGraphicsPipeline *graphics_pipeline) -{ - CommandBufferCommonHeader *commandBufferHeader; - - if (render_pass == NULL) { - SDL_InvalidParamError("render_pass"); - return; - } - if (graphics_pipeline == NULL) { - SDL_InvalidParamError("graphics_pipeline"); - return; - } - - RENDERPASS_DEVICE->BindGraphicsPipeline( - RENDERPASS_COMMAND_BUFFER, - graphics_pipeline); - - commandBufferHeader = (CommandBufferCommonHeader *)RENDERPASS_COMMAND_BUFFER; - commandBufferHeader->graphics_pipeline_bound = true; -} - -void SDL_SetGPUViewport( - SDL_GPURenderPass *render_pass, - const SDL_GPUViewport *viewport) -{ - if (render_pass == NULL) { - SDL_InvalidParamError("render_pass"); - return; - } - if (viewport == NULL) { - SDL_InvalidParamError("viewport"); - return; - } - - if (RENDERPASS_DEVICE->debug_mode) { - CHECK_RENDERPASS - } - - RENDERPASS_DEVICE->SetViewport( - RENDERPASS_COMMAND_BUFFER, - viewport); -} - -void SDL_SetGPUScissor( - SDL_GPURenderPass *render_pass, - const SDL_Rect *scissor) -{ - if (render_pass == NULL) { - SDL_InvalidParamError("render_pass"); - return; - } - if (scissor == NULL) { - SDL_InvalidParamError("scissor"); - return; - } - - if (RENDERPASS_DEVICE->debug_mode) { - CHECK_RENDERPASS - } - - RENDERPASS_DEVICE->SetScissor( - RENDERPASS_COMMAND_BUFFER, - scissor); -} - -void SDL_SetGPUBlendConstants( - SDL_GPURenderPass *render_pass, - SDL_FColor blend_constants) -{ - if (render_pass == NULL) { - SDL_InvalidParamError("render_pass"); - return; - } - - if (RENDERPASS_DEVICE->debug_mode) { - CHECK_RENDERPASS - } - - RENDERPASS_DEVICE->SetBlendConstants( - RENDERPASS_COMMAND_BUFFER, - blend_constants); -} - -void SDL_SetGPUStencilReference( - SDL_GPURenderPass *render_pass, - Uint8 reference) -{ - if (render_pass == NULL) { - SDL_InvalidParamError("render_pass"); - return; - } - - if (RENDERPASS_DEVICE->debug_mode) { - CHECK_RENDERPASS - } - - RENDERPASS_DEVICE->SetStencilReference( - RENDERPASS_COMMAND_BUFFER, - reference); -} - -void SDL_BindGPUVertexBuffers( - SDL_GPURenderPass *render_pass, - Uint32 first_binding, - const SDL_GPUBufferBinding *bindings, - Uint32 num_bindings) -{ - if (render_pass == NULL) { - SDL_InvalidParamError("render_pass"); - return; - } - if (bindings == NULL && num_bindings > 0) { - SDL_InvalidParamError("bindings"); - return; - } - - if (RENDERPASS_DEVICE->debug_mode) { - CHECK_RENDERPASS - } - - RENDERPASS_DEVICE->BindVertexBuffers( - RENDERPASS_COMMAND_BUFFER, - first_binding, - bindings, - num_bindings); -} - -void SDL_BindGPUIndexBuffer( - SDL_GPURenderPass *render_pass, - const SDL_GPUBufferBinding *binding, - SDL_GPUIndexElementSize index_element_size) -{ - if (render_pass == NULL) { - SDL_InvalidParamError("render_pass"); - return; - } - if (binding == NULL) { - SDL_InvalidParamError("binding"); - return; - } - - if (RENDERPASS_DEVICE->debug_mode) { - CHECK_RENDERPASS - } - - RENDERPASS_DEVICE->BindIndexBuffer( - RENDERPASS_COMMAND_BUFFER, - binding, - index_element_size); -} - -void SDL_BindGPUVertexSamplers( - SDL_GPURenderPass *render_pass, - Uint32 first_slot, - const SDL_GPUTextureSamplerBinding *texture_sampler_bindings, - Uint32 num_bindings) -{ - if (render_pass == NULL) { - SDL_InvalidParamError("render_pass"); - return; - } - if (texture_sampler_bindings == NULL && num_bindings > 0) { - SDL_InvalidParamError("texture_sampler_bindings"); - return; - } - - if (RENDERPASS_DEVICE->debug_mode) { - CHECK_RENDERPASS - } - - RENDERPASS_DEVICE->BindVertexSamplers( - RENDERPASS_COMMAND_BUFFER, - first_slot, - texture_sampler_bindings, - num_bindings); -} - -void SDL_BindGPUVertexStorageTextures( - SDL_GPURenderPass *render_pass, - Uint32 first_slot, - SDL_GPUTexture *const *storage_textures, - Uint32 num_bindings) -{ - if (render_pass == NULL) { - SDL_InvalidParamError("render_pass"); - return; - } - if (storage_textures == NULL && num_bindings > 0) { - SDL_InvalidParamError("storage_textures"); - return; - } - - if (RENDERPASS_DEVICE->debug_mode) { - CHECK_RENDERPASS - } - - RENDERPASS_DEVICE->BindVertexStorageTextures( - RENDERPASS_COMMAND_BUFFER, - first_slot, - storage_textures, - num_bindings); -} - -void SDL_BindGPUVertexStorageBuffers( - SDL_GPURenderPass *render_pass, - Uint32 first_slot, - SDL_GPUBuffer *const *storage_buffers, - Uint32 num_bindings) -{ - if (render_pass == NULL) { - SDL_InvalidParamError("render_pass"); - return; - } - if (storage_buffers == NULL && num_bindings > 0) { - SDL_InvalidParamError("storage_buffers"); - return; - } - - if (RENDERPASS_DEVICE->debug_mode) { - CHECK_RENDERPASS - } - - RENDERPASS_DEVICE->BindVertexStorageBuffers( - RENDERPASS_COMMAND_BUFFER, - first_slot, - storage_buffers, - num_bindings); -} - -void SDL_BindGPUFragmentSamplers( - SDL_GPURenderPass *render_pass, - Uint32 first_slot, - const SDL_GPUTextureSamplerBinding *texture_sampler_bindings, - Uint32 num_bindings) -{ - if (render_pass == NULL) { - SDL_InvalidParamError("render_pass"); - return; - } - if (texture_sampler_bindings == NULL && num_bindings > 0) { - SDL_InvalidParamError("texture_sampler_bindings"); - return; - } - - if (RENDERPASS_DEVICE->debug_mode) { - CHECK_RENDERPASS - } - - RENDERPASS_DEVICE->BindFragmentSamplers( - RENDERPASS_COMMAND_BUFFER, - first_slot, - texture_sampler_bindings, - num_bindings); -} - -void SDL_BindGPUFragmentStorageTextures( - SDL_GPURenderPass *render_pass, - Uint32 first_slot, - SDL_GPUTexture *const *storage_textures, - Uint32 num_bindings) -{ - if (render_pass == NULL) { - SDL_InvalidParamError("render_pass"); - return; - } - if (storage_textures == NULL && num_bindings > 0) { - SDL_InvalidParamError("storage_textures"); - return; - } - - if (RENDERPASS_DEVICE->debug_mode) { - CHECK_RENDERPASS - } - - RENDERPASS_DEVICE->BindFragmentStorageTextures( - RENDERPASS_COMMAND_BUFFER, - first_slot, - storage_textures, - num_bindings); -} - -void SDL_BindGPUFragmentStorageBuffers( - SDL_GPURenderPass *render_pass, - Uint32 first_slot, - SDL_GPUBuffer *const *storage_buffers, - Uint32 num_bindings) -{ - if (render_pass == NULL) { - SDL_InvalidParamError("render_pass"); - return; - } - if (storage_buffers == NULL && num_bindings > 0) { - SDL_InvalidParamError("storage_buffers"); - return; - } - - if (RENDERPASS_DEVICE->debug_mode) { - CHECK_RENDERPASS - } - - RENDERPASS_DEVICE->BindFragmentStorageBuffers( - RENDERPASS_COMMAND_BUFFER, - first_slot, - storage_buffers, - num_bindings); -} - -void SDL_DrawGPUIndexedPrimitives( - SDL_GPURenderPass *render_pass, - Uint32 num_indices, - Uint32 num_instances, - Uint32 first_index, - Sint32 vertex_offset, - Uint32 first_instance) -{ - if (render_pass == NULL) { - SDL_InvalidParamError("render_pass"); - return; - } - - if (RENDERPASS_DEVICE->debug_mode) { - CHECK_RENDERPASS - CHECK_GRAPHICS_PIPELINE_BOUND - } - - RENDERPASS_DEVICE->DrawIndexedPrimitives( - RENDERPASS_COMMAND_BUFFER, - num_indices, - num_instances, - first_index, - vertex_offset, - first_instance); -} - -void SDL_DrawGPUPrimitives( - SDL_GPURenderPass *render_pass, - Uint32 num_vertices, - Uint32 num_instances, - Uint32 first_vertex, - Uint32 first_instance) -{ - if (render_pass == NULL) { - SDL_InvalidParamError("render_pass"); - return; - } - - if (RENDERPASS_DEVICE->debug_mode) { - CHECK_RENDERPASS - CHECK_GRAPHICS_PIPELINE_BOUND - } - - RENDERPASS_DEVICE->DrawPrimitives( - RENDERPASS_COMMAND_BUFFER, - num_vertices, - num_instances, - first_vertex, - first_instance); -} - -void SDL_DrawGPUPrimitivesIndirect( - SDL_GPURenderPass *render_pass, - SDL_GPUBuffer *buffer, - Uint32 offset, - Uint32 draw_count) -{ - if (render_pass == NULL) { - SDL_InvalidParamError("render_pass"); - return; - } - if (buffer == NULL) { - SDL_InvalidParamError("buffer"); - return; - } - - if (RENDERPASS_DEVICE->debug_mode) { - CHECK_RENDERPASS - CHECK_GRAPHICS_PIPELINE_BOUND - } - - RENDERPASS_DEVICE->DrawPrimitivesIndirect( - RENDERPASS_COMMAND_BUFFER, - buffer, - offset, - draw_count); -} - -void SDL_DrawGPUIndexedPrimitivesIndirect( - SDL_GPURenderPass *render_pass, - SDL_GPUBuffer *buffer, - Uint32 offset, - Uint32 draw_count) -{ - if (render_pass == NULL) { - SDL_InvalidParamError("render_pass"); - return; - } - if (buffer == NULL) { - SDL_InvalidParamError("buffer"); - return; - } - - if (RENDERPASS_DEVICE->debug_mode) { - CHECK_RENDERPASS - CHECK_GRAPHICS_PIPELINE_BOUND - } - - RENDERPASS_DEVICE->DrawIndexedPrimitivesIndirect( - RENDERPASS_COMMAND_BUFFER, - buffer, - offset, - draw_count); -} - -void SDL_EndGPURenderPass( - SDL_GPURenderPass *render_pass) -{ - CommandBufferCommonHeader *commandBufferCommonHeader; - - if (render_pass == NULL) { - SDL_InvalidParamError("render_pass"); - return; - } - - if (RENDERPASS_DEVICE->debug_mode) { - CHECK_RENDERPASS - } - - RENDERPASS_DEVICE->EndRenderPass( - RENDERPASS_COMMAND_BUFFER); - - commandBufferCommonHeader = (CommandBufferCommonHeader *)RENDERPASS_COMMAND_BUFFER; - commandBufferCommonHeader->render_pass.in_progress = false; - commandBufferCommonHeader->graphics_pipeline_bound = false; -} - -// Compute Pass - -SDL_GPUComputePass *SDL_BeginGPUComputePass( - SDL_GPUCommandBuffer *command_buffer, - const SDL_GPUStorageTextureReadWriteBinding *storage_texture_bindings, - Uint32 num_storage_texture_bindings, - const SDL_GPUStorageBufferReadWriteBinding *storage_buffer_bindings, - Uint32 num_storage_buffer_bindings) -{ - CommandBufferCommonHeader *commandBufferHeader; - - if (command_buffer == NULL) { - SDL_InvalidParamError("command_buffer"); - return NULL; - } - if (storage_texture_bindings == NULL && num_storage_texture_bindings > 0) { - SDL_InvalidParamError("storage_texture_bindings"); - return NULL; - } - if (storage_buffer_bindings == NULL && num_storage_buffer_bindings > 0) { - SDL_InvalidParamError("storage_buffer_bindings"); - return NULL; - } - if (num_storage_texture_bindings > MAX_COMPUTE_WRITE_TEXTURES) { - SDL_InvalidParamError("num_storage_texture_bindings"); - return NULL; - } - if (num_storage_buffer_bindings > MAX_COMPUTE_WRITE_BUFFERS) { - SDL_InvalidParamError("num_storage_buffer_bindings"); - return NULL; - } - if (COMMAND_BUFFER_DEVICE->debug_mode) { - CHECK_COMMAND_BUFFER_RETURN_NULL - CHECK_ANY_PASS_IN_PROGRESS("Cannot begin compute pass during another pass!", NULL) - - for (Uint32 i = 0; i < num_storage_texture_bindings; i += 1) { - TextureCommonHeader *header = (TextureCommonHeader *)storage_texture_bindings[i].texture; - if (!(header->info.usage & SDL_GPU_TEXTUREUSAGE_COMPUTE_STORAGE_WRITE) && !(header->info.usage & SDL_GPU_TEXTUREUSAGE_COMPUTE_STORAGE_SIMULTANEOUS_READ_WRITE)) { - SDL_assert_release(!"Texture must be created with COMPUTE_STORAGE_WRITE or COMPUTE_STORAGE_SIMULTANEOUS_READ_WRITE flag"); - return NULL; - } - } - - // TODO: validate buffer usage? - } - - COMMAND_BUFFER_DEVICE->BeginComputePass( - command_buffer, - storage_texture_bindings, - num_storage_texture_bindings, - storage_buffer_bindings, - num_storage_buffer_bindings); - - commandBufferHeader = (CommandBufferCommonHeader *)command_buffer; - commandBufferHeader->compute_pass.in_progress = true; - return (SDL_GPUComputePass *)&(commandBufferHeader->compute_pass); -} - -void SDL_BindGPUComputePipeline( - SDL_GPUComputePass *compute_pass, - SDL_GPUComputePipeline *compute_pipeline) -{ - CommandBufferCommonHeader *commandBufferHeader; - - if (compute_pass == NULL) { - SDL_InvalidParamError("compute_pass"); - return; - } - if (compute_pipeline == NULL) { - SDL_InvalidParamError("compute_pipeline"); - return; - } - - if (COMPUTEPASS_DEVICE->debug_mode) { - CHECK_COMPUTEPASS - } - - COMPUTEPASS_DEVICE->BindComputePipeline( - COMPUTEPASS_COMMAND_BUFFER, - compute_pipeline); - - commandBufferHeader = (CommandBufferCommonHeader *)COMPUTEPASS_COMMAND_BUFFER; - commandBufferHeader->compute_pipeline_bound = true; -} - -void SDL_BindGPUComputeSamplers( - SDL_GPUComputePass *compute_pass, - Uint32 first_slot, - const SDL_GPUTextureSamplerBinding *texture_sampler_bindings, - Uint32 num_bindings) -{ - if (compute_pass == NULL) { - SDL_InvalidParamError("compute_pass"); - return; - } - if (texture_sampler_bindings == NULL && num_bindings > 0) { - SDL_InvalidParamError("texture_sampler_bindings"); - return; - } - - if (COMPUTEPASS_DEVICE->debug_mode) { - CHECK_COMPUTEPASS - } - - COMPUTEPASS_DEVICE->BindComputeSamplers( - COMPUTEPASS_COMMAND_BUFFER, - first_slot, - texture_sampler_bindings, - num_bindings); -} - -void SDL_BindGPUComputeStorageTextures( - SDL_GPUComputePass *compute_pass, - Uint32 first_slot, - SDL_GPUTexture *const *storage_textures, - Uint32 num_bindings) -{ - if (compute_pass == NULL) { - SDL_InvalidParamError("compute_pass"); - return; - } - if (storage_textures == NULL && num_bindings > 0) { - SDL_InvalidParamError("storage_textures"); - return; - } - - if (COMPUTEPASS_DEVICE->debug_mode) { - CHECK_COMPUTEPASS - } - - COMPUTEPASS_DEVICE->BindComputeStorageTextures( - COMPUTEPASS_COMMAND_BUFFER, - first_slot, - storage_textures, - num_bindings); -} - -void SDL_BindGPUComputeStorageBuffers( - SDL_GPUComputePass *compute_pass, - Uint32 first_slot, - SDL_GPUBuffer *const *storage_buffers, - Uint32 num_bindings) -{ - if (compute_pass == NULL) { - SDL_InvalidParamError("compute_pass"); - return; - } - if (storage_buffers == NULL && num_bindings > 0) { - SDL_InvalidParamError("storage_buffers"); - return; - } - - if (COMPUTEPASS_DEVICE->debug_mode) { - CHECK_COMPUTEPASS - } - - COMPUTEPASS_DEVICE->BindComputeStorageBuffers( - COMPUTEPASS_COMMAND_BUFFER, - first_slot, - storage_buffers, - num_bindings); -} - -void SDL_DispatchGPUCompute( - SDL_GPUComputePass *compute_pass, - Uint32 groupcount_x, - Uint32 groupcount_y, - Uint32 groupcount_z) -{ - if (compute_pass == NULL) { - SDL_InvalidParamError("compute_pass"); - return; - } - - if (COMPUTEPASS_DEVICE->debug_mode) { - CHECK_COMPUTEPASS - CHECK_COMPUTE_PIPELINE_BOUND - } - - COMPUTEPASS_DEVICE->DispatchCompute( - COMPUTEPASS_COMMAND_BUFFER, - groupcount_x, - groupcount_y, - groupcount_z); -} - -void SDL_DispatchGPUComputeIndirect( - SDL_GPUComputePass *compute_pass, - SDL_GPUBuffer *buffer, - Uint32 offset) -{ - if (compute_pass == NULL) { - SDL_InvalidParamError("compute_pass"); - return; - } - - if (COMPUTEPASS_DEVICE->debug_mode) { - CHECK_COMPUTEPASS - CHECK_COMPUTE_PIPELINE_BOUND - } - - COMPUTEPASS_DEVICE->DispatchComputeIndirect( - COMPUTEPASS_COMMAND_BUFFER, - buffer, - offset); -} - -void SDL_EndGPUComputePass( - SDL_GPUComputePass *compute_pass) -{ - CommandBufferCommonHeader *commandBufferCommonHeader; - - if (compute_pass == NULL) { - SDL_InvalidParamError("compute_pass"); - return; - } - - if (COMPUTEPASS_DEVICE->debug_mode) { - CHECK_COMPUTEPASS - } - - COMPUTEPASS_DEVICE->EndComputePass( - COMPUTEPASS_COMMAND_BUFFER); - - commandBufferCommonHeader = (CommandBufferCommonHeader *)COMPUTEPASS_COMMAND_BUFFER; - commandBufferCommonHeader->compute_pass.in_progress = false; - commandBufferCommonHeader->compute_pipeline_bound = false; -} - -// TransferBuffer Data - -void *SDL_MapGPUTransferBuffer( - SDL_GPUDevice *device, - SDL_GPUTransferBuffer *transfer_buffer, - bool cycle) -{ - CHECK_DEVICE_MAGIC(device, NULL); - if (transfer_buffer == NULL) { - SDL_InvalidParamError("transfer_buffer"); - return NULL; - } - - return device->MapTransferBuffer( - device->driverData, - transfer_buffer, - cycle); -} - -void SDL_UnmapGPUTransferBuffer( - SDL_GPUDevice *device, - SDL_GPUTransferBuffer *transfer_buffer) -{ - CHECK_DEVICE_MAGIC(device, ); - if (transfer_buffer == NULL) { - SDL_InvalidParamError("transfer_buffer"); - return; - } - - device->UnmapTransferBuffer( - device->driverData, - transfer_buffer); -} - -// Copy Pass - -SDL_GPUCopyPass *SDL_BeginGPUCopyPass( - SDL_GPUCommandBuffer *command_buffer) -{ - CommandBufferCommonHeader *commandBufferHeader; - - if (command_buffer == NULL) { - SDL_InvalidParamError("command_buffer"); - return NULL; - } - - if (COMMAND_BUFFER_DEVICE->debug_mode) { - CHECK_COMMAND_BUFFER_RETURN_NULL - CHECK_ANY_PASS_IN_PROGRESS("Cannot begin copy pass during another pass!", NULL) - } - - COMMAND_BUFFER_DEVICE->BeginCopyPass( - command_buffer); - - commandBufferHeader = (CommandBufferCommonHeader *)command_buffer; - commandBufferHeader->copy_pass.in_progress = true; - return (SDL_GPUCopyPass *)&(commandBufferHeader->copy_pass); -} - -void SDL_UploadToGPUTexture( - SDL_GPUCopyPass *copy_pass, - const SDL_GPUTextureTransferInfo *source, - const SDL_GPUTextureRegion *destination, - bool cycle) -{ - if (copy_pass == NULL) { - SDL_InvalidParamError("copy_pass"); - return; - } - if (source == NULL) { - SDL_InvalidParamError("source"); - return; - } - if (destination == NULL) { - SDL_InvalidParamError("destination"); - return; - } - - if (COPYPASS_DEVICE->debug_mode) { - CHECK_COPYPASS - if (source->transfer_buffer == NULL) { - SDL_assert_release(!"Source transfer buffer cannot be NULL!"); - return; - } - if (destination->texture == NULL) { - SDL_assert_release(!"Destination texture cannot be NULL!"); - return; - } - } - - COPYPASS_DEVICE->UploadToTexture( - COPYPASS_COMMAND_BUFFER, - source, - destination, - cycle); -} - -void SDL_UploadToGPUBuffer( - SDL_GPUCopyPass *copy_pass, - const SDL_GPUTransferBufferLocation *source, - const SDL_GPUBufferRegion *destination, - bool cycle) -{ - if (copy_pass == NULL) { - SDL_InvalidParamError("copy_pass"); - return; - } - if (source == NULL) { - SDL_InvalidParamError("source"); - return; - } - if (destination == NULL) { - SDL_InvalidParamError("destination"); - return; - } - - if (COPYPASS_DEVICE->debug_mode) { - CHECK_COPYPASS - if (source->transfer_buffer == NULL) { - SDL_assert_release(!"Source transfer buffer cannot be NULL!"); - return; - } - if (destination->buffer == NULL) { - SDL_assert_release(!"Destination buffer cannot be NULL!"); - return; - } - } - - COPYPASS_DEVICE->UploadToBuffer( - COPYPASS_COMMAND_BUFFER, - source, - destination, - cycle); -} - -void SDL_CopyGPUTextureToTexture( - SDL_GPUCopyPass *copy_pass, - const SDL_GPUTextureLocation *source, - const SDL_GPUTextureLocation *destination, - Uint32 w, - Uint32 h, - Uint32 d, - bool cycle) -{ - if (copy_pass == NULL) { - SDL_InvalidParamError("copy_pass"); - return; - } - if (source == NULL) { - SDL_InvalidParamError("source"); - return; - } - if (destination == NULL) { - SDL_InvalidParamError("destination"); - return; - } - - if (COPYPASS_DEVICE->debug_mode) { - CHECK_COPYPASS - if (source->texture == NULL) { - SDL_assert_release(!"Source texture cannot be NULL!"); - return; - } - if (destination->texture == NULL) { - SDL_assert_release(!"Destination texture cannot be NULL!"); - return; - } - } - - COPYPASS_DEVICE->CopyTextureToTexture( - COPYPASS_COMMAND_BUFFER, - source, - destination, - w, - h, - d, - cycle); -} - -void SDL_CopyGPUBufferToBuffer( - SDL_GPUCopyPass *copy_pass, - const SDL_GPUBufferLocation *source, - const SDL_GPUBufferLocation *destination, - Uint32 size, - bool cycle) -{ - if (copy_pass == NULL) { - SDL_InvalidParamError("copy_pass"); - return; - } - if (source == NULL) { - SDL_InvalidParamError("source"); - return; - } - if (destination == NULL) { - SDL_InvalidParamError("destination"); - return; - } - - if (COPYPASS_DEVICE->debug_mode) { - CHECK_COPYPASS - if (source->buffer == NULL) { - SDL_assert_release(!"Source buffer cannot be NULL!"); - return; - } - if (destination->buffer == NULL) { - SDL_assert_release(!"Destination buffer cannot be NULL!"); - return; - } - } - - COPYPASS_DEVICE->CopyBufferToBuffer( - COPYPASS_COMMAND_BUFFER, - source, - destination, - size, - cycle); -} - -void SDL_DownloadFromGPUTexture( - SDL_GPUCopyPass *copy_pass, - const SDL_GPUTextureRegion *source, - const SDL_GPUTextureTransferInfo *destination) -{ - if (copy_pass == NULL) { - SDL_InvalidParamError("copy_pass"); - return; - } - if (source == NULL) { - SDL_InvalidParamError("source"); - return; - } - if (destination == NULL) { - SDL_InvalidParamError("destination"); - return; - } - - if (COPYPASS_DEVICE->debug_mode) { - CHECK_COPYPASS - if (source->texture == NULL) { - SDL_assert_release(!"Source texture cannot be NULL!"); - return; - } - if (destination->transfer_buffer == NULL) { - SDL_assert_release(!"Destination transfer buffer cannot be NULL!"); - return; - } - } - - COPYPASS_DEVICE->DownloadFromTexture( - COPYPASS_COMMAND_BUFFER, - source, - destination); -} - -void SDL_DownloadFromGPUBuffer( - SDL_GPUCopyPass *copy_pass, - const SDL_GPUBufferRegion *source, - const SDL_GPUTransferBufferLocation *destination) -{ - if (copy_pass == NULL) { - SDL_InvalidParamError("copy_pass"); - return; - } - if (source == NULL) { - SDL_InvalidParamError("source"); - return; - } - if (destination == NULL) { - SDL_InvalidParamError("destination"); - return; - } - - if (COPYPASS_DEVICE->debug_mode) { - CHECK_COPYPASS - if (source->buffer == NULL) { - SDL_assert_release(!"Source buffer cannot be NULL!"); - return; - } - if (destination->transfer_buffer == NULL) { - SDL_assert_release(!"Destination transfer buffer cannot be NULL!"); - return; - } - } - - COPYPASS_DEVICE->DownloadFromBuffer( - COPYPASS_COMMAND_BUFFER, - source, - destination); -} - -void SDL_EndGPUCopyPass( - SDL_GPUCopyPass *copy_pass) -{ - if (copy_pass == NULL) { - SDL_InvalidParamError("copy_pass"); - return; - } - - if (COPYPASS_DEVICE->debug_mode) { - CHECK_COPYPASS - } - - COPYPASS_DEVICE->EndCopyPass( - COPYPASS_COMMAND_BUFFER); - - ((CommandBufferCommonHeader *)COPYPASS_COMMAND_BUFFER)->copy_pass.in_progress = false; -} - -void SDL_GenerateMipmapsForGPUTexture( - SDL_GPUCommandBuffer *command_buffer, - SDL_GPUTexture *texture) -{ - if (command_buffer == NULL) { - SDL_InvalidParamError("command_buffer"); - return; - } - if (texture == NULL) { - SDL_InvalidParamError("texture"); - return; - } - - if (COMMAND_BUFFER_DEVICE->debug_mode) { - CHECK_COMMAND_BUFFER - CHECK_ANY_PASS_IN_PROGRESS("Cannot generate mipmaps during a pass!", ) - - TextureCommonHeader *header = (TextureCommonHeader *)texture; - if (header->info.num_levels <= 1) { - SDL_assert_release(!"Cannot generate mipmaps for texture with num_levels <= 1!"); - return; - } - - if (!(header->info.usage & SDL_GPU_TEXTUREUSAGE_SAMPLER) || !(header->info.usage & SDL_GPU_TEXTUREUSAGE_COLOR_TARGET)) { - SDL_assert_release(!"GenerateMipmaps texture must be created with SAMPLER and COLOR_TARGET usage flags!"); - return; - } - } - - COMMAND_BUFFER_DEVICE->GenerateMipmaps( - command_buffer, - texture); -} - -void SDL_BlitGPUTexture( - SDL_GPUCommandBuffer *command_buffer, - const SDL_GPUBlitInfo *info) -{ - if (command_buffer == NULL) { - SDL_InvalidParamError("command_buffer"); - return; - } - if (info == NULL) { - SDL_InvalidParamError("info"); - return; - } - - if (COMMAND_BUFFER_DEVICE->debug_mode) { - CHECK_COMMAND_BUFFER - CHECK_ANY_PASS_IN_PROGRESS("Cannot blit during a pass!", ) - - // Validation - bool failed = false; - TextureCommonHeader *srcHeader = (TextureCommonHeader *)info->source.texture; - TextureCommonHeader *dstHeader = (TextureCommonHeader *)info->destination.texture; - - if (srcHeader == NULL) { - SDL_assert_release(!"Blit source texture must be non-NULL"); - return; // attempting to proceed will crash - } - if (dstHeader == NULL) { - SDL_assert_release(!"Blit destination texture must be non-NULL"); - return; // attempting to proceed will crash - } - if (srcHeader->info.sample_count != SDL_GPU_SAMPLECOUNT_1) { - SDL_assert_release(!"Blit source texture must have a sample count of 1"); - failed = true; - } - if ((srcHeader->info.usage & SDL_GPU_TEXTUREUSAGE_SAMPLER) == 0) { - SDL_assert_release(!"Blit source texture must be created with the SAMPLER usage flag"); - failed = true; - } - if ((dstHeader->info.usage & SDL_GPU_TEXTUREUSAGE_COLOR_TARGET) == 0) { - SDL_assert_release(!"Blit destination texture must be created with the COLOR_TARGET usage flag"); - failed = true; - } - if (IsDepthFormat(srcHeader->info.format)) { - SDL_assert_release(!"Blit source texture cannot have a depth format"); - failed = true; - } - if (info->source.w == 0 || info->source.h == 0 || info->destination.w == 0 || info->destination.h == 0) { - SDL_assert_release(!"Blit source/destination regions must have non-zero width, height, and depth"); - failed = true; - } - - if (failed) { - return; - } - } - - COMMAND_BUFFER_DEVICE->Blit( - command_buffer, - info); -} - -// Submission/Presentation - -bool SDL_WindowSupportsGPUSwapchainComposition( - SDL_GPUDevice *device, - SDL_Window *window, - SDL_GPUSwapchainComposition swapchain_composition) -{ - CHECK_DEVICE_MAGIC(device, false); - if (window == NULL) { - SDL_InvalidParamError("window"); - return false; - } - - if (device->debug_mode) { - CHECK_SWAPCHAINCOMPOSITION_ENUM_INVALID(swapchain_composition, false) - } - - return device->SupportsSwapchainComposition( - device->driverData, - window, - swapchain_composition); -} - -bool SDL_WindowSupportsGPUPresentMode( - SDL_GPUDevice *device, - SDL_Window *window, - SDL_GPUPresentMode present_mode) -{ - CHECK_DEVICE_MAGIC(device, false); - if (window == NULL) { - SDL_InvalidParamError("window"); - return false; - } - - if (device->debug_mode) { - CHECK_PRESENTMODE_ENUM_INVALID(present_mode, false) - } - - return device->SupportsPresentMode( - device->driverData, - window, - present_mode); -} - -bool SDL_ClaimWindowForGPUDevice( - SDL_GPUDevice *device, - SDL_Window *window) -{ - CHECK_DEVICE_MAGIC(device, false); - if (window == NULL) { - SDL_InvalidParamError("window"); - return false; - } - - return device->ClaimWindow( - device->driverData, - window); -} - -void SDL_ReleaseWindowFromGPUDevice( - SDL_GPUDevice *device, - SDL_Window *window) -{ - CHECK_DEVICE_MAGIC(device, ); - if (window == NULL) { - SDL_InvalidParamError("window"); - return; - } - - device->ReleaseWindow( - device->driverData, - window); -} - -bool SDL_SetGPUSwapchainParameters( - SDL_GPUDevice *device, - SDL_Window *window, - SDL_GPUSwapchainComposition swapchain_composition, - SDL_GPUPresentMode present_mode) -{ - CHECK_DEVICE_MAGIC(device, false); - if (window == NULL) { - SDL_InvalidParamError("window"); - return false; - } - - if (device->debug_mode) { - CHECK_SWAPCHAINCOMPOSITION_ENUM_INVALID(swapchain_composition, false) - CHECK_PRESENTMODE_ENUM_INVALID(present_mode, false) - } - - return device->SetSwapchainParameters( - device->driverData, - window, - swapchain_composition, - present_mode); -} - -bool SDL_SetGPUAllowedFramesInFlight( - SDL_GPUDevice *device, - Uint32 allowed_frames_in_flight) -{ - CHECK_DEVICE_MAGIC(device, false); - - if (device->debug_mode) { - if (allowed_frames_in_flight < 1 || allowed_frames_in_flight > 3) - { - SDL_assert_release(!"allowed_frames_in_flight value must be between 1 and 3!"); - } - } - - allowed_frames_in_flight = SDL_clamp(allowed_frames_in_flight, 1, 3); - return device->SetAllowedFramesInFlight( - device->driverData, - allowed_frames_in_flight); -} - -SDL_GPUTextureFormat SDL_GetGPUSwapchainTextureFormat( - SDL_GPUDevice *device, - SDL_Window *window) -{ - CHECK_DEVICE_MAGIC(device, SDL_GPU_TEXTUREFORMAT_INVALID); - if (window == NULL) { - SDL_InvalidParamError("window"); - return SDL_GPU_TEXTUREFORMAT_INVALID; - } - - return device->GetSwapchainTextureFormat( - device->driverData, - window); -} - -bool SDL_AcquireGPUSwapchainTexture( - SDL_GPUCommandBuffer *command_buffer, - SDL_Window *window, - SDL_GPUTexture **swapchain_texture, - Uint32 *swapchain_texture_width, - Uint32 *swapchain_texture_height) -{ - CommandBufferCommonHeader *commandBufferHeader = (CommandBufferCommonHeader *)command_buffer; - - if (command_buffer == NULL) { - return SDL_InvalidParamError("command_buffer"); - } - if (window == NULL) { - return SDL_InvalidParamError("window"); - } - if (swapchain_texture == NULL) { - return SDL_InvalidParamError("swapchain_texture"); - } - - if (COMMAND_BUFFER_DEVICE->debug_mode) { - CHECK_COMMAND_BUFFER_RETURN_FALSE - CHECK_ANY_PASS_IN_PROGRESS("Cannot acquire a swapchain texture during a pass!", false) - } - - bool result = COMMAND_BUFFER_DEVICE->AcquireSwapchainTexture( - command_buffer, - window, - swapchain_texture, - swapchain_texture_width, - swapchain_texture_height); - - if (*swapchain_texture != NULL){ - commandBufferHeader->swapchain_texture_acquired = true; - } - - return result; -} - -bool SDL_WaitForGPUSwapchain( - SDL_GPUDevice *device, - SDL_Window *window) -{ - CHECK_DEVICE_MAGIC(device, false); - - if (window == NULL) { - return SDL_InvalidParamError("window"); - } - - return device->WaitForSwapchain( - device->driverData, - window); -} - -bool SDL_WaitAndAcquireGPUSwapchainTexture( - SDL_GPUCommandBuffer *command_buffer, - SDL_Window *window, - SDL_GPUTexture **swapchain_texture, - Uint32 *swapchain_texture_width, - Uint32 *swapchain_texture_height) -{ - CommandBufferCommonHeader *commandBufferHeader = (CommandBufferCommonHeader *)command_buffer; - - if (command_buffer == NULL) { - return SDL_InvalidParamError("command_buffer"); - } - if (window == NULL) { - return SDL_InvalidParamError("window"); - } - if (swapchain_texture == NULL) { - return SDL_InvalidParamError("swapchain_texture"); - } - - if (COMMAND_BUFFER_DEVICE->debug_mode) { - CHECK_COMMAND_BUFFER_RETURN_FALSE - CHECK_ANY_PASS_IN_PROGRESS("Cannot acquire a swapchain texture during a pass!", false) - } - - bool result = COMMAND_BUFFER_DEVICE->WaitAndAcquireSwapchainTexture( - command_buffer, - window, - swapchain_texture, - swapchain_texture_width, - swapchain_texture_height); - - if (*swapchain_texture != NULL){ - commandBufferHeader->swapchain_texture_acquired = true; - } - - return result; -} - -bool SDL_SubmitGPUCommandBuffer( - SDL_GPUCommandBuffer *command_buffer) -{ - CommandBufferCommonHeader *commandBufferHeader = (CommandBufferCommonHeader *)command_buffer; - - if (command_buffer == NULL) { - SDL_InvalidParamError("command_buffer"); - return false; - } - - if (COMMAND_BUFFER_DEVICE->debug_mode) { - CHECK_COMMAND_BUFFER_RETURN_FALSE - if ( - commandBufferHeader->render_pass.in_progress || - commandBufferHeader->compute_pass.in_progress || - commandBufferHeader->copy_pass.in_progress) { - SDL_assert_release(!"Cannot submit command buffer while a pass is in progress!"); - return false; - } - } - - commandBufferHeader->submitted = true; - - return COMMAND_BUFFER_DEVICE->Submit( - command_buffer); -} - -SDL_GPUFence *SDL_SubmitGPUCommandBufferAndAcquireFence( - SDL_GPUCommandBuffer *command_buffer) -{ - CommandBufferCommonHeader *commandBufferHeader = (CommandBufferCommonHeader *)command_buffer; - - if (command_buffer == NULL) { - SDL_InvalidParamError("command_buffer"); - return NULL; - } - - if (COMMAND_BUFFER_DEVICE->debug_mode) { - CHECK_COMMAND_BUFFER_RETURN_NULL - if ( - commandBufferHeader->render_pass.in_progress || - commandBufferHeader->compute_pass.in_progress || - commandBufferHeader->copy_pass.in_progress) { - SDL_assert_release(!"Cannot submit command buffer while a pass is in progress!"); - return NULL; - } - } - - commandBufferHeader->submitted = true; - - return COMMAND_BUFFER_DEVICE->SubmitAndAcquireFence( - command_buffer); -} - -bool SDL_CancelGPUCommandBuffer( - SDL_GPUCommandBuffer *command_buffer) -{ - CommandBufferCommonHeader *commandBufferHeader = (CommandBufferCommonHeader *)command_buffer; - - if (command_buffer == NULL) { - SDL_InvalidParamError("command_buffer"); - return false; - } - - if (COMMAND_BUFFER_DEVICE->debug_mode) { - if (commandBufferHeader->swapchain_texture_acquired) { - SDL_assert_release(!"Cannot cancel command buffer after a swapchain texture has been acquired!"); - return false; - } - } - - return COMMAND_BUFFER_DEVICE->Cancel( - command_buffer); -} - -bool SDL_WaitForGPUIdle( - SDL_GPUDevice *device) -{ - CHECK_DEVICE_MAGIC(device, false); - - return device->Wait( - device->driverData); -} - -bool SDL_WaitForGPUFences( - SDL_GPUDevice *device, - bool wait_all, - SDL_GPUFence *const *fences, - Uint32 num_fences) -{ - CHECK_DEVICE_MAGIC(device, false); - if (fences == NULL && num_fences > 0) { - SDL_InvalidParamError("fences"); - return false; - } - - return device->WaitForFences( - device->driverData, - wait_all, - fences, - num_fences); -} - -bool SDL_QueryGPUFence( - SDL_GPUDevice *device, - SDL_GPUFence *fence) -{ - CHECK_DEVICE_MAGIC(device, false); - if (fence == NULL) { - SDL_InvalidParamError("fence"); - return false; - } - - return device->QueryFence( - device->driverData, - fence); -} - -void SDL_ReleaseGPUFence( - SDL_GPUDevice *device, - SDL_GPUFence *fence) -{ - CHECK_DEVICE_MAGIC(device, ); - if (fence == NULL) { - return; - } - - device->ReleaseFence( - device->driverData, - fence); -} - -Uint32 SDL_CalculateGPUTextureFormatSize( - SDL_GPUTextureFormat format, - Uint32 width, - Uint32 height, - Uint32 depth_or_layer_count) -{ - Uint32 blockWidth = SDL_max(Texture_GetBlockWidth(format), 1); - Uint32 blockHeight = SDL_max(Texture_GetBlockHeight(format), 1); - Uint32 blocksPerRow = (width + blockWidth - 1) / blockWidth; - Uint32 blocksPerColumn = (height + blockHeight - 1) / blockHeight; - return depth_or_layer_count * blocksPerRow * blocksPerColumn * SDL_GPUTextureFormatTexelBlockSize(format); -} diff --git a/contrib/SDL-3.2.8/src/gpu/SDL_sysgpu.h b/contrib/SDL-3.2.8/src/gpu/SDL_sysgpu.h deleted file mode 100644 index 6de1765..0000000 --- a/contrib/SDL-3.2.8/src/gpu/SDL_sysgpu.h +++ /dev/null @@ -1,998 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2025 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ -#include "../video/SDL_sysvideo.h" -#include "SDL_internal.h" - -#ifndef SDL_GPU_DRIVER_H -#define SDL_GPU_DRIVER_H - -// Common Structs - -typedef struct Pass -{ - SDL_GPUCommandBuffer *command_buffer; - bool in_progress; -} Pass; - -typedef struct CommandBufferCommonHeader -{ - SDL_GPUDevice *device; - Pass render_pass; - bool graphics_pipeline_bound; - Pass compute_pass; - bool compute_pipeline_bound; - Pass copy_pass; - bool swapchain_texture_acquired; - bool submitted; -} CommandBufferCommonHeader; - -typedef struct TextureCommonHeader -{ - SDL_GPUTextureCreateInfo info; -} TextureCommonHeader; - -typedef struct BlitFragmentUniforms -{ - // texcoord space - float left; - float top; - float width; - float height; - - Uint32 mip_level; - float layer_or_depth; -} BlitFragmentUniforms; - -typedef struct BlitPipelineCacheEntry -{ - SDL_GPUTextureType type; - SDL_GPUTextureFormat format; - SDL_GPUGraphicsPipeline *pipeline; -} BlitPipelineCacheEntry; - -// Internal Helper Utilities - -#define SDL_GPU_TEXTUREFORMAT_MAX_ENUM_VALUE (SDL_GPU_TEXTUREFORMAT_ASTC_12x12_FLOAT + 1) -#define SDL_GPU_VERTEXELEMENTFORMAT_MAX_ENUM_VALUE (SDL_GPU_VERTEXELEMENTFORMAT_HALF4 + 1) -#define SDL_GPU_COMPAREOP_MAX_ENUM_VALUE (SDL_GPU_COMPAREOP_ALWAYS + 1) -#define SDL_GPU_STENCILOP_MAX_ENUM_VALUE (SDL_GPU_STENCILOP_DECREMENT_AND_WRAP + 1) -#define SDL_GPU_BLENDOP_MAX_ENUM_VALUE (SDL_GPU_BLENDOP_MAX + 1) -#define SDL_GPU_BLENDFACTOR_MAX_ENUM_VALUE (SDL_GPU_BLENDFACTOR_SRC_ALPHA_SATURATE + 1) -#define SDL_GPU_SWAPCHAINCOMPOSITION_MAX_ENUM_VALUE (SDL_GPU_SWAPCHAINCOMPOSITION_HDR10_ST2084 + 1) -#define SDL_GPU_PRESENTMODE_MAX_ENUM_VALUE (SDL_GPU_PRESENTMODE_MAILBOX + 1) - -static inline Sint32 Texture_GetBlockWidth( - SDL_GPUTextureFormat format) -{ - switch (format) { - case SDL_GPU_TEXTUREFORMAT_ASTC_12x10_UNORM: - case SDL_GPU_TEXTUREFORMAT_ASTC_12x12_UNORM: - case SDL_GPU_TEXTUREFORMAT_ASTC_12x10_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_12x12_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_12x10_FLOAT: - case SDL_GPU_TEXTUREFORMAT_ASTC_12x12_FLOAT: - return 12; - case SDL_GPU_TEXTUREFORMAT_ASTC_10x5_UNORM: - case SDL_GPU_TEXTUREFORMAT_ASTC_10x6_UNORM: - case SDL_GPU_TEXTUREFORMAT_ASTC_10x8_UNORM: - case SDL_GPU_TEXTUREFORMAT_ASTC_10x10_UNORM: - case SDL_GPU_TEXTUREFORMAT_ASTC_10x5_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_10x6_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_10x8_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_10x10_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_10x5_FLOAT: - case SDL_GPU_TEXTUREFORMAT_ASTC_10x6_FLOAT: - case SDL_GPU_TEXTUREFORMAT_ASTC_10x8_FLOAT: - case SDL_GPU_TEXTUREFORMAT_ASTC_10x10_FLOAT: - return 10; - case SDL_GPU_TEXTUREFORMAT_ASTC_8x5_UNORM: - case SDL_GPU_TEXTUREFORMAT_ASTC_8x6_UNORM: - case SDL_GPU_TEXTUREFORMAT_ASTC_8x8_UNORM: - case SDL_GPU_TEXTUREFORMAT_ASTC_8x5_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_8x6_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_8x8_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_8x5_FLOAT: - case SDL_GPU_TEXTUREFORMAT_ASTC_8x6_FLOAT: - case SDL_GPU_TEXTUREFORMAT_ASTC_8x8_FLOAT: - return 8; - case SDL_GPU_TEXTUREFORMAT_ASTC_6x5_UNORM: - case SDL_GPU_TEXTUREFORMAT_ASTC_6x6_UNORM: - case SDL_GPU_TEXTUREFORMAT_ASTC_6x5_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_6x6_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_6x5_FLOAT: - case SDL_GPU_TEXTUREFORMAT_ASTC_6x6_FLOAT: - return 6; - case SDL_GPU_TEXTUREFORMAT_ASTC_5x4_UNORM: - case SDL_GPU_TEXTUREFORMAT_ASTC_5x5_UNORM: - case SDL_GPU_TEXTUREFORMAT_ASTC_5x4_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_5x5_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_5x4_FLOAT: - case SDL_GPU_TEXTUREFORMAT_ASTC_5x5_FLOAT: - return 5; - case SDL_GPU_TEXTUREFORMAT_BC1_RGBA_UNORM: - case SDL_GPU_TEXTUREFORMAT_BC2_RGBA_UNORM: - case SDL_GPU_TEXTUREFORMAT_BC3_RGBA_UNORM: - case SDL_GPU_TEXTUREFORMAT_BC4_R_UNORM: - case SDL_GPU_TEXTUREFORMAT_BC5_RG_UNORM: - case SDL_GPU_TEXTUREFORMAT_BC7_RGBA_UNORM: - case SDL_GPU_TEXTUREFORMAT_BC6H_RGB_FLOAT: - case SDL_GPU_TEXTUREFORMAT_BC6H_RGB_UFLOAT: - case SDL_GPU_TEXTUREFORMAT_BC1_RGBA_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_BC3_RGBA_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_BC7_RGBA_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_4x4_UNORM: - case SDL_GPU_TEXTUREFORMAT_ASTC_4x4_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_4x4_FLOAT: - return 4; - case SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM: - case SDL_GPU_TEXTUREFORMAT_B8G8R8A8_UNORM: - case SDL_GPU_TEXTUREFORMAT_B5G6R5_UNORM: - case SDL_GPU_TEXTUREFORMAT_B5G5R5A1_UNORM: - case SDL_GPU_TEXTUREFORMAT_B4G4R4A4_UNORM: - case SDL_GPU_TEXTUREFORMAT_R10G10B10A2_UNORM: - case SDL_GPU_TEXTUREFORMAT_R8G8_UNORM: - case SDL_GPU_TEXTUREFORMAT_R16G16_UNORM: - case SDL_GPU_TEXTUREFORMAT_R16G16B16A16_UNORM: - case SDL_GPU_TEXTUREFORMAT_R8_UNORM: - case SDL_GPU_TEXTUREFORMAT_R16_UNORM: - case SDL_GPU_TEXTUREFORMAT_A8_UNORM: - case SDL_GPU_TEXTUREFORMAT_R8_SNORM: - case SDL_GPU_TEXTUREFORMAT_R8G8_SNORM: - case SDL_GPU_TEXTUREFORMAT_R8G8B8A8_SNORM: - case SDL_GPU_TEXTUREFORMAT_R16_SNORM: - case SDL_GPU_TEXTUREFORMAT_R16G16_SNORM: - case SDL_GPU_TEXTUREFORMAT_R16G16B16A16_SNORM: - case SDL_GPU_TEXTUREFORMAT_R16_FLOAT: - case SDL_GPU_TEXTUREFORMAT_R16G16_FLOAT: - case SDL_GPU_TEXTUREFORMAT_R16G16B16A16_FLOAT: - case SDL_GPU_TEXTUREFORMAT_R32_FLOAT: - case SDL_GPU_TEXTUREFORMAT_R32G32_FLOAT: - case SDL_GPU_TEXTUREFORMAT_R32G32B32A32_FLOAT: - case SDL_GPU_TEXTUREFORMAT_R11G11B10_UFLOAT: - case SDL_GPU_TEXTUREFORMAT_R8_UINT: - case SDL_GPU_TEXTUREFORMAT_R8G8_UINT: - case SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UINT: - case SDL_GPU_TEXTUREFORMAT_R16_UINT: - case SDL_GPU_TEXTUREFORMAT_R16G16_UINT: - case SDL_GPU_TEXTUREFORMAT_R16G16B16A16_UINT: - case SDL_GPU_TEXTUREFORMAT_R32_UINT: - case SDL_GPU_TEXTUREFORMAT_R32G32_UINT: - case SDL_GPU_TEXTUREFORMAT_R32G32B32A32_UINT: - case SDL_GPU_TEXTUREFORMAT_R8_INT: - case SDL_GPU_TEXTUREFORMAT_R8G8_INT: - case SDL_GPU_TEXTUREFORMAT_R8G8B8A8_INT: - case SDL_GPU_TEXTUREFORMAT_R16_INT: - case SDL_GPU_TEXTUREFORMAT_R16G16_INT: - case SDL_GPU_TEXTUREFORMAT_R16G16B16A16_INT: - case SDL_GPU_TEXTUREFORMAT_R32_INT: - case SDL_GPU_TEXTUREFORMAT_R32G32_INT: - case SDL_GPU_TEXTUREFORMAT_R32G32B32A32_INT: - case SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_B8G8R8A8_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_D16_UNORM: - case SDL_GPU_TEXTUREFORMAT_D24_UNORM: - case SDL_GPU_TEXTUREFORMAT_D32_FLOAT: - case SDL_GPU_TEXTUREFORMAT_D24_UNORM_S8_UINT: - case SDL_GPU_TEXTUREFORMAT_D32_FLOAT_S8_UINT: - return 1; - default: - SDL_assert_release(!"Unrecognized TextureFormat!"); - return 0; - } -} - -static inline Sint32 Texture_GetBlockHeight( - SDL_GPUTextureFormat format) -{ - switch (format) { - case SDL_GPU_TEXTUREFORMAT_ASTC_12x12_UNORM: - case SDL_GPU_TEXTUREFORMAT_ASTC_12x12_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_12x12_FLOAT: - return 12; - case SDL_GPU_TEXTUREFORMAT_ASTC_12x10_UNORM: - case SDL_GPU_TEXTUREFORMAT_ASTC_12x10_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_12x10_FLOAT: - case SDL_GPU_TEXTUREFORMAT_ASTC_10x10_UNORM: - case SDL_GPU_TEXTUREFORMAT_ASTC_10x10_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_10x10_FLOAT: - return 10; - case SDL_GPU_TEXTUREFORMAT_ASTC_10x8_UNORM: - case SDL_GPU_TEXTUREFORMAT_ASTC_10x8_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_10x8_FLOAT: - case SDL_GPU_TEXTUREFORMAT_ASTC_8x8_UNORM: - case SDL_GPU_TEXTUREFORMAT_ASTC_8x8_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_8x8_FLOAT: - return 8; - case SDL_GPU_TEXTUREFORMAT_ASTC_10x6_UNORM: - case SDL_GPU_TEXTUREFORMAT_ASTC_10x6_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_10x6_FLOAT: - case SDL_GPU_TEXTUREFORMAT_ASTC_8x6_UNORM: - case SDL_GPU_TEXTUREFORMAT_ASTC_8x6_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_8x6_FLOAT: - case SDL_GPU_TEXTUREFORMAT_ASTC_6x6_UNORM: - case SDL_GPU_TEXTUREFORMAT_ASTC_6x6_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_6x6_FLOAT: - return 6; - case SDL_GPU_TEXTUREFORMAT_ASTC_10x5_UNORM: - case SDL_GPU_TEXTUREFORMAT_ASTC_10x5_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_10x5_FLOAT: - case SDL_GPU_TEXTUREFORMAT_ASTC_8x5_UNORM: - case SDL_GPU_TEXTUREFORMAT_ASTC_8x5_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_8x5_FLOAT: - case SDL_GPU_TEXTUREFORMAT_ASTC_6x5_UNORM: - case SDL_GPU_TEXTUREFORMAT_ASTC_6x5_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_6x5_FLOAT: - case SDL_GPU_TEXTUREFORMAT_ASTC_5x5_UNORM: - case SDL_GPU_TEXTUREFORMAT_ASTC_5x5_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_5x5_FLOAT: - return 5; - case SDL_GPU_TEXTUREFORMAT_BC1_RGBA_UNORM: - case SDL_GPU_TEXTUREFORMAT_BC2_RGBA_UNORM: - case SDL_GPU_TEXTUREFORMAT_BC3_RGBA_UNORM: - case SDL_GPU_TEXTUREFORMAT_BC4_R_UNORM: - case SDL_GPU_TEXTUREFORMAT_BC5_RG_UNORM: - case SDL_GPU_TEXTUREFORMAT_BC7_RGBA_UNORM: - case SDL_GPU_TEXTUREFORMAT_BC6H_RGB_FLOAT: - case SDL_GPU_TEXTUREFORMAT_BC6H_RGB_UFLOAT: - case SDL_GPU_TEXTUREFORMAT_BC1_RGBA_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_BC3_RGBA_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_BC7_RGBA_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_5x4_UNORM: - case SDL_GPU_TEXTUREFORMAT_ASTC_5x4_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_5x4_FLOAT: - case SDL_GPU_TEXTUREFORMAT_ASTC_4x4_UNORM: - case SDL_GPU_TEXTUREFORMAT_ASTC_4x4_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_ASTC_4x4_FLOAT: - return 4; - case SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM: - case SDL_GPU_TEXTUREFORMAT_B8G8R8A8_UNORM: - case SDL_GPU_TEXTUREFORMAT_B5G6R5_UNORM: - case SDL_GPU_TEXTUREFORMAT_B5G5R5A1_UNORM: - case SDL_GPU_TEXTUREFORMAT_B4G4R4A4_UNORM: - case SDL_GPU_TEXTUREFORMAT_R10G10B10A2_UNORM: - case SDL_GPU_TEXTUREFORMAT_R8G8_UNORM: - case SDL_GPU_TEXTUREFORMAT_R16G16_UNORM: - case SDL_GPU_TEXTUREFORMAT_R16G16B16A16_UNORM: - case SDL_GPU_TEXTUREFORMAT_R8_UNORM: - case SDL_GPU_TEXTUREFORMAT_R16_UNORM: - case SDL_GPU_TEXTUREFORMAT_A8_UNORM: - case SDL_GPU_TEXTUREFORMAT_R8_SNORM: - case SDL_GPU_TEXTUREFORMAT_R8G8_SNORM: - case SDL_GPU_TEXTUREFORMAT_R8G8B8A8_SNORM: - case SDL_GPU_TEXTUREFORMAT_R16_SNORM: - case SDL_GPU_TEXTUREFORMAT_R16G16_SNORM: - case SDL_GPU_TEXTUREFORMAT_R16G16B16A16_SNORM: - case SDL_GPU_TEXTUREFORMAT_R16_FLOAT: - case SDL_GPU_TEXTUREFORMAT_R16G16_FLOAT: - case SDL_GPU_TEXTUREFORMAT_R16G16B16A16_FLOAT: - case SDL_GPU_TEXTUREFORMAT_R32_FLOAT: - case SDL_GPU_TEXTUREFORMAT_R32G32_FLOAT: - case SDL_GPU_TEXTUREFORMAT_R32G32B32A32_FLOAT: - case SDL_GPU_TEXTUREFORMAT_R11G11B10_UFLOAT: - case SDL_GPU_TEXTUREFORMAT_R8_UINT: - case SDL_GPU_TEXTUREFORMAT_R8G8_UINT: - case SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UINT: - case SDL_GPU_TEXTUREFORMAT_R16_UINT: - case SDL_GPU_TEXTUREFORMAT_R16G16_UINT: - case SDL_GPU_TEXTUREFORMAT_R16G16B16A16_UINT: - case SDL_GPU_TEXTUREFORMAT_R32_UINT: - case SDL_GPU_TEXTUREFORMAT_R32G32_UINT: - case SDL_GPU_TEXTUREFORMAT_R32G32B32A32_UINT: - case SDL_GPU_TEXTUREFORMAT_R8_INT: - case SDL_GPU_TEXTUREFORMAT_R8G8_INT: - case SDL_GPU_TEXTUREFORMAT_R8G8B8A8_INT: - case SDL_GPU_TEXTUREFORMAT_R16_INT: - case SDL_GPU_TEXTUREFORMAT_R16G16_INT: - case SDL_GPU_TEXTUREFORMAT_R16G16B16A16_INT: - case SDL_GPU_TEXTUREFORMAT_R32_INT: - case SDL_GPU_TEXTUREFORMAT_R32G32_INT: - case SDL_GPU_TEXTUREFORMAT_R32G32B32A32_INT: - case SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_B8G8R8A8_UNORM_SRGB: - case SDL_GPU_TEXTUREFORMAT_D16_UNORM: - case SDL_GPU_TEXTUREFORMAT_D24_UNORM: - case SDL_GPU_TEXTUREFORMAT_D32_FLOAT: - case SDL_GPU_TEXTUREFORMAT_D24_UNORM_S8_UINT: - case SDL_GPU_TEXTUREFORMAT_D32_FLOAT_S8_UINT: - return 1; - default: - SDL_assert_release(!"Unrecognized TextureFormat!"); - return 0; - } -} - -static inline bool IsDepthFormat( - SDL_GPUTextureFormat format) -{ - switch (format) { - case SDL_GPU_TEXTUREFORMAT_D16_UNORM: - case SDL_GPU_TEXTUREFORMAT_D24_UNORM: - case SDL_GPU_TEXTUREFORMAT_D32_FLOAT: - case SDL_GPU_TEXTUREFORMAT_D24_UNORM_S8_UINT: - case SDL_GPU_TEXTUREFORMAT_D32_FLOAT_S8_UINT: - return true; - - default: - return false; - } -} - -static inline bool IsStencilFormat( - SDL_GPUTextureFormat format) -{ - switch (format) { - case SDL_GPU_TEXTUREFORMAT_D24_UNORM_S8_UINT: - case SDL_GPU_TEXTUREFORMAT_D32_FLOAT_S8_UINT: - return true; - - default: - return false; - } -} - -static inline bool IsIntegerFormat( - SDL_GPUTextureFormat format) -{ - switch (format) { - case SDL_GPU_TEXTUREFORMAT_R8_UINT: - case SDL_GPU_TEXTUREFORMAT_R8G8_UINT: - case SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UINT: - case SDL_GPU_TEXTUREFORMAT_R16_UINT: - case SDL_GPU_TEXTUREFORMAT_R16G16_UINT: - case SDL_GPU_TEXTUREFORMAT_R16G16B16A16_UINT: - case SDL_GPU_TEXTUREFORMAT_R8_INT: - case SDL_GPU_TEXTUREFORMAT_R8G8_INT: - case SDL_GPU_TEXTUREFORMAT_R8G8B8A8_INT: - case SDL_GPU_TEXTUREFORMAT_R16_INT: - case SDL_GPU_TEXTUREFORMAT_R16G16_INT: - case SDL_GPU_TEXTUREFORMAT_R16G16B16A16_INT: - return true; - - default: - return false; - } -} - -static inline Uint32 IndexSize(SDL_GPUIndexElementSize size) -{ - return (size == SDL_GPU_INDEXELEMENTSIZE_16BIT) ? 2 : 4; -} - -static inline Uint32 BytesPerRow( - Sint32 width, - SDL_GPUTextureFormat format) -{ - Uint32 blockWidth = Texture_GetBlockWidth(format); - Uint32 blocksPerRow = (width + blockWidth - 1) / blockWidth; - return blocksPerRow * SDL_GPUTextureFormatTexelBlockSize(format); -} - -// GraphicsDevice Limits - -#define MAX_TEXTURE_SAMPLERS_PER_STAGE 16 -#define MAX_STORAGE_TEXTURES_PER_STAGE 8 -#define MAX_STORAGE_BUFFERS_PER_STAGE 8 -#define MAX_UNIFORM_BUFFERS_PER_STAGE 4 -#define MAX_COMPUTE_WRITE_TEXTURES 8 -#define MAX_COMPUTE_WRITE_BUFFERS 8 -#define UNIFORM_BUFFER_SIZE 32768 -#define MAX_VERTEX_BUFFERS 16 -#define MAX_VERTEX_ATTRIBUTES 16 -#define MAX_COLOR_TARGET_BINDINGS 4 -#define MAX_PRESENT_COUNT 16 -#define MAX_FRAMES_IN_FLIGHT 3 - -// Internal Macros - -#define EXPAND_ARRAY_IF_NEEDED(arr, elementType, newCount, capacity, newCapacity) \ - do { \ - if ((newCount) >= (capacity)) { \ - (capacity) = (newCapacity); \ - (arr) = (elementType *)SDL_realloc( \ - (arr), \ - sizeof(elementType) * (capacity)); \ - } \ - } while (0) - -// Internal Declarations - -#ifdef __cplusplus -extern "C" { -#endif // __cplusplus - -SDL_GPUGraphicsPipeline *SDL_GPU_FetchBlitPipeline( - SDL_GPUDevice *device, - SDL_GPUTextureType sourceTextureType, - SDL_GPUTextureFormat destinationFormat, - SDL_GPUShader *blitVertexShader, - SDL_GPUShader *blitFrom2DShader, - SDL_GPUShader *blitFrom2DArrayShader, - SDL_GPUShader *blitFrom3DShader, - SDL_GPUShader *blitFromCubeShader, - SDL_GPUShader *blitFromCubeArrayShader, - BlitPipelineCacheEntry **blitPipelines, - Uint32 *blitPipelineCount, - Uint32 *blitPipelineCapacity); - -void SDL_GPU_BlitCommon( - SDL_GPUCommandBuffer *commandBuffer, - const SDL_GPUBlitInfo *info, - SDL_GPUSampler *blitLinearSampler, - SDL_GPUSampler *blitNearestSampler, - SDL_GPUShader *blitVertexShader, - SDL_GPUShader *blitFrom2DShader, - SDL_GPUShader *blitFrom2DArrayShader, - SDL_GPUShader *blitFrom3DShader, - SDL_GPUShader *blitFromCubeShader, - SDL_GPUShader *blitFromCubeArrayShader, - BlitPipelineCacheEntry **blitPipelines, - Uint32 *blitPipelineCount, - Uint32 *blitPipelineCapacity); - -#ifdef __cplusplus -} -#endif // __cplusplus - -// SDL_GPUDevice Definition - -typedef struct SDL_GPURenderer SDL_GPURenderer; - -struct SDL_GPUDevice -{ - // Quit - - void (*DestroyDevice)(SDL_GPUDevice *device); - - // State Creation - - SDL_GPUComputePipeline *(*CreateComputePipeline)( - SDL_GPURenderer *driverData, - const SDL_GPUComputePipelineCreateInfo *createinfo); - - SDL_GPUGraphicsPipeline *(*CreateGraphicsPipeline)( - SDL_GPURenderer *driverData, - const SDL_GPUGraphicsPipelineCreateInfo *createinfo); - - SDL_GPUSampler *(*CreateSampler)( - SDL_GPURenderer *driverData, - const SDL_GPUSamplerCreateInfo *createinfo); - - SDL_GPUShader *(*CreateShader)( - SDL_GPURenderer *driverData, - const SDL_GPUShaderCreateInfo *createinfo); - - SDL_GPUTexture *(*CreateTexture)( - SDL_GPURenderer *driverData, - const SDL_GPUTextureCreateInfo *createinfo); - - SDL_GPUBuffer *(*CreateBuffer)( - SDL_GPURenderer *driverData, - SDL_GPUBufferUsageFlags usageFlags, - Uint32 size, - const char *debugName); - - SDL_GPUTransferBuffer *(*CreateTransferBuffer)( - SDL_GPURenderer *driverData, - SDL_GPUTransferBufferUsage usage, - Uint32 size, - const char *debugName); - - // Debug Naming - - void (*SetBufferName)( - SDL_GPURenderer *driverData, - SDL_GPUBuffer *buffer, - const char *text); - - void (*SetTextureName)( - SDL_GPURenderer *driverData, - SDL_GPUTexture *texture, - const char *text); - - void (*InsertDebugLabel)( - SDL_GPUCommandBuffer *commandBuffer, - const char *text); - - void (*PushDebugGroup)( - SDL_GPUCommandBuffer *commandBuffer, - const char *name); - - void (*PopDebugGroup)( - SDL_GPUCommandBuffer *commandBuffer); - - // Disposal - - void (*ReleaseTexture)( - SDL_GPURenderer *driverData, - SDL_GPUTexture *texture); - - void (*ReleaseSampler)( - SDL_GPURenderer *driverData, - SDL_GPUSampler *sampler); - - void (*ReleaseBuffer)( - SDL_GPURenderer *driverData, - SDL_GPUBuffer *buffer); - - void (*ReleaseTransferBuffer)( - SDL_GPURenderer *driverData, - SDL_GPUTransferBuffer *transferBuffer); - - void (*ReleaseShader)( - SDL_GPURenderer *driverData, - SDL_GPUShader *shader); - - void (*ReleaseComputePipeline)( - SDL_GPURenderer *driverData, - SDL_GPUComputePipeline *computePipeline); - - void (*ReleaseGraphicsPipeline)( - SDL_GPURenderer *driverData, - SDL_GPUGraphicsPipeline *graphicsPipeline); - - // Render Pass - - void (*BeginRenderPass)( - SDL_GPUCommandBuffer *commandBuffer, - const SDL_GPUColorTargetInfo *colorTargetInfos, - Uint32 numColorTargets, - const SDL_GPUDepthStencilTargetInfo *depthStencilTargetInfo); - - void (*BindGraphicsPipeline)( - SDL_GPUCommandBuffer *commandBuffer, - SDL_GPUGraphicsPipeline *graphicsPipeline); - - void (*SetViewport)( - SDL_GPUCommandBuffer *commandBuffer, - const SDL_GPUViewport *viewport); - - void (*SetScissor)( - SDL_GPUCommandBuffer *commandBuffer, - const SDL_Rect *scissor); - - void (*SetBlendConstants)( - SDL_GPUCommandBuffer *commandBuffer, - SDL_FColor blendConstants); - - void (*SetStencilReference)( - SDL_GPUCommandBuffer *commandBuffer, - Uint8 reference); - - void (*BindVertexBuffers)( - SDL_GPUCommandBuffer *commandBuffer, - Uint32 firstSlot, - const SDL_GPUBufferBinding *bindings, - Uint32 numBindings); - - void (*BindIndexBuffer)( - SDL_GPUCommandBuffer *commandBuffer, - const SDL_GPUBufferBinding *binding, - SDL_GPUIndexElementSize indexElementSize); - - void (*BindVertexSamplers)( - SDL_GPUCommandBuffer *commandBuffer, - Uint32 firstSlot, - const SDL_GPUTextureSamplerBinding *textureSamplerBindings, - Uint32 numBindings); - - void (*BindVertexStorageTextures)( - SDL_GPUCommandBuffer *commandBuffer, - Uint32 firstSlot, - SDL_GPUTexture *const *storageTextures, - Uint32 numBindings); - - void (*BindVertexStorageBuffers)( - SDL_GPUCommandBuffer *commandBuffer, - Uint32 firstSlot, - SDL_GPUBuffer *const *storageBuffers, - Uint32 numBindings); - - void (*BindFragmentSamplers)( - SDL_GPUCommandBuffer *commandBuffer, - Uint32 firstSlot, - const SDL_GPUTextureSamplerBinding *textureSamplerBindings, - Uint32 numBindings); - - void (*BindFragmentStorageTextures)( - SDL_GPUCommandBuffer *commandBuffer, - Uint32 firstSlot, - SDL_GPUTexture *const *storageTextures, - Uint32 numBindings); - - void (*BindFragmentStorageBuffers)( - SDL_GPUCommandBuffer *commandBuffer, - Uint32 firstSlot, - SDL_GPUBuffer *const *storageBuffers, - Uint32 numBindings); - - void (*PushVertexUniformData)( - SDL_GPUCommandBuffer *commandBuffer, - Uint32 slotIndex, - const void *data, - Uint32 length); - - void (*PushFragmentUniformData)( - SDL_GPUCommandBuffer *commandBuffer, - Uint32 slotIndex, - const void *data, - Uint32 length); - - void (*DrawIndexedPrimitives)( - SDL_GPUCommandBuffer *commandBuffer, - Uint32 numIndices, - Uint32 numInstances, - Uint32 firstIndex, - Sint32 vertexOffset, - Uint32 firstInstance); - - void (*DrawPrimitives)( - SDL_GPUCommandBuffer *commandBuffer, - Uint32 numVertices, - Uint32 numInstances, - Uint32 firstVertex, - Uint32 firstInstance); - - void (*DrawPrimitivesIndirect)( - SDL_GPUCommandBuffer *commandBuffer, - SDL_GPUBuffer *buffer, - Uint32 offset, - Uint32 drawCount); - - void (*DrawIndexedPrimitivesIndirect)( - SDL_GPUCommandBuffer *commandBuffer, - SDL_GPUBuffer *buffer, - Uint32 offset, - Uint32 drawCount); - - void (*EndRenderPass)( - SDL_GPUCommandBuffer *commandBuffer); - - // Compute Pass - - void (*BeginComputePass)( - SDL_GPUCommandBuffer *commandBuffer, - const SDL_GPUStorageTextureReadWriteBinding *storageTextureBindings, - Uint32 numStorageTextureBindings, - const SDL_GPUStorageBufferReadWriteBinding *storageBufferBindings, - Uint32 numStorageBufferBindings); - - void (*BindComputePipeline)( - SDL_GPUCommandBuffer *commandBuffer, - SDL_GPUComputePipeline *computePipeline); - - void (*BindComputeSamplers)( - SDL_GPUCommandBuffer *commandBuffer, - Uint32 firstSlot, - const SDL_GPUTextureSamplerBinding *textureSamplerBindings, - Uint32 numBindings); - - void (*BindComputeStorageTextures)( - SDL_GPUCommandBuffer *commandBuffer, - Uint32 firstSlot, - SDL_GPUTexture *const *storageTextures, - Uint32 numBindings); - - void (*BindComputeStorageBuffers)( - SDL_GPUCommandBuffer *commandBuffer, - Uint32 firstSlot, - SDL_GPUBuffer *const *storageBuffers, - Uint32 numBindings); - - void (*PushComputeUniformData)( - SDL_GPUCommandBuffer *commandBuffer, - Uint32 slotIndex, - const void *data, - Uint32 length); - - void (*DispatchCompute)( - SDL_GPUCommandBuffer *commandBuffer, - Uint32 groupcountX, - Uint32 groupcountY, - Uint32 groupcountZ); - - void (*DispatchComputeIndirect)( - SDL_GPUCommandBuffer *commandBuffer, - SDL_GPUBuffer *buffer, - Uint32 offset); - - void (*EndComputePass)( - SDL_GPUCommandBuffer *commandBuffer); - - // TransferBuffer Data - - void *(*MapTransferBuffer)( - SDL_GPURenderer *device, - SDL_GPUTransferBuffer *transferBuffer, - bool cycle); - - void (*UnmapTransferBuffer)( - SDL_GPURenderer *device, - SDL_GPUTransferBuffer *transferBuffer); - - // Copy Pass - - void (*BeginCopyPass)( - SDL_GPUCommandBuffer *commandBuffer); - - void (*UploadToTexture)( - SDL_GPUCommandBuffer *commandBuffer, - const SDL_GPUTextureTransferInfo *source, - const SDL_GPUTextureRegion *destination, - bool cycle); - - void (*UploadToBuffer)( - SDL_GPUCommandBuffer *commandBuffer, - const SDL_GPUTransferBufferLocation *source, - const SDL_GPUBufferRegion *destination, - bool cycle); - - void (*CopyTextureToTexture)( - SDL_GPUCommandBuffer *commandBuffer, - const SDL_GPUTextureLocation *source, - const SDL_GPUTextureLocation *destination, - Uint32 w, - Uint32 h, - Uint32 d, - bool cycle); - - void (*CopyBufferToBuffer)( - SDL_GPUCommandBuffer *commandBuffer, - const SDL_GPUBufferLocation *source, - const SDL_GPUBufferLocation *destination, - Uint32 size, - bool cycle); - - void (*GenerateMipmaps)( - SDL_GPUCommandBuffer *commandBuffer, - SDL_GPUTexture *texture); - - void (*DownloadFromTexture)( - SDL_GPUCommandBuffer *commandBuffer, - const SDL_GPUTextureRegion *source, - const SDL_GPUTextureTransferInfo *destination); - - void (*DownloadFromBuffer)( - SDL_GPUCommandBuffer *commandBuffer, - const SDL_GPUBufferRegion *source, - const SDL_GPUTransferBufferLocation *destination); - - void (*EndCopyPass)( - SDL_GPUCommandBuffer *commandBuffer); - - void (*Blit)( - SDL_GPUCommandBuffer *commandBuffer, - const SDL_GPUBlitInfo *info); - - // Submission/Presentation - - bool (*SupportsSwapchainComposition)( - SDL_GPURenderer *driverData, - SDL_Window *window, - SDL_GPUSwapchainComposition swapchainComposition); - - bool (*SupportsPresentMode)( - SDL_GPURenderer *driverData, - SDL_Window *window, - SDL_GPUPresentMode presentMode); - - bool (*ClaimWindow)( - SDL_GPURenderer *driverData, - SDL_Window *window); - - void (*ReleaseWindow)( - SDL_GPURenderer *driverData, - SDL_Window *window); - - bool (*SetSwapchainParameters)( - SDL_GPURenderer *driverData, - SDL_Window *window, - SDL_GPUSwapchainComposition swapchainComposition, - SDL_GPUPresentMode presentMode); - - bool (*SetAllowedFramesInFlight)( - SDL_GPURenderer *driverData, - Uint32 allowedFramesInFlight); - - SDL_GPUTextureFormat (*GetSwapchainTextureFormat)( - SDL_GPURenderer *driverData, - SDL_Window *window); - - SDL_GPUCommandBuffer *(*AcquireCommandBuffer)( - SDL_GPURenderer *driverData); - - bool (*AcquireSwapchainTexture)( - SDL_GPUCommandBuffer *commandBuffer, - SDL_Window *window, - SDL_GPUTexture **swapchainTexture, - Uint32 *swapchainTextureWidth, - Uint32 *swapchainTextureHeight); - - bool (*WaitForSwapchain)( - SDL_GPURenderer *driverData, - SDL_Window *window); - - bool (*WaitAndAcquireSwapchainTexture)( - SDL_GPUCommandBuffer *commandBuffer, - SDL_Window *window, - SDL_GPUTexture **swapchainTexture, - Uint32 *swapchainTextureWidth, - Uint32 *swapchainTextureHeight); - - bool (*Submit)( - SDL_GPUCommandBuffer *commandBuffer); - - SDL_GPUFence *(*SubmitAndAcquireFence)( - SDL_GPUCommandBuffer *commandBuffer); - - bool (*Cancel)( - SDL_GPUCommandBuffer *commandBuffer); - - bool (*Wait)( - SDL_GPURenderer *driverData); - - bool (*WaitForFences)( - SDL_GPURenderer *driverData, - bool waitAll, - SDL_GPUFence *const *fences, - Uint32 numFences); - - bool (*QueryFence)( - SDL_GPURenderer *driverData, - SDL_GPUFence *fence); - - void (*ReleaseFence)( - SDL_GPURenderer *driverData, - SDL_GPUFence *fence); - - // Feature Queries - - bool (*SupportsTextureFormat)( - SDL_GPURenderer *driverData, - SDL_GPUTextureFormat format, - SDL_GPUTextureType type, - SDL_GPUTextureUsageFlags usage); - - bool (*SupportsSampleCount)( - SDL_GPURenderer *driverData, - SDL_GPUTextureFormat format, - SDL_GPUSampleCount desiredSampleCount); - - // Opaque pointer for the Driver - SDL_GPURenderer *driverData; - - // Store this for SDL_GetGPUDeviceDriver() - const char *backend; - - // Store this for SDL_GetGPUShaderFormats() - SDL_GPUShaderFormat shader_formats; - - // Store this for SDL_gpu.c's debug layer - bool debug_mode; -}; - -#define ASSIGN_DRIVER_FUNC(func, name) \ - result->func = name##_##func; -#define ASSIGN_DRIVER(name) \ - ASSIGN_DRIVER_FUNC(DestroyDevice, name) \ - ASSIGN_DRIVER_FUNC(CreateComputePipeline, name) \ - ASSIGN_DRIVER_FUNC(CreateGraphicsPipeline, name) \ - ASSIGN_DRIVER_FUNC(CreateSampler, name) \ - ASSIGN_DRIVER_FUNC(CreateShader, name) \ - ASSIGN_DRIVER_FUNC(CreateTexture, name) \ - ASSIGN_DRIVER_FUNC(CreateBuffer, name) \ - ASSIGN_DRIVER_FUNC(CreateTransferBuffer, name) \ - ASSIGN_DRIVER_FUNC(SetBufferName, name) \ - ASSIGN_DRIVER_FUNC(SetTextureName, name) \ - ASSIGN_DRIVER_FUNC(InsertDebugLabel, name) \ - ASSIGN_DRIVER_FUNC(PushDebugGroup, name) \ - ASSIGN_DRIVER_FUNC(PopDebugGroup, name) \ - ASSIGN_DRIVER_FUNC(ReleaseTexture, name) \ - ASSIGN_DRIVER_FUNC(ReleaseSampler, name) \ - ASSIGN_DRIVER_FUNC(ReleaseBuffer, name) \ - ASSIGN_DRIVER_FUNC(ReleaseTransferBuffer, name) \ - ASSIGN_DRIVER_FUNC(ReleaseShader, name) \ - ASSIGN_DRIVER_FUNC(ReleaseComputePipeline, name) \ - ASSIGN_DRIVER_FUNC(ReleaseGraphicsPipeline, name) \ - ASSIGN_DRIVER_FUNC(BeginRenderPass, name) \ - ASSIGN_DRIVER_FUNC(BindGraphicsPipeline, name) \ - ASSIGN_DRIVER_FUNC(SetViewport, name) \ - ASSIGN_DRIVER_FUNC(SetScissor, name) \ - ASSIGN_DRIVER_FUNC(SetBlendConstants, name) \ - ASSIGN_DRIVER_FUNC(SetStencilReference, name) \ - ASSIGN_DRIVER_FUNC(BindVertexBuffers, name) \ - ASSIGN_DRIVER_FUNC(BindIndexBuffer, name) \ - ASSIGN_DRIVER_FUNC(BindVertexSamplers, name) \ - ASSIGN_DRIVER_FUNC(BindVertexStorageTextures, name) \ - ASSIGN_DRIVER_FUNC(BindVertexStorageBuffers, name) \ - ASSIGN_DRIVER_FUNC(BindFragmentSamplers, name) \ - ASSIGN_DRIVER_FUNC(BindFragmentStorageTextures, name) \ - ASSIGN_DRIVER_FUNC(BindFragmentStorageBuffers, name) \ - ASSIGN_DRIVER_FUNC(PushVertexUniformData, name) \ - ASSIGN_DRIVER_FUNC(PushFragmentUniformData, name) \ - ASSIGN_DRIVER_FUNC(DrawIndexedPrimitives, name) \ - ASSIGN_DRIVER_FUNC(DrawPrimitives, name) \ - ASSIGN_DRIVER_FUNC(DrawPrimitivesIndirect, name) \ - ASSIGN_DRIVER_FUNC(DrawIndexedPrimitivesIndirect, name) \ - ASSIGN_DRIVER_FUNC(EndRenderPass, name) \ - ASSIGN_DRIVER_FUNC(BeginComputePass, name) \ - ASSIGN_DRIVER_FUNC(BindComputePipeline, name) \ - ASSIGN_DRIVER_FUNC(BindComputeSamplers, name) \ - ASSIGN_DRIVER_FUNC(BindComputeStorageTextures, name) \ - ASSIGN_DRIVER_FUNC(BindComputeStorageBuffers, name) \ - ASSIGN_DRIVER_FUNC(PushComputeUniformData, name) \ - ASSIGN_DRIVER_FUNC(DispatchCompute, name) \ - ASSIGN_DRIVER_FUNC(DispatchComputeIndirect, name) \ - ASSIGN_DRIVER_FUNC(EndComputePass, name) \ - ASSIGN_DRIVER_FUNC(MapTransferBuffer, name) \ - ASSIGN_DRIVER_FUNC(UnmapTransferBuffer, name) \ - ASSIGN_DRIVER_FUNC(BeginCopyPass, name) \ - ASSIGN_DRIVER_FUNC(UploadToTexture, name) \ - ASSIGN_DRIVER_FUNC(UploadToBuffer, name) \ - ASSIGN_DRIVER_FUNC(DownloadFromTexture, name) \ - ASSIGN_DRIVER_FUNC(DownloadFromBuffer, name) \ - ASSIGN_DRIVER_FUNC(CopyTextureToTexture, name) \ - ASSIGN_DRIVER_FUNC(CopyBufferToBuffer, name) \ - ASSIGN_DRIVER_FUNC(GenerateMipmaps, name) \ - ASSIGN_DRIVER_FUNC(EndCopyPass, name) \ - ASSIGN_DRIVER_FUNC(Blit, name) \ - ASSIGN_DRIVER_FUNC(SupportsSwapchainComposition, name) \ - ASSIGN_DRIVER_FUNC(SupportsPresentMode, name) \ - ASSIGN_DRIVER_FUNC(ClaimWindow, name) \ - ASSIGN_DRIVER_FUNC(ReleaseWindow, name) \ - ASSIGN_DRIVER_FUNC(SetSwapchainParameters, name) \ - ASSIGN_DRIVER_FUNC(SetAllowedFramesInFlight, name) \ - ASSIGN_DRIVER_FUNC(GetSwapchainTextureFormat, name) \ - ASSIGN_DRIVER_FUNC(AcquireCommandBuffer, name) \ - ASSIGN_DRIVER_FUNC(AcquireSwapchainTexture, name) \ - ASSIGN_DRIVER_FUNC(WaitForSwapchain, name) \ - ASSIGN_DRIVER_FUNC(WaitAndAcquireSwapchainTexture, name)\ - ASSIGN_DRIVER_FUNC(Submit, name) \ - ASSIGN_DRIVER_FUNC(SubmitAndAcquireFence, name) \ - ASSIGN_DRIVER_FUNC(Cancel, name) \ - ASSIGN_DRIVER_FUNC(Wait, name) \ - ASSIGN_DRIVER_FUNC(WaitForFences, name) \ - ASSIGN_DRIVER_FUNC(QueryFence, name) \ - ASSIGN_DRIVER_FUNC(ReleaseFence, name) \ - ASSIGN_DRIVER_FUNC(SupportsTextureFormat, name) \ - ASSIGN_DRIVER_FUNC(SupportsSampleCount, name) - -typedef struct SDL_GPUBootstrap -{ - const char *name; - const SDL_GPUShaderFormat shader_formats; - bool (*PrepareDriver)(SDL_VideoDevice *_this); - SDL_GPUDevice *(*CreateDevice)(bool debug_mode, bool prefer_low_power, SDL_PropertiesID props); -} SDL_GPUBootstrap; - -#ifdef __cplusplus -extern "C" { -#endif - -extern SDL_GPUBootstrap VulkanDriver; -extern SDL_GPUBootstrap D3D12Driver; -extern SDL_GPUBootstrap MetalDriver; -extern SDL_GPUBootstrap PrivateGPUDriver; - -#ifdef __cplusplus -} -#endif - -#endif // SDL_GPU_DRIVER_H diff --git a/contrib/SDL-3.2.8/src/gpu/d3d12/D3D12_Blit.h b/contrib/SDL-3.2.8/src/gpu/d3d12/D3D12_Blit.h deleted file mode 100644 index d8cfbaf..0000000 --- a/contrib/SDL-3.2.8/src/gpu/d3d12/D3D12_Blit.h +++ /dev/null @@ -1,3349 +0,0 @@ -#if 0 -; -; Input signature: -; -; Name Index Mask Register SysValue Format Used -; -------------------- ----- ------ -------- -------- ------- ------ -; SV_VertexID 0 x 0 VERTID uint x -; -; -; Output signature: -; -; Name Index Mask Register SysValue Format Used -; -------------------- ----- ------ -------- -------- ------- ------ -; TEXCOORD 0 xy 0 NONE float xy -; SV_Position 0 xyzw 1 POS float xyzw -; -; shader hash: 347572259f9a9ea84d2f90bafbd0e1ae -; -; Pipeline Runtime Information: -; -; Vertex Shader -; OutputPositionPresent=1 -; -; -; Input signature: -; -; Name Index InterpMode DynIdx -; -------------------- ----- ---------------------- ------ -; SV_VertexID 0 -; -; Output signature: -; -; Name Index InterpMode DynIdx -; -------------------- ----- ---------------------- ------ -; TEXCOORD 0 linear -; SV_Position 0 noperspective -; -; Buffer Definitions: -; -; -; Resource Bindings: -; -; Name Type Format Dim ID HLSL Bind Count -; ------------------------------ ---------- ------- ----------- ------- -------------- ------ -; -; -; ViewId state: -; -; Number of inputs: 1, outputs: 8 -; Outputs dependent on ViewId: { } -; Inputs contributing to computation of Outputs: -; output 0 depends on inputs: { 0 } -; output 1 depends on inputs: { 0 } -; output 4 depends on inputs: { 0 } -; output 5 depends on inputs: { 0 } -; -target datalayout = "e-m:e-p:32:32-i1:32-i8:32-i16:32-i32:32-i64:64-f16:32-f32:32-f64:64-n8:16:32:64" -target triple = "dxil-ms-dx" - -define void @FullscreenVert() { - %1 = call i32 @dx.op.loadInput.i32(i32 4, i32 0, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) - %2 = shl i32 %1, 1 - %3 = and i32 %2, 2 - %4 = uitofp i32 %3 to float - %5 = and i32 %1, 2 - %6 = uitofp i32 %5 to float - call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 0, float 0.000000e+00) ; StoreOutput(outputSigId,rowIndex,colIndex,value) - call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 1, float 0.000000e+00) ; StoreOutput(outputSigId,rowIndex,colIndex,value) - call void @dx.op.storeOutput.f32(i32 5, i32 1, i32 0, i8 0, float 0.000000e+00) ; StoreOutput(outputSigId,rowIndex,colIndex,value) - call void @dx.op.storeOutput.f32(i32 5, i32 1, i32 0, i8 1, float 0.000000e+00) ; StoreOutput(outputSigId,rowIndex,colIndex,value) - call void @dx.op.storeOutput.f32(i32 5, i32 1, i32 0, i8 2, float 0.000000e+00) ; StoreOutput(outputSigId,rowIndex,colIndex,value) - call void @dx.op.storeOutput.f32(i32 5, i32 1, i32 0, i8 3, float 0.000000e+00) ; StoreOutput(outputSigId,rowIndex,colIndex,value) - call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 0, float %4) ; StoreOutput(outputSigId,rowIndex,colIndex,value) - call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 1, float %6) ; StoreOutput(outputSigId,rowIndex,colIndex,value) - %7 = fmul fast float %4, 2.000000e+00 - %8 = fmul fast float %6, 2.000000e+00 - %9 = fadd fast float %7, -1.000000e+00 - %10 = fsub fast float 1.000000e+00, %8 - call void @dx.op.storeOutput.f32(i32 5, i32 1, i32 0, i8 0, float %9) ; StoreOutput(outputSigId,rowIndex,colIndex,value) - call void @dx.op.storeOutput.f32(i32 5, i32 1, i32 0, i8 1, float %10) ; StoreOutput(outputSigId,rowIndex,colIndex,value) - call void @dx.op.storeOutput.f32(i32 5, i32 1, i32 0, i8 2, float 0.000000e+00) ; StoreOutput(outputSigId,rowIndex,colIndex,value) - call void @dx.op.storeOutput.f32(i32 5, i32 1, i32 0, i8 3, float 1.000000e+00) ; StoreOutput(outputSigId,rowIndex,colIndex,value) - ret void -} - -; Function Attrs: nounwind readnone -declare i32 @dx.op.loadInput.i32(i32, i32, i32, i8, i32) #0 - -; Function Attrs: nounwind -declare void @dx.op.storeOutput.f32(i32, i32, i32, i8, float) #1 - -attributes #0 = { nounwind readnone } -attributes #1 = { nounwind } - -!llvm.ident = !{!0} -!dx.version = !{!1} -!dx.valver = !{!2} -!dx.shaderModel = !{!3} -!dx.viewIdState = !{!4} -!dx.entryPoints = !{!5} - -!0 = !{!"clang version 3.7 (tags/RELEASE_370/final)"} -!1 = !{i32 1, i32 0} -!2 = !{i32 1, i32 6} -!3 = !{!"vs", i32 6, i32 0} -!4 = !{[3 x i32] [i32 1, i32 8, i32 51]} -!5 = !{void ()* @FullscreenVert, !"FullscreenVert", !6, null, null} -!6 = !{!7, !11, null} -!7 = !{!8} -!8 = !{i32 0, !"SV_VertexID", i8 5, i8 1, !9, i8 0, i32 1, i8 1, i32 0, i8 0, !10} -!9 = !{i32 0} -!10 = !{i32 3, i32 1} -!11 = !{!12, !14} -!12 = !{i32 0, !"TEXCOORD", i8 9, i8 0, !9, i8 2, i32 1, i8 2, i32 0, i8 0, !13} -!13 = !{i32 3, i32 3} -!14 = !{i32 1, !"SV_Position", i8 9, i8 3, !9, i8 4, i32 1, i8 4, i32 1, i8 0, !15} -!15 = !{i32 3, i32 15} - -#endif - -const unsigned char g_FullscreenVert[] = { - 0x44, 0x58, 0x42, 0x43, 0x81, 0xc4, 0x09, 0xbf, 0x6d, 0xef, 0xac, 0x67, - 0x8f, 0x1d, 0x64, 0xb4, 0xf2, 0x1e, 0x4b, 0xca, 0x01, 0x00, 0x00, 0x00, - 0x4d, 0x0d, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, - 0x50, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0xf1, 0x00, 0x00, 0x00, - 0x8d, 0x01, 0x00, 0x00, 0x1d, 0x02, 0x00, 0x00, 0xa9, 0x07, 0x00, 0x00, - 0xc5, 0x07, 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, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x56, - 0x65, 0x72, 0x74, 0x65, 0x78, 0x49, 0x44, 0x00, 0x4f, 0x53, 0x47, 0x31, - 0x5d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, - 0x00, 0x53, 0x56, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x00, 0x50, 0x53, 0x56, 0x30, 0x94, 0x00, 0x00, 0x00, 0x30, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x54, 0x45, - 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 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, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x42, - 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x01, 0x44, 0x03, 0x03, 0x04, 0x00, 0x00, 0x33, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x52, 0x54, 0x53, 0x30, 0x88, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x44, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, - 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x53, 0x54, 0x41, 0x54, 0x84, 0x05, 0x00, 0x00, 0x60, 0x00, 0x01, - 0x00, 0x61, 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, - 0x00, 0x10, 0x00, 0x00, 0x00, 0x6c, 0x05, 0x00, 0x00, 0x42, 0x43, 0xc0, - 0xde, 0x21, 0x0c, 0x00, 0x00, 0x58, 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, 0x15, 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, 0x3c, 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, 0x61, 0x04, 0xe1, 0x18, 0x46, 0x20, 0x8e, - 0xa3, 0xa4, 0x29, 0xa2, 0x84, 0xc9, 0x7f, 0x89, 0x68, 0x22, 0xae, 0xd6, - 0x49, 0x91, 0x8b, 0x58, 0x90, 0xb0, 0x9c, 0x03, 0x03, 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, 0x08, 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, 0x0e, 0x00, 0x00, - 0x00, 0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, - 0x47, 0xc6, 0x04, 0x43, 0x9a, 0x12, 0x18, 0x01, 0x28, 0x86, 0x02, 0x2a, - 0x83, 0x42, 0x28, 0x87, 0x92, 0x28, 0x90, 0xf2, 0x28, 0x97, 0xc2, 0x20, - 0x2a, 0x85, 0x12, 0x18, 0x01, 0x28, 0x89, 0x22, 0x28, 0x83, 0x42, 0xa0, - 0x9e, 0x01, 0x20, 0x1f, 0x6b, 0x08, 0x90, 0x39, 0x00, 0x79, 0x18, 0x00, - 0x00, 0x84, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, - 0x44, 0x35, 0x18, 0x63, 0x0b, 0x73, 0x3b, 0x03, 0xb1, 0x2b, 0x93, 0x9b, - 0x4b, 0x7b, 0x73, 0x03, 0x99, 0x71, 0xb9, 0x01, 0x41, 0xa1, 0x0b, 0x3b, - 0x9b, 0x7b, 0x91, 0x2a, 0x62, 0x2a, 0x0a, 0x9a, 0x2a, 0xfa, 0x9a, 0xb9, - 0x81, 0x79, 0x31, 0x4b, 0x73, 0x0b, 0x63, 0x4b, 0xd9, 0x10, 0x04, 0x13, - 0x84, 0x61, 0x98, 0x20, 0x0c, 0xc4, 0x06, 0x61, 0x20, 0x36, 0x08, 0x04, - 0x41, 0xc1, 0x6e, 0x6e, 0x82, 0x30, 0x14, 0x1b, 0x86, 0x03, 0x21, 0x26, - 0x08, 0x8d, 0x35, 0x41, 0x18, 0x0c, 0x0e, 0x74, 0x65, 0x78, 0x13, 0x84, - 0xe1, 0x98, 0x20, 0x0c, 0x08, 0x13, 0xaa, 0x22, 0xac, 0xa1, 0xa7, 0x27, - 0x29, 0x22, 0x98, 0x09, 0xc2, 0x90, 0x4c, 0x10, 0x06, 0x65, 0x03, 0x82, - 0x30, 0x0d, 0xe1, 0x3c, 0x50, 0xc4, 0x01, 0xee, 0x6d, 0x6e, 0x82, 0x30, - 0x2c, 0x5c, 0xa6, 0xac, 0xbe, 0xa0, 0x9e, 0xa6, 0x92, 0xa8, 0x92, 0x9e, - 0x9c, 0x36, 0x20, 0xc8, 0xd4, 0x50, 0x4e, 0x05, 0x45, 0x1b, 0x86, 0x45, - 0xb2, 0x36, 0x0c, 0x84, 0x72, 0x4d, 0x10, 0x04, 0x60, 0x03, 0xb0, 0x61, - 0x20, 0x34, 0x6d, 0x43, 0xb0, 0x6d, 0x18, 0x86, 0x8c, 0x9b, 0x20, 0x38, - 0xd7, 0x86, 0xc0, 0xa3, 0x63, 0x54, 0xc7, 0xc6, 0x36, 0x37, 0x26, 0x57, - 0x56, 0xe6, 0x66, 0x55, 0x26, 0x47, 0xc7, 0x65, 0xca, 0xea, 0xcb, 0xaa, - 0x4c, 0x8e, 0xae, 0x0c, 0x2f, 0x89, 0x68, 0x82, 0x40, 0x3c, 0x13, 0x04, - 0x02, 0xda, 0x10, 0x10, 0x13, 0x04, 0x22, 0xda, 0x20, 0x34, 0xc3, 0x86, - 0x85, 0x08, 0x03, 0x31, 0x18, 0x03, 0x32, 0x28, 0x83, 0x61, 0x0c, 0x88, - 0x32, 0x30, 0x83, 0x0d, 0xc1, 0x19, 0x10, 0xa1, 0x2a, 0xc2, 0x1a, 0x7a, - 0x7a, 0x92, 0x22, 0x9a, 0x20, 0x10, 0xd2, 0x04, 0x81, 0x98, 0x36, 0x08, - 0x4d, 0xb3, 0x61, 0x21, 0xd2, 0x40, 0x0d, 0xca, 0x80, 0x0c, 0xd6, 0x60, - 0x58, 0x03, 0xa2, 0x0c, 0xd8, 0x80, 0xcb, 0x94, 0xd5, 0x17, 0xd4, 0xdb, - 0x5c, 0x1a, 0x5d, 0xda, 0x9b, 0xdb, 0x04, 0x81, 0xa0, 0x26, 0x08, 0x44, - 0x35, 0x41, 0x18, 0x98, 0x0d, 0x42, 0x13, 0x07, 0x1b, 0x96, 0xc1, 0x0d, - 0xd4, 0xe0, 0x0d, 0xc8, 0x00, 0x0e, 0x06, 0x38, 0x18, 0xca, 0x40, 0x0e, - 0x36, 0x08, 0x6d, 0x30, 0x07, 0x1b, 0x06, 0x34, 0xa0, 0x03, 0x60, 0x43, - 0x91, 0x81, 0x41, 0x1d, 0x00, 0x00, 0x0d, 0x33, 0xb6, 0xb7, 0x30, 0xba, - 0x39, 0x16, 0x69, 0x6e, 0x73, 0x74, 0x73, 0x13, 0x84, 0xa1, 0xa1, 0x31, - 0x97, 0x76, 0xf6, 0xc5, 0x46, 0x46, 0x63, 0x2e, 0xed, 0xec, 0x6b, 0x8e, - 0x6e, 0x82, 0x30, 0x38, 0x2c, 0xea, 0xd2, 0xdc, 0xe8, 0xe6, 0x36, 0x28, - 0x77, 0x80, 0xe0, 0x41, 0x1e, 0xe8, 0xc1, 0xb0, 0x07, 0x7c, 0xd0, 0x07, - 0x4d, 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, 0x14, 0x75, 0xc8, 0xf0, 0x5c, 0xe6, 0xd0, 0xc2, - 0xc8, 0xca, 0xe4, 0x9a, 0xde, 0xc8, 0xca, 0xd8, 0xa6, 0x04, 0x48, 0x25, - 0x32, 0x3c, 0x17, 0xba, 0x3c, 0xb8, 0xb2, 0x20, 0x37, 0xb7, 0x37, 0xba, - 0x30, 0xba, 0xb4, 0x37, 0xb7, 0xb9, 0x29, 0xc2, 0xc5, 0xd5, 0x21, 0xc3, - 0x73, 0xb1, 0x4b, 0x2b, 0xbb, 0x4b, 0x22, 0x9b, 0xa2, 0x0b, 0xa3, 0x2b, - 0x9b, 0x12, 0x78, 0x75, 0xc8, 0xf0, 0x5c, 0xca, 0xdc, 0xe8, 0xe4, 0xf2, - 0xa0, 0xde, 0xd2, 0xdc, 0xe8, 0xe6, 0xa6, 0x04, 0x75, 0xd0, 0x85, 0x0c, - 0xcf, 0x65, 0xec, 0xad, 0xce, 0x8d, 0xae, 0x4c, 0x6e, 0x6e, 0x4a, 0xd0, - 0x07, 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, 0x0c, - 0xc4, 0x21, 0x07, 0x7c, 0x70, 0x03, 0x7a, 0x28, 0x87, 0x76, 0x80, 0x87, - 0x19, 0xd1, 0x43, 0x0e, 0xf8, 0xe0, 0x06, 0xe4, 0x20, 0x0e, 0xe7, 0xe0, - 0x06, 0xf6, 0x10, 0x0e, 0xf2, 0xc0, 0x0e, 0xe1, 0x90, 0x0f, 0xef, 0x50, - 0x0f, 0xf4, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x0c, 0x00, 0x00, - 0x00, 0x06, 0xe0, 0x7c, 0xd4, 0xb2, 0x48, 0x42, 0x44, 0x10, 0xcd, 0x4b, - 0x44, 0x93, 0x05, 0x4c, 0xc3, 0xe5, 0x3b, 0x8f, 0xbf, 0x38, 0xc0, 0x20, - 0x36, 0x0f, 0x35, 0xf9, 0xc8, 0x6d, 0x9b, 0x40, 0x35, 0x5c, 0xbe, 0xf3, - 0xf8, 0xd2, 0xe4, 0x44, 0x04, 0x4a, 0x4d, 0x0f, 0x35, 0xf9, 0xc5, 0x6d, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48, 0x14, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x75, 0x72, 0x25, 0x9f, 0x9a, 0x9e, - 0xa8, 0x4d, 0x2f, 0x90, 0xba, 0xfb, 0xd0, 0xe1, 0xae, 0x44, 0x58, 0x49, - 0x4c, 0x80, 0x05, 0x00, 0x00, 0x60, 0x00, 0x01, 0x00, 0x60, 0x01, 0x00, - 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, - 0x00, 0x68, 0x05, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, - 0x00, 0x57, 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, - 0x14, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, - 0x9a, 0x12, 0x18, 0x01, 0x28, 0x86, 0x32, 0x28, 0x0f, 0xa2, 0x52, 0x28, - 0x81, 0x11, 0x80, 0x92, 0x28, 0x82, 0x32, 0x28, 0x04, 0xda, 0xb1, 0x86, - 0x00, 0x99, 0x03, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x51, 0x00, 0x00, - 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0x44, 0x35, 0x18, 0x63, - 0x0b, 0x73, 0x3b, 0x03, 0xb1, 0x2b, 0x93, 0x9b, 0x4b, 0x7b, 0x73, 0x03, - 0x99, 0x71, 0xb9, 0x01, 0x41, 0xa1, 0x0b, 0x3b, 0x9b, 0x7b, 0x91, 0x2a, - 0x62, 0x2a, 0x0a, 0x9a, 0x2a, 0xfa, 0x9a, 0xb9, 0x81, 0x79, 0x31, 0x4b, - 0x73, 0x0b, 0x63, 0x4b, 0xd9, 0x10, 0x04, 0x13, 0x84, 0x61, 0x98, 0x20, - 0x0c, 0xc4, 0x06, 0x61, 0x20, 0x26, 0x08, 0x43, 0xb1, 0x41, 0x18, 0x0c, - 0x0a, 0x76, 0x73, 0x1b, 0x06, 0xc4, 0x20, 0x26, 0x08, 0xcb, 0xb3, 0x21, - 0x50, 0x26, 0x08, 0x02, 0x40, 0xc7, 0xa8, 0x8e, 0x8d, 0x6d, 0x6e, 0x4c, - 0xae, 0xac, 0xcc, 0xcd, 0xaa, 0x4c, 0x8e, 0x8e, 0xcb, 0x94, 0xd5, 0x97, - 0x55, 0x99, 0x1c, 0x5d, 0x19, 0x5e, 0x12, 0xd1, 0x04, 0x81, 0x40, 0x26, - 0x08, 0x44, 0xb2, 0x21, 0x20, 0x26, 0x08, 0x84, 0x32, 0x41, 0x18, 0x8c, - 0x0d, 0xc2, 0x34, 0x6c, 0x58, 0x08, 0xe7, 0x81, 0x22, 0x69, 0x80, 0x08, - 0x89, 0xda, 0x10, 0x54, 0x44, 0xa8, 0x8a, 0xb0, 0x86, 0x9e, 0x9e, 0xa4, - 0x88, 0x26, 0x08, 0xc4, 0x32, 0x41, 0x20, 0x98, 0x0d, 0xc2, 0x34, 0x6d, - 0x58, 0x88, 0x0b, 0x93, 0xa2, 0x6c, 0xc8, 0x08, 0x49, 0xe3, 0x32, 0x65, - 0xf5, 0x05, 0xf5, 0x36, 0x97, 0x46, 0x97, 0xf6, 0xe6, 0x36, 0x41, 0x20, - 0x9a, 0x09, 0x02, 0xe1, 0x4c, 0x10, 0x86, 0x63, 0x83, 0x30, 0x7d, 0x1b, - 0x96, 0x81, 0xc3, 0xba, 0xc8, 0x1b, 0xbc, 0x41, 0x02, 0x83, 0x0d, 0xc2, - 0x16, 0x06, 0x1b, 0x06, 0x4b, 0x0c, 0x80, 0x0d, 0x05, 0xd3, 0x8c, 0x01, - 0x00, 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, 0x80, 0xd4, - 0x21, 0xc3, 0x73, 0xb1, 0x4b, 0x2b, 0xbb, 0x4b, 0x22, 0x9b, 0xa2, 0x0b, - 0xa3, 0x2b, 0x9b, 0x12, 0x28, 0x75, 0xc8, 0xf0, 0x5c, 0xca, 0xdc, 0xe8, - 0xe4, 0xf2, 0xa0, 0xde, 0xd2, 0xdc, 0xe8, 0xe6, 0xa6, 0x04, 0x63, 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, 0x0c, 0xc4, 0x21, 0x07, 0x7c, - 0x70, 0x03, 0x7a, 0x28, 0x87, 0x76, 0x80, 0x87, 0x19, 0xd1, 0x43, 0x0e, - 0xf8, 0xe0, 0x06, 0xe4, 0x20, 0x0e, 0xe7, 0xe0, 0x06, 0xf6, 0x10, 0x0e, - 0xf2, 0xc0, 0x0e, 0xe1, 0x90, 0x0f, 0xef, 0x50, 0x0f, 0xf4, 0x00, 0x00, - 0x00, 0x71, 0x20, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x06, 0xe0, 0x7c, - 0xd4, 0xb2, 0x48, 0x42, 0x44, 0x10, 0xcd, 0x4b, 0x44, 0x93, 0x05, 0x4c, - 0xc3, 0xe5, 0x3b, 0x8f, 0xbf, 0x38, 0xc0, 0x20, 0x36, 0x0f, 0x35, 0xf9, - 0xc8, 0x6d, 0x9b, 0x40, 0x35, 0x5c, 0xbe, 0xf3, 0xf8, 0xd2, 0xe4, 0x44, - 0x04, 0x4a, 0x4d, 0x0f, 0x35, 0xf9, 0xc5, 0x6d, 0x03, 0x61, 0x20, 0x00, - 0x00, 0x39, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, - 0x00, 0x08, 0x00, 0x00, 0x00, 0x34, 0xa5, 0x50, 0x04, 0x85, 0x30, 0x03, - 0x40, 0x37, 0x02, 0x30, 0x46, 0x00, 0x82, 0x20, 0x08, 0x82, 0xc1, 0x18, - 0x01, 0x08, 0x82, 0x20, 0xfe, 0x8d, 0x11, 0x80, 0x20, 0x08, 0xe2, 0xbf, - 0x00, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x50, 0x5c, 0x06, 0x45, 0x39, - 0x45, 0x05, 0xd6, 0x55, 0x90, 0xe8, 0x05, 0x57, 0x45, 0x2c, 0x7a, 0xc1, - 0xd5, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x20, 0x9c, 0xa3, 0x69, 0x94, - 0x32, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x08, 0xe7, 0x68, 0x5a, 0xa5, - 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x01, 0xc2, 0x39, 0x9b, 0x46, 0x29, - 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x80, 0x70, 0xce, 0xa6, 0x55, 0xca, - 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x20, 0x9c, 0xb3, 0x69, 0x92, 0x32, - 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x08, 0xe7, 0x6c, 0x5a, 0xa4, 0x8c, - 0x18, 0x24, 0x00, 0x08, 0x82, 0x01, 0xc2, 0x39, 0x9a, 0x46, 0x0d, 0x23, - 0x06, 0x09, 0x00, 0x82, 0x60, 0x80, 0x70, 0x8e, 0xa6, 0x55, 0x81, 0x0d, - 0x89, 0x7c, 0x4c, 0x50, 0xe4, 0x63, 0x42, 0x02, 0x1f, 0x5b, 0x84, 0xf8, - 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x01, 0x02, 0x06, 0xd2, 0xe7, 0x61, - 0xc2, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x20, 0x60, 0x20, 0x7d, 0x5e, - 0x16, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x01, 0x02, 0x06, 0xd2, 0xe7, - 0x59, 0xce, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x20, 0x60, 0x20, 0x7d, - 0x5e, 0xc5, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 -}; -#if 0 -; -; Input signature: -; -; Name Index Mask Register SysValue Format Used -; -------------------- ----- ------ -------- -------- ------- ------ -; TEXCOORD 0 xy 0 NONE float xy -; SV_Position 0 xyzw 1 POS float -; -; -; Output signature: -; -; Name Index Mask Register SysValue Format Used -; -------------------- ----- ------ -------- -------- ------- ------ -; SV_Target 0 xyzw 0 TARGET float xyzw -; -; shader hash: 964a7513a7ff5558ed84391b53971f63 -; -; Pipeline Runtime Information: -; -; Pixel Shader -; DepthOutput=0 -; SampleFrequency=0 -; -; -; Input signature: -; -; Name Index InterpMode DynIdx -; -------------------- ----- ---------------------- ------ -; TEXCOORD 0 linear -; SV_Position 0 noperspective -; -; Output signature: -; -; Name Index InterpMode DynIdx -; -------------------- ----- ---------------------- ------ -; SV_Target 0 -; -; Buffer Definitions: -; -; cbuffer SourceRegionBuffer -; { -; -; struct SourceRegionBuffer -; { -; -; float2 UVLeftTop; ; Offset: 0 -; float2 UVDimensions; ; Offset: 8 -; uint MipLevel; ; Offset: 16 -; float LayerOrDepth; ; Offset: 20 -; -; } SourceRegionBuffer; ; Offset: 0 Size: 24 -; -; } -; -; -; Resource Bindings: -; -; Name Type Format Dim ID HLSL Bind Count -; ------------------------------ ---------- ------- ----------- ------- -------------- ------ -; SourceRegionBuffer cbuffer NA NA CB0 cb0,space3 1 -; SourceSampler sampler NA NA S0 s0,space2 1 -; SourceTexture2D texture f32 2d T0 t0,space2 1 -; -; -; ViewId state: -; -; Number of inputs: 8, outputs: 4 -; Outputs dependent on ViewId: { } -; Inputs contributing to computation of Outputs: -; output 0 depends on inputs: { 0, 1 } -; output 1 depends on inputs: { 0, 1 } -; output 2 depends on inputs: { 0, 1 } -; output 3 depends on inputs: { 0, 1 } -; -target datalayout = "e-m:e-p:32:32-i1:32-i8:32-i16:32-i32:32-i64:64-f16:32-f32:32-f64:64-n8:16:32:64" -target triple = "dxil-ms-dx" - -%dx.types.Handle = type { i8* } -%dx.types.CBufRet.f32 = type { float, float, float, float } -%dx.types.CBufRet.i32 = type { i32, i32, i32, i32 } -%dx.types.ResRet.f32 = type { float, float, float, float, i32 } -%"class.Texture2D >" = type { <4 x float>, %"class.Texture2D >::mips_type" } -%"class.Texture2D >::mips_type" = type { i32 } -%SourceRegionBuffer = type { <2 x float>, <2 x float>, i32, float } -%struct.SamplerState = type { i32 } - -define void @BlitFrom2D() { - %1 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 0, i32 0, i32 0, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex) - %2 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 3, i32 0, i32 0, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex) - %3 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 2, i32 0, i32 0, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex) - %4 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) - %5 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 1, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) - %6 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %3, i32 0) ; CBufferLoadLegacy(handle,regIndex) - %7 = extractvalue %dx.types.CBufRet.f32 %6, 0 - %8 = extractvalue %dx.types.CBufRet.f32 %6, 1 - %9 = extractvalue %dx.types.CBufRet.f32 %6, 2 - %10 = extractvalue %dx.types.CBufRet.f32 %6, 3 - %11 = fmul fast float %9, %4 - %12 = fmul fast float %10, %5 - %13 = fadd fast float %11, %7 - %14 = fadd fast float %12, %8 - %15 = call %dx.types.CBufRet.i32 @dx.op.cbufferLoadLegacy.i32(i32 59, %dx.types.Handle %3, i32 1) ; CBufferLoadLegacy(handle,regIndex) - %16 = extractvalue %dx.types.CBufRet.i32 %15, 0 - %17 = uitofp i32 %16 to float - %18 = call %dx.types.ResRet.f32 @dx.op.sampleLevel.f32(i32 62, %dx.types.Handle %1, %dx.types.Handle %2, float %13, float %14, float undef, float undef, i32 0, i32 0, i32 undef, float %17) ; SampleLevel(srv,sampler,coord0,coord1,coord2,coord3,offset0,offset1,offset2,LOD) - %19 = extractvalue %dx.types.ResRet.f32 %18, 0 - %20 = extractvalue %dx.types.ResRet.f32 %18, 1 - %21 = extractvalue %dx.types.ResRet.f32 %18, 2 - %22 = extractvalue %dx.types.ResRet.f32 %18, 3 - call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 0, float %19) ; StoreOutput(outputSigId,rowIndex,colIndex,value) - call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 1, float %20) ; StoreOutput(outputSigId,rowIndex,colIndex,value) - call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 2, float %21) ; StoreOutput(outputSigId,rowIndex,colIndex,value) - call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 3, float %22) ; StoreOutput(outputSigId,rowIndex,colIndex,value) - ret void -} - -; Function Attrs: nounwind readnone -declare float @dx.op.loadInput.f32(i32, i32, i32, i8, i32) #0 - -; Function Attrs: nounwind -declare void @dx.op.storeOutput.f32(i32, i32, i32, i8, float) #1 - -; Function Attrs: nounwind readonly -declare %dx.types.ResRet.f32 @dx.op.sampleLevel.f32(i32, %dx.types.Handle, %dx.types.Handle, float, float, float, float, i32, i32, i32, float) #2 - -; Function Attrs: nounwind readonly -declare %dx.types.CBufRet.i32 @dx.op.cbufferLoadLegacy.i32(i32, %dx.types.Handle, i32) #2 - -; Function Attrs: nounwind readonly -declare %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32, %dx.types.Handle, i32) #2 - -; Function Attrs: nounwind readonly -declare %dx.types.Handle @dx.op.createHandle(i32, i8, i32, i32, i1) #2 - -attributes #0 = { nounwind readnone } -attributes #1 = { nounwind } -attributes #2 = { nounwind readonly } - -!llvm.ident = !{!0} -!dx.version = !{!1} -!dx.valver = !{!2} -!dx.shaderModel = !{!3} -!dx.resources = !{!4} -!dx.viewIdState = !{!12} -!dx.entryPoints = !{!13} - -!0 = !{!"clang version 3.7 (tags/RELEASE_370/final)"} -!1 = !{i32 1, i32 0} -!2 = !{i32 1, i32 6} -!3 = !{!"ps", i32 6, i32 0} -!4 = !{!5, null, !8, !10} -!5 = !{!6} -!6 = !{i32 0, %"class.Texture2D >"* undef, !"", i32 2, i32 0, i32 1, i32 2, i32 0, !7} -!7 = !{i32 0, i32 9} -!8 = !{!9} -!9 = !{i32 0, %SourceRegionBuffer* undef, !"", i32 3, i32 0, i32 1, i32 24, null} -!10 = !{!11} -!11 = !{i32 0, %struct.SamplerState* undef, !"", i32 2, i32 0, i32 1, i32 0, null} -!12 = !{[10 x i32] [i32 8, i32 4, i32 15, i32 15, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0]} -!13 = !{void ()* @BlitFrom2D, !"BlitFrom2D", !14, !4, null} -!14 = !{!15, !20, null} -!15 = !{!16, !19} -!16 = !{i32 0, !"TEXCOORD", i8 9, i8 0, !17, i8 2, i32 1, i8 2, i32 0, i8 0, !18} -!17 = !{i32 0} -!18 = !{i32 3, i32 3} -!19 = !{i32 1, !"SV_Position", i8 9, i8 3, !17, i8 4, i32 1, i8 4, i32 1, i8 0, null} -!20 = !{!21} -!21 = !{i32 0, !"SV_Target", i8 9, i8 16, !17, i8 0, i32 1, i8 4, i32 0, i8 0, !22} -!22 = !{i32 3, i32 15} - -#endif - -const unsigned char g_BlitFrom2D[] = { - 0x44, 0x58, 0x42, 0x43, 0x18, 0x05, 0x35, 0x74, 0x86, 0x3d, 0x7b, 0xa8, - 0x8e, 0x1e, 0xae, 0xc3, 0xeb, 0x7f, 0x9a, 0xd9, 0x01, 0x00, 0x00, 0x00, - 0x2b, 0x12, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, - 0x50, 0x00, 0x00, 0x00, 0xb5, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, - 0xe7, 0x01, 0x00, 0x00, 0x77, 0x02, 0x00, 0x00, 0x5b, 0x0a, 0x00, 0x00, - 0x77, 0x0a, 0x00, 0x00, 0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31, - 0x5d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, - 0x00, 0x53, 0x56, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x00, 0x4f, 0x53, 0x47, 0x31, 0x32, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x53, 0x56, 0x5f, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x00, 0x50, - 0x53, 0x56, 0x30, 0xf0, 0x00, 0x00, 0x00, 0x30, 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, 0x01, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, - 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x42, 0x00, 0x03, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x44, 0x03, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x10, 0x03, 0x00, 0x00, 0x00, 0x0f, - 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x54, 0x53, 0x30, 0x88, - 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x3c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x5c, - 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x7c, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, - 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x54, 0x41, 0x54, 0xdc, - 0x07, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xf7, 0x01, 0x00, 0x00, 0x44, - 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xc4, - 0x07, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xee, - 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, 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, 0x58, - 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, 0x8c, 0xc1, 0x08, 0x40, - 0x09, 0x00, 0x0a, 0x66, 0x00, 0xe6, 0x08, 0xc0, 0x60, 0x8e, 0x00, 0x29, - 0xc6, 0x40, 0x10, 0x44, 0x41, 0x90, 0x51, 0x0c, 0x80, 0x20, 0x88, 0x62, - 0x20, 0xe4, 0xa6, 0xe1, 0xf2, 0x27, 0xec, 0x21, 0x24, 0x7f, 0x25, 0xa4, - 0x95, 0x98, 0xfc, 0xe2, 0xb6, 0x51, 0x31, 0x0c, 0xc3, 0x40, 0x50, 0x71, - 0xcf, 0x70, 0xf9, 0x13, 0xf6, 0x10, 0x92, 0x1f, 0x02, 0xcd, 0xb0, 0x10, - 0x28, 0x58, 0x0a, 0xa3, 0x10, 0x0c, 0x33, 0x0c, 0xc3, 0x40, 0x10, 0xc4, - 0x40, 0xcd, 0x51, 0xc3, 0xe5, 0x4f, 0xd8, 0x43, 0x48, 0x3e, 0xb7, 0x51, - 0xc5, 0x4a, 0x4c, 0x3e, 0x72, 0xdb, 0x88, 0x20, 0x08, 0x82, 0x28, 0xc4, - 0x43, 0x30, 0x04, 0x41, 0x47, 0x0d, 0x97, 0x3f, 0x61, 0x0f, 0x21, 0xf9, - 0xdc, 0x46, 0x15, 0x2b, 0x31, 0xf9, 0xc5, 0x6d, 0x23, 0x62, 0x18, 0x86, - 0xa1, 0x10, 0x12, 0xc1, 0x10, 0x34, 0xcd, 0x11, 0x04, 0xc5, 0x60, 0x88, - 0x82, 0x20, 0x2a, 0xb2, 0x06, 0x02, 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, 0x10, 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, 0x32, 0x8d, 0xb6, 0x61, 0x04, 0x61, 0x38, - 0x89, 0x75, 0xa8, 0x48, 0x20, 0x56, 0xc2, 0x40, 0x9c, 0x66, 0xa3, 0x8a, - 0x82, 0x88, 0x10, 0xd1, 0x75, 0xc4, 0x40, 0xde, 0x4d, 0xd2, 0x14, 0x51, - 0xc2, 0xe4, 0xb3, 0x00, 0xf3, 0x2c, 0x44, 0xc4, 0x4e, 0xc0, 0x44, 0xa0, - 0x80, 0x20, 0x30, 0x15, 0x08, 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, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x86, 0x3c, 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0c, 0x79, 0x10, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, 0x34, 0x40, 0x00, 0x0c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4, 0x81, 0x80, 0x00, 0x18, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xc8, 0x33, 0x01, 0x01, 0x30, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x90, 0xc7, 0x02, 0x02, - 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x2c, 0x10, 0x14, - 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x18, 0x19, 0x11, 0x4c, 0x90, 0x8c, - 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x22, 0x4a, 0x60, 0x04, 0xa0, 0x18, - 0x8a, 0xa0, 0x24, 0xca, 0xa0, 0x60, 0xca, 0xa1, 0x20, 0x0a, 0xa4, 0x14, - 0x0a, 0xa5, 0x3c, 0xca, 0xa6, 0x10, 0xa8, 0x28, 0x89, 0x11, 0x80, 0x22, - 0x28, 0x83, 0x42, 0x28, 0x10, 0xaa, 0x6a, 0x80, 0xb8, 0x19, 0x00, 0xf2, - 0x66, 0x00, 0xe8, 0x9b, 0x01, 0xa0, 0x70, 0x06, 0x80, 0xc4, 0xb1, 0x14, - 0x84, 0x78, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, - 0x18, 0x00, 0x00, 0xae, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, - 0x02, 0x13, 0x44, 0x35, 0x18, 0x63, 0x0b, 0x73, 0x3b, 0x03, 0xb1, 0x2b, - 0x93, 0x9b, 0x4b, 0x7b, 0x73, 0x03, 0x99, 0x71, 0xb9, 0x01, 0x41, 0xa1, - 0x0b, 0x3b, 0x9b, 0x7b, 0x91, 0x2a, 0x62, 0x2a, 0x0a, 0x9a, 0x2a, 0xfa, - 0x9a, 0xb9, 0x81, 0x79, 0x31, 0x4b, 0x73, 0x0b, 0x63, 0x4b, 0xd9, 0x10, - 0x04, 0x13, 0x04, 0xe2, 0x98, 0x20, 0x10, 0xc8, 0x06, 0x61, 0x20, 0x36, - 0x08, 0x04, 0x41, 0x01, 0x6e, 0x6e, 0x82, 0x40, 0x24, 0x1b, 0x86, 0x03, - 0x21, 0x26, 0x08, 0x5c, 0xc7, 0x67, 0xea, 0xad, 0x4e, 0x6e, 0xac, 0x8c, - 0xaa, 0x0c, 0x8f, 0xae, 0x4e, 0xae, 0x4c, 0x86, 0x68, 0x82, 0x40, 0x28, - 0x13, 0x04, 0x62, 0xd9, 0x20, 0x10, 0xcd, 0x86, 0x84, 0x50, 0x16, 0x86, - 0x18, 0x18, 0xc2, 0xd9, 0x10, 0x3c, 0x13, 0x84, 0xef, 0xa3, 0x34, 0xf5, - 0x56, 0x27, 0x37, 0x56, 0x26, 0x55, 0x76, 0x96, 0xf6, 0xe6, 0x26, 0x54, - 0x67, 0x66, 0x56, 0x26, 0x37, 0x41, 0x20, 0x98, 0x09, 0x02, 0xd1, 0x6c, - 0x40, 0x88, 0x48, 0x9a, 0x88, 0x81, 0x02, 0x36, 0x04, 0xd5, 0x04, 0x21, - 0x0c, 0xc0, 0x80, 0xcd, 0xd4, 0x5b, 0x9d, 0xdc, 0x58, 0xd9, 0x54, 0x58, - 0x1b, 0x1c, 0x5b, 0x99, 0xdc, 0x06, 0x84, 0xb8, 0x30, 0x86, 0x18, 0x08, - 0x60, 0x43, 0x90, 0x6d, 0x20, 0x20, 0xc0, 0xd2, 0x26, 0x08, 0x9e, 0xc7, - 0xa4, 0xca, 0x8a, 0xa9, 0xcc, 0x8c, 0x8e, 0xea, 0x0d, 0x6e, 0x82, 0x40, - 0x38, 0x13, 0x84, 0x8a, 0xdb, 0x80, 0x20, 0xdd, 0x44, 0x78, 0x4d, 0xf3, - 0x91, 0xa9, 0xb2, 0x22, 0x4a, 0x6b, 0x2b, 0x73, 0x9b, 0x4b, 0x7b, 0x73, - 0x9b, 0x9b, 0x20, 0x10, 0xcf, 0x06, 0x04, 0x09, 0x83, 0x49, 0x0c, 0xbc, - 0xa6, 0xf9, 0x88, 0x34, 0xa5, 0xc1, 0x31, 0x95, 0xd9, 0x95, 0xb1, 0x4d, - 0x10, 0x08, 0x68, 0x82, 0x40, 0x44, 0x1b, 0x10, 0x84, 0x0c, 0xa6, 0x32, - 0xf0, 0xcc, 0xa0, 0xf9, 0xc8, 0x30, 0x85, 0xe5, 0x95, 0xc9, 0x3d, 0xc9, - 0x11, 0x95, 0xc1, 0xd1, 0xa1, 0x4d, 0x10, 0x08, 0x69, 0x83, 0x81, 0xa0, - 0xc1, 0x94, 0x06, 0x5e, 0xb3, 0xa1, 0xa0, 0xc0, 0x60, 0x0c, 0xce, 0x40, - 0x0d, 0x36, 0x0c, 0x04, 0xb7, 0x06, 0x13, 0x04, 0x01, 0xd8, 0x00, 0x6c, - 0x18, 0x08, 0x37, 0x70, 0x83, 0x0d, 0xc1, 0x1b, 0x6c, 0x18, 0x86, 0x36, - 0x80, 0x83, 0x09, 0x82, 0x18, 0x84, 0xc1, 0x86, 0x40, 0x0e, 0xa8, 0x08, - 0xb1, 0xa5, 0xd1, 0x19, 0xc9, 0xbd, 0xb5, 0xc9, 0x10, 0x11, 0xa1, 0x2a, - 0xc2, 0x1a, 0x7a, 0x7a, 0x92, 0x22, 0x9a, 0x20, 0x14, 0xd6, 0x04, 0xa1, - 0xb8, 0x36, 0x04, 0xc4, 0x04, 0xa1, 0xc0, 0x36, 0x08, 0xd3, 0xb4, 0x61, - 0x21, 0xea, 0xc0, 0x0e, 0xee, 0x00, 0x0f, 0xf2, 0x60, 0xc8, 0x03, 0xe2, - 0x0e, 0xf4, 0x80, 0xcb, 0x94, 0xd5, 0x17, 0xd4, 0xdb, 0x5c, 0x1a, 0x5d, - 0xda, 0x9b, 0xdb, 0x04, 0xa1, 0xc8, 0x26, 0x08, 0x85, 0xb6, 0x61, 0x19, - 0xf8, 0xc0, 0x0e, 0xfa, 0x00, 0x0f, 0xfc, 0x60, 0xf0, 0x83, 0xe1, 0x0e, - 0x80, 0x0d, 0xc2, 0x1e, 0xfc, 0x01, 0x93, 0x29, 0xab, 0x2f, 0xaa, 0x30, - 0xb9, 0xb3, 0x32, 0xba, 0x09, 0x42, 0xb1, 0x4d, 0x10, 0x88, 0x69, 0x83, - 0x30, 0x8d, 0xc2, 0x86, 0x85, 0x08, 0x05, 0x3b, 0x10, 0x05, 0x3c, 0xb8, - 0x83, 0xc1, 0x0f, 0x88, 0x3b, 0x20, 0x85, 0x0d, 0x41, 0x29, 0x6c, 0x18, - 0x40, 0xc1, 0x14, 0x80, 0x0d, 0x45, 0x1b, 0xd0, 0xc1, 0x29, 0x6c, 0x00, - 0x0d, 0x33, 0xb6, 0xb7, 0x30, 0xba, 0x39, 0x16, 0x69, 0x6e, 0x73, 0x74, - 0x73, 0x13, 0x04, 0x82, 0xa2, 0x31, 0x97, 0x76, 0xf6, 0xc5, 0x46, 0x46, - 0x63, 0x2e, 0xed, 0xec, 0x6b, 0x8e, 0x6e, 0x82, 0x40, 0x54, 0x44, 0xe8, - 0xca, 0xf0, 0xbe, 0xdc, 0xde, 0xe4, 0xda, 0x36, 0x28, 0xa9, 0x60, 0x06, - 0xaa, 0xb0, 0x0a, 0xac, 0xc0, 0xb4, 0x82, 0x2b, 0xbc, 0xc2, 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, 0x45, 0x1d, 0x32, 0x3c, 0x97, 0x39, 0xb4, 0x30, 0xb2, 0x32, - 0xb9, 0xa6, 0x37, 0xb2, 0x32, 0xb6, 0x29, 0x01, 0x52, 0x86, 0x0c, 0xcf, - 0x45, 0xae, 0x6c, 0xee, 0xad, 0x4e, 0x6e, 0xac, 0x6c, 0x6e, 0x4a, 0xa0, - 0x55, 0x22, 0xc3, 0x73, 0xa1, 0xcb, 0x83, 0x2b, 0x0b, 0x72, 0x73, 0x7b, - 0xa3, 0x0b, 0xa3, 0x4b, 0x7b, 0x73, 0x9b, 0x9b, 0x22, 0xac, 0x01, 0x1c, - 0xd4, 0x21, 0xc3, 0x73, 0xb1, 0x4b, 0x2b, 0xbb, 0x4b, 0x22, 0x9b, 0xa2, - 0x0b, 0xa3, 0x2b, 0x9b, 0x12, 0xc8, 0x41, 0x1d, 0x32, 0x3c, 0x97, 0x32, - 0x37, 0x3a, 0xb9, 0x3c, 0xa8, 0xb7, 0x34, 0x37, 0xba, 0xb9, 0x29, 0xc1, - 0x29, 0x74, 0x21, 0xc3, 0x73, 0x19, 0x7b, 0xab, 0x73, 0xa3, 0x2b, 0x93, - 0x9b, 0x9b, 0x12, 0xbc, 0x02, 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, 0x0c, 0xc4, 0x21, 0x07, 0x7c, 0x70, 0x03, 0x7a, 0x28, 0x87, 0x76, - 0x80, 0x87, 0x19, 0xd1, 0x43, 0x0e, 0xf8, 0xe0, 0x06, 0xe4, 0x20, 0x0e, - 0xe7, 0xe0, 0x06, 0xf6, 0x10, 0x0e, 0xf2, 0xc0, 0x0e, 0xe1, 0x90, 0x0f, - 0xef, 0x50, 0x0f, 0xf4, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x1f, - 0x00, 0x00, 0x00, 0x06, 0xa0, 0x6c, 0x0b, 0x32, 0x7d, 0x91, 0xc3, 0xd8, - 0x9d, 0x15, 0x6c, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x04, 0x54, 0x51, 0x10, - 0x51, 0xe9, 0x00, 0x43, 0x49, 0x18, 0x80, 0x80, 0xf9, 0xc5, 0x6d, 0x1b, - 0xc1, 0x36, 0x5c, 0xbe, 0xf3, 0xf8, 0x42, 0x40, 0x15, 0x05, 0x11, 0x95, - 0x0e, 0x30, 0x94, 0x84, 0x01, 0x08, 0x98, 0x8f, 0xdc, 0xb6, 0x19, 0x48, - 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x44, 0x04, 0x30, 0x11, 0x21, 0xd0, 0x0c, - 0x0b, 0x61, 0x01, 0xd3, 0x70, 0xf9, 0xce, 0xe3, 0x2f, 0x0e, 0x30, 0x88, - 0xcd, 0x43, 0x4d, 0x7e, 0x71, 0xdb, 0x36, 0x50, 0x0d, 0x97, 0xef, 0x3c, - 0xbe, 0x04, 0x30, 0xcf, 0x42, 0x94, 0x44, 0x45, 0x2c, 0x7e, 0x71, 0xdb, - 0x26, 0x50, 0x0d, 0x97, 0xef, 0x3c, 0xbe, 0x34, 0x39, 0x11, 0x81, 0x52, - 0xd3, 0x43, 0x4d, 0x7e, 0x71, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, - 0x41, 0x53, 0x48, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, - 0x4a, 0x75, 0x13, 0xa7, 0xff, 0x55, 0x58, 0xed, 0x84, 0x39, 0x1b, 0x53, - 0x97, 0x1f, 0x63, 0x44, 0x58, 0x49, 0x4c, 0xac, 0x07, 0x00, 0x00, 0x60, - 0x00, 0x00, 0x00, 0xeb, 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00, - 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x94, 0x07, 0x00, 0x00, 0x42, - 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xe2, 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, - 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, 0x58, 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, 0x8c, 0xc1, 0x08, 0x40, 0x09, 0x00, 0x0a, 0x66, - 0x00, 0xe6, 0x08, 0xc0, 0x60, 0x8e, 0x00, 0x29, 0xc6, 0x40, 0x10, 0x44, - 0x41, 0x90, 0x51, 0x0c, 0x80, 0x20, 0x88, 0x62, 0x20, 0xe4, 0xa6, 0xe1, - 0xf2, 0x27, 0xec, 0x21, 0x24, 0x7f, 0x25, 0xa4, 0x95, 0x98, 0xfc, 0xe2, - 0xb6, 0x51, 0x31, 0x0c, 0xc3, 0x40, 0x50, 0x71, 0xcf, 0x70, 0xf9, 0x13, - 0xf6, 0x10, 0x92, 0x1f, 0x02, 0xcd, 0xb0, 0x10, 0x28, 0x58, 0x0a, 0xa3, - 0x10, 0x0c, 0x33, 0x0c, 0xc3, 0x40, 0x10, 0xc4, 0x40, 0xcd, 0x51, 0xc3, - 0xe5, 0x4f, 0xd8, 0x43, 0x48, 0x3e, 0xb7, 0x51, 0xc5, 0x4a, 0x4c, 0x3e, - 0x72, 0xdb, 0x88, 0x20, 0x08, 0x82, 0x28, 0xc4, 0x43, 0x30, 0x04, 0x41, - 0x47, 0x0d, 0x97, 0x3f, 0x61, 0x0f, 0x21, 0xf9, 0xdc, 0x46, 0x15, 0x2b, - 0x31, 0xf9, 0xc5, 0x6d, 0x23, 0x62, 0x18, 0x86, 0xa1, 0x10, 0x12, 0xc1, - 0x10, 0x34, 0xcd, 0x11, 0x04, 0xc5, 0x60, 0x88, 0x82, 0x20, 0x2a, 0xb2, - 0x06, 0x02, 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, 0x10, 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, 0x32, 0x8d, 0xb6, 0x61, 0x04, 0x61, 0x38, 0x89, 0x75, 0xa8, 0x48, - 0x20, 0x56, 0xc2, 0x40, 0x9c, 0x66, 0xa3, 0x8a, 0x82, 0x88, 0x10, 0xd1, - 0x75, 0xc4, 0x40, 0xde, 0x4d, 0xd2, 0x14, 0x51, 0xc2, 0xe4, 0xb3, 0x00, - 0xf3, 0x2c, 0x44, 0xc4, 0x4e, 0xc0, 0x44, 0xa0, 0x80, 0x20, 0x30, 0x15, - 0x08, 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, - 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, - 0x79, 0x10, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0xf2, 0x34, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x30, 0xe4, 0x81, 0x80, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x60, 0xc8, 0x33, 0x01, 0x01, 0x30, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xc0, 0x90, 0xc7, 0x02, 0x02, 0x60, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x2c, 0x10, 0x10, 0x00, 0x00, 0x00, 0x32, - 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, - 0x04, 0x43, 0x22, 0x4a, 0x60, 0x04, 0xa0, 0x18, 0x8a, 0xa0, 0x24, 0xca, - 0xa0, 0x60, 0xca, 0x83, 0x8a, 0x92, 0x18, 0x01, 0x28, 0x82, 0x32, 0x28, - 0x84, 0x02, 0x21, 0x6e, 0x06, 0x80, 0xbe, 0x19, 0x00, 0x0a, 0x67, 0x00, - 0x48, 0x1c, 0x4b, 0x41, 0x88, 0xe7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x1a, - 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0x44, 0x35, 0x18, 0x63, 0x0b, 0x73, - 0x3b, 0x03, 0xb1, 0x2b, 0x93, 0x9b, 0x4b, 0x7b, 0x73, 0x03, 0x99, 0x71, - 0xb9, 0x01, 0x41, 0xa1, 0x0b, 0x3b, 0x9b, 0x7b, 0x91, 0x2a, 0x62, 0x2a, - 0x0a, 0x9a, 0x2a, 0xfa, 0x9a, 0xb9, 0x81, 0x79, 0x31, 0x4b, 0x73, 0x0b, - 0x63, 0x4b, 0xd9, 0x10, 0x04, 0x13, 0x04, 0xe2, 0x98, 0x20, 0x10, 0xc8, - 0x06, 0x61, 0x20, 0x26, 0x08, 0x44, 0xb2, 0x41, 0x18, 0x0c, 0x0a, 0x70, - 0x73, 0x1b, 0x06, 0xc4, 0x20, 0x26, 0x08, 0x5c, 0x45, 0x60, 0x82, 0x40, - 0x28, 0x13, 0x04, 0x62, 0xd9, 0x20, 0x10, 0xcd, 0x86, 0x84, 0x50, 0x16, - 0x86, 0x18, 0x18, 0xc2, 0xd9, 0x10, 0x3c, 0x13, 0x84, 0xcf, 0x9a, 0x20, - 0x10, 0xcc, 0x04, 0x81, 0x68, 0x36, 0x20, 0x44, 0xb4, 0x48, 0xc4, 0x30, - 0x01, 0x1b, 0x02, 0x6a, 0x82, 0x10, 0x06, 0xd7, 0x06, 0x84, 0xb0, 0x16, - 0x86, 0x18, 0x08, 0x60, 0x43, 0x70, 0x6d, 0x20, 0x20, 0xa0, 0xc2, 0x26, - 0x08, 0x62, 0x80, 0x6d, 0x08, 0xb4, 0x09, 0x82, 0x00, 0x50, 0x11, 0x62, - 0x4b, 0xa3, 0x33, 0x92, 0x7b, 0x6b, 0x93, 0x21, 0x22, 0x42, 0x55, 0x84, - 0x35, 0xf4, 0xf4, 0x24, 0x45, 0x34, 0x41, 0x28, 0x9e, 0x09, 0x42, 0x01, - 0x6d, 0x08, 0x88, 0x09, 0x42, 0x11, 0x6d, 0x10, 0x24, 0x69, 0xc3, 0x42, - 0x78, 0x1f, 0x18, 0x84, 0x81, 0x18, 0x0c, 0x62, 0x40, 0x80, 0xc1, 0x18, - 0x70, 0x99, 0xb2, 0xfa, 0x82, 0x7a, 0x9b, 0x4b, 0xa3, 0x4b, 0x7b, 0x73, - 0x9b, 0x20, 0x14, 0xd2, 0x04, 0xa1, 0x98, 0x36, 0x2c, 0x43, 0x19, 0x7c, - 0x66, 0x10, 0x06, 0x67, 0x30, 0x9c, 0xc1, 0x00, 0x06, 0xc0, 0x06, 0x81, - 0x0c, 0xd0, 0x80, 0xc9, 0x94, 0xd5, 0x17, 0x55, 0x98, 0xdc, 0x59, 0x19, - 0xdd, 0x04, 0xa1, 0xa0, 0x26, 0x08, 0x84, 0xb3, 0x41, 0x90, 0xd8, 0x60, - 0xc3, 0x42, 0xa8, 0xc1, 0xb7, 0x06, 0x61, 0x00, 0x06, 0xc3, 0x19, 0x10, - 0x60, 0xd0, 0x06, 0x1b, 0x02, 0x37, 0xd8, 0x30, 0xa4, 0xc1, 0x1b, 0x00, - 0x1b, 0x0a, 0xae, 0x83, 0x83, 0x0c, 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, 0x00, 0x29, 0x43, 0x86, 0xe7, 0x22, 0x57, 0x36, 0xf7, - 0x56, 0x27, 0x37, 0x56, 0x36, 0x37, 0x25, 0xc0, 0xea, 0x90, 0xe1, 0xb9, - 0xd8, 0xa5, 0x95, 0xdd, 0x25, 0x91, 0x4d, 0xd1, 0x85, 0xd1, 0x95, 0x4d, - 0x09, 0xb4, 0x3a, 0x64, 0x78, 0x2e, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x53, 0x02, 0x38, 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, 0x0c, 0xc4, 0x21, 0x07, 0x7c, 0x70, 0x03, - 0x7a, 0x28, 0x87, 0x76, 0x80, 0x87, 0x19, 0xd1, 0x43, 0x0e, 0xf8, 0xe0, - 0x06, 0xe4, 0x20, 0x0e, 0xe7, 0xe0, 0x06, 0xf6, 0x10, 0x0e, 0xf2, 0xc0, - 0x0e, 0xe1, 0x90, 0x0f, 0xef, 0x50, 0x0f, 0xf4, 0x00, 0x00, 0x00, 0x71, - 0x20, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x06, 0xa0, 0x6c, 0x0b, 0x32, - 0x7d, 0x91, 0xc3, 0xd8, 0x9d, 0x15, 0x6c, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, - 0x04, 0x54, 0x51, 0x10, 0x51, 0xe9, 0x00, 0x43, 0x49, 0x18, 0x80, 0x80, - 0xf9, 0xc5, 0x6d, 0x1b, 0xc1, 0x36, 0x5c, 0xbe, 0xf3, 0xf8, 0x42, 0x40, - 0x15, 0x05, 0x11, 0x95, 0x0e, 0x30, 0x94, 0x84, 0x01, 0x08, 0x98, 0x8f, - 0xdc, 0xb6, 0x19, 0x48, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x44, 0x04, 0x30, - 0x11, 0x21, 0xd0, 0x0c, 0x0b, 0x61, 0x01, 0xd3, 0x70, 0xf9, 0xce, 0xe3, - 0x2f, 0x0e, 0x30, 0x88, 0xcd, 0x43, 0x4d, 0x7e, 0x71, 0xdb, 0x36, 0x50, - 0x0d, 0x97, 0xef, 0x3c, 0xbe, 0x04, 0x30, 0xcf, 0x42, 0x94, 0x44, 0x45, - 0x2c, 0x7e, 0x71, 0xdb, 0x26, 0x50, 0x0d, 0x97, 0xef, 0x3c, 0xbe, 0x34, - 0x39, 0x11, 0x81, 0x52, 0xd3, 0x43, 0x4d, 0x7e, 0x71, 0xdb, 0x00, 0x61, - 0x20, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, - 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x54, 0x8d, 0x00, 0x10, 0x51, - 0x0a, 0x25, 0x37, 0x03, 0x50, 0x08, 0x65, 0x57, 0x7c, 0x54, 0x94, 0x00, - 0x0d, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x06, 0x09, 0x00, 0x82, - 0x60, 0x60, 0x71, 0x87, 0xa4, 0x69, 0xc9, 0x88, 0x41, 0x02, 0x80, 0x20, - 0x18, 0x58, 0x1d, 0x12, 0x6d, 0x9b, 0x32, 0x62, 0x90, 0x00, 0x20, 0x08, - 0x06, 0x96, 0x97, 0x4c, 0x1c, 0xb7, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, - 0x81, 0x41, 0x06, 0x48, 0xd7, 0x55, 0xc9, 0x88, 0x41, 0x02, 0x80, 0x20, - 0x18, 0x18, 0x65, 0x90, 0x78, 0x9e, 0xa1, 0x8c, 0x18, 0x1c, 0x00, 0x08, - 0x82, 0xc1, 0x24, 0x06, 0xc9, 0xf0, 0x8d, 0x26, 0x04, 0xc0, 0x68, 0x82, - 0x10, 0x8c, 0x26, 0x0c, 0xc2, 0x68, 0x02, 0x31, 0x98, 0x70, 0xc8, 0xc7, - 0x84, 0x43, 0x3e, 0x26, 0x18, 0xf0, 0x31, 0xc1, 0x80, 0xcf, 0x88, 0xc1, - 0x01, 0x80, 0x20, 0x18, 0x40, 0x6c, 0x20, 0x31, 0x69, 0x30, 0x9a, 0x10, - 0x00, 0x17, 0x0c, 0x35, 0x62, 0xf0, 0x00, 0x20, 0x08, 0x06, 0x0d, 0x1c, - 0x50, 0x11, 0x54, 0x10, 0x92, 0xb4, 0x06, 0x6b, 0x70, 0x05, 0xa3, 0x09, - 0x01, 0x30, 0x9a, 0x20, 0x04, 0xa3, 0x09, 0x83, 0x30, 0x9a, 0x40, 0x0c, - 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x80, 0xd8, 0x81, 0x07, 0x07, 0x70, - 0x80, 0x06, 0xc4, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x20, 0x76, 0xe0, - 0xc1, 0x01, 0x1c, 0x60, 0xc3, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x20, - 0x76, 0xe0, 0xc1, 0x01, 0x1c, 0x9c, 0x81, 0x30, 0x62, 0x90, 0x00, 0x20, - 0x08, 0x06, 0x88, 0x1d, 0x78, 0x70, 0x00, 0x07, 0x66, 0x10, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 -}; -#if 0 -; -; Input signature: -; -; Name Index Mask Register SysValue Format Used -; -------------------- ----- ------ -------- -------- ------- ------ -; TEXCOORD 0 xy 0 NONE float xy -; SV_Position 0 xyzw 1 POS float -; -; -; Output signature: -; -; Name Index Mask Register SysValue Format Used -; -------------------- ----- ------ -------- -------- ------- ------ -; SV_Target 0 xyzw 0 TARGET float xyzw -; -; shader hash: 2e13f04e8780c355f36dba74b811bc6f -; -; Pipeline Runtime Information: -; -; Pixel Shader -; DepthOutput=0 -; SampleFrequency=0 -; -; -; Input signature: -; -; Name Index InterpMode DynIdx -; -------------------- ----- ---------------------- ------ -; TEXCOORD 0 linear -; SV_Position 0 noperspective -; -; Output signature: -; -; Name Index InterpMode DynIdx -; -------------------- ----- ---------------------- ------ -; SV_Target 0 -; -; Buffer Definitions: -; -; cbuffer SourceRegionBuffer -; { -; -; struct SourceRegionBuffer -; { -; -; float2 UVLeftTop; ; Offset: 0 -; float2 UVDimensions; ; Offset: 8 -; uint MipLevel; ; Offset: 16 -; float LayerOrDepth; ; Offset: 20 -; -; } SourceRegionBuffer; ; Offset: 0 Size: 24 -; -; } -; -; -; Resource Bindings: -; -; Name Type Format Dim ID HLSL Bind Count -; ------------------------------ ---------- ------- ----------- ------- -------------- ------ -; SourceRegionBuffer cbuffer NA NA CB0 cb0,space3 1 -; SourceSampler sampler NA NA S0 s0,space2 1 -; SourceTexture2DArray texture f32 2darray T0 t0,space2 1 -; -; -; ViewId state: -; -; Number of inputs: 8, outputs: 4 -; Outputs dependent on ViewId: { } -; Inputs contributing to computation of Outputs: -; output 0 depends on inputs: { 0, 1 } -; output 1 depends on inputs: { 0, 1 } -; output 2 depends on inputs: { 0, 1 } -; output 3 depends on inputs: { 0, 1 } -; -target datalayout = "e-m:e-p:32:32-i1:32-i8:32-i16:32-i32:32-i64:64-f16:32-f32:32-f64:64-n8:16:32:64" -target triple = "dxil-ms-dx" - -%dx.types.Handle = type { i8* } -%dx.types.CBufRet.f32 = type { float, float, float, float } -%dx.types.CBufRet.i32 = type { i32, i32, i32, i32 } -%dx.types.ResRet.f32 = type { float, float, float, float, i32 } -%"class.Texture2DArray >" = type { <4 x float>, %"class.Texture2DArray >::mips_type" } -%"class.Texture2DArray >::mips_type" = type { i32 } -%SourceRegionBuffer = type { <2 x float>, <2 x float>, i32, float } -%struct.SamplerState = type { i32 } - -define void @BlitFrom2DArray() { - %1 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 0, i32 0, i32 0, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex) - %2 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 3, i32 0, i32 0, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex) - %3 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 2, i32 0, i32 0, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex) - %4 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) - %5 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 1, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) - %6 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %3, i32 0) ; CBufferLoadLegacy(handle,regIndex) - %7 = extractvalue %dx.types.CBufRet.f32 %6, 0 - %8 = extractvalue %dx.types.CBufRet.f32 %6, 1 - %9 = extractvalue %dx.types.CBufRet.f32 %6, 2 - %10 = extractvalue %dx.types.CBufRet.f32 %6, 3 - %11 = fmul fast float %9, %4 - %12 = fmul fast float %10, %5 - %13 = fadd fast float %11, %7 - %14 = fadd fast float %12, %8 - %15 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %3, i32 1) ; CBufferLoadLegacy(handle,regIndex) - %16 = extractvalue %dx.types.CBufRet.f32 %15, 1 - %17 = fptoui float %16 to i32 - %18 = uitofp i32 %17 to float - %19 = call %dx.types.CBufRet.i32 @dx.op.cbufferLoadLegacy.i32(i32 59, %dx.types.Handle %3, i32 1) ; CBufferLoadLegacy(handle,regIndex) - %20 = extractvalue %dx.types.CBufRet.i32 %19, 0 - %21 = uitofp i32 %20 to float - %22 = call %dx.types.ResRet.f32 @dx.op.sampleLevel.f32(i32 62, %dx.types.Handle %1, %dx.types.Handle %2, float %13, float %14, float %18, float undef, i32 0, i32 0, i32 undef, float %21) ; SampleLevel(srv,sampler,coord0,coord1,coord2,coord3,offset0,offset1,offset2,LOD) - %23 = extractvalue %dx.types.ResRet.f32 %22, 0 - %24 = extractvalue %dx.types.ResRet.f32 %22, 1 - %25 = extractvalue %dx.types.ResRet.f32 %22, 2 - %26 = extractvalue %dx.types.ResRet.f32 %22, 3 - call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 0, float %23) ; StoreOutput(outputSigId,rowIndex,colIndex,value) - call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 1, float %24) ; StoreOutput(outputSigId,rowIndex,colIndex,value) - call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 2, float %25) ; StoreOutput(outputSigId,rowIndex,colIndex,value) - call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 3, float %26) ; StoreOutput(outputSigId,rowIndex,colIndex,value) - ret void -} - -; Function Attrs: nounwind readnone -declare float @dx.op.loadInput.f32(i32, i32, i32, i8, i32) #0 - -; Function Attrs: nounwind -declare void @dx.op.storeOutput.f32(i32, i32, i32, i8, float) #1 - -; Function Attrs: nounwind readonly -declare %dx.types.ResRet.f32 @dx.op.sampleLevel.f32(i32, %dx.types.Handle, %dx.types.Handle, float, float, float, float, i32, i32, i32, float) #2 - -; Function Attrs: nounwind readonly -declare %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32, %dx.types.Handle, i32) #2 - -; Function Attrs: nounwind readonly -declare %dx.types.CBufRet.i32 @dx.op.cbufferLoadLegacy.i32(i32, %dx.types.Handle, i32) #2 - -; Function Attrs: nounwind readonly -declare %dx.types.Handle @dx.op.createHandle(i32, i8, i32, i32, i1) #2 - -attributes #0 = { nounwind readnone } -attributes #1 = { nounwind } -attributes #2 = { nounwind readonly } - -!llvm.ident = !{!0} -!dx.version = !{!1} -!dx.valver = !{!2} -!dx.shaderModel = !{!3} -!dx.resources = !{!4} -!dx.viewIdState = !{!12} -!dx.entryPoints = !{!13} - -!0 = !{!"clang version 3.7 (tags/RELEASE_370/final)"} -!1 = !{i32 1, i32 0} -!2 = !{i32 1, i32 6} -!3 = !{!"ps", i32 6, i32 0} -!4 = !{!5, null, !8, !10} -!5 = !{!6} -!6 = !{i32 0, %"class.Texture2DArray >"* undef, !"", i32 2, i32 0, i32 1, i32 7, i32 0, !7} -!7 = !{i32 0, i32 9} -!8 = !{!9} -!9 = !{i32 0, %SourceRegionBuffer* undef, !"", i32 3, i32 0, i32 1, i32 24, null} -!10 = !{!11} -!11 = !{i32 0, %struct.SamplerState* undef, !"", i32 2, i32 0, i32 1, i32 0, null} -!12 = !{[10 x i32] [i32 8, i32 4, i32 15, i32 15, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0]} -!13 = !{void ()* @BlitFrom2DArray, !"BlitFrom2DArray", !14, !4, null} -!14 = !{!15, !20, null} -!15 = !{!16, !19} -!16 = !{i32 0, !"TEXCOORD", i8 9, i8 0, !17, i8 2, i32 1, i8 2, i32 0, i8 0, !18} -!17 = !{i32 0} -!18 = !{i32 3, i32 3} -!19 = !{i32 1, !"SV_Position", i8 9, i8 3, !17, i8 4, i32 1, i8 4, i32 1, i8 0, null} -!20 = !{!21} -!21 = !{i32 0, !"SV_Target", i8 9, i8 16, !17, i8 0, i32 1, i8 4, i32 0, i8 0, !22} -!22 = !{i32 3, i32 15} - -#endif - -const unsigned char g_BlitFrom2DArray[] = { - 0x44, 0x58, 0x42, 0x43, 0xdf, 0xde, 0xbd, 0x23, 0xe2, 0x83, 0x0e, 0x5d, - 0xfb, 0xe3, 0x84, 0xf0, 0x8c, 0x87, 0xbb, 0x3c, 0x01, 0x00, 0x00, 0x00, - 0x83, 0x12, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, - 0x50, 0x00, 0x00, 0x00, 0xb5, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, - 0xe7, 0x01, 0x00, 0x00, 0x77, 0x02, 0x00, 0x00, 0x7b, 0x0a, 0x00, 0x00, - 0x97, 0x0a, 0x00, 0x00, 0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31, - 0x5d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, - 0x00, 0x53, 0x56, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x00, 0x4f, 0x53, 0x47, 0x31, 0x32, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x53, 0x56, 0x5f, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x00, 0x50, - 0x53, 0x56, 0x30, 0xf0, 0x00, 0x00, 0x00, 0x30, 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, 0x01, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, - 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x42, 0x00, 0x03, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x44, 0x03, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x10, 0x03, 0x00, 0x00, 0x00, 0x0f, - 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x54, 0x53, 0x30, 0x88, - 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x3c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x5c, - 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x7c, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, - 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x54, 0x41, 0x54, 0xfc, - 0x07, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xff, 0x01, 0x00, 0x00, 0x44, - 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xe4, - 0x07, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xf6, - 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, 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, 0x5c, - 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, 0x8c, 0xc1, 0x08, 0x40, - 0x09, 0x00, 0x0a, 0x66, 0x00, 0xe6, 0x08, 0xc0, 0x60, 0x8e, 0x00, 0x29, - 0xc6, 0x40, 0x10, 0x44, 0x41, 0x90, 0x51, 0x0c, 0x80, 0x20, 0x88, 0x62, - 0x20, 0xe4, 0xa6, 0xe1, 0xf2, 0x27, 0xec, 0x21, 0x24, 0x7f, 0x25, 0xa4, - 0x95, 0x98, 0xfc, 0xe2, 0xb6, 0x51, 0x31, 0x0c, 0xc3, 0x40, 0x50, 0x71, - 0xcf, 0x70, 0xf9, 0x13, 0xf6, 0x10, 0x92, 0x1f, 0x02, 0xcd, 0xb0, 0x10, - 0x28, 0x58, 0x0a, 0xa3, 0x10, 0x0c, 0x33, 0x0c, 0xc3, 0x40, 0x10, 0xc4, - 0x40, 0xcd, 0x51, 0xc3, 0xe5, 0x4f, 0xd8, 0x43, 0x48, 0x3e, 0xb7, 0x51, - 0xc5, 0x4a, 0x4c, 0x7e, 0x71, 0xdb, 0x88, 0x18, 0x86, 0x61, 0x28, 0xc4, - 0x43, 0x30, 0x04, 0x41, 0x47, 0x0d, 0x97, 0x3f, 0x61, 0x0f, 0x21, 0xf9, - 0xdc, 0x46, 0x15, 0x2b, 0x31, 0xf9, 0xc8, 0x6d, 0x23, 0x82, 0x20, 0x08, - 0xa2, 0x10, 0x12, 0xc1, 0x10, 0x34, 0xcd, 0x11, 0x04, 0xc5, 0x60, 0x88, - 0x82, 0x20, 0x2a, 0xb2, 0x06, 0x02, 0x86, 0x11, 0x88, 0x61, 0x26, 0x39, - 0x18, 0x07, 0x76, 0x08, 0x87, 0x79, 0x98, 0x07, 0x37, 0xa0, 0x85, 0x72, - 0xc0, 0x07, 0x7a, 0xa8, 0x07, 0x79, 0x28, 0x07, 0x39, 0x20, 0x85, 0x50, - 0x90, 0x07, 0x79, 0x08, 0x87, 0x7c, 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, 0x3d, - 0xd0, 0x83, 0x76, 0x48, 0x07, 0x78, 0x98, 0x87, 0x5f, 0xa0, 0x87, 0x7c, - 0x80, 0x87, 0x72, 0x40, 0x01, 0x31, 0xd3, 0x19, 0x8c, 0x03, 0x3b, 0x84, - 0xc3, 0x3c, 0xcc, 0x83, 0x1b, 0xd0, 0x42, 0x39, 0xe0, 0x03, 0x3d, 0xd4, - 0x83, 0x3c, 0x94, 0x83, 0x1c, 0x90, 0x42, 0x28, 0xc8, 0x83, 0x3c, 0x84, - 0x43, 0x3e, 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, 0x32, 0x8d, 0xb6, 0x61, - 0x04, 0x61, 0x38, 0x89, 0x75, 0xa8, 0x48, 0x20, 0x56, 0xc2, 0x40, 0x9c, - 0x66, 0xa3, 0x8a, 0x82, 0x88, 0x10, 0xd1, 0x75, 0xc4, 0x40, 0xde, 0x4d, - 0xd2, 0x14, 0x51, 0xc2, 0xe4, 0xb3, 0x00, 0xf3, 0x2c, 0x44, 0xc4, 0x4e, - 0xc0, 0x44, 0xa0, 0x80, 0x20, 0x30, 0x15, 0x08, 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, 0x43, 0x9e, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, 0x06, 0x10, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x79, 0x10, 0x20, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, 0x34, 0x40, - 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4, 0x81, - 0x80, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xc8, - 0x33, 0x01, 0x01, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, - 0x90, 0xc7, 0x02, 0x02, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x2c, 0x10, 0x14, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x18, 0x19, - 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x22, 0x4a, - 0x60, 0x04, 0xa0, 0x18, 0x8a, 0xa0, 0x1c, 0x4a, 0xa2, 0x0c, 0x0a, 0xa6, - 0x20, 0x0a, 0xa4, 0x14, 0x0a, 0xa5, 0x3c, 0xca, 0xa7, 0x10, 0xa8, 0x28, - 0x89, 0x11, 0x80, 0x22, 0x28, 0x83, 0x42, 0x28, 0x10, 0xaa, 0x6a, 0x80, - 0xb8, 0x19, 0x00, 0xf2, 0x66, 0x00, 0xe8, 0x9b, 0x01, 0xa0, 0x70, 0x06, - 0x80, 0xc4, 0xb1, 0x14, 0x84, 0x78, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0xb1, 0x00, 0x00, 0x00, 0x1a, - 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0x44, 0x35, 0x18, 0x63, 0x0b, 0x73, - 0x3b, 0x03, 0xb1, 0x2b, 0x93, 0x9b, 0x4b, 0x7b, 0x73, 0x03, 0x99, 0x71, - 0xb9, 0x01, 0x41, 0xa1, 0x0b, 0x3b, 0x9b, 0x7b, 0x91, 0x2a, 0x62, 0x2a, - 0x0a, 0x9a, 0x2a, 0xfa, 0x9a, 0xb9, 0x81, 0x79, 0x31, 0x4b, 0x73, 0x0b, - 0x63, 0x4b, 0xd9, 0x10, 0x04, 0x13, 0x04, 0xe2, 0x98, 0x20, 0x10, 0xc8, - 0x06, 0x61, 0x20, 0x36, 0x08, 0x04, 0x41, 0x01, 0x6e, 0x6e, 0x82, 0x40, - 0x24, 0x1b, 0x86, 0x03, 0x21, 0x26, 0x08, 0x5c, 0x47, 0x6a, 0xea, 0xad, - 0x4e, 0x6e, 0xac, 0x8c, 0xaa, 0x0c, 0x8f, 0xae, 0x4e, 0xae, 0x4c, 0x86, - 0x28, 0x48, 0x4e, 0x2e, 0x2c, 0x6f, 0x82, 0x40, 0x28, 0x13, 0x04, 0x62, - 0x99, 0x20, 0x10, 0xcc, 0x06, 0x81, 0x70, 0x36, 0x24, 0x84, 0xb2, 0x30, - 0xc4, 0xd0, 0x10, 0xcf, 0x86, 0x00, 0x9a, 0x20, 0x7c, 0x1f, 0xa5, 0xa9, - 0xb7, 0x3a, 0xb9, 0xb1, 0x32, 0xa9, 0xb2, 0xb3, 0xb4, 0x37, 0x37, 0xa1, - 0x3a, 0x33, 0xb3, 0x32, 0xb9, 0x09, 0x02, 0xd1, 0x4c, 0x10, 0x08, 0x67, - 0x03, 0x42, 0x48, 0x13, 0x45, 0x0c, 0x15, 0xb0, 0x21, 0xb0, 0x26, 0x08, - 0x61, 0x00, 0x06, 0x6c, 0xa6, 0xde, 0xea, 0xe4, 0xc6, 0xca, 0xa6, 0xc2, - 0xda, 0xe0, 0xd8, 0xca, 0xe4, 0x36, 0x20, 0x04, 0x96, 0x31, 0xc4, 0x40, - 0x00, 0x1b, 0x02, 0x6d, 0x03, 0x11, 0x01, 0xd7, 0x36, 0x41, 0xf0, 0x3c, - 0x26, 0x55, 0x56, 0x4c, 0x65, 0x66, 0x74, 0x54, 0x6f, 0x70, 0x13, 0x84, - 0x8a, 0xdb, 0x80, 0x20, 0x1e, 0x45, 0x34, 0x8e, 0xf3, 0x91, 0xa9, 0xb2, - 0x22, 0x4a, 0x6b, 0x2b, 0x73, 0x9b, 0x4b, 0x7b, 0x73, 0x9b, 0x9b, 0x20, - 0x10, 0xcf, 0x06, 0x04, 0x09, 0x03, 0x4a, 0x0c, 0x1a, 0xc7, 0xf9, 0x88, - 0x34, 0xa5, 0xc1, 0x31, 0x95, 0xd9, 0x95, 0xb1, 0x4d, 0x10, 0x08, 0x68, - 0x82, 0x40, 0x44, 0x1b, 0x10, 0x84, 0x0c, 0xa8, 0x32, 0x68, 0xcc, 0xc0, - 0xf9, 0xc8, 0x30, 0x85, 0xe5, 0x95, 0xc9, 0x3d, 0xc9, 0x11, 0x95, 0xc1, - 0xd1, 0xa1, 0x4d, 0x10, 0x08, 0x69, 0x03, 0x82, 0xa0, 0x01, 0x95, 0x06, - 0x8d, 0xe3, 0x7c, 0x1b, 0x8a, 0x0a, 0x0c, 0xc6, 0xe0, 0x0c, 0xd4, 0x60, - 0xc3, 0x40, 0x74, 0x6b, 0x30, 0x41, 0x10, 0x80, 0x0d, 0xc0, 0x86, 0x81, - 0x70, 0x03, 0x37, 0xd8, 0x10, 0xbc, 0xc1, 0x86, 0x61, 0x68, 0x03, 0x38, - 0x98, 0x20, 0x88, 0x41, 0x18, 0x6c, 0x08, 0xe4, 0x80, 0x8f, 0x10, 0x5b, - 0x1a, 0x9d, 0x91, 0xdc, 0x5b, 0x9b, 0x0c, 0x51, 0x90, 0x9c, 0x5c, 0x58, - 0x1e, 0x11, 0xaa, 0x22, 0xac, 0xa1, 0xa7, 0x27, 0x29, 0xa2, 0x09, 0x42, - 0x61, 0x4d, 0x10, 0x8a, 0x6b, 0x43, 0x40, 0x4c, 0x10, 0x0a, 0x6c, 0x83, - 0x40, 0x51, 0x1b, 0x16, 0xa2, 0x0e, 0xec, 0xe0, 0x0e, 0xf0, 0x20, 0x0f, - 0x86, 0x3c, 0x20, 0xee, 0x40, 0x0f, 0xb8, 0x4c, 0x59, 0x7d, 0x41, 0xbd, - 0xcd, 0xa5, 0xd1, 0xa5, 0xbd, 0xb9, 0x4d, 0x10, 0x8a, 0x6c, 0x82, 0x50, - 0x68, 0x1b, 0x96, 0x81, 0x0f, 0xec, 0xa0, 0x0f, 0xf0, 0xc0, 0x0f, 0x06, - 0x3f, 0x18, 0xee, 0x00, 0xd8, 0x20, 0xec, 0xc1, 0x1f, 0x30, 0x99, 0xb2, - 0xfa, 0xa2, 0x0a, 0x93, 0x3b, 0x2b, 0xa3, 0x9b, 0x20, 0x14, 0xdb, 0x04, - 0x81, 0x98, 0x36, 0x08, 0xd4, 0x28, 0x6c, 0x58, 0x88, 0x50, 0xb0, 0x03, - 0x51, 0xc0, 0x83, 0x3b, 0x18, 0xfc, 0x80, 0xb8, 0x03, 0x52, 0xd8, 0x10, - 0x94, 0xc2, 0x86, 0x01, 0x14, 0x4c, 0x01, 0xd8, 0x50, 0xb4, 0x01, 0x1d, - 0x9c, 0x02, 0x07, 0xd0, 0x30, 0x63, 0x7b, 0x0b, 0xa3, 0x9b, 0x63, 0x91, - 0xe6, 0x36, 0x47, 0x37, 0x37, 0x41, 0x20, 0x28, 0x1a, 0x73, 0x69, 0x67, - 0x5f, 0x6c, 0x64, 0x34, 0xe6, 0xd2, 0xce, 0xbe, 0xe6, 0xe8, 0x26, 0x08, - 0x44, 0x45, 0x84, 0xae, 0x0c, 0xef, 0xcb, 0xed, 0x4d, 0xae, 0x6d, 0x83, - 0x92, 0x0a, 0x8d, 0x2a, 0xac, 0x02, 0x2b, 0x30, 0xad, 0xe0, 0x0a, 0xaf, - 0x30, 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, 0x41, 0x51, 0x87, 0x0c, 0xcf, 0x65, 0x0e, 0x2d, - 0x8c, 0xac, 0x4c, 0xae, 0xe9, 0x8d, 0xac, 0x8c, 0x6d, 0x4a, 0x80, 0x94, - 0x21, 0xc3, 0x73, 0x91, 0x2b, 0x9b, 0x7b, 0xab, 0x93, 0x1b, 0x2b, 0x9b, - 0x9b, 0x12, 0x6c, 0x95, 0xc8, 0xf0, 0x5c, 0xe8, 0xf2, 0xe0, 0xca, 0x82, - 0xdc, 0xdc, 0xde, 0xe8, 0xc2, 0xe8, 0xd2, 0xde, 0xdc, 0xe6, 0xa6, 0x08, - 0x6b, 0x00, 0x07, 0x75, 0xc8, 0xf0, 0x5c, 0xec, 0xd2, 0xca, 0xee, 0x92, - 0xc8, 0xa6, 0xe8, 0xc2, 0xe8, 0xca, 0xa6, 0x04, 0x72, 0x50, 0x87, 0x0c, - 0xcf, 0xa5, 0xcc, 0x8d, 0x4e, 0x2e, 0x0f, 0xea, 0x2d, 0xcd, 0x8d, 0x6e, - 0x6e, 0x4a, 0x70, 0x0a, 0x5d, 0xc8, 0xf0, 0x5c, 0xc6, 0xde, 0xea, 0xdc, - 0xe8, 0xca, 0xe4, 0xe6, 0xa6, 0x04, 0xaf, 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, 0x0c, 0xc4, 0x21, 0x07, 0x7c, 0x70, 0x03, - 0x7a, 0x28, 0x87, 0x76, 0x80, 0x87, 0x19, 0xd1, 0x43, 0x0e, 0xf8, 0xe0, - 0x06, 0xe4, 0x20, 0x0e, 0xe7, 0xe0, 0x06, 0xf6, 0x10, 0x0e, 0xf2, 0xc0, - 0x0e, 0xe1, 0x90, 0x0f, 0xef, 0x50, 0x0f, 0xf4, 0x00, 0x00, 0x00, 0x71, - 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x06, 0xf0, 0x6c, 0x0b, 0x32, - 0x7d, 0x91, 0xc3, 0xd8, 0x9d, 0x16, 0x45, 0x00, 0x66, 0x04, 0xdb, 0x70, - 0xf9, 0xce, 0xe3, 0x0b, 0x01, 0x55, 0x14, 0x44, 0x54, 0x3a, 0xc0, 0x50, - 0x12, 0x06, 0x20, 0x60, 0x7e, 0x71, 0xdb, 0x56, 0xb0, 0x0d, 0x97, 0xef, - 0x3c, 0xbe, 0x10, 0x50, 0x45, 0x41, 0x44, 0xa5, 0x03, 0x0c, 0x25, 0x61, - 0x00, 0x02, 0xe6, 0x23, 0xb7, 0x6d, 0x06, 0xd2, 0x70, 0xf9, 0xce, 0xe3, - 0x0b, 0x11, 0x01, 0x4c, 0x44, 0x08, 0x34, 0xc3, 0x42, 0x58, 0xc0, 0x34, - 0x5c, 0xbe, 0xf3, 0xf8, 0x8b, 0x03, 0x0c, 0x62, 0xf3, 0x50, 0x93, 0x5f, - 0xdc, 0xb6, 0x0d, 0x54, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x01, 0xcc, 0xb3, - 0x10, 0x25, 0x51, 0x11, 0x8b, 0x5f, 0xdc, 0xb6, 0x09, 0x54, 0xc3, 0xe5, - 0x3b, 0x8f, 0x2f, 0x4d, 0x4e, 0x44, 0xa0, 0xd4, 0xf4, 0x50, 0x93, 0x5f, - 0xdc, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48, 0x14, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2e, 0x13, 0xf0, 0x4e, 0x87, - 0x80, 0xc3, 0x55, 0xf3, 0x6d, 0xba, 0x74, 0xb8, 0x11, 0xbc, 0x6f, 0x44, - 0x58, 0x49, 0x4c, 0xe4, 0x07, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xf9, - 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, - 0x00, 0x00, 0x00, 0xcc, 0x07, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, - 0x0c, 0x00, 0x00, 0xf0, 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, 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, 0x5c, 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, - 0x8c, 0xc1, 0x08, 0x40, 0x09, 0x00, 0x0a, 0x66, 0x00, 0xe6, 0x08, 0xc0, - 0x60, 0x8e, 0x00, 0x29, 0xc6, 0x40, 0x10, 0x44, 0x41, 0x90, 0x51, 0x0c, - 0x80, 0x20, 0x88, 0x62, 0x20, 0xe4, 0xa6, 0xe1, 0xf2, 0x27, 0xec, 0x21, - 0x24, 0x7f, 0x25, 0xa4, 0x95, 0x98, 0xfc, 0xe2, 0xb6, 0x51, 0x31, 0x0c, - 0xc3, 0x40, 0x50, 0x71, 0xcf, 0x70, 0xf9, 0x13, 0xf6, 0x10, 0x92, 0x1f, - 0x02, 0xcd, 0xb0, 0x10, 0x28, 0x58, 0x0a, 0xa3, 0x10, 0x0c, 0x33, 0x0c, - 0xc3, 0x40, 0x10, 0xc4, 0x40, 0xcd, 0x51, 0xc3, 0xe5, 0x4f, 0xd8, 0x43, - 0x48, 0x3e, 0xb7, 0x51, 0xc5, 0x4a, 0x4c, 0x7e, 0x71, 0xdb, 0x88, 0x18, - 0x86, 0x61, 0x28, 0xc4, 0x43, 0x30, 0x04, 0x41, 0x47, 0x0d, 0x97, 0x3f, - 0x61, 0x0f, 0x21, 0xf9, 0xdc, 0x46, 0x15, 0x2b, 0x31, 0xf9, 0xc8, 0x6d, - 0x23, 0x82, 0x20, 0x08, 0xa2, 0x10, 0x12, 0xc1, 0x10, 0x34, 0xcd, 0x11, - 0x04, 0xc5, 0x60, 0x88, 0x82, 0x20, 0x2a, 0xb2, 0x06, 0x02, 0x86, 0x11, - 0x88, 0x61, 0x26, 0x39, 0x18, 0x07, 0x76, 0x08, 0x87, 0x79, 0x98, 0x07, - 0x37, 0xa0, 0x85, 0x72, 0xc0, 0x07, 0x7a, 0xa8, 0x07, 0x79, 0x28, 0x07, - 0x39, 0x20, 0x85, 0x50, 0x90, 0x07, 0x79, 0x08, 0x87, 0x7c, 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, 0x3d, 0xd0, 0x83, 0x76, 0x48, 0x07, 0x78, 0x98, 0x87, - 0x5f, 0xa0, 0x87, 0x7c, 0x80, 0x87, 0x72, 0x40, 0x01, 0x31, 0xd3, 0x19, - 0x8c, 0x03, 0x3b, 0x84, 0xc3, 0x3c, 0xcc, 0x83, 0x1b, 0xd0, 0x42, 0x39, - 0xe0, 0x03, 0x3d, 0xd4, 0x83, 0x3c, 0x94, 0x83, 0x1c, 0x90, 0x42, 0x28, - 0xc8, 0x83, 0x3c, 0x84, 0x43, 0x3e, 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, - 0x32, 0x8d, 0xb6, 0x61, 0x04, 0x61, 0x38, 0x89, 0x75, 0xa8, 0x48, 0x20, - 0x56, 0xc2, 0x40, 0x9c, 0x66, 0xa3, 0x8a, 0x82, 0x88, 0x10, 0xd1, 0x75, - 0xc4, 0x40, 0xde, 0x4d, 0xd2, 0x14, 0x51, 0xc2, 0xe4, 0xb3, 0x00, 0xf3, - 0x2c, 0x44, 0xc4, 0x4e, 0xc0, 0x44, 0xa0, 0x80, 0x20, 0x30, 0x15, 0x08, - 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, 0x43, 0x9e, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, - 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, - 0x79, 0x10, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0xf2, 0x34, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x30, 0xe4, 0x81, 0x80, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x60, 0xc8, 0x33, 0x01, 0x01, 0x30, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xc0, 0x90, 0xc7, 0x02, 0x02, 0x60, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x2c, 0x10, 0x10, 0x00, 0x00, 0x00, 0x32, - 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, - 0x04, 0x43, 0x22, 0x4a, 0x60, 0x04, 0xa0, 0x18, 0x8a, 0xa0, 0x1c, 0x4a, - 0xa2, 0x0c, 0x0a, 0xa6, 0x3c, 0xa8, 0x28, 0x89, 0x11, 0x80, 0x22, 0x28, - 0x83, 0x42, 0x28, 0x10, 0xe2, 0x66, 0x00, 0xe8, 0x9b, 0x01, 0xa0, 0x70, - 0x06, 0x80, 0xc4, 0xb1, 0x14, 0x84, 0x78, 0x1e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x1a, - 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0x44, 0x35, 0x18, 0x63, 0x0b, 0x73, - 0x3b, 0x03, 0xb1, 0x2b, 0x93, 0x9b, 0x4b, 0x7b, 0x73, 0x03, 0x99, 0x71, - 0xb9, 0x01, 0x41, 0xa1, 0x0b, 0x3b, 0x9b, 0x7b, 0x91, 0x2a, 0x62, 0x2a, - 0x0a, 0x9a, 0x2a, 0xfa, 0x9a, 0xb9, 0x81, 0x79, 0x31, 0x4b, 0x73, 0x0b, - 0x63, 0x4b, 0xd9, 0x10, 0x04, 0x13, 0x04, 0xe2, 0x98, 0x20, 0x10, 0xc8, - 0x06, 0x61, 0x20, 0x26, 0x08, 0x44, 0xb2, 0x41, 0x18, 0x0c, 0x0a, 0x70, - 0x73, 0x1b, 0x06, 0xc4, 0x20, 0x26, 0x08, 0x9c, 0x45, 0x60, 0x82, 0x40, - 0x28, 0x13, 0x04, 0x62, 0x99, 0x20, 0x10, 0xcc, 0x06, 0x81, 0x70, 0x36, - 0x24, 0x84, 0xb2, 0x30, 0xc4, 0xd0, 0x10, 0xcf, 0x86, 0x00, 0x9a, 0x20, - 0x7c, 0xd7, 0x04, 0x81, 0x68, 0x26, 0x08, 0x84, 0xb3, 0x01, 0x21, 0xa4, - 0x65, 0x22, 0x06, 0x0a, 0xd8, 0x10, 0x54, 0x13, 0x84, 0x30, 0xc0, 0x36, - 0x20, 0xc4, 0xb5, 0x30, 0xc4, 0x40, 0x00, 0x1b, 0x02, 0x6c, 0x03, 0x11, - 0x01, 0x56, 0x36, 0x41, 0x10, 0x83, 0x6c, 0x43, 0xb0, 0x4d, 0x10, 0x04, - 0x80, 0x8f, 0x10, 0x5b, 0x1a, 0x9d, 0x91, 0xdc, 0x5b, 0x9b, 0x0c, 0x51, - 0x90, 0x9c, 0x5c, 0x58, 0x1e, 0x11, 0xaa, 0x22, 0xac, 0xa1, 0xa7, 0x27, - 0x29, 0xa2, 0x09, 0x42, 0x01, 0x4d, 0x10, 0x8a, 0x68, 0x43, 0x40, 0x4c, - 0x10, 0x0a, 0x69, 0x83, 0x30, 0x4d, 0x1b, 0x16, 0xe2, 0x03, 0x83, 0x30, - 0x10, 0x83, 0x31, 0x18, 0xc6, 0x80, 0x08, 0x03, 0x32, 0xe0, 0x32, 0x65, - 0xf5, 0x05, 0xf5, 0x36, 0x97, 0x46, 0x97, 0xf6, 0xe6, 0x36, 0x41, 0x28, - 0xa6, 0x09, 0x42, 0x41, 0x6d, 0x58, 0x06, 0x33, 0x00, 0x83, 0x33, 0x10, - 0x03, 0x34, 0x18, 0xd0, 0x60, 0x08, 0x03, 0x60, 0x83, 0x50, 0x06, 0x69, - 0xc0, 0x64, 0xca, 0xea, 0x8b, 0x2a, 0x4c, 0xee, 0xac, 0x8c, 0x6e, 0x82, - 0x50, 0x54, 0x13, 0x04, 0xe2, 0xd9, 0x20, 0x4c, 0x6d, 0xb0, 0x61, 0x21, - 0xd6, 0x00, 0x0c, 0xd8, 0x40, 0x0c, 0xc2, 0x60, 0x40, 0x03, 0x22, 0x0c, - 0xdc, 0x60, 0x43, 0xf0, 0x06, 0x1b, 0x06, 0x35, 0x80, 0x03, 0x60, 0x43, - 0xd1, 0x79, 0x71, 0xa0, 0x01, 0x55, 0xd8, 0xd8, 0xec, 0xda, 0x5c, 0xd2, - 0xc8, 0xca, 0xdc, 0xe8, 0xa6, 0x04, 0x41, 0x15, 0x32, 0x3c, 0x17, 0xbb, - 0x32, 0xb9, 0xb9, 0xb4, 0x37, 0xb7, 0x29, 0x01, 0xd1, 0x84, 0x0c, 0xcf, - 0xc5, 0x2e, 0x8c, 0xcd, 0xae, 0x4c, 0x6e, 0x4a, 0x60, 0xd4, 0x21, 0xc3, - 0x73, 0x99, 0x43, 0x0b, 0x23, 0x2b, 0x93, 0x6b, 0x7a, 0x23, 0x2b, 0x63, - 0x9b, 0x12, 0x20, 0x65, 0xc8, 0xf0, 0x5c, 0xe4, 0xca, 0xe6, 0xde, 0xea, - 0xe4, 0xc6, 0xca, 0xe6, 0xa6, 0x04, 0x59, 0x1d, 0x32, 0x3c, 0x17, 0xbb, - 0xb4, 0xb2, 0xbb, 0x24, 0xb2, 0x29, 0xba, 0x30, 0xba, 0xb2, 0x29, 0xc1, - 0x56, 0x87, 0x0c, 0xcf, 0xa5, 0xcc, 0x8d, 0x4e, 0x2e, 0x0f, 0xea, 0x2d, - 0xcd, 0x8d, 0x6e, 0x6e, 0x4a, 0x10, 0x07, 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, 0x0c, 0xc4, 0x21, 0x07, 0x7c, 0x70, 0x03, - 0x7a, 0x28, 0x87, 0x76, 0x80, 0x87, 0x19, 0xd1, 0x43, 0x0e, 0xf8, 0xe0, - 0x06, 0xe4, 0x20, 0x0e, 0xe7, 0xe0, 0x06, 0xf6, 0x10, 0x0e, 0xf2, 0xc0, - 0x0e, 0xe1, 0x90, 0x0f, 0xef, 0x50, 0x0f, 0xf4, 0x00, 0x00, 0x00, 0x71, - 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x06, 0xf0, 0x6c, 0x0b, 0x32, - 0x7d, 0x91, 0xc3, 0xd8, 0x9d, 0x16, 0x45, 0x00, 0x66, 0x04, 0xdb, 0x70, - 0xf9, 0xce, 0xe3, 0x0b, 0x01, 0x55, 0x14, 0x44, 0x54, 0x3a, 0xc0, 0x50, - 0x12, 0x06, 0x20, 0x60, 0x7e, 0x71, 0xdb, 0x56, 0xb0, 0x0d, 0x97, 0xef, - 0x3c, 0xbe, 0x10, 0x50, 0x45, 0x41, 0x44, 0xa5, 0x03, 0x0c, 0x25, 0x61, - 0x00, 0x02, 0xe6, 0x23, 0xb7, 0x6d, 0x06, 0xd2, 0x70, 0xf9, 0xce, 0xe3, - 0x0b, 0x11, 0x01, 0x4c, 0x44, 0x08, 0x34, 0xc3, 0x42, 0x58, 0xc0, 0x34, - 0x5c, 0xbe, 0xf3, 0xf8, 0x8b, 0x03, 0x0c, 0x62, 0xf3, 0x50, 0x93, 0x5f, - 0xdc, 0xb6, 0x0d, 0x54, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x01, 0xcc, 0xb3, - 0x10, 0x25, 0x51, 0x11, 0x8b, 0x5f, 0xdc, 0xb6, 0x09, 0x54, 0xc3, 0xe5, - 0x3b, 0x8f, 0x2f, 0x4d, 0x4e, 0x44, 0xa0, 0xd4, 0xf4, 0x50, 0x93, 0x5f, - 0xdc, 0x36, 0x00, 0x61, 0x20, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x13, - 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x54, - 0x8d, 0x00, 0x10, 0x51, 0x0a, 0x25, 0x37, 0x03, 0x50, 0x76, 0x85, 0x50, - 0x7c, 0x54, 0x94, 0x00, 0x0d, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, - 0x06, 0x09, 0x00, 0x82, 0x60, 0x60, 0x75, 0x87, 0xb4, 0x6d, 0xc9, 0x88, - 0x41, 0x02, 0x80, 0x20, 0x18, 0x58, 0x1e, 0x12, 0x71, 0x9c, 0x32, 0x62, - 0x90, 0x00, 0x20, 0x08, 0x06, 0xd6, 0x97, 0x4c, 0x5d, 0xb7, 0x8c, 0x18, - 0x24, 0x00, 0x08, 0x82, 0x81, 0x51, 0x06, 0x87, 0xe7, 0x55, 0xc9, 0x88, - 0x41, 0x02, 0x80, 0x20, 0x18, 0x18, 0x66, 0x80, 0x7c, 0x9f, 0xa1, 0x8c, - 0x18, 0x1c, 0x00, 0x08, 0x82, 0x01, 0x44, 0x06, 0xca, 0x00, 0x06, 0xa3, - 0x09, 0x01, 0x30, 0x9a, 0x20, 0x04, 0xa3, 0x09, 0x83, 0x30, 0x9a, 0x40, - 0x0c, 0x26, 0x1c, 0xf2, 0x31, 0xe1, 0x90, 0x8f, 0x09, 0x06, 0x7c, 0x4c, - 0x30, 0xe0, 0x33, 0x62, 0x70, 0x00, 0x20, 0x08, 0x06, 0x50, 0x1b, 0x4c, - 0x8c, 0x1a, 0x8c, 0x26, 0x04, 0xc1, 0x05, 0xc4, 0x5c, 0x30, 0xd4, 0x88, - 0xc1, 0x01, 0x80, 0x20, 0x18, 0x4c, 0x70, 0x70, 0x41, 0x6e, 0x30, 0x9a, - 0x10, 0x00, 0x17, 0x0c, 0x35, 0x62, 0xf0, 0x00, 0x20, 0x08, 0x06, 0x4d, - 0x1d, 0x60, 0x15, 0x95, 0x20, 0x84, 0x05, 0x07, 0x70, 0xb0, 0x05, 0xa3, - 0x09, 0x01, 0x30, 0x9a, 0x20, 0x04, 0xa3, 0x09, 0x83, 0x30, 0x9a, 0x40, - 0x0c, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x80, 0xec, 0x81, 0x18, 0xd4, - 0x41, 0x1d, 0xb0, 0x01, 0x31, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0xc8, - 0x1e, 0x88, 0x41, 0x1d, 0xd4, 0x01, 0x37, 0x8c, 0x18, 0x24, 0x00, 0x08, - 0x82, 0x01, 0xb2, 0x07, 0x62, 0x50, 0x07, 0x75, 0xb0, 0x06, 0xc2, 0x88, - 0x41, 0x02, 0x80, 0x20, 0x18, 0x20, 0x7b, 0x20, 0x06, 0x75, 0x50, 0x07, - 0x6a, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 -}; -#if 0 -; -; Input signature: -; -; Name Index Mask Register SysValue Format Used -; -------------------- ----- ------ -------- -------- ------- ------ -; TEXCOORD 0 xy 0 NONE float xy -; SV_Position 0 xyzw 1 POS float -; -; -; Output signature: -; -; Name Index Mask Register SysValue Format Used -; -------------------- ----- ------ -------- -------- ------- ------ -; SV_Target 0 xyzw 0 TARGET float xyzw -; -; shader hash: 49c2f4be133400e07c3f23e9798b27f4 -; -; Pipeline Runtime Information: -; -; Pixel Shader -; DepthOutput=0 -; SampleFrequency=0 -; -; -; Input signature: -; -; Name Index InterpMode DynIdx -; -------------------- ----- ---------------------- ------ -; TEXCOORD 0 linear -; SV_Position 0 noperspective -; -; Output signature: -; -; Name Index InterpMode DynIdx -; -------------------- ----- ---------------------- ------ -; SV_Target 0 -; -; Buffer Definitions: -; -; cbuffer SourceRegionBuffer -; { -; -; struct SourceRegionBuffer -; { -; -; float2 UVLeftTop; ; Offset: 0 -; float2 UVDimensions; ; Offset: 8 -; uint MipLevel; ; Offset: 16 -; float LayerOrDepth; ; Offset: 20 -; -; } SourceRegionBuffer; ; Offset: 0 Size: 24 -; -; } -; -; -; Resource Bindings: -; -; Name Type Format Dim ID HLSL Bind Count -; ------------------------------ ---------- ------- ----------- ------- -------------- ------ -; SourceRegionBuffer cbuffer NA NA CB0 cb0,space3 1 -; SourceSampler sampler NA NA S0 s0,space2 1 -; SourceTexture3D texture f32 3d T0 t0,space2 1 -; -; -; ViewId state: -; -; Number of inputs: 8, outputs: 4 -; Outputs dependent on ViewId: { } -; Inputs contributing to computation of Outputs: -; output 0 depends on inputs: { 0, 1 } -; output 1 depends on inputs: { 0, 1 } -; output 2 depends on inputs: { 0, 1 } -; output 3 depends on inputs: { 0, 1 } -; -target datalayout = "e-m:e-p:32:32-i1:32-i8:32-i16:32-i32:32-i64:64-f16:32-f32:32-f64:64-n8:16:32:64" -target triple = "dxil-ms-dx" - -%dx.types.Handle = type { i8* } -%dx.types.CBufRet.f32 = type { float, float, float, float } -%dx.types.CBufRet.i32 = type { i32, i32, i32, i32 } -%dx.types.ResRet.f32 = type { float, float, float, float, i32 } -%"class.Texture3D >" = type { <4 x float>, %"class.Texture3D >::mips_type" } -%"class.Texture3D >::mips_type" = type { i32 } -%SourceRegionBuffer = type { <2 x float>, <2 x float>, i32, float } -%struct.SamplerState = type { i32 } - -define void @BlitFrom3D() { - %1 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 0, i32 0, i32 0, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex) - %2 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 3, i32 0, i32 0, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex) - %3 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 2, i32 0, i32 0, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex) - %4 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) - %5 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 1, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) - %6 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %3, i32 0) ; CBufferLoadLegacy(handle,regIndex) - %7 = extractvalue %dx.types.CBufRet.f32 %6, 0 - %8 = extractvalue %dx.types.CBufRet.f32 %6, 1 - %9 = extractvalue %dx.types.CBufRet.f32 %6, 2 - %10 = extractvalue %dx.types.CBufRet.f32 %6, 3 - %11 = fmul fast float %9, %4 - %12 = fmul fast float %10, %5 - %13 = fadd fast float %11, %7 - %14 = fadd fast float %12, %8 - %15 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %3, i32 1) ; CBufferLoadLegacy(handle,regIndex) - %16 = extractvalue %dx.types.CBufRet.f32 %15, 1 - %17 = call %dx.types.CBufRet.i32 @dx.op.cbufferLoadLegacy.i32(i32 59, %dx.types.Handle %3, i32 1) ; CBufferLoadLegacy(handle,regIndex) - %18 = extractvalue %dx.types.CBufRet.i32 %17, 0 - %19 = uitofp i32 %18 to float - %20 = call %dx.types.ResRet.f32 @dx.op.sampleLevel.f32(i32 62, %dx.types.Handle %1, %dx.types.Handle %2, float %13, float %14, float %16, float undef, i32 0, i32 0, i32 0, float %19) ; SampleLevel(srv,sampler,coord0,coord1,coord2,coord3,offset0,offset1,offset2,LOD) - %21 = extractvalue %dx.types.ResRet.f32 %20, 0 - %22 = extractvalue %dx.types.ResRet.f32 %20, 1 - %23 = extractvalue %dx.types.ResRet.f32 %20, 2 - %24 = extractvalue %dx.types.ResRet.f32 %20, 3 - call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 0, float %21) ; StoreOutput(outputSigId,rowIndex,colIndex,value) - call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 1, float %22) ; StoreOutput(outputSigId,rowIndex,colIndex,value) - call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 2, float %23) ; StoreOutput(outputSigId,rowIndex,colIndex,value) - call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 3, float %24) ; StoreOutput(outputSigId,rowIndex,colIndex,value) - ret void -} - -; Function Attrs: nounwind readnone -declare float @dx.op.loadInput.f32(i32, i32, i32, i8, i32) #0 - -; Function Attrs: nounwind -declare void @dx.op.storeOutput.f32(i32, i32, i32, i8, float) #1 - -; Function Attrs: nounwind readonly -declare %dx.types.ResRet.f32 @dx.op.sampleLevel.f32(i32, %dx.types.Handle, %dx.types.Handle, float, float, float, float, i32, i32, i32, float) #2 - -; Function Attrs: nounwind readonly -declare %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32, %dx.types.Handle, i32) #2 - -; Function Attrs: nounwind readonly -declare %dx.types.CBufRet.i32 @dx.op.cbufferLoadLegacy.i32(i32, %dx.types.Handle, i32) #2 - -; Function Attrs: nounwind readonly -declare %dx.types.Handle @dx.op.createHandle(i32, i8, i32, i32, i1) #2 - -attributes #0 = { nounwind readnone } -attributes #1 = { nounwind } -attributes #2 = { nounwind readonly } - -!llvm.ident = !{!0} -!dx.version = !{!1} -!dx.valver = !{!2} -!dx.shaderModel = !{!3} -!dx.resources = !{!4} -!dx.viewIdState = !{!12} -!dx.entryPoints = !{!13} - -!0 = !{!"clang version 3.7 (tags/RELEASE_370/final)"} -!1 = !{i32 1, i32 0} -!2 = !{i32 1, i32 6} -!3 = !{!"ps", i32 6, i32 0} -!4 = !{!5, null, !8, !10} -!5 = !{!6} -!6 = !{i32 0, %"class.Texture3D >"* undef, !"", i32 2, i32 0, i32 1, i32 4, i32 0, !7} -!7 = !{i32 0, i32 9} -!8 = !{!9} -!9 = !{i32 0, %SourceRegionBuffer* undef, !"", i32 3, i32 0, i32 1, i32 24, null} -!10 = !{!11} -!11 = !{i32 0, %struct.SamplerState* undef, !"", i32 2, i32 0, i32 1, i32 0, null} -!12 = !{[10 x i32] [i32 8, i32 4, i32 15, i32 15, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0]} -!13 = !{void ()* @BlitFrom3D, !"BlitFrom3D", !14, !4, null} -!14 = !{!15, !20, null} -!15 = !{!16, !19} -!16 = !{i32 0, !"TEXCOORD", i8 9, i8 0, !17, i8 2, i32 1, i8 2, i32 0, i8 0, !18} -!17 = !{i32 0} -!18 = !{i32 3, i32 3} -!19 = !{i32 1, !"SV_Position", i8 9, i8 3, !17, i8 4, i32 1, i8 4, i32 1, i8 0, null} -!20 = !{!21} -!21 = !{i32 0, !"SV_Target", i8 9, i8 16, !17, i8 0, i32 1, i8 4, i32 0, i8 0, !22} -!22 = !{i32 3, i32 15} - -#endif - -const unsigned char g_BlitFrom3D[] = { - 0x44, 0x58, 0x42, 0x43, 0x02, 0xc7, 0x0f, 0x7e, 0xe3, 0x5a, 0xf4, 0x9b, - 0xc5, 0xb2, 0xf8, 0xed, 0xa6, 0x79, 0xed, 0xf4, 0x01, 0x00, 0x00, 0x00, - 0x3f, 0x12, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, - 0x50, 0x00, 0x00, 0x00, 0xb5, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, - 0xe7, 0x01, 0x00, 0x00, 0x77, 0x02, 0x00, 0x00, 0x5f, 0x0a, 0x00, 0x00, - 0x7b, 0x0a, 0x00, 0x00, 0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31, - 0x5d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, - 0x00, 0x53, 0x56, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x00, 0x4f, 0x53, 0x47, 0x31, 0x32, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x53, 0x56, 0x5f, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x00, 0x50, - 0x53, 0x56, 0x30, 0xf0, 0x00, 0x00, 0x00, 0x30, 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, 0x01, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, - 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x42, 0x00, 0x03, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x44, 0x03, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x10, 0x03, 0x00, 0x00, 0x00, 0x0f, - 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x54, 0x53, 0x30, 0x88, - 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x3c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x5c, - 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x7c, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, - 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x54, 0x41, 0x54, 0xe0, - 0x07, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xf8, 0x01, 0x00, 0x00, 0x44, - 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xc8, - 0x07, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xef, - 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, 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, 0x58, - 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, 0x8c, 0xc1, 0x08, 0x40, - 0x09, 0x00, 0x0a, 0x66, 0x00, 0xe6, 0x08, 0xc0, 0x60, 0x8e, 0x00, 0x29, - 0xc6, 0x40, 0x10, 0x44, 0x41, 0x90, 0x51, 0x0c, 0x80, 0x20, 0x88, 0x62, - 0x20, 0xe4, 0xa6, 0xe1, 0xf2, 0x27, 0xec, 0x21, 0x24, 0x7f, 0x25, 0xa4, - 0x95, 0x98, 0xfc, 0xe2, 0xb6, 0x51, 0x31, 0x0c, 0xc3, 0x40, 0x50, 0x71, - 0xcf, 0x70, 0xf9, 0x13, 0xf6, 0x10, 0x92, 0x1f, 0x02, 0xcd, 0xb0, 0x10, - 0x28, 0x58, 0x0a, 0xa3, 0x10, 0x0c, 0x33, 0x0c, 0xc3, 0x40, 0x10, 0xc4, - 0x40, 0xcd, 0x51, 0xc3, 0xe5, 0x4f, 0xd8, 0x43, 0x48, 0x3e, 0xb7, 0x51, - 0xc5, 0x4a, 0x4c, 0x7e, 0x71, 0xdb, 0x88, 0x18, 0x86, 0x61, 0x28, 0xc4, - 0x43, 0x30, 0x04, 0x41, 0x47, 0x0d, 0x97, 0x3f, 0x61, 0x0f, 0x21, 0xf9, - 0xdc, 0x46, 0x15, 0x2b, 0x31, 0xf9, 0xc8, 0x6d, 0x23, 0x82, 0x20, 0x08, - 0xa2, 0x10, 0x12, 0xc1, 0x10, 0x34, 0xcd, 0x11, 0x04, 0xc5, 0x60, 0x88, - 0x82, 0x20, 0x2a, 0xb2, 0x06, 0x02, 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, 0x87, 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, 0x10, 0x33, 0x89, - 0xc1, 0x38, 0xb0, 0x43, 0x38, 0xcc, 0xc3, 0x3c, 0xb8, 0x01, 0x2d, 0x94, - 0x03, 0x3e, 0xd0, 0x43, 0x3d, 0xc8, 0x43, 0x39, 0xcc, 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, 0x32, 0x8d, 0xb6, 0x61, 0x04, 0x61, 0x38, - 0x89, 0x75, 0xa8, 0x48, 0x20, 0x56, 0xc2, 0x40, 0x9c, 0x66, 0xa3, 0x8a, - 0x82, 0x88, 0x10, 0xd1, 0x75, 0xc4, 0x40, 0xde, 0x4d, 0xd2, 0x14, 0x51, - 0xc2, 0xe4, 0xb3, 0x00, 0xf3, 0x2c, 0x44, 0xc4, 0x4e, 0xc0, 0x44, 0xa0, - 0x80, 0x20, 0x30, 0x15, 0x08, 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, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x86, 0x3c, 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0c, 0x79, 0x10, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, 0x34, 0x40, 0x00, 0x0c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4, 0x81, 0x80, 0x00, 0x18, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xc8, 0x33, 0x01, 0x01, 0x30, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x90, 0xc7, 0x02, 0x02, - 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x2c, 0x10, 0x14, - 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x18, 0x19, 0x11, 0x4c, 0x90, 0x8c, - 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x22, 0x4a, 0x60, 0x04, 0xa0, 0x18, - 0x8a, 0xa0, 0x10, 0x4a, 0xa2, 0x0c, 0x0a, 0xa6, 0x1c, 0x0a, 0xa2, 0x40, - 0x4a, 0xa1, 0x50, 0xca, 0xa3, 0x74, 0xa8, 0x28, 0x89, 0x11, 0x80, 0x22, - 0x28, 0x83, 0x42, 0x28, 0x10, 0xaa, 0x6a, 0x80, 0xb8, 0x19, 0x00, 0xf2, - 0x66, 0x00, 0xe8, 0x9b, 0x01, 0xa0, 0x70, 0x06, 0x80, 0xc4, 0xb1, 0x14, - 0x84, 0x78, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, - 0x18, 0x00, 0x00, 0xaf, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, - 0x02, 0x13, 0x44, 0x35, 0x18, 0x63, 0x0b, 0x73, 0x3b, 0x03, 0xb1, 0x2b, - 0x93, 0x9b, 0x4b, 0x7b, 0x73, 0x03, 0x99, 0x71, 0xb9, 0x01, 0x41, 0xa1, - 0x0b, 0x3b, 0x9b, 0x7b, 0x91, 0x2a, 0x62, 0x2a, 0x0a, 0x9a, 0x2a, 0xfa, - 0x9a, 0xb9, 0x81, 0x79, 0x31, 0x4b, 0x73, 0x0b, 0x63, 0x4b, 0xd9, 0x10, - 0x04, 0x13, 0x04, 0xe2, 0x98, 0x20, 0x10, 0xc8, 0x06, 0x61, 0x20, 0x36, - 0x08, 0x04, 0x41, 0x01, 0x6e, 0x6e, 0x82, 0x40, 0x24, 0x1b, 0x86, 0x03, - 0x21, 0x26, 0x08, 0x5c, 0xc7, 0x67, 0xea, 0xad, 0x4e, 0x6e, 0xac, 0x8c, - 0xaa, 0x0c, 0x8f, 0xae, 0x4e, 0xae, 0x6c, 0x86, 0x68, 0x82, 0x40, 0x28, - 0x13, 0x04, 0x62, 0x99, 0x20, 0x10, 0xcc, 0x06, 0x81, 0x70, 0x36, 0x24, - 0x84, 0xb2, 0x30, 0xc4, 0xd0, 0x10, 0xcf, 0x86, 0x00, 0x9a, 0x20, 0x7c, - 0x1f, 0xa5, 0xa9, 0xb7, 0x3a, 0xb9, 0xb1, 0x32, 0xa9, 0xb2, 0xb3, 0xb4, - 0x37, 0x37, 0xa1, 0x3a, 0x33, 0xb3, 0x32, 0xb9, 0x09, 0x02, 0xd1, 0x4c, - 0x10, 0x08, 0x67, 0x03, 0x42, 0x48, 0x13, 0x45, 0x0c, 0x15, 0xb0, 0x21, - 0xb0, 0x26, 0x08, 0x61, 0x00, 0x06, 0x6c, 0xa6, 0xde, 0xea, 0xe4, 0xc6, - 0xca, 0xa6, 0xc2, 0xda, 0xe0, 0xd8, 0xca, 0xe4, 0x36, 0x20, 0x04, 0x96, - 0x31, 0xc4, 0x40, 0x00, 0x1b, 0x02, 0x6d, 0x03, 0x11, 0x01, 0xd7, 0x36, - 0x41, 0xf0, 0x3c, 0x26, 0x55, 0x56, 0x4c, 0x65, 0x66, 0x74, 0x54, 0x6f, - 0x70, 0x13, 0x04, 0xe2, 0x99, 0x20, 0x54, 0xdc, 0x06, 0x04, 0xf1, 0x28, - 0xe2, 0x73, 0x1c, 0x30, 0x20, 0x53, 0x65, 0x45, 0x94, 0xd6, 0x56, 0xe6, - 0x36, 0x97, 0xf6, 0xe6, 0x36, 0x37, 0x41, 0x20, 0xa0, 0x0d, 0x08, 0x22, - 0x06, 0xd4, 0x18, 0x7c, 0x8e, 0x03, 0x06, 0x44, 0x9a, 0xd2, 0xe0, 0x98, - 0xca, 0xec, 0xca, 0xd8, 0x26, 0x08, 0x44, 0x34, 0x41, 0x20, 0xa4, 0x0d, - 0x08, 0x52, 0x06, 0x94, 0x19, 0x7c, 0x67, 0xe0, 0x80, 0x01, 0x19, 0xa6, - 0xb0, 0xbc, 0x32, 0xb9, 0x27, 0x39, 0xa2, 0x32, 0x38, 0x3a, 0xb4, 0x09, - 0x02, 0x31, 0x6d, 0x40, 0x90, 0x34, 0xa0, 0xd4, 0xe0, 0x73, 0x1c, 0x30, - 0xd8, 0x50, 0x54, 0x61, 0x40, 0x06, 0x68, 0xb0, 0x06, 0x1b, 0x06, 0xa2, - 0x63, 0x83, 0x09, 0x82, 0x00, 0x6c, 0x00, 0x36, 0x0c, 0xc4, 0x1b, 0xbc, - 0xc1, 0x86, 0x00, 0x0e, 0x36, 0x0c, 0x83, 0x1b, 0xc4, 0xc1, 0x04, 0x41, - 0x0c, 0xc2, 0x60, 0x43, 0x30, 0x07, 0x54, 0x84, 0xd8, 0xd2, 0xe8, 0x8c, - 0xe4, 0xde, 0xda, 0x66, 0x88, 0x88, 0x50, 0x15, 0x61, 0x0d, 0x3d, 0x3d, - 0x49, 0x11, 0x4d, 0x10, 0x0a, 0x6b, 0x82, 0x50, 0x5c, 0x1b, 0x02, 0x62, - 0x82, 0x50, 0x60, 0x1b, 0x04, 0x8a, 0xda, 0xb0, 0x10, 0x76, 0x70, 0x07, - 0x78, 0x90, 0x07, 0x7a, 0x30, 0xe8, 0x01, 0x81, 0x07, 0x7b, 0xc0, 0x65, - 0xca, 0xea, 0x0b, 0xea, 0x6d, 0x2e, 0x8d, 0x2e, 0xed, 0xcd, 0x6d, 0x82, - 0x50, 0x64, 0x13, 0x84, 0x42, 0xdb, 0xb0, 0x0c, 0x7d, 0x70, 0x07, 0x7e, - 0x90, 0x07, 0x7f, 0x30, 0xfc, 0xc1, 0x80, 0x07, 0xc0, 0x06, 0x81, 0x0f, - 0x40, 0x81, 0xc9, 0x94, 0xd5, 0x17, 0x55, 0x98, 0xdc, 0x59, 0x19, 0xdd, - 0x04, 0xa1, 0xd8, 0x26, 0x08, 0x04, 0xb5, 0x41, 0xa0, 0x48, 0x61, 0xc3, - 0x42, 0x88, 0xc2, 0x1d, 0x8c, 0x42, 0x1e, 0xe0, 0xc1, 0xf0, 0x07, 0x04, - 0x1e, 0x94, 0xc2, 0x86, 0xc0, 0x14, 0x36, 0x0c, 0xa1, 0x70, 0x0a, 0xc0, - 0x86, 0xc2, 0x0d, 0xea, 0x00, 0x15, 0x38, 0x80, 0x86, 0x19, 0xdb, 0x5b, - 0x18, 0xdd, 0x1c, 0x8b, 0x34, 0xb7, 0x39, 0xba, 0xb9, 0x09, 0x02, 0x51, - 0xd1, 0x98, 0x4b, 0x3b, 0xfb, 0x62, 0x23, 0xa3, 0x31, 0x97, 0x76, 0xf6, - 0x35, 0x47, 0x47, 0x84, 0xae, 0x0c, 0xef, 0xcb, 0xed, 0x4d, 0xae, 0x6d, - 0x83, 0xa2, 0x0a, 0x67, 0xb0, 0x0a, 0xac, 0xd0, 0x0a, 0x8c, 0x2b, 0x34, - 0xaf, 0x30, 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, 0x41, 0x51, 0x87, 0x0c, 0xcf, 0x65, 0x0e, - 0x2d, 0x8c, 0xac, 0x4c, 0xae, 0xe9, 0x8d, 0xac, 0x8c, 0x6d, 0x4a, 0x80, - 0x94, 0x21, 0xc3, 0x73, 0x91, 0x2b, 0x9b, 0x7b, 0xab, 0x93, 0x1b, 0x2b, - 0x9b, 0x9b, 0x12, 0x6c, 0x95, 0xc8, 0xf0, 0x5c, 0xe8, 0xf2, 0xe0, 0xca, - 0x82, 0xdc, 0xdc, 0xde, 0xe8, 0xc2, 0xe8, 0xd2, 0xde, 0xdc, 0xe6, 0xa6, - 0x08, 0x6c, 0x10, 0x07, 0x75, 0xc8, 0xf0, 0x5c, 0xec, 0xd2, 0xca, 0xee, - 0x92, 0xc8, 0xa6, 0xe8, 0xc2, 0xe8, 0xca, 0xa6, 0x04, 0x73, 0x50, 0x87, - 0x0c, 0xcf, 0xa5, 0xcc, 0x8d, 0x4e, 0x2e, 0x0f, 0xea, 0x2d, 0xcd, 0x8d, - 0x6e, 0x6e, 0x4a, 0x80, 0x0a, 0x5d, 0xc8, 0xf0, 0x5c, 0xc6, 0xde, 0xea, - 0xdc, 0xe8, 0xca, 0xe4, 0xe6, 0xa6, 0x04, 0xaf, 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, 0x0c, 0xc4, 0x21, 0x07, 0x7c, 0x70, 0x03, - 0x7a, 0x28, 0x87, 0x76, 0x80, 0x87, 0x19, 0xd1, 0x43, 0x0e, 0xf8, 0xe0, - 0x06, 0xe4, 0x20, 0x0e, 0xe7, 0xe0, 0x06, 0xf6, 0x10, 0x0e, 0xf2, 0xc0, - 0x0e, 0xe1, 0x90, 0x0f, 0xef, 0x50, 0x0f, 0xf4, 0x00, 0x00, 0x00, 0x71, - 0x20, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x06, 0xa0, 0x6c, 0x0b, 0x32, - 0x7d, 0x91, 0xc3, 0xdc, 0x9d, 0x11, 0x6c, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, - 0x04, 0x54, 0x51, 0x10, 0x51, 0xe9, 0x00, 0x43, 0x49, 0x18, 0x80, 0x80, - 0xf9, 0xc5, 0x6d, 0x5b, 0xc1, 0x36, 0x5c, 0xbe, 0xf3, 0xf8, 0x42, 0x40, - 0x15, 0x05, 0x11, 0x95, 0x0e, 0x30, 0x94, 0x84, 0x01, 0x08, 0x98, 0x8f, - 0xdc, 0xb6, 0x19, 0x48, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x44, 0x04, 0x30, - 0x11, 0x21, 0xd0, 0x0c, 0x0b, 0x61, 0x01, 0xd3, 0x70, 0xf9, 0xce, 0xe3, - 0x2f, 0x0e, 0x30, 0x88, 0xcd, 0x43, 0x4d, 0x7e, 0x71, 0xdb, 0x36, 0x50, - 0x0d, 0x97, 0xef, 0x3c, 0xbe, 0x04, 0x30, 0xcf, 0x42, 0x94, 0x44, 0x45, - 0x2c, 0x7e, 0x71, 0xdb, 0x26, 0x50, 0x0d, 0x97, 0xef, 0x3c, 0xbe, 0x34, - 0x39, 0x11, 0x81, 0x52, 0xd3, 0x43, 0x4d, 0x7e, 0x71, 0xdb, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48, 0x14, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x49, 0xc2, 0xf4, 0xbe, 0x13, 0x34, 0x00, 0xe0, 0x7c, - 0x3f, 0x23, 0xe9, 0x79, 0x8b, 0x27, 0xf4, 0x44, 0x58, 0x49, 0x4c, 0xbc, - 0x07, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xef, 0x01, 0x00, 0x00, 0x44, - 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xa4, - 0x07, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xe6, - 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, 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, 0x58, - 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, 0x8c, 0xc1, 0x08, 0x40, - 0x09, 0x00, 0x0a, 0x66, 0x00, 0xe6, 0x08, 0xc0, 0x60, 0x8e, 0x00, 0x29, - 0xc6, 0x40, 0x10, 0x44, 0x41, 0x90, 0x51, 0x0c, 0x80, 0x20, 0x88, 0x62, - 0x20, 0xe4, 0xa6, 0xe1, 0xf2, 0x27, 0xec, 0x21, 0x24, 0x7f, 0x25, 0xa4, - 0x95, 0x98, 0xfc, 0xe2, 0xb6, 0x51, 0x31, 0x0c, 0xc3, 0x40, 0x50, 0x71, - 0xcf, 0x70, 0xf9, 0x13, 0xf6, 0x10, 0x92, 0x1f, 0x02, 0xcd, 0xb0, 0x10, - 0x28, 0x58, 0x0a, 0xa3, 0x10, 0x0c, 0x33, 0x0c, 0xc3, 0x40, 0x10, 0xc4, - 0x40, 0xcd, 0x51, 0xc3, 0xe5, 0x4f, 0xd8, 0x43, 0x48, 0x3e, 0xb7, 0x51, - 0xc5, 0x4a, 0x4c, 0x7e, 0x71, 0xdb, 0x88, 0x18, 0x86, 0x61, 0x28, 0xc4, - 0x43, 0x30, 0x04, 0x41, 0x47, 0x0d, 0x97, 0x3f, 0x61, 0x0f, 0x21, 0xf9, - 0xdc, 0x46, 0x15, 0x2b, 0x31, 0xf9, 0xc8, 0x6d, 0x23, 0x82, 0x20, 0x08, - 0xa2, 0x10, 0x12, 0xc1, 0x10, 0x34, 0xcd, 0x11, 0x04, 0xc5, 0x60, 0x88, - 0x82, 0x20, 0x2a, 0xb2, 0x06, 0x02, 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, 0x87, 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, 0x10, 0x33, 0x89, - 0xc1, 0x38, 0xb0, 0x43, 0x38, 0xcc, 0xc3, 0x3c, 0xb8, 0x01, 0x2d, 0x94, - 0x03, 0x3e, 0xd0, 0x43, 0x3d, 0xc8, 0x43, 0x39, 0xcc, 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, 0x32, 0x8d, 0xb6, 0x61, 0x04, 0x61, 0x38, - 0x89, 0x75, 0xa8, 0x48, 0x20, 0x56, 0xc2, 0x40, 0x9c, 0x66, 0xa3, 0x8a, - 0x82, 0x88, 0x10, 0xd1, 0x75, 0xc4, 0x40, 0xde, 0x4d, 0xd2, 0x14, 0x51, - 0xc2, 0xe4, 0xb3, 0x00, 0xf3, 0x2c, 0x44, 0xc4, 0x4e, 0xc0, 0x44, 0xa0, - 0x80, 0x20, 0x30, 0x15, 0x08, 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, 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0c, 0x79, 0x10, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, 0x34, 0x40, 0x00, 0x0c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4, 0x81, 0x80, 0x00, 0x18, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xc8, 0x33, 0x01, 0x01, 0x30, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x90, 0xc7, 0x02, 0x02, - 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x2c, 0x10, 0x10, - 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90, 0x8c, - 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x22, 0x4a, 0x60, 0x04, 0xa0, 0x18, - 0x8a, 0xa0, 0x10, 0x4a, 0xa2, 0x0c, 0x0a, 0xa6, 0x3c, 0xa8, 0x28, 0x89, - 0x11, 0x80, 0x22, 0x28, 0x83, 0x42, 0x28, 0x10, 0xe2, 0x66, 0x00, 0xe8, - 0x9b, 0x01, 0xa0, 0x70, 0x06, 0x80, 0xc4, 0xb1, 0x14, 0x84, 0x78, 0x1e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x67, - 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0x44, 0x35, - 0x18, 0x63, 0x0b, 0x73, 0x3b, 0x03, 0xb1, 0x2b, 0x93, 0x9b, 0x4b, 0x7b, - 0x73, 0x03, 0x99, 0x71, 0xb9, 0x01, 0x41, 0xa1, 0x0b, 0x3b, 0x9b, 0x7b, - 0x91, 0x2a, 0x62, 0x2a, 0x0a, 0x9a, 0x2a, 0xfa, 0x9a, 0xb9, 0x81, 0x79, - 0x31, 0x4b, 0x73, 0x0b, 0x63, 0x4b, 0xd9, 0x10, 0x04, 0x13, 0x04, 0xe2, - 0x98, 0x20, 0x10, 0xc8, 0x06, 0x61, 0x20, 0x26, 0x08, 0x44, 0xb2, 0x41, - 0x18, 0x0c, 0x0a, 0x70, 0x73, 0x1b, 0x06, 0xc4, 0x20, 0x26, 0x08, 0x9c, - 0x45, 0x60, 0x82, 0x40, 0x28, 0x13, 0x04, 0x62, 0x99, 0x20, 0x10, 0xcc, - 0x06, 0x81, 0x70, 0x36, 0x24, 0x84, 0xb2, 0x30, 0xc4, 0xd0, 0x10, 0xcf, - 0x86, 0x00, 0x9a, 0x20, 0x7c, 0xd7, 0x04, 0x81, 0x68, 0x26, 0x08, 0x84, - 0xb3, 0x01, 0x21, 0xa4, 0x65, 0x22, 0x06, 0x0a, 0xd8, 0x10, 0x54, 0x13, - 0x84, 0x30, 0xc0, 0x36, 0x20, 0xc4, 0xb5, 0x30, 0xc4, 0x40, 0x00, 0x1b, - 0x02, 0x6c, 0x03, 0x11, 0x01, 0x56, 0x36, 0x41, 0x10, 0x83, 0x6c, 0x43, - 0xb0, 0x4d, 0x10, 0x04, 0x80, 0x8a, 0x10, 0x5b, 0x1a, 0x9d, 0x91, 0xdc, - 0x5b, 0xdb, 0x0c, 0x11, 0x11, 0xaa, 0x22, 0xac, 0xa1, 0xa7, 0x27, 0x29, - 0xa2, 0x09, 0x42, 0x01, 0x4d, 0x10, 0x8a, 0x68, 0x43, 0x40, 0x4c, 0x10, - 0x0a, 0x69, 0x83, 0x30, 0x4d, 0x1b, 0x16, 0xe2, 0x03, 0x83, 0x30, 0x10, - 0x83, 0x31, 0x18, 0xc6, 0x80, 0x08, 0x03, 0x32, 0xe0, 0x32, 0x65, 0xf5, - 0x05, 0xf5, 0x36, 0x97, 0x46, 0x97, 0xf6, 0xe6, 0x36, 0x41, 0x28, 0xa6, - 0x09, 0x42, 0x41, 0x6d, 0x58, 0x06, 0x33, 0x00, 0x83, 0x33, 0x10, 0x03, - 0x34, 0x18, 0xd0, 0x60, 0x08, 0x03, 0x60, 0x83, 0x50, 0x06, 0x69, 0xc0, - 0x64, 0xca, 0xea, 0x8b, 0x2a, 0x4c, 0xee, 0xac, 0x8c, 0x6e, 0x82, 0x50, - 0x54, 0x13, 0x04, 0xe2, 0xd9, 0x20, 0x4c, 0x6d, 0xb0, 0x61, 0x21, 0xd6, - 0x00, 0x0c, 0xd8, 0x40, 0x0c, 0xc2, 0x60, 0x40, 0x03, 0x22, 0x0c, 0xdc, - 0x60, 0x43, 0xf0, 0x06, 0x1b, 0x06, 0x35, 0x80, 0x03, 0x60, 0x43, 0xd1, - 0x79, 0x71, 0xa0, 0x01, 0x55, 0xd8, 0xd8, 0xec, 0xda, 0x5c, 0xd2, 0xc8, - 0xca, 0xdc, 0xe8, 0xa6, 0x04, 0x41, 0x15, 0x32, 0x3c, 0x17, 0xbb, 0x32, - 0xb9, 0xb9, 0xb4, 0x37, 0xb7, 0x29, 0x01, 0xd1, 0x84, 0x0c, 0xcf, 0xc5, - 0x2e, 0x8c, 0xcd, 0xae, 0x4c, 0x6e, 0x4a, 0x60, 0xd4, 0x21, 0xc3, 0x73, - 0x99, 0x43, 0x0b, 0x23, 0x2b, 0x93, 0x6b, 0x7a, 0x23, 0x2b, 0x63, 0x9b, - 0x12, 0x20, 0x65, 0xc8, 0xf0, 0x5c, 0xe4, 0xca, 0xe6, 0xde, 0xea, 0xe4, - 0xc6, 0xca, 0xe6, 0xa6, 0x04, 0x59, 0x1d, 0x32, 0x3c, 0x17, 0xbb, 0xb4, - 0xb2, 0xbb, 0x24, 0xb2, 0x29, 0xba, 0x30, 0xba, 0xb2, 0x29, 0xc1, 0x56, - 0x87, 0x0c, 0xcf, 0xa5, 0xcc, 0x8d, 0x4e, 0x2e, 0x0f, 0xea, 0x2d, 0xcd, - 0x8d, 0x6e, 0x6e, 0x4a, 0x10, 0x07, 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, 0x0c, 0xc4, 0x21, 0x07, 0x7c, 0x70, 0x03, 0x7a, 0x28, 0x87, 0x76, - 0x80, 0x87, 0x19, 0xd1, 0x43, 0x0e, 0xf8, 0xe0, 0x06, 0xe4, 0x20, 0x0e, - 0xe7, 0xe0, 0x06, 0xf6, 0x10, 0x0e, 0xf2, 0xc0, 0x0e, 0xe1, 0x90, 0x0f, - 0xef, 0x50, 0x0f, 0xf4, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x1f, - 0x00, 0x00, 0x00, 0x06, 0xa0, 0x6c, 0x0b, 0x32, 0x7d, 0x91, 0xc3, 0xdc, - 0x9d, 0x11, 0x6c, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x04, 0x54, 0x51, 0x10, - 0x51, 0xe9, 0x00, 0x43, 0x49, 0x18, 0x80, 0x80, 0xf9, 0xc5, 0x6d, 0x5b, - 0xc1, 0x36, 0x5c, 0xbe, 0xf3, 0xf8, 0x42, 0x40, 0x15, 0x05, 0x11, 0x95, - 0x0e, 0x30, 0x94, 0x84, 0x01, 0x08, 0x98, 0x8f, 0xdc, 0xb6, 0x19, 0x48, - 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x44, 0x04, 0x30, 0x11, 0x21, 0xd0, 0x0c, - 0x0b, 0x61, 0x01, 0xd3, 0x70, 0xf9, 0xce, 0xe3, 0x2f, 0x0e, 0x30, 0x88, - 0xcd, 0x43, 0x4d, 0x7e, 0x71, 0xdb, 0x36, 0x50, 0x0d, 0x97, 0xef, 0x3c, - 0xbe, 0x04, 0x30, 0xcf, 0x42, 0x94, 0x44, 0x45, 0x2c, 0x7e, 0x71, 0xdb, - 0x26, 0x50, 0x0d, 0x97, 0xef, 0x3c, 0xbe, 0x34, 0x39, 0x11, 0x81, 0x52, - 0xd3, 0x43, 0x4d, 0x7e, 0x71, 0xdb, 0x00, 0x61, 0x20, 0x00, 0x00, 0x41, - 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x05, - 0x00, 0x00, 0x00, 0x54, 0x8d, 0x00, 0x10, 0x51, 0x0a, 0x25, 0x57, 0x76, - 0x33, 0x00, 0xc5, 0x47, 0x45, 0x09, 0xd0, 0x30, 0x03, 0x00, 0x00, 0x23, - 0x06, 0x09, 0x00, 0x82, 0x60, 0x60, 0x71, 0x46, 0xa4, 0x69, 0xc8, 0x88, - 0x41, 0x02, 0x80, 0x20, 0x18, 0x58, 0xdd, 0x01, 0x6d, 0x5b, 0x32, 0x62, - 0x90, 0x00, 0x20, 0x08, 0x06, 0x96, 0x87, 0x48, 0x1c, 0xa7, 0x8c, 0x18, - 0x24, 0x00, 0x08, 0x82, 0x81, 0x41, 0x06, 0x5a, 0xd7, 0x51, 0xc7, 0x88, - 0x41, 0x02, 0x80, 0x20, 0x18, 0x18, 0x65, 0xb0, 0x79, 0x9e, 0x81, 0x8c, - 0x18, 0x1c, 0x00, 0x08, 0x82, 0x01, 0x34, 0x06, 0xca, 0xf0, 0x8d, 0x26, - 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c, 0x26, 0x0c, 0xc2, 0x68, 0x02, 0x31, - 0x98, 0x70, 0xc8, 0xc7, 0x84, 0x43, 0x3e, 0x26, 0x18, 0xf0, 0x31, 0xc1, - 0x80, 0xcf, 0x88, 0xc1, 0x01, 0x80, 0x20, 0x18, 0x40, 0x6c, 0x30, 0x31, - 0x69, 0x30, 0x9a, 0x10, 0x04, 0x23, 0x06, 0x07, 0x00, 0x82, 0x60, 0x30, - 0xb5, 0x41, 0xe5, 0xac, 0xc1, 0x68, 0x42, 0x00, 0x5c, 0x30, 0xd4, 0x88, - 0xc1, 0x03, 0x80, 0x20, 0x18, 0x34, 0x72, 0x60, 0x4d, 0xd2, 0x61, 0x10, - 0x54, 0x1b, 0xb4, 0x41, 0x1b, 0x04, 0xa3, 0x09, 0x01, 0x30, 0x9a, 0x20, - 0x04, 0xa3, 0x09, 0x83, 0x30, 0x9a, 0x40, 0x0c, 0x23, 0x06, 0x09, 0x00, - 0x82, 0x60, 0x80, 0xe0, 0xc1, 0x27, 0x07, 0x72, 0x90, 0x06, 0xc4, 0x88, - 0x41, 0x02, 0x80, 0x20, 0x18, 0x20, 0x78, 0xf0, 0xc9, 0x81, 0x1c, 0x68, - 0xc3, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x20, 0x78, 0xf0, 0xc9, 0x81, - 0x1c, 0xa0, 0x81, 0x30, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x08, 0x1e, - 0x7c, 0x72, 0x20, 0x07, 0x67, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00 -}; -#if 0 -; -; Input signature: -; -; Name Index Mask Register SysValue Format Used -; -------------------- ----- ------ -------- -------- ------- ------ -; TEXCOORD 0 xy 0 NONE float xy -; SV_Position 0 xyzw 1 POS float -; -; -; Output signature: -; -; Name Index Mask Register SysValue Format Used -; -------------------- ----- ------ -------- -------- ------- ------ -; SV_Target 0 xyzw 0 TARGET float xyzw -; -; shader hash: e88bd1fd8f6be3ae3e613ed8989b06d7 -; -; Pipeline Runtime Information: -; -; Pixel Shader -; DepthOutput=0 -; SampleFrequency=0 -; -; -; Input signature: -; -; Name Index InterpMode DynIdx -; -------------------- ----- ---------------------- ------ -; TEXCOORD 0 linear -; SV_Position 0 noperspective -; -; Output signature: -; -; Name Index InterpMode DynIdx -; -------------------- ----- ---------------------- ------ -; SV_Target 0 -; -; Buffer Definitions: -; -; cbuffer SourceRegionBuffer -; { -; -; struct SourceRegionBuffer -; { -; -; float2 UVLeftTop; ; Offset: 0 -; float2 UVDimensions; ; Offset: 8 -; uint MipLevel; ; Offset: 16 -; float LayerOrDepth; ; Offset: 20 -; -; } SourceRegionBuffer; ; Offset: 0 Size: 24 -; -; } -; -; -; Resource Bindings: -; -; Name Type Format Dim ID HLSL Bind Count -; ------------------------------ ---------- ------- ----------- ------- -------------- ------ -; SourceRegionBuffer cbuffer NA NA CB0 cb0,space3 1 -; SourceSampler sampler NA NA S0 s0,space2 1 -; SourceTextureCube texture f32 cube T0 t0,space2 1 -; -; -; ViewId state: -; -; Number of inputs: 8, outputs: 4 -; Outputs dependent on ViewId: { } -; Inputs contributing to computation of Outputs: -; output 0 depends on inputs: { 0, 1 } -; output 1 depends on inputs: { 0, 1 } -; output 2 depends on inputs: { 0, 1 } -; output 3 depends on inputs: { 0, 1 } -; -target datalayout = "e-m:e-p:32:32-i1:32-i8:32-i16:32-i32:32-i64:64-f16:32-f32:32-f64:64-n8:16:32:64" -target triple = "dxil-ms-dx" - -%dx.types.Handle = type { i8* } -%dx.types.CBufRet.f32 = type { float, float, float, float } -%dx.types.CBufRet.i32 = type { i32, i32, i32, i32 } -%dx.types.ResRet.f32 = type { float, float, float, float, i32 } -%"class.TextureCube >" = type { <4 x float> } -%SourceRegionBuffer = type { <2 x float>, <2 x float>, i32, float } -%struct.SamplerState = type { i32 } - -define void @BlitFromCube() { - %1 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 0, i32 0, i32 0, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex) - %2 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 3, i32 0, i32 0, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex) - %3 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 2, i32 0, i32 0, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex) - %4 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 0, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) - %5 = call float @dx.op.loadInput.f32(i32 4, i32 0, i32 0, i8 1, i32 undef) ; LoadInput(inputSigId,rowIndex,colIndex,gsVertexAxis) - %6 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %3, i32 0) ; CBufferLoadLegacy(handle,regIndex) - %7 = extractvalue %dx.types.CBufRet.f32 %6, 0 - %8 = extractvalue %dx.types.CBufRet.f32 %6, 1 - %9 = extractvalue %dx.types.CBufRet.f32 %6, 2 - %10 = extractvalue %dx.types.CBufRet.f32 %6, 3 - %11 = fmul fast float %9, %4 - %12 = fmul fast float %10, %5 - %13 = fadd fast float %11, %7 - %14 = fadd fast float %12, %8 - %15 = fmul fast float %13, 2.000000e+00 - %16 = fadd fast float %15, -1.000000e+00 - %17 = fmul fast float %14, 2.000000e+00 - %18 = fadd fast float %17, -1.000000e+00 - %19 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %3, i32 1) ; CBufferLoadLegacy(handle,regIndex) - %20 = extractvalue %dx.types.CBufRet.f32 %19, 1 - %21 = fptoui float %20 to i32 - switch i32 %21, label %35 [ - i32 0, label %22 - i32 1, label %25 - i32 2, label %27 - i32 3, label %29 - i32 4, label %30 - i32 5, label %32 - ] - -;