radv/rt: Clone specialization infos

Reviewed-by: Tatsuyuki Ishi <ishitatsuyuki@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19700>
This commit is contained in:
Konstantin Seurer
2022-11-12 19:25:34 +01:00
committed by Marge Bot
parent 39628c8999
commit 57b2211cf0

View File

@@ -166,6 +166,28 @@ radv_rt_pipeline_library_create(VkDevice _device, VkPipelineCache _cache,
new_module->size = module->size;
memcpy(new_module->data, module->data, module->size);
const VkSpecializationInfo *spec = pipeline->stages[i].pSpecializationInfo;
if (spec) {
VkSpecializationInfo *new_spec = ralloc(pipeline->ctx, VkSpecializationInfo);
if (!new_spec)
goto fail;
new_spec->mapEntryCount = spec->mapEntryCount;
uint32_t map_entries_size = sizeof(VkSpecializationMapEntry) * spec->mapEntryCount;
new_spec->pMapEntries = ralloc_size(pipeline->ctx, map_entries_size);
if (!new_spec->pMapEntries)
goto fail;
memcpy((void *)new_spec->pMapEntries, spec->pMapEntries, map_entries_size);
new_spec->dataSize = spec->dataSize;
new_spec->pData = ralloc_size(pipeline->ctx, spec->dataSize);
if (!new_spec->pData)
goto fail;
memcpy((void *)new_spec->pData, spec->pData, spec->dataSize);
pipeline->stages[i].pSpecializationInfo = new_spec;
}
pipeline->stages[i].module = vk_shader_module_to_handle(new_module);
pipeline->stages[i].pName = ralloc_strdup(pipeline->ctx, pipeline->stages[i].pName);
if (!pipeline->stages[i].pName)