noop_pipe.c revision 6dd284f7c8fac22f64c13fdf9909094f5ec59086
15da246944a787b933a509f0b65bab466574c3339Jerome Glisse/* 25da246944a787b933a509f0b65bab466574c3339Jerome Glisse * Copyright 2010 Red Hat Inc. 35da246944a787b933a509f0b65bab466574c3339Jerome Glisse * 45da246944a787b933a509f0b65bab466574c3339Jerome Glisse * Permission is hereby granted, free of charge, to any person obtaining a 55da246944a787b933a509f0b65bab466574c3339Jerome Glisse * copy of this software and associated documentation files (the "Software"), 65da246944a787b933a509f0b65bab466574c3339Jerome Glisse * to deal in the Software without restriction, including without limitation 75da246944a787b933a509f0b65bab466574c3339Jerome Glisse * on the rights to use, copy, modify, merge, publish, distribute, sub 85da246944a787b933a509f0b65bab466574c3339Jerome Glisse * license, and/or sell copies of the Software, and to permit persons to whom 95da246944a787b933a509f0b65bab466574c3339Jerome Glisse * the Software is furnished to do so, subject to the following conditions: 105da246944a787b933a509f0b65bab466574c3339Jerome Glisse * 115da246944a787b933a509f0b65bab466574c3339Jerome Glisse * The above copyright notice and this permission notice (including the next 125da246944a787b933a509f0b65bab466574c3339Jerome Glisse * paragraph) shall be included in all copies or substantial portions of the 135da246944a787b933a509f0b65bab466574c3339Jerome Glisse * Software. 145da246944a787b933a509f0b65bab466574c3339Jerome Glisse * 155da246944a787b933a509f0b65bab466574c3339Jerome Glisse * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 165da246944a787b933a509f0b65bab466574c3339Jerome Glisse * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 175da246944a787b933a509f0b65bab466574c3339Jerome Glisse * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 185da246944a787b933a509f0b65bab466574c3339Jerome Glisse * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, 195da246944a787b933a509f0b65bab466574c3339Jerome Glisse * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 205da246944a787b933a509f0b65bab466574c3339Jerome Glisse * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 215da246944a787b933a509f0b65bab466574c3339Jerome Glisse * USE OR OTHER DEALINGS IN THE SOFTWARE. 225da246944a787b933a509f0b65bab466574c3339Jerome Glisse */ 235da246944a787b933a509f0b65bab466574c3339Jerome Glisse#include <stdio.h> 245da246944a787b933a509f0b65bab466574c3339Jerome Glisse#include <errno.h> 25625593fde252269455f3e23baa5a63afb3389588Kai Wasserbäch#include "pipe/p_defines.h" 26625593fde252269455f3e23baa5a63afb3389588Kai Wasserbäch#include "pipe/p_state.h" 27625593fde252269455f3e23baa5a63afb3389588Kai Wasserbäch#include "pipe/p_context.h" 28625593fde252269455f3e23baa5a63afb3389588Kai Wasserbäch#include "pipe/p_screen.h" 29625593fde252269455f3e23baa5a63afb3389588Kai Wasserbäch#include "util/u_memory.h" 30625593fde252269455f3e23baa5a63afb3389588Kai Wasserbäch#include "util/u_inlines.h" 31625593fde252269455f3e23baa5a63afb3389588Kai Wasserbäch#include "util/u_format.h" 325da246944a787b933a509f0b65bab466574c3339Jerome Glisse#include "noop_public.h" 333349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse 343349517351059dcd70a81b31bdffe9835bd8f216Jerome GlisseDEBUG_GET_ONCE_BOOL_OPTION(noop, "GALLIUM_NOOP", FALSE) 355da246944a787b933a509f0b65bab466574c3339Jerome Glisse 365da246944a787b933a509f0b65bab466574c3339Jerome Glissevoid noop_init_state_functions(struct pipe_context *ctx); 375da246944a787b933a509f0b65bab466574c3339Jerome Glisse 383349517351059dcd70a81b31bdffe9835bd8f216Jerome Glissestruct noop_pipe_screen { 393349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse struct pipe_screen pscreen; 403349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse struct pipe_screen *oscreen; 413349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse}; 423349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse 435da246944a787b933a509f0b65bab466574c3339Jerome Glisse/* 445da246944a787b933a509f0b65bab466574c3339Jerome Glisse * query 455da246944a787b933a509f0b65bab466574c3339Jerome Glisse */ 465da246944a787b933a509f0b65bab466574c3339Jerome Glissestruct noop_query { 475da246944a787b933a509f0b65bab466574c3339Jerome Glisse unsigned query; 485da246944a787b933a509f0b65bab466574c3339Jerome Glisse}; 495da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic struct pipe_query *noop_create_query(struct pipe_context *ctx, unsigned query_type) 505da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 515da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct noop_query *query = CALLOC_STRUCT(noop_query); 525da246944a787b933a509f0b65bab466574c3339Jerome Glisse 535da246944a787b933a509f0b65bab466574c3339Jerome Glisse return (struct pipe_query *)query; 545da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 555da246944a787b933a509f0b65bab466574c3339Jerome Glisse 565da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void noop_destroy_query(struct pipe_context *ctx, struct pipe_query *query) 575da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 585da246944a787b933a509f0b65bab466574c3339Jerome Glisse FREE(query); 595da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 605da246944a787b933a509f0b65bab466574c3339Jerome Glisse 615da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void noop_begin_query(struct pipe_context *ctx, struct pipe_query *query) 625da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 635da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 645da246944a787b933a509f0b65bab466574c3339Jerome Glisse 655da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void noop_end_query(struct pipe_context *ctx, struct pipe_query *query) 665da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 675da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 685da246944a787b933a509f0b65bab466574c3339Jerome Glisse 695da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic boolean noop_get_query_result(struct pipe_context *ctx, 705da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct pipe_query *query, 715da246944a787b933a509f0b65bab466574c3339Jerome Glisse boolean wait, void *vresult) 725da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 735da246944a787b933a509f0b65bab466574c3339Jerome Glisse uint64_t *result = (uint64_t*)vresult; 745da246944a787b933a509f0b65bab466574c3339Jerome Glisse 755da246944a787b933a509f0b65bab466574c3339Jerome Glisse *result = 0; 765da246944a787b933a509f0b65bab466574c3339Jerome Glisse return TRUE; 775da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 785da246944a787b933a509f0b65bab466574c3339Jerome Glisse 795da246944a787b933a509f0b65bab466574c3339Jerome Glisse 805da246944a787b933a509f0b65bab466574c3339Jerome Glisse/* 815da246944a787b933a509f0b65bab466574c3339Jerome Glisse * resource 825da246944a787b933a509f0b65bab466574c3339Jerome Glisse */ 835da246944a787b933a509f0b65bab466574c3339Jerome Glissestruct noop_resource { 845da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct pipe_resource base; 855da246944a787b933a509f0b65bab466574c3339Jerome Glisse unsigned size; 865da246944a787b933a509f0b65bab466574c3339Jerome Glisse char *data; 875da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct sw_displaytarget *dt; 885da246944a787b933a509f0b65bab466574c3339Jerome Glisse}; 895da246944a787b933a509f0b65bab466574c3339Jerome Glisse 905da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic struct pipe_resource *noop_resource_create(struct pipe_screen *screen, 915da246944a787b933a509f0b65bab466574c3339Jerome Glisse const struct pipe_resource *templ) 925da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 935da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct noop_resource *nresource; 945da246944a787b933a509f0b65bab466574c3339Jerome Glisse unsigned stride; 955da246944a787b933a509f0b65bab466574c3339Jerome Glisse 965da246944a787b933a509f0b65bab466574c3339Jerome Glisse nresource = CALLOC_STRUCT(noop_resource); 975da246944a787b933a509f0b65bab466574c3339Jerome Glisse if (nresource == NULL) 985da246944a787b933a509f0b65bab466574c3339Jerome Glisse return NULL; 995da246944a787b933a509f0b65bab466574c3339Jerome Glisse 1005da246944a787b933a509f0b65bab466574c3339Jerome Glisse stride = util_format_get_stride(templ->format, templ->width0); 1015da246944a787b933a509f0b65bab466574c3339Jerome Glisse nresource->base = *templ; 1025da246944a787b933a509f0b65bab466574c3339Jerome Glisse nresource->base.screen = screen; 1035da246944a787b933a509f0b65bab466574c3339Jerome Glisse nresource->size = stride * templ->height0 * templ->depth0; 1045da246944a787b933a509f0b65bab466574c3339Jerome Glisse nresource->data = malloc(nresource->size); 1055da246944a787b933a509f0b65bab466574c3339Jerome Glisse pipe_reference_init(&nresource->base.reference, 1); 1065da246944a787b933a509f0b65bab466574c3339Jerome Glisse if (nresource->data == NULL) { 1075da246944a787b933a509f0b65bab466574c3339Jerome Glisse FREE(nresource); 1085da246944a787b933a509f0b65bab466574c3339Jerome Glisse return NULL; 1095da246944a787b933a509f0b65bab466574c3339Jerome Glisse } 1105da246944a787b933a509f0b65bab466574c3339Jerome Glisse return &nresource->base; 1115da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 1125da246944a787b933a509f0b65bab466574c3339Jerome Glisse 1133349517351059dcd70a81b31bdffe9835bd8f216Jerome Glissestatic struct pipe_resource *noop_resource_from_handle(struct pipe_screen *screen, 1145da246944a787b933a509f0b65bab466574c3339Jerome Glisse const struct pipe_resource *templ, 1153349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse struct winsys_handle *handle) 1165da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 1173349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse struct noop_pipe_screen *noop_screen = (struct noop_pipe_screen*)screen; 1183349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse struct pipe_screen *oscreen = noop_screen->oscreen; 1193349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse struct pipe_resource *result; 1204d96af933710c74b3ccf3f24ee7d62e57f330bbaBrian Paul struct pipe_resource *noop_resource; 1215da246944a787b933a509f0b65bab466574c3339Jerome Glisse 1223349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse result = oscreen->resource_from_handle(oscreen, templ, handle); 1233349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse noop_resource = noop_resource_create(screen, result); 1243349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse pipe_resource_reference(&result, NULL); 1253349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse return noop_resource; 1265da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 1275da246944a787b933a509f0b65bab466574c3339Jerome Glisse 1285da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic boolean noop_resource_get_handle(struct pipe_screen *screen, 1295da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct pipe_resource *resource, 1305da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct winsys_handle *handle) 1315da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 1323349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse return FALSE; 1335da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 1345da246944a787b933a509f0b65bab466574c3339Jerome Glisse 1355da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void noop_resource_destroy(struct pipe_screen *screen, 1365da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct pipe_resource *resource) 1375da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 1385da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct noop_resource *nresource = (struct noop_resource *)resource; 1395da246944a787b933a509f0b65bab466574c3339Jerome Glisse 1405da246944a787b933a509f0b65bab466574c3339Jerome Glisse free(nresource->data); 1415da246944a787b933a509f0b65bab466574c3339Jerome Glisse FREE(resource); 1425da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 1435da246944a787b933a509f0b65bab466574c3339Jerome Glisse 1445da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic struct pipe_resource *noop_user_buffer_create(struct pipe_screen *screen, 1455da246944a787b933a509f0b65bab466574c3339Jerome Glisse void *ptr, unsigned bytes, 1465da246944a787b933a509f0b65bab466574c3339Jerome Glisse unsigned bind) 1475da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 1485da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct pipe_resource templ; 1495da246944a787b933a509f0b65bab466574c3339Jerome Glisse 1505da246944a787b933a509f0b65bab466574c3339Jerome Glisse templ.target = PIPE_BUFFER; 1515da246944a787b933a509f0b65bab466574c3339Jerome Glisse templ.format = PIPE_FORMAT_R8_UNORM; 1525da246944a787b933a509f0b65bab466574c3339Jerome Glisse templ.usage = PIPE_USAGE_IMMUTABLE; 1535da246944a787b933a509f0b65bab466574c3339Jerome Glisse templ.bind = bind; 1545da246944a787b933a509f0b65bab466574c3339Jerome Glisse templ.width0 = bytes; 1555da246944a787b933a509f0b65bab466574c3339Jerome Glisse templ.height0 = 1; 1565da246944a787b933a509f0b65bab466574c3339Jerome Glisse templ.depth0 = 1; 1575da246944a787b933a509f0b65bab466574c3339Jerome Glisse templ.flags = 0; 1585da246944a787b933a509f0b65bab466574c3339Jerome Glisse return noop_resource_create(screen, &templ); 1595da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 1605da246944a787b933a509f0b65bab466574c3339Jerome Glisse 1615da246944a787b933a509f0b65bab466574c3339Jerome Glisse 1625da246944a787b933a509f0b65bab466574c3339Jerome Glisse/* 1635da246944a787b933a509f0b65bab466574c3339Jerome Glisse * transfer 1645da246944a787b933a509f0b65bab466574c3339Jerome Glisse */ 1655da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic struct pipe_transfer *noop_get_transfer(struct pipe_context *context, 1665da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct pipe_resource *resource, 1674c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger unsigned level, 1685da246944a787b933a509f0b65bab466574c3339Jerome Glisse enum pipe_transfer_usage usage, 1695da246944a787b933a509f0b65bab466574c3339Jerome Glisse const struct pipe_box *box) 1705da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 1715da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct pipe_transfer *transfer; 1725da246944a787b933a509f0b65bab466574c3339Jerome Glisse 1735da246944a787b933a509f0b65bab466574c3339Jerome Glisse transfer = CALLOC_STRUCT(pipe_transfer); 1745da246944a787b933a509f0b65bab466574c3339Jerome Glisse if (transfer == NULL) 1755da246944a787b933a509f0b65bab466574c3339Jerome Glisse return NULL; 1765da246944a787b933a509f0b65bab466574c3339Jerome Glisse pipe_resource_reference(&transfer->resource, resource); 1774c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger transfer->level = level; 1785da246944a787b933a509f0b65bab466574c3339Jerome Glisse transfer->usage = usage; 1795da246944a787b933a509f0b65bab466574c3339Jerome Glisse transfer->box = *box; 1805da246944a787b933a509f0b65bab466574c3339Jerome Glisse transfer->stride = 1; 1814c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger transfer->layer_stride = 1; 1825da246944a787b933a509f0b65bab466574c3339Jerome Glisse return transfer; 1835da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 1845da246944a787b933a509f0b65bab466574c3339Jerome Glisse 1855da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void *noop_transfer_map(struct pipe_context *pipe, 1865da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct pipe_transfer *transfer) 1875da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 1885da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct noop_resource *nresource = (struct noop_resource *)transfer->resource; 1895da246944a787b933a509f0b65bab466574c3339Jerome Glisse 1905da246944a787b933a509f0b65bab466574c3339Jerome Glisse return nresource->data; 1915da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 1925da246944a787b933a509f0b65bab466574c3339Jerome Glisse 1935da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void noop_transfer_flush_region(struct pipe_context *pipe, 1945da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct pipe_transfer *transfer, 1955da246944a787b933a509f0b65bab466574c3339Jerome Glisse const struct pipe_box *box) 1965da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 1975da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 1985da246944a787b933a509f0b65bab466574c3339Jerome Glisse 1995da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void noop_transfer_unmap(struct pipe_context *pipe, 2005da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct pipe_transfer *transfer) 2015da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 2025da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 2035da246944a787b933a509f0b65bab466574c3339Jerome Glisse 2045da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void noop_transfer_destroy(struct pipe_context *pipe, 2055da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct pipe_transfer *transfer) 2065da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 2075da246944a787b933a509f0b65bab466574c3339Jerome Glisse pipe_resource_reference(&transfer->resource, NULL); 2085da246944a787b933a509f0b65bab466574c3339Jerome Glisse FREE(transfer); 2095da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 2105da246944a787b933a509f0b65bab466574c3339Jerome Glisse 2115da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void noop_transfer_inline_write(struct pipe_context *pipe, 2125da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct pipe_resource *resource, 2134c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger unsigned level, 2145da246944a787b933a509f0b65bab466574c3339Jerome Glisse unsigned usage, 2155da246944a787b933a509f0b65bab466574c3339Jerome Glisse const struct pipe_box *box, 2165da246944a787b933a509f0b65bab466574c3339Jerome Glisse const void *data, 2175da246944a787b933a509f0b65bab466574c3339Jerome Glisse unsigned stride, 2184c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger unsigned layer_stride) 2195da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 2205da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 2215da246944a787b933a509f0b65bab466574c3339Jerome Glisse 2225da246944a787b933a509f0b65bab466574c3339Jerome Glisse 2235da246944a787b933a509f0b65bab466574c3339Jerome Glisse/* 2245da246944a787b933a509f0b65bab466574c3339Jerome Glisse * clear/copy 2255da246944a787b933a509f0b65bab466574c3339Jerome Glisse */ 2265da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void noop_clear(struct pipe_context *ctx, unsigned buffers, 2276dd284f7c8fac22f64c13fdf9909094f5ec59086Dave Airlie const union pipe_color_union *color, double depth, unsigned stencil) 2285da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 2295da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 2305da246944a787b933a509f0b65bab466574c3339Jerome Glisse 2315da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void noop_clear_render_target(struct pipe_context *ctx, 2325da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct pipe_surface *dst, 2336dd284f7c8fac22f64c13fdf9909094f5ec59086Dave Airlie const union pipe_color_union *color, 2345da246944a787b933a509f0b65bab466574c3339Jerome Glisse unsigned dstx, unsigned dsty, 2355da246944a787b933a509f0b65bab466574c3339Jerome Glisse unsigned width, unsigned height) 2365da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 2375da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 2385da246944a787b933a509f0b65bab466574c3339Jerome Glisse 2395da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void noop_clear_depth_stencil(struct pipe_context *ctx, 2405da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct pipe_surface *dst, 2415da246944a787b933a509f0b65bab466574c3339Jerome Glisse unsigned clear_flags, 2425da246944a787b933a509f0b65bab466574c3339Jerome Glisse double depth, 2435da246944a787b933a509f0b65bab466574c3339Jerome Glisse unsigned stencil, 2445da246944a787b933a509f0b65bab466574c3339Jerome Glisse unsigned dstx, unsigned dsty, 2455da246944a787b933a509f0b65bab466574c3339Jerome Glisse unsigned width, unsigned height) 2465da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 2475da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 2485da246944a787b933a509f0b65bab466574c3339Jerome Glisse 2495da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void noop_resource_copy_region(struct pipe_context *ctx, 2505da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct pipe_resource *dst, 2514c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger unsigned dst_level, 2525da246944a787b933a509f0b65bab466574c3339Jerome Glisse unsigned dstx, unsigned dsty, unsigned dstz, 2535da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct pipe_resource *src, 2544c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger unsigned src_level, 2554c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger const struct pipe_box *src_box) 2565da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 2575da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 2585da246944a787b933a509f0b65bab466574c3339Jerome Glisse 2595da246944a787b933a509f0b65bab466574c3339Jerome Glisse 2605da246944a787b933a509f0b65bab466574c3339Jerome Glisse/* 2615da246944a787b933a509f0b65bab466574c3339Jerome Glisse * context 2625da246944a787b933a509f0b65bab466574c3339Jerome Glisse */ 2637e02303497237cde958c28608477d0c355a8038bMarek Olšákstatic void noop_flush(struct pipe_context *ctx, 2645da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct pipe_fence_handle **fence) 2655da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 2665da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 2675da246944a787b933a509f0b65bab466574c3339Jerome Glisse 2685da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void noop_destroy_context(struct pipe_context *ctx) 2695da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 2705da246944a787b933a509f0b65bab466574c3339Jerome Glisse FREE(ctx); 2715da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 2725da246944a787b933a509f0b65bab466574c3339Jerome Glisse 2735da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic struct pipe_context *noop_create_context(struct pipe_screen *screen, void *priv) 2745da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 2755da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct pipe_context *ctx = CALLOC_STRUCT(pipe_context); 2765da246944a787b933a509f0b65bab466574c3339Jerome Glisse 2775da246944a787b933a509f0b65bab466574c3339Jerome Glisse if (ctx == NULL) 2785da246944a787b933a509f0b65bab466574c3339Jerome Glisse return NULL; 2795da246944a787b933a509f0b65bab466574c3339Jerome Glisse ctx->winsys = screen->winsys; 2805da246944a787b933a509f0b65bab466574c3339Jerome Glisse ctx->screen = screen; 2815da246944a787b933a509f0b65bab466574c3339Jerome Glisse ctx->priv = priv; 2825da246944a787b933a509f0b65bab466574c3339Jerome Glisse ctx->destroy = noop_destroy_context; 2835da246944a787b933a509f0b65bab466574c3339Jerome Glisse ctx->flush = noop_flush; 2845da246944a787b933a509f0b65bab466574c3339Jerome Glisse ctx->clear = noop_clear; 2855da246944a787b933a509f0b65bab466574c3339Jerome Glisse ctx->clear_render_target = noop_clear_render_target; 2865da246944a787b933a509f0b65bab466574c3339Jerome Glisse ctx->clear_depth_stencil = noop_clear_depth_stencil; 2875da246944a787b933a509f0b65bab466574c3339Jerome Glisse ctx->resource_copy_region = noop_resource_copy_region; 2885da246944a787b933a509f0b65bab466574c3339Jerome Glisse ctx->create_query = noop_create_query; 2895da246944a787b933a509f0b65bab466574c3339Jerome Glisse ctx->destroy_query = noop_destroy_query; 2905da246944a787b933a509f0b65bab466574c3339Jerome Glisse ctx->begin_query = noop_begin_query; 2915da246944a787b933a509f0b65bab466574c3339Jerome Glisse ctx->end_query = noop_end_query; 2925da246944a787b933a509f0b65bab466574c3339Jerome Glisse ctx->get_query_result = noop_get_query_result; 2935da246944a787b933a509f0b65bab466574c3339Jerome Glisse ctx->get_transfer = noop_get_transfer; 2945da246944a787b933a509f0b65bab466574c3339Jerome Glisse ctx->transfer_map = noop_transfer_map; 2955da246944a787b933a509f0b65bab466574c3339Jerome Glisse ctx->transfer_flush_region = noop_transfer_flush_region; 2965da246944a787b933a509f0b65bab466574c3339Jerome Glisse ctx->transfer_unmap = noop_transfer_unmap; 2975da246944a787b933a509f0b65bab466574c3339Jerome Glisse ctx->transfer_destroy = noop_transfer_destroy; 2985da246944a787b933a509f0b65bab466574c3339Jerome Glisse ctx->transfer_inline_write = noop_transfer_inline_write; 2995da246944a787b933a509f0b65bab466574c3339Jerome Glisse noop_init_state_functions(ctx); 3005da246944a787b933a509f0b65bab466574c3339Jerome Glisse 3015da246944a787b933a509f0b65bab466574c3339Jerome Glisse return ctx; 3025da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 3035da246944a787b933a509f0b65bab466574c3339Jerome Glisse 3045da246944a787b933a509f0b65bab466574c3339Jerome Glisse 3055da246944a787b933a509f0b65bab466574c3339Jerome Glisse/* 3065da246944a787b933a509f0b65bab466574c3339Jerome Glisse * pipe_screen 3075da246944a787b933a509f0b65bab466574c3339Jerome Glisse */ 3085da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void noop_flush_frontbuffer(struct pipe_screen *_screen, 3094c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger struct pipe_resource *resource, 3104c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger unsigned level, unsigned layer, 3114c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger void *context_private) 3125da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 3135da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 3145da246944a787b933a509f0b65bab466574c3339Jerome Glisse 3155da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic const char *noop_get_vendor(struct pipe_screen* pscreen) 3165da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 3175da246944a787b933a509f0b65bab466574c3339Jerome Glisse return "X.Org"; 3185da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 3195da246944a787b933a509f0b65bab466574c3339Jerome Glisse 3205da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic const char *noop_get_name(struct pipe_screen* pscreen) 3215da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 3225da246944a787b933a509f0b65bab466574c3339Jerome Glisse return "NOOP"; 3235da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 3245da246944a787b933a509f0b65bab466574c3339Jerome Glisse 3255da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic int noop_get_param(struct pipe_screen* pscreen, enum pipe_cap param) 3265da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 32721c5d11b7ee1f6fd9d16752d8921976d9951623dMarek Olšák struct pipe_screen *screen = ((struct noop_pipe_screen*)pscreen)->oscreen; 32821c5d11b7ee1f6fd9d16752d8921976d9951623dMarek Olšák 32921c5d11b7ee1f6fd9d16752d8921976d9951623dMarek Olšák return screen->get_param(screen, param); 3305da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 3315da246944a787b933a509f0b65bab466574c3339Jerome Glisse 3325da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic float noop_get_paramf(struct pipe_screen* pscreen, enum pipe_cap param) 3335da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 33421c5d11b7ee1f6fd9d16752d8921976d9951623dMarek Olšák struct pipe_screen *screen = ((struct noop_pipe_screen*)pscreen)->oscreen; 33521c5d11b7ee1f6fd9d16752d8921976d9951623dMarek Olšák 33621c5d11b7ee1f6fd9d16752d8921976d9951623dMarek Olšák return screen->get_paramf(screen, param); 3375da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 3385da246944a787b933a509f0b65bab466574c3339Jerome Glisse 3395da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic int noop_get_shader_param(struct pipe_screen* pscreen, unsigned shader, enum pipe_shader_cap param) 3405da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 34121c5d11b7ee1f6fd9d16752d8921976d9951623dMarek Olšák struct pipe_screen *screen = ((struct noop_pipe_screen*)pscreen)->oscreen; 3425da246944a787b933a509f0b65bab466574c3339Jerome Glisse 34321c5d11b7ee1f6fd9d16752d8921976d9951623dMarek Olšák return screen->get_shader_param(screen, shader, param); 3445da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 3455da246944a787b933a509f0b65bab466574c3339Jerome Glisse 34621c5d11b7ee1f6fd9d16752d8921976d9951623dMarek Olšákstatic boolean noop_is_format_supported(struct pipe_screen* pscreen, 3475da246944a787b933a509f0b65bab466574c3339Jerome Glisse enum pipe_format format, 3485da246944a787b933a509f0b65bab466574c3339Jerome Glisse enum pipe_texture_target target, 3495da246944a787b933a509f0b65bab466574c3339Jerome Glisse unsigned sample_count, 350e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák unsigned usage) 3515da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 35221c5d11b7ee1f6fd9d16752d8921976d9951623dMarek Olšák struct pipe_screen *screen = ((struct noop_pipe_screen*)pscreen)->oscreen; 35321c5d11b7ee1f6fd9d16752d8921976d9951623dMarek Olšák 35421c5d11b7ee1f6fd9d16752d8921976d9951623dMarek Olšák return screen->is_format_supported(screen, format, target, sample_count, usage); 3555da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 3565da246944a787b933a509f0b65bab466574c3339Jerome Glisse 3575da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void noop_destroy_screen(struct pipe_screen *screen) 3585da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 3593349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse struct noop_pipe_screen *noop_screen = (struct noop_pipe_screen*)screen; 3603349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse struct pipe_screen *oscreen = noop_screen->oscreen; 3613349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse 3623349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse oscreen->destroy(oscreen); 3635da246944a787b933a509f0b65bab466574c3339Jerome Glisse FREE(screen); 3645da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 3655da246944a787b933a509f0b65bab466574c3339Jerome Glisse 3663349517351059dcd70a81b31bdffe9835bd8f216Jerome Glissestruct pipe_screen *noop_screen_create(struct pipe_screen *oscreen) 3675da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 3683349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse struct noop_pipe_screen *noop_screen; 3695da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct pipe_screen *screen; 3705da246944a787b933a509f0b65bab466574c3339Jerome Glisse 3713349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse if (!debug_get_option_noop()) { 3723349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse return oscreen; 3733349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse } 3743349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse 3753349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse noop_screen = CALLOC_STRUCT(noop_pipe_screen); 3763349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse if (noop_screen == NULL) { 3775da246944a787b933a509f0b65bab466574c3339Jerome Glisse return NULL; 3785da246944a787b933a509f0b65bab466574c3339Jerome Glisse } 3793349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse noop_screen->oscreen = oscreen; 3803349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse screen = &noop_screen->pscreen; 3815da246944a787b933a509f0b65bab466574c3339Jerome Glisse 3823349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse screen->winsys = oscreen->winsys; 3835da246944a787b933a509f0b65bab466574c3339Jerome Glisse screen->destroy = noop_destroy_screen; 3845da246944a787b933a509f0b65bab466574c3339Jerome Glisse screen->get_name = noop_get_name; 3855da246944a787b933a509f0b65bab466574c3339Jerome Glisse screen->get_vendor = noop_get_vendor; 3865da246944a787b933a509f0b65bab466574c3339Jerome Glisse screen->get_param = noop_get_param; 3875da246944a787b933a509f0b65bab466574c3339Jerome Glisse screen->get_shader_param = noop_get_shader_param; 3885da246944a787b933a509f0b65bab466574c3339Jerome Glisse screen->get_paramf = noop_get_paramf; 3895da246944a787b933a509f0b65bab466574c3339Jerome Glisse screen->is_format_supported = noop_is_format_supported; 3905da246944a787b933a509f0b65bab466574c3339Jerome Glisse screen->context_create = noop_create_context; 3915da246944a787b933a509f0b65bab466574c3339Jerome Glisse screen->resource_create = noop_resource_create; 3925da246944a787b933a509f0b65bab466574c3339Jerome Glisse screen->resource_from_handle = noop_resource_from_handle; 3935da246944a787b933a509f0b65bab466574c3339Jerome Glisse screen->resource_get_handle = noop_resource_get_handle; 3945da246944a787b933a509f0b65bab466574c3339Jerome Glisse screen->resource_destroy = noop_resource_destroy; 3955da246944a787b933a509f0b65bab466574c3339Jerome Glisse screen->user_buffer_create = noop_user_buffer_create; 3965da246944a787b933a509f0b65bab466574c3339Jerome Glisse screen->flush_frontbuffer = noop_flush_frontbuffer; 3975da246944a787b933a509f0b65bab466574c3339Jerome Glisse 3985da246944a787b933a509f0b65bab466574c3339Jerome Glisse return screen; 3995da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 400