[Nouveau] ddx/nv50: use drawable.bitsPerPixel to decide format

Christoph Bumiller e0425955 at student.tuwien.ac.at
Wed Dec 30 09:52:40 PST 2009


On 12/30/2009 06:37 PM, Christoph Bumiller wrote:
> On 12/29/2009 06:06 PM, Marcin Slusarz wrote:
>> On Mon, Dec 28, 2009 at 06:55:23PM +0100, Maarten Maathuis wrote:
>>> On Mon, Dec 28, 2009 at 6:37 PM, Marcin Slusarz
>>> <marcin.slusarz at gmail.com> wrote:
>>>>
>>>> ---
>>>>  src/nv50_exa.c |  155 ++++++++++++++++++++++++++++++++++++--------------------
>>>>  1 files changed, 100 insertions(+), 55 deletions(-)
>>>>
>>>> diff --git a/src/nv50_exa.c b/src/nv50_exa.c
>>>> index 1f5a4ac..54968e8 100644
>>>> --- a/src/nv50_exa.c
>>>> +++ b/src/nv50_exa.c
>>>> @@ -79,15 +79,16 @@ NV50EXA2DSurfaceFormat(PixmapPtr ppix, uint32_t *fmt)
>>>>
>>>>        switch (ppix->drawable.depth) {
>>>>        case 8 : *fmt = NV50_2D_SRC_FORMAT_R8_UNORM; break;
>>>> -       case 15: *fmt = NV50_2D_SRC_FORMAT_X1R5G5B5_UNORM; break;
>>>> -       case 16: *fmt = NV50_2D_SRC_FORMAT_R5G6B5_UNORM; break;
>>>> +       case 15:
>>>> +       case 16:
>>>> +               *fmt = NV50_2D_SRC_FORMAT_R5G6B5_UNORM;
>>>> +               break;
>>>
>>> depth 15 is R5G5B5, why this change?
>>
>> it's the only value which passes rendercheck tests
>> (rendercheck -t blend -o Src -f x1r5g5b5,r5g5b5)
>>
> This is as far as I can tell because x1r5g5b5 (XRender direct format as
> queries by rendercheck) has depth set to 16, and therefore uses case 16
> here.
*queried
> If you use the same for depth 15, the rendercheck test check succeeds,
> but doing this is wrong.
> If you check bitsPerPixel instead, this will be 15 for both x1r5g5b5
> and r5g5b5, and all looks fine then.
> 
If we e.g. copy from 15bpp to 16bpp though, can the 16th bit be alpha
instead of green ? That would be problematic.
> See the attached patch. I'm not sure if I should have changed the xv
> stuff also.
>>>>        case 24: *fmt = NV50_2D_SRC_FORMAT_X8R8G8B8_UNORM; break;
>>>>        case 30: *fmt = NV50_2D_SRC_FORMAT_A2B10G10R10_UNORM; break;
>>>>        case 32: *fmt = NV50_2D_SRC_FORMAT_A8R8G8B8_UNORM; break;
>>>>        default:
>>>>                 NOUVEAU_FALLBACK("Unknown surface format for bpp=%d\n",
>>>>                                  ppix->drawable.depth);
>>>> -                return FALSE;
>>>
>>> Why did you remove this?
>>
>> because it's unreachable, NOUVEAU_FALLBACK returns FALSE
>>  
>> _______________________________________________
>> Nouveau mailing list
>> Nouveau at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/nouveau
> 
> 
> 
> _______________________________________________
> Nouveau mailing list
> Nouveau at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/nouveau



More information about the Nouveau mailing list