freedreno/a5xx: fixup caps
[mesa.git] / src / gallium / drivers / freedreno / freedreno_screen.h
index f9341d38eea9651646ee2afa408a01e8eb0f203e..087b07e0b09f261c8945c1ea3d24ec6d99611f4f 100644 (file)
 
 #include "pipe/p_screen.h"
 #include "util/u_memory.h"
+#include "util/slab.h"
+#include "os/os_thread.h"
 
-typedef uint32_t u32;
+#include "freedreno_batch_cache.h"
 
 struct fd_bo;
 
 struct fd_screen {
        struct pipe_screen base;
 
+       pipe_mutex lock;
+
+       /* it would be tempting to use pipe_reference here, but that
+        * really doesn't work well if it isn't the first member of
+        * the struct, so not quite so awesome to be adding refcnting
+        * further down the inheritance hierarchy:
+        */
+       int refcnt;
+
+       /* place for winsys to stash it's own stuff: */
+       void *winsys_priv;
+
+       struct slab_parent_pool transfer_pool;
+
        uint32_t gmemsize_bytes;
        uint32_t device_id;
        uint32_t gpu_id;         /* 220, 305, etc */
        uint32_t chip_id;        /* coreid:8 majorrev:8 minorrev:8 patch:8 */
+       uint32_t max_freq;
+       uint32_t max_rts;        /* max # of render targets */
+       uint32_t gmem_alignw, gmem_alignh;
+       bool has_timestamp;
+
+       void *compiler;          /* currently unused for a2xx */
 
        struct fd_device *dev;
        struct fd_pipe *pipe;
 
        int64_t cpu_gpu_time_delta;
+
+       struct fd_batch_cache batch_cache;
+
+       bool reorder;
 };
 
-static INLINE struct fd_screen *
+static inline struct fd_screen *
 fd_screen(struct pipe_screen *pscreen)
 {
        return (struct fd_screen *)pscreen;
@@ -64,16 +90,41 @@ boolean fd_screen_bo_get_handle(struct pipe_screen *pscreen,
                unsigned stride,
                struct winsys_handle *whandle);
 struct fd_bo * fd_screen_bo_from_handle(struct pipe_screen *pscreen,
-               struct winsys_handle *whandle,
-               unsigned *out_stride);
+               struct winsys_handle *whandle);
 
 struct pipe_screen * fd_screen_create(struct fd_device *dev);
 
 /* is a3xx patch revision 0? */
+/* TODO a306.0 probably doesn't need this.. be more clever?? */
 static inline boolean
 is_a3xx_p0(struct fd_screen *screen)
 {
-       return (screen->gpu_id & 0xff0000ff) == 0x03000000;
+       return (screen->chip_id & 0xff0000ff) == 0x03000000;
+}
+
+static inline boolean
+is_a3xx(struct fd_screen *screen)
+{
+       return (screen->gpu_id >= 300) && (screen->gpu_id < 400);
+}
+
+static inline boolean
+is_a4xx(struct fd_screen *screen)
+{
+       return (screen->gpu_id >= 400) && (screen->gpu_id < 500);
+}
+
+static inline boolean
+is_a5xx(struct fd_screen *screen)
+{
+       return (screen->gpu_id >= 500) && (screen->gpu_id < 600);
+}
+
+/* is it using the ir3 compiler (shader isa introduced with a3xx)? */
+static inline boolean
+is_ir3(struct fd_screen *screen)
+{
+       return is_a3xx(screen) || is_a4xx(screen) || is_a5xx(screen);
 }
 
 #endif /* FREEDRENO_SCREEN_H_ */