nvfx: rewrite draw code and buffer code
[mesa.git] / src / gallium / drivers / nvfx / nvfx_screen.h
index 5e1c3945aef8cf6a68ad16508335c30a7743c70f..473a1127752d440035716a929a6169b8c1c2a2fc 100644 (file)
@@ -3,9 +3,9 @@
 
 #include "util/u_double_list.h"
 #include "nouveau/nouveau_screen.h"
-#include "nv04_surface_2d.h"
+#include "nvfx_context.h"
 
-struct nvfx_context;
+struct nv04_2d_context;
 
 struct nvfx_screen {
        struct nouveau_screen base;
@@ -16,11 +16,11 @@ struct nvfx_screen {
 
        unsigned is_nv4x; /* either 0 or ~0 */
        boolean force_swtnl;
+       boolean trace_draw;
        unsigned vertex_buffer_reloc_flags;
        unsigned index_buffer_reloc_flags;
 
        /* HW graphics objects */
-       struct nv04_surface_2d *eng2d;
        struct nouveau_grobj *eng3d;
        struct nouveau_notifier *sync;
 
@@ -32,6 +32,20 @@ struct nvfx_screen {
        /* Vtxprog resources */
        struct nouveau_resource *vp_exec_heap;
        struct nouveau_resource *vp_data_heap;
+
+       struct nv04_2d_context* eng2d;
+
+       /* Once the amount of bytes drawn from the buffer reaches the updated size times this value,
+        * we will assume that the buffer will be drawn an huge number of times before the
+        * next modification
+        */
+       float static_reuse_threshold;
+
+       /* Cost of allocating a buffer in terms of the cost of copying a byte to an hardware buffer */
+       unsigned buffer_allocation_cost;
+
+       /* inline_cost/hardware_cost conversion ration */
+       float inline_cost_per_hardware_cost;
 };
 
 static INLINE struct nvfx_screen *
@@ -40,4 +54,7 @@ nvfx_screen(struct pipe_screen *screen)
        return (struct nvfx_screen *)screen;
 }
 
+int nvfx_screen_surface_init(struct pipe_screen *pscreen);
+void nvfx_screen_surface_takedown(struct pipe_screen *pscreen);
+
 #endif