radeon/r200/r300: fix span code for depth reading.

makes the maskedClear test work
This commit is contained in:
Dave Airlie 2009-02-11 02:41:11 +10:00
parent 3e4d0c2a5d
commit 4c36282ef9
2 changed files with 20 additions and 24 deletions

View file

@ -61,9 +61,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#define LOCAL_DEPTH_VARS \
struct radeon_renderbuffer *rrb = (void *) rb; \
const __DRIdrawablePrivate *dPriv = rrb->dPriv; \
const GLuint bottom = dPriv->h - 1; \
GLuint xo = dPriv->x; \
GLuint yo = dPriv->y;
const GLuint bottom = dPriv->h - 1;
#define LOCAL_STENCIL_VARS LOCAL_DEPTH_VARS
@ -118,10 +116,10 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#define VALUE_TYPE GLushort
#define WRITE_DEPTH( _x, _y, d ) \
*(GLushort *)radeon_ptr(rrb, _x + xo, _y + yo) = d
*(GLushort *)radeon_ptr(rrb, _x, _y) = d
#define READ_DEPTH( d, _x, _y ) \
d = *(GLushort *)radeon_ptr(rrb, _x + xo, _y + yo)
d = *(GLushort *)radeon_ptr(rrb, _x, _y)
#define TAG(x) radeon##x##_z16
#include "depthtmp.h"
@ -133,7 +131,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#define WRITE_DEPTH( _x, _y, d ) \
do { \
GLuint *_ptr = (GLuint*)radeon_ptr32(rrb, _x + xo, _y + yo); \
GLuint *_ptr = (GLuint*)radeon_ptr32(rrb, _x, _y); \
GLuint tmp = *_ptr; \
tmp &= 0xff000000; \
tmp |= ((d) & 0x00ffffff); \
@ -142,7 +140,7 @@ do { \
#define READ_DEPTH( d, _x, _y ) \
do { \
d = (*(GLuint*)(radeon_ptr32(rrb, _x + xo, _y + yo)) & 0x00ffffff); \
d = (*(GLuint*)(radeon_ptr32(rrb, _x, _y)) & 0x00ffffff); \
}while(0)
#define TAG(x) radeon##x##_z24_s8
@ -157,7 +155,7 @@ do { \
*/
#define WRITE_STENCIL( _x, _y, d ) \
do { \
GLuint *_ptr = (GLuint*)radeon_ptr32(rrb, _x + xo, _y + yo); \
GLuint *_ptr = (GLuint*)radeon_ptr32(rrb, _x, _y); \
GLuint tmp = *_ptr; \
tmp &= 0x00ffffff; \
tmp |= (((d) & 0xff) << 24); \
@ -166,7 +164,7 @@ do { \
#define READ_STENCIL( d, _x, _y ) \
do { \
GLuint *_ptr = (GLuint*)radeon_ptr32(rrb, _x + xo, _y + yo); \
GLuint *_ptr = (GLuint*)radeon_ptr32(rrb, _x, _y); \
GLuint tmp = *_ptr; \
tmp &= 0xff000000; \
d = tmp >> 24; \

View file

@ -68,9 +68,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#define LOCAL_DEPTH_VARS \
struct radeon_renderbuffer *rrb = (void *) rb; \
const __DRIdrawablePrivate *dPriv = rrb->dPriv; \
const GLuint bottom = dPriv->h - 1; \
GLuint xo = dPriv->x; \
GLuint yo = dPriv->y;
const GLuint bottom = dPriv->h - 1;
#define LOCAL_STENCIL_VARS LOCAL_DEPTH_VARS
@ -109,10 +107,10 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#define VALUE_TYPE GLushort
#define WRITE_DEPTH( _x, _y, d ) \
*(GLushort *)radeon_ptr(rrb, _x + xo, _y + yo) = d
*(GLushort *)radeon_ptr(rrb, _x, _y) = d
#define READ_DEPTH( d, _x, _y ) \
d = *(GLushort *)radeon_ptr(rrb, _x + xo, _y + yo)
d = *(GLushort *)radeon_ptr(rrb, _x, _y)
#define TAG(x) radeon##x##_z16
#include "depthtmp.h"
@ -127,7 +125,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#ifdef COMPILE_R300
#define WRITE_DEPTH( _x, _y, d ) \
do { \
GLuint offset = radeon_mba_z32( drb, _x + xo, _y + yo ); \
GLuint offset = radeon_mba_z32( drb, _x, _y ); \
GLuint tmp = *(GLuint *)(buf + offset); \
tmp &= 0x000000ff; \
tmp |= ((d << 8) & 0xffffff00); \
@ -136,7 +134,7 @@ do { \
#else
#define WRITE_DEPTH( _x, _y, d ) \
do { \
GLuint *_ptr = (GLuint*)radeon_ptr32(rrb, _x + xo, _y + yo); \
GLuint *_ptr = (GLuint*)radeon_ptr32(rrb, _x, _y); \
GLuint tmp = *_ptr; \
tmp &= 0xff000000; \
tmp |= ((d) & 0x00ffffff); \
@ -147,14 +145,14 @@ do { \
#ifdef COMPILE_R300
#define READ_DEPTH( d, _x, _y ) \
do { \
d = (*(GLuint *)(buf + radeon_mba_z32( drb, _x + xo, \
_y + yo )) & 0xffffff00) >> 8; \
d = (*(GLuint *)(buf + radeon_mba_z32( drb, _x, \
_y)) & 0xffffff00) >> 8; \
}while(0)
#else
#define READ_DEPTH( d, _x, _y ) \
do { \
d = (*(GLuint*)(radeon_ptr32(rrb, _x + xo, _y + yo)) & 0x00ffffff); \
} while (0)
d = (*(GLuint*)(radeon_ptr32(rrb, _x, _y)) & 0x00ffffff); \
} while (0)
#endif
#define TAG(x) radeon##x##_z24_s8
@ -169,7 +167,7 @@ do { \
#ifdef COMPILE_R300
#define WRITE_STENCIL( _x, _y, d ) \
do { \
GLuint offset = radeon_mba_z32( drb, _x + xo, _y + yo ); \
GLuint offset = radeon_mba_z32( drb, _x, _y ); \
GLuint tmp = *(GLuint *)(buf + offset); \
tmp &= 0xffffff00; \
tmp |= (d) & 0xff; \
@ -178,7 +176,7 @@ do { \
#else
#define WRITE_STENCIL( _x, _y, d ) \
do { \
GLuint *_ptr = (GLuint*)radeon_ptr32(rrb, _x + xo, _y + yo); \
GLuint *_ptr = (GLuint*)radeon_ptr32(rrb, _x, _y); \
GLuint tmp = *_ptr; \
tmp &= 0x00ffffff; \
tmp |= (((d) & 0xff) << 24); \
@ -189,14 +187,14 @@ do { \
#ifdef COMPILE_R300
#define READ_STENCIL( d, _x, _y ) \
do { \
GLuint offset = radeon_mba_z32( drb, _x + xo, _y + yo ); \
GLuint offset = radeon_mba_z32( drb, _x, _y ); \
GLuint tmp = *(GLuint *)(buf + offset); \
d = tmp & 0x000000ff; \
} while (0)
#else
#define READ_STENCIL( d, _x, _y ) \
do { \
GLuint *_ptr = (GLuint*)radeon_ptr32(rrb, _x + xo, _y + yo); \
GLuint *_ptr = (GLuint*)radeon_ptr32(rrb, _x, _y); \
GLuint tmp = *_ptr; \
d = (tmp & 0xff000000) >> 24; \
} while (0)