[Mesa-dev] [PATCH] mesa: Add a helper function for shared code in get_tex_rgba_{un}compressed

Anuj Phogat anuj.phogat at gmail.com
Wed Jun 8 22:42:12 UTC 2016


On Wed, Jun 8, 2016 at 3:34 PM, Brian Paul <brianp at vmware.com> wrote:
> On 06/08/2016 12:15 PM, Anuj Phogat wrote:
>>
>> On Mon, Dec 28, 2015 at 10:46 AM, Anuj Phogat <anuj.phogat at gmail.com>
>> wrote:
>>>
>>> Signed-off-by: Anuj Phogat <anuj.phogat at gmail.com>
>>> ---
>>>   src/mesa/main/texgetimage.c | 83
>>> +++++++++++++++++++++------------------------
>>>   1 file changed, 38 insertions(+), 45 deletions(-)
>>>
>>> diff --git a/src/mesa/main/texgetimage.c b/src/mesa/main/texgetimage.c
>>> index b273aaa..4399803 100644
>>> --- a/src/mesa/main/texgetimage.c
>>> +++ b/src/mesa/main/texgetimage.c
>>> @@ -265,6 +265,40 @@ get_tex_ycbcr(struct gl_context *ctx, GLuint
>>> dimensions,
>>>      }
>>>   }
>>>
>>> +/* Depending on the base format involved we may need to apply a rebase
>>> + * transform (for example: if we download to a Luminance format we want
>>> + * G=0 and B=0).
>>> + */
>>> +
>
>
> How about a doxygen-style comment:
>
> /**
>  * Depending...
>  */
>
> And remove the empty line between the comment and the function.
>
>>> +static bool
>>> +teximage_needs_rebase(mesa_format texFormat, GLenum baseFormat,
>>> +                      bool is_compressed, uint8_t *rebaseSwizzle)
>>> +{
>>> +   bool needsRebase = false;
>>> +
>>> +   if (baseFormat == GL_LUMINANCE ||
>>> +       baseFormat == GL_INTENSITY) {
>>> +      needsRebase = true;
>>> +      rebaseSwizzle[0] = MESA_FORMAT_SWIZZLE_X;
>>> +      rebaseSwizzle[1] = MESA_FORMAT_SWIZZLE_ZERO;
>>> +      rebaseSwizzle[2] = MESA_FORMAT_SWIZZLE_ZERO;
>>> +      rebaseSwizzle[3] = MESA_FORMAT_SWIZZLE_ONE;
>>> +   } else if (baseFormat == GL_LUMINANCE_ALPHA) {
>>> +      needsRebase = true;
>>> +      rebaseSwizzle[0] = MESA_FORMAT_SWIZZLE_X;
>>> +      rebaseSwizzle[1] = MESA_FORMAT_SWIZZLE_ZERO;
>>> +      rebaseSwizzle[2] = MESA_FORMAT_SWIZZLE_ZERO;
>>> +      rebaseSwizzle[3] = MESA_FORMAT_SWIZZLE_W;
>>> +   } else if (!is_compressed && (baseFormat !=
>>> +               _mesa_get_format_base_format(texFormat))) {
>
>
> I think I'd break the line after the && instead of across the !=
>
>
>
>>> +      needsRebase =
>>> +         _mesa_compute_rgba2base2rgba_component_mapping(baseFormat,
>>> +                                                        rebaseSwizzle);
>>> +   }
>>> +
>>> +   return needsRebase;
>>> +}
>>> +
>>>
>>>   /**
>>>    * Get a color texture image with decompression.
>>> @@ -319,26 +353,8 @@ get_tex_rgba_compressed(struct gl_context *ctx,
>>> GLuint dimensions,
>>>         }
>>>      }
>>>
>>> -   /* Depending on the base format involved we may need to apply a
>>> rebase
>>> -    * transform (for example: if we download to a Luminance format we
>>> want
>>> -    * G=0 and B=0).
>>> -    */
>>> -   if (baseFormat == GL_LUMINANCE ||
>>> -       baseFormat == GL_INTENSITY) {
>>> -      needsRebase = true;
>>> -      rebaseSwizzle[0] = MESA_FORMAT_SWIZZLE_X;
>>> -      rebaseSwizzle[1] = MESA_FORMAT_SWIZZLE_ZERO;
>>> -      rebaseSwizzle[2] = MESA_FORMAT_SWIZZLE_ZERO;
>>> -      rebaseSwizzle[3] = MESA_FORMAT_SWIZZLE_ONE;
>>> -   } else if (baseFormat == GL_LUMINANCE_ALPHA) {
>>> -      needsRebase = true;
>>> -      rebaseSwizzle[0] = MESA_FORMAT_SWIZZLE_X;
>>> -      rebaseSwizzle[1] = MESA_FORMAT_SWIZZLE_ZERO;
>>> -      rebaseSwizzle[2] = MESA_FORMAT_SWIZZLE_ZERO;
>>> -      rebaseSwizzle[3] = MESA_FORMAT_SWIZZLE_W;
>>> -   } else {
>>> -      needsRebase = false;
>>> -   }
>>> +   needsRebase = teximage_needs_rebase(texFormat, baseFormat, true,
>>> +                                       rebaseSwizzle);
>>>
>>>      srcStride = 4 * width * sizeof(GLfloat);
>>>      dstStride = _mesa_image_row_stride(&ctx->Pack, width, format, type);
>>> @@ -423,31 +439,8 @@ get_tex_rgba_uncompressed(struct gl_context *ctx,
>>> GLuint dimensions,
>>>      bool needsRebase;
>>>      void *rgba = NULL;
>>>
>>> -   /* Depending on the base format involved we may need to apply a
>>> rebase
>>> -    * transform (for example: if we download to a Luminance format we
>>> want
>>> -    * G=0 and B=0).
>>> -    */
>>> -   if (texImage->_BaseFormat == GL_LUMINANCE ||
>>> -       texImage->_BaseFormat == GL_INTENSITY) {
>>> -      needsRebase = true;
>>> -      rebaseSwizzle[0] = MESA_FORMAT_SWIZZLE_X;
>>> -      rebaseSwizzle[1] = MESA_FORMAT_SWIZZLE_ZERO;
>>> -      rebaseSwizzle[2] = MESA_FORMAT_SWIZZLE_ZERO;
>>> -      rebaseSwizzle[3] = MESA_FORMAT_SWIZZLE_ONE;
>>> -   } else if (texImage->_BaseFormat == GL_LUMINANCE_ALPHA) {
>>> -      needsRebase = true;
>>> -      rebaseSwizzle[0] = MESA_FORMAT_SWIZZLE_X;
>>> -      rebaseSwizzle[1] = MESA_FORMAT_SWIZZLE_ZERO;
>>> -      rebaseSwizzle[2] = MESA_FORMAT_SWIZZLE_ZERO;
>>> -      rebaseSwizzle[3] = MESA_FORMAT_SWIZZLE_W;
>>> -    } else if (texImage->_BaseFormat !=
>>> -               _mesa_get_format_base_format(texFormat)) {
>>> -      needsRebase =
>>> -
>>> _mesa_compute_rgba2base2rgba_component_mapping(texImage->_BaseFormat,
>>> -                                                        rebaseSwizzle);
>>> -    } else {
>>> -      needsRebase = false;
>>> -    }
>>> +   needsRebase = teximage_needs_rebase(texFormat, texImage->_BaseFormat,
>>> false,
>>> +                                       rebaseSwizzle);
>>>
>>>      /* Describe the dst format */
>>>      dst_is_integer = _mesa_is_enum_format_integer(format);
>>> --
>>> 2.5.0
>>>
>>
>> Anyone want to review this old patch? It still applies cleanly on master.
>
>
> Reviewed-by: Brian Paul <brianp at vmware.com>

Thanks for the review Brian. I'll push the patch with suggested changes.


More information about the mesa-dev mailing list