diff --git a/.pick_status.json b/.pick_status.json index 34dbdb5235f..0a68b1b0169 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -1759,7 +1759,7 @@ "description": "zink: use 64bit mask for xfb analysis", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null }, @@ -1912,7 +1912,7 @@ "description": "zink: fix 64bit float shader ops", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null }, diff --git a/src/gallium/drivers/zink/zink_compiler.c b/src/gallium/drivers/zink/zink_compiler.c index 7caeded9008..3134a19d251 100644 --- a/src/gallium/drivers/zink/zink_compiler.c +++ b/src/gallium/drivers/zink/zink_compiler.c @@ -597,7 +597,7 @@ update_so_info(struct zink_shader *zs, const struct pipe_stream_output_info *so_ var->data.explicit_xfb_buffer = 0; bool inlined[VARYING_SLOT_MAX][4] = {0}; - uint32_t packed = 0; + uint64_t packed = 0; uint8_t packed_components[VARYING_SLOT_MAX] = {0}; uint8_t packed_streams[VARYING_SLOT_MAX] = {0}; uint8_t packed_buffers[VARYING_SLOT_MAX] = {0}; @@ -626,7 +626,7 @@ update_so_info(struct zink_shader *zs, const struct pipe_stream_output_info *so_ inlined[slot][output->start_component + j] = true; } else { /* otherwise store some metadata for later */ - packed |= BITFIELD_BIT(slot); + packed |= BITFIELD64_BIT(slot); packed_components[slot]++; packed_streams[slot] |= BITFIELD_BIT(output->stream); packed_buffers[slot] |= BITFIELD_BIT(output->output_buffer); @@ -650,7 +650,7 @@ update_so_info(struct zink_shader *zs, const struct pipe_stream_output_info *so_ * being output with the same stream on the same buffer, this entire variable * can be consolidated into a single output to conserve locations */ - if (packed & BITFIELD_BIT(slot) && + if (packed & BITFIELD64_BIT(slot) && glsl_get_components(var->type) == packed_components[slot] && util_bitcount(packed_streams[slot]) == 1 && util_bitcount(packed_buffers[slot]) == 1) { @@ -672,7 +672,7 @@ update_so_info(struct zink_shader *zs, const struct pipe_stream_output_info *so_ var->data.stream = output->stream; for (unsigned j = 0; j < packed_components[slot]; j++) inlined[slot][j] = true; - packed &= ~BITFIELD_BIT(slot); + packed &= ~BITFIELD64_BIT(slot); continue; } }