swr: fix build with mingw
[mesa.git] / src / gallium / drivers / vc4 / vc4_screen.h
index 4a8b1f4577d6cdf31f55c6a95fe1b90175bd6200..2a5a160354eda3064f01f7424f9ab2f38845ff57 100644 (file)
 #define VC4_SCREEN_H
 
 #include "pipe/p_screen.h"
-#include "state_tracker/drm_driver.h"
+#include "renderonly/renderonly.h"
+#include "os/os_thread.h"
+#include "frontend/drm_driver.h"
+#include "util/list.h"
+#include "util/slab.h"
+
+#ifndef DRM_VC4_PARAM_SUPPORTS_ETC1
+#define DRM_VC4_PARAM_SUPPORTS_ETC1            4
+#endif
 
 struct vc4_bo;
 
@@ -38,16 +46,24 @@ struct vc4_bo;
 #define VC4_DEBUG_NORAST    0x0040
 #define VC4_DEBUG_ALWAYS_FLUSH 0x0080
 #define VC4_DEBUG_ALWAYS_SYNC  0x0100
+#define VC4_DEBUG_NIR       0x0200
+#define VC4_DEBUG_DUMP      0x0400
+#define VC4_DEBUG_SURFACE   0x0800
 
 #define VC4_MAX_MIP_LEVELS 12
 #define VC4_MAX_TEXTURE_SAMPLERS 16
 
+struct vc4_simulator_file;
+
 struct vc4_screen {
         struct pipe_screen base;
+        struct renderonly *ro;
+
         int fd;
 
-        void *simulator_mem_base;
-        uint32_t simulator_mem_size;
+        int v3d_ver;
+
+        const char *name;
 
         /** The last seqno we've completed a wait for.
          *
@@ -55,6 +71,36 @@ struct vc4_screen {
          * if we know the job's already done.
          */
         uint64_t finished_seqno;
+
+        struct slab_parent_pool transfer_pool;
+
+        struct vc4_bo_cache {
+                /** List of struct vc4_bo freed, by age. */
+                struct list_head time_list;
+                /** List of struct vc4_bo freed, per size, by age. */
+                struct list_head *size_list;
+                uint32_t size_list_size;
+
+                mtx_t lock;
+
+                uint32_t bo_size;
+                uint32_t bo_count;
+        } bo_cache;
+
+        struct hash_table *bo_handles;
+        mtx_t bo_handles_mutex;
+
+        uint32_t bo_size;
+        uint32_t bo_count;
+        bool has_control_flow;
+        bool has_etc1;
+        bool has_threaded_fs;
+        bool has_madvise;
+        bool has_tiling_ioctl;
+        bool has_perfmon_ioctl;
+        bool has_syncobj;
+
+        struct vc4_simulator_file *sim_file;
 };
 
 static inline struct vc4_screen *
@@ -63,21 +109,19 @@ vc4_screen(struct pipe_screen *screen)
         return (struct vc4_screen *)screen;
 }
 
-struct pipe_screen *vc4_screen_create(int fd);
-boolean vc4_screen_bo_get_handle(struct pipe_screen *pscreen,
-                                 struct vc4_bo *bo,
-                                 unsigned stride,
-                                 struct winsys_handle *whandle);
-struct vc4_bo *
-vc4_screen_bo_from_handle(struct pipe_screen *pscreen,
-                          struct winsys_handle *whandle);
+struct pipe_screen *vc4_screen_create(int fd, struct renderonly *ro);
+
+const void *
+vc4_screen_get_compiler_options(struct pipe_screen *pscreen,
+                                enum pipe_shader_ir ir,
+                                enum pipe_shader_type shader);
 
 extern uint32_t vc4_debug;
 
 void
-vc4_fence_init(struct vc4_screen *screen);
+vc4_fence_screen_init(struct vc4_screen *screen);
 
 struct vc4_fence *
-vc4_fence_create(struct vc4_screen *screen, uint64_t seqno);
+vc4_fence_create(struct vc4_screen *screen, uint64_t seqno, int fd);
 
 #endif /* VC4_SCREEN_H */