[Dri-devel] Re: COMMIT_RING patches for r128

2002-07-18 Thread Henry Worth


I've been doing some more testing. With, and without, the commit_ring
patches,  even in pci mode, I can get X to hang without too much effort
by firing up several glx demos and then x11perf. One of the glx programs
will hang holding hw locks in r128WaitForFrameCompletion() from
r128CopyBuffer(). The other glx programs are in the drmGetLock()
ioctl from one of the r128render* functions, and x11perf in select from
_XWaitForWritable().

Once the glx programs and x11perf are killed, the X server hang clears,
but any attempt to start a glx program will hang the X server in the 
same r128WaitForFrameCompletion() from r128CopyBuffer() condition on
it's first frame. A restart of X is required to reset drm.

Henry

 




---
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
___
Dri-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/dri-devel



[Dri-devel] Re: COMMIT_RING patches for r128

2002-07-18 Thread Henry Worth

Henry Worth wrote:

>
>
> BTW, I do see quite a few "128(0): Idle timed out, resetting engine..."
> being logged by r128_accel.c's R128WaitForIdle() routine when running
> x11perf with both the old and new drivers.

Tripped a different hang running xine in agp mode with XV dma disabled.
With xine running, started glxgears and X hung. Killed glxgears and kde
appeared to be restarting the desktop and then xine stuttered a few times
before X hung again. During this, the cpu monitor showed high system
cycles and lots of the following messages where being logged by 
r128_accel.c's
R128CCEGetBuffer:

(EE) R128(0): R128CCEGetBuffer: CCE GetBuffer -1002
(EE) R128(0): GetBuffer timed out, resetting engine...

And the kernel log has this a few thousand times:

kernel: [drm:r128_freelist_get] *ERROR* returning NULL!

I could kill X from a telnet session, but the screen wouldn't clear and
the kybd didn't seem responsive, had to reboot.

Introduced by the COMMIT_RING changes, an example of the sync
problems, or a bit of both? I think I've seen a few of these messages
in the past, but don't recall a flood of them.

Henry



---
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
___
Dri-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/dri-devel



Re: [Dri-devel] COMMIT_RING patches for r128

2002-07-18 Thread Henry Worth

Michel Dänzer wrote:

>On Thu, 2002-07-18 at 16:40, Keith Whitwell wrote:
>
>>Henry Worth wrote:
>>
>>>
>>I have no idea why there is a need for the RING_SPACE_TEST macro.  It's 
>>disabled in the r200 branch.
>>
>
>Besides, I've never hit the added code there.
>
Ok, I won't worry about that.

>>>The current drm r128 does not have any WAIT_UNTIL_*_IDLE macros.
>>>I assume I'm going to need at least a general idle wait to address sync
>>>issues. The only WAIT_UNTIL mask bit defined in r128_drv.h is for page
>>>flip, are there any other bits available for wait functions?
>>>
>>What does the r128 currently do to synchronize access to the framebuffer?
>>
>
>XAA handles that, and both drivers provide WaitForIdle() as the Sync
>function.
>
>>It may be that 2d & 3d are synchronized by the hardware automatically,
>>
>
>I doubt that, e.g. the texture blit ioctl also flushes the pixel cache.
>Maybe there's more to do with the PC_{,N}GUI_* registers?
>
>>but you'll always need to do something before accessing the framebuffer
>>directly.
>>
>
>I don't see where direct framebuffer access is involved when using DMA
>transfers for Xv.
>

So where to go from here? I can only spend a couple more days on this in 
the near
term, so I don't have time to deal with the NDA and digging thru the 
docs. Unless
someone else has a good recommendation, I'll try to flesh out some sync code
based on the radeon code and maybe someone else can correct the details 
later.

Henry




---
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
___
Dri-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/dri-devel



[Dri-devel] Re: COMMIT_RING patches for r128

2002-07-18 Thread Henry Worth

Michel Dänzer wrote:

