On 2002.05.31 02:53 Leif Delgass wrote:
> On Thu, 30 May 2002, José Fonseca wrote:
> 
> > Leif,
> >
> > On 2002.05.30 02:02 José Fonseca wrote:
> > > ... Tomorrow I'll take a look more carefully to see if I find
> anything
> > > suspicious. ...
> >
> > I've been analyzing the diff very carefully and what I've found so far
> are
> > just some details which can be taken care later (i.e., no bugs sorry) :
> 
> I've fixed one bug already that was related to the ring tail being left
> pre-incremented (the table_end I had before wasn't).  Some of my problems
> were related to not flushing on swaps (flickering on the quake menu), but
> this may not be a new problem.  The bug that remains is that there are
> some rendering problems, seemingly random garbage polygons here and there
> in quake3.
> 
> Another thing I realized (not related to these changes) was a problem
> with
> moving a window leaving frames behind.  We need to make sure DMA is
> quiescent in the XAA sync (flush before waiting for idle) so that there
> aren't frames left in the queue with old clipping coords.  Also the
> Init/MoveBuffer functions in atidri.c aren't implemented yet (this will
> require getting XAA working).
> 
> > - This code in the OUT_RING macro
> >
> > +   if (idx > 3) idx = 0;                                   \
> > +   if (idx == DMA_COMMAND) {                               \
> > +           last_cmd = (x) & ~DMA_EOL;                      \
> > +           last_cmd_ofs = write;                           \
> > +   }                                                       \
> > +   ring[write++] = cpu_to_le32( x );                       \
> > +   idx++;                                                  \
> > +   write &= tail_mask;                                     \
> >
> >    seems unnecessary and inefficient. We dont need to bookkeep idx,
> > last_cmd ans last_cmd_ofs when writing to the ring. We just need to
> make a
> > copy of the tail in the begining, and can get everything info we need
> from
> > that in COMMIT_RING.
> >
> > - I think mach64_flush_write_combine is excessive and creates an
> excessive
> > penalty as it calls mb(). We just need to make sure that everything we
> > write goes to the physical memory, i.e., call wb() - which in the x86
> > platform is a null macro since there is no write cache. And this should
> be
> > only necessary in COMMIT_RING, as no-one else will read what we are
> > writing until toggle the continuation bit of the last descriptor.
> 
> The above code and the mb()'s are just quick hacking and testing.  I
> always assumed that flush_write_combine referred to the mtrr for the AGP
> aperture on x86, which is a kind of write cache, right?

mmm.. I really don't know that much about mtrr. Documentation/mtrr.txt 
says that it's indeed a write cache, but on the bus side, not 
processor<->memory. So I don't see what mb(), which in case of the x86 
arch is equal to rmb(), which just ensures that read operations are 
completed. The idea I have is that the memmory barriers are only good to 
force ordering in read/write operations to memmory, not buses..

> > - the RING* macros shouldn't work in number of DWORDS, but in number of
> 
> > entries, and the OUT_RING macro should take 3 (or four?) arguments.
> 
> I was thinking about that, but it seemed cleaner to have a single
> argument
> for OUT_RING.  The ADD_BUF_TO_RING is more similar to what you're
> suggesting: we could have a parameter or a register and host-data
> version.
> The ring macros come from the r128 driver and it was a quick way to get
> started, we can always tweak this stuff more to fit our needs.
> 
> > - ADVANCE_RING and COMMIT_RING should be one.
> 
> The reason for separating those was mainly because the dispatch function
> needs to advance the ring, but not "commit" it and mess with the end of
> list flags.  Also, we may need to have multiple BEGIN/OUT/ADVANCE blocks
> before a COMMIT, like when emmitting state and then emmiting a vertex
> buffer.  I think we should only have one commit per ioctl, it's a waste
> to
> move the end of list flag more that once if we don't have to.

I see.

> 
> > - Why do you call mach64_do_dma_flush( dev_priv ) in COMMIT_RING?
> 
> Again, that was just from my hacking/testing.
> 
> > - In general I have the idea that we are bookkeeping to much redundant
> > variables related with the ring, and that's prone to bugs.
> >
> 
> Are you just referring to the end of list flag stuff here, or were there
> other redundancies that you saw?

I was referring to the amount of stuff that was on the ring structure, and 
the amount of local variables in RING_LOCALS. But perhaps it's probably my 
just my first impression to a unfamiliar code.

> 
> > ...but I did found something that annoyed the most:
> >
> > - I want to play with the nice stuff you've been making! Can you
> commit,
> > plz! Pretty please! ;-)
> 
> OK, I'll try to do this soon.  I was not feeling well today so I didn't
> get much done.

No problem. I wish you get better soon.

Regards,

José Fonseca

_______________________________________________________________

Don't miss the 2002 Sprint PCS Application Developer's Conference
August 25-28 in Las Vegas -- http://devcon.sprintpcs.com/adp/index.cfm

_______________________________________________
Dri-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/dri-devel

Reply via email to