radeonsi: Reinitialize all descriptors in CE preamble.
authorBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Mon, 6 Jun 2016 20:36:35 +0000 (22:36 +0200)
committerBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Fri, 10 Jun 2016 10:18:29 +0000 (12:18 +0200)
commit54f755fa0fda14c578022767bcef2f27b2e89707
tree3d923c25cd64d24f7965e550009c37d97a5f63a7
parentf93c22109e281ee927c3bb349b94a43fd47ed9ad
radeonsi: Reinitialize all descriptors in CE preamble.

This fixes a problem with the CE preamble and restoring only stuff in the
preamble when needed.

To illustrate suppose we have two graphics IB's 1 and 2, which  are submitted in
that order. Furthermore suppose IB 1 does not use CE ram, but IB 2 does, and we
have a context switch at the start of IB 1, but not between IB 1 and IB 2.

The old code put the CE RAM loads in the preamble of IB 2. As the preamble of
IB 1 does not have the loads and the preamble of IB 2 does not get executed, the
old values are not load into CE RAM.

Fix this by always restoring the entire CE RAM.

v2: - Just load all descriptor set buffers instead of load and store the entire
      CE RAM.
    - Leave the ce_ram_dirty tracking in place for the non-preamble case.

v3: - Fixed parameter alignment.
    - Rebased to master (Nicolai's descriptor series).

Signed-off-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
src/gallium/drivers/radeonsi/si_descriptors.c
src/gallium/drivers/radeonsi/si_hw_context.c
src/gallium/drivers/radeonsi/si_state.h