nouveau: remove always false argument in nouveau_fence_new()
[mesa.git] / src / gallium / drivers / ddebug / dd_draw.c
index 3124d0552d0ee4490f020d62ca99134d36c1321b..7bc7844fd47f2baa26ed0fbfdbf2a64b3b95c897 100644 (file)
@@ -313,8 +313,19 @@ dd_dump_draw_vbo(struct dd_draw_state *dstate, struct pipe_draw_info *info, FILE
             DUMP_M(resource, dstate->sampler_views[sh][i], texture);
          }
 
-      /* TODO: print shader images */
-      /* TODO: print shader buffers */
+      for (i = 0; i < PIPE_MAX_SHADER_IMAGES; i++)
+         if (dstate->shader_images[sh][i].resource) {
+            DUMP_I(image_view, &dstate->shader_images[sh][i], i);
+            if (dstate->shader_images[sh][i].resource)
+               DUMP_M(resource, &dstate->shader_images[sh][i], resource);
+         }
+
+      for (i = 0; i < PIPE_MAX_SHADER_BUFFERS; i++)
+         if (dstate->shader_buffers[sh][i].buffer) {
+            DUMP_I(shader_buffer, &dstate->shader_buffers[sh][i], i);
+            if (dstate->shader_buffers[sh][i].buffer)
+               DUMP_M(resource, &dstate->shader_buffers[sh][i], buffer);
+         }
 
       fprintf(f, COLOR_SHADER "end shader: %s" COLOR_RESET "\n\n", shader_str[sh]);
    }
@@ -548,7 +559,7 @@ dd_flush_and_check_hang(struct dd_context *dctx,
    if (!fence)
       return false;
 
-   idle = screen->fence_finish(screen, NULL, fence, timeout_ms * 1000000);
+   idle = screen->fence_finish(screen, pipe, fence, timeout_ms * 1000000);
    screen->fence_reference(screen, &fence, NULL);
    if (!idle)
       fprintf(stderr, "dd: GPU hang detected!\n");
@@ -804,7 +815,20 @@ dd_copy_draw_state(struct dd_draw_state *dst, struct dd_draw_state *src)
          else
             dst->sampler_states[i][j] = NULL;
       }
-      /* TODO: shader buffers & images */
+
+      for (j = 0; j < PIPE_MAX_SHADER_IMAGES; j++) {
+         pipe_resource_reference(&dst->shader_images[i][j].resource,
+                                 src->shader_images[i][j].resource);
+         memcpy(&dst->shader_images[i][j], &src->shader_images[i][j],
+                sizeof(src->shader_images[i][j]));
+      }
+
+      for (j = 0; j < PIPE_MAX_SHADER_BUFFERS; j++) {
+         pipe_resource_reference(&dst->shader_buffers[i][j].buffer,
+                                 src->shader_buffers[i][j].buffer);
+         memcpy(&dst->shader_buffers[i][j], &src->shader_buffers[i][j],
+                sizeof(src->shader_buffers[i][j]));
+      }
    }
 
    if (src->velems)
@@ -1086,7 +1110,11 @@ dd_after_draw(struct dd_context *dctx, struct dd_call *call)
       case DD_DUMP_ALL_CALLS:
          if (!dscreen->no_flush)
             pipe->flush(pipe, NULL, 0);
-         dd_write_report(dctx, call, 0, false);
+         dd_write_report(dctx, call,
+                         PIPE_DUMP_CURRENT_STATES |
+                         PIPE_DUMP_CURRENT_SHADERS |
+                         PIPE_DUMP_LAST_COMMAND_BUFFER,
+                         false);
          break;
       case DD_DUMP_APITRACE_CALL:
          if (dscreen->apitrace_dump_call ==