>On Thu, 2002-07-18 at 09:47, Henry Worth wrote:
>
>>Henry Worth wrote:
>>
>>>Digging thru the X logs, I see that agp is failing to map the ring 
>>>buffer with
>>>this drm module. It does with kernel module built from BenH's linuxppc 
>>>dev
>>>tree, but I haven't tried the dri CVS before, so I don't know yet if 
>>>it even works
>>>without the COMMIT_RING changes. [...]
>>>
>>Decided to do a quick compile and check before calling it a night. 
>>Without the
>>patch, agp also fails to map the ring buffer. I'll take a look at merging
>>in whatever fixes are in BenH's src tree tomorrow.
>>
>
>Like http://www.penguinppc.org/~daenzer/DRI/drm-ioremapagp.diff ? :)
>

Exactly like that... AGP is mapping the ring now.

So to the results -- again this is with dual 450 G4's with SMP linux 
2.4.19-rc1-ben0,
DRI CVS from Monday on top of XFre86 2.4.0 with the Michel's XV dma patch,
indirect buffering patch,  ioremap patch, the r128 endiness patches and the
COMMIT_RING changes.

While it is still possible to hang X in any combination of PCI/AGP mode and
XV dma enabled/disabled by mixing various pairs of  XV, DRI, and concurrent
X activity, like x11perf, in general it takes more effort. When it does hang
I've yet to see a hard hang of the X server or of the system, as was 
common before.

In all hang cases the offending processes could be killed and X would 
continue,
if I was lucky enough to kill the right process, other processes would 
restart.

Previously enabling XV dma, xine starting play would almost always hang
in a very short time with SMP kernels. On occasions it did play for a 
while,
trying to move another window was extremely jerky and slow, dispite a very
low CPU load (10-15%), and would always result in an eventual hang. Hangs
almost always required a reboot to recover.

Now, xine with XV dma will play as long as there isn't much other X
activity. X remains responsive with windows moving fairly smoothly. I was
even able to run X11perf for a couple of minutes before problems occured.
But, I've yet to see a literal hang, except when starting a GLX program, and
killing the GLX program allowed xine to continue.

The problem I now see repeatedly with XV dma is that eventually X11perf  or
moving a window will cause video sync to go haywire. Xine is playing audio
and the keyboard is responsive, and I can ctl-alt-del. But video sync
does not recover when X exits or is restarted, a reboot is required to 
reset the
video card. Previously I had somethimes seen a problem like this, but never
had keyb responsiveness and attempts to recover from a telnet session 
often 
resulted in a system hang when trying to kill X or perform a shutdown.

Overall, pci mode and XV dma disabled is still the most stable mode, but agp
mode with XV dma disabled is more usable. I was able to run the Mesa
terrain demo with texture, two gears demos and x11perf in agp mode
for 20minutes, with frequent moving and raising of windows, before a
deadlock that was cleared by killing the glx processes.

BTW, I do see quite a few "128(0): Idle timed out, resetting engine..."
being logged by r128_accel.c's R128WaitForIdle() routine when running
x11perf with both the old and new drivers.


Henry




>



---
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
___
Dri-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/dri-devel



[Dri-devel] Re: COMMIT_RING patches for r128

2002-07-18 Thread Henry Worth

Henry Worth wrote:

>
> Digging thru the X logs, I see that agp is failing to map the ring 
> buffer with
> this drm module. It does with kernel module built from BenH's linuxppc 
> dev
> tree, but I haven't tried the dri CVS before, so I don't know yet if 
> it even works
> without the COMMIT_RING changes. [...]

Decided to do a quick compile and check before calling it a night. 
Without the
patch, agp also fails to map the ring buffer. I'll take a look at merging
in whatever fixes are in BenH's src tree tomorrow.

Henry




---
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
___
Dri-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/dri-devel



[Dri-devel] Re: COMMIT_RING patches for r128

2002-07-18 Thread Henry Worth

Henry Worth wrote:

