case VK_OBJECT_TYPE_PIPELINE:
disp->DestroyPipeline(_device, (VkPipeline)(uintptr_t)obj, NULL);
break;
+ case VK_OBJECT_TYPE_SAMPLER:
+ disp->DestroySampler(_device, (VkSampler)(uintptr_t)obj, NULL);
+ break;
default:
unreachable("Unsupported object type");
}
}
VkResult
+vk_meta_create_sampler(struct vk_device *device,
+ struct vk_meta_device *meta,
+ const VkSamplerCreateInfo *info,
+ const void *key_data, size_t key_size,
+ VkSampler *sampler_out)
+{
+ const struct vk_device_dispatch_table *disp = &device->dispatch_table;
+ VkDevice _device = vk_device_to_handle(device);
+
+ VkSampler sampler;
+ VkResult result = disp->CreateSampler(_device, info, NULL, &sampler);
+ if (result != VK_SUCCESS)
+ return result;
+
+ *sampler_out = (VkSampler)
+ vk_meta_cache_object(device, meta, key_data, key_size,
+ VK_OBJECT_TYPE_SAMPLER,
+ (uint64_t)sampler);
+ return VK_SUCCESS;
+}
+
+VkResult
vk_meta_create_descriptor_set_layout(struct vk_device *device,
struct vk_meta_device *meta,
const VkDescriptorSetLayoutCreateInfo *info,
key_data, key_size);
}
+static inline VkSampler
+vk_meta_lookup_sampler(struct vk_meta_device *meta,
+ const void *key_data, size_t key_size)
+{
+ return (VkSampler)vk_meta_lookup_object(meta, VK_OBJECT_TYPE_SAMPLER,
+ key_data, key_size);
+}
+
struct vk_meta_rendering_info {
uint32_t view_mask;
uint32_t samples;
const void *key_data, size_t key_size,
VkPipeline *pipeline_out);
+VkResult
+vk_meta_create_sampler(struct vk_device *device,
+ struct vk_meta_device *meta,
+ const VkSamplerCreateInfo *info,
+ const void *key_data, size_t key_size,
+ VkSampler *sampler_out);
+
struct vk_meta_object_list {
struct util_dynarray arr;
};