nvk: Move descrptor structs into a separate header

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30580>
This commit is contained in:
Faith Ekstrand 2024-08-06 14:43:18 -05:00 committed by Marge Bot
parent 8244b87822
commit 1940c8e543
8 changed files with 101 additions and 87 deletions

View file

@ -23,6 +23,7 @@ nvk_files = files(
'nvk_descriptor_set_layout.h',
'nvk_descriptor_table.c',
'nvk_descriptor_table.h',
'nvk_descriptor_types.h',
'nvk_device.c',
'nvk_device.h',
'nvk_device_memory.c',

View file

@ -6,7 +6,6 @@
#include "nvk_buffer.h"
#include "nvk_cmd_pool.h"
#include "nvk_descriptor_set.h"
#include "nvk_descriptor_set_layout.h"
#include "nvk_device.h"
#include "nvk_device_memory.h"

View file

@ -4,7 +4,6 @@
*/
#include "nvk_buffer.h"
#include "nvk_cmd_buffer.h"
#include "nvk_descriptor_set.h"
#include "nvk_device.h"
#include "nvk_entrypoints.h"
#include "nvk_mme.h"

View file

@ -4,6 +4,7 @@
*/
#include "nvk_buffer.h"
#include "nvk_cmd_buffer.h"
#include "nvk_descriptor_set.h"
#include "nvk_device.h"
#include "nvk_entrypoints.h"
#include "nvk_image.h"

View file

@ -7,6 +7,7 @@
#include "nvk_private.h"
#include "nvk_descriptor_types.h"
#include "nvk_device.h"
#include "nvk_physical_device.h"
#include "vk_object.h"
@ -18,90 +19,6 @@
struct nvk_descriptor_set_layout;
struct nvkmd_mem;
#define NVK_IMAGE_DESCRIPTOR_IMAGE_INDEX_MASK 0x000fffff
#define NVK_IMAGE_DESCRIPTOR_SAMPLER_INDEX_MASK 0xfff00000
PRAGMA_DIAGNOSTIC_PUSH
PRAGMA_DIAGNOSTIC_ERROR(-Wpadded)
struct nvk_sampled_image_descriptor {
unsigned image_index:20;
unsigned sampler_index:12;
};
PRAGMA_DIAGNOSTIC_POP
static_assert(sizeof(struct nvk_sampled_image_descriptor) == 4,
"nvk_sampled_image_descriptor has no holes");
PRAGMA_DIAGNOSTIC_PUSH
PRAGMA_DIAGNOSTIC_ERROR(-Wpadded)
struct nvk_storage_image_descriptor {
unsigned image_index:20;
unsigned sw_log2:2;
unsigned sh_log2:2;
unsigned pad:8;
};
PRAGMA_DIAGNOSTIC_POP
static_assert(sizeof(struct nvk_storage_image_descriptor) == 4,
"nvk_storage_image_descriptor has no holes");
PRAGMA_DIAGNOSTIC_PUSH
PRAGMA_DIAGNOSTIC_ERROR(-Wpadded)
struct nvk_buffer_view_descriptor {
unsigned image_index:20;
unsigned pad:12;
};
PRAGMA_DIAGNOSTIC_POP
static_assert(sizeof(struct nvk_buffer_view_descriptor) == 4,
"nvk_buffer_view_descriptor has no holes");
PRAGMA_DIAGNOSTIC_PUSH
PRAGMA_DIAGNOSTIC_ERROR(-Wpadded)
struct nvk_bindless_cbuf {
uint64_t base_addr_shift_4:45;
uint64_t size_shift_4:19;
};
PRAGMA_DIAGNOSTIC_POP
static_assert(sizeof(struct nvk_bindless_cbuf) == 8,
"nvk_bindless_cbuf has no holes");
/* This has to match nir_address_format_64bit_bounded_global */
PRAGMA_DIAGNOSTIC_PUSH
PRAGMA_DIAGNOSTIC_ERROR(-Wpadded)
struct nvk_buffer_address {
uint64_t base_addr;
uint32_t size;
uint32_t zero; /* Must be zero! */
};
PRAGMA_DIAGNOSTIC_POP
static_assert(sizeof(struct nvk_buffer_address) == 16,
"nvk_buffer_address has no holes");
union nvk_buffer_descriptor {
struct nvk_buffer_address addr;
struct nvk_bindless_cbuf cbuf;
};
static inline bool
nvk_use_bindless_cbuf(const struct nv_device_info *info)
{
return info->cls_eng3d >= 0xC597 /* TURING_A */;
}
static inline struct nvk_buffer_address
nvk_ubo_descriptor_addr(const struct nvk_physical_device *pdev,
union nvk_buffer_descriptor desc)
{
if (nvk_use_bindless_cbuf(&pdev->info)) {
return (struct nvk_buffer_address) {
.base_addr = desc.cbuf.base_addr_shift_4 << 4,
.size = desc.cbuf.size_shift_4 << 4,
};
} else {
return desc.addr;
}
}
#define NVK_BUFFER_ADDRESS_NULL ((struct nvk_buffer_address) { .size = 0 })
struct nvk_descriptor_pool {
struct vk_object_base base;

View file

@ -5,6 +5,7 @@
#include "nvk_descriptor_set_layout.h"
#include "nvk_descriptor_set.h"
#include "nvk_descriptor_types.h"
#include "nvk_device.h"
#include "nvk_entrypoints.h"
#include "nvk_physical_device.h"

View file

@ -0,0 +1,96 @@
/*
* Copyright © 2024 Collabora Ltd. and Red Hat Inc.
* SPDX-License-Identifier: MIT
*/
#ifndef NVK_DESCRIPTOR_TYPES
#define NVK_DESCRIPTOR_TYPES 1
#include "nvk_private.h"
#include "nvk_physical_device.h"
#define NVK_IMAGE_DESCRIPTOR_IMAGE_INDEX_MASK 0x000fffff
#define NVK_IMAGE_DESCRIPTOR_SAMPLER_INDEX_MASK 0xfff00000
PRAGMA_DIAGNOSTIC_PUSH
PRAGMA_DIAGNOSTIC_ERROR(-Wpadded)
struct nvk_sampled_image_descriptor {
unsigned image_index:20;
unsigned sampler_index:12;
};
PRAGMA_DIAGNOSTIC_POP
static_assert(sizeof(struct nvk_sampled_image_descriptor) == 4,
"nvk_sampled_image_descriptor has no holes");
PRAGMA_DIAGNOSTIC_PUSH
PRAGMA_DIAGNOSTIC_ERROR(-Wpadded)
struct nvk_storage_image_descriptor {
unsigned image_index:20;
unsigned sw_log2:2;
unsigned sh_log2:2;
unsigned pad:8;
};
PRAGMA_DIAGNOSTIC_POP
static_assert(sizeof(struct nvk_storage_image_descriptor) == 4,
"nvk_storage_image_descriptor has no holes");
PRAGMA_DIAGNOSTIC_PUSH
PRAGMA_DIAGNOSTIC_ERROR(-Wpadded)
struct nvk_buffer_view_descriptor {
unsigned image_index:20;
unsigned pad:12;
};
PRAGMA_DIAGNOSTIC_POP
static_assert(sizeof(struct nvk_buffer_view_descriptor) == 4,
"nvk_buffer_view_descriptor has no holes");
PRAGMA_DIAGNOSTIC_PUSH
PRAGMA_DIAGNOSTIC_ERROR(-Wpadded)
struct nvk_bindless_cbuf {
uint64_t base_addr_shift_4:45;
uint64_t size_shift_4:19;
};
PRAGMA_DIAGNOSTIC_POP
static_assert(sizeof(struct nvk_bindless_cbuf) == 8,
"nvk_bindless_cbuf has no holes");
/* This has to match nir_address_format_64bit_bounded_global */
PRAGMA_DIAGNOSTIC_PUSH
PRAGMA_DIAGNOSTIC_ERROR(-Wpadded)
struct nvk_buffer_address {
uint64_t base_addr;
uint32_t size;
uint32_t zero; /* Must be zero! */
};
PRAGMA_DIAGNOSTIC_POP
static_assert(sizeof(struct nvk_buffer_address) == 16,
"nvk_buffer_address has no holes");
#define NVK_BUFFER_ADDRESS_NULL ((struct nvk_buffer_address) { .size = 0 })
union nvk_buffer_descriptor {
struct nvk_buffer_address addr;
struct nvk_bindless_cbuf cbuf;
};
static inline bool
nvk_use_bindless_cbuf(const struct nv_device_info *info)
{
return info->cls_eng3d >= 0xC597 /* TURING_A */;
}
static inline struct nvk_buffer_address
nvk_ubo_descriptor_addr(const struct nvk_physical_device *pdev,
union nvk_buffer_descriptor desc)
{
if (nvk_use_bindless_cbuf(&pdev->info)) {
return (struct nvk_buffer_address) {
.base_addr = desc.cbuf.base_addr_shift_4 << 4,
.size = desc.cbuf.size_shift_4 << 4,
};
} else {
return desc.addr;
}
}
#endif /* NVK_DESCRIPTOR_TYPES */

View file

@ -3,8 +3,8 @@
* SPDX-License-Identifier: MIT
*/
#include "nvk_cmd_buffer.h"
#include "nvk_descriptor_set.h"
#include "nvk_descriptor_set_layout.h"
#include "nvk_descriptor_types.h"
#include "nvk_shader.h"
#include "vk_pipeline.h"