zink: add screen-based indexing to descriptor sets
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Mon, 16 May 2022 20:54:47 +0000 (16:54 -0400)
committerMarge Bot <emma+marge@anholt.net>
Wed, 25 May 2022 04:01:56 +0000 (04:01 +0000)
this allows indirection for internal descriptor type -> vk descriptor set
and enables more easily altering the descriptor set index at runtime

Reviewed-by: Dave Airlie <airlied@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16645>

src/gallium/drivers/zink/zink_screen.c
src/gallium/drivers/zink/zink_screen.h

index c40dcd1..494321c 100644 (file)
@@ -2180,6 +2180,13 @@ zink_internal_create_screen(const struct pipe_screen_config *config)
 
    zink_verify_device_extensions(screen);
 
+   screen->desc_set_id[ZINK_DESCRIPTOR_TYPES] = 0;
+   screen->desc_set_id[ZINK_DESCRIPTOR_TYPE_UBO] = 1;
+   screen->desc_set_id[ZINK_DESCRIPTOR_TYPE_SAMPLER_VIEW] = 2;
+   screen->desc_set_id[ZINK_DESCRIPTOR_TYPE_SSBO] = 3;
+   screen->desc_set_id[ZINK_DESCRIPTOR_TYPE_IMAGE] = 4;
+   screen->desc_set_id[ZINK_DESCRIPTOR_BINDLESS] = 5;
+
    if (screen->info.have_EXT_calibrated_timestamps && !check_have_device_time(screen))
       goto fail;
 
index f1c7f30..a39b5f3 100644 (file)
@@ -164,6 +164,7 @@ struct zink_screen {
 
    struct vk_dispatch_table vk;
 
+   uint8_t desc_set_id[ZINK_MAX_DESCRIPTOR_SETS];
    bool (*descriptor_program_init)(struct zink_context *ctx, struct zink_program *pg);
    void (*descriptor_program_deinit)(struct zink_context *ctx, struct zink_program *pg);
    void (*descriptors_update)(struct zink_context *ctx, bool is_compute);