>
> Michel,
>
> How do these changes for r128 COMMIT_RING look? With these I can run
> concurrent xine and glx programs in pci and agp mode with XV dma
> disabled. 

Digging thru the X logs, I see that agp is failing to map the ring 
buffer with
this drm module. It does with kernel module built from BenH's linuxppc dev
tree, but I haven't tried the dri CVS before, so I don't know yet if it 
even works
without the COMMIT_RING changes. Anyway, let me know if there are any
obvious problems/omissions in that patch.

Thanks,
Henry




---
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
___
Dri-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/dri-devel



[Dri-devel] COMMIT_RING patches for r128

2002-07-17 Thread Henry Worth


Michel,

How do these changes for r128 COMMIT_RING look? With these I can run
concurrent xine and glx programs in pci and agp mode with XV dma
disabled.

With XV dma enabled, in both pci and agp mode, I can run xine for some
time without any hangs. But startup a glx program and X will hang until I
kill the glx program, and then X and xine will recover. I guess sync is the
next issue, I have a follow-on question on that below.

The patch also includes a change to RING_SPACE_TEST..., based on
the radeon version, adding a register read fallback for determining ring
space.

The current drm r128 does not have any WAIT_UNTIL_*_IDLE macros.
I assume I'm going to need at least a general idle wait to address sync
issues. The only WAIT_UNTIL mask bit defined in r128_drv.h is for page
flip, are there any other bits available for wait functions?

Henry


diff -ur kernel.orig/r128_drv.h kernel/r128_drv.h
--- kernel.orig/r128_drv.h  Fri Jul  5 01:31:11 2002
+++ kernel/r128_drv.h   Wed Jul 17 22:02:59 2002
@@ -414,10 +414,23 @@
r128_update_ring_snapshot( ring );  \
if ( ring->space >= ring->high_mark )   \
goto __ring_space_done; \
-   DRM_UDELAY(1);  \
+   DRM_UDELAY(1);  \
}   \
+DRM_ERROR( "ring space check from memory failed, reading 
+register...\n" );  \
+   /*  \
+* If ring space check fails from RAM, try reading the  \
+*  register directly   \
+*/ \
+   ring->space = ( R128_READ( R128_PM4_BUFFER_DL_RPTR )\
+   - ring->tail ) * sizeof(u32);   \
+   \
+   if ( ring->space <= 0 ) \
+   ring->space += ring->size;  \
+   if ( ring->space >= ring->high_mark )   \
+   goto __ring_space_done; \
+   \
DRM_ERROR( "ring space check failed!\n" );  \
-   return DRM_ERR(EBUSY);  \
+   return DRM_ERR(EBUSY);  \
}   \
  __ring_space_done:\
;   \
@@ -487,11 +500,16 @@
dev_priv->ring.start,   \
write * sizeof(u32) );  \
}   \
-   r128_flush_write_combine(); \
dev_priv->ring.tail = write;\
-   R128_WRITE( R128_PM4_BUFFER_DL_WPTR, write );   \
 } while (0)
 
+
+#define COMMIT_RING() do { \
+   r128_flush_write_combine(); \
+   R128_WRITE( R128_PM4_BUFFER_DL_WPTR, dev_priv->ring.tail ); \
+} while (0)
+
+
 #define OUT_RING( x ) do { \
if ( R128_VERBOSE ) {   \
DRM_INFO( "   OUT_RING( 0x%08x ) at 0x%x\n",\
diff -ur kernel.orig/r128_state.c kernel/r128_state.c
--- kernel.orig/r128_state.cFri Jul  5 01:31:11 2002
+++ kernel/r128_state.c Wed Jul 17 18:02:19 2002
@@ -1256,6 +1256,7 @@
 */
dev_priv->sarea_priv->dirty |= R128_UPLOAD_CONTEXT | R128_UPLOAD_MASKS;
 
+   COMMIT_RING();
return 0;
 }
 
@@ -1281,6 +1282,7 @@
r128_cce_dispatch_flip( dev );
}
 
+   COMMIT_RING();
return 0;
 }
 
