projects
/
mesa.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Drop GLcontext typedef and use struct gl_context instead
[mesa.git]
/
src
/
mesa
/
drivers
/
dri
/
mach64
/
mach64_ioctl.c
diff --git
a/src/mesa/drivers/dri/mach64/mach64_ioctl.c
b/src/mesa/drivers/dri/mach64/mach64_ioctl.c
index 4c391fec246a368cd0aff6f46534ea44bb08d5f9..0146e0d05151776f5cb4b41b83814bc4cca035db 100644
(file)
--- a/
src/mesa/drivers/dri/mach64/mach64_ioctl.c
+++ b/
src/mesa/drivers/dri/mach64/mach64_ioctl.c
@@
-1,4
+1,4
@@
-/*
$XFree86$ */ /*
-*- mode: c; c-basic-offset: 3 -*- */
+/* -*- mode: c; c-basic-offset: 3 -*- */
/*
* Copyright 2000 Gareth Hughes
* All Rights Reserved.
/*
* Copyright 2000 Gareth Hughes
* All Rights Reserved.
@@
-26,7
+26,7
@@
* Authors:
* Gareth Hughes <gareth@valinux.com>
* Leif Delgass <ldelgass@retinalburn.net>
* Authors:
* Gareth Hughes <gareth@valinux.com>
* Leif Delgass <ldelgass@retinalburn.net>
- * Jos
é
Fonseca <j_r_fonseca@yahoo.co.uk>
+ * Jos
�
Fonseca <j_r_fonseca@yahoo.co.uk>
*/
#include <errno.h>
*/
#include <errno.h>
@@
-35,8
+35,8
@@
#include "mach64_ioctl.h"
#include "mach64_tex.h"
#include "mach64_ioctl.h"
#include "mach64_tex.h"
-#include "imports.h"
-#include "macros.h"
+#include "
main/
imports.h"
+#include "ma
in/ma
cros.h"
#include "swrast/swrast.h"
#include "swrast/swrast.h"
@@
-98,14
+98,14
@@
drmBufPtr mach64GetBufferLocked( mach64ContextPtr mmesa )
void mach64FlushVerticesLocked( mach64ContextPtr mmesa )
{
void mach64FlushVerticesLocked( mach64ContextPtr mmesa )
{
-
XF86DRIClipRectPtr
pbox = mmesa->pClipRects;
+
drm_clip_rect_t *
pbox = mmesa->pClipRects;
int nbox = mmesa->numClipRects;
void *buffer = mmesa->vert_buf;
int count = mmesa->vert_used;
int prim = mmesa->hw_primitive;
int fd = mmesa->driScreen->fd;
int nbox = mmesa->numClipRects;
void *buffer = mmesa->vert_buf;
int count = mmesa->vert_used;
int prim = mmesa->hw_primitive;
int fd = mmesa->driScreen->fd;
- drm
Mach64Vertex
vertex;
- int i
, ret
;
+ drm
_mach64_vertex_t
vertex;
+ int i;
mmesa->num_verts = 0;
mmesa->vert_used = 0;
mmesa->num_verts = 0;
mmesa->vert_used = 0;
@@
-123,6
+123,9
@@
void mach64FlushVerticesLocked( mach64ContextPtr mmesa )
mmesa->dirty |= MACH64_UPLOAD_CLIPRECTS;
if ( !count || !(mmesa->dirty & MACH64_UPLOAD_CLIPRECTS) ) {
mmesa->dirty |= MACH64_UPLOAD_CLIPRECTS;
if ( !count || !(mmesa->dirty & MACH64_UPLOAD_CLIPRECTS) ) {
+ int to = 0;
+ int ret;
+
/* FIXME: Is this really necessary */
if ( nbox == 1 )
mmesa->sarea->nbox = 0;
/* FIXME: Is this really necessary */
if ( nbox == 1 )
mmesa->sarea->nbox = 0;
@@
-133,7
+136,10
@@
void mach64FlushVerticesLocked( mach64ContextPtr mmesa )
vertex.buf = buffer;
vertex.used = count;
vertex.discard = 1;
vertex.buf = buffer;
vertex.used = count;
vertex.discard = 1;
- ret = drmCommandWrite( fd, DRM_MACH64_VERTEX, &vertex, sizeof(drmMach64Vertex) );
+ do {
+ ret = drmCommandWrite( fd, DRM_MACH64_VERTEX,
+ &vertex, sizeof(drm_mach64_vertex_t) );
+ } while ( ( ret == -EAGAIN ) && ( to++ < MACH64_TIMEOUT ) );
if ( ret ) {
UNLOCK_HARDWARE( mmesa );
fprintf( stderr, "Error flushing vertex buffer: return = %d\n", ret );
if ( ret ) {
UNLOCK_HARDWARE( mmesa );
fprintf( stderr, "Error flushing vertex buffer: return = %d\n", ret );
@@
-144,8
+150,10
@@
void mach64FlushVerticesLocked( mach64ContextPtr mmesa )
for ( i = 0 ; i < nbox ; ) {
int nr = MIN2( i + MACH64_NR_SAREA_CLIPRECTS, nbox );
for ( i = 0 ; i < nbox ; ) {
int nr = MIN2( i + MACH64_NR_SAREA_CLIPRECTS, nbox );
-
XF86DRIClipRectPtr
b = mmesa->sarea->boxes;
+
drm_clip_rect_t *
b = mmesa->sarea->boxes;
int discard = 0;
int discard = 0;
+ int to = 0;
+ int ret;
mmesa->sarea->nbox = nr - i;
for ( ; i < nr ; i++ ) {
mmesa->sarea->nbox = nr - i;
for ( ; i < nr ; i++ ) {
@@
-164,7
+172,10
@@
void mach64FlushVerticesLocked( mach64ContextPtr mmesa )
vertex.buf = buffer;
vertex.used = count;
vertex.discard = discard;
vertex.buf = buffer;
vertex.used = count;
vertex.discard = discard;
- ret = drmCommandWrite( fd, DRM_MACH64_VERTEX, &vertex, sizeof(drmMach64Vertex) );
+ do {
+ ret = drmCommandWrite( fd, DRM_MACH64_VERTEX,
+ &vertex, sizeof(drm_mach64_vertex_t) );
+ } while ( ( ret == -EAGAIN ) && ( to++ < MACH64_TIMEOUT ) );
if ( ret ) {
UNLOCK_HARDWARE( mmesa );
fprintf( stderr, "Error flushing vertex buffer: return = %d\n", ret );
if ( ret ) {
UNLOCK_HARDWARE( mmesa );
fprintf( stderr, "Error flushing vertex buffer: return = %d\n", ret );
@@
-180,14
+191,15
@@
void mach64FlushVerticesLocked( mach64ContextPtr mmesa )
* Texture uploads
*/
* Texture uploads
*/
-void mach64FireBlitLocked( mach64ContextPtr mmesa,
drmBufPtr
buffer,
+void mach64FireBlitLocked( mach64ContextPtr mmesa,
void *
buffer,
GLint offset, GLint pitch, GLint format,
GLint x, GLint y, GLint width, GLint height )
{
GLint offset, GLint pitch, GLint format,
GLint x, GLint y, GLint width, GLint height )
{
- drmMach64Blit blit;
- GLint ret;
+ drm_mach64_blit_t blit;
+ int to = 0;
+ int ret;
- blit.
idx = buffer->idx
;
+ blit.
buf = buffer
;
blit.offset = offset;
blit.pitch = pitch;
blit.format = format;
blit.offset = offset;
blit.pitch = pitch;
blit.format = format;
@@
-196,8
+208,10
@@
void mach64FireBlitLocked( mach64ContextPtr mmesa, drmBufPtr buffer,
blit.width = width;
blit.height = height;
blit.width = width;
blit.height = height;
- ret = drmCommandWrite( mmesa->driFd, DRM_MACH64_BLIT,
- &blit, sizeof(drmMach64Blit) );
+ do {
+ ret = drmCommandWrite( mmesa->driFd, DRM_MACH64_BLIT,
+ &blit, sizeof(drm_mach64_blit_t) );
+ } while ( ( ret == -EAGAIN ) && ( to++ < MACH64_TIMEOUT ) );
if ( ret ) {
UNLOCK_HARDWARE( mmesa );
if ( ret ) {
UNLOCK_HARDWARE( mmesa );
@@
-229,7
+243,7
@@
static int mach64WaitForFrameCompletion( mach64ContextPtr mmesa )
int frames;
while ( 1 ) {
int frames;
while ( 1 ) {
- drm
Mach64GetParam
gp;
+ drm
_mach64_getparam_t
gp;
int ret;
if ( mmesa->sarea->frames_queued < MACH64_MAX_QUEUED_FRAMES ) {
int ret;
if ( mmesa->sarea->frames_queued < MACH64_MAX_QUEUED_FRAMES ) {
@@
-265,11
+279,11
@@
static int mach64WaitForFrameCompletion( mach64ContextPtr mmesa )
/* Copy the back color buffer to the front color buffer.
*/
/* Copy the back color buffer to the front color buffer.
*/
-void mach64CopyBuffer(
const __DRIdrawablePrivat
e *dPriv )
+void mach64CopyBuffer(
__DRIdrawabl
e *dPriv )
{
mach64ContextPtr mmesa;
GLint nbox, i, ret;
{
mach64ContextPtr mmesa;
GLint nbox, i, ret;
-
XF86DRIClipRectPtr
pbox;
+
drm_clip_rect_t *
pbox;
GLboolean missed_target;
assert(dPriv);
GLboolean missed_target;
assert(dPriv);
@@
-306,7
+320,7
@@
void mach64CopyBuffer( const __DRIdrawablePrivate *dPriv )
#endif
UNLOCK_HARDWARE( mmesa );
#endif
UNLOCK_HARDWARE( mmesa );
- driWaitForVBlank( dPriv, &m
mesa->vbl_seq, mmesa->vblank_flags, &m
issed_target );
+ driWaitForVBlank( dPriv, &missed_target );
LOCK_HARDWARE( mmesa );
/* use front buffer cliprects */
LOCK_HARDWARE( mmesa );
/* use front buffer cliprects */
@@
-315,7
+329,7
@@
void mach64CopyBuffer( const __DRIdrawablePrivate *dPriv )
for ( i = 0 ; i < nbox ; ) {
GLint nr = MIN2( i + MACH64_NR_SAREA_CLIPRECTS , nbox );
for ( i = 0 ; i < nbox ; ) {
GLint nr = MIN2( i + MACH64_NR_SAREA_CLIPRECTS , nbox );
-
XF86DRIClipRectPtr
b = mmesa->sarea->boxes;
+
drm_clip_rect_t *
b = mmesa->sarea->boxes;
GLint n = 0;
for ( ; i < nr ; i++ ) {
GLint n = 0;
for ( ; i < nr ; i++ ) {
@@
-388,12
+402,12
@@
void mach64PerformanceCounters( mach64ContextPtr mmesa )
void mach64PerformanceBoxesLocked( mach64ContextPtr mmesa )
{
GLint ret;
void mach64PerformanceBoxesLocked( mach64ContextPtr mmesa )
{
GLint ret;
- drm
Mach64Clear
clear;
+ drm
_mach64_clear_t
clear;
GLint x, y, w, h;
GLuint color;
GLint nbox;
GLint x1, y1, x2, y2;
GLint x, y, w, h;
GLuint color;
GLint nbox;
GLint x1, y1, x2, y2;
-
XF86DRIClipRectPtr
b = mmesa->sarea->boxes;
+
drm_clip_rect_t *
b = mmesa->sarea->boxes;
/* save cliprects */
nbox = mmesa->sarea->nbox;
/* save cliprects */
nbox = mmesa->sarea->nbox;
@@
-427,7
+441,7
@@
void mach64PerformanceBoxesLocked( mach64ContextPtr mmesa )
clear.clear_color = color;
ret = drmCommandWrite( mmesa->driFd, DRM_MACH64_CLEAR,
clear.clear_color = color;
ret = drmCommandWrite( mmesa->driFd, DRM_MACH64_CLEAR,
- &clear, sizeof(drm
Mach64Clear
) );
+ &clear, sizeof(drm
_mach64_clear_t
) );
if (ret < 0) {
UNLOCK_HARDWARE( mmesa );
if (ret < 0) {
UNLOCK_HARDWARE( mmesa );
@@
-452,7
+466,7
@@
void mach64PerformanceBoxesLocked( mach64ContextPtr mmesa )
clear.clear_color = color;
ret = drmCommandWrite( mmesa->driFd, DRM_MACH64_CLEAR,
clear.clear_color = color;
ret = drmCommandWrite( mmesa->driFd, DRM_MACH64_CLEAR,
- &clear, sizeof(drm
Mach64Clear
) );
+ &clear, sizeof(drm
_mach64_clear_t
) );
if (ret < 0) {
UNLOCK_HARDWARE( mmesa );
if (ret < 0) {
UNLOCK_HARDWARE( mmesa );
@@
-481,7
+495,7
@@
void mach64PerformanceBoxesLocked( mach64ContextPtr mmesa )
clear.clear_color = color;
ret = drmCommandWrite( mmesa->driFd, DRM_MACH64_CLEAR,
clear.clear_color = color;
ret = drmCommandWrite( mmesa->driFd, DRM_MACH64_CLEAR,
- &clear, sizeof(drm
Mach64Clear
) );
+ &clear, sizeof(drm
_mach64_clear_t
) );
if (ret < 0) {
UNLOCK_HARDWARE( mmesa );
if (ret < 0) {
UNLOCK_HARDWARE( mmesa );
@@
-506,7
+520,7
@@
void mach64PerformanceBoxesLocked( mach64ContextPtr mmesa )
clear.clear_color = color;
ret = drmCommandWrite( mmesa->driFd, DRM_MACH64_CLEAR,
clear.clear_color = color;
ret = drmCommandWrite( mmesa->driFd, DRM_MACH64_CLEAR,
- &clear, sizeof(drm
Mach64Clear
) );
+ &clear, sizeof(drm
_mach64_clear_t
) );
if (ret < 0) {
UNLOCK_HARDWARE( mmesa );
if (ret < 0) {
UNLOCK_HARDWARE( mmesa );
@@
-532,7
+546,7
@@
void mach64PerformanceBoxesLocked( mach64ContextPtr mmesa )
clear.clear_color = color;
ret = drmCommandWrite( mmesa->driFd, DRM_MACH64_CLEAR,
clear.clear_color = color;
ret = drmCommandWrite( mmesa->driFd, DRM_MACH64_CLEAR,
- &clear, sizeof(drm
Mach64Clear
) );
+ &clear, sizeof(drm
_mach64_clear_t
) );
if (ret < 0) {
UNLOCK_HARDWARE( mmesa );
if (ret < 0) {
UNLOCK_HARDWARE( mmesa );
@@
-565,7
+579,7
@@
void mach64PerformanceBoxesLocked( mach64ContextPtr mmesa )
clear.clear_color = color;
ret = drmCommandWrite( mmesa->driFd, DRM_MACH64_CLEAR,
clear.clear_color = color;
ret = drmCommandWrite( mmesa->driFd, DRM_MACH64_CLEAR,
- &clear, sizeof(drm
Mach64Clear
) );
+ &clear, sizeof(drm
_mach64_clear_t
) );
if (ret < 0) {
UNLOCK_HARDWARE( mmesa );
if (ret < 0) {
UNLOCK_HARDWARE( mmesa );
@@
-595,7
+609,7
@@
void mach64PerformanceBoxesLocked( mach64ContextPtr mmesa )
clear.clear_color = color;
ret = drmCommandWrite( mmesa->driFd, DRM_MACH64_CLEAR,
clear.clear_color = color;
ret = drmCommandWrite( mmesa->driFd, DRM_MACH64_CLEAR,
- &clear, sizeof(drm
Mach64Clear
) );
+ &clear, sizeof(drm
_mach64_clear_t
) );
if (ret < 0) {
UNLOCK_HARDWARE( mmesa );
if (ret < 0) {
UNLOCK_HARDWARE( mmesa );
@@
-627,7
+641,7
@@
void mach64PerformanceBoxesLocked( mach64ContextPtr mmesa )
clear.clear_color = color;
ret = drmCommandWrite( mmesa->driFd, DRM_MACH64_CLEAR,
clear.clear_color = color;
ret = drmCommandWrite( mmesa->driFd, DRM_MACH64_CLEAR,
- &clear, sizeof(drm
Mach64Clear
) );
+ &clear, sizeof(drm
_mach64_clear_t
) );
if (ret < 0) {
UNLOCK_HARDWARE( mmesa );
if (ret < 0) {
UNLOCK_HARDWARE( mmesa );
@@
-651,19
+665,18
@@
void mach64PerformanceBoxesLocked( mach64ContextPtr mmesa )
* Buffer clear
*/
* Buffer clear
*/
-static void mach64DDClear( GLcontext *ctx, GLbitfield mask, GLboolean all,
- GLint cx, GLint cy, GLint cw, GLint ch )
+static void mach64DDClear( struct gl_context *ctx, GLbitfield mask )
{
mach64ContextPtr mmesa = MACH64_CONTEXT( ctx );
{
mach64ContextPtr mmesa = MACH64_CONTEXT( ctx );
- __DRIdrawable
Private
*dPriv = mmesa->driDrawable;
- drm
Mach64Clear
clear;
+ __DRIdrawable *dPriv = mmesa->driDrawable;
+ drm
_mach64_clear_t
clear;
GLuint flags = 0;
GLint i;
GLint ret;
GLuint flags = 0;
GLint i;
GLint ret;
+ GLint cx, cy, cw, ch;
if ( MACH64_DEBUG & DEBUG_VERBOSE_API ) {
if ( MACH64_DEBUG & DEBUG_VERBOSE_API ) {
- fprintf( stderr, "%s: all=%d %d,%d %dx%d\n",
- __FUNCTION__, all, cx, cy, cw, ch );
+ fprintf( stderr, "mach64DDClear\n");
}
#if ENABLE_PERF_BOXES
}
#if ENABLE_PERF_BOXES
@@
-683,30
+696,35
@@
static void mach64DDClear( GLcontext *ctx, GLbitfield mask, GLboolean all,
mmesa->new_state = save_state & ~(MACH64_NEW_MASKS | MACH64_NEW_CLIP);
}
mmesa->new_state = save_state & ~(MACH64_NEW_MASKS | MACH64_NEW_CLIP);
}
- if ( mask &
DD_FRONT_LEFT_BI
T ) {
+ if ( mask &
BUFFER_BIT_FRONT_LEF
T ) {
flags |= MACH64_FRONT;
flags |= MACH64_FRONT;
- mask &= ~
DD_FRONT_LEFT_BI
T;
+ mask &= ~
BUFFER_BIT_FRONT_LEF
T;
}
}
- if ( mask &
DD_BACK_LEFT_BI
T ) {
+ if ( mask &
BUFFER_BIT_BACK_LEF
T ) {
flags |= MACH64_BACK;
flags |= MACH64_BACK;
- mask &= ~
DD_BACK_LEFT_BI
T;
+ mask &= ~
BUFFER_BIT_BACK_LEF
T;
}
}
- if ( ( mask &
DD_DEPTH_BIT
) && ctx->Depth.Mask ) {
+ if ( ( mask &
BUFFER_BIT_DEPTH
) && ctx->Depth.Mask ) {
flags |= MACH64_DEPTH;
flags |= MACH64_DEPTH;
- mask &= ~
DD_DEPTH_BIT
;
+ mask &= ~
BUFFER_BIT_DEPTH
;
}
if ( mask )
}
if ( mask )
- _swrast_Clear( ctx, mask
, all, cx, cy, cw, ch
);
+ _swrast_Clear( ctx, mask );
if ( !flags )
return;
LOCK_HARDWARE( mmesa );
if ( !flags )
return;
LOCK_HARDWARE( mmesa );
- /* This needs to be in the locked region, so updated drawable origin is used */
+ /* compute region after locking: */
+ cx = ctx->DrawBuffer->_Xmin;
+ cy = ctx->DrawBuffer->_Ymin;
+ cw = ctx->DrawBuffer->_Xmax - cx;
+ ch = ctx->DrawBuffer->_Ymax - cy;
+
/* Flip top to bottom */
cx += mmesa->drawX;
cy = mmesa->drawY + dPriv->h - cy - ch;
/* Flip top to bottom */
cx += mmesa->drawX;
cy = mmesa->drawY + dPriv->h - cy - ch;
@@
-719,11
+737,12
@@
static void mach64DDClear( GLcontext *ctx, GLbitfield mask, GLboolean all,
for ( i = 0 ; i < mmesa->numClipRects ; ) {
int nr = MIN2( i + MACH64_NR_SAREA_CLIPRECTS, mmesa->numClipRects );
for ( i = 0 ; i < mmesa->numClipRects ; ) {
int nr = MIN2( i + MACH64_NR_SAREA_CLIPRECTS, mmesa->numClipRects );
-
XF86DRIClipRectPtr
box = mmesa->pClipRects;
-
XF86DRIClipRectPtr
b = mmesa->sarea->boxes;
+
drm_clip_rect_t *
box = mmesa->pClipRects;
+
drm_clip_rect_t *
b = mmesa->sarea->boxes;
GLint n = 0;
GLint n = 0;
- if ( !all ) {
+ if (cw != dPriv->w || ch != dPriv->h) {
+ /* clear subregion */
for ( ; i < nr ; i++ ) {
GLint x = box[i].x1;
GLint y = box[i].y1;
for ( ; i < nr ; i++ ) {
GLint x = box[i].x1;
GLint y = box[i].y1;
@@
-745,6
+764,7
@@
static void mach64DDClear( GLcontext *ctx, GLbitfield mask, GLboolean all,
n++;
}
} else {
n++;
}
} else {
+ /* clear whole window */
for ( ; i < nr ; i++ ) {
*b++ = box[i];
n++;
for ( ; i < nr ; i++ ) {
*b++ = box[i];
n++;
@@
-771,7
+791,7
@@
static void mach64DDClear( GLcontext *ctx, GLbitfield mask, GLboolean all,
clear.clear_depth = mmesa->ClearDepth;
ret = drmCommandWrite( mmesa->driFd, DRM_MACH64_CLEAR,
clear.clear_depth = mmesa->ClearDepth;
ret = drmCommandWrite( mmesa->driFd, DRM_MACH64_CLEAR,
- &clear, sizeof(drm
Mach64Clear
) );
+ &clear, sizeof(drm
_mach64_clear_t
) );
if ( ret ) {
UNLOCK_HARDWARE( mmesa );
if ( ret ) {
UNLOCK_HARDWARE( mmesa );
@@
-831,9
+851,9
@@
void mach64FlushDMALocked( mach64ContextPtr mmesa )
/* For client-side state emits - currently unused */
void mach64UploadHwStateLocked( mach64ContextPtr mmesa )
{
/* For client-side state emits - currently unused */
void mach64UploadHwStateLocked( mach64ContextPtr mmesa )
{
-
ATISAREAPrivPtr
sarea = mmesa->sarea;
+
drm_mach64_sarea_t *
sarea = mmesa->sarea;
-
mach64_context_regs_t *regs = &sarea->ContextS
tate;
+
drm_mach64_context_regs_t *regs = &sarea->context_s
tate;
unsigned int dirty = sarea->dirty;
CARD32 offset = ((regs->tex_size_pitch & 0xf0) >> 2);
unsigned int dirty = sarea->dirty;
CARD32 offset = ((regs->tex_size_pitch & 0xf0) >> 2);