Subversion Repositories Kolibri OS

Rev

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

  1.  
  2. #include "pipe/p_context.h"
  3. #include "nvc0_resource.h"
  4. #include "nouveau/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.    if (unlikely(pres->target == PIPE_BUFFER))
  40.       return nv50_surface_from_buffer(pipe, pres, templ);
  41.    return nvc0_miptree_surface_new(pipe, pres, templ);
  42. }
  43.  
  44. void
  45. nvc0_init_resource_functions(struct pipe_context *pcontext)
  46. {
  47.    pcontext->transfer_map = u_transfer_map_vtbl;
  48.    pcontext->transfer_flush_region = u_transfer_flush_region_vtbl;
  49.    pcontext->transfer_unmap = u_transfer_unmap_vtbl;
  50.    pcontext->transfer_inline_write = u_transfer_inline_write_vtbl;
  51.    pcontext->create_surface = nvc0_surface_create;
  52.    pcontext->surface_destroy = nv50_surface_destroy;
  53. }
  54.  
  55. void
  56. nvc0_screen_init_resource_functions(struct pipe_screen *pscreen)
  57. {
  58.    pscreen->resource_create = nvc0_resource_create;
  59.    pscreen->resource_from_handle = nvc0_resource_from_handle;
  60.    pscreen->resource_get_handle = u_resource_get_handle_vtbl;
  61.    pscreen->resource_destroy = u_resource_destroy_vtbl;
  62. }
  63.