iris: Maintain CPU-side SURFACE_STATE copies for views and surfaces.
authorKenneth Graunke <kenneth@whitecape.org>
Fri, 15 Nov 2019 01:17:43 +0000 (17:17 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Mon, 25 Nov 2019 23:54:54 +0000 (15:54 -0800)
commit060a2c52fa1d6eb750964aa4bc75680d03911b26
tree7c9147eae38659c0952c3a0625384fbed9948b24
parent2b09e818dc25a6b8ce583f69b90ccf735fd278dd
iris: Maintain CPU-side SURFACE_STATE copies for views and surfaces.

When replacing the backing storage for texture buffers, image buffers,
and so on, we may need to update the "Surface Base Address" field in
any corresponding SURFACE_STATE.  This is easier to accomplish if we
have a copy on the CPU - we can just compare the current field, update
it, and re-upload.

This patch adds a CPU-side copy to the new iris_surface_state wrapper
struct, and reworks allocation and upload to fill things out on the
CPU copy first, then upload that to the GPU when finished.

This will be necessary to fix iris_invalidate_resource bugs shortly.

Technically, we never replace the backing storage for pipe_surfaces
(render targets), so we don't need to make this change there.  However,
it's nice to have surfaces, sampler views, and image views handled
similarly.  Plus, if we ever wanted to swap out backing storage for
busy textures, we'd need this infrastructure.

v2: Properly free memory (caught by Andrii Simiklit)
src/gallium/drivers/iris/iris_resource.h
src/gallium/drivers/iris/iris_state.c