mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-06-10 03:28:18 +02:00
vulkan: Add a vk_hash_descriptor_heap_mappings() helper
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/40649>
This commit is contained in:
parent
e8558de16f
commit
978b9f6495
2 changed files with 153 additions and 0 deletions
|
|
@ -11,6 +11,154 @@
|
|||
#include "util/u_dynarray.h"
|
||||
#include "util/hash_table.h"
|
||||
|
||||
static void
|
||||
hash_embedded_sampler(struct mesa_blake3 *ctx,
|
||||
const struct VkSamplerCreateInfo *info)
|
||||
{
|
||||
if (info != NULL) {
|
||||
struct vk_sampler_state state;
|
||||
vk_sampler_state_init(&state, info);
|
||||
_mesa_blake3_update(ctx, &state, sizeof(state));
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
vk_hash_descriptor_heap_mappings(
|
||||
const VkShaderDescriptorSetAndBindingMappingInfoEXT *info,
|
||||
blake3_hash blake3_out)
|
||||
{
|
||||
struct mesa_blake3 ctx;
|
||||
_mesa_blake3_init(&ctx);
|
||||
|
||||
#define HASH(ctx, x) _mesa_blake3_update(ctx, &(x), sizeof(x))
|
||||
|
||||
for (uint32_t i = 0; i < info->mappingCount; i++) {
|
||||
const VkDescriptorSetAndBindingMappingEXT *mapping = &info->pMappings[i];
|
||||
HASH(&ctx, mapping->descriptorSet);
|
||||
HASH(&ctx, mapping->firstBinding);
|
||||
HASH(&ctx, mapping->bindingCount);
|
||||
HASH(&ctx, mapping->resourceMask);
|
||||
HASH(&ctx, mapping->source);
|
||||
switch (mapping->source) {
|
||||
case VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_CONSTANT_OFFSET_EXT: {
|
||||
const VkDescriptorMappingSourceConstantOffsetEXT *data =
|
||||
&mapping->sourceData.constantOffset;
|
||||
HASH(&ctx, data->heapOffset);
|
||||
HASH(&ctx, data->heapArrayStride);
|
||||
hash_embedded_sampler(&ctx, data->pEmbeddedSampler);
|
||||
HASH(&ctx, data->samplerHeapOffset);
|
||||
HASH(&ctx, data->samplerHeapArrayStride);
|
||||
break;
|
||||
}
|
||||
|
||||
case VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT: {
|
||||
const VkDescriptorMappingSourcePushIndexEXT *data =
|
||||
&mapping->sourceData.pushIndex;
|
||||
HASH(&ctx, data->heapOffset);
|
||||
HASH(&ctx, data->pushOffset);
|
||||
HASH(&ctx, data->heapIndexStride);
|
||||
HASH(&ctx, data->heapArrayStride);
|
||||
hash_embedded_sampler(&ctx, data->pEmbeddedSampler);
|
||||
HASH(&ctx, data->useCombinedImageSamplerIndex);
|
||||
HASH(&ctx, data->samplerHeapOffset);
|
||||
HASH(&ctx, data->samplerPushOffset);
|
||||
HASH(&ctx, data->samplerHeapIndexStride);
|
||||
HASH(&ctx, data->samplerHeapArrayStride);
|
||||
break;
|
||||
}
|
||||
|
||||
case VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT: {
|
||||
const VkDescriptorMappingSourceIndirectIndexEXT *data =
|
||||
&mapping->sourceData.indirectIndex;
|
||||
HASH(&ctx, data->heapOffset);
|
||||
HASH(&ctx, data->pushOffset);
|
||||
HASH(&ctx, data->addressOffset);
|
||||
HASH(&ctx, data->heapIndexStride);
|
||||
HASH(&ctx, data->heapArrayStride);
|
||||
hash_embedded_sampler(&ctx, data->pEmbeddedSampler);
|
||||
HASH(&ctx, data->useCombinedImageSamplerIndex);
|
||||
HASH(&ctx, data->samplerHeapOffset);
|
||||
HASH(&ctx, data->samplerPushOffset);
|
||||
HASH(&ctx, data->samplerAddressOffset);
|
||||
HASH(&ctx, data->samplerHeapIndexStride);
|
||||
HASH(&ctx, data->samplerHeapArrayStride);
|
||||
break;
|
||||
}
|
||||
|
||||
case VK_DESCRIPTOR_MAPPING_SOURCE_RESOURCE_HEAP_DATA_EXT: {
|
||||
const VkDescriptorMappingSourceHeapDataEXT *data =
|
||||
&mapping->sourceData.heapData;
|
||||
HASH(&ctx, data->heapOffset);
|
||||
HASH(&ctx, data->pushOffset);
|
||||
break;
|
||||
}
|
||||
|
||||
case VK_DESCRIPTOR_MAPPING_SOURCE_PUSH_DATA_EXT:
|
||||
HASH(&ctx, mapping->sourceData.pushDataOffset);
|
||||
break;
|
||||
|
||||
case VK_DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT:
|
||||
HASH(&ctx, mapping->sourceData.pushAddressOffset);
|
||||
break;
|
||||
|
||||
case VK_DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT: {
|
||||
const VkDescriptorMappingSourceIndirectAddressEXT *data =
|
||||
&mapping->sourceData.indirectAddress;
|
||||
HASH(&ctx, data->pushOffset);
|
||||
HASH(&ctx, data->addressOffset);
|
||||
break;
|
||||
}
|
||||
|
||||
case VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT: {
|
||||
const VkDescriptorMappingSourceIndirectIndexArrayEXT *data =
|
||||
&mapping->sourceData.indirectIndexArray;
|
||||
HASH(&ctx, data->heapOffset);
|
||||
HASH(&ctx, data->pushOffset);
|
||||
HASH(&ctx, data->addressOffset);
|
||||
HASH(&ctx, data->heapIndexStride);
|
||||
hash_embedded_sampler(&ctx, data->pEmbeddedSampler);
|
||||
HASH(&ctx, data->useCombinedImageSamplerIndex);
|
||||
HASH(&ctx, data->samplerHeapOffset);
|
||||
HASH(&ctx, data->samplerPushOffset);
|
||||
HASH(&ctx, data->samplerAddressOffset);
|
||||
HASH(&ctx, data->samplerHeapIndexStride);
|
||||
break;
|
||||
}
|
||||
|
||||
case VK_DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT: {
|
||||
const VkDescriptorMappingSourceShaderRecordIndexEXT *data =
|
||||
&mapping->sourceData.shaderRecordIndex;
|
||||
HASH(&ctx, data->heapOffset);
|
||||
HASH(&ctx, data->shaderRecordOffset);
|
||||
HASH(&ctx, data->heapIndexStride);
|
||||
HASH(&ctx, data->heapArrayStride);
|
||||
hash_embedded_sampler(&ctx, data->pEmbeddedSampler);
|
||||
HASH(&ctx, data->useCombinedImageSamplerIndex);
|
||||
HASH(&ctx, data->samplerHeapOffset);
|
||||
HASH(&ctx, data->samplerShaderRecordOffset);
|
||||
HASH(&ctx, data->samplerHeapIndexStride);
|
||||
HASH(&ctx, data->samplerHeapArrayStride);
|
||||
break;
|
||||
}
|
||||
|
||||
case VK_DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_DATA_EXT:
|
||||
HASH(&ctx, mapping->sourceData.shaderRecordDataOffset);
|
||||
break;
|
||||
|
||||
case VK_DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT:
|
||||
HASH(&ctx, mapping->sourceData.shaderRecordAddressOffset);
|
||||
break;
|
||||
|
||||
default:
|
||||
UNREACHABLE("Unsupported descriptor mapping source");
|
||||
}
|
||||
}
|
||||
|
||||
_mesa_blake3_final(&ctx, blake3_out);
|
||||
}
|
||||
|
||||
#undef HASH
|
||||
|
||||
struct heap_mapping_ctx {
|
||||
const VkShaderDescriptorSetAndBindingMappingInfoEXT *info;
|
||||
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@
|
|||
|
||||
#include "nir.h"
|
||||
#include <vulkan/vulkan_core.h>
|
||||
#include "util/mesa-blake3.h"
|
||||
|
||||
static inline const VkDescriptorSetAndBindingMappingEXT *
|
||||
vk_descriptor_heap_mapping(const VkShaderDescriptorSetAndBindingMappingInfoEXT *info,
|
||||
|
|
@ -51,6 +52,10 @@ vk_descriptor_heap_embedded_sampler(const VkDescriptorSetAndBindingMappingEXT *m
|
|||
}
|
||||
}
|
||||
|
||||
void vk_hash_descriptor_heap_mappings(
|
||||
const VkShaderDescriptorSetAndBindingMappingInfoEXT *info,
|
||||
blake3_hash blake3_out);
|
||||
|
||||
nir_def *
|
||||
vk_build_descriptor_heap_address(nir_builder *b,
|
||||
const VkDescriptorSetAndBindingMappingEXT *mapping,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue