|
|
@@ -1211,13 +1211,30 @@ emit_3dstate_streamout(struct anv_pipeline *pipeline, |
|
|
|
hole_dwords -= 4; |
|
|
|
} |
|
|
|
|
|
|
|
int varying = output->location; |
|
|
|
uint8_t component_mask = output->component_mask; |
|
|
|
/* VARYING_SLOT_PSIZ contains three scalar fields packed together: |
|
|
|
* - VARYING_SLOT_LAYER in VARYING_SLOT_PSIZ.y |
|
|
|
* - VARYING_SLOT_VIEWPORT in VARYING_SLOT_PSIZ.z |
|
|
|
* - VARYING_SLOT_PSIZ in VARYING_SLOT_PSIZ.w |
|
|
|
*/ |
|
|
|
if (varying == VARYING_SLOT_LAYER) { |
|
|
|
varying = VARYING_SLOT_PSIZ; |
|
|
|
component_mask = 1 << 1; // SO_DECL_COMPMASK_Y |
|
|
|
} else if (varying == VARYING_SLOT_VIEWPORT) { |
|
|
|
varying = VARYING_SLOT_PSIZ; |
|
|
|
component_mask = 1 << 2; // SO_DECL_COMPMASK_Z |
|
|
|
} else if (varying == VARYING_SLOT_PSIZ) { |
|
|
|
component_mask = 1 << 3; // SO_DECL_COMPMASK_W |
|
|
|
} |
|
|
|
|
|
|
|
next_offset[buffer] = output->offset + |
|
|
|
__builtin_popcount(output->component_mask) * 4; |
|
|
|
__builtin_popcount(component_mask) * 4; |
|
|
|
|
|
|
|
so_decl[stream][decls[stream]++] = (struct GENX(SO_DECL)) { |
|
|
|
.OutputBufferSlot = buffer, |
|
|
|
.RegisterIndex = vue_map->varying_to_slot[output->location], |
|
|
|
.ComponentMask = output->component_mask, |
|
|
|
.RegisterIndex = vue_map->varying_to_slot[varying], |
|
|
|
.ComponentMask = component_mask, |
|
|
|
}; |
|
|
|
} |
|
|
|
|