spirv: Use nir_const_value for spec constants
When we originally wrote spirv_to_nir we didn't have a good scalar value union to handily use so we rolled our own thing for spec constants. Now that we have nir_const_value, we can use that and simplify a bunch of the spec constant logic. Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com> Acked-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4675>
This commit is contained in:

committed by
Marge Bot

parent
6211e79ba5
commit
f4addfdde3
@@ -320,7 +320,7 @@ radv_shader_compile_to_nir(struct radv_device *device,
|
||||
struct nir_spirv_specialization *spec_entries = NULL;
|
||||
if (spec_info && spec_info->mapEntryCount > 0) {
|
||||
num_spec_entries = spec_info->mapEntryCount;
|
||||
spec_entries = malloc(num_spec_entries * sizeof(*spec_entries));
|
||||
spec_entries = calloc(num_spec_entries, sizeof(*spec_entries));
|
||||
for (uint32_t i = 0; i < num_spec_entries; i++) {
|
||||
VkSpecializationMapEntry entry = spec_info->pMapEntries[i];
|
||||
const void *data = spec_info->pData + entry.offset;
|
||||
@@ -329,16 +329,16 @@ radv_shader_compile_to_nir(struct radv_device *device,
|
||||
spec_entries[i].id = spec_info->pMapEntries[i].constantID;
|
||||
switch (entry.size) {
|
||||
case 8:
|
||||
spec_entries[i].data64 = *(const uint64_t *)data;
|
||||
spec_entries[i].value.u64 = *(const uint64_t *)data;
|
||||
break;
|
||||
case 4:
|
||||
spec_entries[i].data32 = *(const uint32_t *)data;
|
||||
spec_entries[i].value.u32 = *(const uint32_t *)data;
|
||||
break;
|
||||
case 2:
|
||||
spec_entries[i].data32 = *(const uint16_t *)data;
|
||||
spec_entries[i].value.u16 = *(const uint16_t *)data;
|
||||
break;
|
||||
case 1:
|
||||
spec_entries[i].data32 = *(const uint8_t *)data;
|
||||
spec_entries[i].value.u8 = *(const uint8_t *)data;
|
||||
break;
|
||||
default:
|
||||
assert(!"Invalid spec constant size");
|
||||
|
Reference in New Issue
Block a user