Skip to content

Commit e9f5de1

Browse files
cwabbott0Marge Bot
authored and
Marge Bot
committed
tu: Initial implementation of VK_EXT_graphics_pipeline_library
Now that the state for each pipeline is split into pieces, we can mostly implement it by stitching together the pieces. One TODO is that we could do more to split up the pre-rast and FS commands into separate draw states so that we have to emit less commands when fast linking, currently we compile the variants but delay emitting the commands until link time, but note that even the Gallium driver doesn't currently do this. Given the strict SSO model (e.g. with separate VPC registers for each stage) it may even be possible to do most of the linking ahead of time with only a few fixups for corner cases. Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18554>
1 parent 0a47002 commit e9f5de1

11 files changed

+1216
-266
lines changed

src/freedreno/ci/freedreno-a618-fails.txt

+32
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,22 @@ dEQP-VK.pipeline.monolithic.color_write_enable_maxa.cwe_after_bind.attachments5_
1515
dEQP-VK.pipeline.monolithic.color_write_enable_maxa.cwe_after_bind.attachments5_more3,Crash
1616
dEQP-VK.pipeline.monolithic.color_write_enable_maxa.cwe_after_bind.attachments6_more0,Crash
1717
dEQP-VK.pipeline.monolithic.color_write_enable_maxa.cwe_after_bind.attachments6_more1,Crash
18+
dEQP-VK.pipeline.pipeline_library.color_write_enable_maxa.cwe_after_bind.attachments4_more0,Crash
19+
dEQP-VK.pipeline.pipeline_library.color_write_enable_maxa.cwe_after_bind.attachments4_more1,Crash
20+
dEQP-VK.pipeline.pipeline_library.color_write_enable_maxa.cwe_after_bind.attachments4_more3,Crash
21+
dEQP-VK.pipeline.pipeline_library.color_write_enable_maxa.cwe_after_bind.attachments5_more0,Crash
22+
dEQP-VK.pipeline.pipeline_library.color_write_enable_maxa.cwe_after_bind.attachments5_more1,Crash
23+
dEQP-VK.pipeline.pipeline_library.color_write_enable_maxa.cwe_after_bind.attachments5_more3,Crash
24+
dEQP-VK.pipeline.pipeline_library.color_write_enable_maxa.cwe_after_bind.attachments6_more0,Crash
25+
dEQP-VK.pipeline.pipeline_library.color_write_enable_maxa.cwe_after_bind.attachments6_more1,Crash
26+
dEQP-VK.pipeline.fast_linked_library.color_write_enable_maxa.cwe_after_bind.attachments4_more0,Crash
27+
dEQP-VK.pipeline.fast_linked_library.color_write_enable_maxa.cwe_after_bind.attachments4_more1,Crash
28+
dEQP-VK.pipeline.fast_linked_library.color_write_enable_maxa.cwe_after_bind.attachments4_more3,Crash
29+
dEQP-VK.pipeline.fast_linked_library.color_write_enable_maxa.cwe_after_bind.attachments5_more0,Crash
30+
dEQP-VK.pipeline.fast_linked_library.color_write_enable_maxa.cwe_after_bind.attachments5_more1,Crash
31+
dEQP-VK.pipeline.fast_linked_library.color_write_enable_maxa.cwe_after_bind.attachments5_more3,Crash
32+
dEQP-VK.pipeline.fast_linked_library.color_write_enable_maxa.cwe_after_bind.attachments6_more0,Crash
33+
dEQP-VK.pipeline.fast_linked_library.color_write_enable_maxa.cwe_after_bind.attachments6_more1,Crash
1834
gmem-dEQP-VK.pipeline.monolithic.color_write_enable_maxa.cwe_after_bind.attachments4_more0,Crash
1935
gmem-dEQP-VK.pipeline.monolithic.color_write_enable_maxa.cwe_after_bind.attachments4_more1,Crash
2036
gmem-dEQP-VK.pipeline.monolithic.color_write_enable_maxa.cwe_after_bind.attachments4_more3,Crash
@@ -23,6 +39,22 @@ gmem-dEQP-VK.pipeline.monolithic.color_write_enable_maxa.cwe_after_bind.attachme
2339
gmem-dEQP-VK.pipeline.monolithic.color_write_enable_maxa.cwe_after_bind.attachments5_more3,Crash
2440
gmem-dEQP-VK.pipeline.monolithic.color_write_enable_maxa.cwe_after_bind.attachments6_more0,Crash
2541
gmem-dEQP-VK.pipeline.monolithic.color_write_enable_maxa.cwe_after_bind.attachments6_more1,Crash
42+
gmem-dEQP-VK.pipeline.pipeline_library.color_write_enable_maxa.cwe_after_bind.attachments4_more0,Crash
43+
gmem-dEQP-VK.pipeline.pipeline_library.color_write_enable_maxa.cwe_after_bind.attachments4_more1,Crash
44+
gmem-dEQP-VK.pipeline.pipeline_library.color_write_enable_maxa.cwe_after_bind.attachments4_more3,Crash
45+
gmem-dEQP-VK.pipeline.pipeline_library.color_write_enable_maxa.cwe_after_bind.attachments5_more0,Crash
46+
gmem-dEQP-VK.pipeline.pipeline_library.color_write_enable_maxa.cwe_after_bind.attachments5_more1,Crash
47+
gmem-dEQP-VK.pipeline.pipeline_library.color_write_enable_maxa.cwe_after_bind.attachments5_more3,Crash
48+
gmem-dEQP-VK.pipeline.pipeline_library.color_write_enable_maxa.cwe_after_bind.attachments6_more0,Crash
49+
gmem-dEQP-VK.pipeline.pipeline_library.color_write_enable_maxa.cwe_after_bind.attachments6_more1,Crash
50+
gmem-dEQP-VK.pipeline.fast_linked_library.color_write_enable_maxa.cwe_after_bind.attachments4_more0,Crash
51+
gmem-dEQP-VK.pipeline.fast_linked_library.color_write_enable_maxa.cwe_after_bind.attachments4_more1,Crash
52+
gmem-dEQP-VK.pipeline.fast_linked_library.color_write_enable_maxa.cwe_after_bind.attachments4_more3,Crash
53+
gmem-dEQP-VK.pipeline.fast_linked_library.color_write_enable_maxa.cwe_after_bind.attachments5_more0,Crash
54+
gmem-dEQP-VK.pipeline.fast_linked_library.color_write_enable_maxa.cwe_after_bind.attachments5_more1,Crash
55+
gmem-dEQP-VK.pipeline.fast_linked_library.color_write_enable_maxa.cwe_after_bind.attachments5_more3,Crash
56+
gmem-dEQP-VK.pipeline.fast_linked_library.color_write_enable_maxa.cwe_after_bind.attachments6_more0,Crash
57+
gmem-dEQP-VK.pipeline.fast_linked_library.color_write_enable_maxa.cwe_after_bind.attachments6_more1,Crash
2658

