From 32d61d06164c6247bed0fbf301afd24ce5d3473e Mon Sep 17 00:00:00 2001 From: Jerome Glisse Date: Thu, 27 Jul 2006 22:51:14 +0000 Subject: [PATCH] r300_emit.h cleanup. Remove unused macro Replace LOCAL_VAR, PREFIX* Indent code Remove radeon redundant CP type 3 packet --- src/mesa/drivers/dri/r300/r300_cmdbuf.c | 53 ++-- src/mesa/drivers/dri/r300/r300_emit.h | 361 ++++++++++++------------ src/mesa/drivers/dri/r300/r300_ioctl.c | 16 +- src/mesa/drivers/dri/r300/r300_render.c | 23 +- src/mesa/drivers/dri/r300/radeon_mm.c | 4 +- 5 files changed, 240 insertions(+), 217 deletions(-) diff --git a/src/mesa/drivers/dri/r300/r300_cmdbuf.c b/src/mesa/drivers/dri/r300/r300_cmdbuf.c index f39f71584ce..1b1d2bfb039 100644 --- a/src/mesa/drivers/dri/r300/r300_cmdbuf.c +++ b/src/mesa/drivers/dri/r300/r300_cmdbuf.c @@ -635,30 +635,35 @@ void r300EmitWait(r300ContextPtr rmesa, GLuint flags) void r300EmitAOS(r300ContextPtr rmesa, GLuint nr, GLuint offset) { - int sz = 1 + (nr >> 1) * 3 + (nr & 1) * 2; - int i; - LOCAL_VARS - - if (RADEON_DEBUG & DEBUG_VERTS) - fprintf(stderr, "%s: nr=%d, ofs=0x%08x\n", __func__, nr, offset); - - start_packet3(RADEON_CP_PACKET3_3D_LOAD_VBPNTR, sz-1); - e32(nr); - for(i=0;i+1state.aos[i].aos_size << 0) - |(rmesa->state.aos[i].aos_stride << 8) - |(rmesa->state.aos[i+1].aos_size << 16) - |(rmesa->state.aos[i+1].aos_stride << 24) - ); - e32(rmesa->state.aos[i].aos_offset+offset*4*rmesa->state.aos[i].aos_stride); - e32(rmesa->state.aos[i+1].aos_offset+offset*4*rmesa->state.aos[i+1].aos_stride); - } - if(nr & 1){ - e32( (rmesa->state.aos[nr-1].aos_size << 0) - |(rmesa->state.aos[nr-1].aos_stride << 8) - ); - e32(rmesa->state.aos[nr-1].aos_offset+offset*4*rmesa->state.aos[nr-1].aos_stride); - } + int sz = 1 + (nr >> 1) * 3 + (nr & 1) * 2; + int i; + int cmd_reserved = 0; + int cmd_written = 0; + drm_radeon_cmd_header_t *cmd = NULL; + + if (RADEON_DEBUG & DEBUG_VERTS) + fprintf(stderr, "%s: nr=%d, ofs=0x%08x\n", __func__, nr, offset); + + start_packet3(RADEON_CP_PACKET3_3D_LOAD_VBPNTR, sz-1); + e32(nr); + for(i=0;i+1state.aos[i].aos_size << 0) + |(rmesa->state.aos[i].aos_stride << 8) + |(rmesa->state.aos[i+1].aos_size << 16) + |(rmesa->state.aos[i+1].aos_stride << 24) + ); + e32(rmesa->state.aos[i].aos_offset + + offset*4*rmesa->state.aos[i].aos_stride); + e32(rmesa->state.aos[i+1].aos_offset + + offset*4*rmesa->state.aos[i+1].aos_stride); + } + if(nr & 1){ + e32( (rmesa->state.aos[nr-1].aos_size << 0) + |(rmesa->state.aos[nr-1].aos_stride << 8) + ); + e32(rmesa->state.aos[nr-1].aos_offset + + offset*4*rmesa->state.aos[nr-1].aos_stride); + } } diff --git a/src/mesa/drivers/dri/r300/r300_emit.h b/src/mesa/drivers/dri/r300/r300_emit.h index c7cb93d0ac2..d811cd38277 100644 --- a/src/mesa/drivers/dri/r300/r300_emit.h +++ b/src/mesa/drivers/dri/r300/r300_emit.h @@ -1,65 +1,64 @@ -#ifndef __EMIT_H__ -#define __EMIT_H__ +/* + * Copyright (C) 2005 Vladimir Dergachev. + * + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +/* + * Authors: + * Vladimir Dergachev + * Nicolai Haehnle + * Aapo Tahkola + * Ben Skeggs + * Jerome Glisse + */ + +/* This files defines functions for accessing R300 hardware. + */ +#ifndef __R300_EMIT_H__ +#define __R300_EMIT_H__ + #include "glheader.h" #include "r300_context.h" #include "r300_cmdbuf.h" +#include "radeon_reg.h" -/* convenience macros */ -#define RADEON_CP_PACKET0 0x00000000 -#define RADEON_CP_PACKET1 0x40000000 -#define RADEON_CP_PACKET2 0x80000000 -#define RADEON_CP_PACKET3 0xC0000000 - -#define RADEON_CP_PACKET3_NOP 0xC0001000 -#define RADEON_CP_PACKET3_NEXT_CHAR 0xC0001900 +/* + * CP type-3 packets + */ #define RADEON_CP_PACKET3_UNK1B 0xC0001B00 -#define RADEON_CP_PACKET3_PLY_NEXTSCAN 0xC0001D00 -#define RADEON_CP_PACKET3_SET_SCISSORS 0xC0001E00 -#define RADEON_CP_PACKET3_3D_RNDR_GEN_INDX_PRIM 0xC0002300 -#define RADEON_CP_PACKET3_LOAD_MICROCODE 0xC0002400 -#define RADEON_CP_PACKET3_WAIT_FOR_IDLE 0xC0002600 -#define RADEON_CP_PACKET3_3D_DRAW_VBUF 0xC0002800 -#define RADEON_CP_PACKET3_3D_DRAW_IMMD 0xC0002900 -#define RADEON_CP_PACKET3_3D_DRAW_INDX 0xC0002A00 -#define RADEON_CP_PACKET3_LOAD_PALETTE 0xC0002C00 #define RADEON_CP_PACKET3_INDX_BUFFER 0xC0003300 #define RADEON_CP_PACKET3_3D_DRAW_VBUF_2 0xC0003400 #define RADEON_CP_PACKET3_3D_DRAW_IMMD_2 0xC0003500 #define RADEON_CP_PACKET3_3D_DRAW_INDX_2 0xC0003600 #define RADEON_CP_PACKET3_3D_LOAD_VBPNTR 0xC0002F00 -#define RADEON_CP_PACKET3_CNTL_PAINT 0xC0009100 -#define RADEON_CP_PACKET3_CNTL_BITBLT 0xC0009200 -#define RADEON_CP_PACKET3_CNTL_SMALLTEXT 0xC0009300 -#define RADEON_CP_PACKET3_CNTL_HOSTDATA_BLT 0xC0009400 -#define RADEON_CP_PACKET3_CNTL_POLYLINE 0xC0009500 -#define RADEON_CP_PACKET3_CNTL_POLYSCANLINES 0xC0009800 -#define RADEON_CP_PACKET3_CNTL_PAINT_MULTI 0xC0009A00 -#define RADEON_CP_PACKET3_CNTL_BITBLT_MULTI 0xC0009B00 -#define RADEON_CP_PACKET3_CNTL_TRANS_BITBLT 0xC0009C00 #define RADEON_CP_PACKET3_3D_CLEAR_ZMASK 0xC0003202 #define RADEON_CP_PACKET3_3D_CLEAR_CMASK 0xC0003802 #define RADEON_CP_PACKET3_3D_CLEAR_HIZ 0xC0003702 #define CP_PACKET0(reg, n) (RADEON_CP_PACKET0 | ((n)<<16) | ((reg)>>2)) -/* Glue to R300 Mesa driver */ -#define LOCAL_VARS int cmd_reserved=0;\ - int cmd_written=0; \ - drm_radeon_cmd_header_t *cmd=NULL; - -#define PREFIX_VOID r300ContextPtr rmesa - -#define PREFIX PREFIX_VOID , - -#define PASS_PREFIX_VOID rmesa -#define PASS_PREFIX rmesa , - -typedef GLuint CARD32; - -/* This files defines functions for accessing R300 hardware. - It needs to be customized to whatever code r300_lib.c is used - in */ - void static inline check_space(int dwords) { } @@ -127,156 +126,164 @@ static __inline__ uint32_t cmdpacify(void) 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.. */ -#define reg_start(reg, num_extra) \ - { \ - int _n; \ - _n=(num_extra); \ - cmd=(drm_radeon_cmd_header_t *) r300AllocCmdBuf(rmesa, \ - (_n+2), \ - __FUNCTION__); \ - cmd_reserved=_n+2; \ - cmd_written=1; \ - cmd[0].i=cmdpacket0((reg), _n+1); \ - } - -/* 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", \ - __FILE__, __FUNCTION__, __LINE__); \ - exit(-1); \ - } - -/* Emit CARD32 freestyle*/ -#define e32(dword) { \ - if(cmd_written 0 then the following extra values are written + * to registers with address +4, +8 and so on.. + */ +#define reg_start(reg, num_extra) \ + do { \ + int _n; \ + _n=(num_extra); \ + cmd = r300AllocCmdBuf(rmesa, \ + (_n+2), \ + __FUNCTION__); \ + cmd_reserved=_n+2; \ + cmd_written=1; \ + cmd[0].i=cmdpacket0((reg), _n+1); \ + } while (0); + +/** + * Emit GLuint freestyle + */ +#define e32(dword) \ + do { \ + if(cmd_written0x3fff) {\ - 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); \ +#define vsf_start_fragment(dest, length) \ + do { \ + int _n; \ + _n = (length); \ + cmd = r300AllocCmdBuf(rmesa, \ + (_n+1), \ + __FUNCTION__); \ + cmd_reserved = _n+2; \ + cmd_written =1; \ + cmd[0].i = cmdvpu((dest), _n/4); \ + } while (0); + +#define start_packet3(packet, count) \ + { \ + int _n; \ + GLuint _p; \ + _n = (count); \ + _p = (packet); \ + cmd = 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) +/** + * Must be sent to switch to 2d commands + */ +void static inline end_3d(r300ContextPtr rmesa) { -LOCAL_VARS -(void)cmd_reserved; (void)cmd_written; + drm_radeon_cmd_header_t *cmd = NULL; -cmd=(drm_radeon_cmd_header_t *) r300AllocCmdBuf(rmesa, \ - 1, \ - __FUNCTION__); \ - -cmd[0].header.cmd_type=R300_CMD_END3D; + cmd = (drm_radeon_cmd_header_t*)r300AllocCmdBuf(rmesa, + 1, + __FUNCTION__); + cmd[0].header.cmd_type=R300_CMD_END3D; } -void static inline cp_delay(PREFIX unsigned short count) +void static inline cp_delay(r300ContextPtr rmesa, unsigned short count) { -LOCAL_VARS -(void)cmd_reserved; (void)cmd_written; - -cmd=(drm_radeon_cmd_header_t *) r300AllocCmdBuf(rmesa, \ - 1, \ - __FUNCTION__); \ + drm_radeon_cmd_header_t *cmd = NULL; -cmd[0].i=cmdcpdelay(count); + cmd = (drm_radeon_cmd_header_t*)r300AllocCmdBuf(rmesa, + 1, + __FUNCTION__); + cmd[0].i=cmdcpdelay(count); } -void static inline cp_wait(PREFIX unsigned char flags) +void static inline cp_wait(r300ContextPtr rmesa, unsigned char flags) { -LOCAL_VARS -(void)cmd_reserved; (void)cmd_written; - -cmd=(drm_radeon_cmd_header_t *) r300AllocCmdBuf(rmesa, \ - 1, \ - __FUNCTION__); \ + drm_radeon_cmd_header_t *cmd = NULL; -cmd[0].i=cmdwait(flags); + cmd = (drm_radeon_cmd_header_t*)r300AllocCmdBuf(rmesa, + 1, + __FUNCTION__); + cmd[0].i = cmdwait(flags); } -/* fire vertex buffer */ -static void inline fire_AOS(PREFIX int vertex_count, int type) +/** + * fire vertex buffer + */ +static void inline fire_AOS(r300ContextPtr rmesa, int vertex_count, int type) { -LOCAL_VARS -check_space(9); - -start_packet3(RADEON_CP_PACKET3_3D_DRAW_VBUF_2, 0); -/* e32(0x840c0024); */ - e32(R300_VAP_VF_CNTL__PRIM_WALK_VERTEX_LIST | (vertex_count<<16) | type); + int cmd_reserved = 0; + int cmd_written = 0; + drm_radeon_cmd_header_t *cmd = NULL; + check_space(9); + + start_packet3(RADEON_CP_PACKET3_3D_DRAW_VBUF_2, 0); +#ifdef NOTNEEDED_ANYMORE + e32(0x840c0024); +#endif + e32(R300_VAP_VF_CNTL__PRIM_WALK_VERTEX_LIST | + (vertex_count<<16) | type); } -/* these are followed by the corresponding data */ -#define start_index32_packet(vertex_count, type) \ - {\ - int _vc;\ - _vc=(vertex_count); \ - start_packet3(RADEON_CP_PACKET3_3D_DRAW_INDX_2, _vc); \ - e32(R300_VAP_VF_CNTL__PRIM_WALK_INDICES | (_vc<<16) | type \ - | R300_VAP_VF_CNTL__INDEX_SIZE_32bit); \ - } - -#define start_index16_packet(vertex_count, type) \ - {\ - int _vc, _n;\ - _vc=(vertex_count); \ - _n=(vertex_count+1)>>1; \ - start_packet3(RADEON_CP_PACKET3_3D_DRAW_INDX_2, _n); \ - e32(R300_VAP_VF_CNTL__PRIM_WALK_INDICES | (_vc<<16) | type); \ - } - -/* Interestingly enough this ones needs the call to setup_AOS, even thought - some of the data so setup is not needed and some is not as arbitrary - as when used by DRAW_VBUF_2 or DRAW_INDX_2 */ -#define start_immediate_packet(vertex_count, type, vertex_size) \ - {\ - int _vc; \ - _vc=(vertex_count); \ - start_packet3(RADEON_CP_PACKET3_3D_DRAW_IMMD_2, _vc*(vertex_size)); \ - e32(R300_VAP_VF_CNTL__PRIM_WALK_VERTEX_EMBEDDED | (_vc<<16) | type); \ - } +/** + * These are followed by the corresponding data + */ +#define start_index32_packet(vertex_count, type) \ + do { \ + int _vc; \ + _vc = (vertex_count); \ + start_packet3(RADEON_CP_PACKET3_3D_DRAW_INDX_2, _vc); \ + e32(R300_VAP_VF_CNTL__PRIM_WALK_INDICES | (_vc<<16) | \ + type | R300_VAP_VF_CNTL__INDEX_SIZE_32bit); \ + } while (0); + +#define start_index16_packet(vertex_count, type) \ + do { \ + int _vc, _n; \ + _vc = (vertex_count); \ + _n = (vertex_count+1)>>1; \ + start_packet3(RADEON_CP_PACKET3_3D_DRAW_INDX_2, _n); \ + e32(R300_VAP_VF_CNTL__PRIM_WALK_INDICES | (_vc<<16) | \ + type); \ + } while (0); + +/** + * Interestingly enough this ones needs the call to setup_AOS, even thought + * some of the data so setup is not needed and some is not as arbitrary + * as when used by DRAW_VBUF_2 or DRAW_INDX_2 + */ +#define start_immediate_packet(vertex_count, type, vertex_size) \ + do { \ + int _vc; \ + _vc = (vertex_count); \ + start_packet3(RADEON_CP_PACKET3_3D_DRAW_IMMD_2, \ + _vc*(vertex_size)); \ + e32(R300_VAP_VF_CNTL__PRIM_WALK_VERTEX_EMBEDDED | \ + (_vc<<16) | type); \ + } while (0); #endif diff --git a/src/mesa/drivers/dri/r300/r300_ioctl.c b/src/mesa/drivers/dri/r300/r300_ioctl.c index a05a29b7e1b..d0d2def8648 100644 --- a/src/mesa/drivers/dri/r300/r300_ioctl.c +++ b/src/mesa/drivers/dri/r300/r300_ioctl.c @@ -65,12 +65,12 @@ static void r300ClearBuffer(r300ContextPtr r300, int flags, int buffer) __DRIdrawablePrivate *dPriv = r300->radeon.dri.drawable; GLuint cboffset, cbpitch; drm_r300_cmd_header_t* cmd2; -#ifdef CB_DPATH - r300ContextPtr rmesa=r300; - LOCAL_VARS; -#else + int cmd_reserved = 0; + int cmd_written = 0; + drm_radeon_cmd_header_t *cmd = NULL; r300ContextPtr rmesa=r300; - LOCAL_VARS; + +#ifndef CB_DPATH int i; #endif @@ -249,7 +249,7 @@ static void r300ClearBuffer(r300ContextPtr r300, int flags, int buffer) #else #if 1 cp_wait(r300, R300_WAIT_3D | R300_WAIT_3D_CLEAN); - end_3d(PASS_PREFIX_VOID); + end_3d(rmesa); #endif R300_STATECHANGE(r300, cb); @@ -345,7 +345,9 @@ static void r300EmitClearState(GLcontext * ctx) r300ContextPtr rmesa=r300; __DRIdrawablePrivate *dPriv = r300->radeon.dri.drawable; int i; - LOCAL_VARS; + int cmd_reserved = 0; + int cmd_written = 0; + drm_radeon_cmd_header_t *cmd = NULL; R300_STATECHANGE(r300, vir[0]); diff --git a/src/mesa/drivers/dri/r300/r300_render.c b/src/mesa/drivers/dri/r300/r300_render.c index f86a439bc29..ebd3fc374c8 100644 --- a/src/mesa/drivers/dri/r300/r300_render.c +++ b/src/mesa/drivers/dri/r300/r300_render.c @@ -196,9 +196,11 @@ static int r300_get_num_verts(r300ContextPtr rmesa, /* vertex buffer implementation */ -static void inline fire_EB(PREFIX unsigned long addr, int vertex_count, int type, int elt_size) +static void inline fire_EB(r300ContextPtr rmesa, unsigned long addr, int vertex_count, int type, int elt_size) { - LOCAL_VARS + int cmd_reserved = 0; + int cmd_written = 0; + drm_radeon_cmd_header_t *cmd = NULL; unsigned long addr_a; unsigned long t_addr; unsigned long magic_1, magic_2; @@ -241,7 +243,7 @@ static void inline fire_EB(PREFIX unsigned long addr, int vertex_count, int type } else { e32(magic_2); /* Total number of dwords needed? */ } - //cp_delay(PASS_PREFIX 1); + //cp_delay(rmesa, 1); #if 0 fprintf(stderr, "magic_1 %d\n", magic_1); fprintf(stderr, "t_addr %x\n", t_addr); @@ -271,7 +273,7 @@ static void inline fire_EB(PREFIX unsigned long addr, int vertex_count, int type } else { e32((vertex_count+1)/2 /*+ addr_a/4*/); /* Total number of dwords needed? */ } - //cp_delay(PASS_PREFIX 1); + //cp_delay(rmesa, 1); #endif } @@ -291,7 +293,9 @@ static void r300_render_vb_primitive(r300ContextPtr rmesa, if(rmesa->state.VB.Elts){ r300EmitAOS(rmesa, rmesa->state.aos_count, /*0*/start); #if 0 - LOCAL_VARS + int cmd_reserved = 0; + int cmd_written = 0; + drm_radeon_cmd_header_t *cmd = NULL; int i; start_index32_packet(num_verts, type); for(i=0; i < num_verts; i++) @@ -309,11 +313,11 @@ static void r300_render_vb_primitive(r300ContextPtr rmesa, } r300EmitElts(ctx, rmesa->state.VB.Elts, num_verts, rmesa->state.VB.elt_size); - fire_EB(PASS_PREFIX rmesa->state.elt_dma.aos_offset, num_verts, type, rmesa->state.VB.elt_size); + fire_EB(rmesa, rmesa->state.elt_dma.aos_offset, num_verts, type, rmesa->state.VB.elt_size); #endif }else{ r300EmitAOS(rmesa, rmesa->state.aos_count, start); - fire_AOS(PASS_PREFIX num_verts, type); + fire_AOS(rmesa, num_verts, type); } } @@ -370,7 +374,10 @@ GLboolean r300_run_vb_render(GLcontext *ctx, r300ContextPtr rmesa = R300_CONTEXT(ctx); struct radeon_vertex_buffer *VB = &rmesa->state.VB; int i; - LOCAL_VARS + int cmd_reserved = 0; + int cmd_written = 0; + drm_radeon_cmd_header_t *cmd = NULL; + if (RADEON_DEBUG & DEBUG_PRIMS) fprintf(stderr, "%s\n", __FUNCTION__); diff --git a/src/mesa/drivers/dri/r300/radeon_mm.c b/src/mesa/drivers/dri/r300/radeon_mm.c index 2be3a1955ab..7595d2144f7 100644 --- a/src/mesa/drivers/dri/r300/radeon_mm.c +++ b/src/mesa/drivers/dri/r300/radeon_mm.c @@ -239,7 +239,9 @@ int radeon_mm_alloc(r300ContextPtr rmesa, int alignment, int size) #include "r300_emit.h" static void emit_lin_cp(r300ContextPtr rmesa, unsigned long dst, unsigned long src, unsigned long size) { - LOCAL_VARS + int cmd_reserved = 0; + int cmd_written = 0; + drm_radeon_cmd_header_t *cmd = NULL; int cp_size; -- 2.30.2