vbo_exec.c revision e8abd098b36c30d76b4c396970fd793ae58e0702
1fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell/*
2fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * Mesa 3-D graphics library
3fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * Version:  6.3
4fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell *
5fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * Copyright (C) 1999-2005  Brian Paul   All Rights Reserved.
6fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell *
7fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * Permission is hereby granted, free of charge, to any person obtaining a
8fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * copy of this software and associated documentation files (the "Software"),
9fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * to deal in the Software without restriction, including without limitation
10fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * and/or sell copies of the Software, and to permit persons to whom the
12fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * Software is furnished to do so, subject to the following conditions:
13fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell *
14fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * The above copyright notice and this permission notice shall be included
15fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * in all copies or substantial portions of the Software.
16fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell *
17fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
20fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
21fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
22fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell *
24fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * Authors:
25fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell *    Keith Whitwell <keith@tungstengraphics.com>
26fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell */
27fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
28fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
29fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell#include "api_arrayelt.h"
30fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell#include "glheader.h"
31fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell#include "imports.h"
32fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell#include "context.h"
33fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell#include "macros.h"
34fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell#include "mtypes.h"
35fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell#include "dlist.h"
36fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell#include "vtxfmt.h"
37fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
38fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell#include "vbo_context.h"
39fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
40fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwellvoid vbo_exec_init( GLcontext *ctx )
41fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
42fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell   struct vbo_exec_context *exec = &vbo_context(ctx)->exec;
43fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
44fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell   exec->ctx = ctx;
45fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
46fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell   /* Initialize the arrayelt helper
47fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell    */
48fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell   if (!ctx->aelt_context &&
49fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell       !_ae_create_context( ctx ))
50fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell      return;
51fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
52fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell   vbo_exec_vtx_init( exec );
53fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell   vbo_exec_array_init( exec );
54fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
55e8abd098b36c30d76b4c396970fd793ae58e0702Keith Whitwell   /* Hook our functions into exec and compile dispatch tables.
56e8abd098b36c30d76b4c396970fd793ae58e0702Keith Whitwell    */
57e8abd098b36c30d76b4c396970fd793ae58e0702Keith Whitwell   _mesa_install_exec_vtxfmt( ctx, &exec->vtxfmt );
58e8abd098b36c30d76b4c396970fd793ae58e0702Keith Whitwell
59fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell   ctx->Driver.NeedFlush = 0;
60fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell   ctx->Driver.CurrentExecPrimitive = PRIM_OUTSIDE_BEGIN_END;
61fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell   ctx->Driver.FlushVertices = vbo_exec_FlushVertices;
62fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
63e8abd098b36c30d76b4c396970fd793ae58e0702Keith Whitwell   vbo_exec_invalidate_state( ctx, ~0 );
64fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
65fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
66fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
67fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwellvoid vbo_exec_destroy( GLcontext *ctx )
68fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
69fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell   struct vbo_exec_context *exec = &vbo_context(ctx)->exec;
70fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
71fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell   if (ctx->aelt_context) {
72fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell      _ae_destroy_context( ctx );
73fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell      ctx->aelt_context = NULL;
74fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell   }
75fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
76fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell   vbo_exec_vtx_destroy( exec );
77fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell   vbo_exec_array_destroy( exec );
78fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
79fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
80fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell/* Really want to install these callbacks to a central facility to be
81fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * invoked according to the state flags.  That will have to wait for a
82fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell * mesa rework:
83fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell */
84fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwellvoid vbo_exec_invalidate_state( GLcontext *ctx, GLuint new_state )
85fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell{
86fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell   struct vbo_exec_context *exec = &vbo_context(ctx)->exec;
87fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
88fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell   if (new_state & (_NEW_PROGRAM|_NEW_EVAL))
89fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell      exec->eval.recalculate_maps = 1;
90fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
91fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell   _ae_invalidate_state(ctx, new_state);
92fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell}
93fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
94fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
95fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
96fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
97fd12b37dbada6f945a94b93ecf332d0b6a8eef06Keith Whitwell
98