lavapipe: fix merged layout ref counting

When creating a merged layout, don't use ralloc, just use the
correct reference counting, also only reference a layout if the
pipeline uses it.

Fixes: d4d5a7abba ("lavapipe: implement EXT_graphics_pipeline_library")
Reviewed-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20630>
This commit is contained in:
Dave Airlie
2023-01-11 14:10:11 +10:00
committed by Marge Bot
parent 20902d1ed6
commit 474965adb3
2 changed files with 8 additions and 116 deletions

View File

@@ -92,55 +92,6 @@ dEQP-VK.synchronization.timeline_semaphore.wait_before_signal.write_copy_buffer_
dEQP-VK.synchronization2.op.single_queue.timeline_semaphore.write_image_geometry_read_blit_image.image_128x128_r16g16b16a16_uint,Fail
# 1.3.2.0 uprev
dEQP-VK.pipeline.fast_linked_library.image.suballocation.sampling_type.combined.view_type.1d.format.r32_sint.count_1.size.2x1,Fail
dEQP-VK.pipeline.fast_linked_library.image.suballocation.sampling_type.combined.view_type.1d_array.format.a2b10g10r10_unorm_pack32.count_1.size.3x1_array_of_3,Fail
dEQP-VK.pipeline.fast_linked_library.image.suballocation.sampling_type.combined.view_type.2d_array.format.r8g8_uint.count_1.size.23x8_array_of_3,Fail
dEQP-VK.pipeline.fast_linked_library.image.suballocation.sampling_type.separate.view_type.1d_array.format.r32g32b32a32_uint.count_1.size.443x1_array_of_3,Fail
dEQP-VK.pipeline.fast_linked_library.image.suballocation.sampling_type.separate.view_type.1d_array.format.r8g8b8a8_sint.count_1.size.128x1_array_of_3,Fail
dEQP-VK.pipeline.fast_linked_library.image.suballocation.sampling_type.separate.view_type.3d.format.r8g8b8a8_sint.count_1.size.17x11x5,Fail
dEQP-VK.pipeline.fast_linked_library.image_view.view_type.1d.format.r32g32b32_uint.subresource_range.array_layer_second,Fail
dEQP-VK.pipeline.fast_linked_library.image_view.view_type.1d.format.r8g8_sint.subresource_range.lod_mip_levels_array_layer_last,Fail
dEQP-VK.pipeline.fast_linked_library.image_view.view_type.1d_array.format.b8g8r8a8_srgb.component_swizzle.g_b_a_r,Fail
dEQP-VK.pipeline.fast_linked_library.image_view.view_type.2d.format.r8_snorm.subresource_range.lod_base_mip_level_array_layer_second,Fail
dEQP-VK.pipeline.fast_linked_library.image_view.view_type.2d_array.format.r8_unorm.component_swizzle.g_b_a_r,Fail
dEQP-VK.pipeline.fast_linked_library.image_view.view_type.cube_array.format.r32g32_uint.subresource_range.lod_mip_levels,Fail
dEQP-VK.pipeline.fast_linked_library.sampler.view_type.1d_array.format.a4r4g4b4_unorm_pack16.mipmap.nearest.lod.select_bias_3_1,Fail
dEQP-VK.pipeline.fast_linked_library.sampler.view_type.1d_array.format.r16g16_uint.min_filter.nearest,Fail
dEQP-VK.pipeline.fast_linked_library.sampler.view_type.1d_unnormalized.format.r16_sfloat.address_modes.all_mode_clamp_to_border_custom_1000,Fail
dEQP-VK.pipeline.fast_linked_library.sampler.view_type.2d.format.d16_unorm.mipmap.nearest.lod.select_bias_2_5,Fail
dEQP-VK.pipeline.fast_linked_library.sampler.view_type.2d.format.r16_sfloat.address_modes.uvw_mode_repeat_mode_clamp_to_border_mode_clamp_to_edge,Fail
dEQP-VK.pipeline.fast_linked_library.sampler.view_type.2d.format.r8g8b8a8_uint.address_modes.uvw_mode_mirror_clamp_to_edge_mode_clamp_to_border_mode_mirrored_repeat,Fail
dEQP-VK.pipeline.fast_linked_library.sampler.view_type.2d_array.format.d32_sfloat.address_modes.all_mode_clamp_to_border_custom_1101_formatless,Fail
dEQP-VK.pipeline.fast_linked_library.sampler.view_type.2d_unnormalized.format.r32g32_sfloat.address_modes.all_mode_clamp_to_border_opaque_white,Fail
dEQP-VK.pipeline.fast_linked_library.sampler.view_type.3d.format.b5g5r5a1_unorm_pack16.min_filter.linear,Fail
dEQP-VK.pipeline.fast_linked_library.sampler.view_type.3d.format.r32g32b32_uint.address_modes.all_mode_clamp_to_edge,Fail
dEQP-VK.pipeline.fast_linked_library.sampler.view_type.3d.format.r8g8b8a8_unorm.address_modes.uvw_mode_clamp_to_border_mode_clamp_to_edge_mode_clamp_to_edge,Fail
dEQP-VK.pipeline.fast_linked_library.sampler.view_type.cube.format.r5g6b5_unorm_pack16.mipmap.linear.lod.select_bias_2_1,Fail
dEQP-VK.pipeline.fast_linked_library.sampler.view_type.cube_array.format.b10g11r11_ufloat_pack32.min_filter.nearest,Fail
dEQP-VK.pipeline.fast_linked_library.sampler.view_type.cube_array.format.r8g8_snorm.min_filter.nearest,Fail
dEQP-VK.pipeline.pipeline_library.image.suballocation.sampling_type.combined.view_type.1d.format.r32_sint.count_1.size.127x1,Fail
dEQP-VK.pipeline.pipeline_library.image.suballocation.sampling_type.combined.view_type.1d_array.format.a2b10g10r10_unorm_pack32.count_1.size.443x1_array_of_3,Fail
dEQP-VK.pipeline.pipeline_library.image.suballocation.sampling_type.combined.view_type.1d_array.format.b5g5r5a1_unorm_pack16.count_1.size.32x1_array_of_3,Fail
dEQP-VK.pipeline.pipeline_library.image.suballocation.sampling_type.combined.view_type.2d.format.r32g32b32_uint.count_1.size.32x32,Fail
dEQP-VK.pipeline.pipeline_library.image.suballocation.sampling_type.combined.view_type.2d_array.format.r8g8_sint.count_1.size.1x1_array_of_3,Fail
dEQP-VK.pipeline.pipeline_library.image.suballocation.sampling_type.combined.view_type.3d.format.a1r5g5b5_unorm_pack16.count_1.size.16x16x16,Fail
dEQP-VK.pipeline.pipeline_library.image.suballocation.sampling_type.separate.view_type.1d_array.format.r32g32b32a32_sint.count_1.size.1x1_array_of_3,Fail
dEQP-VK.pipeline.pipeline_library.image.suballocation.sampling_type.separate.view_type.1d_array.format.r8g8b8a8_sint.count_1.size.13x1_array_of_3,Fail
dEQP-VK.pipeline.pipeline_library.image.suballocation.sampling_type.separate.view_type.2d.format.r16g16b16a16_uint.count_1.size.8x16,Fail
dEQP-VK.pipeline.pipeline_library.image.suballocation.sampling_type.separate.view_type.cube_array.format.b10g11r11_ufloat_pack32.count_1.size.13x13_array_of_6,Fail
dEQP-VK.pipeline.pipeline_library.image_view.view_type.1d.format.r32g32b32_uint.subresource_range.lod_base_mip_level_remaining_levels,Fail
dEQP-VK.pipeline.pipeline_library.image_view.view_type.1d_array.format.b8g8r8a8_srgb.subresource_range.array_size,Fail
dEQP-VK.pipeline.pipeline_library.image_view.view_type.2d.format.r8_snorm.subresource_range.lod_base_mip_level_array_layer_last_remaining_levels_and_layers,Fail
dEQP-VK.pipeline.pipeline_library.image_view.view_type.2d_array.format.r8_unorm.subresource_range.array_size,Fail
dEQP-VK.pipeline.pipeline_library.image_view.view_type.3d.format.r16g16b16a16_uint.component_swizzle.g_b_a_r,Fail
dEQP-VK.pipeline.pipeline_library.image_view.view_type.cube_array.format.r32g32_uint.subresource_range.lod_base_mip_level_array_size,Fail
dEQP-VK.pipeline.pipeline_library.sampler.view_type.1d_array.format.a4r4g4b4_unorm_pack16.mipmap.linear.lod.select_bias_2_5,Fail
dEQP-VK.pipeline.pipeline_library.sampler.view_type.1d_unnormalized.format.r32_sint.mag_filter.nearest,Fail
dEQP-VK.pipeline.pipeline_library.sampler.view_type.2d.format.r16_sfloat.address_modes.uvw_mode_clamp_to_edge_mode_repeat_mode_mirror_clamp_to_edge,Fail
dEQP-VK.pipeline.pipeline_library.sampler.view_type.2d.format.r8g8b8a8_uint.address_modes.uvw_mode_repeat_mode_mirror_clamp_to_edge_mode_mirror_clamp_to_edge,Fail
dEQP-VK.pipeline.pipeline_library.sampler.view_type.2d_unnormalized.format.r32g32_sfloat.address_modes.all_mode_clamp_to_border_custom_1000,Fail
dEQP-VK.pipeline.pipeline_library.sampler.view_type.3d.format.r32g32b32_uint.address_modes.all_mode_clamp_to_border_opaque_white,Fail
dEQP-VK.pipeline.pipeline_library.sampler.view_type.3d.format.r8g8b8a8_unorm.address_modes.uvw_mode_mirrored_repeat_mode_clamp_to_border_mode_mirror_clamp_to_edge,Fail
dEQP-VK.renderpass.dedicated_allocation.formats.r16_snorm.input.load.store.draw,Fail
dEQP-VK.renderpass.dedicated_allocation.formats.r5g6b5_unorm_pack16.input.dont_care.store.self_dep_draw,Fail
dEQP-VK.renderpass.suballocation.formats.a2b10g10r10_uint_pack32.input.load.dont_care.draw,Fail
@@ -191,67 +142,7 @@ dEQP-VK.transform_feedback.primitives_generated_query.get.queue_reset.pgq_32bit_
dEQP-VK.api.copy_and_blit.dedicated_allocation.depth_stencil_msaa_copy.whole.s8_uint_general_optimal_S_4_bit,Fail
dEQP-VK.image.texel_view_compatible.graphic.basic.2d_image.texture_read.bc1_rgb_unorm_block.r16g16b16a16_uint,Fail
dEQP-VK.memory_model.write_after_read.ext.u32.noncoherent.fence_fence.atomicwrite.queuefamily.payload_local.buffer.guard_local.image.vert,Fail
dEQP-VK.pipeline.fast_linked_library.image.suballocation.sampling_type.combined.view_type.1d_array.format.r32g32b32a32_sint.count_1.size.13x1_array_of_3,Fail
dEQP-VK.pipeline.fast_linked_library.image.suballocation.sampling_type.combined.view_type.1d_array.format.r8g8b8a8_srgb.count_1.size.2x1_array_of_3,Fail
dEQP-VK.pipeline.fast_linked_library.image.suballocation.sampling_type.combined.view_type.2d.format.r16g16b16a16_sint.count_1.size.13x13,Fail
dEQP-VK.pipeline.fast_linked_library.image.suballocation.sampling_type.combined.view_type.2d_array.format.r8g8_unorm.count_1.size.13x13_array_of_3,Fail
dEQP-VK.pipeline.fast_linked_library.image.suballocation.sampling_type.combined.view_type.3d.format.r8g8b8a8_srgb.count_1.size.17x11x5,Fail
dEQP-VK.pipeline.fast_linked_library.image.suballocation.sampling_type.separate.view_type.1d_array.format.r32g32_sfloat.count_1.size.512x1_array_of_3,Fail
dEQP-VK.pipeline.fast_linked_library.image.suballocation.sampling_type.separate.view_type.2d_array.format.r16g16_sfloat.count_1.size.13x23_array_of_3,Fail
dEQP-VK.pipeline.fast_linked_library.image.suballocation.sampling_type.separate.view_type.3d.format.r8g8b8a8_unorm.count_1.size.16x16x16,Fail
dEQP-VK.pipeline.fast_linked_library.image_view.view_type.1d.format.r32_uint.component_swizzle.r_g_b_a,Fail
dEQP-VK.pipeline.fast_linked_library.image_view.view_type.1d_array.format.b8g8r8a8_unorm.subresource_range.lod_base_mip_level_array_base_and_size,Fail
dEQP-VK.pipeline.fast_linked_library.image_view.view_type.2d_array.format.r16_sint.subresource_range.lod_mip_levels,Fail
dEQP-VK.pipeline.fast_linked_library.image_view.view_type.3d.format.r16g16_sfloat.subresource_range.single_array_layer_remaining_layers,Fail
dEQP-VK.pipeline.fast_linked_library.image_view.view_type.cube.format.e5b9g9r9_ufloat_pack32.subresource_range.lod_mip_levels_array_layer_second,Fail
dEQP-VK.pipeline.fast_linked_library.image_view.view_type.cube_array.format.r16g16b16a16_uint.subresource_range.lod_base_mip_level_base_array_layer_remaining_levels_and_layers,Fail
dEQP-VK.pipeline.fast_linked_library.sampler.separate_stencil_usage.view_type.cube.format.d24_unorm_s8_uint.mipmap.nearest.lod.select_min_1,Fail
dEQP-VK.pipeline.fast_linked_library.sampler.view_type.1d.format.r32_uint.address_modes.uvw_mode_clamp_to_edge_mode_clamp_to_edge_mode_clamp_to_border,Fail
dEQP-VK.pipeline.fast_linked_library.sampler.view_type.1d.format.r8_snorm.mipmap.linear.lod.select_bias_2_1,Fail
dEQP-VK.pipeline.fast_linked_library.sampler.view_type.1d.format.r8g8_unorm.address_modes.all_mode_clamp_to_border_opaque_white,Fail
dEQP-VK.pipeline.fast_linked_library.sampler.view_type.1d_array.format.r32g32b32_uint.address_modes.uvw_mode_clamp_to_edge_mode_repeat_mode_mirror_clamp_to_edge,Fail
dEQP-VK.pipeline.fast_linked_library.sampler.view_type.1d_array.format.r8g8b8a8_unorm.address_modes.all_mode_clamp_to_border_custom_1101_formatless,Fail
dEQP-VK.pipeline.fast_linked_library.sampler.view_type.1d_unnormalized.format.r32g32_sfloat.address_modes.all_mode_clamp_to_border_custom_1000,Fail
dEQP-VK.pipeline.fast_linked_library.sampler.view_type.2d_array.format.r32_uint.address_modes.uvw_mode_clamp_to_border_mode_mirrored_repeat_mode_mirror_clamp_to_edge,Fail
dEQP-VK.pipeline.fast_linked_library.sampler.view_type.2d_array.format.r5g6b5_unorm_pack16.address_modes.all_mode_clamp_to_border_custom_1101,Fail
dEQP-VK.pipeline.fast_linked_library.sampler.view_type.2d_array.format.r8_snorm.mag_reduce.comp_b_g_r_a.average,Fail
dEQP-VK.pipeline.fast_linked_library.sampler.view_type.2d_array.format.r8g8_unorm.mipmap.nearest.lod.select_bias_2_5,Fail
dEQP-VK.pipeline.fast_linked_library.sampler.view_type.2d_array.format.x8_d24_unorm_pack32.address_modes.uvw_mode_clamp_to_edge_mode_clamp_to_border_mode_repeat,Fail
dEQP-VK.pipeline.fast_linked_library.sampler.view_type.2d_unnormalized.format.r8g8_sint.address_modes.all_mode_clamp_to_border_opaque_white,Fail
dEQP-VK.pipeline.fast_linked_library.sampler.view_type.3d.format.e5b9g9r9_ufloat_pack32.address_modes.uvw_mode_clamp_to_edge_mode_clamp_to_edge_mode_clamp_to_border,Fail
dEQP-VK.pipeline.fast_linked_library.sampler.view_type.3d.format.r32g32_sfloat.mag_filter.nearest,Fail
dEQP-VK.pipeline.fast_linked_library.sampler.view_type.3d.format.r8g8b8a8_srgb.mipmap.linear.lod.select_bias_3_7,Fail
dEQP-VK.pipeline.fast_linked_library.sampler.view_type.cube_array.format.r8g8_sint.mag_filter.nearest,Fail
dEQP-VK.pipeline.monolithic.bind_point.graphics_compute.push_write.setup_cp_gs_cs_gp.cmd_draw_dispatch,Fail
dEQP-VK.pipeline.pipeline_library.image.suballocation.sampling_type.separate.view_type.1d_array.format.r32_sint.count_1.size.443x1_array_of_3,Fail
dEQP-VK.pipeline.pipeline_library.image.suballocation.sampling_type.separate.view_type.2d.format.r16g16_uint.count_1.size.8x16,Fail
dEQP-VK.pipeline.pipeline_library.image.suballocation.sampling_type.separate.view_type.2d_array.format.r5g6b5_unorm_pack16.count_1.size.32x16_array_of_3,Fail
dEQP-VK.pipeline.pipeline_library.image.suballocation.sampling_type.separate.view_type.3d.format.r32g32b32a32_sint.count_1.size.5x5x5,Fail
dEQP-VK.pipeline.pipeline_library.image_view.view_type.1d.format.r16g16b16a16_snorm.subresource_range.lod_base_mip_level_array_layer_last,Fail
dEQP-VK.pipeline.pipeline_library.image_view.view_type.1d.format.r8_snorm.component_swizzle.r_g_b_a,Fail
dEQP-VK.pipeline.pipeline_library.image_view.view_type.1d_array.format.e5b9g9r9_ufloat_pack32.subresource_range.lod_base_mip_level_remaining_levels,Fail
dEQP-VK.pipeline.pipeline_library.image_view.view_type.2d.format.r16g16_uint.subresource_range.array_layer_last,Fail
dEQP-VK.pipeline.pipeline_library.image_view.view_type.2d_array.format.r16_unorm.subresource_range.lod_base_mip_level_remaining_levels,Fail
dEQP-VK.pipeline.pipeline_library.image_view.view_type.3d.format.r16_uint.subresource_range.lod_base_mip_level_single_array_layer_remaining_levels_and_layers,Fail
dEQP-VK.pipeline.pipeline_library.image_view.view_type.cube.format.r32g32b32_sfloat.subresource_range.lod_base_mip_level,Fail
dEQP-VK.pipeline.pipeline_library.image_view.view_type.cube_array.format.r16g16b16a16_unorm.subresource_range.lod_base_mip_level_base_array_layer,Fail
dEQP-VK.pipeline.pipeline_library.sampler.view_type.1d.format.b8g8r8a8_sint.address_modes.uvw_mode_mirror_clamp_to_edge_mode_clamp_to_border_mode_mirrored_repeat,Fail
dEQP-VK.pipeline.pipeline_library.sampler.view_type.1d.format.r32_sint.address_modes.uvw_mode_clamp_to_border_mode_clamp_to_edge_mode_clamp_to_edge,Fail
dEQP-VK.pipeline.pipeline_library.sampler.view_type.1d.format.r5g6b5_unorm_pack16.mag_filter.nearest,Fail
dEQP-VK.pipeline.pipeline_library.sampler.view_type.1d.format.r8g8_sint.address_modes.all_mode_repeat,Fail
dEQP-VK.pipeline.pipeline_library.sampler.view_type.1d_array.format.r32g32_sfloat.address_modes.uvw_mode_mirror_clamp_to_edge_mode_mirror_clamp_to_edge_mode_clamp_to_border,Fail
dEQP-VK.pipeline.pipeline_library.sampler.view_type.1d_unnormalized.format.r8_snorm.address_modes.all_mode_clamp_to_border_custom_1000,Fail
dEQP-VK.pipeline.pipeline_library.sampler.view_type.2d.format.a4b4g4r4_unorm_pack16.mipmap.linear.lod.select_bias_2_1,Fail
dEQP-VK.pipeline.pipeline_library.sampler.view_type.2d.format.r32g32b32a32_sint.mipmap.nearest.lod.select_max_4,Fail
dEQP-VK.pipeline.pipeline_library.sampler.view_type.2d_array.format.b8g8r8a8_sint.mipmap.nearest.lod.select_max_4,Fail
dEQP-VK.pipeline.pipeline_library.sampler.view_type.2d_array.format.d16_unorm.address_modes.all_mode_clamp_to_border_custom_0011,Fail
dEQP-VK.pipeline.pipeline_library.sampler.view_type.2d_array.format.r32_sint.mipmap.nearest.lod.select_min_1,Fail
dEQP-VK.pipeline.pipeline_library.sampler.view_type.2d_unnormalized.format.b8g8r8a8_unorm.address_modes.all_mode_clamp_to_border_opaque_white,Fail
dEQP-VK.pipeline.pipeline_library.sampler.view_type.3d.format.b10g11r11_ufloat_pack32.address_modes.all_mode_clamp_to_border_custom_0000,Fail
dEQP-VK.pipeline.pipeline_library.sampler.view_type.3d.format.d32_sfloat_s8_uint.address_modes.all_mode_repeat,Fail
dEQP-VK.pipeline.pipeline_library.sampler.view_type.3d.format.r32_sfloat.address_modes.all_mode_mirror_clamp_to_edge,Fail
dEQP-VK.pipeline.pipeline_library.sampler.view_type.3d.format.r8_sint.address_modes.all_mode_clamp_to_border_transparent_black,Fail
dEQP-VK.pipeline.pipeline_library.sampler.view_type.3d.format.r8_unorm.mag_reduce.comp_r_zero_zero_zero.min,Fail
dEQP-VK.renderpass.dedicated_allocation.formats.d24_unorm_s8_uint.input.dont_care.store.self_dep_clear_draw_depth_read_only,Fail
dEQP-VK.renderpass.dedicated_allocation.formats.r16_sfloat.input.load.store.clear_draw_use_input_aspect,Fail
dEQP-VK.renderpass.dedicated_allocation.formats.r32_sint.input.dont_care.dont_care.draw,Fail

