diff --git a/src/mesa/state_tracker/st_pbo.c b/src/mesa/state_tracker/st_pbo.c index 3edd6a5c182..ac3eaebdc9a 100644 --- a/src/mesa/state_tracker/st_pbo.c +++ b/src/mesa/state_tracker/st_pbo.c @@ -531,24 +531,21 @@ create_fs(struct st_context *st, bool download, result = nir_umin(&b, result, nir_imm_int(&b, (1u << 31) - 1)); if (download) { - static const enum glsl_base_type type[] = { + static const enum glsl_base_type types[] = { [ST_PBO_CONVERT_FLOAT] = GLSL_TYPE_FLOAT, [ST_PBO_CONVERT_UINT] = GLSL_TYPE_UINT, [ST_PBO_CONVERT_UINT_TO_SINT] = GLSL_TYPE_INT, [ST_PBO_CONVERT_SINT] = GLSL_TYPE_INT, [ST_PBO_CONVERT_SINT_TO_UINT] = GLSL_TYPE_UINT, }; - static const nir_alu_type nir_types[] = { - [ST_PBO_CONVERT_FLOAT] = nir_type_float, - [ST_PBO_CONVERT_UINT] = nir_type_uint, - [ST_PBO_CONVERT_UINT_TO_SINT] = nir_type_int, - [ST_PBO_CONVERT_SINT] = nir_type_int, - [ST_PBO_CONVERT_SINT_TO_UINT] = nir_type_uint, - }; + + enum glsl_base_type glsl_type = types[conversion]; + nir_alu_type nir_type = nir_get_nir_type_for_glsl_base_type(glsl_type); + nir_variable *img_var = nir_variable_create(b.shader, nir_var_image, glsl_image_type(GLSL_SAMPLER_DIM_BUF, false, - type[conversion]), "img"); + glsl_type), "img"); img_var->data.access = ACCESS_NON_READABLE; img_var->data.explicit_binding = true; img_var->data.binding = 0; @@ -560,7 +557,7 @@ create_fs(struct st_context *st, bool download, zero, result, nir_imm_int(&b, 0), - .src_type = nir_types[conversion], + .src_type = nir_type, .image_dim = GLSL_SAMPLER_DIM_BUF); } else { nir_store_output(&b, result, nir_imm_int(&b, 0),