summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mesa/drivers/dri/r300/r300_emit.h32
-rw-r--r--src/mesa/drivers/dri/r300/r300_render.c3
2 files changed, 35 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/r300/r300_emit.h b/src/mesa/drivers/dri/r300/r300_emit.h
index cd995dcced..cd49602fc5 100644
--- a/src/mesa/drivers/dri/r300/r300_emit.h
+++ b/src/mesa/drivers/dri/r300/r300_emit.h
@@ -86,6 +86,16 @@ static __inline__ uint32_t cmdvpu(int addr, int count)
return cmd.u;
}
+static __inline__ uint32_t cmdpacket3(int packet)
+{
+ drm_r300_cmd_header_t cmd;
+
+ cmd.packet3.cmd_type = R300_CMD_PACKET3;
+ cmd.packet3.packet = packet;
+
+ return cmd.u;
+}
+
/* Prepare to write a register value to register at address reg.
If num_extra > 0 then the following extra values are written
to registers with address +4, +8 and so on.. */
@@ -104,6 +114,8 @@ static __inline__ uint32_t cmdvpu(int addr, int count)
/* Prepare to write a register value to register at address reg.
If num_extra > 0 then the following extra values are written
into the same register. */
+/* It is here to permit r300_lib to compile and link anyway, but
+ complain if actually called */
#define reg_start_pump(reg, num_extra) \
{ \
fprintf(stderr, "I am not defined.. Error ! in %s::%s at line %d\n", \
@@ -137,6 +149,26 @@ static __inline__ uint32_t cmdvpu(int addr, int count)
cmd[0].i=cmdvpu((dest), _n/4); \
}
+#define start_packet3(packet, count) \
+ { \
+ int _n; \
+ CARD32 _p; \
+ _n=(count); \
+ _p=(packet); \
+ cmd=(drm_radeon_cmd_header_t *) r300AllocCmdBuf(rmesa, \
+ (_n+3), \
+ __FUNCTION__); \
+ cmd_reserved=_n+3; \
+ cmd_written=2; \
+ if(_n>0x3fff) {\
+ fprintf(stderr,"Too big packet3 %08x: cannot store %d dwords\n", \
+ _p, _n); \
+ exit(-1); \
+ } \
+ cmd[0].i=cmdpacket3(R300_CMD_PACKET3_RAW); \
+ cmd[1].i=_p | ((_n & 0x3fff)<<16); \
+ }
+
/* must be sent to switch to 2d commands */
void static inline end_3d(PREFIX_VOID)
{
diff --git a/src/mesa/drivers/dri/r300/r300_render.c b/src/mesa/drivers/dri/r300/r300_render.c
index 92d629f3b7..d229b7d559 100644
--- a/src/mesa/drivers/dri/r300/r300_render.c
+++ b/src/mesa/drivers/dri/r300/r300_render.c
@@ -162,6 +162,9 @@ static void r300_render_primitive(r300ContextPtr rmesa,
break;
}
end_3d(PASS_PREFIX_VOID);
+
+ start_packet3(RADEON_CP_PACKET3_NOP, 0);
+ e32(0x0);
}
/**