summaryrefslogtreecommitdiff
path: root/src/gallium/auxiliary/draw/draw_pt_fetch_shade_emit.c
diff options
context:
space:
mode:
authorKeith Whitwell <keith@tungstengraphics.com>2008-06-02 12:59:16 +0100
committerKeith Whitwell <keith@tungstengraphics.com>2008-06-04 11:25:54 +0100
commit0a4aea0e86a897d9afb9f2a0ec27f03faf8f1b21 (patch)
tree9873d3bcf68cf71e2e5abc7b60f911ad73cc5f90 /src/gallium/auxiliary/draw/draw_pt_fetch_shade_emit.c
parentc218b8c6c6593f434a749bf67ad976007e6eef61 (diff)
draw: respect driver's max vertex buffer size
Diffstat (limited to 'src/gallium/auxiliary/draw/draw_pt_fetch_shade_emit.c')
-rw-r--r--src/gallium/auxiliary/draw/draw_pt_fetch_shade_emit.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_emit.c b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_emit.c
index efa6dddbda..5a1d79d996 100644
--- a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_emit.c
+++ b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_emit.c
@@ -70,7 +70,8 @@ struct fetch_shade_emit {
static void fse_prepare( struct draw_pt_middle_end *middle,
unsigned prim,
- unsigned opt )
+ unsigned opt,
+ unsigned *max_vertices )
{
struct fetch_shade_emit *fse = (struct fetch_shade_emit *)middle;
struct draw_context *draw = fse->draw;
@@ -189,6 +190,11 @@ static void fse_prepare( struct draw_pt_middle_end *middle,
draw->pt.vertex_buffer[buf].pitch );
}
+ *max_vertices = (draw->render->max_vertex_buffer_bytes /
+ (vinfo->size * 4));
+
+
+
//return TRUE;
}
@@ -204,7 +210,6 @@ static void fse_run_linear( struct draw_pt_middle_end *middle,
{
struct fetch_shade_emit *fse = (struct fetch_shade_emit *)middle;
struct draw_context *draw = fse->draw;
- unsigned alloc_count = align(count, 4);
char *hw_verts;
/* XXX: need to flush to get prim_vbuf.c to release its allocation??
@@ -213,7 +218,7 @@ static void fse_run_linear( struct draw_pt_middle_end *middle,
hw_verts = draw->render->allocate_vertices( draw->render,
(ushort)fse->key.output_stride,
- (ushort)alloc_count );
+ (ushort)count );
if (!hw_verts) {
assert(0);
@@ -264,7 +269,6 @@ fse_run(struct draw_pt_middle_end *middle,
{
struct fetch_shade_emit *fse = (struct fetch_shade_emit *)middle;
struct draw_context *draw = fse->draw;
- unsigned alloc_count = align(fetch_count, 4);
void *hw_verts;
/* XXX: need to flush to get prim_vbuf.c to release its allocation??
@@ -273,7 +277,7 @@ fse_run(struct draw_pt_middle_end *middle,
hw_verts = draw->render->allocate_vertices( draw->render,
(ushort)fse->key.output_stride,
- (ushort)alloc_count );
+ (ushort)fetch_count );
if (!hw_verts) {
assert(0);
return;
@@ -319,7 +323,6 @@ static void fse_run_linear_elts( struct draw_pt_middle_end *middle,
{
struct fetch_shade_emit *fse = (struct fetch_shade_emit *)middle;
struct draw_context *draw = fse->draw;
- unsigned alloc_count = align(count, 4);
char *hw_verts;
/* XXX: need to flush to get prim_vbuf.c to release its allocation??
@@ -328,7 +331,7 @@ static void fse_run_linear_elts( struct draw_pt_middle_end *middle,
hw_verts = draw->render->allocate_vertices( draw->render,
(ushort)fse->key.output_stride,
- (ushort)alloc_count );
+ (ushort)count );
if (!hw_verts) {
assert(0);