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:
@@ -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,
|
||||
|
@@ -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);
|
||||
|
Reference in New Issue
Block a user