2 #include "pipe/p_context.h"
3 #include "nvc0/nvc0_resource.h"
4 #include "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
,
25 if (templ
->target
== PIPE_BUFFER
) {
28 struct pipe_resource
*res
= nv50_miptree_from_handle(screen
,
31 nv04_resource(res
)->vtbl
= &nvc0_miptree_vtbl
;
36 static struct pipe_surface
*
37 nvc0_surface_create(struct pipe_context
*pipe
,
38 struct pipe_resource
*pres
,
39 const struct pipe_surface
*templ
)
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
);
47 nvc0_init_resource_functions(struct pipe_context
*pcontext
)
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
->buffer_subdata
= u_default_buffer_subdata
;
53 pcontext
->texture_subdata
= u_default_texture_subdata
;
54 pcontext
->create_surface
= nvc0_surface_create
;
55 pcontext
->surface_destroy
= nv50_surface_destroy
;
56 pcontext
->invalidate_resource
= nv50_invalidate_resource
;
60 nvc0_screen_init_resource_functions(struct pipe_screen
*pscreen
)
62 pscreen
->resource_create
= nvc0_resource_create
;
63 pscreen
->resource_from_handle
= nvc0_resource_from_handle
;
64 pscreen
->resource_get_handle
= u_resource_get_handle_vtbl
;
65 pscreen
->resource_destroy
= u_resource_destroy_vtbl
;