From: Mike Blumenkrantz Date: Thu, 22 Sep 2022 19:33:48 +0000 (-0400) Subject: zink: handle culldistance xfb outputs like clipdistance X-Git-Tag: upstream/22.3.5~2503 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=21ba47c821454dc53be60fb4da2ec58cdb28b53c;p=platform%2Fupstream%2Fmesa.git zink: handle culldistance xfb outputs like clipdistance fixes: spec@ext_transform_feedback@builtin-varyings gl_culldistance cc: mesa-stable Reviewed-by: Adam Jackson Part-of: --- diff --git a/src/gallium/drivers/zink/ci/zink-lvp-fails.txt b/src/gallium/drivers/zink/ci/zink-lvp-fails.txt index 30e473e..7f173e9 100644 --- a/src/gallium/drivers/zink/ci/zink-lvp-fails.txt +++ b/src/gallium/drivers/zink/ci/zink-lvp-fails.txt @@ -347,6 +347,3 @@ spec@glsl-4.00@execution@conversion@vert-conversion-explicit-dvec2-vec2,Fail spec@glsl-4.00@execution@conversion@vert-conversion-explicit-dvec3-vec3,Fail spec@glsl-4.00@execution@conversion@vert-conversion-explicit-dvec4-vec4,Fail spec@glsl-4.50@execution@ssbo-atomiccompswap-int,Fail - -# https://gitlab.freedesktop.org/mesa/mesa/-/issues/7152 -spec@ext_transform_feedback@builtin-varyings gl_culldistance,Fail 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 f7ceff7..31843ea 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 @@ -1657,7 +1657,7 @@ emit_so_outputs(struct ntv_context *ctx, for (unsigned c = 0; c < so_output.num_components; c++) { components[c] = so_output.start_component + c; /* this is the second half of a 2 * vec4 array */ - if (slot == VARYING_SLOT_CLIP_DIST1) + if (slot == VARYING_SLOT_CLIP_DIST1 || slot == VARYING_SLOT_CULL_DIST1) components[c] += 4; } /* OpVectorShuffle can select vector members into a differently-sized vector */ @@ -1688,7 +1688,7 @@ emit_so_outputs(struct ntv_context *ctx, uint32_t member = so_output.start_component + c; SpvId base_type = get_glsl_basetype(ctx, glsl_get_base_type(bare_type)); - if (slot == VARYING_SLOT_CLIP_DIST1) + if (slot == VARYING_SLOT_CLIP_DIST1 || slot == VARYING_SLOT_CULL_DIST1) member += 4; components[idx] = spirv_builder_emit_composite_extract(&ctx->builder, base_type, src, &member, 1); if (glsl_type_is_64bit(bare_type)) {