iris: Defer uploading sampler state tables until draw time
authorKenneth Graunke <kenneth@whitecape.org>
Tue, 4 Dec 2018 23:34:30 +0000 (15:34 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 7 Mar 2019 19:39:27 +0000 (11:39 -0800)
commitfbc51c4c956bb681c52e3163f73051303b24d8b8
tree91b2b743448da8c632c006f60344003fb0dad1bc
parent9caabd6c5f15e8c0e7ebe0147372d16750e2a20b
iris: Defer uploading sampler state tables until draw time

Gallium might call us multiple times to bind subsets of the samplers,
at which point we'd recreate the table a bunch of times.  It doesn't
really buy us anything to do it here - even if we defer to draw time,
the dirty tracking ensures we'll only do it on the first draw after a
bind_sampler_states() call.

We now use the number of samplers specified by the shader instead of
the binding count.  If this number changes, we flag sampler state as
dirty so we re-upload a table with the right number of entries.

This also fixes a bug where ice->state.need_border_colors was never
unset, so once something needed border colors, the pool would always
be pinned in all future batches.

v2: Explicitly flag sampler states as dirty, rather than assuming that
    bind_sampler_states() will be called if the program texture count
    changes.  While this may be true for st/mesa, it isn't the case for
    Gallium HUD.

Tested-by: Timur Kristóf <timur.kristof@gmail.com>
Tested-by: Andre Heider <a.heider@gmail.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/gallium/drivers/iris/iris_context.h
src/gallium/drivers/iris/iris_program.c
src/gallium/drivers/iris/iris_state.c