diff --git a/src/gallium/drivers/r600/evergreen_compute.c b/src/gallium/drivers/r600/evergreen_compute.c index b3c16fe067f..98962656e3a 100644 --- a/src/gallium/drivers/r600/evergreen_compute.c +++ b/src/gallium/drivers/r600/evergreen_compute.c @@ -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, diff --git a/src/gallium/drivers/r600/r600_pipe_common.c b/src/gallium/drivers/r600/r600_pipe_common.c index 8a5f78db95f..783d7badc3b 100644 --- a/src/gallium/drivers/r600/r600_pipe_common.c +++ b/src/gallium/drivers/r600/r600_pipe_common.c @@ -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);