From 1afbf1702e3ed4a15d505b67ddbe5b4ceb9dcc49 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jean-Philippe=20Bruy=C3=A8re?= Date: Tue, 17 Apr 2018 16:36:20 +0200 Subject: [PATCH] devel --- CMakeLists.txt | 4 +- include/vkvg.h | 31 + shaders/deferred.frag | 103 --- shaders/deferred.vert | 23 - shaders/paint.frag | 17 - shaders/{triangle.frag => vkvg_main.frag} | 0 shaders/{triangle.vert => vkvg_main.vert} | 0 src/shaders.h | 727 +--------------------- src/vkvg_context.c | 4 +- src/vkvg_context_internal.c | 29 +- src/vkvg_device.c | 15 +- src/vkvg_device_internal.c | 8 +- src/vkvg_device_internal.h | 5 +- src/vkvg_fonts.c | 4 +- src/vkvg_pattern.c | 75 +-- src/vkvg_pattern.h | 28 +- src/vkvg_surface.c | 4 +- tests/test1.c | 146 ++--- tests/vke.h | 8 +- vkh | 2 +- 20 files changed, 180 insertions(+), 1053 deletions(-) delete mode 100644 shaders/deferred.frag delete mode 100644 shaders/deferred.vert delete mode 100644 shaders/paint.frag rename shaders/{triangle.frag => vkvg_main.frag} (100%) rename shaders/{triangle.vert => vkvg_main.vert} (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index c058b51..5488697 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -92,7 +92,6 @@ ADD_LIBRARY(${PROJECT_NAME} SHARED ${VKVG_SRC} ${SHADERS}) if (BuildShaderHeader) add_dependencies(${PROJECT_NAME} BuildShaderHeader) endif () -#add_dependencies(BuildShaderHeader CompileShaders) SET_TARGET_PROPERTIES(vkvg PROPERTIES VERSION ${PROJECT_VERSION} @@ -104,6 +103,7 @@ TARGET_INCLUDE_DIRECTORIES(vkvg PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_SOURCE_DIR}/src ${CMAKE_CURRENT_SOURCE_DIR}/vkh/include + ${CMAKE_CURRENT_SOURCE_DIR}/vkh/src ${FREETYPE_INCLUDE_DIRS} ${HARFBUZZ_INCLUDE_DIRS} ${FONTCONFIG_INCLUDE_DIR} @@ -111,7 +111,6 @@ TARGET_INCLUDE_DIRECTORIES(vkvg PRIVATE TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${Vulkan_LIBRARY} - #${GLFW3_LIBRARY} ${FREETYPE_LIBRARY} ${HARFBUZZ_LIBRARIES} ${FONTCONFIG_LIBRARIES} @@ -131,6 +130,7 @@ if (GLFW3_FOUND) ${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_SOURCE_DIR}/src ${CMAKE_CURRENT_SOURCE_DIR}/vkh/include + ${CMAKE_CURRENT_SOURCE_DIR}/vkh/src ) TARGET_LINK_LIBRARIES(${PROJECT_NAME}_test ${Vulkan_LIBRARY} diff --git a/include/vkvg.h b/include/vkvg.h index 0092def..9f13281 100644 --- a/include/vkvg.h +++ b/include/vkvg.h @@ -1,6 +1,10 @@ #ifndef VKVG_H #define VKVG_H +#ifdef __cplusplus +extern "C" { +#endif + #include #include @@ -18,6 +22,29 @@ typedef enum _vkvg_format { VKVG_FORMAT_A1 } vkvg_format_t; +typedef enum _vkvg_extend { + VKVG_EXTEND_NONE, + VKVG_EXTEND_REPEAT, + VKVG_EXTEND_REFLECT, + VKVG_EXTEND_PAD +} vkvg_extend_t; + +typedef enum _vkvg_pattern_type { + VKVG_PATTERN_TYPE_SOLID, + VKVG_PATTERN_TYPE_SURFACE, + VKVG_PATTERN_TYPE_LINEAR, + VKVG_PATTERN_TYPE_RADIAL, + VKVG_PATTERN_TYPE_MESH, + VKVG_PATTERN_TYPE_RASTER_SOURCE, +} vkvg_pattern_type_t; + +typedef struct _vkvg_color_t{ + float r; + float g; + float b; + float a; +} vkvg_color_t; + typedef struct _vkvg_context_t* VkvgContext; typedef struct _vkvg_surface_t* VkvgSurface; typedef struct _vkvg_device_t* VkvgDevice; @@ -101,4 +128,8 @@ void vkvg_show_text (VkvgContext ctx, const char* text); void vkvg_save (VkvgContext ctx); void vkvg_restore (VkvgContext ctx); +#ifdef __cplusplus +} +#endif + #endif diff --git a/shaders/deferred.frag b/shaders/deferred.frag deleted file mode 100644 index 895d086..0000000 --- a/shaders/deferred.frag +++ /dev/null @@ -1,103 +0,0 @@ -#version 450 - -#extension GL_ARB_separate_shader_objects : enable -#extension GL_ARB_shading_language_420pack : enable - -layout (binding = 1) uniform sampler2DMS samplerPosition; -layout (binding = 2) uniform sampler2DMS samplerNormal; -layout (binding = 3) uniform sampler2DMS samplerAlbedo; - -layout (location = 0) in vec2 inUV; - -layout (location = 0) out vec4 outFragcolor; - -struct Light { - vec4 position; - vec3 color; - float radius; -}; - -layout (binding = 4) uniform UBO -{ - Light lights[6]; - vec4 viewPos; - ivec2 windowSize; -} ubo; - -layout (constant_id = 0) const int NUM_SAMPLES = 8; - -#define NUM_LIGHTS 6 - -// Manual resolve for MSAA samples -vec4 resolve(sampler2DMS tex, ivec2 uv) -{ - vec4 result = vec4(0.0); - for (int i = 0; i < NUM_SAMPLES; i++) - { - vec4 val = texelFetch(tex, uv, i); - result += val; - } - // Average resolved samples - return result / float(NUM_SAMPLES); -} - -vec3 calculateLighting(vec3 pos, vec3 normal, vec4 albedo) -{ - vec3 result = vec3(0.0); - - for(int i = 0; i < NUM_LIGHTS; ++i) - { - // Vector to light - vec3 L = ubo.lights[i].position.xyz - pos; - // Distance from light to fragment position - float dist = length(L); - - // Viewer to fragment - vec3 V = ubo.viewPos.xyz - pos; - V = normalize(V); - - // Light to fragment - L = normalize(L); - - // Attenuation - float atten = ubo.lights[i].radius / (pow(dist, 2.0) + 1.0); - - // Diffuse part - vec3 N = normalize(normal); - float NdotL = max(0.0, dot(N, L)); - vec3 diff = ubo.lights[i].color * albedo.rgb * NdotL * atten; - - // Specular part - vec3 R = reflect(-L, N); - float NdotR = max(0.0, dot(R, V)); - vec3 spec = ubo.lights[i].color * albedo.a * pow(NdotR, 8.0) * atten; - - result += diff + spec; - } - return result; -} - -void main() -{ - ivec2 attDim = textureSize(samplerPosition); - ivec2 UV = ivec2(inUV * attDim); - - #define ambient 0.15 - - // Ambient part - vec4 alb = resolve(samplerAlbedo, UV); - vec3 fragColor = vec3(0.0); - - // Calualte lighting for every MSAA sample - for (int i = 0; i < NUM_SAMPLES; i++) - { - vec3 pos = texelFetch(samplerPosition, UV, i).rgb; - vec3 normal = texelFetch(samplerNormal, UV, i).rgb; - vec4 albedo = texelFetch(samplerAlbedo, UV, i); - fragColor += calculateLighting(pos, normal, albedo); - } - - fragColor = (alb.rgb * ambient) + fragColor / float(NUM_SAMPLES); - - outFragcolor = vec4(fragColor, 1.0); -} \ No newline at end of file diff --git a/shaders/deferred.vert b/shaders/deferred.vert deleted file mode 100644 index 6227952..0000000 --- a/shaders/deferred.vert +++ /dev/null @@ -1,23 +0,0 @@ -#version 450 - -#extension GL_ARB_separate_shader_objects : enable -#extension GL_ARB_shading_language_420pack : enable - -layout (binding = 0) uniform UBO -{ - mat4 projection; - mat4 model; -} ubo; - -layout (location = 0) out vec2 outUV; - -out gl_PerVertex -{ - vec4 gl_Position; -}; - -void main() -{ - outUV = vec2((gl_VertexIndex << 1) & 2, gl_VertexIndex & 2); - gl_Position = vec4(outUV * 2.0f - 1.0f, 0.0f, 1.0f); -} diff --git a/shaders/paint.frag b/shaders/paint.frag deleted file mode 100644 index a46e3da..0000000 --- a/shaders/paint.frag +++ /dev/null @@ -1,17 +0,0 @@ -#version 450 - -#extension GL_ARB_separate_shader_objects : enable -#extension GL_ARB_shading_language_420pack : enable - -layout (binding = 0) uniform sampler2D tex; - -layout (location = 0) in vec4 inColor; -layout (location = 1) in vec3 inUV; - -layout (location = 0) out vec4 outFragColor; - -void main() -{ - vec4 c = texture(tex, inUV.xy); - outFragColor = c; -} diff --git a/shaders/triangle.frag b/shaders/vkvg_main.frag similarity index 100% rename from shaders/triangle.frag rename to shaders/vkvg_main.frag diff --git a/shaders/triangle.vert b/shaders/vkvg_main.vert similarity index 100% rename from shaders/triangle.vert rename to shaders/vkvg_main.vert diff --git a/src/shaders.h b/src/shaders.h index 93002b6..43564bb 100644 --- a/src/shaders.h +++ b/src/shaders.h @@ -1,604 +1,4 @@ -unsigned char deferred_frag_spv[] = { - 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x0d, 0x00, - 0xf3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x32, 0x00, 0x00, 0x00, - 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, - 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, - 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0xaf, 0x00, 0x00, 0x00, - 0xed, 0x00, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x02, 0x00, 0x00, 0x00, - 0xc2, 0x01, 0x00, 0x00, 0x04, 0x00, 0x09, 0x00, 0x47, 0x4c, 0x5f, 0x41, - 0x52, 0x42, 0x5f, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x5f, - 0x73, 0x68, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x73, 0x00, 0x00, 0x04, 0x00, 0x09, 0x00, 0x47, 0x4c, 0x5f, 0x41, - 0x52, 0x42, 0x5f, 0x73, 0x68, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x6c, - 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x5f, 0x34, 0x32, 0x30, 0x70, - 0x61, 0x63, 0x6b, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x47, 0x4c, 0x5f, 0x47, - 0x4f, 0x4f, 0x47, 0x4c, 0x45, 0x5f, 0x63, 0x70, 0x70, 0x5f, 0x73, 0x74, - 0x79, 0x6c, 0x65, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x64, 0x69, 0x72, - 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x00, 0x00, 0x04, 0x00, 0x08, 0x00, - 0x47, 0x4c, 0x5f, 0x47, 0x4f, 0x4f, 0x47, 0x4c, 0x45, 0x5f, 0x69, 0x6e, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x00, 0x05, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, - 0x11, 0x00, 0x00, 0x00, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x28, - 0x73, 0x32, 0x4d, 0x31, 0x3b, 0x76, 0x69, 0x32, 0x3b, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x03, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x74, 0x65, 0x78, 0x00, - 0x05, 0x00, 0x03, 0x00, 0x10, 0x00, 0x00, 0x00, 0x75, 0x76, 0x00, 0x00, - 0x05, 0x00, 0x0a, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x63, 0x61, 0x6c, 0x63, - 0x75, 0x6c, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, - 0x67, 0x28, 0x76, 0x66, 0x33, 0x3b, 0x76, 0x66, 0x33, 0x3b, 0x76, 0x66, - 0x34, 0x3b, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x17, 0x00, 0x00, 0x00, - 0x70, 0x6f, 0x73, 0x00, 0x05, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, - 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, - 0x19, 0x00, 0x00, 0x00, 0x61, 0x6c, 0x62, 0x65, 0x64, 0x6f, 0x00, 0x00, - 0x05, 0x00, 0x04, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x20, 0x00, 0x00, 0x00, - 0x69, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x28, 0x00, 0x00, 0x00, - 0x4e, 0x55, 0x4d, 0x5f, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x53, 0x00, - 0x05, 0x00, 0x03, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x76, 0x61, 0x6c, 0x00, - 0x05, 0x00, 0x04, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x3f, 0x00, 0x00, 0x00, - 0x69, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x48, 0x00, 0x00, 0x00, - 0x4c, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x49, 0x00, 0x00, 0x00, - 0x4c, 0x69, 0x67, 0x68, 0x74, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, - 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, - 0x49, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x63, 0x6f, 0x6c, 0x6f, - 0x72, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x49, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x72, 0x61, 0x64, 0x69, 0x75, 0x73, 0x00, 0x00, - 0x05, 0x00, 0x03, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x55, 0x42, 0x4f, 0x00, - 0x06, 0x00, 0x05, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x6c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, - 0x4d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x76, 0x69, 0x65, 0x77, - 0x50, 0x6f, 0x73, 0x00, 0x06, 0x00, 0x06, 0x00, 0x4d, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x69, - 0x7a, 0x65, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x4f, 0x00, 0x00, 0x00, - 0x75, 0x62, 0x6f, 0x00, 0x05, 0x00, 0x04, 0x00, 0x58, 0x00, 0x00, 0x00, - 0x64, 0x69, 0x73, 0x74, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, - 0x5b, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, - 0x65, 0x00, 0x00, 0x00, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x03, 0x00, 0x71, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x04, 0x00, 0x74, 0x00, 0x00, 0x00, 0x4e, 0x64, 0x6f, 0x74, - 0x4c, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x79, 0x00, 0x00, 0x00, - 0x64, 0x69, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, - 0x85, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, - 0x8a, 0x00, 0x00, 0x00, 0x4e, 0x64, 0x6f, 0x74, 0x52, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x04, 0x00, 0x8f, 0x00, 0x00, 0x00, 0x73, 0x70, 0x65, 0x63, - 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xa7, 0x00, 0x00, 0x00, - 0x61, 0x74, 0x74, 0x44, 0x69, 0x6d, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, - 0xa8, 0x00, 0x00, 0x00, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x50, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x05, 0x00, 0x03, 0x00, - 0xac, 0x00, 0x00, 0x00, 0x55, 0x56, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, - 0xaf, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x55, 0x56, 0x00, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x03, 0x00, 0xb5, 0x00, 0x00, 0x00, 0x61, 0x6c, 0x62, 0x00, - 0x05, 0x00, 0x06, 0x00, 0xb6, 0x00, 0x00, 0x00, 0x73, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x72, 0x41, 0x6c, 0x62, 0x65, 0x64, 0x6f, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x04, 0x00, 0xb7, 0x00, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, - 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xba, 0x00, 0x00, 0x00, - 0x66, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x03, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x03, 0x00, 0xc3, 0x00, 0x00, 0x00, 0x70, 0x6f, 0x73, 0x00, - 0x05, 0x00, 0x04, 0x00, 0xca, 0x00, 0x00, 0x00, 0x6e, 0x6f, 0x72, 0x6d, - 0x61, 0x6c, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xcb, 0x00, 0x00, 0x00, - 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x4e, 0x6f, 0x72, 0x6d, 0x61, - 0x6c, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xd2, 0x00, 0x00, 0x00, - 0x61, 0x6c, 0x62, 0x65, 0x64, 0x6f, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, - 0xd8, 0x00, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x04, 0x00, 0xda, 0x00, 0x00, 0x00, 0x70, 0x61, 0x72, 0x61, - 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xdc, 0x00, 0x00, 0x00, - 0x70, 0x61, 0x72, 0x61, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, - 0xed, 0x00, 0x00, 0x00, 0x6f, 0x75, 0x74, 0x46, 0x72, 0x61, 0x67, 0x63, - 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, - 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x48, 0x00, 0x05, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, - 0x49, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x49, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x47, 0x00, 0x04, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x4d, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x48, 0x00, 0x05, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x23, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, - 0x4d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, - 0xd0, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x4d, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x4f, 0x00, 0x00, 0x00, - 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, - 0x4f, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x47, 0x00, 0x04, 0x00, 0xa8, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xa8, 0x00, 0x00, 0x00, - 0x21, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, - 0xaf, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x47, 0x00, 0x04, 0x00, 0xb6, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xb6, 0x00, 0x00, 0x00, - 0x21, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, - 0xcb, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x47, 0x00, 0x04, 0x00, 0xcb, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xed, 0x00, 0x00, 0x00, - 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x03, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, - 0x0a, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x17, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x21, 0x00, 0x05, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, - 0x13, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x13, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, - 0x16, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, - 0x14, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2c, 0x00, 0x07, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, - 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, - 0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x1f, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, - 0x0a, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x32, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x14, 0x00, 0x02, 0x00, 0x29, 0x00, 0x00, 0x00, - 0x2b, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x06, 0x00, 0x13, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, - 0x1d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0x46, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x05, 0x00, - 0x49, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x4a, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, - 0x4a, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x04, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, - 0x4b, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x05, 0x00, 0x4d, 0x00, 0x00, 0x00, - 0x4c, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x04, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x4d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x4e, 0x00, 0x00, 0x00, - 0x4f, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, - 0x51, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x04, 0x00, 0x57, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0x67, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, - 0x68, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x2b, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x40, 0x2b, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x20, 0x00, 0x04, 0x00, - 0x7b, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, - 0x2b, 0x00, 0x04, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x93, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x3b, 0x00, 0x04, 0x00, - 0x09, 0x00, 0x00, 0x00, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x17, 0x00, 0x04, 0x00, 0xad, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xae, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0xae, 0x00, 0x00, 0x00, 0xaf, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x3b, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xb6, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, - 0xcb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0xe5, 0x00, 0x00, 0x00, 0x9a, 0x99, 0x19, 0x3e, - 0x20, 0x00, 0x04, 0x00, 0xec, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xec, 0x00, 0x00, 0x00, - 0xed, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x3b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xa7, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0xac, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x15, 0x00, 0x00, 0x00, 0xb5, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x3b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xb7, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00, - 0xba, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x1f, 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x3b, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00, - 0xca, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x15, 0x00, 0x00, 0x00, 0xd2, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x3b, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00, - 0xda, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x15, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0xa9, 0x00, 0x00, 0x00, - 0xa8, 0x00, 0x00, 0x00, 0x64, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, - 0xaa, 0x00, 0x00, 0x00, 0xa9, 0x00, 0x00, 0x00, 0x68, 0x00, 0x04, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0xab, 0x00, 0x00, 0x00, 0xaa, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0xa7, 0x00, 0x00, 0x00, 0xab, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0xad, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, - 0xaf, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, - 0xb1, 0x00, 0x00, 0x00, 0xa7, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x04, 0x00, - 0xad, 0x00, 0x00, 0x00, 0xb2, 0x00, 0x00, 0x00, 0xb1, 0x00, 0x00, 0x00, - 0x85, 0x00, 0x05, 0x00, 0xad, 0x00, 0x00, 0x00, 0xb3, 0x00, 0x00, 0x00, - 0xb0, 0x00, 0x00, 0x00, 0xb2, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x04, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, 0xb3, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0xac, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, - 0xac, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xb7, 0x00, 0x00, 0x00, - 0xb8, 0x00, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0xb9, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0xb6, 0x00, 0x00, 0x00, - 0xb7, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xb5, 0x00, 0x00, 0x00, - 0xb9, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xba, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xbb, 0x00, 0x00, 0x00, - 0x21, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0xbc, 0x00, 0x00, 0x00, - 0xf8, 0x00, 0x02, 0x00, 0xbc, 0x00, 0x00, 0x00, 0xf6, 0x00, 0x04, 0x00, - 0xbe, 0x00, 0x00, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xf9, 0x00, 0x02, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, - 0xc0, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0xc1, 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0xb1, 0x00, 0x05, 0x00, - 0x29, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, - 0x28, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0xc2, 0x00, 0x00, 0x00, - 0xbd, 0x00, 0x00, 0x00, 0xbe, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, - 0xbd, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, - 0xc4, 0x00, 0x00, 0x00, 0xa8, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, 0x00, - 0xbb, 0x00, 0x00, 0x00, 0x64, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, - 0xc7, 0x00, 0x00, 0x00, 0xc4, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x07, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0xc7, 0x00, 0x00, 0x00, - 0xc5, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, 0x00, - 0x4f, 0x00, 0x08, 0x00, 0x13, 0x00, 0x00, 0x00, 0xc9, 0x00, 0x00, 0x00, - 0xc8, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, - 0xc3, 0x00, 0x00, 0x00, 0xc9, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x08, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcb, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0xcd, 0x00, 0x00, 0x00, - 0xac, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0xce, 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x64, 0x00, 0x04, 0x00, - 0x07, 0x00, 0x00, 0x00, 0xcf, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, - 0x5f, 0x00, 0x07, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x00, - 0xcf, 0x00, 0x00, 0x00, 0xcd, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, - 0xce, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x13, 0x00, 0x00, 0x00, - 0xd1, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0xca, 0x00, 0x00, 0x00, 0xd1, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x00, 0x00, - 0xb6, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, - 0xd4, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x0a, 0x00, 0x00, 0x00, 0xd5, 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, - 0x64, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x00, 0x00, - 0xd3, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x07, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0xd7, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, - 0x40, 0x00, 0x00, 0x00, 0xd5, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, - 0xd2, 0x00, 0x00, 0x00, 0xd7, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x13, 0x00, 0x00, 0x00, 0xd9, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0xd8, 0x00, 0x00, 0x00, 0xd9, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x00, 0x00, - 0xca, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xda, 0x00, 0x00, 0x00, - 0xdb, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0xdd, 0x00, 0x00, 0x00, 0xd2, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, - 0xdc, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00, 0x39, 0x00, 0x07, 0x00, - 0x13, 0x00, 0x00, 0x00, 0xde, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, - 0xd8, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0xdf, 0x00, 0x00, 0x00, - 0xba, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, - 0xe0, 0x00, 0x00, 0x00, 0xdf, 0x00, 0x00, 0x00, 0xde, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0xba, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, - 0xf9, 0x00, 0x02, 0x00, 0xbf, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, - 0xbf, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0xe1, 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x80, 0x00, 0x05, 0x00, - 0x0a, 0x00, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, 0xe1, 0x00, 0x00, 0x00, - 0x35, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xbb, 0x00, 0x00, 0x00, - 0xe2, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0xbc, 0x00, 0x00, 0x00, - 0xf8, 0x00, 0x02, 0x00, 0xbe, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0xe3, 0x00, 0x00, 0x00, 0xb5, 0x00, 0x00, 0x00, - 0x4f, 0x00, 0x08, 0x00, 0x13, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00, - 0xe3, 0x00, 0x00, 0x00, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x05, 0x00, - 0x13, 0x00, 0x00, 0x00, 0xe6, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00, - 0xe5, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, - 0xe7, 0x00, 0x00, 0x00, 0xba, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0xe8, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, - 0x50, 0x00, 0x06, 0x00, 0x13, 0x00, 0x00, 0x00, 0xe9, 0x00, 0x00, 0x00, - 0xe8, 0x00, 0x00, 0x00, 0xe8, 0x00, 0x00, 0x00, 0xe8, 0x00, 0x00, 0x00, - 0x88, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, 0xea, 0x00, 0x00, 0x00, - 0xe7, 0x00, 0x00, 0x00, 0xe9, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, - 0x13, 0x00, 0x00, 0x00, 0xeb, 0x00, 0x00, 0x00, 0xe6, 0x00, 0x00, 0x00, - 0xea, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xba, 0x00, 0x00, 0x00, - 0xeb, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, - 0xee, 0x00, 0x00, 0x00, 0xba, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, - 0x06, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0xee, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, - 0xf0, 0x00, 0x00, 0x00, 0xee, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xf1, 0x00, 0x00, 0x00, - 0xee, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0xf2, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, - 0xf0, 0x00, 0x00, 0x00, 0xf1, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0xed, 0x00, 0x00, 0x00, 0xf2, 0x00, 0x00, 0x00, - 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x37, 0x00, 0x03, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x12, 0x00, 0x00, 0x00, - 0x3b, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x1f, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x15, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0x20, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, - 0xf9, 0x00, 0x02, 0x00, 0x22, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, - 0x22, 0x00, 0x00, 0x00, 0xf6, 0x00, 0x04, 0x00, 0x24, 0x00, 0x00, 0x00, - 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, - 0x26, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x26, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0xb1, 0x00, 0x05, 0x00, 0x29, 0x00, 0x00, 0x00, - 0x2a, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, - 0xfa, 0x00, 0x04, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, - 0x24, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x23, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, - 0x2d, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x0a, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, - 0x64, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, - 0x2c, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x07, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, - 0x40, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, - 0x2b, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0x33, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, - 0xf9, 0x00, 0x02, 0x00, 0x25, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, - 0x25, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0x34, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x80, 0x00, 0x05, 0x00, - 0x0a, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, - 0x35, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x20, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x22, 0x00, 0x00, 0x00, - 0xf8, 0x00, 0x02, 0x00, 0x24, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x6f, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x28, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0x39, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, - 0x39, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x3a, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, - 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, - 0x37, 0x00, 0x03, 0x00, 0x14, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, - 0x37, 0x00, 0x03, 0x00, 0x14, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, - 0x37, 0x00, 0x03, 0x00, 0x15, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, - 0xf8, 0x00, 0x02, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x14, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x3b, 0x00, 0x04, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00, - 0x48, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x57, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x3b, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x57, 0x00, 0x00, 0x00, - 0x65, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x14, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x3b, 0x00, 0x04, 0x00, 0x57, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00, - 0x79, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x14, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x3b, 0x00, 0x04, 0x00, 0x57, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00, - 0x8f, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, - 0x3d, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, - 0x3f, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, - 0x40, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x40, 0x00, 0x00, 0x00, - 0xf6, 0x00, 0x04, 0x00, 0x42, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x44, 0x00, 0x00, 0x00, - 0xf8, 0x00, 0x02, 0x00, 0x44, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x0a, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, - 0xb1, 0x00, 0x05, 0x00, 0x29, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, - 0x45, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, - 0x47, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, - 0xf8, 0x00, 0x02, 0x00, 0x41, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x0a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x07, 0x00, 0x51, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, - 0x4f, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, - 0x21, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0x53, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, - 0x13, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, - 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, - 0x55, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, - 0x13, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, - 0x55, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x48, 0x00, 0x00, 0x00, - 0x56, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, - 0x59, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x42, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, - 0x58, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, - 0x51, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, - 0x35, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0x5d, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, - 0x13, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, - 0x5d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, - 0x5f, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, - 0x13, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, - 0x5f, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x5b, 0x00, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, - 0x61, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, - 0x13, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x45, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, - 0x5b, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x13, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x06, 0x00, 0x13, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0x48, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, - 0x3f, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00, 0x68, 0x00, 0x00, 0x00, - 0x69, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, - 0x66, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00, - 0x58, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x6d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, - 0x6b, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, - 0x6e, 0x00, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x70, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0x65, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x13, 0x00, 0x00, 0x00, - 0x73, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, - 0x72, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x71, 0x00, 0x00, 0x00, - 0x73, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, - 0x75, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x13, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, - 0x94, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, - 0x75, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x28, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0x74, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, - 0x3f, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00, 0x7b, 0x00, 0x00, 0x00, - 0x7c, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, - 0x7a, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x13, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, - 0x19, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x13, 0x00, 0x00, 0x00, - 0x7f, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x85, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, - 0x7d, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, - 0x8e, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, - 0x80, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, - 0x8e, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, - 0x82, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, - 0x79, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x13, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, - 0x7f, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, - 0x86, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, - 0x88, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, - 0x13, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x47, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0x85, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, - 0x85, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, - 0x8c, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x94, 0x00, 0x05, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, - 0x8c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x8e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, - 0x1d, 0x00, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, - 0x8a, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x0a, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x07, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00, - 0x4f, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, - 0x35, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, - 0x92, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, - 0x57, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, - 0x93, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x95, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x05, 0x00, - 0x13, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x92, 0x00, 0x00, 0x00, - 0x95, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x97, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x1a, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, - 0x8e, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, 0x9a, 0x00, 0x00, 0x00, - 0x96, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x9b, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, - 0x8e, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, - 0x9a, 0x00, 0x00, 0x00, 0x9b, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, - 0x8f, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x13, 0x00, 0x00, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00, - 0x8f, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, - 0x9f, 0x00, 0x00, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, - 0xa1, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0x3d, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00, - 0xf9, 0x00, 0x02, 0x00, 0x43, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, - 0x43, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0xa2, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x80, 0x00, 0x05, 0x00, - 0x0a, 0x00, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00, 0xa2, 0x00, 0x00, 0x00, - 0x35, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x3f, 0x00, 0x00, 0x00, - 0xa3, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x40, 0x00, 0x00, 0x00, - 0xf8, 0x00, 0x02, 0x00, 0x42, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x13, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, - 0xfe, 0x00, 0x02, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00 -}; -unsigned int deferred_frag_spv_len = 6240; -unsigned char paint_frag_spv[] = { - 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x0d, 0x00, - 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, - 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, - 0x11, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x03, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x03, 0x00, 0x02, 0x00, 0x00, 0x00, 0xc2, 0x01, 0x00, 0x00, - 0x04, 0x00, 0x09, 0x00, 0x47, 0x4c, 0x5f, 0x41, 0x52, 0x42, 0x5f, 0x73, - 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x64, - 0x65, 0x72, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x00, 0x00, - 0x04, 0x00, 0x09, 0x00, 0x47, 0x4c, 0x5f, 0x41, 0x52, 0x42, 0x5f, 0x73, - 0x68, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x6c, 0x61, 0x6e, 0x67, 0x75, - 0x61, 0x67, 0x65, 0x5f, 0x34, 0x32, 0x30, 0x70, 0x61, 0x63, 0x6b, 0x00, - 0x04, 0x00, 0x0a, 0x00, 0x47, 0x4c, 0x5f, 0x47, 0x4f, 0x4f, 0x47, 0x4c, - 0x45, 0x5f, 0x63, 0x70, 0x70, 0x5f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x5f, - 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x00, 0x00, 0x04, 0x00, 0x08, 0x00, 0x47, 0x4c, 0x5f, 0x47, - 0x4f, 0x4f, 0x47, 0x4c, 0x45, 0x5f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, - 0x65, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x00, - 0x05, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, - 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x63, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0x74, 0x65, 0x78, 0x00, 0x05, 0x00, 0x04, 0x00, 0x11, 0x00, 0x00, 0x00, - 0x69, 0x6e, 0x55, 0x56, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, - 0x17, 0x00, 0x00, 0x00, 0x6f, 0x75, 0x74, 0x46, 0x72, 0x61, 0x67, 0x43, - 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, - 0x1a, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, - 0x47, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, - 0x11, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x47, 0x00, 0x04, 0x00, 0x17, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x1a, 0x00, 0x00, 0x00, - 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x19, 0x00, 0x09, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1b, 0x00, 0x03, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x11, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, - 0x12, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00, - 0x17, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, - 0x19, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x3b, 0x00, 0x04, 0x00, 0x19, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0xf8, 0x00, 0x02, 0x00, 0x05, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0f, 0x00, 0x00, 0x00, - 0x13, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, - 0x12, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, - 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x57, 0x00, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0x17, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, - 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00 -}; -unsigned int paint_frag_spv_len = 884; -unsigned char triangle_frag_spv[] = { +unsigned char vkvg_main_frag_spv[] = { 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, @@ -755,7 +155,7 @@ unsigned char triangle_frag_spv[] = { 0x09, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00 }; -unsigned int triangle_frag_spv_len = 1860; +unsigned int vkvg_main_frag_spv_len = 1860; unsigned char wired_frag_spv[] = { 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, @@ -918,126 +318,7 @@ unsigned char wired_frag_spv[] = { 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00 }; unsigned int wired_frag_spv_len = 1904; -unsigned char deferred_vert_spv[] = { - 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x0d, 0x00, - 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, - 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x03, 0x00, 0x02, 0x00, 0x00, 0x00, 0xc2, 0x01, 0x00, 0x00, - 0x04, 0x00, 0x09, 0x00, 0x47, 0x4c, 0x5f, 0x41, 0x52, 0x42, 0x5f, 0x73, - 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x64, - 0x65, 0x72, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x00, 0x00, - 0x04, 0x00, 0x09, 0x00, 0x47, 0x4c, 0x5f, 0x41, 0x52, 0x42, 0x5f, 0x73, - 0x68, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x6c, 0x61, 0x6e, 0x67, 0x75, - 0x61, 0x67, 0x65, 0x5f, 0x34, 0x32, 0x30, 0x70, 0x61, 0x63, 0x6b, 0x00, - 0x04, 0x00, 0x0a, 0x00, 0x47, 0x4c, 0x5f, 0x47, 0x4f, 0x4f, 0x47, 0x4c, - 0x45, 0x5f, 0x63, 0x70, 0x70, 0x5f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x5f, - 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x00, 0x00, 0x04, 0x00, 0x08, 0x00, 0x47, 0x4c, 0x5f, 0x47, - 0x4f, 0x4f, 0x47, 0x4c, 0x45, 0x5f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, - 0x65, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x00, - 0x05, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, - 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x6f, 0x75, 0x74, 0x55, 0x56, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x56, 0x65, 0x72, 0x74, 0x65, - 0x78, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x65, 0x72, 0x56, 0x65, - 0x72, 0x74, 0x65, 0x78, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x05, 0x00, 0x03, 0x00, - 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, - 0x29, 0x00, 0x00, 0x00, 0x55, 0x42, 0x4f, 0x00, 0x06, 0x00, 0x06, 0x00, - 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, - 0x29, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x6d, 0x6f, 0x64, 0x65, - 0x6c, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x2b, 0x00, 0x00, 0x00, - 0x75, 0x62, 0x6f, 0x00, 0x47, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, - 0x48, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, - 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x48, 0x00, 0x05, 0x00, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, - 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x29, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, - 0x29, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, - 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x29, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x47, 0x00, 0x03, 0x00, 0x29, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x47, 0x00, 0x04, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x2b, 0x00, 0x00, 0x00, - 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x3b, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0x3b, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, - 0x0a, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x17, 0x00, 0x04, 0x00, 0x17, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x03, 0x00, 0x18, 0x00, 0x00, 0x00, - 0x17, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x19, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x19, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x2b, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x2b, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, - 0x2b, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x26, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, - 0x28, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x1e, 0x00, 0x04, 0x00, 0x29, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, - 0x28, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x2a, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x2a, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x05, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xc4, 0x00, 0x05, 0x00, - 0x0a, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0xc7, 0x00, 0x05, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0x11, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x6f, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, - 0x11, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0x13, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xc7, 0x00, 0x05, 0x00, - 0x0a, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x15, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, - 0x15, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x16, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x05, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x1d, 0x00, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, - 0x83, 0x00, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, - 0x1e, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x24, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x50, 0x00, 0x07, 0x00, 0x17, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, - 0x23, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, - 0x1f, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x26, 0x00, 0x00, 0x00, - 0x27, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0x27, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, - 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00 -}; -unsigned int deferred_vert_spv_len = 1388; -unsigned char triangle_vert_spv[] = { +unsigned char vkvg_main_vert_spv[] = { 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, @@ -1191,7 +472,7 @@ unsigned char triangle_vert_spv[] = { 0x17, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00 }; -unsigned int triangle_vert_spv_len = 1824; +unsigned int vkvg_main_vert_spv_len = 1824; unsigned char shader_comp_spv[] = { 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x0d, 0x00, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, diff --git a/src/vkvg_context.c b/src/vkvg_context.c index ebbaa44..2e5c039 100644 --- a/src/vkvg_context.c +++ b/src/vkvg_context.c @@ -1,6 +1,7 @@ #include "vkvg_device_internal.h" #include "vkvg_context_internal.h" #include "vkvg_surface_internal.h" +#include "vkh_queue.h" #ifdef DEBUG static vec2 debugLinePoints[1000]; @@ -40,7 +41,7 @@ VkvgContext vkvg_create(VkvgSurface surf) ctx->points = (vec2*) malloc (VKVG_VBO_SIZE*sizeof(vec2)); ctx->pathes = (uint32_t*) malloc (VKVG_PATHES_SIZE*sizeof(uint32_t)); - ctx->cmdPool = vkh_cmd_pool_create (dev->vkDev, dev->qFam, VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT); + ctx->cmdPool = vkh_cmd_pool_create (dev->vkDev, dev->gQueue->familyIndex, VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT); _create_vertices_buff (ctx); _create_cmd_buff (ctx); @@ -84,6 +85,7 @@ void vkvg_destroy (VkvgContext ctx) _flush_cmd_buff(ctx); VkDevice dev = ctx->pSurf->dev->vkDev; + vkDestroyFence (dev, ctx->flushFence,NULL); vkFreeCommandBuffers(dev, ctx->cmdPool, 1, &ctx->cmd); vkDestroyCommandPool(dev, ctx->cmdPool, NULL); diff --git a/src/vkvg_context_internal.c b/src/vkvg_context_internal.c index 3d7f317..3220a02 100644 --- a/src/vkvg_context_internal.c +++ b/src/vkvg_context_internal.c @@ -11,6 +11,7 @@ #include "vkvg_surface_internal.h" #include "vkvg_context_internal.h" #include "vkvg_device_internal.h" +#include "vkh_queue.h" void _check_pathes_array (VkvgContext ctx){ if (ctx->sizePathes - ctx->pathPtr > VKVG_ARRAY_THRESHOLD) @@ -99,17 +100,8 @@ void _record_draw_cmd (VkvgContext ctx){ ctx->curIndStart = ctx->indCount; } -void _submit_ctx_cmd (VkvgContext ctx){ - VkPipelineStageFlags dstStageMask = VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT; - VkSubmitInfo submit_info = { .sType = VK_STRUCTURE_TYPE_SUBMIT_INFO, - .commandBufferCount = 1, - .signalSemaphoreCount = 0, - .pSignalSemaphores = NULL, - .waitSemaphoreCount = 0, - .pWaitSemaphores = NULL, - .pWaitDstStageMask = &dstStageMask, - .pCommandBuffers = &ctx->cmd}; - VK_CHECK_RESULT(vkQueueSubmit(ctx->pSurf->dev->queue, 1, &submit_info, ctx->flushFence)); +inline void _submit_ctx_cmd(VkvgContext ctx){ + vkh_cmd_submit (ctx->pSurf->dev->gQueue, &ctx->cmd, ctx->flushFence); } void _wait_and_reset_ctx_cmd (VkvgContext ctx){ vkWaitForFences(ctx->pSurf->dev->vkDev,1,&ctx->flushFence,VK_TRUE,UINT64_MAX); @@ -117,7 +109,7 @@ void _wait_and_reset_ctx_cmd (VkvgContext ctx){ vkResetCommandBuffer(ctx->cmd,0); } -void _submit_wait_and_reset_cmd (VkvgContext ctx){ +inline void _submit_wait_and_reset_cmd (VkvgContext ctx){ _submit_ctx_cmd(ctx); _wait_and_reset_ctx_cmd(ctx); } @@ -249,13 +241,16 @@ void _reset_src_descriptor_set (VkvgContext ctx){ void _createDescriptorPool (VkvgContext ctx) { VkvgDevice dev = ctx->pSurf->dev; - VkDescriptorPoolSize descriptorPoolSize = {VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 2 }; + const VkDescriptorPoolSize descriptorPoolSize[] = { + {VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 2 }, + {VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, 1 } + }; VkDescriptorPoolCreateInfo descriptorPoolCreateInfo = { .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO, - .maxSets = 2, + .maxSets = 3, .flags = VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, - .poolSizeCount = 1, - .pPoolSizes = &descriptorPoolSize }; - VK_CHECK_RESULT(vkCreateDescriptorPool(dev->vkDev, &descriptorPoolCreateInfo, NULL, &ctx->descriptorPool)); + .poolSizeCount = 2, + .pPoolSizes = descriptorPoolSize }; + VK_CHECK_RESULT(vkCreateDescriptorPool (dev->vkDev, &descriptorPoolCreateInfo, NULL, &ctx->descriptorPool)); } void _init_descriptor_sets (VkvgContext ctx){ VkvgDevice dev = ctx->pSurf->dev; diff --git a/src/vkvg_device.c b/src/vkvg_device.c index 8d4e397..a1d8acc 100644 --- a/src/vkvg_device.c +++ b/src/vkvg_device.c @@ -1,4 +1,5 @@ #include "vkvg_device_internal.h" +#include "vkh_queue.h" VkvgDevice vkvg_device_create(VkPhysicalDevice phy, VkDevice vkdev, VkQueue queue, uint32_t qFam) { @@ -8,19 +9,15 @@ VkvgDevice vkvg_device_create(VkPhysicalDevice phy, VkDevice vkdev, VkQueue queu dev->vdpi = 96; dev->vkDev = vkdev; + dev->phy = phy; + vkGetPhysicalDeviceMemoryProperties (phy, &dev->phyMemProps); - for (int i=0; i<120; i++){ - VkFormatProperties formatProps = {}; - vkGetPhysicalDeviceFormatProperties (phy, (VkFormat)i, &formatProps); - printf("%d => Buff = %d, Lin = %d, Opt = %d\n", i, formatProps.bufferFeatures, formatProps.linearTilingFeatures, formatProps.optimalTilingFeatures); - } + dev->gQueue = vkh_queue_find (dev, VK_QUEUE_GRAPHICS_BIT); - dev->queue = queue; - dev->qFam = qFam; dev->lastCtx= NULL; - dev->cmdPool= vkh_cmd_pool_create (dev->vkDev, qFam, VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT); + dev->cmdPool= vkh_cmd_pool_create (dev->vkDev, dev->gQueue->familyIndex, VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT); dev->cmd = vkh_cmd_buff_create (dev->vkDev, dev->cmdPool, VK_COMMAND_BUFFER_LEVEL_PRIMARY); dev->fence = vkh_fence_create_signaled (dev->vkDev); @@ -33,7 +30,7 @@ VkvgDevice vkvg_device_create(VkPhysicalDevice phy, VkDevice vkdev, VkQueue queu return dev; } -void vkvg_device_destroy(VkvgDevice dev) +void vkvg_device_destroy (VkvgDevice dev) { vkDestroyDescriptorSetLayout (dev->vkDev, dev->dslFont,NULL); vkDestroyDescriptorSetLayout (dev->vkDev, dev->dslSrc, NULL); diff --git a/src/vkvg_device_internal.c b/src/vkvg_device_internal.c index 360d1de..d34e6cc 100644 --- a/src/vkvg_device_internal.c +++ b/src/vkvg_device_internal.c @@ -184,11 +184,11 @@ void _setupPipelines(VkvgDevice dev) VkShaderModule modVert, modFrag, modFragWired; VkShaderModuleCreateInfo createInfo = { .sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO, - .pCode = triangle_vert_spv, - .codeSize = triangle_vert_spv_len }; + .pCode = vkvg_main_vert_spv, + .codeSize = vkvg_main_vert_spv_len }; VK_CHECK_RESULT(vkCreateShaderModule(dev->vkDev, &createInfo, NULL, &modVert)); - createInfo.pCode = triangle_frag_spv; - createInfo.codeSize = triangle_frag_spv_len; + createInfo.pCode = vkvg_main_frag_spv; + createInfo.codeSize = vkvg_main_frag_spv_len; VK_CHECK_RESULT(vkCreateShaderModule(dev->vkDev, &createInfo, NULL, &modFrag)); createInfo.pCode = wired_frag_spv; createInfo.codeSize = wired_frag_spv_len; diff --git a/src/vkvg_device_internal.h b/src/vkvg_device_internal.h index 95099e3..049ea7a 100644 --- a/src/vkvg_device_internal.h +++ b/src/vkvg_device_internal.h @@ -9,9 +9,10 @@ typedef struct _vkvg_device_t{ VkDevice vkDev; VkPhysicalDeviceMemoryProperties phyMemProps; VkRenderPass renderPass; + VkPhysicalDevice phy; + + VkhQueue gQueue; - VkQueue queue; - uint32_t qFam; VkCommandPool cmdPool; VkCommandBuffer cmd; VkFence fence; diff --git a/src/vkvg_fonts.c b/src/vkvg_fonts.c index b57f6fa..6ea9002 100644 --- a/src/vkvg_fonts.c +++ b/src/vkvg_fonts.c @@ -72,7 +72,7 @@ void _increase_font_tex_array (VkvgDevice dev){ VK_CHECK_RESULT(vkEndCommandBuffer(cache->cmd)); - vkh_cmd_submit (dev->queue, &cache->cmd, cache->uploadFence); + vkh_cmd_submit (dev->gQueue, &cache->cmd, cache->uploadFence); vkWaitForFences (dev->vkDev, 1, &cache->uploadFence, VK_TRUE, UINT64_MAX); _flush_all_contexes (dev); @@ -191,7 +191,7 @@ void _flush_chars_to_tex (VkvgDevice dev, _vkvg_font_t* f) { VK_CHECK_RESULT(vkEndCommandBuffer(cache->cmd)); - vkh_cmd_submit(dev->queue,&cache->cmd,cache->uploadFence); + vkh_cmd_submit(dev->gQueue,&cache->cmd,cache->uploadFence); f->curLine.penX += cache->stagingX; cache->stagingX = 0; diff --git a/src/vkvg_pattern.c b/src/vkvg_pattern.c index be3282c..8c9eda1 100644 --- a/src/vkvg_pattern.c +++ b/src/vkvg_pattern.c @@ -4,71 +4,72 @@ #include "vkvg_pattern.h" VkvgPattern _init_pattern (VkvgDevice dev){ - VkvgPattern pat = (vkvg_pattern*)calloc(1,sizeof(vkvg_pattern)); + VkvgPattern pat = (vkvg_pattern_t*)calloc(1, sizeof(vkvg_pattern_t)); pat->dev = dev; - VkDescriptorSetAllocateInfo descriptorSetAllocateInfo = { .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO, - .descriptorPool = dev->descriptorPool, - .descriptorSetCount = 1, - .pSetLayouts = &dev->dslFont }; - VK_CHECK_RESULT(vkAllocateDescriptorSets(dev->vkDev, &descriptorSetAllocateInfo, &pat->descriptorSet)); return pat; } -void _update_descSet (VkvgPattern pat){ - _font_cache_t* cache = pat->dev->fontCache; - VkDescriptorImageInfo descFontTex = vkh_image_get_descriptor (cache->cacheTex,VK_IMAGE_LAYOUT_GENERAL); - VkDescriptorImageInfo descSrcTex = vkh_image_get_descriptor (pat->img, VK_IMAGE_LAYOUT_GENERAL); - - VkWriteDescriptorSet writeDescriptorSet[] = { - { - .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, - .dstSet = pat->descriptorSet, - .dstBinding = 0, - .descriptorCount = 1, - .descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, - .pImageInfo = &descFontTex - },{ - .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, - .dstSet = pat->descriptorSet, - .dstBinding = 1, - .descriptorCount = 1, - .descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, - .pImageInfo = &descSrcTex - }}; - vkUpdateDescriptorSets(pat->dev->vkDev, 2, &writeDescriptorSet, 0, NULL); -} - VkvgPattern vkvg_pattern_create(VkvgDevice dev){ VkvgPattern pat = _init_pattern (dev); + pat->type = VKVG_PATTERN_TYPE_SOLID; + pat->data = (vkvg_color_t*)calloc(1,sizeof(vkvg_color_t)); return pat; } VkvgPattern vkvg_pattern_create_for_surface (VkvgSurface surf){ VkvgPattern pat = _init_pattern (surf->dev); - pat->img = surf->img; + pat->data = surf; return pat; } -VkvgPattern vkvg_pattern_create_linear (float x0, float y0, float x1, float y1){ +VkvgPattern vkvg_pattern_create_linear (VkvgDevice dev, float x0, float y0, float x1, float y1){ + VkvgPattern pat = _init_pattern (dev); + + vkvg_gradient_t* grad = (vkvg_gradient_t*)calloc(1,sizeof(vkvg_gradient_t)); + vec2 cp0 = {x0, y0}, cp1 = {x1, y1}; + grad->cp[0] = cp0; + grad->cp[1] = cp1; + + pat->data = grad; + return pat; } -VkvgPattern vkvg_pattern_create_radial (float cx0, float cy0, float radius0, +VkvgPattern vkvg_pattern_create_radial (VkvgDevice dev, float cx0, float cy0, float radius0, float cx1, float cy1, float radius1){ + VkvgPattern pat = _init_pattern (dev); + + vkvg_gradient_t* grad = (vkvg_gradient_t*)calloc(1,sizeof(vkvg_gradient_t)); + + vec2 cp0 = {cx0, cy0}, cp1 = {cx1, cy1}, rads = {radius0, radius1}; + grad->cp[0] = cp0; + grad->cp[1] = cp1; + grad->cp[2] = rads; + + pat->data = grad; + return pat; +} +void vkvg_patter_add_color_stop (VkvgPattern pat, float offset, float r, float g, float b, float a) { + if (pat->type == VKVG_PATTERN_TYPE_SURFACE || pat->type == VKVG_PATTERN_TYPE_SOLID){ + + return; + } + vkvg_gradient_t* grad = (vkvg_gradient_t*)pat->data; + vkvg_color_t c = {r,g,b,a}; + grad->colors[grad->count] = c; + grad->stops[grad->count] = offset; } void vkvg_pattern_set_extend (VkvgPattern pat, vkvg_extend_t extend){ pat->extend = extend; } void vkvg_set_source (VkvgContext ctx, VkvgPattern pat){ - _update_descSet (pat); - vkCmdBindDescriptorSets(ctx->cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, pat->dev->pipelineLayout, - 0, 1, &pat->descriptorSet, 0, NULL); } void vkvg_pattern_destroy(VkvgPattern pat) { - vkFreeDescriptorSets(pat->dev, pat->dev->descriptorPool, 1, &pat->descriptorSet); + if (pat->type != VKVG_PATTERN_TYPE_SURFACE) + free (pat->data); free(pat); } diff --git a/src/vkvg_pattern.h b/src/vkvg_pattern.h index 5356d28..0fb9ff1 100644 --- a/src/vkvg_pattern.h +++ b/src/vkvg_pattern.h @@ -5,17 +5,21 @@ #include "vkvg.h" #include "vkh.h" -typedef enum _vkvg_extend { - VKVG_EXTEND_NONE, - VKVG_EXTEND_REPEAT, - VKVG_EXTEND_REFLECT, - VKVG_EXTEND_PAD -} vkvg_extend_t; - typedef struct _vkvg_pattern_t { - VkvgDevice dev; - VkDescriptorSet descriptorSet; - vkvg_extend_t extend; - VkhImage img; -}vkvg_pattern; + vkvg_extend_t extend; + vkvg_pattern_type_t type; + void* data; + + VkvgDevice dev; + VkDescriptorSet descriptorSet; + VkhImage img; +}vkvg_pattern_t; + +typedef struct _vkvg_gradient_t { + vec2 cp[3]; + vkvg_color_t colors[32]; + float stops[32]; + uint32_t count; +}vkvg_gradient_t; + #endif diff --git a/src/vkvg_surface.c b/src/vkvg_surface.c index 0e8955c..f3e34ca 100644 --- a/src/vkvg_surface.c +++ b/src/vkvg_surface.c @@ -26,7 +26,7 @@ void _clear_stencil (VkvgSurface surf) VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT); vkh_cmd_end (cmd); - vkh_cmd_submit (dev->queue, &cmd, dev->fence); + vkh_cmd_submit (dev->gQueue, &cmd, dev->fence); } void _init_surface (VkvgSurface surf) { @@ -136,7 +136,7 @@ VkvgSurface vkvg_surface_create_from_image (VkvgDevice dev, const char* filePath vkh_image_get_vkimage (tmpImg), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &blit, VK_FILTER_LINEAR); vkh_cmd_end (cmd); - vkh_cmd_submit (dev->queue, &cmd, dev->fence); + vkh_cmd_submit (dev->gQueue, &cmd, dev->fence); _wait_device_fence (dev); diff --git a/tests/test1.c b/tests/test1.c index 71defd7..534848f 100644 --- a/tests/test1.c +++ b/tests/test1.c @@ -4,6 +4,8 @@ #include "vke.h" //#include "compute.h" #include "vkh.h" +#include "vkh_app.h" +#include "vkh_phyinfo.h" #include "vkvg.h" @@ -181,87 +183,25 @@ void vkengine_get_queues_properties (VkEngine* e, VkQueueFamilyProperties** qFam void EngineInit (VkEngine* e) { glfwInit(); assert (glfwVulkanSupported()==GLFW_TRUE); - e->ExtensionNames = glfwGetRequiredInstanceExtensions (&e->EnabledExtensionsCount); + uint32_t enabledExtsCount = 0, phyCount = 0; + const char** enabledExts = glfwGetRequiredInstanceExtensions (&enabledExtsCount); - e->infos.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO; - e->infos.pNext = NULL; - e->infos.pApplicationName = APP_SHORT_NAME; - e->infos.applicationVersion = 1; - e->infos.pEngineName = APP_SHORT_NAME; - e->infos.engineVersion = 1; - e->infos.apiVersion = VK_API_VERSION_1_0; - e->renderer.width = 1024; - e->renderer.height = 800; + e->app = vkh_app_create("vkvgTest", enabledExtsCount, enabledExts); - const uint32_t enabledLayersCount = 1; - - //const char* enabledLayers[] = {"VK_LAYER_LUNARG_core_validation"}; - const char* enabledExtentions[] = {"VK_KHR_surface", "VK_KHR_swapchain","VK_KHR_xcb_surface"}; - const char* enabledLayers[] = {"VK_LAYER_LUNARG_standard_validation"}; - - VkInstanceCreateInfo inst_info = { .sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, - .pNext = NULL, - .flags = 0, - .pApplicationInfo = &e->infos, - .enabledExtensionCount = e->EnabledExtensionsCount, - .ppEnabledExtensionNames = e->ExtensionNames, - .enabledLayerCount = 1, - .ppEnabledLayerNames = enabledLayers }; - - VK_CHECK_RESULT(vkCreateInstance (&inst_info, NULL, &e->inst)); - - e->phy = vkh_find_phy (e->inst, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU); - - vkGetPhysicalDeviceMemoryProperties (e->phy, &e->memory_properties); - vkGetPhysicalDeviceProperties (e->phy, &e->gpu_props); - - /*VkImageFormatProperties imgProps = {}; - vkGetPhysicalDeviceImageFormatProperties(e->phy, - VK_FORMAT_R8_UNORM, - VK_IMAGE_TYPE_2D, - VK_IMAGE_TILING_OPTIMAL, - VK_IMAGE_USAGE_SAMPLED_BIT|VK_IMAGE_USAGE_TRANSFER_DST_BIT, - NULL,&imgProps );*/ - - int cQueue = -1, gQueue = -1, tQueue = -1; - uint32_t queue_family_count = 0; - VkQueueFamilyProperties *qfams; - vkengine_get_queues_properties(e,&qfams,&queue_family_count); - - //try to find dedicated queues - for (int j=0; japp, &phyCount); + + VkhPhyInfo pi = NULL; + for (int i=0; iproperties.deviceType == VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU){ + e->phy = pi->phy; break; } } - //try to find suitable queue if no dedicated one found - for (int j=0; jmemory_properties = pi->memProps; + e->gpu_props = pi->properties; uint32_t qCount = 0; VkDeviceQueueCreateInfo pQueueInfos[3]; @@ -269,19 +209,19 @@ void EngineInit (VkEngine* e) { VkDeviceQueueCreateInfo qiG = { .sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, .queueCount = 1, - .queueFamilyIndex = gQueue, + .queueFamilyIndex = pi->gQueue, .pQueuePriorities = queue_priorities }; VkDeviceQueueCreateInfo qiC = { .sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, .queueCount = 1, - .queueFamilyIndex = cQueue, + .queueFamilyIndex = pi->cQueue, .pQueuePriorities = queue_priorities }; VkDeviceQueueCreateInfo qiT = { .sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, .queueCount = 1, - .queueFamilyIndex = tQueue, + .queueFamilyIndex = pi->tQueue, .pQueuePriorities = queue_priorities }; - if (gQueue == cQueue){ - if(gQueue == tQueue){ + if (pi->gQueue == pi->cQueue){ + if(pi->gQueue == pi->tQueue){ qCount=1; pQueueInfos[0] = qiG; }else{ @@ -290,7 +230,7 @@ void EngineInit (VkEngine* e) { pQueueInfos[1] = qiT; } }else{ - if((gQueue == tQueue) || (cQueue==tQueue)){ + if((pi->gQueue == pi->tQueue) || (pi->cQueue==pi->tQueue)){ qCount=2; pQueueInfos[0] = qiG; pQueueInfos[1] = qiC; @@ -308,7 +248,11 @@ void EngineInit (VkEngine* e) { VK_CHECK_RESULT(vkCreateDevice(e->phy, &device_info, NULL, &e->dev)); - assert (glfwGetPhysicalDevicePresentationSupport (e->inst, e->phy, gQueue)==GLFW_TRUE); + + assert (glfwGetPhysicalDevicePresentationSupport (e->app->inst, e->phy, pi->gQueue)==GLFW_TRUE); + + e->renderer.width = 1024; + e->renderer.height = 800; glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API); glfwWindowHint(GLFW_RESIZABLE, GLFW_TRUE); @@ -320,20 +264,22 @@ void EngineInit (VkEngine* e) { r->window = glfwCreateWindow(r->width, r->height, "Window Title", NULL, NULL); - assert (glfwCreateWindowSurface(e->inst, r->window, NULL, &r->surface)==VK_SUCCESS); + assert (glfwCreateWindowSurface(e->app->inst, r->window, NULL, &r->surface)==VK_SUCCESS); VkBool32 isSupported; - vkGetPhysicalDeviceSurfaceSupportKHR(e->phy, gQueue, r->surface, &isSupported); + vkGetPhysicalDeviceSurfaceSupportKHR(e->phy, pi->gQueue, r->surface, &isSupported); assert (isSupported && "vkGetPhysicalDeviceSurfaceSupportKHR"); - vkGetDeviceQueue(e->dev, gQueue, 0, &e->renderer.queue); - e->renderer.qFam = gQueue; - vkGetDeviceQueue(e->dev, cQueue, 0, &e->computer.queue); - vkGetDeviceQueue(e->dev, tQueue, 0, &e->loader.queue); + vkGetDeviceQueue(e->dev, pi->gQueue, 0, &e->renderer.queue); + e->renderer.qFam = pi->gQueue; + vkGetDeviceQueue(e->dev, pi->cQueue, 0, &e->computer.queue); + vkGetDeviceQueue(e->dev, pi->tQueue, 0, &e->loader.queue); - e->renderer.cmdPool = vkh_cmd_pool_create (e->dev, gQueue, 0); - e->computer.cmdPool = vkh_cmd_pool_create (e->dev, cQueue, 0); - e->loader.cmdPool = vkh_cmd_pool_create (e->dev, tQueue, 0); + e->renderer.cmdPool = vkh_cmd_pool_create (e->dev, pi->gQueue, 0); + e->computer.cmdPool = vkh_cmd_pool_create (e->dev, pi->cQueue, 0); + e->loader.cmdPool = vkh_cmd_pool_create (e->dev, pi->tQueue, 0); + + vkh_app_free_phyinfos (phyCount, phys); r->semaPresentEnd = vkh_semaphore_create(e->dev); r->semaDrawEnd = vkh_semaphore_create(e->dev); @@ -353,11 +299,11 @@ void EngineTerminate (VkEngine* e) { vkDestroyCommandPool (e->dev, e->loader.cmdPool, NULL); vkDestroyDevice (e->dev, NULL); - vkDestroySurfaceKHR (e->inst, r->surface, NULL); + vkDestroySurfaceKHR (e->app->inst, r->surface, NULL); glfwDestroyWindow (r->window); glfwTerminate (); - vkDestroyInstance (e->inst, NULL); + vkh_app_destroy (e->app); } static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) { @@ -443,6 +389,17 @@ void draw(VkEngine* e) { VK_CHECK_RESULT(vkQueuePresentKHR(r->queue, &present)); } } +void vkvg_test_clip(VkvgContext ctx){ + vkvg_move_to(ctx,100,100); + vkvg_line_to(ctx,400,350); + vkvg_line_to(ctx,900,150); + vkvg_line_to(ctx,700,450); + vkvg_line_to(ctx,900,750); + vkvg_line_to(ctx,500,650); + vkvg_line_to(ctx,100,800); + vkvg_line_to(ctx,150,400); + vkvg_clip(ctx); +} void vkvg_test_fill(VkvgContext ctx){ vkvg_set_rgba(ctx,0.1,0.1,0.8,1.0); vkvg_move_to(ctx,100,100); @@ -684,12 +641,15 @@ int main(int argc, char *argv[]) { vkvg_set_rgba(ctx,0.02,0.02,0.3,1.0); vkvg_paint(ctx); + + vkvg_test_clip(ctx); + vkvg_set_rgba (ctx,0.02,0.8,0.3,1.0); vkvg_rectangle (ctx,200,200,300,300); vkvg_fill (ctx); vkvg_test_fill2(ctx); - vkvg_test_fill(ctx); + //vkvg_test_fill(ctx); vkvg_test_stroke(ctx); vkvg_test_curves(ctx); test_text(ctx); diff --git a/tests/vke.h b/tests/vke.h index f3c63a4..751ee6a 100644 --- a/tests/vke.h +++ b/tests/vke.h @@ -9,6 +9,8 @@ #include #include +#include "vkh.h" + #define APP_SHORT_NAME "vkcrow_test" /* Number of samples needs to be the same at image creation, */ /* renderpass creation and pipeline creation. */ @@ -60,16 +62,12 @@ typedef struct VkComputer_t { }VkComputer; typedef struct VkEngine_t { - VkApplicationInfo infos; - VkInstance inst; + VkhApp app; VkPhysicalDevice phy; VkPhysicalDeviceMemoryProperties memory_properties; VkPhysicalDeviceProperties gpu_props; VkDevice dev; - uint32_t EnabledExtensionsCount; - const char** ExtensionNames; - vkh_presenter renderer; VkComputer computer; VkLoader loader; diff --git a/vkh b/vkh index 27fad24..6c5d182 160000 --- a/vkh +++ b/vkh @@ -1 +1 @@ -Subproject commit 27fad24142f4cfbbc2e0069bf0446f2f9fafa345 +Subproject commit 6c5d18209e6050a1b5ce7cf8d03dc602dc1b7d2c -- 2.47.3