mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-04 22:49:13 +02:00
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:
parent
27cd4b061c
commit
9cdbb099ee
11 changed files with 12 additions and 16 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue