Mesa (main): d3d12: Don't add arrayed VS outputs when next stage uses per-vertex inputs

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Feb 4 21:01:14 UTC 2022


Module: Mesa
Branch: main
Commit: ccaa79a1baeb7af87ae84e73a7e6e74bea2050a4
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=ccaa79a1baeb7af87ae84e73a7e6e74bea2050a4

Author: Jesse Natalie <jenatali at microsoft.com>
Date:   Fri Feb  4 09:49:29 2022 -0800

d3d12: Don't add arrayed VS outputs when next stage uses per-vertex inputs

Reviewed-by: Sil Vilerino <sivileri at microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14881>

---

 src/gallium/drivers/d3d12/d3d12_compiler.cpp | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/src/gallium/drivers/d3d12/d3d12_compiler.cpp b/src/gallium/drivers/d3d12/d3d12_compiler.cpp
index 754a1783310..20e18b1c50d 100644
--- a/src/gallium/drivers/d3d12/d3d12_compiler.cpp
+++ b/src/gallium/drivers/d3d12/d3d12_compiler.cpp
@@ -562,7 +562,15 @@ fill_varyings(struct d3d12_varying_info *info, nir_shader *s,
 
       if (!(mask & slot_bit))
          continue;
-      info->slots[slot].types[var->data.location_frac] = var->type;
+
+      const struct glsl_type *type = var->type;
+      if ((s->info.stage == MESA_SHADER_GEOMETRY ||
+           s->info.stage == MESA_SHADER_TESS_CTRL) &&
+          (modes & nir_var_shader_in) &&
+          glsl_type_is_array(type))
+         type = glsl_get_array_element(type);
+      info->slots[slot].types[var->data.location_frac] = type;
+
       info->slots[slot].patch = var->data.patch;
       auto& var_slot = info->slots[slot].vars[var->data.location_frac];
       var_slot.driver_location = var->data.driver_location;



More information about the mesa-commit mailing list