vulkan/pipeline: Handle VIEW_INDEX_FROM_DEVICE_INDEX_BIT

The rehash we're doing here is a bit of a hack but it's a back-portable
hack.  We'll fix it properly in following commits.

Fixes: 9308e8d90d ("vulkan: Add generic graphics and compute VkPipeline implementations")
Reviewed-by: Ivan Briano <ivan.briano@intel.com>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30876>
This commit is contained in:
Faith Ekstrand
2024-08-26 17:28:44 -05:00
committed by Marge Bot
parent 03655dfda1
commit c0191b20de
+13
View File
@@ -820,6 +820,16 @@ vk_pipeline_precompile_shader(struct vk_device *device,
uint8_t stage_sha1[SHA1_DIGEST_LENGTH];
vk_pipeline_hash_shader_stage(info, &rs, stage_sha1);
/* This bit affects shader compilation but isn't taken into account in
* vk_pipeline_hash_shader_stage(). Re-hash the SHA1 if it's set.
*/
if (pipeline_flags & VK_PIPELINE_CREATE_2_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR) {
struct mesa_sha1 ctx;
_mesa_sha1_init(&ctx);
_mesa_sha1_update(&ctx, stage_sha1, sizeof(stage_sha1));
_mesa_sha1_final(&ctx, stage_sha1);
}
if (cache != NULL) {
struct vk_pipeline_cache_object *cache_obj =
vk_pipeline_cache_lookup_object(cache, stage_sha1, sizeof(stage_sha1),
@@ -847,6 +857,9 @@ vk_pipeline_precompile_shader(struct vk_device *device,
if (result != VK_SUCCESS)
return result;
if (pipeline_flags & VK_PIPELINE_CREATE_2_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR)
NIR_PASS(_, nir, nir_lower_view_index_to_device_index);
if (ops->preprocess_nir != NULL)
ops->preprocess_nir(device->physical, nir);