[Mesa-dev] [PATCHv2 1/3] gallium: add interface to clear buffers

Ilia Mirkin imirkin at alum.mit.edu
Tue Mar 25 17:17:39 PDT 2014


On Tue, Mar 25, 2014 at 7:57 PM, Brian Paul <brianp at vmware.com> wrote:
> On 03/25/2014 05:23 PM, Ilia Mirkin wrote:
>>
>> Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
>> ---
>>
>> v1 -> v2: add docs section to context.rst
>>
>>   src/gallium/docs/source/context.rst  |  5 +++++
>>   src/gallium/include/pipe/p_context.h | 11 +++++++++++
>>   2 files changed, 16 insertions(+)
>>
>> diff --git a/src/gallium/docs/source/context.rst
>> b/src/gallium/docs/source/context.rst
>> index 8e14522..efa2a1c 100644
>> --- a/src/gallium/docs/source/context.rst
>> +++ b/src/gallium/docs/source/context.rst
>> @@ -218,6 +218,11 @@ is is also possible to only clear one or the other
>> part). While it is only
>>   possible to clear one surface at a time (which can include several
>> layers),
>>   this surface need not be bound to the framebuffer.
>>
>> +``clear_buffer`` clears a PIPE_BUFFER resource with the specified clear
>> value
>> +(which may be multiple bytes in length). Logically this is a memset with
>> a
>> +multi-byte element value starting at offset bytes from resource start,
>> going
>> +for size bytes. It is guaranteed that size % clear_value_size == 0.
>> +
>>
>>   Drawing
>>   ^^^^^^^
>> diff --git a/src/gallium/include/pipe/p_context.h
>> b/src/gallium/include/pipe/p_context.h
>> index fe3045a..bf27285 100644
>> --- a/src/gallium/include/pipe/p_context.h
>> +++ b/src/gallium/include/pipe/p_context.h
>> @@ -332,6 +332,17 @@ struct pipe_context {
>>                                  unsigned dstx, unsigned dsty,
>>                                  unsigned width, unsigned height);
>>
>> +   /**
>> +    * Clear a buffer. Runs a memset over the specified region with the
>> element
>> +    * value passed in through clear_value of size clear_value_size.
>> +    */
>> +   void (*clear_buffer)(struct pipe_context *pipe,
>> +                        struct pipe_resource *res,
>> +                        unsigned offset,
>> +                        unsigned size,
>> +                        const void *clear_value,
>> +                        int clear_value_size);
>> +
>>      /** Flush draw commands
>>       *
>>       * \param flags  bitfield of enum pipe_flush_flags values.
>>
>
> Looking ahead a bit, if/when we support GL_ARB_clear_texture I wonder if
> we'll want to have just one pipe_context function for both purposes.
> We'd probably replace offset and size above with a mipmap level and
> x,y,z,w,h,d parameters.
>
> Do you have any thoughts on that?

I actually already sent a set of ARB_clear_texture patches earlier
(e.g.http://patchwork.freedesktop.org/patch/21593/). And I discussed
the single callback vs multiple callbacks thing with Marek on IRC --
he convinced me that having 2 separate callbacks would be better. My
reasoning there is that at least for nouveau, we'd still want to have
a separate "if PIPE_BUFFER: do this, else, do that" bit, and a shared
bit. It seems reasonable to have 2 diff callbacks esp since their
parameters are going to be reasonably different. (Instead of
x,y,z,w,h,d, I think a box makes sense. But same basic idea.)

  -ilia


More information about the mesa-dev mailing list