From: Jason Ekstrand Date: Wed, 22 Apr 2020 18:43:51 +0000 (-0500) Subject: turnip: Properly handle all sizes of specialization constants X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=6211e79ba5f4be57c088fdf6140854f67c9a37ec;p=mesa.git turnip: Properly handle all sizes of specialization constants cc: mesa-stable@lists.freedesktop.org Reviewed-by: Caio Marcelo de Oliveira Filho Part-of: --- diff --git a/src/freedreno/vulkan/tu_shader.c b/src/freedreno/vulkan/tu_shader.c index d58209c404c..3c674156afe 100644 --- a/src/freedreno/vulkan/tu_shader.c +++ b/src/freedreno/vulkan/tu_shader.c @@ -62,10 +62,23 @@ tu_spirv_to_nir(struct ir3_compiler *compiler, const void *data = spec_info->pData + entry->offset; assert(data + entry->size <= spec_info->pData + spec_info->dataSize); spec[i].id = entry->constantID; - if (entry->size == 8) - spec[i].data64 = *(const uint64_t *) data; - else - spec[i].data32 = *(const uint32_t *) data; + switch (entry->size) { + case 8: + spec[i].data64 = *(const uint64_t *)data; + break; + case 4: + spec[i].data32 = *(const uint32_t *)data; + break; + case 2: + spec[i].data32 = *(const uint16_t *)data; + break; + case 1: + spec[i].data32 = *(const uint8_t *)data; + break; + default: + assert(!"Invalid spec constant size"); + break; + } spec[i].defined_on_module = false; }