[Mesa-dev] [PATCH] mesa: Don't use memcpy() in _mesa_texstore() for depth texture data

Marek Olšák maraeo at gmail.com
Mon Jul 21 15:57:54 PDT 2014


On Tue, Jul 22, 2014 at 12:50 AM, Anuj Phogat <anuj.phogat at gmail.com> wrote:
>
>
>
> On Mon, Jul 21, 2014 at 3:27 PM, Marek Olšák <maraeo at gmail.com> wrote:
>>
>> On Tue, Jul 22, 2014 at 12:09 AM, Anuj Phogat <anuj.phogat at gmail.com>
>> wrote:
>> > On Fri, Jul 18, 2014 at 5:54 PM, Marek Olšák <maraeo at gmail.com> wrote:
>> >>
>> >> Shouldn't the function return TRUE for floating-point depth textures
>> >> only?
>> >>
>> > Depth texture data needs clamping in following two cases:
>> > 1. Float texture format supplied with signed data needs clamping to
>> > [0.0, 1.0].
>> > 2. Fixed point texture format supplied with signed data needs clamping
>> > to
>> >      [0, 2^n -1].
>> >
>> > But, all the cases except one (float texture supplied with float data)
>> > are ruled
>> > out by _mesa_format_matches_format_and_type() in
>> > _mesa_texstore_can_use_memcpy().
>> >
>> > So, I think a better place to do this check will be at end of
>> > _mesa_texstore_can_use_memcpy() function:
>> >
>> > if (baseInternalFormat == GL_DEPTH_COMPONENT &&  srcType == GL_FLOAT))
>> >    return GL_FALSE;  /* can't use memcpy */
>>
>> I think you meant:
>>
>> if ((baseInternalFormat == GL_DEPTH_COMPONENT ||
>>      baseInternalFormat == GL_DEPTH_STENCIL) &&
>>     (srcType == GL_FLOAT || srcType == GL_HALF_FLOAT ||
>>      srcType == FLOAT_32_UNSIGNED_INT_24_8_REV) &&
>>     (_mesa_get_format_datatype(dstFormat) == GL_FLOAT)
>>    return GL_FALSE;  /* can't use memcpy */
>
>
> Yes. I missed GL_DEPTH_STENCIL format and
> FLOAT_32_UNSIGNED_INT_24_8_REV data type :(.
> We can drop the checks for srcType == GL_HALF_FLOAT and
> _mesa_get_format_datatype(dstFormat) == GL_FLOAT because
> they'll be ruled out in _mesa_format_matches_format_and_type()
> function ?

Yes, indeed. I didn't take _mesa_format_matches_format_and_type() into account.

Marek


More information about the mesa-dev mailing list