mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-03-06 10:00:30 +01:00
i965/vec4: take into account doubles when creating attribute mapping
Doubles needs more that one slot per attribute. So when filling the attribute_map we check if it is a double in order to allocate one extra register. Signed-off-by: Alejandro Piñeiro <apinheiro@igalia.com> Signed-off-by: Juan A. Suarez Romero <jasuarez@igalia.com> Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
This commit is contained in:
parent
57bab6708f
commit
58fdb85f0f
1 changed files with 9 additions and 4 deletions
|
|
@ -1733,10 +1733,15 @@ vec4_vs_visitor::setup_attributes(int payload_reg)
|
|||
memset(attribute_map, 0, sizeof(attribute_map));
|
||||
|
||||
nr_attributes = 0;
|
||||
for (int i = 0; i < VERT_ATTRIB_MAX; i++) {
|
||||
if (vs_prog_data->inputs_read & BITFIELD64_BIT(i)) {
|
||||
attribute_map[i] = payload_reg + nr_attributes;
|
||||
nr_attributes++;
|
||||
GLbitfield64 vs_inputs = vs_prog_data->inputs_read;
|
||||
while (vs_inputs) {
|
||||
GLuint first = ffsll(vs_inputs) - 1;
|
||||
int needed_slots =
|
||||
(vs_prog_data->double_inputs_read & BITFIELD64_BIT(first)) ? 2 : 1;
|
||||
for (int c = 0; c < needed_slots; c++) {
|
||||
attribute_map[nr_attributes] = payload_reg + nr_attributes;
|
||||
nr_attributes++;
|
||||
vs_inputs &= ~BITFIELD64_BIT(first + c);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue