2 #include "pipe/p_context.h"
3 #include "nvc0_resource.h"
4 #include "nouveau/nouveau_screen.h"
7 nvc0_resource_is_referenced(struct pipe_context
*pipe
,
8 struct pipe_resource
*resource
,
9 unsigned face
, int layer
)
11 struct nvc0_resource
*res
= nvc0_resource(resource
);
14 #ifdef NOUVEAU_USERSPACE_MM
17 unsigned bo_flags
= nouveau_bo_pending(res
->bo
);
18 if (bo_flags
& NOUVEAU_BO_RD
)
19 flags
= PIPE_REFERENCED_FOR_READ
;
20 if (bo_flags
& NOUVEAU_BO_WR
)
21 flags
|= PIPE_REFERENCED_FOR_WRITE
;
26 static struct pipe_resource
*
27 nvc0_resource_create(struct pipe_screen
*screen
,
28 const struct pipe_resource
*templ
)
30 switch (templ
->target
) {
32 return nvc0_buffer_create(screen
, templ
);
34 return nvc0_miptree_create(screen
, templ
);
38 static struct pipe_resource
*
39 nvc0_resource_from_handle(struct pipe_screen
* screen
,
40 const struct pipe_resource
*templ
,
41 struct winsys_handle
*whandle
)
43 if (templ
->target
== PIPE_BUFFER
)
46 return nvc0_miptree_from_handle(screen
, templ
, whandle
);
50 nvc0_init_resource_functions(struct pipe_context
*pcontext
)
52 pcontext
->get_transfer
= u_get_transfer_vtbl
;
53 pcontext
->transfer_map
= u_transfer_map_vtbl
;
54 pcontext
->transfer_flush_region
= u_transfer_flush_region_vtbl
;
55 pcontext
->transfer_unmap
= u_transfer_unmap_vtbl
;
56 pcontext
->transfer_destroy
= u_transfer_destroy_vtbl
;
57 pcontext
->transfer_inline_write
= u_transfer_inline_write_vtbl
;
58 pcontext
->is_resource_referenced
= nvc0_resource_is_referenced
;
59 pcontext
->create_surface
= nvc0_miptree_surface_new
;
60 pcontext
->surface_destroy
= nvc0_miptree_surface_del
;
64 nvc0_screen_init_resource_functions(struct pipe_screen
*pscreen
)
66 pscreen
->resource_create
= nvc0_resource_create
;
67 pscreen
->resource_from_handle
= nvc0_resource_from_handle
;
68 pscreen
->resource_get_handle
= u_resource_get_handle_vtbl
;
69 pscreen
->resource_destroy
= u_resource_destroy_vtbl
;
70 pscreen
->user_buffer_create
= nvc0_user_buffer_create
;