2759
spill-dEQP-VK.subgroups.ballot_broadcast.compute.subgroupbroadcast_bool,Fail
2860
spill-dEQP-VK.subgroups.ballot_broadcast.compute.subgroupbroadcast_bool_requiredsubgroupsize128,Fail
Original file line numberDiff line numberDiff line change
@@ -1 +1,28 @@
11
dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.12,Crash
2+
3+
# https://gitlab.khronos.org/Tracker/vk-gl-cts/-/issues/3759
4+
# deqp-vk: ../src/freedreno/vulkan/tu_pipeline.c:3894: tu_pipeline_builder_init_graphics: Assertion `subpass->color_count == 0 || !create_info->pColorBlendState || subpass->color_count == create_info->pColorBlendState->attachmentCount' failed
5+
dEQP-VK.pipeline.monolithic.color_write_enable_maxa.cwe_after_bind.attachments4_more0,Crash
6+
dEQP-VK.pipeline.monolithic.color_write_enable_maxa.cwe_after_bind.attachments4_more1,Crash
7+
dEQP-VK.pipeline.monolithic.color_write_enable_maxa.cwe_after_bind.attachments4_more3,Crash
8+
dEQP-VK.pipeline.monolithic.color_write_enable_maxa.cwe_after_bind.attachments5_more0,Crash
9+
dEQP-VK.pipeline.monolithic.color_write_enable_maxa.cwe_after_bind.attachments5_more1,Crash
10+
dEQP-VK.pipeline.monolithic.color_write_enable_maxa.cwe_after_bind.attachments5_more3,Crash
11+
dEQP-VK.pipeline.monolithic.color_write_enable_maxa.cwe_after_bind.attachments6_more0,Crash
12+
dEQP-VK.pipeline.monolithic.color_write_enable_maxa.cwe_after_bind.attachments6_more1,Crash
13+
dEQP-VK.pipeline.pipeline_library.color_write_enable_maxa.cwe_after_bind.attachments4_more0,Crash
14+
dEQP-VK.pipeline.pipeline_library.color_write_enable_maxa.cwe_after_bind.attachments4_more1,Crash
15+
dEQP-VK.pipeline.pipeline_library.color_write_enable_maxa.cwe_after_bind.attachments4_more3,Crash
16+
dEQP-VK.pipeline.pipeline_library.color_write_enable_maxa.cwe_after_bind.attachments5_more0,Crash
17+
dEQP-VK.pipeline.pipeline_library.color_write_enable_maxa.cwe_after_bind.attachments5_more1,Crash
18+
dEQP-VK.pipeline.pipeline_library.color_write_enable_maxa.cwe_after_bind.attachments5_more3,Crash
19+
dEQP-VK.pipeline.pipeline_library.color_write_enable_maxa.cwe_after_bind.attachments6_more0,Crash
20+
dEQP-VK.pipeline.pipeline_library.color_write_enable_maxa.cwe_after_bind.attachments6_more1,Crash
21+
dEQP-VK.pipeline.fast_linked_library.color_write_enable_maxa.cwe_after_bind.attachments4_more0,Crash
22+
dEQP-VK.pipeline.fast_linked_library.color_write_enable_maxa.cwe_after_bind.attachments4_more1,Crash
23+
dEQP-VK.pipeline.fast_linked_library.color_write_enable_maxa.cwe_after_bind.attachments4_more3,Crash
24+
dEQP-VK.pipeline.fast_linked_library.color_write_enable_maxa.cwe_after_bind.attachments5_more0,Crash
25+
dEQP-VK.pipeline.fast_linked_library.color_write_enable_maxa.cwe_after_bind.attachments5_more1,Crash
26+
dEQP-VK.pipeline.fast_linked_library.color_write_enable_maxa.cwe_after_bind.attachments5_more3,Crash
27+
dEQP-VK.pipeline.fast_linked_library.color_write_enable_maxa.cwe_after_bind.attachments6_more0,Crash
28+
dEQP-VK.pipeline.fast_linked_library.color_write_enable_maxa.cwe_after_bind.attachments6_more1,Crash

