1b8fb1d75ce95fe5d404b301ab31ca0c323967d14Marek Olšák/*
2b8fb1d75ce95fe5d404b301ab31ca0c323967d14Marek Olšák * Copyright 2010 Marek Olšák <maraeo@gmail.com
3b8fb1d75ce95fe5d404b301ab31ca0c323967d14Marek Olšák *
4b8fb1d75ce95fe5d404b301ab31ca0c323967d14Marek Olšák * Permission is hereby granted, free of charge, to any person obtaining a
5b8fb1d75ce95fe5d404b301ab31ca0c323967d14Marek Olšák * copy of this software and associated documentation files (the "Software"),
6b8fb1d75ce95fe5d404b301ab31ca0c323967d14Marek Olšák * to deal in the Software without restriction, including without limitation
7b8fb1d75ce95fe5d404b301ab31ca0c323967d14Marek Olšák * on the rights to use, copy, modify, merge, publish, distribute, sub
8b8fb1d75ce95fe5d404b301ab31ca0c323967d14Marek Olšák * license, and/or sell copies of the Software, and to permit persons to whom
9b8fb1d75ce95fe5d404b301ab31ca0c323967d14Marek Olšák * the Software is furnished to do so, subject to the following conditions:
10b8fb1d75ce95fe5d404b301ab31ca0c323967d14Marek Olšák *
11b8fb1d75ce95fe5d404b301ab31ca0c323967d14Marek Olšák * The above copyright notice and this permission notice (including the next
12b8fb1d75ce95fe5d404b301ab31ca0c323967d14Marek Olšák * paragraph) shall be included in all copies or substantial portions of the
13b8fb1d75ce95fe5d404b301ab31ca0c323967d14Marek Olšák * Software.
14b8fb1d75ce95fe5d404b301ab31ca0c323967d14Marek Olšák *
15b8fb1d75ce95fe5d404b301ab31ca0c323967d14Marek Olšák * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16b8fb1d75ce95fe5d404b301ab31ca0c323967d14Marek Olšák * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17b8fb1d75ce95fe5d404b301ab31ca0c323967d14Marek Olšák * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
18b8fb1d75ce95fe5d404b301ab31ca0c323967d14Marek Olšák * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
19b8fb1d75ce95fe5d404b301ab31ca0c323967d14Marek Olšák * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
20b8fb1d75ce95fe5d404b301ab31ca0c323967d14Marek Olšák * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
21b8fb1d75ce95fe5d404b301ab31ca0c323967d14Marek Olšák * USE OR OTHER DEALINGS IN THE SOFTWARE.
22b8fb1d75ce95fe5d404b301ab31ca0c323967d14Marek Olšák */
23b8fb1d75ce95fe5d404b301ab31ca0c323967d14Marek Olšák
249c284b5cae916a083d17d1039d2f2da128b47882Jerome Glisse#include "r600_pipe.h"
25b8fb1d75ce95fe5d404b301ab31ca0c323967d14Marek Olšák
26742ee7935da60dda974795243d2e0fcf31accb59Jerome Glissestatic struct pipe_resource *r600_resource_create(struct pipe_screen *screen,
27742ee7935da60dda974795243d2e0fcf31accb59Jerome Glisse						const struct pipe_resource *templ)
28b8fb1d75ce95fe5d404b301ab31ca0c323967d14Marek Olšák{
29742ee7935da60dda974795243d2e0fcf31accb59Jerome Glisse	if (templ->target == PIPE_BUFFER) {
306a829a1b724ca0d960decee217d260b4de8a5463Adam Rak		if (templ->bind & PIPE_BIND_GLOBAL) {
316a829a1b724ca0d960decee217d260b4de8a5463Adam Rak		    return r600_compute_global_buffer_create(screen, templ);
326a829a1b724ca0d960decee217d260b4de8a5463Adam Rak		}
336a829a1b724ca0d960decee217d260b4de8a5463Adam Rak		else {
3478354011f99c4103345f8f32e10b0b4b884ebdafMarek Olšák		    return r600_buffer_create(screen, templ, 4096);
356a829a1b724ca0d960decee217d260b4de8a5463Adam Rak		}
36742ee7935da60dda974795243d2e0fcf31accb59Jerome Glisse	} else {
37742ee7935da60dda974795243d2e0fcf31accb59Jerome Glisse		return r600_texture_create(screen, templ);
38742ee7935da60dda974795243d2e0fcf31accb59Jerome Glisse	}
39b8fb1d75ce95fe5d404b301ab31ca0c323967d14Marek Olšák}
40b8fb1d75ce95fe5d404b301ab31ca0c323967d14Marek Olšák
41742ee7935da60dda974795243d2e0fcf31accb59Jerome Glissestatic struct pipe_resource *r600_resource_from_handle(struct pipe_screen * screen,
42742ee7935da60dda974795243d2e0fcf31accb59Jerome Glisse							const struct pipe_resource *templ,
43742ee7935da60dda974795243d2e0fcf31accb59Jerome Glisse							struct winsys_handle *whandle)
44b8fb1d75ce95fe5d404b301ab31ca0c323967d14Marek Olšák{
45742ee7935da60dda974795243d2e0fcf31accb59Jerome Glisse	if (templ->target == PIPE_BUFFER) {
46742ee7935da60dda974795243d2e0fcf31accb59Jerome Glisse		return NULL;
47742ee7935da60dda974795243d2e0fcf31accb59Jerome Glisse	} else {
48742ee7935da60dda974795243d2e0fcf31accb59Jerome Glisse		return r600_texture_from_handle(screen, templ, whandle);
49742ee7935da60dda974795243d2e0fcf31accb59Jerome Glisse	}
50b8fb1d75ce95fe5d404b301ab31ca0c323967d14Marek Olšák}
51b8fb1d75ce95fe5d404b301ab31ca0c323967d14Marek Olšák
526a829a1b724ca0d960decee217d260b4de8a5463Adam Rakvoid r600_resource_destroy(struct pipe_screen *screen, struct pipe_resource *res)
536a829a1b724ca0d960decee217d260b4de8a5463Adam Rak{
546a829a1b724ca0d960decee217d260b4de8a5463Adam Rak	if (res->target == PIPE_BUFFER && (res->bind & PIPE_BIND_GLOBAL)) {
556a829a1b724ca0d960decee217d260b4de8a5463Adam Rak		r600_compute_global_buffer_destroy(screen, res);
566a829a1b724ca0d960decee217d260b4de8a5463Adam Rak	} else {
576a829a1b724ca0d960decee217d260b4de8a5463Adam Rak		u_resource_destroy_vtbl(screen, res);
586a829a1b724ca0d960decee217d260b4de8a5463Adam Rak	}
596a829a1b724ca0d960decee217d260b4de8a5463Adam Rak}
606a829a1b724ca0d960decee217d260b4de8a5463Adam Rak
61fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glissevoid r600_init_screen_resource_functions(struct pipe_screen *screen)
62b8fb1d75ce95fe5d404b301ab31ca0c323967d14Marek Olšák{
63fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse	screen->resource_create = r600_resource_create;
64fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse	screen->resource_from_handle = r600_resource_from_handle;
65fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse	screen->resource_get_handle = u_resource_get_handle_vtbl;
666a829a1b724ca0d960decee217d260b4de8a5463Adam Rak	screen->resource_destroy = r600_resource_destroy;
67b8fb1d75ce95fe5d404b301ab31ca0c323967d14Marek Olšák}
681235becaa1cf7e29f580900592563c3329d326deJerome Glisse
69e4340c1908a6a3b09e1a15d5195f6da7d00494d0Marek Olšákvoid r600_init_context_resource_functions(struct r600_context *r600)
701235becaa1cf7e29f580900592563c3329d326deJerome Glisse{
711235becaa1cf7e29f580900592563c3329d326deJerome Glisse	r600->context.get_transfer = u_get_transfer_vtbl;
721235becaa1cf7e29f580900592563c3329d326deJerome Glisse	r600->context.transfer_map = u_transfer_map_vtbl;
73bf4fedcef3e345f5117232d58bd9000c2441de74Marek Olšák	r600->context.transfer_flush_region = u_default_transfer_flush_region;
741235becaa1cf7e29f580900592563c3329d326deJerome Glisse	r600->context.transfer_unmap = u_transfer_unmap_vtbl;
751235becaa1cf7e29f580900592563c3329d326deJerome Glisse	r600->context.transfer_destroy = u_transfer_destroy_vtbl;
76ab1328882101f67335a332e940fea92eeaf70e12Marek Olšák	r600->context.transfer_inline_write = u_default_transfer_inline_write;
771235becaa1cf7e29f580900592563c3329d326deJerome Glisse}
78