~ubuntu-branches/ubuntu/precise/mesa/precise-updates

« back to all changes in this revision

Viewing changes to src/mesa/drivers/dri/mga/mgarender.c

  • Committer: Package Import Robot
  • Author(s): Robert Hooker
  • Date: 2012-02-02 12:05:48 UTC
  • mfrom: (1.7.1) (3.3.27 sid)
  • Revision ID: package-import@ubuntu.com-20120202120548-nvkma85jq0h4coix
Tags: 8.0~rc2-0ubuntu4
Drop drisearchdir handling, it is no longer needed with multiarch
and dri-alternates being removed.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/**************************************************************************
2
 
 
3
 
Copyright 2000, 2001 ATI Technologies Inc., Ontario, Canada, and
4
 
                     VA Linux Systems Inc., Fremont, California.
5
 
 
6
 
All Rights Reserved.
7
 
 
8
 
Permission is hereby granted, free of charge, to any person obtaining a
9
 
copy of this software and associated documentation files (the "Software"),
10
 
to deal in the Software without restriction, including without limitation
11
 
on the rights to use, copy, modify, merge, publish, distribute, sub
12
 
license, and/or sell copies of the Software, and to permit persons to whom
13
 
the Software is furnished to do so, subject to the following conditions:
14
 
 
15
 
The above copyright notice and this permission notice (including the next
16
 
paragraph) shall be included in all copies or substantial portions of the
17
 
Software.
18
 
 
19
 
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
 
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
 
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
22
 
ATI, VA LINUX SYSTEMS AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
23
 
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
24
 
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
25
 
USE OR OTHER DEALINGS IN THE SOFTWARE.
26
 
 
27
 
**************************************************************************/
28
 
 
29
 
/*
30
 
 * Authors:
31
 
 *   Keith Whitwell <keith@tungstengraphics.com>
32
 
 *
33
 
 */
34
 
 
35
 
 
36
 
/*
37
 
 * Render unclipped vertex buffers by emitting vertices directly to
38
 
 * dma buffers.  Use strip/fan hardware primitives where possible.
39
 
 * Simulate missing primitives with indexed vertices.
40
 
 */
41
 
#include "main/glheader.h"
42
 
#include "main/context.h"
43
 
#include "main/macros.h"
44
 
#include "main/imports.h"
45
 
#include "main/mtypes.h"
46
 
 
47
 
#include "math/m_xform.h"
48
 
 
49
 
#include "tnl/t_context.h"
50
 
 
51
 
#include "mgacontext.h"
52
 
#include "mgatris.h"
53
 
#include "mgaioctl.h"
54
 
#include "mgavb.h"
55
 
 
56
 
#define HAVE_POINTS      0
57
 
#define HAVE_LINES       0
58
 
#define HAVE_LINE_STRIPS 0
59
 
#define HAVE_TRIANGLES   1
60
 
#define HAVE_TRI_STRIPS  1
61
 
#define HAVE_TRI_STRIP_1 0
62
 
#define HAVE_TRI_FANS    1
63
 
#define HAVE_POLYGONS    0
64
 
#define HAVE_QUADS       0
65
 
#define HAVE_QUAD_STRIPS 0
66
 
 
67
 
#define HAVE_ELTS        0      /* for now */
68
 
 
69
 
static void mgaDmaPrimitive( struct gl_context *ctx, GLenum prim )
70
 
