{
Builder bld(ctx->program, ctx->block);
- /* base is the driver_location, which is already multiplied by 4, so is in dwords */
- unsigned const_offset = nir_intrinsic_base(instr) * base_stride;
+ /* base is the driver_location, which is in slots */
+ unsigned const_offset = nir_intrinsic_base(instr) * 4u * base_stride;
/* component is in bytes */
const_offset += nir_intrinsic_component(instr) * component_stride;
{
unsigned write_mask = nir_intrinsic_write_mask(instr);
unsigned component = nir_intrinsic_component(instr);
- unsigned idx = nir_intrinsic_base(instr) + component;
+ unsigned idx = nir_intrinsic_base(instr) * 4u + component;
if (!nir_src_is_const(instr->src[1]))
return false;
if (!can_use_temps)
return false;
- unsigned idx = nir_intrinsic_base(instr) + nir_intrinsic_component(instr) + 4 * nir_src_as_uint(*off_src);
+ unsigned idx = nir_intrinsic_base(instr) * 4u + nir_intrinsic_component(instr) + 4 * nir_src_as_uint(*off_src);
Temp *src = &ctx->inputs.temps[idx];
create_vec_from_array(ctx, src, dst.size(), dst.regClass().type(), 4u, 0, dst);
if (write_to_lds) {
/* Remember driver location of tess factors, so we can read them later, in write_tcs_tess_factors */
if (semantics.location == VARYING_SLOT_TESS_LEVEL_INNER)
- ctx->tcs_tess_lvl_in_loc = nir_intrinsic_base(instr) * 4;
+ ctx->tcs_tess_lvl_in_loc = nir_intrinsic_base(instr) * 16u;
else if (semantics.location == VARYING_SLOT_TESS_LEVEL_OUTER)
- ctx->tcs_tess_lvl_out_loc = nir_intrinsic_base(instr) * 4;
+ ctx->tcs_tess_lvl_out_loc = nir_intrinsic_base(instr) * 16u;
std::pair<Temp, unsigned> lds_offs = get_tcs_output_lds_offset(ctx, instr, per_vertex);
unsigned lds_align = calculate_lds_alignment(ctx, lds_offs.second);
Temp vertex_buffers = convert_pointer_to_64_bit(ctx, get_arg(ctx, ctx->args->vertex_buffers));
- unsigned location = nir_intrinsic_base(instr) / 4 - VERT_ATTRIB_GENERIC0 + offset;
+ unsigned location = nir_intrinsic_base(instr) - VERT_ATTRIB_GENERIC0 + offset;
unsigned component = nir_intrinsic_component(instr);
unsigned bitsize = instr->dest.ssa.bit_size;
unsigned attrib_binding = ctx->options->key.vs.vertex_attribute_bindings[location];
{
nir_foreach_shader_in_variable(variable, nir)
{
- variable->data.driver_location = variable->data.location * 4;
+ variable->data.driver_location = variable->data.location;
}
nir_foreach_shader_out_variable(variable, nir)
{
if (ctx->stage == vertex_vs || ctx->stage == ngg_vertex_gs)
- variable->data.driver_location = variable->data.location * 4;
+ variable->data.driver_location = variable->data.location;
}
if (ctx->stage == vertex_vs || ctx->stage == ngg_vertex_gs) {
ctx->program->config->lds_size = ctx->program->info->gs_ring_info.lds_size; /* Already in units of the alloc granularity */
nir_foreach_shader_out_variable(variable, nir) {
- variable->data.driver_location = variable->data.location * 4;
+ variable->data.driver_location = variable->data.location;
}
if (ctx->stage == vertex_geometry_gs)
nir_foreach_shader_out_variable(variable, nir) {
if (ctx->stage == tess_eval_vs || ctx->stage == ngg_tess_eval_gs)
- variable->data.driver_location = variable->data.location * 4;
+ variable->data.driver_location = variable->data.location;
}
if (ctx->stage == tess_eval_vs || ctx->stage == ngg_tess_eval_gs) {
nir_foreach_shader_out_variable(variable, nir)
{
int idx = variable->data.location + variable->data.index;
- variable->data.driver_location = idx * 4;
+ variable->data.driver_location = idx;
}
break;
}
uint64_t loc = get_linked_variable_location(variable->data.location, variable->data.patch);
if (variable->data.patch)
- variable->data.driver_location = util_bitcount64(patch_io_mask & u_bit_consecutive64(0, loc)) * 4;
+ variable->data.driver_location = util_bitcount64(patch_io_mask & u_bit_consecutive64(0, loc));
else
- variable->data.driver_location = util_bitcount64(io_mask & u_bit_consecutive64(0, loc)) * 4;
+ variable->data.driver_location = util_bitcount64(io_mask & u_bit_consecutive64(0, loc));
}
nir_foreach_shader_in_variable(variable, consumer) {
uint64_t loc = get_linked_variable_location(variable->data.location, variable->data.patch);
if (variable->data.patch)
- variable->data.driver_location = util_bitcount64(patch_io_mask & u_bit_consecutive64(0, loc)) * 4;
+ variable->data.driver_location = util_bitcount64(patch_io_mask & u_bit_consecutive64(0, loc));
else
- variable->data.driver_location = util_bitcount64(io_mask & u_bit_consecutive64(0, loc)) * 4;
+ variable->data.driver_location = util_bitcount64(io_mask & u_bit_consecutive64(0, loc));
}
nir_linked_io_var_info result = {