@@ -1340,6 +1342,7 @@
 
r128_cce_dispatch_vertex( dev, buf );
 
+   COMMIT_RING();
return 0;
 }
 
@@ -1411,6 +1414,7 @@
 
r128_cce_dispatch_indices( dev, buf, elts.start, elts.end, count );
 
+   COMMIT_RING();
return 0;
 }
 
@@ -1420,6 +1424,7 @@
drm_device_dma_t *dma = dev->dma;
drm_r128_private_t *dev_priv = dev->dev_private;
drm_r128_blit_t blit;
+   int ret;
 
LOCK_TEST_WITH_RETURN( dev );
 
@@ -1437,7 +1442,9 @@
RING_SPACE_TEST_WITH_RETURN( dev_priv );
VB_AGE_TEST_WITH_RETURN( dev_priv );
 
-   return r128_cce_dispatch_blit( dev, &blit );
+   ret = r128_cce_dispatch_blit( dev, &blit );
+   COM

[Dri-devel] Re: r128 PPC patches

2002-07-17 Thread Henry Worth

Michel Dänzer wrote:

>
>The intermediate variable isn't needed if one changes the macro argument
>from v to e.g. v0. I've now basically copied those macros from the
>radeon driver and updated the above patch to what I just committed.
>
>Thanks for your fixes!
>
Took a look at the archive, I had tried that, but it won't work because not
all of the VERTEX union's variants have the color field at the same offset ,
depending upon whether or not there is a depth field, thus the 
vi[coloroffset].
You can get rid of the intermediate with some repeated casting, but why not
just code it once and let the compiler do the work?

Henry

>



---
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
___
Dri-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/dri-devel



Re: [Dri-devel] Re: r128 PPC patches

2002-07-17 Thread Henry Worth

>
> I applied and retested it, looks good. One pedantic little change to 
> the diff
> that I missed is attached, it might avoid future problems.
>
Another version to fix a typo.

Henry


