1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "pipe/p_context.h" 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "nvc0_resource.h" 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "nouveau/nouveau_screen.h" 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct pipe_resource * 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnvc0_resource_create(struct pipe_screen *screen, 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_resource *templ) 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (templ->target) { 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PIPE_BUFFER: 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return nouveau_buffer_create(screen, templ); 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return nvc0_miptree_create(screen, templ); 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct pipe_resource * 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnvc0_resource_from_handle(struct pipe_screen * screen, 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_resource *templ, 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct winsys_handle *whandle) 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (templ->target == PIPE_BUFFER) { 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } else { 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_resource *res = nv50_miptree_from_handle(screen, 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org templ, whandle); 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org nv04_resource(res)->vtbl = &nvc0_miptree_vtbl; 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return res; 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct pipe_surface * 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnvc0_surface_create(struct pipe_context *pipe, 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_resource *pres, 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_surface *templ) 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (unlikely(pres->target == PIPE_BUFFER)) 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return nv50_surface_from_buffer(pipe, pres, templ); 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return nvc0_miptree_surface_new(pipe, pres, templ); 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnvc0_init_resource_functions(struct pipe_context *pcontext) 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pcontext->get_transfer = u_get_transfer_vtbl; 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pcontext->transfer_map = u_transfer_map_vtbl; 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pcontext->transfer_flush_region = u_transfer_flush_region_vtbl; 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pcontext->transfer_unmap = u_transfer_unmap_vtbl; 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pcontext->transfer_destroy = u_transfer_destroy_vtbl; 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pcontext->transfer_inline_write = u_transfer_inline_write_vtbl; 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pcontext->create_surface = nvc0_surface_create; 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pcontext->surface_destroy = nv50_surface_destroy; 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnvc0_screen_init_resource_functions(struct pipe_screen *pscreen) 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pscreen->resource_create = nvc0_resource_create; 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pscreen->resource_from_handle = nvc0_resource_from_handle; 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pscreen->resource_get_handle = u_resource_get_handle_vtbl; 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pscreen->resource_destroy = u_resource_destroy_vtbl; 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 65