[Mesa-dev] [PATCH 1/4] gallium: add async flag to pipe_debug_callback

Nicolai Hähnle nhaehnle at gmail.com
Fri Jul 8 08:58:21 UTC 2016


On 07.07.2016 16:40, Jan Vesely wrote:
> On Thu, 2016-07-07 at 09:39 +0200, Nicolai Hähnle wrote:
>> From: Nicolai Hähnle <nicolai.haehnle at amd.com>
>>
>> ---
>>   src/gallium/include/pipe/p_state.h               | 6 ++++++
>>   src/gallium/state_trackers/clover/core/queue.cpp | 5 ++++-
>>   src/mesa/state_tracker/st_debug.c                | 5 ++++-
>>   3 files changed, 14 insertions(+), 2 deletions(-)
>>
>> diff --git a/src/gallium/include/pipe/p_state.h
>> b/src/gallium/include/pipe/p_state.h
>> index f4bee38..f7bf402 100644
>> --- a/src/gallium/include/pipe/p_state.h
>> +++ b/src/gallium/include/pipe/p_state.h
>> @@ -809,6 +809,12 @@ struct pipe_compute_state
>>   struct pipe_debug_callback
>>   {
>>      /**
>> +    * When set to \c true, the callback may be called asynchronously
>> from a
>> +    * driver-created thread.
>> +    */
>> +   bool async;
>> +
>> +   /**
>>       * Callback for the driver to report debug/performance/etc
>> information back
>>       * to the state tracker.
>>       *
>> diff --git a/src/gallium/state_trackers/clover/core/queue.cpp
>> b/src/gallium/state_trackers/clover/core/queue.cpp
>> index 24d71f1..00afdb6 100644
>> --- a/src/gallium/state_trackers/clover/core/queue.cpp
>> +++ b/src/gallium/state_trackers/clover/core/queue.cpp
>> @@ -50,7 +50,10 @@ command_queue::command_queue(clover::context &ctx,
>> clover::device &dev,
>>         throw error(CL_INVALID_DEVICE);
>>
>>      if (ctx.notify) {
>> -      struct pipe_debug_callback cb = { &debug_notify_callback, this
>> };
>> +      struct pipe_debug_callback cb;
>> +      memset(&cb, 0, sizeof(db));
>> +      cb.debug_message = &debug_notify_callback;
>> +      cb.data = this;
>
> I don't think this is necessary, elements that are not mentioned are
> initialized to zero, both C(below) and C++.

Yes, but I think it's better to use a form of initialization that does 
not depend on the order of variables.

I suppose one could use designated initializers instead, but the pattern 
of memset to zero followed by explicit assignment is quite common in 
Mesa (and Gallium in particular), so I stuck with that.

Nicolai

>
> Jan
>
>>         if (pipe->set_debug_callback)
>>            pipe->set_debug_callback(pipe, &cb);
>>      }
>> diff --git a/src/mesa/state_tracker/st_debug.c
>> b/src/mesa/state_tracker/st_debug.c
>> index eaf2549..214e223 100644
>> --- a/src/mesa/state_tracker/st_debug.c
>> +++ b/src/mesa/state_tracker/st_debug.c
>> @@ -172,7 +172,10 @@ st_enable_debug_output(struct st_context *st,
>> boolean enable)
>>         return;
>>
>>      if (enable) {
>> -      struct pipe_debug_callback cb = { st_debug_message, st };
>> +      struct pipe_debug_callback cb;
>> +      memset(&cb, 0, sizeof(cb));
>> +      cb.debug_message = st_debug_message;
>> +      cb.data = st;
>>         pipe->set_debug_callback(pipe, &cb);
>>      } else {
>>         pipe->set_debug_callback(pipe, NULL);


More information about the mesa-dev mailing list