asahi,agx: Rewrite varying linking
Instead of using driver_location magic and hoping things work, make the linkage between vertex and fragment shaders explicit. Thanks to the coefficient register mechanism reverse-engineered and documented earlier in this series, this does not require any shader keys to support separable shaders. It just requires that we regenerate the coefficient register binding tables at draw time, based on the varying layouts decided by the compiler independently for the VS and FS. This is more robust in the face of separate shaders. This also gets us glProvokingVertex() support without shader keys. After that, we don't need any of the remapping prepasses. For fragment shaders, any old mapping will do, so we can assign coefficient registers as we go (based on what the program actually uses, not nir_variable information that might be stale by this point). We do want to cache coefficient registers, particularly for fragcoord.w which is used for perspective interpolation everywhere. Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17198>
This commit is contained in:
@@ -375,9 +375,6 @@ typedef struct {
|
||||
struct agx_shader_info *out;
|
||||
struct agx_shader_key *key;
|
||||
|
||||
/* Remapping table for varyings indexed by driver_location */
|
||||
unsigned varyings[AGX_MAX_VARYINGS];
|
||||
|
||||
/* Place to start pushing new values */
|
||||
unsigned push_base;
|
||||
|
||||
|
Reference in New Issue
Block a user