loader: Make use of app provided allocation callbacks
Convert all heap allocs/frees to use loader_heap_alloc() or loader_heap_free().
Before CreateInstance this will use malloc/free. At (and after) CreateInstance
alloc callbacks are stored and used for any allocations.
Exceptions are thirdparty code (cJSON and dirent_on_windows) still always use
malloc/free. Plan to address these in later patch if ti makes sense.
diff --git a/loader/loader.h b/loader/loader.h
index 98c5756..60b38c8 100644
--- a/loader/loader.h
+++ b/loader/loader.h
@@ -193,6 +193,7 @@
struct loader_instance *instances;
unsigned int loaded_layer_lib_count;
+ unsigned int loaded_layer_lib_capacity;
struct loader_lib_info *loaded_layer_lib_list;
// TODO add ref counting of ICD libraries
char *layer_dirs;
@@ -345,28 +346,44 @@
const struct loader_extension_list *ext_list);
void loader_add_to_ext_list(
+ const struct loader_instance *inst,
struct loader_extension_list *ext_list,
uint32_t prop_list_count,
const VkExtensionProperties *props);
-void loader_destroy_ext_list(struct loader_extension_list *ext_info);
-void loader_delete_layer_properties(struct loader_layer_list *layer_list);
+void loader_destroy_ext_list(
+ const struct loader_instance *inst,
+ struct loader_extension_list *ext_info);
+void loader_delete_layer_properties(
+ const struct loader_instance *inst,
+ struct loader_layer_list *layer_list);
void loader_add_to_layer_list(
+ const struct loader_instance *inst,
struct loader_layer_list *list,
uint32_t prop_list_count,
const struct loader_layer_properties *props);
-void loader_scanned_icd_clear(struct loader_icd_libs *icd_libs);
-void loader_icd_scan(struct loader_icd_libs *icds);
+void loader_scanned_icd_clear(
+ const struct loader_instance *inst,
+ struct loader_icd_libs *icd_libs);
+void loader_icd_scan(
+ const struct loader_instance *inst,
+ struct loader_icd_libs *icds);
void loader_layer_scan(
+ const struct loader_instance *inst,
struct loader_layer_list *instance_layers,
struct loader_layer_list *device_layers);
void loader_get_icd_loader_instance_extensions(
+ const struct loader_instance *inst,
struct loader_icd_libs *icd_libs,
struct loader_extension_list *inst_exts);
-
+struct loader_icd *loader_get_icd_and_device(
+ const VkDevice device,
+ struct loader_device **found_dev);
struct loader_icd * loader_get_icd(
const VkPhysicalDevice gpu,
uint32_t *gpu_index);
-void loader_remove_logical_device(VkDevice device);
+void loader_remove_logical_device(
+ const struct loader_instance *inst,
+ VkDevice device);
VkResult loader_enable_instance_layers(
struct loader_instance *inst,
const VkInstanceCreateInfo *pCreateInfo,
@@ -376,17 +393,17 @@
void loader_activate_instance_layer_extensions(struct loader_instance *inst);
void* loader_heap_alloc(
- struct loader_instance *instance,
+ const struct loader_instance *instance,
size_t size,
VkSystemAllocType allocType);
void* loader_aligned_heap_alloc(
- struct loader_instance *instance,
+ const struct loader_instance *instance,
size_t size,
size_t alignment,
VkSystemAllocType allocType);
void loader_heap_free(
- struct loader_instance *instance,
- void *pMem);
+ const struct loader_instance *instance,
+ void *pMem);
#endif /* LOADER_H */