[Mesa-dev] [PATCH 01/10] gallium: add a common uploader to pipe_context

Marek Olšák maraeo at gmail.com
Fri Jan 27 15:02:59 UTC 2017


On Fri, Jan 27, 2017 at 3:38 PM, Roland Scheidegger <sroland at vmware.com> wrote:
> Am 27.01.2017 um 12:02 schrieb Marek Olšák:
>> From: Marek Olšák <marek.olsak at amd.com>
>>
>> For lower memory usage and more efficient updates of the buffer residency
>> list. (e.g. if drivers keep seeing the same buffer for many consecutive
>> "add" calls, the calls can be turned into no-ops trivially)
>> ---
>>  src/gallium/include/pipe/p_context.h | 7 +++++++
>>  1 file changed, 7 insertions(+)
>>
>> diff --git a/src/gallium/include/pipe/p_context.h b/src/gallium/include/pipe/p_context.h
>> index 45098c9..5876968 100644
>> --- a/src/gallium/include/pipe/p_context.h
>> +++ b/src/gallium/include/pipe/p_context.h
>> @@ -69,33 +69,40 @@ struct pipe_stream_output_target;
>>  struct pipe_surface;
>>  struct pipe_transfer;
>>  struct pipe_vertex_buffer;
>>  struct pipe_vertex_element;
>>  struct pipe_video_buffer;
>>  struct pipe_video_codec;
>>  struct pipe_viewport_state;
>>  struct pipe_compute_state;
>>  union pipe_color_union;
>>  union pipe_query_result;
>> +struct u_upload_mgr;
>>
>>  /**
>>   * Gallium rendering context.  Basically:
>>   *  - state setting functions
>>   *  - VBO drawing functions
>>   *  - surface functions
>>   */
>>  struct pipe_context {
>>     struct pipe_screen *screen;
>>
>>     void *priv;  /**< context private data (for DRI for example) */
>>     void *draw;  /**< private, for draw module (temporary?) */
>>
>> +   /**
>> +    * Stream uploader created by the driver. All drivers, state trackers, and
>> +    * modules should use it.
>> +    */
>> +   struct u_upload_mgr *stream_uploader;
>> +
>>     void (*destroy)( struct pipe_context * );
>>
>>     /**
>>      * VBO drawing
>>      */
>>     /*@{*/
>>     void (*draw_vbo)( struct pipe_context *pipe,
>>                       const struct pipe_draw_info *info );
>>     /*@}*/
>>
>>
>
> I suppose this makes sense. However, this makes util interfaces
> effectively part of the gallium interface, not sure how I feel about
> that as this seems to violate the contract that util code is optional.

To be honest, I don't care much. Putting the uploader into
pipe_context has an obvious practical advantage and we want exactly
one instance between drivers and state trackers.

Also, all utilities that had to use pipe_buffer_create just to upload
something for one use can now use this.

If somebody wants a proper formal interface, feel free.

I do see a small decrease in CPU overhead with legacy GL apps thanks
to amdgpu_cs_add_buffer getting the same buffer over and over again.

Marek


More information about the mesa-dev mailing list