diff options
author | Jason Ekstrand <jason@jlekstrand.net> | 2020-01-22 14:26:24 -0600 |
---|---|---|
committer | Marge Bot <eric+marge@anholt.net> | 2020-01-27 20:26:23 +0000 |
commit | 993f866d2e31c06462b49d760debf64d14e54a68 (patch) | |
tree | 651883f3c7ba7434f588c5a47740fda744f8328e /src/intel/vulkan/genX_pipeline.c | |
parent | 68b3bfaa42475879dd6229bfcdb763c3382289e9 (diff) |
anv: Insert holes for non-existant XFB varyings
Thanks to optimizations, it's possible for varyings to get deleted but
still leave the variable there for nir_gather_xfb_info to find. If we
get into this case, insert a hole.
Fixes: 36ee2fd61c8 "anv: Implement the basic form of..."
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3520>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3520>
Diffstat (limited to 'src/intel/vulkan/genX_pipeline.c')
-rw-r--r-- | src/intel/vulkan/genX_pipeline.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/src/intel/vulkan/genX_pipeline.c b/src/intel/vulkan/genX_pipeline.c index 4dda92202d7..0426acaf2b2 100644 --- a/src/intel/vulkan/genX_pipeline.c +++ b/src/intel/vulkan/genX_pipeline.c @@ -1408,11 +1408,23 @@ emit_3dstate_streamout(struct anv_pipeline *pipeline, next_offset[buffer] = output->offset + __builtin_popcount(component_mask) * 4; - so_decl[stream][decls[stream]++] = (struct GENX(SO_DECL)) { - .OutputBufferSlot = buffer, - .RegisterIndex = vue_map->varying_to_slot[varying], - .ComponentMask = component_mask, - }; + const int slot = vue_map->varying_to_slot[varying]; + if (slot < 0) { + /* This can happen if the shader never writes to the varying. + * Insert a hole instead of actual varying data. + */ + so_decl[stream][decls[stream]++] = (struct GENX(SO_DECL)) { + .HoleFlag = true, + .OutputBufferSlot = buffer, + .ComponentMask = component_mask, + }; + } else { + so_decl[stream][decls[stream]++] = (struct GENX(SO_DECL)) { + .OutputBufferSlot = buffer, + .RegisterIndex = slot, + .ComponentMask = component_mask, + }; + } } int max_decls = 0; |