diff options
author | Dave Airlie <[email protected]> | 2020-01-23 16:13:24 +1000 |
---|---|---|
committer | Marge Bot <[email protected]> | 2020-02-07 00:54:42 +0000 |
commit | b66884131312cac4438aab89490fd6f33443247a (patch) | |
tree | 02ed5bd14aeadaf5713e9be77dba7b8e62f0bc73 /src | |
parent | 9d70002744ca121bff51dd40bfa76b633320652c (diff) |
gallivm/swr: add stream_id to geom epilogue emit
We want to pass a stream in here so we can write out separate
prim/vertex counts for each stream at the end.
This also adds an ignore any stream option so we can stage more code
Reviewed-by: Roland Scheidegger <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3530>
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/auxiliary/draw/draw_llvm.c | 7 | ||||
-rw-r--r-- | src/gallium/auxiliary/gallivm/lp_bld_nir_soa.c | 2 | ||||
-rw-r--r-- | src/gallium/auxiliary/gallivm/lp_bld_tgsi.h | 2 | ||||
-rw-r--r-- | src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c | 2 | ||||
-rw-r--r-- | src/gallium/drivers/swr/swr_shader.cpp | 8 |
5 files changed, 12 insertions, 9 deletions
diff --git a/src/gallium/auxiliary/draw/draw_llvm.c b/src/gallium/auxiliary/draw/draw_llvm.c index ca5cd6a3726..f1ca2dbd5a0 100644 --- a/src/gallium/auxiliary/draw/draw_llvm.c +++ b/src/gallium/auxiliary/draw/draw_llvm.c @@ -1597,7 +1597,7 @@ draw_gs_llvm_end_primitive(const struct lp_build_gs_iface *gs_base, static void draw_gs_llvm_epilogue(const struct lp_build_gs_iface *gs_base, LLVMValueRef total_emitted_vertices_vec, - LLVMValueRef emitted_prims_vec) + LLVMValueRef emitted_prims_vec, unsigned stream) { const struct draw_gs_llvm_iface *gs_iface = draw_gs_llvm_iface(gs_base); struct draw_gs_llvm_variant *variant = gs_iface->variant; @@ -1608,7 +1608,10 @@ draw_gs_llvm_epilogue(const struct lp_build_gs_iface *gs_base, LLVMValueRef emitted_prims_ptr = draw_gs_jit_emitted_prims(gallivm, variant->context_ptr); LLVMValueRef zero = lp_build_const_int32(gallivm, 0); - + + if (stream > 0) + return; + emitted_verts_ptr = LLVMBuildGEP(builder, emitted_verts_ptr, &zero, 0, ""); emitted_prims_ptr = LLVMBuildGEP(builder, emitted_prims_ptr, &zero, 0, ""); diff --git a/src/gallium/auxiliary/gallivm/lp_bld_nir_soa.c b/src/gallium/auxiliary/gallivm/lp_bld_nir_soa.c index 1457cb15f28..828cf5e7028 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_nir_soa.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_nir_soa.c @@ -1607,7 +1607,7 @@ void lp_build_nir_soa(struct gallivm_state *gallivm, bld.gs_iface->gs_epilogue(bld.gs_iface, total_emitted_vertices_vec, - emitted_prims_vec); + emitted_prims_vec, 0); } lp_exec_mask_fini(&bld.exec_mask); } diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi.h b/src/gallium/auxiliary/gallivm/lp_bld_tgsi.h index e8cbceb27fa..380579c3f70 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi.h +++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi.h @@ -424,7 +424,7 @@ struct lp_build_gs_iface LLVMValueRef mask_vec); void (*gs_epilogue)(const struct lp_build_gs_iface *gs_iface, LLVMValueRef total_emitted_vertices_vec, - LLVMValueRef emitted_prims_vec); + LLVMValueRef emitted_prims_vec, unsigned stream); }; struct lp_build_tcs_iface diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c index b1a2e96e804..913fcb2a914 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c @@ -4371,7 +4371,7 @@ static void emit_epilogue(struct lp_build_tgsi_context * bld_base) bld->gs_iface->gs_epilogue(bld->gs_iface, total_emitted_vertices_vec, - emitted_prims_vec); + emitted_prims_vec, 0); } else { gather_outputs(bld); } diff --git a/src/gallium/drivers/swr/swr_shader.cpp b/src/gallium/drivers/swr/swr_shader.cpp index fcbdcd54369..c4d0bb2fc52 100644 --- a/src/gallium/drivers/swr/swr_shader.cpp +++ b/src/gallium/drivers/swr/swr_shader.cpp @@ -363,7 +363,7 @@ struct BuilderSWR : public Builder { void swr_gs_llvm_epilogue(const struct lp_build_gs_iface *gs_base, LLVMValueRef total_emitted_vertices_vec, - LLVMValueRef emitted_prims_vec); + LLVMValueRef emitted_prims_vec, unsigned stream); // TCS-specific emit functions void swr_tcs_llvm_emit_prologue(struct lp_build_tgsi_soa_context* bld); @@ -524,13 +524,13 @@ swr_gs_llvm_end_primitive(const struct lp_build_gs_iface *gs_base, static void swr_gs_llvm_epilogue(const struct lp_build_gs_iface *gs_base, LLVMValueRef total_emitted_vertices_vec, - LLVMValueRef emitted_prims_vec) + LLVMValueRef emitted_prims_vec, unsigned stream) { swr_gs_llvm_iface *iface = (swr_gs_llvm_iface*)gs_base; iface->pBuilder->swr_gs_llvm_epilogue(gs_base, total_emitted_vertices_vec, - emitted_prims_vec); + emitted_prims_vec, stream); } static LLVMValueRef @@ -909,7 +909,7 @@ BuilderSWR::swr_gs_llvm_end_primitive(const struct lp_build_gs_iface *gs_base, void BuilderSWR::swr_gs_llvm_epilogue(const struct lp_build_gs_iface *gs_base, LLVMValueRef total_emitted_vertices_vec, - LLVMValueRef emitted_prims_vec) + LLVMValueRef emitted_prims_vec, unsigned stream) { swr_gs_llvm_iface *iface = (swr_gs_llvm_iface*)gs_base; |