summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2020-02-26 07:03:33 +1000
committerEric Engestrom <eric@engestrom.ch>2020-03-06 22:59:20 +0100
commite3e2ceb25a410b1e6b47ae191d4c2e4ccb3151c4 (patch)
tree67db47e7b883babe116c0e3e4ce89ac2ccdd9906
parent5a3fbe98cc50faede3480ddf54ea6d0e2f517de9 (diff)
downloadmesa-e3e2ceb25a410b1e6b47ae191d4c2e4ccb3151c4.tar.gz
gallivm/tgsi: fix stream id regression
This broke TGSI GS shaders with llvmpipe, it wasn't looking at the right immediates and it should be cast to an integer type. Fixes: 163d5fde0669 (gallium/swr: Enable GL_ARB_gpu_shader5: multiple streams) Reviewed-by: Krzysztof Raszkowski <krzysztof.raszkowski@intel.com> Acked-by: Jan Zielinski <jan.zielinski@intel.com> Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3949> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3949> (cherry picked from commit 954cf8e86b6e0d52c04098604d2daa4305bf6f70)
-rw-r--r--.pick_status.json2
-rw-r--r--src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c7
2 files changed, 6 insertions, 3 deletions
diff --git a/.pick_status.json b/.pick_status.json
index 3bf3e8225ee..6435ad9c090 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -3325,7 +3325,7 @@
"description": "gallivm/tgsi: fix stream id regression",
"nominated": true,
"nomination_type": 1,
- "resolution": 0,
+ "resolution": 1,
"master_sha": null,
"because_sha": "163d5fde06696fed2e69e000a7621087c1636749"
},
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
index 5a67f834c90..ac6992abb4b 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
@@ -3978,11 +3978,14 @@ emit_vertex(
LLVMBuilderRef builder = bld->bld_base.base.gallivm->builder;
if (bld->gs_iface->emit_vertex) {
- uint32_t imms_idx = emit_data->inst->Src[0].Register.SwizzleX;
- LLVMValueRef stream_id = bld->immediates[0][imms_idx];
+ uint32_t stream_reg_idx = emit_data->inst->Src[0].Register.Index;
+ uint32_t stream_reg_swiz = emit_data->inst->Src[0].Register.SwizzleX;
+ LLVMValueRef stream_id = bld->immediates[stream_reg_idx][stream_reg_swiz];
LLVMValueRef mask = mask_vec(bld_base);
LLVMValueRef total_emitted_vertices_vec =
LLVMBuildLoad(builder, bld->total_emitted_vertices_vec_ptr, "");
+
+ stream_id = LLVMBuildBitCast(builder, stream_id, bld_base->uint_bld.vec_type, "");
mask = clamp_mask_to_max_output_vertices(bld, mask,
total_emitted_vertices_vec);
gather_outputs(bld);