summaryrefslogtreecommitdiff
path: root/src/gallium/auxiliary/draw/draw_pt.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/auxiliary/draw/draw_pt.c')
-rw-r--r--src/gallium/auxiliary/draw/draw_pt.c26
1 files changed, 20 insertions, 6 deletions
diff --git a/src/gallium/auxiliary/draw/draw_pt.c b/src/gallium/auxiliary/draw/draw_pt.c
index 2ea96c686d..f59fb86f78 100644
--- a/src/gallium/auxiliary/draw/draw_pt.c
+++ b/src/gallium/auxiliary/draw/draw_pt.c
@@ -73,7 +73,6 @@ draw_pt_arrays(struct draw_context *draw,
*/
-#if 0
if (!cliptest && !pipeline && !shading) {
/* This is the 'passthrough' path:
*/
@@ -81,6 +80,14 @@ draw_pt_arrays(struct draw_context *draw,
*/
middle = draw->pt.middle.fetch_emit;
}
+ else if (!cliptest && !shading) {
+ /* This is the 'passthrough' path targetting the pipeline backend.
+ */
+ /* Fetch user verts, emit pipeline verts, run pipeline:
+ */
+ middle = draw->pt.middle.fetch_pipeline;
+ }
+#if 0
else if (!cliptest && !pipeline) {
/* Fetch user verts, run vertex shader, emit hw verts:
*/
@@ -117,10 +124,9 @@ draw_pt_arrays(struct draw_context *draw,
middle = draw->pt.middle.fetch_shade_cliptest_pipeline;
}
#else
- if (cliptest || pipeline || shading)
+ else {
return FALSE;
-
- middle = draw->pt.middle.fetch_emit;
+ }
#endif
@@ -171,10 +177,9 @@ draw_pt_arrays(struct draw_context *draw,
*/
draw_do_flush( draw, DRAW_FLUSH_BACKEND );
- frontend->prepare( frontend, middle );
+ frontend->prepare( frontend, prim, middle );
frontend->run( frontend,
- prim,
draw_pt_elt_func( draw ),
draw_pt_elt_ptr( draw, start ),
count );
@@ -191,6 +196,10 @@ boolean draw_pt_init( struct draw_context *draw )
if (!draw->pt.middle.fetch_emit)
return FALSE;
+ draw->pt.middle.fetch_pipeline = draw_pt_fetch_pipeline( draw );
+ if (!draw->pt.middle.fetch_pipeline)
+ return FALSE;
+
draw->pt.front.vcache = draw_pt_vcache( draw );
if (!draw->pt.front.vcache)
return FALSE;
@@ -206,6 +215,11 @@ void draw_pt_destroy( struct draw_context *draw )
draw->pt.middle.fetch_emit = NULL;
}
+ if (draw->pt.middle.fetch_pipeline) {
+ draw->pt.middle.fetch_pipeline->destroy( draw->pt.middle.fetch_pipeline );
+ draw->pt.middle.fetch_pipeline = NULL;
+ }
+
if (draw->pt.front.vcache) {
draw->pt.front.vcache->destroy( draw->pt.front.vcache );
draw->pt.front.vcache = NULL;