docs: Update status of GL 3.x related extensions
[mesa.git] / src / gallium / drivers / nvfx / nvfx_resource.c
1
2 #include "pipe/p_context.h"
3 #include "util/u_staging.h"
4 #include "nvfx_resource.h"
5 #include "nouveau/nouveau_screen.h"
6
7 static unsigned int
8 nvfx_resource_is_referenced(struct pipe_context *pipe,
9 struct pipe_resource *pr,
10 unsigned face, unsigned level)
11 {
12 return !!nouveau_reference_flags(nvfx_resource(pr)->bo);
13 }
14
15 static struct pipe_resource *
16 nvfx_resource_create(struct pipe_screen *screen,
17 const struct pipe_resource *template)
18 {
19 if (template->target == PIPE_BUFFER)
20 return nvfx_buffer_create(screen, template);
21 else
22 return nvfx_miptree_create(screen, template);
23 }
24
25 static void
26 nvfx_resource_destroy(struct pipe_screen *screen, struct pipe_resource *pr)
27 {
28 if (pr->target == PIPE_BUFFER)
29 return nvfx_buffer_destroy(screen, pr);
30 else
31 return nvfx_miptree_destroy(screen, pr);
32 }
33
34 static struct pipe_resource *
35 nvfx_resource_from_handle(struct pipe_screen * screen,
36 const struct pipe_resource *template,
37 struct winsys_handle *whandle)
38 {
39 if (template->target == PIPE_BUFFER)
40 return NULL;
41 else
42 return nvfx_miptree_from_handle(screen, template, whandle);
43 }
44
45 static boolean
46 nvfx_resource_get_handle(struct pipe_screen *pscreen,
47 struct pipe_resource *pr,
48 struct winsys_handle *whandle)
49 {
50 struct nvfx_resource* res = (struct nvfx_resource*)pr;
51
52 if (!res || !res->bo)
53 return FALSE;
54
55 return nouveau_screen_bo_get_handle(pscreen, res->bo, nvfx_subresource_pitch(pr, 0), whandle);
56 }
57
58 void
59 nvfx_init_resource_functions(struct pipe_context *pipe)
60 {
61 pipe->is_resource_referenced = nvfx_resource_is_referenced;
62 }
63
64 void
65 nvfx_screen_init_resource_functions(struct pipe_screen *pscreen)
66 {
67 pscreen->resource_create = nvfx_resource_create;
68 pscreen->resource_from_handle = nvfx_resource_from_handle;
69 pscreen->resource_get_handle = nvfx_resource_get_handle;
70 pscreen->resource_destroy = nvfx_resource_destroy;
71 pscreen->user_buffer_create = nvfx_user_buffer_create;
72
73 pscreen->get_tex_surface = nvfx_miptree_surface_new;
74 pscreen->tex_surface_destroy = nvfx_miptree_surface_del;
75 }