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)
{
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);
{
}
+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)
{
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;
context->invalidate_resource(context, resource);
}
+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,
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
*/
void (*callback)(struct pipe_context *ctx, void (*fn)(void *), void *data,
bool asap);
+
+ /**
+ * Set a context parameter See enum pipe_context_param for more details.
+ */
+ void (*set_context_param)(struct pipe_context *ctx,
+ enum pipe_context_param param,
+ unsigned value);
};
PIPE_COMPUTE_CAP_MAX_VARIABLE_THREADS_PER_BLOCK,
};
+/**
+ * Types of parameters for pipe_context::set_context_param.
+ */
+enum pipe_context_param
+{
+ /* A hint for the driver that it should pin its execution threads to
+ * a group of cores sharing a specific L3 cache if the CPU has multiple
+ * L3 caches. This is needed for good multithreading performance on
+ * AMD Zen CPUs. "value" is the L3 cache index. Drivers that don't have
+ * any internal threads or don't run on affected CPUs can ignore this.
+ */
+ PIPE_CONTEXT_PARAM_PIN_THREADS_TO_L3_CACHE,
+};
+
/**
* Composite query types
*/