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