--- r128-dri-endianness.diff.orig   Wed Jul 17 12:02:48 2002
+++ r128-dri-endianness.diffWed Jul 17 12:03:34 2002
@@ -120,7 +120,7 @@
 -} while (0)
 +#define VERT_SET_RGBA( v, c )   \
 +  do {\
-+ r128_color_t *vc = (r128_color_t *)&v->ui[coloroffset]; \
++ r128_color_t *vc = (r128_color_t *)&(v)->ui[coloroffset]; \
 + vc->blue  = (c)[2];  \
 + vc->green = (c)[1];  \
 + vc->red   = (c)[0];  \



Re: [Dri-devel] Re: r128 PPC patches

2002-07-17 Thread Henry Worth

Michel Dänzer wrote:

>
>Thanks for testing. I've cleaned up the patch slightly to better fit
>into the existing code and added a kludge for HOST_BIG_ENDIAN_EN:
>
>http://www.penguinppc.org/~daenzer/DRI/r128-dri-endianness.diff
>
>Henry, if this works for you, I'll commit it.
>


I applied and retested it, looks good. One pedantic little change to the 
diff
that I missed is attached, it might avoid future problems.

I've also tested on my 500mhz G3 PowerBook 2000 (Pismo), no problems
with eliminating the HOST BE bit there, even sleep/wake work. Hadn't
tried your XV dma fix on it before, alas the speedup isn't as dramatic as
on the G4, but it does reduce dropped frames enough to eliminate most of
the flutter. Alas, while the dma/agp instabilites don't manifest as quickly
as on the SMP system, they can be tripped if I try hard enough.

Thanks,
Henry



--- r128-dri-endianness.diff.orig   Wed Jul 17 12:02:48 2002
+++ r128-dri-endianness.diffWed Jul 17 12:03:34 2002
@@ -120,7 +120,7 @@
 -} while (0)
 +#define VERT_SET_RGBA( v, c )   \
 +  do {\
-+ r128_color_t *vc = (r128_color_t *)&v->ui[coloroffset]; \
++ r128_color_t *vc = (r128_color_t *)&((v)->ui[coloroffset]; \
 + vc->blue  = (c)[2];  \
 + vc->green = (c)[1];  \
 + vc->red   = (c)[0];  \



[Dri-devel] Re: r128 PPC patches

2002-07-17 Thread Henry Worth

Michel Dänzer wrote:

>
>AGP has become very stable here since the radeon driver doesn't update
>the ring write pointer in ADVANCE_RING() but in the new COMMIT_RING().
>Seems updating it 'too often' is no good, for whatever 'too often' may
>mean.
>
Does this also involve the differences between the radeon_cp_* and 
r128_cce_*
functions involving the dirty and discard bits, and DMA_COPY_FROM_USER's?

Which versions of the kernel drivers are considered most current, dri 
CVS or
kernel.org? Or is some merging possibly needed?




---
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
___
Dri-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/dri-devel



[Dri-devel] Re: r128 PPC patches

2002-07-16 Thread Henry Worth

Henry Worth wrote:

> Henry Worth wrote:
>
>>
>> I gave the driver a quick try without the HOST_BIG_ENDIAN_EN bit
>> set and with the PACK*LE macros. And, the 2-d stuff seems to be working
>> and the textures do need the PACK*LE macros. So, perhaps the bit only
>> impacts the DMA blits used to load the texture subimages?
>>
>> If someone with the docs can confirm what that bit is suppose to do, we
>> may get be able to getaway with eliminating that bit.
>
>
> Found a big pro and con for running without that bit set--- XV! 

Ack,  I'll have to retract both the pro and con. I forgot that I was 
working
from a fresh src tree that didn't have Michel's indirect buffering and XV
dma fixes that are required for stable XV with SMP linuxppc. Stablility
with SMP linuxppc kernels requires disabling XV dma and forcing
PCI mode. With the patches performance and stability are
back where they were before.




---
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
___
Dri-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/dri-devel



[Dri-devel] Re: r128 PPC patches

2002-07-16 Thread Henry Worth

Henry Worth wrote:

>
> I gave the driver a quick try without the HOST_BIG_ENDIAN_EN bit
> set and with the PACK*LE macros. And, the 2-d stuff seems to be working
> and the textures do need the PACK*LE macros. So, perhaps the bit only
> impacts the DMA blits used to load the texture subimages?
>
> If someone with the docs can confirm what that bit is suppose to do, we
> may get be able to getaway with eliminating that bit.

Found a big pro and con for running without that bit set--- XV!

Xine playing a DVD requires 40% less cpu time on dual 450 G4's. That's
likely from reduced byte-swapping and would hold the promise of most G3's
with Rage 128's finally being able to play DVD's without dropped frames.

The con... it's very unstable and subject to server and system hangs. 
Concurrently
trying to move windows is impossibly slow and jerky, and may cause 
artifacts and
momentary (multi-second) hangs. In one case the server and system (telnet
session wouldn't respond) hung till I moved the mouse. Trying to run 
glxgears
causes an instant server hang.

For comparison, with 4.2.0 I can load up the system with makes and 
seti's to
99+% and then start xine and glxgears. And while xine is dropping a lot 
of frames,
playback has only a slight flutter and X is still responsive enough to 
fireup and
use mozilla.

BTW, I'm in forced PCI mode, which has been needed for XV and DRI to run
concurrently, but will have to give AGP mode a try.

Looks like some nasty DMA contention problems, perhaps the kernel drivers
need some compensating changes?

Henry



---
This sf.net email is sponsored by: Jabber - The world's fastest growing 
real-time communications platform! Don't just IM. Build it in! 
http://www.jabber.com/osdn/xim
___
Dri-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/dri-devel



[Dri-devel] Re: r128 PPC patches

2002-07-16 Thread Henry Worth

Michel Dänzer wrote:

>
>Thank you for breaking the radeon and mach64 drivers on big endian
>machines. ;) We've got to find a better solution here, I must confess I
>still don't understand how it can not work with PACK*LE though. Maybe
>the HOST_BIG_ENDIAN_EN bit in the DP_DATATYPE register (set in
>R128EngineInit() in the 2D driver) is interfering, causing the texture
>data to be byte-swapped in the HOST_DATA registers? If so, your changes
>should not be really correct for 16 bit anyway. I've been there while
>playing with the various possibilities of fixing endianness in the
>radeon driver, it looked mostly good but e.g. the floor texture in
>armagetron showed the problem.
>

I gave the driver a quick try without the HOST_BIG_ENDIAN_EN bit
set and with the PACK*LE macros. And, the 2-d stuff seems to be working
and the textures do need the PACK*LE macros. So, perhaps the bit only
impacts the DMA blits used to load the texture subimages?

If someone with the docs can confirm what that bit is suppose to do, we
may get be able to getaway with eliminating that bit.




---
This sf.net email is sponsored by: Jabber - The world's fastest growing 
real-time communications platform! Don't just IM. Build it in! 
http://www.jabber.com/osdn/xim
___
Dri-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/dri-devel



[Dri-devel] Re: r128 PPC patches

2002-07-16 Thread Henry Worth

Michel Dänzer wrote:

>On Wed, 2002-07-17 at 02:10, Henry Worth wrote:
>
>>Attached are patches for r128 on ppc. Rather little change to the r128 code
>>was needed once I gave up on the char arrays for the vertex colors, and
>>embraced the hw specific ordered named fields provided in the *_color_t
>>provided by t_dd_vertex.h.
>>
>>1) Revert PACK*LE from texutil.c as per previous emails.
>>
>
>Thank you for breaking the radeon and mach64 drivers on big endian
>machines. ;) We've got to find a better solution here, I must confess I
>still don't understand how it can not work with PACK*LE though. Maybe
>the HOST_BIG_ENDIAN_EN bit in the DP_DATATYPE register (set in
>R128EngineInit() in the 2D driver) is interfering, causing the texture
>data to be byte-swapped in the HOST_DATA registers? If so, your changes
>should not be really correct for 16 bit anyway. I've been there while
>playing with the various possibilities of fixing endianness in the
>radeon driver, it looked mostly good but e.g. the floor texture in
>armagetron showed the problem.
>
You're welcome.

