From 6211e79ba5f4be57c088fdf6140854f67c9a37ec Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Wed, 22 Apr 2020 13:43:51 -0500 Subject: [PATCH] turnip: Properly handle all sizes of specialization constants cc: mesa-stable@lists.freedesktop.org Reviewed-by: Caio Marcelo de Oliveira Filho Part-of: --- src/freedreno/vulkan/tu_shader.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) 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; } -- 2.30.2