projects
/
mesa.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'mesa_7_6_branch'
[mesa.git]
/
src
/
gallium
/
auxiliary
/
draw
/
draw_pt_emit.c
diff --git
a/src/gallium/auxiliary/draw/draw_pt_emit.c
b/src/gallium/auxiliary/draw/draw_pt_emit.c
index d4eca80588b6de37dc02173147e61b79ce7105b0..064e16c295ca4df2e9c8dd7dbcc2fed36e849fe5 100644
(file)
--- a/
src/gallium/auxiliary/draw/draw_pt_emit.c
+++ b/
src/gallium/auxiliary/draw/draw_pt_emit.c
@@
-84,11
+84,11
@@
void draw_pt_emit_prepare( struct pt_emit *emit,
unsigned emit_sz = 0;
unsigned src_buffer = 0;
unsigned output_format;
unsigned emit_sz = 0;
unsigned src_buffer = 0;
unsigned output_format;
- unsigned src_offset = (vinfo->
src_index[i]
* 4 * sizeof(float) );
+ unsigned src_offset = (vinfo->
attrib[i].src_index
* 4 * sizeof(float) );
- switch (vinfo->
emit[i]
) {
+ switch (vinfo->
attrib[i].emit
) {
case EMIT_4F:
output_format = PIPE_FORMAT_R32G32B32A32_FLOAT;
emit_sz = 4 * sizeof(float);
case EMIT_4F:
output_format = PIPE_FORMAT_R32G32B32A32_FLOAT;
emit_sz = 4 * sizeof(float);
@@
-165,6
+165,14
@@
void draw_pt_emit( struct pt_emit *emit,
*/
draw_do_flush( draw, DRAW_FLUSH_BACKEND );
*/
draw_do_flush( draw, DRAW_FLUSH_BACKEND );
+ if (vertex_count == 0)
+ return;
+
+ if (vertex_count >= UNDEFINED_VERTEX_ID) {
+ assert(0);
+ return;
+ }
+
/* XXX: and work out some way to coordinate the render primitive
* between vbuf.c and here...
*/
/* XXX: and work out some way to coordinate the render primitive
* between vbuf.c and here...
*/
@@
-173,9
+181,11
@@
void draw_pt_emit( struct pt_emit *emit,
return;
}
return;
}
- hw_verts = render->allocate_vertices(render,
- (ushort)translate->key.output_stride,
- (ushort)vertex_count);
+ render->allocate_vertices(render,
+ (ushort)translate->key.output_stride,
+ (ushort)vertex_count);
+
+ hw_verts = render->map_vertices( render );
if (!hw_verts) {
assert(0);
return;
if (!hw_verts) {
assert(0);
return;
@@
-196,22
+206,21
@@
void draw_pt_emit( struct pt_emit *emit,
vertex_count,
hw_verts );
vertex_count,
hw_verts );
+ render->unmap_vertices( render,
+ 0,
+ vertex_count - 1 );
+
render->draw(render,
elts,
count);
render->draw(render,
elts,
count);
- render->release_vertices(render,
- hw_verts,
- translate->key.output_stride,
- vertex_count);
+ render->release_vertices(render);
}
void draw_pt_emit_linear(struct pt_emit *emit,
const float (*vertex_data)[4],
}
void draw_pt_emit_linear(struct pt_emit *emit,
const float (*vertex_data)[4],
- unsigned vertex_count,
unsigned stride,
unsigned stride,
- unsigned start,
unsigned count)
{
struct draw_context *draw = emit->draw;
unsigned count)
{
struct draw_context *draw = emit->draw;
@@
-226,21
+235,23
@@
void draw_pt_emit_linear(struct pt_emit *emit,
*/
draw_do_flush( draw, DRAW_FLUSH_BACKEND );
*/
draw_do_flush( draw, DRAW_FLUSH_BACKEND );
+ if (count >= UNDEFINED_VERTEX_ID)
+ goto fail;
+
/* XXX: and work out some way to coordinate the render primitive
* between vbuf.c and here...
*/
/* XXX: and work out some way to coordinate the render primitive
* between vbuf.c and here...
*/
- if (!draw->render->set_primitive(draw->render, emit->prim)) {
- assert(0);
- return;
- }
+ if (!draw->render->set_primitive(draw->render, emit->prim))
+ goto fail;
- hw_verts = render->allocate_vertices(render,
- (ushort)translate->key.output_stride,
- (ushort)count);
- if (!hw_verts) {
- assert(0);
- return;
- }
+ if (!render->allocate_vertices(render,
+ (ushort)translate->key.output_stride,
+ (ushort)count))
+ goto fail;
+
+ hw_verts = render->map_vertices( render );
+ if (!hw_verts)
+ goto fail;
translate->set_buffer(translate, 0,
vertex_data, stride);
translate->set_buffer(translate, 0,
vertex_data, stride);
@@
-251,12
+262,12
@@
void draw_pt_emit_linear(struct pt_emit *emit,
translate->run(translate,
0,
translate->run(translate,
0,
-
vertex_
count,
+ count,
hw_verts);
if (0) {
unsigned i;
hw_verts);
if (0) {
unsigned i;
- for (i = 0; i <
vertex_
count; i++) {
+ for (i = 0; i < count; i++) {
debug_printf("\n\n%s vertex %d:\n", __FUNCTION__, i);
draw_dump_emitted_vertex( emit->vinfo,
(const uint8_t *)hw_verts +
debug_printf("\n\n%s vertex %d:\n", __FUNCTION__, i);
draw_dump_emitted_vertex( emit->vinfo,
(const uint8_t *)hw_verts +
@@
-264,13
+275,17
@@
void draw_pt_emit_linear(struct pt_emit *emit,
}
}
}
}
+ render->unmap_vertices( render, 0, count - 1 );
+
+ render->draw_arrays(render, 0, count);
+
+ render->release_vertices(render);
- re
nder->draw_arrays(render, start, count)
;
+ re
turn
;
- render->release_vertices(render,
- hw_verts,
- translate->key.output_stride,
- vertex_count);
+fail:
+ assert(0);
+ return;
}
struct pt_emit *draw_pt_emit_create( struct draw_context *draw )
}
struct pt_emit *draw_pt_emit_create( struct draw_context *draw )