Mesa (master): zink: fix streamout emission for super-enhanced layouts
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue Mar 9 03:01:22 UTC 2021
Module: Mesa
Branch: master
Commit: 1b25e3a7019ca529c2ab665a35e06f21ec4b4ebb
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=1b25e3a7019ca529c2ab665a35e06f21ec4b4ebb
Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date: Tue Feb 23 11:27:20 2021 -0500
zink: fix streamout emission for super-enhanced layouts
if we get some crazy matrix types in here then we need to ensure that
we accurately unwrap them and copy the components
fixes KHR-GL46.enhanced_layouts.xfb_stride
Fixes: 1b130c42b8d ("zink: implement streamout and xfb handling in ntv")
Reviewed-by: Dave Airlie <airlied at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9271>
---
src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c
index 52789ae6f0f..f73c4a7ee0a 100644
--- a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c
+++ b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c
@@ -1343,12 +1343,18 @@ emit_so_outputs(struct ntv_context *ctx,
* and re-pack them into the desired output type
*/
for (unsigned c = 0; c < so_output.num_components; c++) {
- uint32_t member[] = { so_output.start_component + c };
- SpvId base_type = get_glsl_type(ctx, glsl_without_array(out_type));
+ uint32_t member[2];
+ unsigned member_idx = 0;
+ if (glsl_type_is_matrix(out_type)) {
+ member_idx = 1;
+ member[0] = so_output.register_index;
+ }
+ member[member_idx] = so_output.start_component + c;
+ SpvId base_type = get_glsl_basetype(ctx, glsl_get_base_type(glsl_without_array_or_matrix(out_type)));
if (slot == VARYING_SLOT_CLIP_DIST1)
- member[0] += 4;
- components[c] = spirv_builder_emit_composite_extract(&ctx->builder, base_type, src, member, 1);
+ member[member_idx] += 4;
+ components[c] = spirv_builder_emit_composite_extract(&ctx->builder, base_type, src, member, 1 + member_idx);
}
result = spirv_builder_emit_composite_construct(&ctx->builder, type, components, so_output.num_components);
}
More information about the mesa-commit
mailing list