View File

@@ -673,14 +673,14 @@ layouts_equal(const struct lvp_descriptor_set_layout *a, const struct lvp_descri
#endif
static void
merge_layouts(struct lvp_pipeline *dst, struct lvp_pipeline_layout *src)
merge_layouts(struct vk_device *device, struct lvp_pipeline *dst, struct lvp_pipeline_layout *src)
{
if (!src)
return;
if (!dst->layout) {
/* no layout created yet: copy onto ralloc ctx allocation for auto-free */
dst->layout = ralloc(dst->mem_ctx, struct lvp_pipeline_layout);
dst->layout = vk_zalloc(&device->alloc, sizeof(struct lvp_pipeline_layout), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
memcpy(dst->layout, src, sizeof(struct lvp_pipeline_layout));
dst->layout->vk.ref_cnt = 1;
for (unsigned i = 0; i < dst->layout->vk.set_count; i++) {
if (dst->layout->vk.set_layouts[i])
vk_descriptor_set_layout_ref(dst->layout->vk.set_layouts[i]);
@@ -745,8 +745,6 @@ lvp_graphics_pipeline_init(struct lvp_pipeline *pipeline,
pipeline->library = true;
struct lvp_pipeline_layout *layout = lvp_pipeline_layout_from_handle(pCreateInfo->layout);
if (layout)
vk_pipeline_layout_ref(&layout->vk);
if (!layout || !(layout->vk.create_flags & VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT))
/* this is a regular pipeline with no partials: directly reuse */
@@ -757,7 +755,7 @@ lvp_graphics_pipeline_init(struct lvp_pipeline *pipeline,
pipeline->layout = layout;
else {
/* this is a partial: copy for later merging to avoid modifying another layout */
merge_layouts(pipeline, layout);
merge_layouts(&device->vk, pipeline, layout);
}
}
@@ -778,12 +776,15 @@ lvp_graphics_pipeline_init(struct lvp_pipeline *pipeline,
pipeline->force_min_sample = p->force_min_sample;
if (p->stages & layout_stages) {
if (!layout || (layout->vk.create_flags & VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT))
merge_layouts(pipeline, p->layout);
merge_layouts(&device->vk, pipeline, p->layout);
}
pipeline->stages |= p->stages;
}
}
if (pipeline->layout == layout && layout)
vk_pipeline_layout_ref(&layout->vk);
result = vk_graphics_pipeline_state_fill(&device->vk,
&pipeline->graphics_state,
pCreateInfo, NULL, NULL, NULL,