r600: Add experimental get_compute_state_info

This callback is needed for rusticl, but the values that are returned
may be completely off.

Related: https://gitlab.freedesktop.org/mesa/mesa/-/issues/7420

v2: use r600_wavefront_size value

Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24229>
This commit is contained in:
Gert Wollny
2023-07-11 16:33:28 +02:00
committed by Marge Bot
parent 7b41921504
commit 022850ed05
2 changed files with 19 additions and 2 deletions

View File

@@ -1215,6 +1215,22 @@ void evergreen_init_atom_start_compute_cs(struct r600_context *rctx)
eg_store_loop_const(cb, R_03A200_SQ_LOOP_CONST_0 + (160 * 4), 0x1000FFF);
}
static void evergreen_get_compute_state_info(struct pipe_context *ctx, void *state,
struct pipe_compute_state_object_info *info)
{
struct r600_context *rctx = (struct r600_context*)ctx;
struct r600_pipe_compute *shader = state;
/* This is somehow copied from RadeonSI, but in thruth this not more
* than an educated guess. */
uint8_t wave_size = r600_wavefront_size(rctx->b.screen->family);
info->private_memory = shader->sel->current->scratch_space_needed;
info->preferred_simd_size = wave_size;
info->simd_sizes = wave_size;
info->max_threads = 128;
}
void evergreen_init_compute_state_functions(struct r600_context *rctx)
{
rctx->b.b.create_compute_state = evergreen_create_compute_state;
@@ -1224,7 +1240,7 @@ void evergreen_init_compute_state_functions(struct r600_context *rctx)
rctx->b.b.set_compute_resources = evergreen_set_compute_resources;
rctx->b.b.set_global_binding = evergreen_set_global_binding;
rctx->b.b.launch_grid = evergreen_launch_grid;
rctx->b.b.get_compute_state_info = evergreen_get_compute_state_info;
}
void *r600_compute_global_transfer_map(struct pipe_context *ctx,

View File

@@ -1034,7 +1034,6 @@ static int r600_get_compute_param(struct pipe_screen *screen,
}
return sizeof(uint32_t);
case PIPE_COMPUTE_CAP_MAX_PRIVATE_SIZE:
case PIPE_COMPUTE_CAP_MAX_SUBGROUPS:
break; /* unused */
case PIPE_COMPUTE_CAP_SUBGROUP_SIZES:
if (ret) {
@@ -1048,6 +1047,8 @@ static int r600_get_compute_param(struct pipe_screen *screen,
*max_variable_threads_per_block = 0;
}
return sizeof(uint64_t);
case PIPE_COMPUTE_CAP_MAX_SUBGROUPS:
return 0;
}
fprintf(stderr, "unknown PIPE_COMPUTE_CAP %d\n", param);