Subversion Repositories Kolibri OS

Rev

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

  1.  
  2. #ifndef __NV50_RESOURCE_H__
  3. #define __NV50_RESOURCE_H__
  4.  
  5. #include "util/u_transfer.h"
  6. #include "util/list.h"
  7.  
  8. #include "nouveau_winsys.h"
  9. #include "nouveau_buffer.h"
  10.  
  11. #ifndef __NVC0_RESOURCE_H__ /* make sure we don't use these in nvc0: */
  12.  
  13. void
  14. nv50_init_resource_functions(struct pipe_context *pcontext);
  15.  
  16. void
  17. nv50_screen_init_resource_functions(struct pipe_screen *pscreen);
  18.  
  19. #define NV50_RESOURCE_FLAG_VIDEO (NOUVEAU_RESOURCE_FLAG_DRV_PRIV << 0)
  20. #define NV50_RESOURCE_FLAG_NOALLOC (NOUVEAU_RESOURCE_FLAG_DRV_PRIV << 1)
  21.  
  22. #define NV50_TILE_SHIFT_X(m) 6
  23. #define NV50_TILE_SHIFT_Y(m) ((((m) >> 4) & 0xf) + 2)
  24. #define NV50_TILE_SHIFT_Z(m) ((((m) >> 8) & 0xf) + 0)
  25.  
  26. #define NV50_TILE_SIZE_X(m) 64
  27. #define NV50_TILE_SIZE_Y(m) ( 4 << (((m) >> 4) & 0xf))
  28. #define NV50_TILE_SIZE_Z(m) ( 1 << (((m) >> 8) & 0xf))
  29.  
  30. #define NV50_TILE_SIZE_2D(m) (NV50_TILE_SIZE_X(m) << NV50_TILE_SHIFT_Y(m))
  31.  
  32. #define NV50_TILE_SIZE(m) (NV50_TILE_SIZE_2D(m) << NV50_TILE_SHIFT_Z(m))
  33.  
  34. #endif /* __NVC0_RESOURCE_H__ */
  35.  
  36. uint32_t
  37. nv50_tex_choose_tile_dims_helper(unsigned nx, unsigned ny, unsigned nz,
  38.                                  boolean is_3d);
  39.  
  40. struct nv50_miptree_level {
  41.    uint32_t offset;
  42.    uint32_t pitch;
  43.    uint32_t tile_mode;
  44. };
  45.  
  46. #define NV50_MAX_TEXTURE_LEVELS 16
  47.  
  48. struct nv50_miptree {
  49.    struct nv04_resource base;
  50.    struct nv50_miptree_level level[NV50_MAX_TEXTURE_LEVELS];
  51.    uint32_t total_size;
  52.    uint32_t layer_stride;
  53.    boolean layout_3d; /* TRUE if layer count varies with mip level */
  54.    uint8_t ms_x;      /* log2 of number of samples in x/y dimension */
  55.    uint8_t ms_y;
  56.    uint8_t ms_mode;
  57. };
  58.  
  59. static INLINE struct nv50_miptree *
  60. nv50_miptree(struct pipe_resource *pt)
  61. {
  62.    return (struct nv50_miptree *)pt;
  63. }
  64.  
  65.  
  66. #define NV50_TEXVIEW_SCALED_COORDS     (1 << 0)
  67. #define NV50_TEXVIEW_FILTER_MSAA8      (1 << 1)
  68. #define NV50_TEXVIEW_ACCESS_RESOLVE    (1 << 2)
  69.  
  70.  
  71. /* Internal functions:
  72.  */
  73. boolean
  74. nv50_miptree_init_layout_linear(struct nv50_miptree *mt, unsigned pitch_align);
  75.  
  76. struct pipe_resource *
  77. nv50_miptree_create(struct pipe_screen *pscreen,
  78.                     const struct pipe_resource *tmp);
  79.  
  80. void
  81. nv50_miptree_destroy(struct pipe_screen *pscreen, struct pipe_resource *pt);
  82.  
  83. struct pipe_resource *
  84. nv50_miptree_from_handle(struct pipe_screen *pscreen,
  85.                          const struct pipe_resource *template,
  86.                          struct winsys_handle *whandle);
  87.  
  88. boolean
  89. nv50_miptree_get_handle(struct pipe_screen *pscreen,
  90.                         struct pipe_resource *pt,
  91.                         struct winsys_handle *whandle);
  92.  
  93. struct nv50_surface {
  94.    struct pipe_surface base;
  95.    uint32_t offset;
  96.    uint32_t width;
  97.    uint16_t height;
  98.    uint16_t depth;
  99. };
  100.  
  101. static INLINE struct nv50_surface *
  102. nv50_surface(struct pipe_surface *ps)
  103. {
  104.    return (struct nv50_surface *)ps;
  105. }
  106.  
  107. static INLINE enum pipe_format
  108. nv50_zs_to_s_format(enum pipe_format format)
  109. {
  110.    switch (format) {
  111.    case PIPE_FORMAT_Z24_UNORM_S8_UINT: return PIPE_FORMAT_X24S8_UINT;
  112.    case PIPE_FORMAT_S8_UINT_Z24_UNORM: return PIPE_FORMAT_S8X24_UINT;
  113.    case PIPE_FORMAT_Z32_FLOAT_S8X24_UINT: return PIPE_FORMAT_X32_S8X24_UINT;
  114.    default:
  115.       return format;
  116.    }
  117. }
  118.  
  119. #ifndef __NVC0_RESOURCE_H__
  120.  
  121. unsigned
  122. nv50_mt_zslice_offset(const struct nv50_miptree *mt, unsigned l, unsigned z);
  123.  
  124. struct pipe_surface *
  125. nv50_miptree_surface_new(struct pipe_context *,
  126.                          struct pipe_resource *,
  127.                          const struct pipe_surface *templ);
  128.  
  129. void *
  130. nv50_miptree_transfer_map(struct pipe_context *pctx,
  131.                           struct pipe_resource *res,
  132.                           unsigned level,
  133.                           unsigned usage,
  134.                           const struct pipe_box *box,
  135.                           struct pipe_transfer **ptransfer);
  136. void
  137. nv50_miptree_transfer_unmap(struct pipe_context *pcontext,
  138.                             struct pipe_transfer *ptx);
  139.  
  140. #endif /* __NVC0_RESOURCE_H__ */
  141.  
  142. struct nv50_surface *
  143. nv50_surface_from_miptree(struct nv50_miptree *mt,
  144.                           const struct pipe_surface *templ);
  145.  
  146. struct pipe_surface *
  147. nv50_surface_from_buffer(struct pipe_context *pipe,
  148.                          struct pipe_resource *pt,
  149.                          const struct pipe_surface *templ);
  150.  
  151. void
  152. nv50_surface_destroy(struct pipe_context *, struct pipe_surface *);
  153.  
  154. #endif /* __NV50_RESOURCE_H__ */
  155.