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

Roland Scheidegger sroland at vmware.com
Mon Aug 18 17:10:16 PDT 2014


Am 19.08.2014 01:43, schrieb Marek Olšák:
> 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?
> 

Yeah I suppose you're right. There's nothing really interesting in the
object - the only interesting information is not in the objects but the
parameters of the functions.

Roland



More information about the mesa-dev mailing list