At least with the mesa demos it works the same in 16 and 32 bpp... I
did see some oddness in 16bpp before fixing the copies in the t_dd_vbtmp.h
emit funcs.

I don't have the HW docs, so someone else will have to address that. Any
byteswapping at that level would have to be aware of the texel size or
it'd also be swapping sub-32bpp texels out of order.

But, if it is due to a hw capability, then the sw arch needs to handle that,
i.e. make the PACK*LE configurable. Which would probably mean texutil
would need to be compiled at the driver level, rather than the common level.




---
This sf.net email is sponsored by: Jabber - The world's fastest growing 
real-time communications platform! Don't just IM. Build it in! 
http://www.jabber.com/osdn/xim
___
Dri-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/dri-devel



Re: [Dri-devel] r128 textures

2002-07-16 Thread Henry Worth

Leif Delgass wrote:

>On 17 Jul 2002, Michel Dänzer wrote:
>
I just updated to today's build and texture colors look fine on r128 in
x86.  Also, we had reports that the changes made in Mesa on the trunk
(which we merged into the mach64 branch) fixed textures on ppc for mach64,
which has a choose texture function based on r128.

>>>Since the merge, the radeon PPC fixes added an additional swap in the 
>>>texture path for BE systems.
>>>
>>If I understand correctly, the endianness fixes are the Mesa changes
>>Leif referred to.
>>
>
>Right.  The merge from the trunk to the mach64 branch was done June 26 -- 
>after the endianess fixes.
>
1> I can find no extra byte swapping being done to textures in the r128 
code and
 dword swaps at later point in the pipeline would break 16 and 8 bpp 
textures.

