[Mesa-dev] wider registers in llvmpipe

Stéphane Marchesin stephane.marchesin at gmail.com
Mon Oct 8 00:59:34 PDT 2012


On Sun, Oct 7, 2012 at 3:37 PM, Stéphane Marchesin
<stephane.marchesin at gmail.com> wrote:
> On Wed, Jul 18, 2012 at 8:35 AM, Jose Fonseca <jfonseca at vmware.com> wrote:
>>
>>
>> ----- Original Message -----
>>> Am 18.07.2012 07:11, schrieb Marek Olšák:
>>> > On Wed, Jul 18, 2012 at 1:58 AM, Roland Scheidegger
>>> > <sroland at vmware.com> wrote:
>>> >> Am 17.07.2012 23:49, schrieb Stéphane Marchesin:
>>> >>> On Mon, Jul 16, 2012 at 11:43 AM, Jose Fonseca
>>> >>> <jfonseca at vmware.com> wrote:
>>> >>>> FYI, I've just pushed a branch named llvmpipe-wider-regs, which
>>> >>>> allows llvmpipe to leverage SIMD registers wider than 128bits.
>>> >>>>
>>> >>>> Unfortunately, performance-wise this doesn't change much, as
>>> >>>> llvmpipe performance is dominated by integer SIMD instructions,
>>> >>>> whereas currently the AVX instruction set currently only
>>> >>>> supports floating SIMD instructions.  Actually, often things
>>> >>>> will get slightly slower, as there are considerable overheads
>>> >>>> in piecing together the 256 floating point code paths and
>>> >>>> 128-bit integer code paths.
>>> >>>>
>>> >>>> The benefit for this change is foremost architectural: llvmpipe
>>> >>>> now makes less assumptions regarding the number of
>>> >>>> pixels/quads/etc that fit into a hardware register, a
>>> >>>> flexibility which will be necessary to get things like
>>> >>>> per-pixel LOD working properly.
>>> >>>>
>>> >>>> This barely touch files outside gallivm/draw/llvmpipe modules. I
>>> >>>> haven't tested i915g, r300g, so let me know if there are
>>> >>>> regressions / concerns. I'd like to merge this into master
>>> >>>> soon.
>>> >>>
>>> >>>
>>> >>> It regresses the following on i915g (and I suspect it will
>>> >>> regress on
>>> >>> llvmpipe also):
>>> >>> draw-vertices pass -> abort
>>> >>> draw-vertices-half-float pass -> crash
>>> >>> draw-vertices-half-float-user pass -> crash
>>> >>> draw-vertices-user pass -> abort
>>> >>>
>>> >>> The machine in question doesn't have AVX (or llvm 3.1 for that
>>> >>> matter).
>>> >>
>>> >>
>>> >> I've tested this with both llvm 3.1 and 2.9, with and without avx
>>> >> and
>>> >> draw-vertices and draw-vertices-half-float always pass with
>>> >> llvmpipe.
>>> >> I don't see the other two tests (draw-vertices-half-float-user and
>>> >> draw-vertices-user) in piglit.
>>> >
>>> > Those are the same tests but with the first parameter being "user".
>>> > The test names in all.tests do not necessarily have to match the
>>> > executable filenames.
>>>
>>> Ok. These pass too here with llvmpipe.
>>
>> I can't reproduce the failures here neither, nor with softpipe + draw llvm
>>
>> I also considered that this could be 32bits specific, but that doesn't seem to be the case.  It seems i915g specific AFAICT.
>>
>> Stephane I'll gonna need to to provide more details (in particular, stack dump of the crashes, dumps w/ GALLIVM_DEBUG=tgsi,ir,asm environment var before/after this change, see if not advertise half float solve the issue) to pin point this. If you wanna open a bug and follow this on fdo that's fine by me.
>>
>
> Unearthing an old item now that I have time for it. I can reproduce
> with llvmpipe on the same machine, hopefully the backtrace rings a
> bell, I'll also try to dig further into it. Running draw-vertices in
> gdb I get:

So I dug into it a bit more, and this seems to be an LLVM 2.8 issue.
LLVM 3.1 works fine here. I think we should just disallow LLVM <= 2.8.

Stéphane


More information about the mesa-dev mailing list