2 #include "pipe/p_context.h"
3 #include "nvc0_resource.h"
4 #include "nouveau/nouveau_screen.h"
7 static struct pipe_resource
*
8 nvc0_resource_create(struct pipe_screen
*screen
,
9 const struct pipe_resource
*templ
)
11 switch (templ
->target
) {
13 return nouveau_buffer_create(screen
, templ
);
15 return nvc0_miptree_create(screen
, templ
);
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
)
24 if (templ
->target
== PIPE_BUFFER
) {
27 struct pipe_resource
*res
= nv50_miptree_from_handle(screen
,
29 nv04_resource(res
)->vtbl
= &nvc0_miptree_vtbl
;
34 static struct pipe_surface
*
35 nvc0_surface_create(struct pipe_context
*pipe
,
36 struct pipe_resource
*pres
,
37 const struct pipe_surface
*templ
)
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
);
45 nvc0_init_resource_functions(struct pipe_context
*pcontext
)
47 pcontext
->get_transfer
= u_get_transfer_vtbl
;
48 pcontext
->transfer_map
= u_transfer_map_vtbl
;
49 pcontext
->transfer_flush_region
= u_transfer_flush_region_vtbl
;
50 pcontext
->transfer_unmap
= u_transfer_unmap_vtbl
;
51 pcontext
->transfer_destroy
= u_transfer_destroy_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
;
58 nvc0_screen_init_resource_functions(struct pipe_screen
*pscreen
)
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
;