summaryrefslogtreecommitdiff
path: root/src/mesa/drivers/dri/r300/r300_ioctl.c
diff options
context:
space:
mode:
authorZou Nan hai <nanhai.zou@intel.com>2007-07-04 10:52:35 +0800
committerZou Nan hai <nanhai.zou@intel.com>2007-07-04 10:52:35 +0800
commitfb9ee9b323bff93973a39560b2bc007aace4bddd (patch)
tree05e1e72e8f4d321cde2c48b8518e6d9736c680dd /src/mesa/drivers/dri/r300/r300_ioctl.c
parent285b326c606e9b2f90e4fe177b15b3fa23239b86 (diff)
parent7ff4359a3be1278b26950f96ab23014a667af838 (diff)
Merge branch 'master' of git+ssh://znh@git.freedesktop.org/git/mesa/mesa into 965-glsl
Diffstat (limited to 'src/mesa/drivers/dri/r300/r300_ioctl.c')
-rw-r--r--src/mesa/drivers/dri/r300/r300_ioctl.c389
1 files changed, 202 insertions, 187 deletions
diff --git a/src/mesa/drivers/dri/r300/r300_ioctl.c b/src/mesa/drivers/dri/r300/r300_ioctl.c
index 11e2d42e49..90f5027c9a 100644
--- a/src/mesa/drivers/dri/r300/r300_ioctl.c
+++ b/src/mesa/drivers/dri/r300/r300_ioctl.c
@@ -29,10 +29,12 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
**************************************************************************/
-/*
- * Authors:
- * Keith Whitwell <keith@tungstengraphics.com>
- * Nicolai Haehnle <prefect_@gmx.net>
+/**
+ * \file
+ *
+ * \author Keith Whitwell <keith@tungstengraphics.com>
+ *
+ * \author Nicolai Haehnle <prefect_@gmx.net>
*/
#include <sched.h>
@@ -61,14 +63,14 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
static void r300ClearBuffer(r300ContextPtr r300, int flags, int buffer)
{
- GLcontext* ctx = r300->radeon.glCtx;
+ GLcontext *ctx = r300->radeon.glCtx;
__DRIdrawablePrivate *dPriv = r300->radeon.dri.drawable;
GLuint cboffset, cbpitch;
- drm_r300_cmd_header_t* cmd2;
+ drm_r300_cmd_header_t *cmd2;
int cmd_reserved = 0;
int cmd_written = 0;
drm_radeon_cmd_header_t *cmd = NULL;
- r300ContextPtr rmesa=r300;
+ r300ContextPtr rmesa = r300;
if (RADEON_DEBUG & DEBUG_IOCTL)
fprintf(stderr, "%s: %s buffer (%i,%i %ix%i)\n",
@@ -87,69 +89,78 @@ static void r300ClearBuffer(r300ContextPtr r300, int flags, int buffer)
cp_wait(r300, R300_WAIT_3D | R300_WAIT_3D_CLEAN);
end_3d(rmesa);
-
+
R300_STATECHANGE(r300, cb);
reg_start(R300_RB3D_COLOROFFSET0, 0);
e32(cboffset);
-
+
if (r300->radeon.radeonScreen->cpp == 4)
cbpitch |= R300_COLOR_FORMAT_ARGB8888;
else
cbpitch |= R300_COLOR_FORMAT_RGB565;
-
+
if (r300->radeon.sarea->tiling_enabled)
cbpitch |= R300_COLOR_TILE_ENABLE;
-
+
reg_start(R300_RB3D_COLORPITCH0, 0);
e32(cbpitch);
R300_STATECHANGE(r300, cmk);
reg_start(R300_RB3D_COLORMASK, 0);
-
+
if (flags & CLEARBUFFER_COLOR) {
e32((ctx->Color.ColorMask[BCOMP] ? R300_COLORMASK0_B : 0) |
- (ctx->Color.ColorMask[GCOMP] ? R300_COLORMASK0_G : 0) |
- (ctx->Color.ColorMask[RCOMP] ? R300_COLORMASK0_R : 0) |
- (ctx->Color.ColorMask[ACOMP] ? R300_COLORMASK0_A : 0));
+ (ctx->Color.ColorMask[GCOMP] ? R300_COLORMASK0_G : 0) |
+ (ctx->Color.ColorMask[RCOMP] ? R300_COLORMASK0_R : 0) |
+ (ctx->Color.ColorMask[ACOMP] ? R300_COLORMASK0_A : 0));
} else {
- e32(0);
+ e32(0x0);
}
-
+
R300_STATECHANGE(r300, zs);
reg_start(R300_RB3D_ZSTENCIL_CNTL_0, 2);
-
+
{
- uint32_t t1, t2;
-
- t1 = 0x0;
- t2 = 0x0;
-
- if (flags & CLEARBUFFER_DEPTH) {
- t1 |= R300_RB3D_Z_WRITE_ONLY;
- t2 |= (R300_ZS_ALWAYS << R300_RB3D_ZS1_DEPTH_FUNC_SHIFT);
- } else {
- t1 |= R300_RB3D_Z_DISABLED_1; // disable
- }
-
- if (flags & CLEARBUFFER_STENCIL) {
- t1 |= R300_RB3D_STENCIL_ENABLE;
- t2 |=
- (R300_ZS_ALWAYS<<R300_RB3D_ZS1_FRONT_FUNC_SHIFT) |
- (R300_ZS_REPLACE<<R300_RB3D_ZS1_FRONT_FAIL_OP_SHIFT) |
- (R300_ZS_REPLACE<<R300_RB3D_ZS1_FRONT_ZPASS_OP_SHIFT) |
- (R300_ZS_REPLACE<<R300_RB3D_ZS1_FRONT_ZFAIL_OP_SHIFT) |
- (R300_ZS_ALWAYS<<R300_RB3D_ZS1_BACK_FUNC_SHIFT) |
- (R300_ZS_REPLACE<<R300_RB3D_ZS1_BACK_FAIL_OP_SHIFT) |
- (R300_ZS_REPLACE<<R300_RB3D_ZS1_BACK_ZPASS_OP_SHIFT) |
- (R300_ZS_REPLACE<<R300_RB3D_ZS1_BACK_ZFAIL_OP_SHIFT) ;
- }
-
- e32(t1);
- e32(t2);
- e32(r300->state.stencil.clear);
+ uint32_t t1, t2;
+
+ t1 = 0x0;
+ t2 = 0x0;
+
+ if (flags & CLEARBUFFER_DEPTH) {
+ t1 |= R300_RB3D_Z_WRITE_ONLY;
+ t2 |=
+ (R300_ZS_ALWAYS << R300_RB3D_ZS1_DEPTH_FUNC_SHIFT);
+ } else {
+ t1 |= R300_RB3D_Z_DISABLED_1; // disable
+ }
+
+ if (flags & CLEARBUFFER_STENCIL) {
+ t1 |= R300_RB3D_STENCIL_ENABLE;
+ t2 |=
+ (R300_ZS_ALWAYS <<
+ R300_RB3D_ZS1_FRONT_FUNC_SHIFT) |
+ (R300_ZS_REPLACE <<
+ R300_RB3D_ZS1_FRONT_FAIL_OP_SHIFT) |
+ (R300_ZS_REPLACE <<
+ R300_RB3D_ZS1_FRONT_ZPASS_OP_SHIFT) |
+ (R300_ZS_REPLACE <<
+ R300_RB3D_ZS1_FRONT_ZFAIL_OP_SHIFT) |
+ (R300_ZS_ALWAYS <<
+ R300_RB3D_ZS1_BACK_FUNC_SHIFT) |
+ (R300_ZS_REPLACE <<
+ R300_RB3D_ZS1_BACK_FAIL_OP_SHIFT) |
+ (R300_ZS_REPLACE <<
+ R300_RB3D_ZS1_BACK_ZPASS_OP_SHIFT) |
+ (R300_ZS_REPLACE <<
+ R300_RB3D_ZS1_BACK_ZFAIL_OP_SHIFT);
+ }
+
+ e32(t1);
+ e32(t2);
+ e32(r300->state.stencil.clear);
}
-
- cmd2 = (drm_r300_cmd_header_t*)r300AllocCmdBuf(r300, 9, __FUNCTION__);
+
+ cmd2 = (drm_r300_cmd_header_t *) r300AllocCmdBuf(r300, 9, __FUNCTION__);
cmd2[0].packet3.cmd_type = R300_CMD_PACKET3;
cmd2[0].packet3.packet = R300_CMD_PACKET3_CLEAR;
cmd2[1].u = r300PackFloat32(dPriv->w / 2.0);
@@ -161,54 +172,76 @@ static void r300ClearBuffer(r300ContextPtr r300, int flags, int buffer)
cmd2[7].u = r300PackFloat32(ctx->Color.ClearColor[2]);
cmd2[8].u = r300PackFloat32(ctx->Color.ClearColor[3]);
- reg_start(R300_RB3D_DSTCACHE_CTLSTAT,0);
- e32(R300_RB3D_DSTCACHE_UNKNOWN_0A);
-
-
- reg_start(R300_RB3D_ZCACHE_CTLSTAT,0);
- e32(R300_RB3D_ZCACHE_UNKNOWN_03);
+ r300EmitCacheFlush(rmesa);
cp_wait(rmesa, R300_WAIT_3D | R300_WAIT_3D_CLEAN);
}
static void r300EmitClearState(GLcontext * ctx)
{
r300ContextPtr r300 = R300_CONTEXT(ctx);
- r300ContextPtr rmesa=r300;
+ r300ContextPtr rmesa = r300;
__DRIdrawablePrivate *dPriv = r300->radeon.dri.drawable;
int i;
int cmd_reserved = 0;
int cmd_written = 0;
drm_radeon_cmd_header_t *cmd = NULL;
-
-
+ int has_tcl = 1;
+
+ if (!(r300->radeon.radeonScreen->chip_flags & RADEON_CHIPSET_TCL))
+ has_tcl = 0;
+
+ /* FIXME: the values written to R300_VAP_INPUT_ROUTE_0_0 and
+ * R300_VAP_INPUT_ROUTE_0_1 are in fact known, however, the values are
+ * quite complex; see the functions in r300_emit.c.
+ *
+ * I believe it would be a good idea to extend the functions in
+ * r300_emit.c so that they can be used to setup the default values for
+ * these registers, as well as the actual values used for rendering.
+ */
R300_STATECHANGE(r300, vir[0]);
reg_start(R300_VAP_INPUT_ROUTE_0_0, 0);
- e32(0x21030003);
-
+ if (!has_tcl)
+ e32(0x22030003);
+ else
+ e32(0x21030003);
+
/* disable fog */
R300_STATECHANGE(r300, fogs);
reg_start(R300_RE_FOG_STATE, 0);
e32(0x0);
-
+
R300_STATECHANGE(r300, vir[1]);
reg_start(R300_VAP_INPUT_ROUTE_1_0, 0);
e32(0xF688F688);
+ /* R300_VAP_INPUT_CNTL_0, R300_VAP_INPUT_CNTL_1 */
R300_STATECHANGE(r300, vic);
reg_start(R300_VAP_INPUT_CNTL_0, 1);
- e32(0x00000001);
- e32(0x00000405);
-
+ e32(R300_INPUT_CNTL_0_COLOR);
+ e32(R300_INPUT_CNTL_POS | R300_INPUT_CNTL_COLOR | R300_INPUT_CNTL_TC0);
+
+ R300_STATECHANGE(r300, vte);
+ /* comes from fglrx startup of clear */
+ reg_start(R300_SE_VTE_CNTL, 1);
+ e32(R300_VTX_W0_FMT | R300_VPORT_X_SCALE_ENA |
+ R300_VPORT_X_OFFSET_ENA | R300_VPORT_Y_SCALE_ENA |
+ R300_VPORT_Y_OFFSET_ENA | R300_VPORT_Z_SCALE_ENA |
+ R300_VPORT_Z_OFFSET_ENA);
+ e32(0x8);
+
+ reg_start(0x21dc, 0);
+ e32(0xaaaaaaaa);
+
R300_STATECHANGE(r300, vof);
reg_start(R300_VAP_OUTPUT_VTX_FMT_0, 1);
- e32(R300_VAP_OUTPUT_VTX_FMT_0__POS_PRESENT | R300_VAP_OUTPUT_VTX_FMT_0__COLOR_PRESENT);
- e32(0); /* no textures */
-
-
+ e32(R300_VAP_OUTPUT_VTX_FMT_0__POS_PRESENT |
+ R300_VAP_OUTPUT_VTX_FMT_0__COLOR_PRESENT);
+ e32(0x0); /* no textures */
+
R300_STATECHANGE(r300, txe);
reg_start(R300_TX_ENABLE, 0);
- e32(0);
-
+ e32(0x0);
+
R300_STATECHANGE(r300, vpt);
reg_start(R300_SE_VPORT_XSCALE, 5);
efloat(1.0);
@@ -217,28 +250,28 @@ static void r300EmitClearState(GLcontext * ctx)
efloat(dPriv->y);
efloat(1.0);
efloat(0.0);
-
+
R300_STATECHANGE(r300, at);
reg_start(R300_PP_ALPHA_TEST, 0);
- e32(0);
-
+ e32(0x0);
+
R300_STATECHANGE(r300, bld);
reg_start(R300_RB3D_CBLEND, 1);
- e32(0);
- e32(0);
-
+ e32(0x0);
+ e32(0x0);
+
R300_STATECHANGE(r300, unk221C);
reg_start(R300_VAP_UNKNOWN_221C, 0);
e32(R300_221C_CLEAR);
-
+
R300_STATECHANGE(r300, ps);
reg_start(R300_RE_POINTSIZE, 0);
e32(((dPriv->w * 6) << R300_POINTSIZE_X_SHIFT) |
- ((dPriv->h * 6) << R300_POINTSIZE_Y_SHIFT));
-
+ ((dPriv->h * 6) << R300_POINTSIZE_Y_SHIFT));
+
R300_STATECHANGE(r300, ri);
reg_start(R300_RS_INTERP_0, 8);
- for(i = 0; i < 8; ++i){
+ for (i = 0; i < 8; ++i) {
e32(R300_RS_INTERP_USED);
}
@@ -246,62 +279,61 @@ static void r300EmitClearState(GLcontext * ctx)
/* The second constant is needed to get glxgears display anything .. */
reg_start(R300_RS_CNTL_0, 1);
e32((1 << R300_RS_CNTL_CI_CNT_SHIFT) | R300_RS_CNTL_0_UNKNOWN_18);
- e32(0);
-
+ e32(0x0);
+
R300_STATECHANGE(r300, rr);
reg_start(R300_RS_ROUTE_0, 0);
- e32(0x00004000);
-
+ e32(R300_RS_ROUTE_0_COLOR);
+
R300_STATECHANGE(r300, fp);
reg_start(R300_PFS_CNTL_0, 2);
- e32(0);
- e32(0);
- e32(0);
+ e32(0x0);
+ e32(0x0);
+ e32(0x0);
reg_start(R300_PFS_NODE_0, 3);
- e32(0);
- e32(0);
- e32(0);
+ e32(0x0);
+ e32(0x0);
+ e32(0x0);
e32(R300_PFS_NODE_OUTPUT_COLOR);
-
+
R300_STATECHANGE(r300, fpi[0]);
R300_STATECHANGE(r300, fpi[1]);
R300_STATECHANGE(r300, fpi[2]);
R300_STATECHANGE(r300, fpi[3]);
-
+
reg_start(R300_PFS_INSTR0_0, 0);
e32(FP_INSTRC(MAD, FP_ARGC(SRC0C_XYZ), FP_ARGC(ONE), FP_ARGC(ZERO)));
-
+
reg_start(R300_PFS_INSTR1_0, 0);
- e32(FP_SELC(0,NO,XYZ,FP_TMP(0),0,0));
-
+ e32(FP_SELC(0, NO, XYZ, FP_TMP(0), 0, 0));
+
reg_start(R300_PFS_INSTR2_0, 0);
e32(FP_INSTRA(MAD, FP_ARGA(SRC0A), FP_ARGA(ONE), FP_ARGA(ZERO)));
-
+
reg_start(R300_PFS_INSTR3_0, 0);
- e32(FP_SELA(0,NO,W,FP_TMP(0),0,0));
-
- R300_STATECHANGE(r300, pvs);
- reg_start(R300_VAP_PVS_CNTL_1, 2);
- e32((0 << R300_PVS_CNTL_1_PROGRAM_START_SHIFT) |
- (0 << R300_PVS_CNTL_1_POS_END_SHIFT) |
- (1 << R300_PVS_CNTL_1_PROGRAM_END_SHIFT));
- e32(0);
- e32(1 << R300_PVS_CNTL_3_PROGRAM_UNKNOWN_SHIFT);
-
- R300_STATECHANGE(r300, vpi);
- vsf_start_fragment(0x0, 8);
- e32(VP_OUT(ADD,OUT,0,XYZW));
- e32(VP_IN(IN,0));
- e32(VP_ZERO());
- e32(0);
-
- e32(VP_OUT(ADD,OUT,1,XYZW));
- e32(VP_IN(IN,1));
- e32(VP_ZERO());
- e32(0);
-
- /*reg_start(0x4500,0);
- e32(2560-1);*/
+ e32(FP_SELA(0, NO, W, FP_TMP(0), 0, 0));
+
+ if (has_tcl) {
+ R300_STATECHANGE(r300, pvs);
+ reg_start(R300_VAP_PVS_CNTL_1, 2);
+ e32((0 << R300_PVS_CNTL_1_PROGRAM_START_SHIFT) |
+ (0 << R300_PVS_CNTL_1_POS_END_SHIFT) |
+ (1 << R300_PVS_CNTL_1_PROGRAM_END_SHIFT));
+ e32(0x0);
+ e32(1 << R300_PVS_CNTL_3_PROGRAM_UNKNOWN_SHIFT);
+
+ R300_STATECHANGE(r300, vpi);
+ vsf_start_fragment(0x0, 8);
+ e32(VP_OUT(ADD, OUT, 0, XYZW));
+ e32(VP_IN(IN, 0));
+ e32(VP_ZERO());
+ e32(0x0);
+
+ e32(VP_OUT(ADD, OUT, 1, XYZW));
+ e32(VP_IN(IN, 1));
+ e32(VP_ZERO());
+ e32(0x0);
+ }
}
/**
@@ -339,8 +371,8 @@ static void r300Clear(GLcontext * ctx, GLbitfield mask)
bits |= CLEARBUFFER_DEPTH;
mask &= ~BUFFER_BIT_DEPTH;
}
-
- if ( (mask & BUFFER_BIT_STENCIL) && r300->state.stencil.hw_stencil) {
+
+ if ((mask & BUFFER_BIT_STENCIL) && r300->state.stencil.hw_stencil) {
bits |= CLEARBUFFER_STENCIL;
mask &= ~BUFFER_BIT_STENCIL;
}
@@ -352,11 +384,11 @@ static void r300Clear(GLcontext * ctx, GLbitfield mask)
_swrast_Clear(ctx, mask);
}
- swapped = r300->radeon.doPageFlip && (r300->radeon.sarea->pfCurrentPage == 1);
+ swapped = r300->radeon.sarea->pfCurrentPage == 1;
/* Make sure it fits there. */
- r300EnsureCmdBufSpace(r300, 421*3, __FUNCTION__);
- if(flags || bits)
+ r300EnsureCmdBufSpace(r300, 421 * 3, __FUNCTION__);
+ if (flags || bits)
r300EmitClearState(ctx);
if (flags & BUFFER_BIT_FRONT_LEFT) {
@@ -374,26 +406,28 @@ static void r300Clear(GLcontext * ctx, GLbitfield mask)
}
-
void r300Flush(GLcontext * ctx)
{
- r300ContextPtr r300 = R300_CONTEXT(ctx);
+ r300ContextPtr rmesa = R300_CONTEXT(ctx);
if (RADEON_DEBUG & DEBUG_IOCTL)
fprintf(stderr, "%s\n", __FUNCTION__);
- if (r300->cmdbuf.count_used > r300->cmdbuf.count_reemit)
- r300FlushCmdBuf(r300, __FUNCTION__);
+ if (rmesa->dma.flush)
+ rmesa->dma.flush( rmesa );
+
+ if (rmesa->cmdbuf.count_used > rmesa->cmdbuf.count_reemit)
+ r300FlushCmdBuf(rmesa, __FUNCTION__);
}
#ifdef USER_BUFFERS
-#include "radeon_mm.h"
+#include "r300_mem.h"
-static void r300RefillCurrentDmaRegion(r300ContextPtr rmesa, int size)
+void r300RefillCurrentDmaRegion(r300ContextPtr rmesa, int size)
{
struct r300_dma_buffer *dmabuf;
- size = MAX2(size, RADEON_BUFFER_SIZE*16);
-
+ size = MAX2(size, RADEON_BUFFER_SIZE * 16);
+
if (RADEON_DEBUG & (DEBUG_IOCTL | DEBUG_DMA))
fprintf(stderr, "%s\n", __FUNCTION__);
@@ -401,42 +435,39 @@ static void r300RefillCurrentDmaRegion(r300ContextPtr rmesa, int size)
rmesa->dma.flush(rmesa);
}
- if (rmesa->dma.current.buf)
+ if (rmesa->dma.current.buf) {
+#ifdef USER_BUFFERS
+ r300_mem_use(rmesa, rmesa->dma.current.buf->id);
+#endif
r300ReleaseDmaRegion(rmesa, &rmesa->dma.current, __FUNCTION__);
-
+ }
if (rmesa->dma.nr_released_bufs > 4)
r300FlushCmdBuf(rmesa, __FUNCTION__);
-
+
dmabuf = CALLOC_STRUCT(r300_dma_buffer);
- dmabuf->buf = (void *)1; /* hack */
+ dmabuf->buf = (void *)1; /* hack */
dmabuf->refcount = 1;
- dmabuf->id = radeon_mm_alloc(rmesa, 4, size);
+ dmabuf->id = r300_mem_alloc(rmesa, 4, size);
if (dmabuf->id == 0) {
LOCK_HARDWARE(&rmesa->radeon); /* no need to validate */
-
+
r300FlushCmdBufLocked(rmesa, __FUNCTION__);
radeonWaitForIdleLocked(&rmesa->radeon);
-
- dmabuf->id = radeon_mm_alloc(rmesa, 4, size);
-#ifdef HW_VBOS
- if (dmabuf->id == 0) {
- /* Just kick all */
- r300_evict_vbos(rmesa->radeon.glCtx, /*RADEON_BUFFER_SIZE*16*/1<<30);
- dmabuf->id = radeon_mm_alloc(rmesa, 4, size);
- }
-#endif
+ dmabuf->id = r300_mem_alloc(rmesa, 4, size);
+
UNLOCK_HARDWARE(&rmesa->radeon);
-
+
if (dmabuf->id == 0) {
- fprintf(stderr, "Error: Could not get dma buffer... exiting\n");
- exit(-1);
+ fprintf(stderr,
+ "Error: Could not get dma buffer... exiting\n");
+ _mesa_exit(-1);
}
}
-
+
rmesa->dma.current.buf = dmabuf;
- rmesa->dma.current.address = radeon_mm_ptr(rmesa, dmabuf->id);
+ rmesa->dma.current.address = r300_mem_ptr(rmesa, dmabuf->id);
rmesa->dma.current.end = size;
rmesa->dma.current.start = 0;
rmesa->dma.current.ptr = 0;
@@ -455,7 +486,7 @@ void r300ReleaseDmaRegion(r300ContextPtr rmesa,
rmesa->dma.flush(rmesa);
if (--region->buf->refcount == 0) {
- radeon_mm_free(rmesa, region->buf->id);
+ r300_mem_free(rmesa, region->buf->id);
FREE(region->buf);
rmesa->dma.nr_released_bufs++;
}
@@ -485,8 +516,7 @@ void r300AllocDmaRegion(r300ContextPtr rmesa,
(rmesa->dma.current.ptr + alignment) & ~alignment;
if (rmesa->dma.current.ptr + bytes > rmesa->dma.current.end)
- r300RefillCurrentDmaRegion(rmesa,
- (bytes + 0x7) & ~0x7);
+ r300RefillCurrentDmaRegion(rmesa, (bytes + 0x7) & ~0x7);
region->start = rmesa->dma.current.start;
region->ptr = rmesa->dma.current.start;
@@ -511,7 +541,7 @@ static void r300RefillCurrentDmaRegion(r300ContextPtr rmesa)
int size = 0;
drmDMAReq dma;
int ret;
-
+
if (RADEON_DEBUG & (DEBUG_IOCTL | DEBUG_DMA))
fprintf(stderr, "%s\n", __FUNCTION__);
@@ -554,8 +584,9 @@ static void r300RefillCurrentDmaRegion(r300ContextPtr rmesa)
if (ret != 0) {
UNLOCK_HARDWARE(&rmesa->radeon);
- fprintf(stderr, "Error: Could not get dma buffer... exiting\n");
- exit(-1);
+ fprintf(stderr,
+ "Error: Could not get dma buffer... exiting\n");
+ _mesa_exit(-1);
}
}
@@ -591,15 +622,16 @@ void r300ReleaseDmaRegion(r300ContextPtr rmesa,
drm_radeon_cmd_header_t *cmd;
if (RADEON_DEBUG & (DEBUG_IOCTL | DEBUG_DMA))
- fprintf(stderr, "%s -- DISCARD BUF %d\n", __FUNCTION__,
- region->buf->buf->idx);
+ fprintf(stderr, "%s -- DISCARD BUF %d\n",
+ __FUNCTION__, region->buf->buf->idx);
cmd =
(drm_radeon_cmd_header_t *) r300AllocCmdBuf(rmesa,
- sizeof(*cmd) / 4,
+ sizeof
+ (*cmd) / 4,
__FUNCTION__);
cmd->dma.cmd_type = R300_CMD_DMA_DISCARD;
cmd->dma.buf_idx = region->buf->buf->idx;
-
+
FREE(region->buf);
rmesa->dma.nr_released_bufs++;
}
@@ -647,34 +679,15 @@ void r300AllocDmaRegion(r300ContextPtr rmesa,
#endif
-/* Called via glXGetMemoryOffsetMESA() */
-GLuint r300GetMemoryOffsetMESA(__DRInativeDisplay * dpy, int scrn,
- const GLvoid * pointer)
-{
- GET_CURRENT_CONTEXT(ctx);
- r300ContextPtr rmesa;
- GLuint card_offset;
-
- if (!ctx || !(rmesa = R300_CONTEXT(ctx))) {
- fprintf(stderr, "%s: no context\n", __FUNCTION__);
- return ~0;
- }
-
- if (!r300IsGartMemory(rmesa, pointer, 0))
- return ~0;
-
- card_offset = r300GartOffsetFromVirtual(rmesa, pointer);
-
- return card_offset - rmesa->radeon.radeonScreen->gart_base;
-}
-
GLboolean r300IsGartMemory(r300ContextPtr rmesa, const GLvoid * pointer,
GLint size)
{
int offset =
- (char *)pointer - (char *)rmesa->radeon.radeonScreen->gartTextures.map;
+ (char *)pointer -
+ (char *)rmesa->radeon.radeonScreen->gartTextures.map;
int valid = (size >= 0 && offset >= 0
- && offset + size < rmesa->radeon.radeonScreen->gartTextures.size);
+ && offset + size <
+ rmesa->radeon.radeonScreen->gartTextures.size);
if (RADEON_DEBUG & DEBUG_IOCTL)
fprintf(stderr, "r300IsGartMemory( %p ) : %d\n", pointer,
@@ -686,11 +699,13 @@ GLboolean r300IsGartMemory(r300ContextPtr rmesa, const GLvoid * pointer,
GLuint r300GartOffsetFromVirtual(r300ContextPtr rmesa, const GLvoid * pointer)
{
int offset =
- (char *)pointer - (char *)rmesa->radeon.radeonScreen->gartTextures.map;
+ (char *)pointer -
+ (char *)rmesa->radeon.radeonScreen->gartTextures.map;
//fprintf(stderr, "offset=%08x\n", offset);
- if (offset < 0 || offset > rmesa->radeon.radeonScreen->gartTextures.size)
+ if (offset < 0
+ || offset > rmesa->radeon.radeonScreen->gartTextures.size)
return ~0;
else
return rmesa->radeon.radeonScreen->gart_texture_offset + offset;