summaryrefslogtreecommitdiffstats
path: root/src/intel/vulkan/anv_private.h
diff options
context:
space:
mode:
authorKristian Høgsberg Kristensen <[email protected]>2016-02-11 22:46:28 -0800
committerKristian Høgsberg Kristensen <[email protected]>2016-02-22 17:13:51 -0800
commit2570a58bcdf30d699b89323fef60692093dee7ea (patch)
treed27100ecad296a746182c96e6cc5aa3e5998b491 /src/intel/vulkan/anv_private.h
parent353d5bf286e1509af9ec2f1b8152d1f64790b52c (diff)
anv: Implement descriptor pools
Descriptor pools are an optimization that lets applications allocate descriptor sets through an externally synchronized object (that is, unlocked). In our case it's also plugging a memory leak, since we didn't track all allocated sets and failed to free them in vkResetDescriptorPool() and vkDestroyDescriptorPool().
Diffstat (limited to 'src/intel/vulkan/anv_private.h')
-rw-r--r--src/intel/vulkan/anv_private.h17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h
index 479f3826135..6ce3f02d1f7 100644
--- a/src/intel/vulkan/anv_private.h
+++ b/src/intel/vulkan/anv_private.h
@@ -571,6 +571,8 @@ void anv_finish_wsi(struct anv_instance *instance);
struct anv_meta_state {
VkAllocationCallbacks alloc;
+ VkDescriptorPool desc_pool;
+
/**
* Use array element `i` for images with `2^i` samples.
*/
@@ -959,18 +961,32 @@ struct anv_descriptor {
struct anv_descriptor_set {
const struct anv_descriptor_set_layout *layout;
+ uint32_t size;
uint32_t buffer_count;
struct anv_buffer_view *buffer_views;
struct anv_descriptor descriptors[0];
};
+struct anv_descriptor_pool {
+ uint32_t size;
+ uint32_t next;
+ uint32_t free_list;
+
+ struct anv_state_stream surface_state_stream;
+ void *surface_state_free_list;
+
+ char data[0];
+};
+
VkResult
anv_descriptor_set_create(struct anv_device *device,
+ struct anv_descriptor_pool *pool,
const struct anv_descriptor_set_layout *layout,
struct anv_descriptor_set **out_set);
void
anv_descriptor_set_destroy(struct anv_device *device,
+ struct anv_descriptor_pool *pool,
struct anv_descriptor_set *set);
struct anv_pipeline_binding {
@@ -1839,6 +1855,7 @@ ANV_DEFINE_HANDLE_CASTS(anv_queue, VkQueue)
ANV_DEFINE_NONDISP_HANDLE_CASTS(anv_cmd_pool, VkCommandPool)
ANV_DEFINE_NONDISP_HANDLE_CASTS(anv_buffer, VkBuffer)
ANV_DEFINE_NONDISP_HANDLE_CASTS(anv_buffer_view, VkBufferView)
+ANV_DEFINE_NONDISP_HANDLE_CASTS(anv_descriptor_pool, VkDescriptorPool)
ANV_DEFINE_NONDISP_HANDLE_CASTS(anv_descriptor_set, VkDescriptorSet)
ANV_DEFINE_NONDISP_HANDLE_CASTS(anv_descriptor_set_layout, VkDescriptorSetLayout)
ANV_DEFINE_NONDISP_HANDLE_CASTS(anv_device_memory, VkDeviceMemory)