Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1.  
  2. #include "pipe/p_context.h"
  3. #include "nvc0/nvc0_resource.h"
  4. #include "nouveau_screen.h"
  5.  
  6.  
  7. static struct pipe_resource *
  8. nvc0_resource_create(struct pipe_screen *screen,
  9.                      const struct pipe_resource *templ)
  10. {
  11.    switch (templ->target) {
  12.    case PIPE_BUFFER:
  13.       return nouveau_buffer_create(screen, templ);
  14.    default:
  15.       return nvc0_miptree_create(screen, templ);
  16.    }
  17. }
  18.  
  19. static struct pipe_resource *
  20. nvc0_resource_from_handle(struct pipe_screen * screen,
  21.                           const struct pipe_resource *templ,
  22.                           struct winsys_handle *whandle)
  23. {
  24.    if (templ->target == PIPE_BUFFER) {
  25.       return NULL;
  26.    } else {
  27.       struct pipe_resource *res = nv50_miptree_from_handle(screen,
  28.                                                            templ, whandle);
  29.       nv04_resource(res)->vtbl = &nvc0_miptree_vtbl;
  30.       return res;
  31.    }
  32. }
  33.  
  34. static struct pipe_surface *
  35. nvc0_surface_create(struct pipe_context *pipe,
  36.                     struct pipe_resource *pres,
  37.                     const struct pipe_surface *templ)
  38. {
  39.    /* surfaces are assumed to be miptrees all over the place. */
  40.    assert(pres->target != PIPE_BUFFER);
  41.    if (unlikely(pres->target == PIPE_BUFFER))
  42.       return nv50_surface_from_buffer(pipe, pres, templ);
  43.    return nvc0_miptree_surface_new(pipe, pres, templ);
  44. }
  45.  
  46. void
  47. nvc0_init_resource_functions(struct pipe_context *pcontext)
  48. {
  49.    pcontext->transfer_map = u_transfer_map_vtbl;
  50.    pcontext->transfer_flush_region = u_transfer_flush_region_vtbl;
  51.    pcontext->transfer_unmap = u_transfer_unmap_vtbl;
  52.    pcontext->transfer_inline_write = u_transfer_inline_write_vtbl;
  53.    pcontext->create_surface = nvc0_surface_create;
  54.    pcontext->surface_destroy = nv50_surface_destroy;
  55. }
  56.  
  57. void
  58. nvc0_screen_init_resource_functions(struct pipe_screen *pscreen)
  59. {
  60.    pscreen->resource_create = nvc0_resource_create;
  61.    pscreen->resource_from_handle = nvc0_resource_from_handle;
  62.    pscreen->resource_get_handle = u_resource_get_handle_vtbl;
  63.    pscreen->resource_destroy = u_resource_destroy_vtbl;
  64. }
  65.