mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-06 21:50:11 +01:00
vulkan/cmd_queue: Free all elements of struct arrays
Acked-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/37710>
This commit is contained in:
parent
a3e77fe5d2
commit
990f1868ec
2 changed files with 15 additions and 8 deletions
|
|
@ -28,9 +28,3 @@ dEQP-VK.dynamic_state.monolithic.compute_transfer.single.compute.vertex_input_bi
|
|||
|
||||
# New fails in 1.4.1.1
|
||||
dEQP-VK.pipeline.pipeline_library.bind_buffers_2.maintenance5.robustness2.triangle_list.buffers9.stride_offset_rnd654.true_size.beyond_size,Fail
|
||||
|
||||
# New fails in 1.4.3.3
|
||||
dEQP-VK.api.fragment_shader_output.different_signedness.sint2sint_unorm2snorm,Fail
|
||||
dEQP-VK.pipeline.fast_linked_library.color_write_enable.alpha_channel.cmd_buffer_start.enable_first,Fail
|
||||
dEQP-VK.pipeline.fast_linked_library.color_write_enable.red_channel.before_draw.enable_second,Fail
|
||||
dEQP-VK.pipeline.fast_linked_library.multisample.multisampled_render_to_single_sampled.multi_renderpass.r8g8b8a8_unorm_r16g16b16a16_sfloat_r32g32b32a32_uint_d24_unorm_s8_uint.random_326,Fail
|
||||
|
|
|
|||
|
|
@ -600,7 +600,7 @@ def get_command_struct_free(command, param, types):
|
|||
builder.add("vk_free(queue->alloc, (void*)%s);" % (field_name))
|
||||
return builder.code
|
||||
|
||||
def get_struct_free(builder, field_name, nullable, struct_type, types):
|
||||
def get_struct_free(builder, field_name, nullable, struct_type, types, parent_name=None, len=None):
|
||||
if struct_type not in types:
|
||||
return
|
||||
|
||||
|
|
@ -610,6 +610,15 @@ def get_struct_free(builder, field_name, nullable, struct_type, types):
|
|||
builder.add("if (%s) {" % (field_name))
|
||||
builder.level += 1
|
||||
|
||||
struct_array_copy = len and len != "struct-ptr" and struct_type != "void"
|
||||
if struct_array_copy:
|
||||
array_index = builder.get_variable_name("i")
|
||||
builder.add("for (uint32_t %s = 0; %s < %s->%s; %s++) {" % (array_index, array_index, parent_name, len, array_index))
|
||||
builder.level += 1
|
||||
element_name = builder.get_variable_name("element")
|
||||
builder.add("%s *%s = %s + %s; (void)%s;" % (struct_type, element_name, field_name, array_index, element_name))
|
||||
field_name = element_name
|
||||
|
||||
for member in members:
|
||||
member_name = "%s->%s" % (field_name, member.name)
|
||||
if member.len and member.len != 'null-terminated':
|
||||
|
|
@ -621,7 +630,7 @@ def get_struct_free(builder, field_name, nullable, struct_type, types):
|
|||
builder.add("if (%s->%s) {" % (field_name, member.len))
|
||||
builder.level += 1
|
||||
|
||||
get_struct_free(builder, local_member_name, not guard, member.type, types)
|
||||
get_struct_free(builder, local_member_name, not guard, member.type, types, field_name, member.len)
|
||||
|
||||
if guard:
|
||||
builder.level -= 1
|
||||
|
|
@ -632,6 +641,10 @@ def get_struct_free(builder, field_name, nullable, struct_type, types):
|
|||
elif member.name == 'pNext':
|
||||
get_pnext_member_free(builder, struct_type, types, member_name)
|
||||
|
||||
if struct_array_copy:
|
||||
builder.level -= 1
|
||||
builder.add("}")
|
||||
|
||||
if members and nullable:
|
||||
builder.level -= 1
|
||||
builder.add("}")
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue