[Mesa-dev] [PATCH 3/6] rbug: implement streamout context functions

Marek Olšák maraeo at gmail.com
Mon Aug 18 16:43:44 PDT 2014


On Tue, Aug 19, 2014 at 1:12 AM, Roland Scheidegger <sroland at vmware.com> wrote:
> Am 18.08.2014 23:24, schrieb Marek Olšák:
>> From: Marek Olšák <marek.olsak at amd.com>
>>
>> ---
>>  src/gallium/drivers/rbug/rbug_context.c | 46 +++++++++++++++++++++++++++++++++
>>  1 file changed, 46 insertions(+)
>>
>> diff --git a/src/gallium/drivers/rbug/rbug_context.c b/src/gallium/drivers/rbug/rbug_context.c
>> index d6fca2e..71bc216 100644
>> --- a/src/gallium/drivers/rbug/rbug_context.c
>> +++ b/src/gallium/drivers/rbug/rbug_context.c
>> @@ -803,6 +803,49 @@ rbug_set_sample_mask(struct pipe_context *_pipe,
>>     pipe_mutex_unlock(rb_pipe->call_mutex);
>>  }
>>
>> +static struct pipe_stream_output_target *
>> +rbug_create_stream_output_target(struct pipe_context *_pipe,
>> +                                 struct pipe_resource *_res,
>> +                                 unsigned buffer_offset, unsigned buffer_size)
>> +{
>> +   struct rbug_context *rb_pipe = rbug_context(_pipe);
>> +   struct pipe_context *pipe = rb_pipe->pipe;
>> +   struct pipe_resource *res = rbug_resource_unwrap(_res);
>> +   struct pipe_stream_output_target *target;
>> +
>> +   pipe_mutex_lock(rb_pipe->call_mutex);
>> +   target = pipe->create_stream_output_target(pipe, res, buffer_offset,
>> +                                              buffer_size);
>> +   pipe_mutex_unlock(rb_pipe->call_mutex);
>> +   return target;
>> +}
>> +
>> +static void
>> +rbug_stream_output_target_destroy(struct pipe_context *_pipe,
>> +                                  struct pipe_stream_output_target *target)
>> +{
>> +   struct rbug_context *rb_pipe = rbug_context(_pipe);
>> +   struct pipe_context *pipe = rb_pipe->pipe;
>> +
>> +   pipe_mutex_lock(rb_pipe->call_mutex);
>> +   pipe->stream_output_target_destroy(pipe, target);
>> +   pipe_mutex_unlock(rb_pipe->call_mutex);
>> +}
>> +
>> +static void
>> +rbug_set_stream_output_targets(struct pipe_context *_pipe,
>> +                               unsigned num_targets,
>> +                               struct pipe_stream_output_target **targets,
>> +                               const unsigned *offsets)
>> +{
>> +   struct rbug_context *rb_pipe = rbug_context(_pipe);
>> +   struct pipe_context *pipe = rb_pipe->pipe;
>> +
>> +   pipe_mutex_lock(rb_pipe->call_mutex);
>> +   pipe->set_stream_output_targets(pipe, num_targets, targets, offsets);
>> +   pipe_mutex_unlock(rb_pipe->call_mutex);
>> +}
>> +
>>  static void
>>  rbug_resource_copy_region(struct pipe_context *_pipe,
>>                            struct pipe_resource *_dst,
>> @@ -1174,6 +1217,9 @@ rbug_context_create(struct pipe_screen *_screen, struct pipe_context *pipe)
>>     rb_pipe->base.set_vertex_buffers = rbug_set_vertex_buffers;
>>     rb_pipe->base.set_index_buffer = rbug_set_index_buffer;
>>     rb_pipe->base.set_sample_mask = rbug_set_sample_mask;
>> +   rb_pipe->base.create_stream_output_target = rbug_create_stream_output_target;
>> +   rb_pipe->base.stream_output_target_destroy = rbug_stream_output_target_destroy;
>> +   rb_pipe->base.set_stream_output_targets = rbug_set_stream_output_targets;
>>     rb_pipe->base.resource_copy_region = rbug_resource_copy_region;
>>     rb_pipe->base.blit = rbug_blit;
>>     rb_pipe->base.flush_resource = rbug_flush_resource;
>>
>
> Wouldn't it be better if we'd wrap that too?
> I guess though it's better than what we've got so

I'm actually strictly against wrapping all objects in co-drivers. If
you don't need to store any private data for each pipe_resource,
sampler view, etc. you don't need to wrap those objects. Granted, you
won't get any destroy calls for those objects, but do you really need
to know about them?

Marek


More information about the mesa-dev mailing list