swr: automake: silence the python invocation
[mesa.git] / src / gallium / drivers / freedreno / freedreno_screen.h
index 720ee054f89da530cc5373407966f9bf812391d5..a81c77863902c8e051a036e0eb9c8f87cfb02967 100644 (file)
@@ -42,8 +42,24 @@ struct fd_bo;
 struct fd_screen {
        struct pipe_screen base;
 
+       /* 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;
+
        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 */
+
+       void *compiler;          /* currently unused for a2xx */
 
        struct fd_device *dev;
        struct fd_pipe *pipe;
@@ -51,7 +67,7 @@ struct fd_screen {
        int64_t cpu_gpu_time_delta;
 };
 
-static INLINE struct fd_screen *
+static inline struct fd_screen *
 fd_screen(struct pipe_screen *pscreen)
 {
        return (struct fd_screen *)pscreen;
@@ -67,4 +83,31 @@ struct fd_bo * fd_screen_bo_from_handle(struct pipe_screen *pscreen,
 
 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->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);
+}
+
+/* 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);
+}
+
 #endif /* FREEDRENO_SCREEN_H_ */