Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. #ifndef __NOUVEAU_SCREEN_H__
  2. #define __NOUVEAU_SCREEN_H__
  3.  
  4. #include "pipe/p_screen.h"
  5. #include "util/u_memory.h"
  6.  
  7. #ifdef DEBUG
  8. # define NOUVEAU_ENABLE_DRIVER_STATISTICS
  9. #endif
  10.  
  11. typedef uint32_t u32;
  12. typedef uint16_t u16;
  13.  
  14. extern int nouveau_mesa_debug;
  15.  
  16. struct nouveau_bo;
  17.  
  18. struct nouveau_screen {
  19.         struct pipe_screen base;
  20.         struct nouveau_device *device;
  21.         struct nouveau_object *channel;
  22.         struct nouveau_client *client;
  23.         struct nouveau_pushbuf *pushbuf;
  24.  
  25.         int refcount;
  26.  
  27.         unsigned vidmem_bindings; /* PIPE_BIND_* where VRAM placement is desired */
  28.         unsigned sysmem_bindings; /* PIPE_BIND_* where GART placement is desired */
  29.         unsigned lowmem_bindings; /* PIPE_BIND_* that require an address < 4 GiB */
  30.         /*
  31.          * For bindings with (vidmem & sysmem) bits set, PIPE_USAGE_* decides
  32.          * placement.
  33.          */
  34.  
  35.         uint16_t class_3d;
  36.  
  37.         struct {
  38.                 struct nouveau_fence *head;
  39.                 struct nouveau_fence *tail;
  40.                 struct nouveau_fence *current;
  41.                 u32 sequence;
  42.                 u32 sequence_ack;
  43.                 void (*emit)(struct pipe_screen *, u32 *sequence);
  44.                 u32  (*update)(struct pipe_screen *);
  45.         } fence;
  46.  
  47.         struct nouveau_mman *mm_VRAM;
  48.         struct nouveau_mman *mm_GART;
  49.  
  50.         int64_t cpu_gpu_time_delta;
  51.  
  52.         boolean hint_buf_keep_sysmem_copy;
  53.  
  54.         struct {
  55.                 unsigned profiles_checked;
  56.                 unsigned profiles_present;
  57.         } firmware_info;
  58.  
  59. #ifdef NOUVEAU_ENABLE_DRIVER_STATISTICS
  60.    union {
  61.       uint64_t v[29];
  62.       struct {
  63.          uint64_t tex_obj_current_count;
  64.          uint64_t tex_obj_current_bytes;
  65.          uint64_t buf_obj_current_count;
  66.          uint64_t buf_obj_current_bytes_vid;
  67.          uint64_t buf_obj_current_bytes_sys;
  68.          uint64_t tex_transfers_rd;
  69.          uint64_t tex_transfers_wr;
  70.          uint64_t tex_copy_count;
  71.          uint64_t tex_blit_count;
  72.          uint64_t tex_cache_flush_count;
  73.          uint64_t buf_transfers_rd;
  74.          uint64_t buf_transfers_wr;
  75.          uint64_t buf_read_bytes_staging_vid;
  76.          uint64_t buf_write_bytes_direct;
  77.          uint64_t buf_write_bytes_staging_vid;
  78.          uint64_t buf_write_bytes_staging_sys;
  79.          uint64_t buf_copy_bytes;
  80.          uint64_t buf_non_kernel_fence_sync_count;
  81.          uint64_t any_non_kernel_fence_sync_count;
  82.          uint64_t query_sync_count;
  83.          uint64_t gpu_serialize_count;
  84.          uint64_t draw_calls_array;
  85.          uint64_t draw_calls_indexed;
  86.          uint64_t draw_calls_fallback_count;
  87.          uint64_t user_buffer_upload_bytes;
  88.          uint64_t constbuf_upload_count;
  89.          uint64_t constbuf_upload_bytes;
  90.          uint64_t pushbuf_count;
  91.          uint64_t resource_validate_count;
  92.       } named;
  93.    } stats;
  94. #endif
  95. };
  96.  
  97. #ifdef NOUVEAU_ENABLE_DRIVER_STATISTICS
  98. # define NOUVEAU_DRV_STAT(s, n, v) do {         \
  99.       (s)->stats.named.n += (v);               \
  100.    } while(0)
  101. # define NOUVEAU_DRV_STAT_RES(r, n, v) do {                       \
  102.       nouveau_screen((r)->base.screen)->stats.named.n += (v);    \
  103.    } while(0)
  104. # define NOUVEAU_DRV_STAT_IFD(x) x
  105. #else
  106. # define NOUVEAU_DRV_STAT(s, n, v)     do { } while(0)
  107. # define NOUVEAU_DRV_STAT_RES(r, n, v) do { } while(0)
  108. # define NOUVEAU_DRV_STAT_IFD(x)
  109. #endif
  110.  
  111. static INLINE struct nouveau_screen *
  112. nouveau_screen(struct pipe_screen *pscreen)
  113. {
  114.         return (struct nouveau_screen *)pscreen;
  115. }
  116.  
  117. boolean nouveau_drm_screen_unref(struct nouveau_screen *screen);
  118.  
  119. boolean
  120. nouveau_screen_bo_get_handle(struct pipe_screen *pscreen,
  121.                              struct nouveau_bo *bo,
  122.                              unsigned stride,
  123.                              struct winsys_handle *whandle);
  124. struct nouveau_bo *
  125. nouveau_screen_bo_from_handle(struct pipe_screen *pscreen,
  126.                               struct winsys_handle *whandle,
  127.                               unsigned *out_stride);
  128.  
  129.  
  130. int nouveau_screen_init(struct nouveau_screen *, struct nouveau_device *);
  131. void nouveau_screen_fini(struct nouveau_screen *);
  132.  
  133. void nouveau_screen_init_vdec(struct nouveau_screen *);
  134.  
  135. #endif
  136.