gallium: stop dropping drawid_offset param with util_draw_indirect

this breaks indirect draws with offsets

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29462>
This commit is contained in:
Mike Blumenkrantz 2024-05-29 08:47:41 -04:00 committed by Marge Bot
parent 27cd4b061c
commit 9cdbb099ee
11 changed files with 12 additions and 16 deletions

View file

@ -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;
}

View file

@ -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

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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 {

View file

@ -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

View file

@ -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