From 6005d28249c92c5fa0f7384353f95f18fb33a17b Mon Sep 17 00:00:00 2001 From: Jarred Davies Date: Wed, 22 Mar 2023 16:38:43 +0000 Subject: [PATCH] pvr: Use vk_device's enabled features struct Avoids duplicating the struct in pvr_device and fixes uninitialized accesses when ppEnabledFeatures was NULL. Noticed when running valgrind over dEQP. Signed-off-by: Jarred Davies Reviewed-by: Frank Binns Part-of: --- src/imagination/vulkan/pvr_descriptor_set.c | 3 ++- src/imagination/vulkan/pvr_device.c | 5 ----- src/imagination/vulkan/pvr_pipeline.c | 26 ++++++++++++++------------ src/imagination/vulkan/pvr_private.h | 2 -- src/imagination/vulkan/pvr_query.c | 2 +- 5 files changed, 17 insertions(+), 21 deletions(-) diff --git a/src/imagination/vulkan/pvr_descriptor_set.c b/src/imagination/vulkan/pvr_descriptor_set.c index 1e93779..0e0f08f 100644 --- a/src/imagination/vulkan/pvr_descriptor_set.c +++ b/src/imagination/vulkan/pvr_descriptor_set.c @@ -163,7 +163,8 @@ void pvr_descriptor_size_info_init( case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER: case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC: - size_info_out->secondary = (uint32_t)device->features.robustBufferAccess; + size_info_out->secondary = + (uint32_t)device->vk.enabled_features.robustBufferAccess; break; default: diff --git a/src/imagination/vulkan/pvr_device.c b/src/imagination/vulkan/pvr_device.c index 4b1c5b0..21606ae 100644 --- a/src/imagination/vulkan/pvr_device.c +++ b/src/imagination/vulkan/pvr_device.c @@ -1838,11 +1838,6 @@ VkResult pvr_CreateDevice(VkPhysicalDevice physicalDevice, if (result != VK_SUCCESS) goto err_pvr_spm_finish_scratch_buffer_store; - if (pCreateInfo->pEnabledFeatures) - memcpy(&device->features, - pCreateInfo->pEnabledFeatures, - sizeof(device->features)); - /* FIXME: Move this to a later stage and possibly somewhere other than * pvr_device. The purpose of this is so that we don't have to get the size * on each kick. diff --git a/src/imagination/vulkan/pvr_pipeline.c b/src/imagination/vulkan/pvr_pipeline.c index 39af8a4..16f5ee9 100644 --- a/src/imagination/vulkan/pvr_pipeline.c +++ b/src/imagination/vulkan/pvr_pipeline.c @@ -353,7 +353,7 @@ static VkResult pvr_pds_vertex_attrib_program_create_and_upload( const size_t const_entries_size_in_bytes = pvr_pds_get_max_vertex_program_const_map_size_in_bytes( &device->pdevice->dev_info, - device->features.robustBufferAccess); + device->vk.enabled_features.robustBufferAccess); struct pvr_pds_upload *const program = &program_out->program; struct pvr_pds_info *const info = &program_out->info; struct pvr_const_map_entry *entries_buffer; @@ -375,11 +375,12 @@ static VkResult pvr_pds_vertex_attrib_program_create_and_upload( info->entries = entries_buffer; info->entries_size_in_bytes = const_entries_size_in_bytes; - pvr_pds_generate_vertex_primary_program(input, - NULL, - info, - device->features.robustBufferAccess, - &device->pdevice->dev_info); + pvr_pds_generate_vertex_primary_program( + input, + NULL, + info, + device->vk.enabled_features.robustBufferAccess, + &device->pdevice->dev_info); code_size_in_dwords = info->code_size_in_dwords; staging_buffer_size = PVR_DW_TO_BYTES(info->code_size_in_dwords); @@ -395,11 +396,12 @@ static VkResult pvr_pds_vertex_attrib_program_create_and_upload( } /* This also fills in info->entries. */ - pvr_pds_generate_vertex_primary_program(input, - staging_buffer, - info, - device->features.robustBufferAccess, - &device->pdevice->dev_info); + pvr_pds_generate_vertex_primary_program( + input, + staging_buffer, + info, + device->vk.enabled_features.robustBufferAccess, + &device->pdevice->dev_info); assert(info->code_size_in_dwords <= code_size_in_dwords); @@ -734,7 +736,7 @@ static VkResult pvr_pds_descriptor_program_create_and_upload( if (old_path) { result = pvr_pds_descriptor_program_setup_buffers( device, - device->features.robustBufferAccess, + device->vk.enabled_features.robustBufferAccess, compile_time_consts_data, ubo_data, &program.buffers, diff --git a/src/imagination/vulkan/pvr_private.h b/src/imagination/vulkan/pvr_private.h index 99ce9cd..a3136e1 100644 --- a/src/imagination/vulkan/pvr_private.h +++ b/src/imagination/vulkan/pvr_private.h @@ -271,8 +271,6 @@ struct pvr_device { struct pvr_spm_scratch_buffer_store spm_scratch_buffer_store; - VkPhysicalDeviceFeatures features; - struct pvr_bo_store *bo_store; struct pvr_bo *robustness_buffer; diff --git a/src/imagination/vulkan/pvr_query.c b/src/imagination/vulkan/pvr_query.c index 2adc8c4..b3b48bd 100644 --- a/src/imagination/vulkan/pvr_query.c +++ b/src/imagination/vulkan/pvr_query.c @@ -57,7 +57,7 @@ VkResult pvr_CreateQueryPool(VkDevice _device, * We don't currently support pipeline statistics queries. * VkPhysicalDeviceFeatures->pipelineStatisticsQuery = false. */ - assert(!device->features.pipelineStatisticsQuery); + assert(!device->vk.enabled_features.pipelineStatisticsQuery); assert(pCreateInfo->queryType == VK_QUERY_TYPE_OCCLUSION); pool = vk_object_alloc(&device->vk, -- 2.7.4