The current mach64 (mesa 4.x) driver doesn't seem to be doing z depth
test. After assuring that the mach64's z control register was being set
properly I realized that the vertex buffers had the z in a [0,1] scale
while the primitive drawing functions expected them in a a [0,0xffff].
The previous mach64 (mesa 3.x) driver defined the coord setup as
#define COORD \
do { \
GLfloat *win = VB->Win.data[i]; \
v->v.x = win[0] + xoffset; \
v->v.y = - win[1] + yoffset; \
v->v.z = win[2]; \
v->v.rhw = win[3]; \
} while (0)
while for example the R128 defined as
#define COORD \
do { \
GLfloat *win = VB->Win.data[i]; \
v->v.x = win[0] + xoffset; \
v->v.y = - win[1] + yoffset; \
v->v.z = depth_scale * win[2]; \
v->v.rhw = v->v.rhw2 = win[3]; \
} while (0)
So I removed the 'depth_scale' in calculation of hw_viewport, in
mach64CalcViewport, and everything worked fine.
But I still don't understand what's the relationship between *CalcViewport
and the viewport calculations made in _mesa_set_viewport. At
_mesa_set_viewport, for instance, there is a comment that says "This is
really driver-specific and should be maintained elsewhere if at all.". It
seems that _mesa_set_viewport sets the scale to [0,MaxDepth], but the
*CalcViewport in most DRI drivers "undo" this scaling, rescaling to a
[0,1].
My question is why the other DRI drivers do this (don't the chips expect
the depths in integer format as well?) and in what depth scale should the
vertex buffers be after all?
This understanding would be important because the current mach64 triangle
setup engine is able to specify the z values in 16.1 format, but only the
16 integer part is being used, so I would like to implement that as well.
Regards,
Jos� Fonseca
_______________________________________________
Dri-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/dri-devel