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

« back to all changes in this revision

Viewing changes to src/gallium/auxiliary/draw/draw_pipe_util.c

  • Committer: Package Import Robot
  • Author(s): Maarten Lankhorst
  • Date: 2012-11-30 20:58:34 UTC
  • Revision ID: package-import@ubuntu.com-20121130205834-gazuvne3fpwlf012
Tags: upstream-9.0
ImportĀ upstreamĀ versionĀ 9.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/**************************************************************************
 
2
 * 
 
3
 * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas.
 
4
 * All Rights Reserved.
 
5
 * 
 
6
 * Permission is hereby granted, free of charge, to any person obtaining a
 
7
 * copy of this software and associated documentation files (the
 
8
 * "Software"), to deal in the Software without restriction, including
 
9
 * without limitation the rights to use, copy, modify, merge, publish,
 
10
 * distribute, sub license, and/or sell copies of the Software, and to
 
11
 * permit persons to whom the Software is furnished to do so, subject to
 
12
 * the following conditions:
 
13
 * 
 
14
 * The above copyright notice and this permission notice (including the
 
15
 * next paragraph) shall be included in all copies or substantial portions
 
16
 * of the Software.
 
17
 * 
 
18
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 
19
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 
20
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
 
21
 * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
 
22
 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 
23
 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 
24
 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
25
 * 
 
26
 **************************************************************************/
 
27
 
 
28
 /*
 
29
  * Authors:
 
30
  *   Keith Whitwell <keith@tungstengraphics.com>
 
31
  */
 
32
 
 
33
#include "util/u_memory.h"
 
34
#include "draw/draw_private.h"
 
35
#include "draw/draw_pipe.h"
 
36
 
 
37
 
 
38
 
 
39
void
 
40
draw_pipe_passthrough_point(struct draw_stage *stage, struct prim_header *header)
 
41
{
 
42
   stage->next->point(stage->next, header);
 
43
}
 
44
 
 
45
void
 
46
draw_pipe_passthrough_line(struct draw_stage *stage, struct prim_header *header)
 
47
{
 
48
   stage->next->line(stage->next, header);
 
49
}
 
50
 
 
51
void
 
52
draw_pipe_passthrough_tri(struct draw_stage *stage, struct prim_header *header)
 
53
{
 
54
   stage->next->tri(stage->next, header);
 
55
}
 
56
 
 
57
 
 
58
 
 
59
 
 
60
 
 
61
/* This is only used for temporary verts.
 
62
 */
 
63
#define MAX_VERTEX_SIZE ((2 + PIPE_MAX_SHADER_OUTPUTS) * 4 * sizeof(float))
 
64
 
 
65
 
 
66
/**
 
67
 * Allocate space for temporary post-transform vertices, such as for clipping.
 
68
 */
 
69
boolean draw_alloc_temp_verts( struct draw_stage *stage, unsigned nr )
 
70
{
 
71
   assert(!stage->tmp);
 
72
 
 
73
   stage->tmp = NULL;
 
74
   stage->nr_tmps = nr;
 
75
 
 
76
   if (nr != 0)
 
77
   {
 
78
      unsigned i;
 
79
      ubyte *store = (ubyte *) MALLOC( MAX_VERTEX_SIZE * nr );
 
80
 
 
81
      if (store == NULL)
 
82
         return FALSE;
 
83
 
 
84
      stage->tmp = (struct vertex_header **) MALLOC( sizeof(struct vertex_header *) * nr );
 
85
      if (stage->tmp == NULL) {
 
86
         FREE(store);
 
87
         return FALSE;
 
88
      }
 
89
         
 
90
      for (i = 0; i < nr; i++)
 
91
         stage->tmp[i] = (struct vertex_header *)(store + i * MAX_VERTEX_SIZE);
 
92
   }
 
93
 
 
94
   return TRUE;
 
95
}
 
96
 
 
97
 
 
98
void draw_free_temp_verts( struct draw_stage *stage )
 
99
{
 
100
   if (stage->tmp) {
 
101
      FREE( stage->tmp[0] );
 
102
      FREE( stage->tmp );
 
103
      stage->tmp = NULL;
 
104
   }
 
105
}
 
106
 
 
107
 
 
108
/* Reset vertex ids.  This is basically a type of flush.
 
109
 *
 
110
 * Called only from draw_pipe_vbuf.c
 
111
 */
 
112
void draw_reset_vertex_ids(struct draw_context *draw)
 
113
{
 
114
   struct draw_stage *stage = draw->pipeline.first;
 
115
   
 
116
   while (stage) {
 
117
      unsigned i;
 
118
 
 
119
      for (i = 0; i < stage->nr_tmps; i++)
 
120
         stage->tmp[i]->vertex_id = UNDEFINED_VERTEX_ID;
 
121
 
 
122
      stage = stage->next;
 
123
   }
 
124
 
 
125
   if (draw->pipeline.verts)
 
126
   {
 
127
      unsigned i;
 
128
      char *verts = draw->pipeline.verts;
 
129
      unsigned stride = draw->pipeline.vertex_stride;
 
130
 
 
131
      for (i = 0; i < draw->pipeline.vertex_count; i++) {
 
132
         ((struct vertex_header *)verts)->vertex_id = UNDEFINED_VERTEX_ID;
 
133
         verts += stride;
 
134
      }
 
135
   }
 
136
}
 
137