{
71
 
   mgaContextPtr mmesa = MGA_CONTEXT(ctx);
72
 
   GLuint hwprim;
73
 
 
74
 
   switch (prim) {
75
 
   case GL_TRIANGLES:
76
 
      hwprim = MGA_WA_TRIANGLES;
77
 
      break;
78
 
   case GL_TRIANGLE_STRIP:
79
 
      if (mmesa->vertex_size == 8)
80
 
         hwprim = MGA_WA_TRISTRIP_T0;
81
 
      else
82
 
         hwprim = MGA_WA_TRISTRIP_T0T1;
83
 
      break;
84
 
   case GL_TRIANGLE_FAN:
85
 
      if (mmesa->vertex_size == 8)
86
 
         hwprim = MGA_WA_TRIFAN_T0;
87
 
      else
88
 
         hwprim = MGA_WA_TRIFAN_T0T1;
89
 
      break;
90
 
   default:
91
 
      return;
92
 
   }
93
 
 
94
 
   mgaRasterPrimitive( ctx, GL_TRIANGLES, hwprim );
95
 
}
96
 
 
97
 
 
98
 
#define LOCAL_VARS mgaContextPtr mmesa = MGA_CONTEXT(ctx) 
99
 
#define INIT( prim ) do {                       \
100
 
   if (0) fprintf(stderr, "%s\n", __FUNCTION__);        \
101
 
   FLUSH_BATCH(mmesa);                          \
102
 
   mgaDmaPrimitive( ctx, prim );                \
103
 
} while (0)
104
 
#define FLUSH()  FLUSH_BATCH( mmesa )
105
 
#define GET_CURRENT_VB_MAX_VERTS() \
106
 
   0 /* fix me */
107
 
#define GET_SUBSEQUENT_VB_MAX_VERTS() \
108
 
   MGA_BUFFER_SIZE / (mmesa->vertex_size * 4)
109
 
 
110
 
 
111
 
#define ALLOC_VERTS( nr ) \
112
 
  mgaAllocDmaLow( mmesa, (nr) * mmesa->vertex_size * 4)
113
 
#define EMIT_VERTS( ctx, j, nr, buf ) \
114
 
   mga_emit_contiguous_verts(ctx, j, (j)+(nr), buf)
115
 
 
116
 
 
117
 
#define TAG(x) mga_##x
118
 
#include "tnl_dd/t_dd_dmatmp.h"
119
 
 
120
 
 
121
 
 
122
 
/**********************************************************************/
123
 
/*                          Render pipeline stage                     */
124
 
/**********************************************************************/
125
 
 
126
 
 
127
 
static GLboolean mga_run_render( struct gl_context *ctx,
128
 
                                  struct tnl_pipeline_stage *stage )
129
 
{
130
 
   mgaContextPtr mmesa = MGA_CONTEXT(ctx);
131
 
   TNLcontext *tnl = TNL_CONTEXT(ctx);
132
 
   struct vertex_buffer *VB = &tnl->vb; 
133
 
   GLuint i;
134
 
 
135
 
   /* Don't handle clipping or indexed vertices or vertex manipulations.
136
 
    */
137
 
   if (mmesa->RenderIndex != 0 || 
138
 
       !mga_validate_render( ctx, VB )) {
139
 
      return GL_TRUE;
140
 
   }
141
 
   
142
 
   tnl->Driver.Render.Start( ctx );
143
 
   mmesa->SetupNewInputs = ~0;      
144
 
 
145
 
   for (i = 0 ; i < VB->PrimitiveCount ; i++)
146
 
   {
147
 
      GLuint prim = _tnl_translate_prim(&VB->Primitive[i]);
148
 
      GLuint start = VB->Primitive[i].start;
149
 
      GLuint length = VB->Primitive[i].count;
150
 
 
151
 
      if (!length)
152
 
         continue;
153
 
 
154
 
      mga_render_tab_verts[prim & PRIM_MODE_MASK]( ctx, start, start + length, 
155
 
                                                   prim);
156
 
   } 
157
 
 
158
 
   tnl->Driver.Render.Finish( ctx );
159
 
 
160
 
   return GL_FALSE;             /* finished the pipe */
161
 
}
162
 
 
163
 
 
164
 
const struct tnl_pipeline_stage _mga_render_stage = 
165
 
166
 
   "mga render",
167
 
   NULL, 
168
 
   NULL,
169
 
   NULL,
170
 
   NULL,
171
 
   mga_run_render               /* run */
172
 
};