aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDave Airlie <[email protected]>2020-01-23 16:13:24 +1000
committerMarge Bot <[email protected]>2020-02-07 00:54:42 +0000
commitb66884131312cac4438aab89490fd6f33443247a (patch)
tree02ed5bd14aeadaf5713e9be77dba7b8e62f0bc73 /src
parent9d70002744ca121bff51dd40bfa76b633320652c (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.c7
-rw-r--r--src/gallium/auxiliary/gallivm/lp_bld_nir_soa.c2
-rw-r--r--src/gallium/auxiliary/gallivm/lp_bld_tgsi.h2
-rw-r--r--src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c2
-rw-r--r--src/gallium/drivers/swr/swr_shader.cpp8
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;