diff --git a/src/asahi/vulkan/hk_cmd_meta.c b/src/asahi/vulkan/hk_cmd_meta.c index f5a33131619..4a3828d19c5 100644 --- a/src/asahi/vulkan/hk_cmd_meta.c +++ b/src/asahi/vulkan/hk_cmd_meta.c @@ -59,6 +59,7 @@ hk_device_init_meta(struct hk_device *dev) dev->meta.use_gs_for_layer = false; dev->meta.use_stencil_export = true; + dev->meta.use_rect_list_pipeline = true; dev->meta.cmd_bind_map_buffer = hk_cmd_bind_map_buffer; dev->meta.max_bind_map_buffer_size_B = 64 * 1024; diff --git a/src/nouveau/vulkan/nvk_cmd_meta.c b/src/nouveau/vulkan/nvk_cmd_meta.c index 5af67a87eff..4504df5ac93 100644 --- a/src/nouveau/vulkan/nvk_cmd_meta.c +++ b/src/nouveau/vulkan/nvk_cmd_meta.c @@ -44,7 +44,8 @@ nvk_device_init_meta(struct nvk_device *dev) if (result != VK_SUCCESS) return result; - dev->meta.use_gs_for_layer = pdev->info.cls_eng3d < MAXWELL_B, + dev->meta.use_gs_for_layer = pdev->info.cls_eng3d < MAXWELL_B; + dev->meta.use_rect_list_pipeline = true; dev->meta.cmd_bind_map_buffer = nvk_cmd_bind_map_buffer; dev->meta.max_bind_map_buffer_size_B = 64 * 1024; /* TODO */ diff --git a/src/panfrost/vulkan/panvk_vX_device.c b/src/panfrost/vulkan/panvk_vX_device.c index e3c99e25564..d747b25074a 100644 --- a/src/panfrost/vulkan/panvk_vX_device.c +++ b/src/panfrost/vulkan/panvk_vX_device.c @@ -133,6 +133,7 @@ panvk_meta_init(struct panvk_device *device) return result; device->meta.use_stencil_export = true; + device->meta.use_rect_list_pipeline = true; device->meta.max_bind_map_buffer_size_B = 64 * 1024; device->meta.cmd_bind_map_buffer = panvk_meta_cmd_bind_map_buffer; diff --git a/src/vulkan/runtime/vk_meta.c b/src/vulkan/runtime/vk_meta.c index 39830212232..33be9323f6e 100644 --- a/src/vulkan/runtime/vk_meta.c +++ b/src/vulkan/runtime/vk_meta.c @@ -457,8 +457,8 @@ vk_meta_create_graphics_pipeline(struct vk_device *device, } VkPipeline pipeline; - if (info_local.pInputAssemblyState->topology == - VK_PRIMITIVE_TOPOLOGY_META_RECT_LIST_MESA) { + if (meta->use_rect_list_pipeline && + info_local.pInputAssemblyState->topology == VK_PRIMITIVE_TOPOLOGY_META_RECT_LIST_MESA) { result = create_rect_list_pipeline(device, meta, &info_local, &pipeline); diff --git a/src/vulkan/runtime/vk_meta.h b/src/vulkan/runtime/vk_meta.h index c74090f55c9..3d261401013 100644 --- a/src/vulkan/runtime/vk_meta.h +++ b/src/vulkan/runtime/vk_meta.h @@ -109,6 +109,8 @@ struct vk_meta_device { bool use_gs_for_layer; bool use_stencil_export; + bool use_rect_list_pipeline; + struct { /* Optimal workgroup size for each possible chunk size. This should be * chosen to keep things cache-friendly (something big enough to maximize