Merge branch '7.8'
[mesa.git] / src / gallium / drivers / failover / fo_context.c
index 37184eac7b17522b6862d6c6bf5680fab3c15b9f..325a1009541ed8984436de76225be52645026a81 100644 (file)
@@ -27,7 +27,6 @@
 
 
 #include "pipe/p_defines.h"
-#include "pipe/internal/p_winsys_screen.h"
 #include "util/u_memory.h"
 #include "pipe/p_context.h"
 
@@ -44,11 +43,19 @@ static void failover_destroy( struct pipe_context *pipe )
 }
 
 
+void failover_fail_over( struct failover_context *failover )
+{
+   failover->dirty = TRUE;
+   failover->mode = FO_SW;
+}
 
-static boolean failover_draw_elements( struct pipe_context *pipe,
-                                      struct pipe_buffer *indexBuffer,
-                                      unsigned indexSize,
-                                      unsigned prim, unsigned start, unsigned count)
+
+static void failover_draw_elements( struct pipe_context *pipe,
+                                    struct pipe_resource *indexResource,
+                                    unsigned indexSize,
+                                    unsigned prim, 
+                                    unsigned start, 
+                                    unsigned count)
 {
    struct failover_context *failover = failover_context( pipe );
 
@@ -62,27 +69,25 @@ static boolean failover_draw_elements( struct pipe_context *pipe,
    /* Try hardware:
     */
    if (failover->mode == FO_HW) {
-      if (!failover->hw->draw_elements( failover->hw, 
-                                       indexBuffer, 
-                                       indexSize, 
-                                       prim, 
-                                       start, 
-                                       count )) {
-
-        failover->hw->flush( failover->hw, ~0, NULL );
-        failover->mode = FO_SW;
-      }
+      failover->hw->draw_elements( failover->hw, 
+                                   indexResource, 
+                                   indexSize, 
+                                   prim, 
+                                   start, 
+                                   count );
    }
 
    /* Possibly try software:
     */
    if (failover->mode == FO_SW) {
 
-      if (failover->dirty) 
+      if (failover->dirty) {
+         failover->hw->flush( failover->hw, ~0, NULL );
         failover_state_emit( failover );
+      }
 
       failover->sw->draw_elements( failover->sw, 
-                                  indexBuffer
+                                  indexResource
                                   indexSize, 
                                   prim, 
                                   start, 
@@ -94,38 +99,25 @@ static boolean failover_draw_elements( struct pipe_context *pipe,
        */
       failover->sw->flush( failover->sw, ~0, NULL );
    }
-
-   return TRUE;
 }
 
 
-static boolean failover_draw_arrays( struct pipe_context *pipe,
+static void failover_draw_arrays( struct pipe_context *pipe,
                                     unsigned prim, unsigned start, unsigned count)
 {
-   return failover_draw_elements(pipe, NULL, 0, prim, start, count);
-}
-
-static unsigned int
-failover_is_texture_referenced( struct pipe_context *_pipe,
-                               struct pipe_texture *texture,
-                               unsigned face, unsigned level)
-{
-   struct failover_context *failover = failover_context( _pipe );
-   struct pipe_context *pipe = (failover->mode == FO_HW) ?
-      failover->hw : failover->sw;
-
-   return pipe->is_texture_referenced(pipe, texture, face, level);
+   failover_draw_elements(pipe, NULL, 0, prim, start, count);
 }
 
 static unsigned int
-failover_is_buffer_referenced( struct pipe_context *_pipe,
-                              struct pipe_buffer *buf)
+failover_is_resource_referenced( struct pipe_context *_pipe,
+                                struct pipe_resource *resource,
+                                unsigned face, unsigned level)
 {
    struct failover_context *failover = failover_context( _pipe );
    struct pipe_context *pipe = (failover->mode == FO_HW) ?
       failover->hw : failover->sw;
 
-   return pipe->is_buffer_referenced(pipe, buf);
+   return pipe->is_resource_referenced(pipe, resource, face, level);
 }
 
 struct pipe_context *failover_create( struct pipe_context *hw,
@@ -172,8 +164,7 @@ struct pipe_context *failover_create( struct pipe_context *hw,
 #endif
 
    failover->pipe.flush = hw->flush;
-   failover->pipe.is_texture_referenced = failover_is_texture_referenced;
-   failover->pipe.is_buffer_referenced = failover_is_buffer_referenced;
+   failover->pipe.is_resource_referenced = failover_is_resource_referenced;
 
    failover->dirty = 0;