case nir_intrinsic_ssbo_atomic_exchange:
case nir_intrinsic_ssbo_atomic_comp_swap:
case nir_intrinsic_ssbo_atomic_fadd:
+ case nir_intrinsic_ssbo_atomic_fmin:
+ case nir_intrinsic_ssbo_atomic_fmax:
+ case nir_intrinsic_ssbo_atomic_fcomp_swap:
case nir_intrinsic_store_ssbo:
case nir_intrinsic_load_ssbo:
case nir_intrinsic_get_buffer_size:
new_instr->src[0] = nir_src_for_ssa(buffer);
nir_src_copy(&new_instr->src[1], &instr->src[0], new_instr);
nir_src_copy(&new_instr->src[2], &instr->src[1], new_instr);
- if (op == nir_intrinsic_ssbo_atomic_comp_swap)
+ if (op == nir_intrinsic_ssbo_atomic_comp_swap ||
+ op == nir_intrinsic_ssbo_atomic_fcomp_swap)
nir_src_copy(&new_instr->src[3], &instr->src[2], new_instr);
break;
}
+ if (new_instr->intrinsic == nir_intrinsic_load_ssbo ||
+ new_instr->intrinsic == nir_intrinsic_store_ssbo)
+ nir_intrinsic_set_align(new_instr, 4, 0);
+
nir_ssa_dest_init(&new_instr->instr, &new_instr->dest,
instr->dest.ssa.num_components,
instr->dest.ssa.bit_size, NULL);
char name[16];
/* A length of 0 is used to denote unsized arrays */
- const struct glsl_type *type = glsl_array_type(glsl_uint_type(), 0);
+ const struct glsl_type *type = glsl_array_type(glsl_uint_type(), 0, 0);
snprintf(name, sizeof(name), "counter%d", var->data.binding);
- ssbo = nir_variable_create(shader, nir_var_shader_storage,
- type, name);
+ ssbo = nir_variable_create(shader, nir_var_mem_ssbo, type, name);
ssbo->data.binding = var->data.binding;
struct glsl_struct_field field = {