From 13ae06cf36f9d04c0a04cdc19196f400d7a8c642 Mon Sep 17 00:00:00 2001 From: Keith Whitwell Date: Wed, 29 Dec 2004 12:39:50 +0000 Subject: Large update - Remove via duplicates of shared template files - Update driver to work with current versions of the above - Rework dma accounting - Rework emitting to dma to use a consistent set of macros The handling of cliprects in the driver is still pretty questionable. --- src/mesa/drivers/dri/unichrome/via_vb.c | 132 ++++++++++++++------------------ 1 file changed, 58 insertions(+), 74 deletions(-) (limited to 'src/mesa/drivers/dri/unichrome/via_vb.c') diff --git a/src/mesa/drivers/dri/unichrome/via_vb.c b/src/mesa/drivers/dri/unichrome/via_vb.c index f989d8d0fd..222a0f07ca 100644 --- a/src/mesa/drivers/dri/unichrome/via_vb.c +++ b/src/mesa/drivers/dri/unichrome/via_vb.c @@ -39,12 +39,11 @@ static struct { void (*emit)(GLcontext *, GLuint, GLuint, void *, GLuint); - tnl_interp_func interp; - tnl_copy_pv_func copyPv; + tnl_interp_func interp; + tnl_copy_pv_func copy_pv; GLboolean (*check_tex_sizes)(GLcontext *ctx); - GLuint vertexSize; - GLuint vertexStrideShift; - GLuint vertexFormat; + GLuint vertex_size; + GLuint vertex_format; } setup_tab[VIA_MAX_SETUP]; #define TINY_VERTEX_FORMAT 1 @@ -71,12 +70,9 @@ static struct { #define VERTEX_COLOR via_color_t #define GET_VIEWPORT_MAT() VIA_CONTEXT(ctx)->ViewportMatrix.m #define GET_TEXSOURCE(n) n -#define GET_VERTEX_FORMAT() VIA_CONTEXT(ctx)->vertexSize -#define GET_VERTEX_SIZE() (1<vertexFormat +#define GET_VERTEX_SIZE() VIA_CONTEXT(ctx)->vertexSize * sizeof(GLuint) #define GET_VERTEX_STORE() VIA_CONTEXT(ctx)->verts -#define GET_VERTEX_STRIDE_SHIFT() VIA_CONTEXT(ctx)->vertexStrideShift -#define GET_UBYTE_COLOR_STORE() &VIA_CONTEXT(ctx)->UbyteColor -#define GET_UBYTE_SPEC_COLOR_STORE() &VIA_CONTEXT(ctx)->UbyteSecondaryColor #define INVALIDATE_STORED_VERTICES() #define HAVE_HW_VIEWPORT 0 @@ -98,11 +94,8 @@ static struct { #define PTEX_FALLBACK() FALLBACK(VIA_CONTEXT(ctx), VIA_FALLBACK_TEXTURE, 1) -#define IMPORT_FLOAT_COLORS via_import_float_colors -#define IMPORT_FLOAT_SPEC_COLORS via_import_float_spec_colors - #define INTERP_VERTEX setup_tab[VIA_CONTEXT(ctx)->setupIndex].interp -#define COPY_PV_VERTEX setup_tab[VIA_CONTEXT(ctx)->setupIndex].copyPv +#define COPY_PV_VERTEX setup_tab[VIA_CONTEXT(ctx)->setupIndex].copy_pv /*********************************************************************** @@ -117,94 +110,94 @@ static struct { ***********************************************************************/ #define IND (VIA_XYZW_BIT | VIA_RGBA_BIT) #define TAG(x) x##_wg -#include "via_dd_vbtmp.h" +#include "tnl_dd/t_dd_vbtmp.h" #define IND (VIA_XYZW_BIT | VIA_RGBA_BIT | VIA_SPEC_BIT) #define TAG(x) x##_wgs -#include "via_dd_vbtmp.h" +#include "tnl_dd/t_dd_vbtmp.h" #define IND (VIA_XYZW_BIT | VIA_RGBA_BIT | VIA_TEX0_BIT) #define TAG(x) x##_wgt0 -#include "via_dd_vbtmp.h" +#include "tnl_dd/t_dd_vbtmp.h" #define IND (VIA_XYZW_BIT | VIA_RGBA_BIT | VIA_TEX0_BIT | VIA_TEX1_BIT) #define TAG(x) x##_wgt0t1 -#include "via_dd_vbtmp.h" +#include "tnl_dd/t_dd_vbtmp.h" #define IND (VIA_XYZW_BIT | VIA_RGBA_BIT | VIA_TEX0_BIT | VIA_PTEX_BIT) #define TAG(x) x##_wgpt0 -#include "via_dd_vbtmp.h" +#include "tnl_dd/t_dd_vbtmp.h" #define IND (VIA_XYZW_BIT | VIA_RGBA_BIT | VIA_TEX0_BIT | VIA_TEX1_BIT |\ VIA_PTEX_BIT) #define TAG(x) x##_wgpt0t1 -#include "via_dd_vbtmp.h" +#include "tnl_dd/t_dd_vbtmp.h" #define IND (VIA_XYZW_BIT | VIA_RGBA_BIT | VIA_SPEC_BIT | VIA_TEX0_BIT) #define TAG(x) x##_wgst0 -#include "via_dd_vbtmp.h" +#include "tnl_dd/t_dd_vbtmp.h" #define IND (VIA_XYZW_BIT | VIA_RGBA_BIT | VIA_SPEC_BIT | VIA_TEX0_BIT |\ VIA_TEX1_BIT) #define TAG(x) x##_wgst0t1 -#include "via_dd_vbtmp.h" +#include "tnl_dd/t_dd_vbtmp.h" #define IND (VIA_XYZW_BIT | VIA_RGBA_BIT | VIA_SPEC_BIT | VIA_TEX0_BIT |\ VIA_PTEX_BIT) #define TAG(x) x##_wgspt0 -#include "via_dd_vbtmp.h" +#include "tnl_dd/t_dd_vbtmp.h" #define IND (VIA_XYZW_BIT | VIA_RGBA_BIT | VIA_SPEC_BIT | VIA_TEX0_BIT |\ VIA_TEX1_BIT | VIA_PTEX_BIT) #define TAG(x) x##_wgspt0t1 -#include "via_dd_vbtmp.h" +#include "tnl_dd/t_dd_vbtmp.h" #define IND (VIA_XYZW_BIT | VIA_RGBA_BIT | VIA_FOG_BIT) #define TAG(x) x##_wgf -#include "via_dd_vbtmp.h" +#include "tnl_dd/t_dd_vbtmp.h" #define IND (VIA_XYZW_BIT | VIA_RGBA_BIT | VIA_FOG_BIT | VIA_SPEC_BIT) #define TAG(x) x##_wgfs -#include "via_dd_vbtmp.h" +#include "tnl_dd/t_dd_vbtmp.h" #define IND (VIA_XYZW_BIT | VIA_RGBA_BIT | VIA_FOG_BIT | VIA_TEX0_BIT) #define TAG(x) x##_wgft0 -#include "via_dd_vbtmp.h" +#include "tnl_dd/t_dd_vbtmp.h" #define IND (VIA_XYZW_BIT | VIA_RGBA_BIT | VIA_FOG_BIT | VIA_TEX0_BIT |\ VIA_TEX1_BIT) #define TAG(x) x##_wgft0t1 -#include "via_dd_vbtmp.h" +#include "tnl_dd/t_dd_vbtmp.h" #define IND (VIA_XYZW_BIT | VIA_RGBA_BIT | VIA_FOG_BIT | VIA_TEX0_BIT |\ VIA_PTEX_BIT) #define TAG(x) x##_wgfpt0 -#include "via_dd_vbtmp.h" +#include "tnl_dd/t_dd_vbtmp.h" #define IND (VIA_XYZW_BIT | VIA_RGBA_BIT | VIA_FOG_BIT | VIA_TEX0_BIT |\ VIA_TEX1_BIT | VIA_PTEX_BIT) #define TAG(x) x##_wgfpt0t1 -#include "via_dd_vbtmp.h" +#include "tnl_dd/t_dd_vbtmp.h" #define IND (VIA_XYZW_BIT | VIA_RGBA_BIT | VIA_FOG_BIT | VIA_SPEC_BIT |\ VIA_TEX0_BIT) #define TAG(x) x##_wgfst0 -#include "via_dd_vbtmp.h" +#include "tnl_dd/t_dd_vbtmp.h" #define IND (VIA_XYZW_BIT | VIA_RGBA_BIT | VIA_FOG_BIT | VIA_SPEC_BIT |\ VIA_TEX0_BIT | VIA_TEX1_BIT) #define TAG(x) x##_wgfst0t1 -#include "via_dd_vbtmp.h" +#include "tnl_dd/t_dd_vbtmp.h" #define IND (VIA_XYZW_BIT | VIA_RGBA_BIT | VIA_FOG_BIT | VIA_SPEC_BIT |\ VIA_TEX0_BIT | VIA_PTEX_BIT) #define TAG(x) x##_wgfspt0 -#include "via_dd_vbtmp.h" +#include "tnl_dd/t_dd_vbtmp.h" #define IND (VIA_XYZW_BIT | VIA_RGBA_BIT | VIA_FOG_BIT | VIA_SPEC_BIT |\ VIA_TEX0_BIT | VIA_TEX1_BIT | VIA_PTEX_BIT) #define TAG(x) x##_wgfspt0t1 -#include "via_dd_vbtmp.h" +#include "tnl_dd/t_dd_vbtmp.h" static void init_setup_tab(void) { @@ -242,13 +235,11 @@ void viaPrintSetupFlags(char *msg, GLuint flags) { (flags & VIA_TEX1_BIT) ? " tex-1," : ""); } -void viaCheckTexSizes(GLcontext *ctx) { +void viaCheckTexSizes(GLcontext *ctx) +{ TNLcontext *tnl = TNL_CONTEXT(ctx); viaContextPtr vmesa = VIA_CONTEXT(ctx); - if (VIA_DEBUG) { - fprintf(stderr, "%s - in\n", __FUNCTION__); - fprintf(stderr, "setupIndex = %x\n", vmesa->setupIndex); - } + if (!setup_tab[vmesa->setupIndex].check_tex_sizes(ctx)) { /* Invalidate stored verts */ @@ -258,8 +249,11 @@ void viaCheckTexSizes(GLcontext *ctx) { if (!vmesa->Fallback && !(ctx->_TriangleCaps & (DD_TRI_LIGHT_TWOSIDE|DD_TRI_UNFILLED))) { tnl->Driver.Render.Interp = setup_tab[vmesa->setupIndex].interp; - tnl->Driver.Render.CopyPV = setup_tab[vmesa->setupIndex].copyPv; + tnl->Driver.Render.CopyPV = setup_tab[vmesa->setupIndex].copy_pv; } + + if (vmesa->Fallback) + tnl->Driver.Render.Start(ctx); } if (VIA_DEBUG) fprintf(stderr, "%s - out\n", __FUNCTION__); } @@ -270,14 +264,16 @@ void viaBuildVertices(GLcontext *ctx, GLuint newinputs) { viaContextPtr vmesa = VIA_CONTEXT(ctx); - GLubyte *v = ((GLubyte *)vmesa->verts + (start << vmesa->vertexStrideShift)); - GLuint stride = 1 << vmesa->vertexStrideShift; - if (VIA_DEBUG) fprintf(stderr, "%s - in\n", __FUNCTION__); + GLuint stride = vmesa->vertexSize * sizeof(GLuint); + GLubyte *v = (GLubyte *)vmesa->verts + start * stride; + newinputs |= vmesa->setupNewInputs; vmesa->setupNewInputs = 0; + if (!newinputs) return; - if (newinputs & VERT_BIT_CLIP) { + + if (newinputs & VERT_BIT_POS) { setup_tab[vmesa->setupIndex].emit(ctx, start, count, v, stride); } else { @@ -308,14 +304,13 @@ void viaBuildVertices(GLcontext *ctx, setup_tab[ind].emit(ctx, start, count, v, stride); } } - if (VIA_DEBUG) fprintf(stderr, "%s - out\n", __FUNCTION__); } void viaChooseVertexState(GLcontext *ctx) { TNLcontext *tnl = TNL_CONTEXT(ctx); viaContextPtr vmesa = VIA_CONTEXT(ctx); GLuint ind = VIA_XYZW_BIT | VIA_RGBA_BIT; - if (VIA_DEBUG) fprintf(stderr, "%s - in\n", __FUNCTION__); + if (ctx->_TriangleCaps & DD_SEPARATE_SPECULAR) ind |= VIA_SPEC_BIT; @@ -328,7 +323,7 @@ void viaChooseVertexState(GLcontext *ctx) { ind |= VIA_TEX0_BIT; vmesa->setupIndex = ind; - if (VIA_DEBUG) fprintf(stderr, "setupIndex = %x\n", vmesa->setupIndex); + viaPrintSetupFlags(__FUNCTION__, ind); if (ctx->_TriangleCaps & (DD_TRI_LIGHT_TWOSIDE|DD_TRI_UNFILLED)) { tnl->Driver.Render.Interp = via_interp_extras; @@ -336,30 +331,29 @@ void viaChooseVertexState(GLcontext *ctx) { } else { tnl->Driver.Render.Interp = setup_tab[ind].interp; - tnl->Driver.Render.CopyPV = setup_tab[ind].copyPv; + tnl->Driver.Render.CopyPV = setup_tab[ind].copy_pv; } - vmesa->vertexSize = setup_tab[ind].vertexSize; - vmesa->vertexStrideShift = setup_tab[ind].vertexStrideShift; - if (VIA_DEBUG) fprintf(stderr, "%s - out\n", __FUNCTION__); - + vmesa->vertexSize = setup_tab[ind].vertex_size; + vmesa->vertexFormat = setup_tab[ind].vertex_format; + + if (VIA_DEBUG) fprintf(stderr, "%s, size %d\n", __FUNCTION__, vmesa->vertexSize); } -void via_emit_contiguous_verts(GLcontext *ctx, - GLuint start, - GLuint count) { +void *via_emit_contiguous_verts(GLcontext *ctx, + GLuint start, + GLuint count, + void *dest) +{ viaContextPtr vmesa = VIA_CONTEXT(ctx); - GLuint vertexSize = vmesa->vertexSize * 4; - GLuint *dest = viaCheckDma(vmesa, (count - start) * vertexSize); - if (VIA_DEBUG) fprintf(stderr, "%s - in\n", __FUNCTION__); - - if (VIA_DEBUG) fprintf(stderr, "choose setup_tab[0x%x]\n", vmesa->setupIndex); - setup_tab[vmesa->setupIndex].emit(ctx, start, count, dest, vertexSize); - vmesa->dmaLow += (count - start) * vertexSize; - if (VIA_DEBUG) fprintf(stderr, "%s - out\n", __FUNCTION__); + GLuint stride = vmesa->vertexSize * 4; + setup_tab[vmesa->setupIndex].emit(ctx, start, count, dest, stride); + return (void *)((char *)dest + (count - start) * stride); } -void viaInitVB(GLcontext *ctx) { + +void viaInitVB(GLcontext *ctx) +{ viaContextPtr vmesa = VIA_CONTEXT(ctx); GLuint size = TNL_CONTEXT(ctx)->vb.Size; @@ -381,14 +375,4 @@ void viaFreeVB(GLcontext *ctx) { ALIGN_FREE(vmesa->verts); vmesa->verts = 0; } - - if (vmesa->UbyteSecondaryColor.Ptr) { - ALIGN_FREE((void*)vmesa->UbyteSecondaryColor.Ptr); - vmesa->UbyteSecondaryColor.Ptr = 0; - } - - if (vmesa->UbyteColor.Ptr) { - ALIGN_FREE((void*)vmesa->UbyteColor.Ptr); - vmesa->UbyteColor.Ptr = 0; - } } -- cgit v1.2.3