123 lines
3.5 KiB
C
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 */
|