mesa/src/virtio/vulkan/vn_descriptor_set.h

123 lines
3.5 KiB
C

/*
* Copyright 2019 Google LLC
* SPDX-License-Identifier: MIT
*
* based in part on anv and radv which are:
* Copyright © 2015 Intel Corporation
* Copyright © 2016 Red Hat.
* Copyright © 2016 Bas Nieuwenhuizen
*/
#ifndef VN_DESCRIPTOR_SET_H
#define VN_DESCRIPTOR_SET_H
#include "vn_common.h"
enum vn_descriptor_type {
VN_DESCRIPTOR_TYPE_SAMPLER,
VN_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
VN_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
VN_DESCRIPTOR_TYPE_STORAGE_IMAGE,
VN_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER,
VN_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER,
VN_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
VN_DESCRIPTOR_TYPE_STORAGE_BUFFER,
VN_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC,
VN_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC,
VN_DESCRIPTOR_TYPE_INPUT_ATTACHMENT,
VN_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK,
/* add new enum types before this line */
VN_NUM_DESCRIPTOR_TYPES,
};
/* TODO refactor struct to track enum vn_descriptor_type type.
* On VkDescriptorSetLayout creation. When we check against
* VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK, it will be against
* VN_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK instead
*/
struct vn_descriptor_set_layout_binding {
VkDescriptorType type;
uint32_t count;
bool has_immutable_samplers;
};
struct vn_descriptor_set_layout {
struct vn_object_base base;
struct vn_refcount refcount;
uint32_t last_binding;
bool has_variable_descriptor_count;
/* bindings must be the last field in the layout */
struct vn_descriptor_set_layout_binding bindings[];
};
VK_DEFINE_NONDISP_HANDLE_CASTS(vn_descriptor_set_layout,
base.base,
VkDescriptorSetLayout,
VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT)
struct vn_descriptor_pool_state {
uint32_t set_count;
uint32_t iub_binding_count;
uint32_t descriptor_counts[VN_NUM_DESCRIPTOR_TYPES];
};
struct vn_descriptor_pool {
struct vn_object_base base;
VkAllocationCallbacks allocator;
bool async_set_allocation;
struct vn_descriptor_pool_state max;
struct vn_descriptor_pool_state used;
struct list_head descriptor_sets;
};
VK_DEFINE_NONDISP_HANDLE_CASTS(vn_descriptor_pool,
base.base,
VkDescriptorPool,
VK_OBJECT_TYPE_DESCRIPTOR_POOL)
struct vn_update_descriptor_sets {
uint32_t write_count;
VkWriteDescriptorSet *writes;
VkDescriptorImageInfo *images;
VkDescriptorBufferInfo *buffers;
VkBufferView *views;
VkWriteDescriptorSetInlineUniformBlock *iubs;
};
struct vn_descriptor_set {
struct vn_object_base base;
struct vn_descriptor_set_layout *layout;
uint32_t last_binding_descriptor_count;
struct list_head head;
};
VK_DEFINE_NONDISP_HANDLE_CASTS(vn_descriptor_set,
base.base,
VkDescriptorSet,
VK_OBJECT_TYPE_DESCRIPTOR_SET)
struct vn_descriptor_update_template_entry {
size_t offset;
size_t stride;
};
struct vn_descriptor_update_template {
struct vn_object_base base;
mtx_t mutex;
struct vn_update_descriptor_sets *update;
struct vn_descriptor_update_template_entry entries[];
};
VK_DEFINE_NONDISP_HANDLE_CASTS(vn_descriptor_update_template,
base.base,
VkDescriptorUpdateTemplate,
VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE)
#endif /* VN_DESCRIPTOR_SET_H */