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, 714445e170bee23a3607ece0e010adef7058ac6a11Marek Olšák boolean wait, 724445e170bee23a3607ece0e010adef7058ac6a11Marek Olšák union pipe_query_result *vresult) 735da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 745da246944a787b933a509f0b65bab466574c3339Jerome Glisse uint64_t *result = (uint64_t*)vresult; 755da246944a787b933a509f0b65bab466574c3339Jerome Glisse 765da246944a787b933a509f0b65bab466574c3339Jerome Glisse *result = 0; 775da246944a787b933a509f0b65bab466574c3339Jerome Glisse return TRUE; 785da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 795da246944a787b933a509f0b65bab466574c3339Jerome Glisse 805da246944a787b933a509f0b65bab466574c3339Jerome Glisse 815da246944a787b933a509f0b65bab466574c3339Jerome Glisse/* 825da246944a787b933a509f0b65bab466574c3339Jerome Glisse * resource 835da246944a787b933a509f0b65bab466574c3339Jerome Glisse */ 845da246944a787b933a509f0b65bab466574c3339Jerome Glissestruct noop_resource { 855da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct pipe_resource base; 865da246944a787b933a509f0b65bab466574c3339Jerome Glisse unsigned size; 875da246944a787b933a509f0b65bab466574c3339Jerome Glisse char *data; 885da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct sw_displaytarget *dt; 895da246944a787b933a509f0b65bab466574c3339Jerome Glisse}; 905da246944a787b933a509f0b65bab466574c3339Jerome Glisse 915da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic struct pipe_resource *noop_resource_create(struct pipe_screen *screen, 925da246944a787b933a509f0b65bab466574c3339Jerome Glisse const struct pipe_resource *templ) 935da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 945da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct noop_resource *nresource; 955da246944a787b933a509f0b65bab466574c3339Jerome Glisse unsigned stride; 965da246944a787b933a509f0b65bab466574c3339Jerome Glisse 975da246944a787b933a509f0b65bab466574c3339Jerome Glisse nresource = CALLOC_STRUCT(noop_resource); 985da246944a787b933a509f0b65bab466574c3339Jerome Glisse if (nresource == NULL) 995da246944a787b933a509f0b65bab466574c3339Jerome Glisse return NULL; 1005da246944a787b933a509f0b65bab466574c3339Jerome Glisse 1015da246944a787b933a509f0b65bab466574c3339Jerome Glisse stride = util_format_get_stride(templ->format, templ->width0); 1025da246944a787b933a509f0b65bab466574c3339Jerome Glisse nresource->base = *templ; 1035da246944a787b933a509f0b65bab466574c3339Jerome Glisse nresource->base.screen = screen; 1045da246944a787b933a509f0b65bab466574c3339Jerome Glisse nresource->size = stride * templ->height0 * templ->depth0; 105785b9e7c780d8e436ef557a22cf916f7869f7390José Fonseca nresource->data = MALLOC(nresource->size); 1065da246944a787b933a509f0b65bab466574c3339Jerome Glisse pipe_reference_init(&nresource->base.reference, 1); 1075da246944a787b933a509f0b65bab466574c3339Jerome Glisse if (nresource->data == NULL) { 1085da246944a787b933a509f0b65bab466574c3339Jerome Glisse FREE(nresource); 1095da246944a787b933a509f0b65bab466574c3339Jerome Glisse return NULL; 1105da246944a787b933a509f0b65bab466574c3339Jerome Glisse } 1115da246944a787b933a509f0b65bab466574c3339Jerome Glisse return &nresource->base; 1125da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 1135da246944a787b933a509f0b65bab466574c3339Jerome Glisse 1143349517351059dcd70a81b31bdffe9835bd8f216Jerome Glissestatic struct pipe_resource *noop_resource_from_handle(struct pipe_screen *screen, 1155da246944a787b933a509f0b65bab466574c3339Jerome Glisse const struct pipe_resource *templ, 1163349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse struct winsys_handle *handle) 1175da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 1183349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse struct noop_pipe_screen *noop_screen = (struct noop_pipe_screen*)screen; 1193349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse struct pipe_screen *oscreen = noop_screen->oscreen; 1203349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse struct pipe_resource *result; 1214d96af933710c74b3ccf3f24ee7d62e57f330bbaBrian Paul struct pipe_resource *noop_resource; 1225da246944a787b933a509f0b65bab466574c3339Jerome Glisse 1233349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse result = oscreen->resource_from_handle(oscreen, templ, handle); 1243349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse noop_resource = noop_resource_create(screen, result); 1253349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse pipe_resource_reference(&result, NULL); 1263349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse return noop_resource; 1275da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 1285da246944a787b933a509f0b65bab466574c3339Jerome Glisse 1295da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic boolean noop_resource_get_handle(struct pipe_screen *screen, 1305da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct pipe_resource *resource, 1315da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct winsys_handle *handle) 1325da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 1333349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse return FALSE; 1345da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 1355da246944a787b933a509f0b65bab466574c3339Jerome Glisse 1365da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void noop_resource_destroy(struct pipe_screen *screen, 1375da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct pipe_resource *resource) 1385da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 1395da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct noop_resource *nresource = (struct noop_resource *)resource; 1405da246944a787b933a509f0b65bab466574c3339Jerome Glisse 141785b9e7c780d8e436ef557a22cf916f7869f7390José Fonseca FREE(nresource->data); 1425da246944a787b933a509f0b65bab466574c3339Jerome Glisse FREE(resource); 1435da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 1445da246944a787b933a509f0b65bab466574c3339Jerome Glisse 1455da246944a787b933a509f0b65bab466574c3339Jerome Glisse 1465da246944a787b933a509f0b65bab466574c3339Jerome Glisse/* 1475da246944a787b933a509f0b65bab466574c3339Jerome Glisse * transfer 1485da246944a787b933a509f0b65bab466574c3339Jerome Glisse */ 1495da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic struct pipe_transfer *noop_get_transfer(struct pipe_context *context, 1505da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct pipe_resource *resource, 1514c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger unsigned level, 1525da246944a787b933a509f0b65bab466574c3339Jerome Glisse enum pipe_transfer_usage usage, 1535da246944a787b933a509f0b65bab466574c3339Jerome Glisse const struct pipe_box *box) 1545da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 1555da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct pipe_transfer *transfer; 1565da246944a787b933a509f0b65bab466574c3339Jerome Glisse 1575da246944a787b933a509f0b65bab466574c3339Jerome Glisse transfer = CALLOC_STRUCT(pipe_transfer); 1585da246944a787b933a509f0b65bab466574c3339Jerome Glisse if (transfer == NULL) 1595da246944a787b933a509f0b65bab466574c3339Jerome Glisse return NULL; 1605da246944a787b933a509f0b65bab466574c3339Jerome Glisse pipe_resource_reference(&transfer->resource, resource); 1614c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger transfer->level = level; 1625da246944a787b933a509f0b65bab466574c3339Jerome Glisse transfer->usage = usage; 1635da246944a787b933a509f0b65bab466574c3339Jerome Glisse transfer->box = *box; 1645da246944a787b933a509f0b65bab466574c3339Jerome Glisse transfer->stride = 1; 1654c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger transfer->layer_stride = 1; 1665da246944a787b933a509f0b65bab466574c3339Jerome Glisse return transfer; 1675da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 1685da246944a787b933a509f0b65bab466574c3339Jerome Glisse 1695da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void *noop_transfer_map(struct pipe_context *pipe, 1705da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct pipe_transfer *transfer) 1715da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 1725da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct noop_resource *nresource = (struct noop_resource *)transfer->resource; 1735da246944a787b933a509f0b65bab466574c3339Jerome Glisse 1745da246944a787b933a509f0b65bab466574c3339Jerome Glisse return nresource->data; 1755da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 1765da246944a787b933a509f0b65bab466574c3339Jerome Glisse 1775da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void noop_transfer_flush_region(struct pipe_context *pipe, 1785da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct pipe_transfer *transfer, 1795da246944a787b933a509f0b65bab466574c3339Jerome Glisse const struct pipe_box *box) 1805da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 1815da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 1825da246944a787b933a509f0b65bab466574c3339Jerome Glisse 1835da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void noop_transfer_unmap(struct pipe_context *pipe, 1845da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct pipe_transfer *transfer) 1855da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 1865da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 1875da246944a787b933a509f0b65bab466574c3339Jerome Glisse 1885da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void noop_transfer_destroy(struct pipe_context *pipe, 1895da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct pipe_transfer *transfer) 1905da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 1915da246944a787b933a509f0b65bab466574c3339Jerome Glisse pipe_resource_reference(&transfer->resource, NULL); 1925da246944a787b933a509f0b65bab466574c3339Jerome Glisse FREE(transfer); 1935da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 1945da246944a787b933a509f0b65bab466574c3339Jerome Glisse 1955da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void noop_transfer_inline_write(struct pipe_context *pipe, 1965da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct pipe_resource *resource, 1974c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger unsigned level, 1985da246944a787b933a509f0b65bab466574c3339Jerome Glisse unsigned usage, 1995da246944a787b933a509f0b65bab466574c3339Jerome Glisse const struct pipe_box *box, 2005da246944a787b933a509f0b65bab466574c3339Jerome Glisse const void *data, 2015da246944a787b933a509f0b65bab466574c3339Jerome Glisse unsigned stride, 2024c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger unsigned layer_stride) 2035da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 2045da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 2055da246944a787b933a509f0b65bab466574c3339Jerome Glisse 2065da246944a787b933a509f0b65bab466574c3339Jerome Glisse 2075da246944a787b933a509f0b65bab466574c3339Jerome Glisse/* 2085da246944a787b933a509f0b65bab466574c3339Jerome Glisse * clear/copy 2095da246944a787b933a509f0b65bab466574c3339Jerome Glisse */ 2105da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void noop_clear(struct pipe_context *ctx, unsigned buffers, 2116dd284f7c8fac22f64c13fdf9909094f5ec59086Dave Airlie const union pipe_color_union *color, double depth, unsigned stencil) 2125da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 2135da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 2145da246944a787b933a509f0b65bab466574c3339Jerome Glisse 2155da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void noop_clear_render_target(struct pipe_context *ctx, 2165da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct pipe_surface *dst, 2176dd284f7c8fac22f64c13fdf9909094f5ec59086Dave Airlie const union pipe_color_union *color, 2185da246944a787b933a509f0b65bab466574c3339Jerome Glisse unsigned dstx, unsigned dsty, 2195da246944a787b933a509f0b65bab466574c3339Jerome Glisse unsigned width, unsigned height) 2205da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 2215da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 2225da246944a787b933a509f0b65bab466574c3339Jerome Glisse 2235da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void noop_clear_depth_stencil(struct pipe_context *ctx, 2245da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct pipe_surface *dst, 2255da246944a787b933a509f0b65bab466574c3339Jerome Glisse unsigned clear_flags, 2265da246944a787b933a509f0b65bab466574c3339Jerome Glisse double depth, 2275da246944a787b933a509f0b65bab466574c3339Jerome Glisse unsigned stencil, 2285da246944a787b933a509f0b65bab466574c3339Jerome Glisse unsigned dstx, unsigned dsty, 2295da246944a787b933a509f0b65bab466574c3339Jerome Glisse unsigned width, unsigned height) 2305da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 2315da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 2325da246944a787b933a509f0b65bab466574c3339Jerome Glisse 2335da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void noop_resource_copy_region(struct pipe_context *ctx, 2345da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct pipe_resource *dst, 2354c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger unsigned dst_level, 2365da246944a787b933a509f0b65bab466574c3339Jerome Glisse unsigned dstx, unsigned dsty, unsigned dstz, 2375da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct pipe_resource *src, 2384c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger unsigned src_level, 2394c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger const struct pipe_box *src_box) 2405da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 2415da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 2425da246944a787b933a509f0b65bab466574c3339Jerome Glisse 2435da246944a787b933a509f0b65bab466574c3339Jerome Glisse 2445da246944a787b933a509f0b65bab466574c3339Jerome Glisse/* 2455da246944a787b933a509f0b65bab466574c3339Jerome Glisse * context 2465da246944a787b933a509f0b65bab466574c3339Jerome Glisse */ 2477e02303497237cde958c28608477d0c355a8038bMarek Olšákstatic void noop_flush(struct pipe_context *ctx, 2485da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct pipe_fence_handle **fence) 2495da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 2505da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 2515da246944a787b933a509f0b65bab466574c3339Jerome Glisse 2525da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void noop_destroy_context(struct pipe_context *ctx) 2535da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 2545da246944a787b933a509f0b65bab466574c3339Jerome Glisse FREE(ctx); 2555da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 2565da246944a787b933a509f0b65bab466574c3339Jerome Glisse 2575da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic struct pipe_context *noop_create_context(struct pipe_screen *screen, void *priv) 2585da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 2595da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct pipe_context *ctx = CALLOC_STRUCT(pipe_context); 2605da246944a787b933a509f0b65bab466574c3339Jerome Glisse 2615da246944a787b933a509f0b65bab466574c3339Jerome Glisse if (ctx == NULL) 2625da246944a787b933a509f0b65bab466574c3339Jerome Glisse return NULL; 2635da246944a787b933a509f0b65bab466574c3339Jerome Glisse ctx->screen = screen; 2645da246944a787b933a509f0b65bab466574c3339Jerome Glisse ctx->priv = priv; 2655da246944a787b933a509f0b65bab466574c3339Jerome Glisse ctx->destroy = noop_destroy_context; 2665da246944a787b933a509f0b65bab466574c3339Jerome Glisse ctx->flush = noop_flush; 2675da246944a787b933a509f0b65bab466574c3339Jerome Glisse ctx->clear = noop_clear; 2685da246944a787b933a509f0b65bab466574c3339Jerome Glisse ctx->clear_render_target = noop_clear_render_target; 2695da246944a787b933a509f0b65bab466574c3339Jerome Glisse ctx->clear_depth_stencil = noop_clear_depth_stencil; 2705da246944a787b933a509f0b65bab466574c3339Jerome Glisse ctx->resource_copy_region = noop_resource_copy_region; 2715da246944a787b933a509f0b65bab466574c3339Jerome Glisse ctx->create_query = noop_create_query; 2725da246944a787b933a509f0b65bab466574c3339Jerome Glisse ctx->destroy_query = noop_destroy_query; 2735da246944a787b933a509f0b65bab466574c3339Jerome Glisse ctx->begin_query = noop_begin_query; 2745da246944a787b933a509f0b65bab466574c3339Jerome Glisse ctx->end_query = noop_end_query; 2755da246944a787b933a509f0b65bab466574c3339Jerome Glisse ctx->get_query_result = noop_get_query_result; 2765da246944a787b933a509f0b65bab466574c3339Jerome Glisse ctx->get_transfer = noop_get_transfer; 2775da246944a787b933a509f0b65bab466574c3339Jerome Glisse ctx->transfer_map = noop_transfer_map; 2785da246944a787b933a509f0b65bab466574c3339Jerome Glisse ctx->transfer_flush_region = noop_transfer_flush_region; 2795da246944a787b933a509f0b65bab466574c3339Jerome Glisse ctx->transfer_unmap = noop_transfer_unmap; 2805da246944a787b933a509f0b65bab466574c3339Jerome Glisse ctx->transfer_destroy = noop_transfer_destroy; 2815da246944a787b933a509f0b65bab466574c3339Jerome Glisse ctx->transfer_inline_write = noop_transfer_inline_write; 2825da246944a787b933a509f0b65bab466574c3339Jerome Glisse noop_init_state_functions(ctx); 2835da246944a787b933a509f0b65bab466574c3339Jerome Glisse 2845da246944a787b933a509f0b65bab466574c3339Jerome Glisse return ctx; 2855da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 2865da246944a787b933a509f0b65bab466574c3339Jerome Glisse 2875da246944a787b933a509f0b65bab466574c3339Jerome Glisse 2885da246944a787b933a509f0b65bab466574c3339Jerome Glisse/* 2895da246944a787b933a509f0b65bab466574c3339Jerome Glisse * pipe_screen 2905da246944a787b933a509f0b65bab466574c3339Jerome Glisse */ 2915da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void noop_flush_frontbuffer(struct pipe_screen *_screen, 2924c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger struct pipe_resource *resource, 2934c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger unsigned level, unsigned layer, 2944c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger void *context_private) 2955da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 2965da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 2975da246944a787b933a509f0b65bab466574c3339Jerome Glisse 2985da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic const char *noop_get_vendor(struct pipe_screen* pscreen) 2995da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 3005da246944a787b933a509f0b65bab466574c3339Jerome Glisse return "X.Org"; 3015da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 3025da246944a787b933a509f0b65bab466574c3339Jerome Glisse 3035da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic const char *noop_get_name(struct pipe_screen* pscreen) 3045da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 3055da246944a787b933a509f0b65bab466574c3339Jerome Glisse return "NOOP"; 3065da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 3075da246944a787b933a509f0b65bab466574c3339Jerome Glisse 3085da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic int noop_get_param(struct pipe_screen* pscreen, enum pipe_cap param) 3095da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 31021c5d11b7ee1f6fd9d16752d8921976d9951623dMarek Olšák struct pipe_screen *screen = ((struct noop_pipe_screen*)pscreen)->oscreen; 31121c5d11b7ee1f6fd9d16752d8921976d9951623dMarek Olšák 31221c5d11b7ee1f6fd9d16752d8921976d9951623dMarek Olšák return screen->get_param(screen, param); 3135da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 3145da246944a787b933a509f0b65bab466574c3339Jerome Glisse 315bb71f9249a66b9a4921a878766c0a2d87624c369Marek Olšákstatic float noop_get_paramf(struct pipe_screen* pscreen, 316bb71f9249a66b9a4921a878766c0a2d87624c369Marek Olšák enum pipe_capf param) 3175da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 31821c5d11b7ee1f6fd9d16752d8921976d9951623dMarek Olšák struct pipe_screen *screen = ((struct noop_pipe_screen*)pscreen)->oscreen; 31921c5d11b7ee1f6fd9d16752d8921976d9951623dMarek Olšák 32021c5d11b7ee1f6fd9d16752d8921976d9951623dMarek Olšák return screen->get_paramf(screen, param); 3215da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 3225da246944a787b933a509f0b65bab466574c3339Jerome Glisse 3235da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic int noop_get_shader_param(struct pipe_screen* pscreen, unsigned shader, enum pipe_shader_cap param) 3245da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 32521c5d11b7ee1f6fd9d16752d8921976d9951623dMarek Olšák struct pipe_screen *screen = ((struct noop_pipe_screen*)pscreen)->oscreen; 3265da246944a787b933a509f0b65bab466574c3339Jerome Glisse 32721c5d11b7ee1f6fd9d16752d8921976d9951623dMarek Olšák return screen->get_shader_param(screen, shader, param); 3285da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 3295da246944a787b933a509f0b65bab466574c3339Jerome Glisse 33021c5d11b7ee1f6fd9d16752d8921976d9951623dMarek Olšákstatic boolean noop_is_format_supported(struct pipe_screen* pscreen, 3315da246944a787b933a509f0b65bab466574c3339Jerome Glisse enum pipe_format format, 3325da246944a787b933a509f0b65bab466574c3339Jerome Glisse enum pipe_texture_target target, 3335da246944a787b933a509f0b65bab466574c3339Jerome Glisse unsigned sample_count, 334e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák unsigned usage) 3355da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 33621c5d11b7ee1f6fd9d16752d8921976d9951623dMarek Olšák struct pipe_screen *screen = ((struct noop_pipe_screen*)pscreen)->oscreen; 33721c5d11b7ee1f6fd9d16752d8921976d9951623dMarek Olšák 33821c5d11b7ee1f6fd9d16752d8921976d9951623dMarek Olšák return screen->is_format_supported(screen, format, target, sample_count, usage); 3395da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 3405da246944a787b933a509f0b65bab466574c3339Jerome Glisse 341e66d90ec6bd927e0a8252c27d69258e126897ad5Marek Olšákstatic uint64_t noop_get_timestamp(struct pipe_screen *pscreen) 342e66d90ec6bd927e0a8252c27d69258e126897ad5Marek Olšák{ 343e66d90ec6bd927e0a8252c27d69258e126897ad5Marek Olšák return 0; 344e66d90ec6bd927e0a8252c27d69258e126897ad5Marek Olšák} 345e66d90ec6bd927e0a8252c27d69258e126897ad5Marek Olšák 3465da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void noop_destroy_screen(struct pipe_screen *screen) 3475da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 3483349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse struct noop_pipe_screen *noop_screen = (struct noop_pipe_screen*)screen; 3493349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse struct pipe_screen *oscreen = noop_screen->oscreen; 3503349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse 3513349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse oscreen->destroy(oscreen); 3525da246944a787b933a509f0b65bab466574c3339Jerome Glisse FREE(screen); 3535da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 3545da246944a787b933a509f0b65bab466574c3339Jerome Glisse 3553349517351059dcd70a81b31bdffe9835bd8f216Jerome Glissestruct pipe_screen *noop_screen_create(struct pipe_screen *oscreen) 3565da246944a787b933a509f0b65bab466574c3339Jerome Glisse{ 3573349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse struct noop_pipe_screen *noop_screen; 3585da246944a787b933a509f0b65bab466574c3339Jerome Glisse struct pipe_screen *screen; 3595da246944a787b933a509f0b65bab466574c3339Jerome Glisse 3603349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse if (!debug_get_option_noop()) { 3613349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse return oscreen; 3623349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse } 3633349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse 3643349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse noop_screen = CALLOC_STRUCT(noop_pipe_screen); 3653349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse if (noop_screen == NULL) { 3665da246944a787b933a509f0b65bab466574c3339Jerome Glisse return NULL; 3675da246944a787b933a509f0b65bab466574c3339Jerome Glisse } 3683349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse noop_screen->oscreen = oscreen; 3693349517351059dcd70a81b31bdffe9835bd8f216Jerome Glisse screen = &noop_screen->pscreen; 3705da246944a787b933a509f0b65bab466574c3339Jerome Glisse 3715da246944a787b933a509f0b65bab466574c3339Jerome Glisse screen->destroy = noop_destroy_screen; 3725da246944a787b933a509f0b65bab466574c3339Jerome Glisse screen->get_name = noop_get_name; 3735da246944a787b933a509f0b65bab466574c3339Jerome Glisse screen->get_vendor = noop_get_vendor; 3745da246944a787b933a509f0b65bab466574c3339Jerome Glisse screen->get_param = noop_get_param; 3755da246944a787b933a509f0b65bab466574c3339Jerome Glisse screen->get_shader_param = noop_get_shader_param; 3765da246944a787b933a509f0b65bab466574c3339Jerome Glisse screen->get_paramf = noop_get_paramf; 3775da246944a787b933a509f0b65bab466574c3339Jerome Glisse screen->is_format_supported = noop_is_format_supported; 3785da246944a787b933a509f0b65bab466574c3339Jerome Glisse screen->context_create = noop_create_context; 3795da246944a787b933a509f0b65bab466574c3339Jerome Glisse screen->resource_create = noop_resource_create; 3805da246944a787b933a509f0b65bab466574c3339Jerome Glisse screen->resource_from_handle = noop_resource_from_handle; 3815da246944a787b933a509f0b65bab466574c3339Jerome Glisse screen->resource_get_handle = noop_resource_get_handle; 3825da246944a787b933a509f0b65bab466574c3339Jerome Glisse screen->resource_destroy = noop_resource_destroy; 3835da246944a787b933a509f0b65bab466574c3339Jerome Glisse screen->flush_frontbuffer = noop_flush_frontbuffer; 384e66d90ec6bd927e0a8252c27d69258e126897ad5Marek Olšák screen->get_timestamp = noop_get_timestamp; 3855da246944a787b933a509f0b65bab466574c3339Jerome Glisse 3865da246944a787b933a509f0b65bab466574c3339Jerome Glisse return screen; 3875da246944a787b933a509f0b65bab466574c3339Jerome Glisse} 388