src/freedreno/ci/freedreno-a630-fails.txt

+32
Original file line numberDiff line numberDiff line change
@@ -431,6 +431,22 @@ dEQP-VK.pipeline.monolithic.color_write_enable_maxa.cwe_after_bind.attachments5_
431431
dEQP-VK.pipeline.monolithic.color_write_enable_maxa.cwe_after_bind.attachments5_more3,Crash
432432
dEQP-VK.pipeline.monolithic.color_write_enable_maxa.cwe_after_bind.attachments6_more0,Crash
433433
dEQP-VK.pipeline.monolithic.color_write_enable_maxa.cwe_after_bind.attachments6_more1,Crash
434+
dEQP-VK.pipeline.pipeline_library.color_write_enable_maxa.cwe_after_bind.attachments4_more0,Crash
435+
dEQP-VK.pipeline.pipeline_library.color_write_enable_maxa.cwe_after_bind.attachments4_more1,Crash
436+
dEQP-VK.pipeline.pipeline_library.color_write_enable_maxa.cwe_after_bind.attachments4_more3,Crash
437+
dEQP-VK.pipeline.pipeline_library.color_write_enable_maxa.cwe_after_bind.attachments5_more0,Crash
438+
dEQP-VK.pipeline.pipeline_library.color_write_enable_maxa.cwe_after_bind.attachments5_more1,Crash
439+
dEQP-VK.pipeline.pipeline_library.color_write_enable_maxa.cwe_after_bind.attachments5_more3,Crash
440+
dEQP-VK.pipeline.pipeline_library.color_write_enable_maxa.cwe_after_bind.attachments6_more0,Crash
441+
dEQP-VK.pipeline.pipeline_library.color_write_enable_maxa.cwe_after_bind.attachments6_more1,Crash
442+
dEQP-VK.pipeline.fast_linked_library.color_write_enable_maxa.cwe_after_bind.attachments4_more0,Crash
443+
dEQP-VK.pipeline.fast_linked_library.color_write_enable_maxa.cwe_after_bind.attachments4_more1,Crash
444+
dEQP-VK.pipeline.fast_linked_library.color_write_enable_maxa.cwe_after_bind.attachments4_more3,Crash
445+
dEQP-VK.pipeline.fast_linked_library.color_write_enable_maxa.cwe_after_bind.attachments5_more0,Crash
446+
dEQP-VK.pipeline.fast_linked_library.color_write_enable_maxa.cwe_after_bind.attachments5_more1,Crash
447+
dEQP-VK.pipeline.fast_linked_library.color_write_enable_maxa.cwe_after_bind.attachments5_more3,Crash
448+
dEQP-VK.pipeline.fast_linked_library.color_write_enable_maxa.cwe_after_bind.attachments6_more0,Crash
449+
dEQP-VK.pipeline.fast_linked_library.color_write_enable_maxa.cwe_after_bind.attachments6_more1,Crash
434450
gmem-dEQP-VK.pipeline.monolithic.color_write_enable_maxa.cwe_after_bind.attachments4_more0,Crash
435451
gmem-dEQP-VK.pipeline.monolithic.color_write_enable_maxa.cwe_after_bind.attachments4_more1,Crash
436452
gmem-dEQP-VK.pipeline.monolithic.color_write_enable_maxa.cwe_after_bind.attachments4_more3,Crash
@@ -439,6 +455,22 @@ gmem-dEQP-VK.pipeline.monolithic.color_write_enable_maxa.cwe_after_bind.attachme
439455
gmem-dEQP-VK.pipeline.monolithic.color_write_enable_maxa.cwe_after_bind.attachments5_more3,Crash
440456
gmem-dEQP-VK.pipeline.monolithic.color_write_enable_maxa.cwe_after_bind.attachments6_more0,Crash
441457
gmem-dEQP-VK.pipeline.monolithic.color_write_enable_maxa.cwe_after_bind.attachments6_more1,Crash
458+
gmem-dEQP-VK.pipeline.pipeline_library.color_write_enable_maxa.cwe_after_bind.attachments4_more0,Crash
459+
gmem-dEQP-VK.pipeline.pipeline_library.color_write_enable_maxa.cwe_after_bind.attachments4_more1,Crash
460+
gmem-dEQP-VK.pipeline.pipeline_library.color_write_enable_maxa.cwe_after_bind.attachments4_more3,Crash
461+
gmem-dEQP-VK.pipeline.pipeline_library.color_write_enable_maxa.cwe_after_bind.attachments5_more0,Crash
462+
gmem-dEQP-VK.pipeline.pipeline_library.color_write_enable_maxa.cwe_after_bind.attachments5_more1,Crash
463+
gmem-dEQP-VK.pipeline.pipeline_library.color_write_enable_maxa.cwe_after_bind.attachments5_more3,Crash
464+
gmem-dEQP-VK.pipeline.pipeline_library.color_write_enable_maxa.cwe_after_bind.attachments6_more0,Crash
465+
gmem-dEQP-VK.pipeline.pipeline_library.color_write_enable_maxa.cwe_after_bind.attachments6_more1,Crash
466+
gmem-dEQP-VK.pipeline.fast_linked_library.color_write_enable_maxa.cwe_after_bind.attachments4_more0,Crash
467+
gmem-dEQP-VK.pipeline.fast_linked_library.color_write_enable_maxa.cwe_after_bind.attachments4_more1,Crash
468+
gmem-dEQP-VK.pipeline.fast_linked_library.color_write_enable_maxa.cwe_after_bind.attachments4_more3,Crash
469+
gmem-dEQP-VK.pipeline.fast_linked_library.color_write_enable_maxa.cwe_after_bind.attachments5_more0,Crash
470+
gmem-dEQP-VK.pipeline.fast_linked_library.color_write_enable_maxa.cwe_after_bind.attachments5_more1,Crash
471+
gmem-dEQP-VK.pipeline.fast_linked_library.color_write_enable_maxa.cwe_after_bind.attachments5_more3,Crash
472+
gmem-dEQP-VK.pipeline.fast_linked_library.color_write_enable_maxa.cwe_after_bind.attachments6_more0,Crash
473+
gmem-dEQP-VK.pipeline.fast_linked_library.color_write_enable_maxa.cwe_after_bind.attachments6_more1,Crash
442474

