[Mesa-dev] [PATCH] gallium: move clear paths from rgba to a pointer to a color union

Dave Airlie airlied at gmail.com
Thu Sep 15 10:11:35 PDT 2011


>>
>> This moves the gallium interface for clears from using a pointer to 4 floats
>> to a pointer to a union of float/unsigned/int values. This is step one
>> in allowing integer clears. I've tried to build as many drivers/pieces
>> as I could, but I think I missed a couple, (vega for instance seems to
>> need a bit more work).
>
>> diff --git a/src/gallium/include/pipe/p_context.h b/src/gallium/include/pipe/p_context.h
>> index 49c12ec..b2d5f95 100644
>> --- a/src/gallium/include/pipe/p_context.h
>> +++ b/src/gallium/include/pipe/p_context.h
>> @@ -63,7 +63,7 @@ struct pipe_vertex_element;
>>  struct pipe_video_buffer;
>>  struct pipe_video_decoder;
>>  struct pipe_viewport_state;
>> -
>> +union pipe_color_union;
>>
>>  /**
>>   * Gallium rendering context.  Basically:
>> @@ -281,23 +281,23 @@ struct pipe_context {
>>      * The entire buffers are cleared (no scissor, no colormask, etc).
>>      *
>>      * \param buffers  bitfield of PIPE_CLEAR_* values.
>> -    * \param rgba  pointer to an array of one float for each of r, g, b, a.
>> +    * \param color  pointer to a union of fiu array for each of r, g, b, a.
>>      * \param depth  depth clear value in [0,1].
>>      * \param stencil  stencil clear value
>>      */
>>     void (*clear)(struct pipe_context *pipe,
>>                   unsigned buffers,
>> -                 const float *rgba,
>> +                 const union pipe_color_union *color,
>>                   double depth,
>>                   unsigned stencil);
>>
>>     /**
>>      * Clear a color rendertarget surface.
>> -    * \param rgba  pointer to an array of one float for each of r, g, b, a.
>> +    * \param color  pointer to an union of fiu array for each of r, g, b, a.
>>      */
>>     void (*clear_render_target)(struct pipe_context *pipe,
>>                                 struct pipe_surface *dst,
>> -                               const float *rgba,
>> +                               const union pipe_color_union *color,
>>                                 unsigned dstx, unsigned dsty,
>>                                 unsigned width, unsigned height);
>>
>
> Hmm is it really necessary to change the clear function?
> This is sort of a legacy clear, and neither OpenGL nor d3d9(*) allow you
> to use anything but floats when specifying clear color.
> (Yes I know mesa / mesa state tracker currently use clear and not
> clear_render_target/clear_depth_stencil even for the glClearBufferxx
> functions right now.)

You should know better by now than to claim GL can't do something
stupid or insane.

EXT_gpu_shader4 allows this, I even fixed all the mesa entry points last week.

glClearColorIiEXT

Dave.


More information about the mesa-dev mailing list