2> The r128 texture code works without PACK*LE works on  both LE and BE
  systems in both 32bpp and 16bpp. None of the code I had to change 
except
  the PACK*LE would affect textures.

3> Any change that I can see to make to work with the PACK*LE would have
  to be conditional on endiness to not break x86. But that would be 
redundant!

4> Something is wrong, but where?
 
 




---
This sf.net email is sponsored by: Jabber - The world's fastest growing 
real-time communications platform! Don't just IM. Build it in! 
http://www.jabber.com/osdn/xim
___
Dri-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/dri-devel



[Dri-devel] r128 PPC patches

2002-07-16 Thread Henry Worth


Attached are patches for r128 on ppc. Rather little change to the r128 code
was needed once I gave up on the char arrays for the vertex colors, and
embraced the hw specific ordered named fields provided in the *_color_t
provided by t_dd_vertex.h.

1) Revert PACK*LE from texutil.c as per previous emails.

2) t_dd_vbtmp.h has color assignments in the emit functions that use
char arrays for non-RGBA without attention to endiness. Changed
to use the correctly ordered named fields from the t_dd_vertex.h 
definition
of the hw vertex color_t. Added VERTEX_COLOR_T macro so hw
driver can pass in its hw vertex *_color_t; so the assignments can be
made in correct order. Added macro definition to *_vb.c of the
various drivers.

3) Changed r128_tris.c VERT_* macros for t_dd_tritmp.h to use
the named fields instead of an char array.

4) Added some casts to r128_ioctl.c to eliminate compile warnings.




r128-ppc-diffs.gz
Description: GNU Zip compressed data


Re: [Dri-devel] r128 textures

2002-07-16 Thread Henry Worth

Leif Delgass wrote:

>On Tue, 16 Jul 2002, Henry Worth wrote:
>
>>Have there been any reports of r128 texture color problems on x86 with
>>recent CVS? Or that it even works?
>>
>
>I just updated to today's build and texture colors look fine on r128 in
>x86.  Also, we had reports that the changes made in Mesa on the trunk
>(which we merged into the mach64 branch) fixed textures on ppc for mach64,
>which has a choose texture function based on r128.
>
Since the merge, the radeon PPC fixes added an additional swap in the 
texture path for BE systems. But, the texutil code already appear
to have been endian aware and the radeon patches also appear to 
be fighting the endiness, and color ordering, neutral formating
in tnl_dd_vertex.h by using arrays instead of the named color fields. 

Since x86 r128 is working, I'm going to prep my patches with the 
PACK*LE changes reverted.







---
This sf.net email is sponsored by: Jabber - The world's fastest growing 
real-time communications platform! Don't just IM. Build it in! 
http://www.jabber.com/osdn/xim
___
Dri-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/dri-devel



[Dri-devel] r128 textures

2002-07-16 Thread Henry Worth


I'm in the process of finishing up some patches for r128 on PPC. One
problem I've run into that conflicts with the radeon PPC fixes is
the choosing and loading of textures. For radeon the PACK_COLOR*
macros in extra/Mesa/src/texutil.c were changed to PACK_COLOR*LE
versions. With the *LE versions in the colors are not ordered correctly
for r128 on PPC .

The problem appears that the r128 chooser is selecting ARGB textures
which when swapped on transfer would be the required BGRA format.
But on x86 they whouldn't get swapped and should be resulting in incorrect
texture colors on x86.

I suspect the chooser code was  cut-n-pasted from radeon and not changed
to reflect the r128's BGRA mode. I intend to try reconfiguring the chooser
if no one sees a problem with that. But first I'd like to know:

Do the exisiting texture generators support a full set of BGRA formats?

Have there been any reports of r128 texture color problems on x86 with
recent CVS? Or that it even works?

Henry





---
This sf.net email is sponsored by: Jabber - The world's fastest growing 
real-time communications platform! Don't just IM. Build it in! 
http://www.jabber.com/osdn/xim
___
Dri-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/dri-devel