diff --git a/src/gallium/frontends/lavapipe/ci/lvp-asan-fails.txt b/src/gallium/frontends/lavapipe/ci/lvp-asan-fails.txt index 8d36e0b585b..63f84d4c812 100644 --- a/src/gallium/frontends/lavapipe/ci/lvp-asan-fails.txt +++ b/src/gallium/frontends/lavapipe/ci/lvp-asan-fails.txt @@ -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 diff --git a/src/gallium/frontends/lavapipe/lvp_pipeline.c b/src/gallium/frontends/lavapipe/lvp_pipeline.c index 58eb8b72617..ba62d289a84 100644 --- a/src/gallium/frontends/lavapipe/lvp_pipeline.c +++ b/src/gallium/frontends/lavapipe/lvp_pipeline.c @@ -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,