[Mesa-dev] [PATCH] util/primconvert: Avoid point arithmetic; apply offset on all cases.

Jose Fonseca jfonseca at vmware.com
Fri Dec 5 06:29:18 PST 2014


On 05/12/14 14:18, Ilia Mirkin wrote:
> On Fri, Dec 5, 2014 at 9:16 AM, Jose Fonseca <jfonseca at vmware.com> wrote:
>> From: José Fonseca <jfonseca at vmware.com>
>>
>> Matches what u_vbuf_get_minmax_index() does.
>
> Hm, nouveau nv50 (and probably nvc0) does:
>
>        if (ib->buffer) {
>           nv50->idxbuf.offset = ib->offset;
>           BCTX_REFN(nv50->bufctx_3d, INDEX, nv04_resource(ib->buffer), RD);
>        } else {
>           nv50->idxbuf.user_buffer = ib->user_buffer;
>        }
>
> Is the offset really supposed to be applied to the user buffer?

Nouveau is the odd ball here, as softpipe/llvmpipe apply it:

   src/gallium/drivers/llvmpipe/lp_draw_arrays.c
   src/gallium/drivers/softpipe/sp_draw_arrays.c

 > I
 > figured the point of the offset was that you couldn't provide an
 > offset into a pipe_resource otherwise, while with a user ptr, you can
 > just add it in yourself...

True.  Still it's better to apply these things uniformly, because the 
user vs buffer pointer is a distinction which rapidly disappears inside 
a pipe driver. (E.g, the driver can promote the user pointer to a buffer 
internally, and then the information of whether offset should or not be 
taken in account gets lost)

Jose

>> ---
>>   src/gallium/auxiliary/indices/u_primconvert.c | 3 ++-
>>   1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/src/gallium/auxiliary/indices/u_primconvert.c b/src/gallium/auxiliary/indices/u_primconvert.c
>> index 4632781..eba1f9e 100644
>> --- a/src/gallium/auxiliary/indices/u_primconvert.c
>> +++ b/src/gallium/auxiliary/indices/u_primconvert.c
>> @@ -137,8 +137,9 @@ util_primconvert_draw_vbo(struct primconvert_context *pc,
>>         src = ib->user_buffer;
>>         if (!src) {
>>            src = pipe_buffer_map(pc->pipe, ib->buffer,
>> -                               PIPE_TRANSFER_READ, &src_transfer) + ib->offset;
>> +                               PIPE_TRANSFER_READ, &src_transfer);
>>         }
>> +      src = (const uint8_t *)src + ib->offset;
>>      }
>>      else {
>>         u_index_generator(pc->primtypes_mask,
>> --
>> 2.1.0
>>



More information about the mesa-dev mailing list