From 9cdbb099ee7364b3b546033bf03dc2f3fdb98275 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Wed, 29 May 2024 08:47:41 -0400 Subject: [PATCH] gallium: stop dropping drawid_offset param with util_draw_indirect MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit this breaks indirect draws with offsets Reviewed-by: Marek Olšák Part-of: --- src/gallium/auxiliary/util/u_draw.c | 3 ++- src/gallium/auxiliary/util/u_draw.h | 1 + src/gallium/drivers/asahi/agx_state.c | 6 +++--- src/gallium/drivers/freedreno/freedreno_draw.c | 2 +- src/gallium/drivers/llvmpipe/lp_draw_arrays.c | 2 +- src/gallium/drivers/nouveau/nv50/nv50_vbo.c | 2 +- src/gallium/drivers/panfrost/pan_cmdstream.c | 2 +- src/gallium/drivers/softpipe/sp_draw_arrays.c | 2 +- src/gallium/drivers/svga/svga_pipe_draw.c | 2 +- src/panfrost/ci/panfrost-g52-fails.txt | 3 --- src/panfrost/ci/panfrost-g57-fails.txt | 3 --- 11 files changed, 12 insertions(+), 16 deletions(-) diff --git a/src/gallium/auxiliary/util/u_draw.c b/src/gallium/auxiliary/util/u_draw.c index cca2d56417d..1fe85dafbb4 100644 --- a/src/gallium/auxiliary/util/u_draw.c +++ b/src/gallium/auxiliary/util/u_draw.c @@ -194,6 +194,7 @@ util_draw_indirect_read(struct pipe_context *pipe, void util_draw_indirect(struct pipe_context *pipe, const struct pipe_draw_info *info_in, + unsigned drawid_offset, const struct pipe_draw_indirect_info *indirect) { struct pipe_draw_info info; @@ -249,7 +250,7 @@ util_draw_indirect(struct pipe_context *pipe, draw.index_bias = info_in->index_size ? params[3] : 0; info.start_instance = info_in->index_size ? params[4] : params[3]; - pipe->draw_vbo(pipe, &info, i, NULL, &draw, 1); + pipe->draw_vbo(pipe, &info, i + drawid_offset, NULL, &draw, 1); params += indirect->stride / 4; } diff --git a/src/gallium/auxiliary/util/u_draw.h b/src/gallium/auxiliary/util/u_draw.h index b302e2db66f..685c99d16ab 100644 --- a/src/gallium/auxiliary/util/u_draw.h +++ b/src/gallium/auxiliary/util/u_draw.h @@ -166,6 +166,7 @@ util_draw_indirect_read(struct pipe_context *pipe, void util_draw_indirect(struct pipe_context *pipe, const struct pipe_draw_info *info, + unsigned drawid_offset, const struct pipe_draw_indirect_info *indirect); /* Helper to handle multi-draw by splitting into individual draws. You diff --git a/src/gallium/drivers/asahi/agx_state.c b/src/gallium/drivers/asahi/agx_state.c index 81035242e7b..c9efc3fa77b 100644 --- a/src/gallium/drivers/asahi/agx_state.c +++ b/src/gallium/drivers/asahi/agx_state.c @@ -4851,14 +4851,14 @@ agx_draw_vbo(struct pipe_context *pctx, const struct pipe_draw_info *info, /* TODO: stop cheating */ if (indirect && indirect->indirect_draw_count) { perf_debug_ctx(ctx, "multi-draw indirect"); - util_draw_indirect(pctx, info, indirect); + util_draw_indirect(pctx, info, drawid_offset, indirect); return; } /* TODO: stop cheating */ if (info->mode == MESA_PRIM_PATCHES && indirect) { perf_debug_ctx(ctx, "indirect tessellation"); - util_draw_indirect(pctx, info, indirect); + util_draw_indirect(pctx, info, drawid_offset, indirect); return; } @@ -4869,7 +4869,7 @@ agx_draw_vbo(struct pipe_context *pctx, const struct pipe_draw_info *info, indirect) { perf_debug_ctx(ctx, "indirect IA queries"); - util_draw_indirect(pctx, info, indirect); + util_draw_indirect(pctx, info, drawid_offset, indirect); return; } diff --git a/src/gallium/drivers/freedreno/freedreno_draw.c b/src/gallium/drivers/freedreno/freedreno_draw.c index 56ea718b9e0..cce1c814884 100644 --- a/src/gallium/drivers/freedreno/freedreno_draw.c +++ b/src/gallium/drivers/freedreno/freedreno_draw.c @@ -325,7 +325,7 @@ fd_draw_vbo(struct pipe_context *pctx, const struct pipe_draw_info *info, if (indirect && indirect->buffer && FD_DBG(NOINDR)) { /* num_draws is only applicable for direct draws: */ assert(num_draws == 1); - util_draw_indirect(pctx, info, indirect); + util_draw_indirect(pctx, info, drawid_offset, indirect); return; } diff --git a/src/gallium/drivers/llvmpipe/lp_draw_arrays.c b/src/gallium/drivers/llvmpipe/lp_draw_arrays.c index 6eb88c706c7..01ae9f585f1 100644 --- a/src/gallium/drivers/llvmpipe/lp_draw_arrays.c +++ b/src/gallium/drivers/llvmpipe/lp_draw_arrays.c @@ -69,7 +69,7 @@ llvmpipe_draw_vbo(struct pipe_context *pipe, const struct pipe_draw_info *info, return; if (indirect && indirect->buffer) { - util_draw_indirect(pipe, info, indirect); + util_draw_indirect(pipe, info, drawid_offset, indirect); return; } diff --git a/src/gallium/drivers/nouveau/nv50/nv50_vbo.c b/src/gallium/drivers/nouveau/nv50/nv50_vbo.c index 7011009a47d..0a8230dd0f8 100644 --- a/src/gallium/drivers/nouveau/nv50/nv50_vbo.c +++ b/src/gallium/drivers/nouveau/nv50/nv50_vbo.c @@ -764,7 +764,7 @@ nv50_draw_single_vbo(struct pipe_context *pipe, const struct pipe_draw_info *inf * benefit. */ if (indirect && indirect->buffer) { - util_draw_indirect(pipe, info, indirect); + util_draw_indirect(pipe, info, drawid_offset, indirect); return; } diff --git a/src/gallium/drivers/panfrost/pan_cmdstream.c b/src/gallium/drivers/panfrost/pan_cmdstream.c index 82383949e94..a47c645ebb8 100644 --- a/src/gallium/drivers/panfrost/pan_cmdstream.c +++ b/src/gallium/drivers/panfrost/pan_cmdstream.c @@ -2986,7 +2986,7 @@ panfrost_draw_vbo(struct pipe_context *pipe, const struct pipe_draw_info *info, /* Emulate indirect draws on JM */ if (indirect && indirect->buffer) { assert(num_draws == 1); - util_draw_indirect(pipe, info, indirect); + util_draw_indirect(pipe, info, drawid_offset, indirect); perf_debug(ctx, "Emulating indirect draw on the CPU"); return; } diff --git a/src/gallium/drivers/softpipe/sp_draw_arrays.c b/src/gallium/drivers/softpipe/sp_draw_arrays.c index e97ed1b483d..d21b67df277 100644 --- a/src/gallium/drivers/softpipe/sp_draw_arrays.c +++ b/src/gallium/drivers/softpipe/sp_draw_arrays.c @@ -82,7 +82,7 @@ softpipe_draw_vbo(struct pipe_context *pipe, return; if (indirect && indirect->buffer) { - util_draw_indirect(pipe, info, indirect); + util_draw_indirect(pipe, info, drawid_offset, indirect); return; } diff --git a/src/gallium/drivers/svga/svga_pipe_draw.c b/src/gallium/drivers/svga/svga_pipe_draw.c index 75cee5ba321..22c3ec9c5f8 100644 --- a/src/gallium/drivers/svga/svga_pipe_draw.c +++ b/src/gallium/drivers/svga/svga_pipe_draw.c @@ -125,7 +125,7 @@ retry_draw_indirect(struct svga_context *svga, if (info->mode == MESA_PRIM_LINE_LOOP) { /* need to do a fallback */ - util_draw_indirect(&svga->pipe, info, indirect); + util_draw_indirect(&svga->pipe, info, 0, indirect); return PIPE_OK; } else { diff --git a/src/panfrost/ci/panfrost-g52-fails.txt b/src/panfrost/ci/panfrost-g52-fails.txt index 05dad1beb87..7d0485906a4 100644 --- a/src/panfrost/ci/panfrost-g52-fails.txt +++ b/src/panfrost/ci/panfrost-g52-fails.txt @@ -20,9 +20,6 @@ spec@arb_direct_state_access@gettextureimage-formats init-by-rendering,Fail spec@arb_framebuffer_object@fbo-luminance-alpha,Fail spec@arb_framebuffer_srgb@fbo-fast-clear,Fail spec@arb_point_sprite@arb_point_sprite-mipmap,Fail -spec@arb_shader_draw_parameters@drawid-indirect-baseinstance,Fail -spec@arb_shader_draw_parameters@drawid-indirect-basevertex,Fail -spec@arb_shader_draw_parameters@drawid-indirect,Fail spec@arb_shader_texture_lod@execution@arb_shader_texture_lod-texgradcube,Fail spec@arb_shader_texture_lod@execution@arb_shader_texture_lod-texgrad,Fail spec@arb_shader_texture_lod@execution@tex-miplevel-selection *gradarb 2drect,Crash diff --git a/src/panfrost/ci/panfrost-g57-fails.txt b/src/panfrost/ci/panfrost-g57-fails.txt index 6616c324c58..af2b78323f1 100644 --- a/src/panfrost/ci/panfrost-g57-fails.txt +++ b/src/panfrost/ci/panfrost-g57-fails.txt @@ -57,9 +57,6 @@ spec@arb_sample_shading@samplemask 4@sample mask_in_one,Fail spec@arb_separate_shader_objects@atomic counter,Fail spec@arb_shader_atomic_counters@semantics,Fail spec@arb_shader_atomic_counters@semantics@Fragment shader atomic built-in semantics,Fail -spec@arb_shader_draw_parameters@drawid-indirect-baseinstance,Fail -spec@arb_shader_draw_parameters@drawid-indirect-basevertex,Fail -spec@arb_shader_draw_parameters@drawid-indirect,Fail spec@arb_shader_texture_lod@execution@arb_shader_texture_lod-texgradcube,Fail spec@arb_shader_texture_lod@execution@arb_shader_texture_lod-texgrad,Fail spec@arb_shader_texture_lod@execution@tex-miplevel-selection *gradarb 2drect,Crash