Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. #ifndef NOUVEAU_WINSYS_H
  2. #define NOUVEAU_WINSYS_H
  3.  
  4. #include <stdint.h>
  5. #include <inttypes.h>
  6.  
  7. #include "pipe/p_defines.h"
  8.  
  9. #include <libdrm/nouveau.h>
  10.  
  11. #ifndef NV04_PFIFO_MAX_PACKET_LEN
  12. #define NV04_PFIFO_MAX_PACKET_LEN 2047
  13. #endif
  14.  
  15. #define NOUVEAU_MIN_BUFFER_MAP_ALIGN      64
  16. #define NOUVEAU_MIN_BUFFER_MAP_ALIGN_MASK (NOUVEAU_MIN_BUFFER_MAP_ALIGN - 1)
  17.  
  18. static INLINE uint32_t
  19. PUSH_AVAIL(struct nouveau_pushbuf *push)
  20. {
  21.    return push->end - push->cur;
  22. }
  23.  
  24. static INLINE boolean
  25. PUSH_SPACE(struct nouveau_pushbuf *push, uint32_t size)
  26. {
  27.    if (PUSH_AVAIL(push) < size)
  28.       return nouveau_pushbuf_space(push, size, 0, 0) == 0;
  29.    return TRUE;
  30. }
  31.  
  32. static INLINE void
  33. PUSH_DATA(struct nouveau_pushbuf *push, uint32_t data)
  34. {
  35.    *push->cur++ = data;
  36. }
  37.  
  38. static INLINE void
  39. PUSH_DATAp(struct nouveau_pushbuf *push, const void *data, uint32_t size)
  40. {
  41.    memcpy(push->cur, data, size * 4);
  42.    push->cur += size;
  43. }
  44.  
  45. static INLINE void
  46. PUSH_DATAf(struct nouveau_pushbuf *push, float f)
  47. {
  48.    union { float f; uint32_t i; } u;
  49.    u.f = f;
  50.    PUSH_DATA(push, u.i);
  51. }
  52.  
  53. static INLINE void
  54. PUSH_KICK(struct nouveau_pushbuf *push)
  55. {
  56.    nouveau_pushbuf_kick(push, push->channel);
  57. }
  58.  
  59.  
  60. #define NOUVEAU_RESOURCE_FLAG_LINEAR   (PIPE_RESOURCE_FLAG_DRV_PRIV << 0)
  61. #define NOUVEAU_RESOURCE_FLAG_DRV_PRIV (PIPE_RESOURCE_FLAG_DRV_PRIV << 1)
  62.  
  63. static INLINE uint32_t
  64. nouveau_screen_transfer_flags(unsigned pipe)
  65. {
  66.         uint32_t flags = 0;
  67.  
  68.         if (!(pipe & PIPE_TRANSFER_UNSYNCHRONIZED)) {
  69.                 if (pipe & PIPE_TRANSFER_READ)
  70.                         flags |= NOUVEAU_BO_RD;
  71.                 if (pipe & PIPE_TRANSFER_WRITE)
  72.                         flags |= NOUVEAU_BO_WR;
  73.                 if (pipe & PIPE_TRANSFER_DONTBLOCK)
  74.                         flags |= NOUVEAU_BO_NOBLOCK;
  75.         }
  76.  
  77.         return flags;
  78. }
  79.  
  80. extern struct pipe_screen *
  81. nv30_screen_create(struct nouveau_device *);
  82.  
  83. extern struct pipe_screen *
  84. nv50_screen_create(struct nouveau_device *);
  85.  
  86. extern struct pipe_screen *
  87. nvc0_screen_create(struct nouveau_device *);
  88.  
  89. #endif
  90.