diff options
author | Marek Olšák <[email protected]> | 2018-09-05 23:12:27 -0400 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2018-09-07 16:03:36 -0400 |
commit | 8016639f636f4a0876fb63e508167eab26be9c69 (patch) | |
tree | 4a50d2d5d5e6eaa868c84e793d19743819c4311f /src/gallium/auxiliary | |
parent | 8d473f555a0c3c94cffd18e68a13274488dcfb17 (diff) |
gallium/u_threaded: implement set_context_param for thread pinning (v2)
v2: - use set_context_param
- set set_context_param even if the driver doesn't implement it
Reviewed-by: Brian Paul <[email protected]>
Diffstat (limited to 'src/gallium/auxiliary')
-rw-r--r-- | src/gallium/auxiliary/util/u_threaded_context.c | 40 | ||||
-rw-r--r-- | src/gallium/auxiliary/util/u_threaded_context_calls.h | 1 |
2 files changed, 41 insertions, 0 deletions
diff --git a/src/gallium/auxiliary/util/u_threaded_context.c b/src/gallium/auxiliary/util/u_threaded_context.c index fc7eb138835..8e3bceae18d 100644 --- a/src/gallium/auxiliary/util/u_threaded_context.c +++ b/src/gallium/auxiliary/util/u_threaded_context.c @@ -1899,6 +1899,44 @@ tc_create_video_buffer(UNUSED struct pipe_context *_pipe, return NULL; } +struct tc_context_param { + enum pipe_context_param param; + unsigned value; +}; + +static void +tc_call_set_context_param(struct pipe_context *pipe, + union tc_payload *payload) +{ + struct tc_context_param *p = (struct tc_context_param*)payload; + + if (pipe->set_context_param) + pipe->set_context_param(pipe, p->param, p->value); +} + +static void +tc_set_context_param(struct pipe_context *_pipe, + enum pipe_context_param param, + unsigned value) +{ + struct threaded_context *tc = threaded_context(_pipe); + + if (tc->pipe->set_context_param) { + struct tc_context_param *payload = + tc_add_struct_typed_call(tc, TC_CALL_set_context_param, + tc_context_param); + + payload->param = param; + payload->value = value; + } + + if (param == PIPE_CONTEXT_PARAM_PIN_THREADS_TO_L3_CACHE) { + /* Pin the gallium thread as requested. */ + util_pin_thread_to_L3(tc->queue.threads[0], value, + util_cpu_caps.cores_per_L3); + } +} + /******************************************************************** * draw, launch, clear, blit, copy, flush @@ -2580,6 +2618,8 @@ threaded_context_create(struct pipe_context *pipe, slab_create_child(&tc->pool_transfers, parent_transfer_pool); + tc->base.set_context_param = tc_set_context_param; /* always set this */ + #define CTX_INIT(_member) \ tc->base._member = tc->pipe->_member ? tc_##_member : NULL diff --git a/src/gallium/auxiliary/util/u_threaded_context_calls.h b/src/gallium/auxiliary/util/u_threaded_context_calls.h index 921b86a67f0..e6ea1b5747c 100644 --- a/src/gallium/auxiliary/util/u_threaded_context_calls.h +++ b/src/gallium/auxiliary/util/u_threaded_context_calls.h @@ -49,6 +49,7 @@ CALL(delete_texture_handle) CALL(make_texture_handle_resident) CALL(delete_image_handle) CALL(make_image_handle_resident) +CALL(set_context_param) CALL(bind_blend_state) CALL(bind_rasterizer_state) |