From 1940c8e5431323d190f300ec89885538347d33b5 Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Tue, 6 Aug 2024 14:43:18 -0500 Subject: [PATCH] nvk: Move descrptor structs into a separate header Part-of: --- src/nouveau/vulkan/meson.build | 1 + src/nouveau/vulkan/nvk_cmd_buffer.c | 1 - src/nouveau/vulkan/nvk_cmd_dispatch.c | 1 - src/nouveau/vulkan/nvk_cmd_meta.c | 1 + src/nouveau/vulkan/nvk_descriptor_set.h | 85 +--------------- .../vulkan/nvk_descriptor_set_layout.c | 1 + src/nouveau/vulkan/nvk_descriptor_types.h | 96 +++++++++++++++++++ .../vulkan/nvk_nir_lower_descriptors.c | 2 +- 8 files changed, 101 insertions(+), 87 deletions(-) create mode 100644 src/nouveau/vulkan/nvk_descriptor_types.h diff --git a/src/nouveau/vulkan/meson.build b/src/nouveau/vulkan/meson.build index 04904359796..6f39c661603 100644 --- a/src/nouveau/vulkan/meson.build +++ b/src/nouveau/vulkan/meson.build @@ -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', diff --git a/src/nouveau/vulkan/nvk_cmd_buffer.c b/src/nouveau/vulkan/nvk_cmd_buffer.c index f800c5caf7c..424ead2204f 100644 --- a/src/nouveau/vulkan/nvk_cmd_buffer.c +++ b/src/nouveau/vulkan/nvk_cmd_buffer.c @@ -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" diff --git a/src/nouveau/vulkan/nvk_cmd_dispatch.c b/src/nouveau/vulkan/nvk_cmd_dispatch.c index 19f4bfeed36..d56cb4f94be 100644 --- a/src/nouveau/vulkan/nvk_cmd_dispatch.c +++ b/src/nouveau/vulkan/nvk_cmd_dispatch.c @@ -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" diff --git a/src/nouveau/vulkan/nvk_cmd_meta.c b/src/nouveau/vulkan/nvk_cmd_meta.c index e1ea2d8287a..68c9e2d7f25 100644 --- a/src/nouveau/vulkan/nvk_cmd_meta.c +++ b/src/nouveau/vulkan/nvk_cmd_meta.c @@ -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" diff --git a/src/nouveau/vulkan/nvk_descriptor_set.h b/src/nouveau/vulkan/nvk_descriptor_set.h index 8522e3dcf17..b07d7c36e1f 100644 --- a/src/nouveau/vulkan/nvk_descriptor_set.h +++ b/src/nouveau/vulkan/nvk_descriptor_set.h @@ -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; diff --git a/src/nouveau/vulkan/nvk_descriptor_set_layout.c b/src/nouveau/vulkan/nvk_descriptor_set_layout.c index 29d0bfb6348..bd78440b334 100644 --- a/src/nouveau/vulkan/nvk_descriptor_set_layout.c +++ b/src/nouveau/vulkan/nvk_descriptor_set_layout.c @@ -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" diff --git a/src/nouveau/vulkan/nvk_descriptor_types.h b/src/nouveau/vulkan/nvk_descriptor_types.h new file mode 100644 index 00000000000..9162662284a --- /dev/null +++ b/src/nouveau/vulkan/nvk_descriptor_types.h @@ -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 */ diff --git a/src/nouveau/vulkan/nvk_nir_lower_descriptors.c b/src/nouveau/vulkan/nvk_nir_lower_descriptors.c index eda764aabad..601de22d09a 100644 --- a/src/nouveau/vulkan/nvk_nir_lower_descriptors.c +++ b/src/nouveau/vulkan/nvk_nir_lower_descriptors.c @@ -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"