Mesa (master): radv/llvm,aco/ngg: fix large shift exponent in ngg_gs_vertex_lds_addr

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Nov 25 13:53:40 UTC 2020


Module: Mesa
Branch: master
Commit: fdfa96561e64299a713162088da26753716df295
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=fdfa96561e64299a713162088da26753716df295

Author: Rhys Perry <pendingchaos02 at gmail.com>
Date:   Wed Nov 18 19:13:19 2020 +0000

radv/llvm,aco/ngg: fix large shift exponent in ngg_gs_vertex_lds_addr

When vertices_out=0, we will try to shift 1u by UINT32_MAX.

Signed-off-by: Rhys Perry <pendingchaos02 at gmail.com>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7576>

---

 src/amd/compiler/aco_instruction_selection.cpp | 2 +-
 src/amd/vulkan/radv_nir_to_llvm.c              | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/amd/compiler/aco_instruction_selection.cpp b/src/amd/compiler/aco_instruction_selection.cpp
index 556e4efa530..e727c6e02ac 100644
--- a/src/amd/compiler/aco_instruction_selection.cpp
+++ b/src/amd/compiler/aco_instruction_selection.cpp
@@ -4062,7 +4062,7 @@ Temp wave_count_in_threadgroup(isel_context *ctx)
 Temp ngg_gs_vertex_lds_addr(isel_context *ctx, Temp vertex_idx)
 {
    Builder bld(ctx->program, ctx->block);
-   unsigned write_stride_2exp = ffs(ctx->shader->info.gs.vertices_out) - 1;
+   unsigned write_stride_2exp = ffs(MAX2(ctx->shader->info.gs.vertices_out, 1)) - 1;
 
    /* gs_max_out_vertices = 2^(write_stride_2exp) * some odd number */
    if (write_stride_2exp) {
diff --git a/src/amd/vulkan/radv_nir_to_llvm.c b/src/amd/vulkan/radv_nir_to_llvm.c
index 65bc0d3d8d0..1b982e8e6b3 100644
--- a/src/amd/vulkan/radv_nir_to_llvm.c
+++ b/src/amd/vulkan/radv_nir_to_llvm.c
@@ -2147,7 +2147,7 @@ ngg_gs_vertex_ptr(struct radv_shader_context *ctx, LLVMValueRef vertexidx)
 	LLVMValueRef storage = ngg_gs_get_vertex_storage(ctx);
 
 	/* gs_max_out_vertices = 2^(write_stride_2exp) * some odd number */
-	unsigned write_stride_2exp = ffs(ctx->shader->info.gs.vertices_out) - 1;
+	unsigned write_stride_2exp = ffs(MAX2(ctx->shader->info.gs.vertices_out, 1)) - 1;
 	if (write_stride_2exp) {
 		LLVMValueRef row =
 			LLVMBuildLShr(builder, vertexidx,



More information about the mesa-commit mailing list