443475
# https://gitlab.freedesktop.org/mesa/mesa/-/issues/7152
444476
spec@ext_transform_feedback@builtin-varyings gl_culldistance,Fail

src/freedreno/ir3/ir3_shader.c

+6-4
Original file line numberDiff line numberDiff line change
@@ -615,17 +615,19 @@ ir3_trim_constlen(struct ir3_shader_variant **variants,
615615
{
616616
unsigned constlens[MESA_SHADER_STAGES] = {};
617617

618+
bool shared_consts_enable = false;
619+
618620
for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) {
619-
if (variants[i])
621+
if (variants[i]) {
620622
constlens[i] = variants[i]->constlen;
623+
shared_consts_enable =
624+
ir3_const_state(variants[i])->shared_consts_enable;
625+
}
621626
}
622627

623628
uint32_t trimmed = 0;
624629
STATIC_ASSERT(MESA_SHADER_STAGES <= 8 * sizeof(trimmed));
625630

626-
bool shared_consts_enable =
627-
ir3_const_state(variants[MESA_SHADER_VERTEX])->shared_consts_enable;
628-
629631
/* Use a hw quirk for geometry shared consts, not matched with actual
630632
* shared consts size (on a6xx).
631633
*/

src/freedreno/vulkan/tu_descriptor_set.c

+49-22
Original file line numberDiff line numberDiff line change
@@ -410,6 +410,46 @@ sha1_update_descriptor_set_layout(struct mesa_sha1 *ctx,
410410
* just multiple descriptor set layouts pasted together.
411411
*/
412412

413+
void
414+
tu_pipeline_layout_init(struct tu_pipeline_layout *layout)
415+
{
416+
unsigned dynamic_offset_size = 0;
417+
418+
for (uint32_t set = 0; set < layout->num_sets; set++) {
419+
assert(set < MAX_SETS);
420+
layout->set[set].dynamic_offset_start = dynamic_offset_size;
421+
422+
if (layout->set[set].layout)
423+
dynamic_offset_size += layout->set[set].layout->dynamic_offset_size;
424+
}
425+
426+
layout->dynamic_offset_size = dynamic_offset_size;
427+
428+
/* We only care about INDEPENDENT_SETS for dynamic-offset descriptors,
429+
* where all the descriptors from all the sets are combined into one set
430+
* and we have to provide the dynamic_offset_start dynamically with fast
431+
* linking.
432+
*/
433+
if (dynamic_offset_size == 0) {
434+
layout->independent_sets = false;
435+
}
436+
437+
struct mesa_sha1 ctx;
438+
_mesa_sha1_init(&ctx);
439+
for (unsigned s = 0; s < layout->num_sets; s++) {
440+
if (layout->set[s].layout)
441+
sha1_update_descriptor_set_layout(&ctx, layout->set[s].layout);
442+
_mesa_sha1_update(&ctx, &layout->set[s].dynamic_offset_start,
443+
sizeof(layout->set[s].dynamic_offset_start));
444+
}
445+
_mesa_sha1_update(&ctx, &layout->num_sets, sizeof(layout->num_sets));
446+
_mesa_sha1_update(&ctx, &layout->push_constant_size,
447+
sizeof(layout->push_constant_size));
448+
_mesa_sha1_update(&ctx, &layout->independent_sets,
449+
sizeof(layout->independent_sets));
450+
_mesa_sha1_final(&ctx, layout->sha1);
451+
}
452+
413453
VKAPI_ATTR VkResult VKAPI_CALL
414454
tu_CreatePipelineLayout(VkDevice _device,
415455
const VkPipelineLayoutCreateInfo *pCreateInfo,
@@ -428,23 +468,16 @@ tu_CreatePipelineLayout(VkDevice _device,
428468
return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
429469

430470
layout->num_sets = pCreateInfo->setLayoutCount;
431-
layout->dynamic_offset_size = 0;
432-
433-
unsigned dynamic_offset_size = 0;
434-
435471
for (uint32_t set = 0; set < pCreateInfo->setLayoutCount; set++) {
436472
TU_FROM_HANDLE(tu_descriptor_set_layout, set_layout,
437473
pCreateInfo->pSetLayouts[set]);
438474

439475
assert(set < MAX_SETS);
440476
layout->set[set].layout = set_layout;
441-
layout->set[set].dynamic_offset_start = dynamic_offset_size;
442-
vk_descriptor_set_layout_ref(&set_layout->vk);
443-
444-
dynamic_offset_size += set_layout->dynamic_offset_size;
477+
if (set_layout)
478+
vk_descriptor_set_layout_ref(&set_layout->vk);
445479
}
446480

447-
layout->dynamic_offset_size = dynamic_offset_size;
448481
layout->push_constant_size = 0;
449482

450483
for (unsigned i = 0; i < pCreateInfo->pushConstantRangeCount; ++i) {
@@ -454,18 +487,10 @@ tu_CreatePipelineLayout(VkDevice _device,
454487
}
455488

456489
layout->push_constant_size = align(layout->push_constant_size, 16);
490+
layout->independent_sets =
491+
pCreateInfo->flags & VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT;
457492

458-
struct mesa_sha1 ctx;
459-
_mesa_sha1_init(&ctx);
460-
for (unsigned s = 0; s < layout->num_sets; s++) {
461-
sha1_update_descriptor_set_layout(&ctx, layout->set[s].layout);
462-
_mesa_sha1_update(&ctx, &layout->set[s].dynamic_offset_start,
463-
sizeof(layout->set[s].dynamic_offset_start));
464-
}
465-
_mesa_sha1_update(&ctx, &layout->num_sets, sizeof(layout->num_sets));
466-
_mesa_sha1_update(&ctx, &layout->push_constant_size,
467-
sizeof(layout->push_constant_size));
468-
_mesa_sha1_final(&ctx, layout->sha1);
493+
tu_pipeline_layout_init(layout);
469494

470495
*pPipelineLayout = tu_pipeline_layout_to_handle(layout);
471496

@@ -483,8 +508,10 @@ tu_DestroyPipelineLayout(VkDevice _device,
483508
if (!pipeline_layout)
484509
return;
485510

486-
for (uint32_t i = 0; i < pipeline_layout->num_sets; i++)
487-
vk_descriptor_set_layout_unref(&device->vk, &pipeline_layout->set[i].layout->vk);
511+
for (uint32_t i = 0; i < pipeline_layout->num_sets; i++) {
512+
if (pipeline_layout->set[i].layout)
513+
vk_descriptor_set_layout_unref(&device->vk, &pipeline_layout->set[i].layout->vk);
514+
}
488515

489516
vk_object_free(&device->vk, pAllocator, pipeline_layout);
490517
}

src/freedreno/vulkan/tu_descriptor_set.h

+4
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,8 @@ struct tu_pipeline_layout
9393
uint32_t dynamic_offset_start;
9494
} set[MAX_SETS];
9595

96+
bool independent_sets;
97+
9698
uint32_t num_sets;
9799
uint32_t push_constant_size;
98100
uint32_t dynamic_offset_size;
@@ -102,6 +104,8 @@ struct tu_pipeline_layout
102104
VK_DEFINE_NONDISP_HANDLE_CASTS(tu_pipeline_layout, base, VkPipelineLayout,
103105
VK_OBJECT_TYPE_PIPELINE_LAYOUT)
104106

107+
void tu_pipeline_layout_init(struct tu_pipeline_layout *layout);
108+
105109
struct tu_descriptor_set
106110
{
107111
struct vk_object_base base;

src/freedreno/vulkan/tu_device.c

+16
Original file line numberDiff line numberDiff line change
@@ -238,11 +238,14 @@ get_device_extensions(const struct tu_physical_device *device,
238238
.EXT_tooling_info = true,
239239
.EXT_inline_uniform_block = true,
240240
.EXT_mutable_descriptor_type = true,
241+
.KHR_pipeline_library = true,
242+
.EXT_graphics_pipeline_library = true,
241243
};
242244
}
243245

244246
static const struct vk_pipeline_cache_object_ops *const cache_import_ops[] = {
245247
&tu_shaders_ops,
248+
&tu_nir_shaders_ops,
246249
NULL,
247250
};
248251

@@ -906,6 +909,12 @@ tu_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice,
906909
features->multiDraw = true;
907910
break;
908911
}
912+
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT: {
913+
VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT *features =
914+
(VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT *)ext;
915+
features->graphicsPipelineLibrary = true;
916+
break;
917+
}
909918

910919
default:
911920
break;
@@ -1371,6 +1380,13 @@ tu_GetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice,
13711380
properties->maxMultiDrawCount = 2048;
13721381
break;
13731382
}
1383+
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_PROPERTIES_EXT: {
1384+
VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT *props =
1385+
(VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT *)ext;
1386+
props->graphicsPipelineLibraryFastLinking = true;
1387+
props->graphicsPipelineLibraryIndependentInterpolationDecoration = true;
1388+
break;
1389+
}
13741390
default:
13751391
break;
13761392
}

0 commit comments

Comments
 (0)