summaryrefslogtreecommitdiffstats
path: root/src/gallium/auxiliary
diff options
context:
space:
mode:
authorMarek Olšák <[email protected]>2018-09-05 22:57:19 -0400
committerMarek Olšák <[email protected]>2018-09-07 15:48:31 -0400
commite5e3b5cdcc38ce1111b134e6fe5bc4d00c8c715f (patch)
tree0b4ab013955105b227a8f29fdd3e2eb26adc5ac9 /src/gallium/auxiliary
parent6d477bc5460eec14c6a0d047a0384c9ce5c7609b (diff)
gallium: add pipe_context::set_context_param for tuning perf on AMD Zen (v2)
State trackers will not use the new param directly, but will instead use a helper in MakeCurrent that does the right thing. v2: rework the interface Reviewed-by: Brian Paul <[email protected]>
Diffstat (limited to 'src/gallium/auxiliary')
-rw-r--r--src/gallium/auxiliary/driver_ddebug/dd_context.c11
-rw-r--r--src/gallium/auxiliary/driver_noop/noop_pipe.c7
-rw-r--r--src/gallium/auxiliary/driver_trace/tr_context.c20
3 files changed, 38 insertions, 0 deletions
diff --git a/src/gallium/auxiliary/driver_ddebug/dd_context.c b/src/gallium/auxiliary/driver_ddebug/dd_context.c
index a1b6c971e89..a9ac6ef14ab 100644
--- a/src/gallium/auxiliary/driver_ddebug/dd_context.c
+++ b/src/gallium/auxiliary/driver_ddebug/dd_context.c
@@ -759,6 +759,16 @@ dd_context_make_image_handle_resident(struct pipe_context *_pipe,
pipe->make_image_handle_resident(pipe, handle, access, resident);
}
+static void
+dd_context_set_context_param(struct pipe_context *_pipe,
+ enum pipe_context_param param,
+ unsigned value)
+{
+ struct pipe_context *pipe = dd_context(_pipe)->pipe;
+
+ pipe->set_context_param(pipe, param, value);
+}
+
struct pipe_context *
dd_context_create(struct dd_screen *dscreen, struct pipe_context *pipe)
{
@@ -862,6 +872,7 @@ dd_context_create(struct dd_screen *dscreen, struct pipe_context *pipe)
CTX_INIT(create_image_handle);
CTX_INIT(delete_image_handle);
CTX_INIT(make_image_handle_resident);
+ CTX_INIT(set_context_param);
dd_init_draw_functions(dctx);
diff --git a/src/gallium/auxiliary/driver_noop/noop_pipe.c b/src/gallium/auxiliary/driver_noop/noop_pipe.c
index 7de3e882398..a6497f07677 100644
--- a/src/gallium/auxiliary/driver_noop/noop_pipe.c
+++ b/src/gallium/auxiliary/driver_noop/noop_pipe.c
@@ -312,6 +312,12 @@ static void noop_invalidate_resource(struct pipe_context *ctx,
{
}
+static void noop_set_context_param(struct pipe_context *ctx,
+ enum pipe_context_param param,
+ unsigned value)
+{
+}
+
static struct pipe_context *noop_create_context(struct pipe_screen *screen,
void *priv, unsigned flags)
{
@@ -351,6 +357,7 @@ static struct pipe_context *noop_create_context(struct pipe_screen *screen,
ctx->buffer_subdata = noop_buffer_subdata;
ctx->texture_subdata = noop_texture_subdata;
ctx->invalidate_resource = noop_invalidate_resource;
+ ctx->set_context_param = noop_set_context_param;
noop_init_state_functions(ctx);
return ctx;
diff --git a/src/gallium/auxiliary/driver_trace/tr_context.c b/src/gallium/auxiliary/driver_trace/tr_context.c
index dc091aee2e9..7859a3395ca 100644
--- a/src/gallium/auxiliary/driver_trace/tr_context.c
+++ b/src/gallium/auxiliary/driver_trace/tr_context.c
@@ -1577,6 +1577,25 @@ trace_context_invalidate_resource(struct pipe_context *_context,
}
static void
+trace_context_set_context_param(struct pipe_context *_context,
+ enum pipe_context_param param,
+ unsigned value)
+{
+ struct trace_context *tr_context = trace_context(_context);
+ struct pipe_context *context = tr_context->pipe;
+
+ trace_dump_call_begin("pipe_context", "set_context_param");
+
+ trace_dump_arg(ptr, context);
+ trace_dump_arg(uint, param);
+ trace_dump_arg(uint, value);
+
+ trace_dump_call_end();
+
+ context->set_context_param(context, param, value);
+}
+
+static void
trace_context_render_condition(struct pipe_context *_context,
struct pipe_query *query,
boolean condition,
@@ -1948,6 +1967,7 @@ trace_context_create(struct trace_screen *tr_scr,
TR_CTX_INIT(buffer_subdata);
TR_CTX_INIT(texture_subdata);
TR_CTX_INIT(invalidate_resource);
+ TR_CTX_INIT(set_context_param);
#undef TR_CTX_INIT