anv: fix push descriptor deferred surface state packing
Yuzu is running into a segfault because it writes the push descriptor twice with 2 different layouts, but without a draw/dispatch in between.
First vkCmdPushDescriptorSetKHR() writes descriptor 0 & 1 with a uniform buffer. We toggle the 2 first bits of anv_descriptor_set::generate_surface_states.
Second vkCmdPushDescriptorSetKHR() writes descriptor 0 with uniform buffer and descriptor 1 with an image view. The first bit of anv_descriptor_set::generate_surface_states stays, but the second bit was already set before and it should now be off.
When we finally flush the push descriptor, we try to generate a surface state for descriptor 1, but there is no valid buffer view for it, we access an invalid pointer and segfault.
This fix resets the anv_descriptor_set::generate_surface_states when the descriptor layout changes.
Signed-off-by: Lionel Landwerlin lionel.g.landwerlin@intel.com Fixes: b49b18f0 ("anv: reduce BT emissions & surface state writes with push descriptors")