On Mon, Aug 3, 2015 at 1:31 PM, Hans de Goede <hdego...@redhat.com> wrote:
> Hi,
>
>
> On 03-08-15 17:36, Ilia Mirkin wrote:
>>
>> On Mon, Aug 3, 2015 at 9:02 AM, Hans de Goede <hdego...@redhat.com> wrote:
>>>
>>> Hi,
>>>
>>> On 30-07-15 16:09, Ilia Mirkin wrote:
>>>>
>>>>
>>>> FWIW this is a fail on nv50+ as well. See for example
>>>> https://bugs.freedesktop.org/show_bug.cgi?id=91445
>>>>
>>>> My suspicion is that this is due to the lack of PUSH_KICK in the *Done
>>>> exa handlers -- works fine with DRI2, but DRI3 has no synchronization
>>>> and so the commands never get flushed out. Easily verified by sticking
>>>> PUSH_KICK's everywhere.
>>>
>>>
>>>
>>> I do not believe that that is the problem, in my case it clearly
>>> seems to be a pitch / swizzle problem rather then a synchronizarion
>>> problem, here is what my desktop with gnome shell looks like when
>>> using DRI2:
>>>
>>> https://fedorapeople.org/~jwrdegoede/nv46-gnome-shell-good.jpg
>>>
>>> And this is what it looks like when using DRI3:
>>>
>>> https://fedorapeople.org/~jwrdegoede/nv46-gnome-shell-bad.jpg
>>>
>>> The DRI2 screenshot is made with Mario's 2 patches on top of
>>> current master:
>>>
>>> http://lists.freedesktop.org/archives/nouveau/2015-July/021740.html
>>> http://lists.freedesktop.org/archives/nouveau/2015-July/021741.html
>>>
>>> And then adding Option "DRI" "2" to xorg.conf.
>>
>>
>> His patches should have defaulted it to DRI 2 I think, so this is
>> unnecessary. In fact you should have had to say "DRI" "3" to get DRI3
>> with his patches.
>>   --
>>>
>>>
>>> I've also tried disabling EXA using Option "AccelMethod" "none",
>>> but that seems to also automatically disable all DRI, leading to
>>> software rendering.
>>>
>>> I discussed this with Ben this morning and he suggested that this
>>> is likely a Mesa issue since with DRI3 mesa rather then the ddx
>>> allocs the surfaces. I've tried disabling swizzling in the
>>> mesa code by forcing nv30_miptree_create() to always take
>>> the code path for linear textures, but that leads to the exact
>>> same result as before that change.
>>
>>
>> Ah yes. Very different problem indeed. I actually suspect it has to do
>> with swizzling. Look at the white pattern of the moon -- it's all in a
>> line. That means that it expected some locality and instead it got
>> drawn all on a line. If it were merely a stride problem, I'd expect to
>> see strips of the moon below and offset from one another.
>>
>> So... take a look at nv30_miptree_from_handle -- I wonder if it can
>> now receive swizzled textures where it couldn't before.
>
>
> Ok, that does go in the direction I am expecting the problem to be,
> but I'm afraid I'm going to need a bit more guidance, what exactly
> am I looking for in that function / which "knobs" should I try to
> vary / play with to maybe fix this ?

Unfortunately this is playing near (or past) the limits of my
knowledge as well. My understanding is that DRI3 passes pixmaps around
with dma-buf, aka "bo_from_handle". DRI2 uses some other mechanism
which is not that (I think it just copies stuff around).

Now on nv50+, bo's have "tile flags" (and memtype and probably other
annoyances). The tile flags indicate the specific tiling mechanism
used on that bo (i.e. do you do 32x32 tiles? 32x64? etc). Take a look
at the nouveau_bo_new() call in nv50_miptree.c -- note how it takes a
"bo config" argument. This bo config can then later be retrieved using
some other syscall.

However on nv30 there appears to not be any such thing. The
nouveau_bo_new call just passes in NULL for creating the bo, which
means that there's no way to recover the "are you swizzled"
information after-the-fact.

Presumably you should create a "nv04" bo config section in the union,
and just pass the single "swizzled" bit through. I'm not sure what, if
anything, is required on the kernel side for that. I don't think
there's any optionality in how the swizzling is done for pre-nv50.

Note that in the nv30_miptree logic, mt->swizzled implies that
mt->uniform_pitch = 0, but the level pitch is set "properly" (again,
see nv30_miptree_create).

Hope this sheds some light and doesn't cause you to go in the wrong
direction -- please take everything I say with a grain of salt -- I'm
often a bit off on some of the details.

Cheers,

  -ilia
_______________________________________________
Nouveau mailing list
Nouveau@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/nouveau

Reply via email to