X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fdrivers%2Fdri%2Fr300%2Fr300_cmdbuf.c;h=7c68f33cff1c3f76f07989df3900b02db729102c;hb=ff42a00402deab3034163c2b76c2082cce39d901;hp=7c51e10a1712f97d5cdaf594b92fc837babe8285;hpb=f30d53e0498a558100a1b9d9651ff375a7b3c7b4;p=mesa.git diff --git a/src/mesa/drivers/dri/r300/r300_cmdbuf.c b/src/mesa/drivers/dri/r300/r300_cmdbuf.c index 7c51e10a171..7c68f33cff1 100644 --- a/src/mesa/drivers/dri/r300/r300_cmdbuf.c +++ b/src/mesa/drivers/dri/r300/r300_cmdbuf.c @@ -66,7 +66,8 @@ int r300FlushCmdBuf(r300ContextPtr r300, const char* caller) start = r300->cmdbuf.count_reemit; if (RADEON_DEBUG & DEBUG_IOCTL) { - fprintf(stderr, "%s from %s\n", __FUNCTION__, caller); + fprintf(stderr, "%s from %s - %i cliprects\n", + __FUNCTION__, caller, r300->radeon.numClipRects); if (RADEON_DEBUG & DEBUG_VERBOSE) for (i = start; i < r300->cmdbuf.count_used; ++i) @@ -79,29 +80,30 @@ int r300FlushCmdBuf(r300ContextPtr r300, const char* caller) cmd.buf = (char*)(r300->cmdbuf.cmd_buf + start); cmd.bufsz = (r300->cmdbuf.count_used - start) * 4; -#if 0 // TODO: scissors - if (rmesa->state.scissor.enabled) { - cmd.nbox = rmesa->state.scissor.numClipRects; - cmd.boxes = (drm_clip_rect_t *) rmesa->state.scissor.pClipRects; + if (r300->radeon.state.scissor.enabled) { + cmd.nbox = r300->radeon.state.scissor.numClipRects; + cmd.boxes = (drm_clip_rect_t *)r300->radeon.state.scissor.pClipRects; } else { -#endif cmd.nbox = r300->radeon.numClipRects; - cmd.boxes = (drm_clip_rect_t *) r300->radeon.pClipRects; -#if 0 - } -#endif - - ret = drmCommandWrite(r300->radeon.dri.fd, - DRM_RADEON_CMDBUF, &cmd, sizeof(cmd)); - if (ret) { - UNLOCK_HARDWARE(&r300->radeon); - fprintf(stderr, "drmCommandWrite: %d\n", ret); - exit(-1); + cmd.boxes = (drm_clip_rect_t *)r300->radeon.pClipRects; } - if (RADEON_DEBUG & DEBUG_SYNC) { - fprintf(stderr, "Syncing in %s\n\n", __FUNCTION__); - radeonWaitForIdleLocked(&r300->radeon); + if (cmd.nbox) { + ret = drmCommandWrite(r300->radeon.dri.fd, + DRM_RADEON_CMDBUF, &cmd, sizeof(cmd)); + if (ret) { + UNLOCK_HARDWARE(&r300->radeon); + fprintf(stderr, "drmCommandWrite: %d\n", ret); + exit(-1); + } + + if (RADEON_DEBUG & DEBUG_SYNC) { + fprintf(stderr, "Syncing in %s\n\n", __FUNCTION__); + radeonWaitForIdleLocked(&r300->radeon); + } + } else { + if (RADEON_DEBUG & DEBUG_IOCTL) + fprintf(stderr, "%s: No cliprects\n", __FUNCTION__); } UNLOCK_HARDWARE(&r300->radeon); @@ -109,7 +111,7 @@ int r300FlushCmdBuf(r300ContextPtr r300, const char* caller) r300->cmdbuf.count_used = 0; r300->cmdbuf.count_reemit = 0; - return ret; + return 0; } @@ -310,6 +312,8 @@ void r300InitCmdBuf(r300ContextPtr r300) r300->hw.unk4200.cmd[0] = cmducs(0x4200, 4); ALLOC_STATE( unk4214, always, 2, "unk4214", 0 ); r300->hw.unk4214.cmd[0] = cmducs(0x4214, 1); + ALLOC_STATE( ps, always, R300_PS_CMDSIZE, "ps", 0 ); + r300->hw.ps.cmd[0] = cmducs(R300_RE_POINTSIZE, 1); ALLOC_STATE( unk4230, always, 4, "unk4230", 0 ); r300->hw.unk4230.cmd[0] = cmducs(0x4230, 3); ALLOC_STATE( unk4260, always, 4, "unk4260", 0 ); @@ -332,8 +336,8 @@ void r300InitCmdBuf(r300ContextPtr r300) r300->hw.rr.cmd[R300_RR_CMD_0] = cmducs(R300_RS_ROUTE_0, 1); ALLOC_STATE( unk43A4, always, 3, "unk43A4", 0 ); r300->hw.unk43A4.cmd[0] = cmducs(0x43A4, 2); - ALLOC_STATE( unk43E0, always, 4, "unk43E0", 0 ); - r300->hw.unk43E0.cmd[0] = cmducs(0x43E0, 3); + ALLOC_STATE( unk43E8, always, 2, "unk43E8", 0 ); + r300->hw.unk43E8.cmd[0] = cmducs(0x43E8, 1); ALLOC_STATE( fp, always, R300_FP_CMDSIZE, "fp", 0 ); r300->hw.fp.cmd[R300_FP_CMD_0] = cmducs(R300_PFS_CNTL_0, 3); r300->hw.fp.cmd[R300_FP_CMD_1] = cmducs(R300_PFS_NODE_0, 4); @@ -389,6 +393,8 @@ void r300InitCmdBuf(r300ContextPtr r300) r300->hw.vpi.cmd[R300_VPI_CMD_0] = cmdvpu(R300_PVS_UPLOAD_PROGRAM, 0); ALLOC_STATE( vpp, vpu, R300_VPP_CMDSIZE, "vpp", 0 ); r300->hw.vpp.cmd[R300_VPP_CMD_0] = cmdvpu(R300_PVS_UPLOAD_PARAMETERS, 0); + ALLOC_STATE( vps, vpu, R300_VPS_CMDSIZE, "vps", 0 ); + r300->hw.vps.cmd[R300_VPS_CMD_0] = cmdvpu(R300_PVS_UPLOAD_POINTSIZE, 1); /* Setup the atom linked list */ make_empty_list(&r300->hw.atomlist); @@ -413,6 +419,7 @@ void r300InitCmdBuf(r300ContextPtr r300) insert_at_tail(&r300->hw.atomlist, &r300->hw.txe); insert_at_tail(&r300->hw.atomlist, &r300->hw.unk4200); insert_at_tail(&r300->hw.atomlist, &r300->hw.unk4214); + insert_at_tail(&r300->hw.atomlist, &r300->hw.ps); insert_at_tail(&r300->hw.atomlist, &r300->hw.unk4230); insert_at_tail(&r300->hw.atomlist, &r300->hw.unk4260); insert_at_tail(&r300->hw.atomlist, &r300->hw.unk4274); @@ -424,7 +431,7 @@ void r300InitCmdBuf(r300ContextPtr r300) insert_at_tail(&r300->hw.atomlist, &r300->hw.ri); insert_at_tail(&r300->hw.atomlist, &r300->hw.rr); insert_at_tail(&r300->hw.atomlist, &r300->hw.unk43A4); - insert_at_tail(&r300->hw.atomlist, &r300->hw.unk43E0); + insert_at_tail(&r300->hw.atomlist, &r300->hw.unk43E8); insert_at_tail(&r300->hw.atomlist, &r300->hw.fp); insert_at_tail(&r300->hw.atomlist, &r300->hw.unk46A4); insert_at_tail(&r300->hw.atomlist, &r300->hw.fpi[0]); @@ -452,6 +459,7 @@ void r300InitCmdBuf(r300ContextPtr r300) insert_at_tail(&r300->hw.atomlist, &r300->hw.vpi); insert_at_tail(&r300->hw.atomlist, &r300->hw.vpp); + insert_at_tail(&r300->hw.atomlist, &r300->hw.vps); r300->hw.is_dirty = GL_TRUE; r300->hw.all_dirty = GL_TRUE;