noop_pipe.c revision 4c7001462607e6e99e474d6271dd481d3f8f201c
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>
255da246944a787b933a509f0b65bab466574c3339Jerome Glisse#include <pipe/p_defines.h>
265da246944a787b933a509f0b65bab466574c3339Jerome Glisse#include <pipe/p_state.h>
275da246944a787b933a509f0b65bab466574c3339Jerome Glisse#include <pipe/p_context.h>
285da246944a787b933a509f0b65bab466574c3339Jerome Glisse#include <pipe/p_screen.h>
295da246944a787b933a509f0b65bab466574c3339Jerome Glisse#include <util/u_memory.h>
305da246944a787b933a509f0b65bab466574c3339Jerome Glisse#include <util/u_inlines.h>
315da246944a787b933a509f0b65bab466574c3339Jerome Glisse#include <util/u_format.h>
325da246944a787b933a509f0b65bab466574c3339Jerome Glisse#include "noop_public.h"
335da246944a787b933a509f0b65bab466574c3339Jerome Glisse#include "state_tracker/sw_winsys.h"
345da246944a787b933a509f0b65bab466574c3339Jerome Glisse
355da246944a787b933a509f0b65bab466574c3339Jerome Glissevoid noop_init_state_functions(struct pipe_context *ctx);
365da246944a787b933a509f0b65bab466574c3339Jerome Glisse
375da246944a787b933a509f0b65bab466574c3339Jerome Glisse/*
385da246944a787b933a509f0b65bab466574c3339Jerome Glisse * query
395da246944a787b933a509f0b65bab466574c3339Jerome Glisse */
405da246944a787b933a509f0b65bab466574c3339Jerome Glissestruct noop_query {
415da246944a787b933a509f0b65bab466574c3339Jerome Glisse	unsigned	query;
425da246944a787b933a509f0b65bab466574c3339Jerome Glisse};
435da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic struct pipe_query *noop_create_query(struct pipe_context *ctx, unsigned query_type)
445da246944a787b933a509f0b65bab466574c3339Jerome Glisse{
455da246944a787b933a509f0b65bab466574c3339Jerome Glisse	struct noop_query *query = CALLOC_STRUCT(noop_query);
465da246944a787b933a509f0b65bab466574c3339Jerome Glisse
475da246944a787b933a509f0b65bab466574c3339Jerome Glisse	return (struct pipe_query *)query;
485da246944a787b933a509f0b65bab466574c3339Jerome Glisse}
495da246944a787b933a509f0b65bab466574c3339Jerome Glisse
505da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void noop_destroy_query(struct pipe_context *ctx, struct pipe_query *query)
515da246944a787b933a509f0b65bab466574c3339Jerome Glisse{
525da246944a787b933a509f0b65bab466574c3339Jerome Glisse	FREE(query);
535da246944a787b933a509f0b65bab466574c3339Jerome Glisse}
545da246944a787b933a509f0b65bab466574c3339Jerome Glisse
555da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void noop_begin_query(struct pipe_context *ctx, struct pipe_query *query)
565da246944a787b933a509f0b65bab466574c3339Jerome Glisse{
575da246944a787b933a509f0b65bab466574c3339Jerome Glisse}
585da246944a787b933a509f0b65bab466574c3339Jerome Glisse
595da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void noop_end_query(struct pipe_context *ctx, struct pipe_query *query)
605da246944a787b933a509f0b65bab466574c3339Jerome Glisse{
615da246944a787b933a509f0b65bab466574c3339Jerome Glisse}
625da246944a787b933a509f0b65bab466574c3339Jerome Glisse
635da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic boolean noop_get_query_result(struct pipe_context *ctx,
645da246944a787b933a509f0b65bab466574c3339Jerome Glisse					struct pipe_query *query,
655da246944a787b933a509f0b65bab466574c3339Jerome Glisse					boolean wait, void *vresult)
665da246944a787b933a509f0b65bab466574c3339Jerome Glisse{
675da246944a787b933a509f0b65bab466574c3339Jerome Glisse	uint64_t *result = (uint64_t*)vresult;
685da246944a787b933a509f0b65bab466574c3339Jerome Glisse
695da246944a787b933a509f0b65bab466574c3339Jerome Glisse	*result = 0;
705da246944a787b933a509f0b65bab466574c3339Jerome Glisse	return TRUE;
715da246944a787b933a509f0b65bab466574c3339Jerome Glisse}
725da246944a787b933a509f0b65bab466574c3339Jerome Glisse
735da246944a787b933a509f0b65bab466574c3339Jerome Glisse
745da246944a787b933a509f0b65bab466574c3339Jerome Glisse/*
755da246944a787b933a509f0b65bab466574c3339Jerome Glisse * resource
765da246944a787b933a509f0b65bab466574c3339Jerome Glisse */
775da246944a787b933a509f0b65bab466574c3339Jerome Glissestruct noop_resource {
785da246944a787b933a509f0b65bab466574c3339Jerome Glisse	struct pipe_resource	base;
795da246944a787b933a509f0b65bab466574c3339Jerome Glisse	unsigned		size;
805da246944a787b933a509f0b65bab466574c3339Jerome Glisse	char			*data;
815da246944a787b933a509f0b65bab466574c3339Jerome Glisse	struct sw_displaytarget	*dt;
825da246944a787b933a509f0b65bab466574c3339Jerome Glisse};
835da246944a787b933a509f0b65bab466574c3339Jerome Glisse
845da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic unsigned noop_is_resource_referenced(struct pipe_context *pipe,
855da246944a787b933a509f0b65bab466574c3339Jerome Glisse						struct pipe_resource *resource,
864c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger						unsigned level, int layer)
875da246944a787b933a509f0b65bab466574c3339Jerome Glisse{
885da246944a787b933a509f0b65bab466574c3339Jerome Glisse	return PIPE_UNREFERENCED;
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;
1055da246944a787b933a509f0b65bab466574c3339Jerome Glisse	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#if 0
1125da246944a787b933a509f0b65bab466574c3339Jerome Glisse	if (nresource->base.bind & (PIPE_BIND_DISPLAY_TARGET |
1135da246944a787b933a509f0b65bab466574c3339Jerome Glisse					PIPE_BIND_SCANOUT |
1145da246944a787b933a509f0b65bab466574c3339Jerome Glisse					PIPE_BIND_SHARED)) {
1155da246944a787b933a509f0b65bab466574c3339Jerome Glisse		struct sw_winsys *winsys = (struct sw_winsys *)screen->winsys;
1165da246944a787b933a509f0b65bab466574c3339Jerome Glisse		unsigned stride;
1175da246944a787b933a509f0b65bab466574c3339Jerome Glisse
1185da246944a787b933a509f0b65bab466574c3339Jerome Glisse		nresource->dt = winsys->displaytarget_create(winsys, nresource->base.bind,
1195da246944a787b933a509f0b65bab466574c3339Jerome Glisse								nresource->base.format,
1205da246944a787b933a509f0b65bab466574c3339Jerome Glisse								nresource->base.width0,
1215da246944a787b933a509f0b65bab466574c3339Jerome Glisse								nresource->base.height0,
1225da246944a787b933a509f0b65bab466574c3339Jerome Glisse								16, &stride);
1235da246944a787b933a509f0b65bab466574c3339Jerome Glisse	}
1245da246944a787b933a509f0b65bab466574c3339Jerome Glisse#endif
1255da246944a787b933a509f0b65bab466574c3339Jerome Glisse	return &nresource->base;
1265da246944a787b933a509f0b65bab466574c3339Jerome Glisse}
1275da246944a787b933a509f0b65bab466574c3339Jerome Glisse
1285da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic struct pipe_resource *noop_resource_from_handle(struct pipe_screen * screen,
1295da246944a787b933a509f0b65bab466574c3339Jerome Glisse							const struct pipe_resource *templ,
1305da246944a787b933a509f0b65bab466574c3339Jerome Glisse							struct winsys_handle *whandle)
1315da246944a787b933a509f0b65bab466574c3339Jerome Glisse{
1325da246944a787b933a509f0b65bab466574c3339Jerome Glisse	struct sw_winsys *winsys = (struct sw_winsys *)screen->winsys;
1335da246944a787b933a509f0b65bab466574c3339Jerome Glisse	struct noop_resource *nresource;
1345da246944a787b933a509f0b65bab466574c3339Jerome Glisse	struct sw_displaytarget *dt;
1355da246944a787b933a509f0b65bab466574c3339Jerome Glisse	unsigned stride;
1365da246944a787b933a509f0b65bab466574c3339Jerome Glisse
1375da246944a787b933a509f0b65bab466574c3339Jerome Glisse	dt = winsys->displaytarget_from_handle(winsys, templ, whandle, &stride);
1385da246944a787b933a509f0b65bab466574c3339Jerome Glisse	if (dt == NULL) {
1395da246944a787b933a509f0b65bab466574c3339Jerome Glisse		return NULL;
1405da246944a787b933a509f0b65bab466574c3339Jerome Glisse	}
1415da246944a787b933a509f0b65bab466574c3339Jerome Glisse	nresource = (struct noop_resource *)noop_resource_create(screen, templ);
1425da246944a787b933a509f0b65bab466574c3339Jerome Glisse	nresource->dt = dt;
1435da246944a787b933a509f0b65bab466574c3339Jerome Glisse	return &nresource->base;
1445da246944a787b933a509f0b65bab466574c3339Jerome Glisse}
1455da246944a787b933a509f0b65bab466574c3339Jerome Glisse
1465da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic boolean noop_resource_get_handle(struct pipe_screen *screen,
1475da246944a787b933a509f0b65bab466574c3339Jerome Glisse					struct pipe_resource *resource,
1485da246944a787b933a509f0b65bab466574c3339Jerome Glisse					struct winsys_handle *handle)
1495da246944a787b933a509f0b65bab466574c3339Jerome Glisse{
1505da246944a787b933a509f0b65bab466574c3339Jerome Glisse	struct sw_winsys *winsys = (struct sw_winsys *)screen->winsys;
1515da246944a787b933a509f0b65bab466574c3339Jerome Glisse	struct noop_resource *nresource = (struct noop_resource *)resource;
1525da246944a787b933a509f0b65bab466574c3339Jerome Glisse
1535da246944a787b933a509f0b65bab466574c3339Jerome Glisse	if (nresource->dt == NULL)
1545da246944a787b933a509f0b65bab466574c3339Jerome Glisse		return FALSE;
1555da246944a787b933a509f0b65bab466574c3339Jerome Glisse
1565da246944a787b933a509f0b65bab466574c3339Jerome Glisse	return winsys->displaytarget_get_handle(winsys, nresource->dt, handle);
1575da246944a787b933a509f0b65bab466574c3339Jerome Glisse}
1585da246944a787b933a509f0b65bab466574c3339Jerome Glisse
1595da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void noop_resource_destroy(struct pipe_screen *screen,
1605da246944a787b933a509f0b65bab466574c3339Jerome Glisse					struct pipe_resource *resource)
1615da246944a787b933a509f0b65bab466574c3339Jerome Glisse{
1625da246944a787b933a509f0b65bab466574c3339Jerome Glisse	struct noop_resource *nresource = (struct noop_resource *)resource;
1635da246944a787b933a509f0b65bab466574c3339Jerome Glisse
1645da246944a787b933a509f0b65bab466574c3339Jerome Glisse	if (nresource->dt) {
1655da246944a787b933a509f0b65bab466574c3339Jerome Glisse		/* display target */
1665da246944a787b933a509f0b65bab466574c3339Jerome Glisse		struct sw_winsys *winsys = (struct sw_winsys *)screen->winsys;
1675da246944a787b933a509f0b65bab466574c3339Jerome Glisse		winsys->displaytarget_destroy(winsys, nresource->dt);
1685da246944a787b933a509f0b65bab466574c3339Jerome Glisse	}
1695da246944a787b933a509f0b65bab466574c3339Jerome Glisse	free(nresource->data);
1705da246944a787b933a509f0b65bab466574c3339Jerome Glisse	FREE(resource);
1715da246944a787b933a509f0b65bab466574c3339Jerome Glisse}
1725da246944a787b933a509f0b65bab466574c3339Jerome Glisse
1735da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic struct pipe_resource *noop_user_buffer_create(struct pipe_screen *screen,
1745da246944a787b933a509f0b65bab466574c3339Jerome Glisse							void *ptr, unsigned bytes,
1755da246944a787b933a509f0b65bab466574c3339Jerome Glisse							unsigned bind)
1765da246944a787b933a509f0b65bab466574c3339Jerome Glisse{
1775da246944a787b933a509f0b65bab466574c3339Jerome Glisse	struct pipe_resource templ;
1785da246944a787b933a509f0b65bab466574c3339Jerome Glisse
1795da246944a787b933a509f0b65bab466574c3339Jerome Glisse	templ.target = PIPE_BUFFER;
1805da246944a787b933a509f0b65bab466574c3339Jerome Glisse	templ.format = PIPE_FORMAT_R8_UNORM;
1815da246944a787b933a509f0b65bab466574c3339Jerome Glisse	templ.usage = PIPE_USAGE_IMMUTABLE;
1825da246944a787b933a509f0b65bab466574c3339Jerome Glisse	templ.bind = bind;
1835da246944a787b933a509f0b65bab466574c3339Jerome Glisse	templ.width0 = bytes;
1845da246944a787b933a509f0b65bab466574c3339Jerome Glisse	templ.height0 = 1;
1855da246944a787b933a509f0b65bab466574c3339Jerome Glisse	templ.depth0 = 1;
1865da246944a787b933a509f0b65bab466574c3339Jerome Glisse	templ.flags = 0;
1875da246944a787b933a509f0b65bab466574c3339Jerome Glisse	return noop_resource_create(screen, &templ);
1885da246944a787b933a509f0b65bab466574c3339Jerome Glisse}
1895da246944a787b933a509f0b65bab466574c3339Jerome Glisse
1905da246944a787b933a509f0b65bab466574c3339Jerome Glisse
1915da246944a787b933a509f0b65bab466574c3339Jerome Glisse/*
1925da246944a787b933a509f0b65bab466574c3339Jerome Glisse * transfer
1935da246944a787b933a509f0b65bab466574c3339Jerome Glisse */
1945da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic struct pipe_transfer *noop_get_transfer(struct pipe_context *context,
1955da246944a787b933a509f0b65bab466574c3339Jerome Glisse						struct pipe_resource *resource,
1964c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger						unsigned level,
1975da246944a787b933a509f0b65bab466574c3339Jerome Glisse						enum pipe_transfer_usage usage,
1985da246944a787b933a509f0b65bab466574c3339Jerome Glisse						const struct pipe_box *box)
1995da246944a787b933a509f0b65bab466574c3339Jerome Glisse{
2005da246944a787b933a509f0b65bab466574c3339Jerome Glisse	struct pipe_transfer *transfer;
2015da246944a787b933a509f0b65bab466574c3339Jerome Glisse
2025da246944a787b933a509f0b65bab466574c3339Jerome Glisse	transfer = CALLOC_STRUCT(pipe_transfer);
2035da246944a787b933a509f0b65bab466574c3339Jerome Glisse	if (transfer == NULL)
2045da246944a787b933a509f0b65bab466574c3339Jerome Glisse		return NULL;
2055da246944a787b933a509f0b65bab466574c3339Jerome Glisse	pipe_resource_reference(&transfer->resource, resource);
2064c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger	transfer->level = level;
2075da246944a787b933a509f0b65bab466574c3339Jerome Glisse	transfer->usage = usage;
2085da246944a787b933a509f0b65bab466574c3339Jerome Glisse	transfer->box = *box;
2095da246944a787b933a509f0b65bab466574c3339Jerome Glisse	transfer->stride = 1;
2104c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger	transfer->layer_stride = 1;
2115da246944a787b933a509f0b65bab466574c3339Jerome Glisse	return transfer;
2125da246944a787b933a509f0b65bab466574c3339Jerome Glisse}
2135da246944a787b933a509f0b65bab466574c3339Jerome Glisse
2145da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void *noop_transfer_map(struct pipe_context *pipe,
2155da246944a787b933a509f0b65bab466574c3339Jerome Glisse				struct pipe_transfer *transfer)
2165da246944a787b933a509f0b65bab466574c3339Jerome Glisse{
2175da246944a787b933a509f0b65bab466574c3339Jerome Glisse	struct noop_resource *nresource = (struct noop_resource *)transfer->resource;
2185da246944a787b933a509f0b65bab466574c3339Jerome Glisse
2195da246944a787b933a509f0b65bab466574c3339Jerome Glisse	return nresource->data;
2205da246944a787b933a509f0b65bab466574c3339Jerome Glisse}
2215da246944a787b933a509f0b65bab466574c3339Jerome Glisse
2225da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void noop_transfer_flush_region(struct pipe_context *pipe,
2235da246944a787b933a509f0b65bab466574c3339Jerome Glisse					struct pipe_transfer *transfer,
2245da246944a787b933a509f0b65bab466574c3339Jerome Glisse					const struct pipe_box *box)
2255da246944a787b933a509f0b65bab466574c3339Jerome Glisse{
2265da246944a787b933a509f0b65bab466574c3339Jerome Glisse}
2275da246944a787b933a509f0b65bab466574c3339Jerome Glisse
2285da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void noop_transfer_unmap(struct pipe_context *pipe,
2295da246944a787b933a509f0b65bab466574c3339Jerome Glisse				struct pipe_transfer *transfer)
2305da246944a787b933a509f0b65bab466574c3339Jerome Glisse{
2315da246944a787b933a509f0b65bab466574c3339Jerome Glisse}
2325da246944a787b933a509f0b65bab466574c3339Jerome Glisse
2335da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void noop_transfer_destroy(struct pipe_context *pipe,
2345da246944a787b933a509f0b65bab466574c3339Jerome Glisse					struct pipe_transfer *transfer)
2355da246944a787b933a509f0b65bab466574c3339Jerome Glisse{
2365da246944a787b933a509f0b65bab466574c3339Jerome Glisse	pipe_resource_reference(&transfer->resource, NULL);
2375da246944a787b933a509f0b65bab466574c3339Jerome Glisse	FREE(transfer);
2385da246944a787b933a509f0b65bab466574c3339Jerome Glisse}
2395da246944a787b933a509f0b65bab466574c3339Jerome Glisse
2405da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void noop_transfer_inline_write(struct pipe_context *pipe,
2415da246944a787b933a509f0b65bab466574c3339Jerome Glisse					struct pipe_resource *resource,
2424c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger					unsigned level,
2435da246944a787b933a509f0b65bab466574c3339Jerome Glisse					unsigned usage,
2445da246944a787b933a509f0b65bab466574c3339Jerome Glisse					const struct pipe_box *box,
2455da246944a787b933a509f0b65bab466574c3339Jerome Glisse					const void *data,
2465da246944a787b933a509f0b65bab466574c3339Jerome Glisse					unsigned stride,
2474c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger					unsigned layer_stride)
2485da246944a787b933a509f0b65bab466574c3339Jerome Glisse{
2495da246944a787b933a509f0b65bab466574c3339Jerome Glisse}
2505da246944a787b933a509f0b65bab466574c3339Jerome Glisse
2515da246944a787b933a509f0b65bab466574c3339Jerome Glisse
2525da246944a787b933a509f0b65bab466574c3339Jerome Glisse/*
2535da246944a787b933a509f0b65bab466574c3339Jerome Glisse * clear/copy
2545da246944a787b933a509f0b65bab466574c3339Jerome Glisse */
2555da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void noop_clear(struct pipe_context *ctx, unsigned buffers,
2565da246944a787b933a509f0b65bab466574c3339Jerome Glisse			const float *rgba, double depth, unsigned stencil)
2575da246944a787b933a509f0b65bab466574c3339Jerome Glisse{
2585da246944a787b933a509f0b65bab466574c3339Jerome Glisse}
2595da246944a787b933a509f0b65bab466574c3339Jerome Glisse
2605da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void noop_clear_render_target(struct pipe_context *ctx,
2615da246944a787b933a509f0b65bab466574c3339Jerome Glisse				     struct pipe_surface *dst,
2625da246944a787b933a509f0b65bab466574c3339Jerome Glisse				     const float *rgba,
2635da246944a787b933a509f0b65bab466574c3339Jerome Glisse				     unsigned dstx, unsigned dsty,
2645da246944a787b933a509f0b65bab466574c3339Jerome Glisse				     unsigned width, unsigned height)
2655da246944a787b933a509f0b65bab466574c3339Jerome Glisse{
2665da246944a787b933a509f0b65bab466574c3339Jerome Glisse}
2675da246944a787b933a509f0b65bab466574c3339Jerome Glisse
2685da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void noop_clear_depth_stencil(struct pipe_context *ctx,
2695da246944a787b933a509f0b65bab466574c3339Jerome Glisse				     struct pipe_surface *dst,
2705da246944a787b933a509f0b65bab466574c3339Jerome Glisse				     unsigned clear_flags,
2715da246944a787b933a509f0b65bab466574c3339Jerome Glisse				     double depth,
2725da246944a787b933a509f0b65bab466574c3339Jerome Glisse				     unsigned stencil,
2735da246944a787b933a509f0b65bab466574c3339Jerome Glisse				     unsigned dstx, unsigned dsty,
2745da246944a787b933a509f0b65bab466574c3339Jerome Glisse				     unsigned width, unsigned height)
2755da246944a787b933a509f0b65bab466574c3339Jerome Glisse{
2765da246944a787b933a509f0b65bab466574c3339Jerome Glisse}
2775da246944a787b933a509f0b65bab466574c3339Jerome Glisse
2785da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void noop_resource_copy_region(struct pipe_context *ctx,
2795da246944a787b933a509f0b65bab466574c3339Jerome Glisse				      struct pipe_resource *dst,
2804c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger				      unsigned dst_level,
2815da246944a787b933a509f0b65bab466574c3339Jerome Glisse				      unsigned dstx, unsigned dsty, unsigned dstz,
2825da246944a787b933a509f0b65bab466574c3339Jerome Glisse				      struct pipe_resource *src,
2834c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger				      unsigned src_level,
2844c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger				      const struct pipe_box *src_box)
2855da246944a787b933a509f0b65bab466574c3339Jerome Glisse{
2865da246944a787b933a509f0b65bab466574c3339Jerome Glisse}
2875da246944a787b933a509f0b65bab466574c3339Jerome Glisse
2885da246944a787b933a509f0b65bab466574c3339Jerome Glisse
2895da246944a787b933a509f0b65bab466574c3339Jerome Glisse/*
2905da246944a787b933a509f0b65bab466574c3339Jerome Glisse * context
2915da246944a787b933a509f0b65bab466574c3339Jerome Glisse */
2925da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void noop_flush(struct pipe_context *ctx, unsigned flags,
2935da246944a787b933a509f0b65bab466574c3339Jerome Glisse			struct pipe_fence_handle **fence)
2945da246944a787b933a509f0b65bab466574c3339Jerome Glisse{
2955da246944a787b933a509f0b65bab466574c3339Jerome Glisse}
2965da246944a787b933a509f0b65bab466574c3339Jerome Glisse
2975da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void noop_destroy_context(struct pipe_context *ctx)
2985da246944a787b933a509f0b65bab466574c3339Jerome Glisse{
2995da246944a787b933a509f0b65bab466574c3339Jerome Glisse	FREE(ctx);
3005da246944a787b933a509f0b65bab466574c3339Jerome Glisse}
3015da246944a787b933a509f0b65bab466574c3339Jerome Glisse
3025da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic struct pipe_context *noop_create_context(struct pipe_screen *screen, void *priv)
3035da246944a787b933a509f0b65bab466574c3339Jerome Glisse{
3045da246944a787b933a509f0b65bab466574c3339Jerome Glisse	struct pipe_context *ctx = CALLOC_STRUCT(pipe_context);
3055da246944a787b933a509f0b65bab466574c3339Jerome Glisse
3065da246944a787b933a509f0b65bab466574c3339Jerome Glisse	if (ctx == NULL)
3075da246944a787b933a509f0b65bab466574c3339Jerome Glisse		return NULL;
3085da246944a787b933a509f0b65bab466574c3339Jerome Glisse	ctx->winsys = screen->winsys;
3095da246944a787b933a509f0b65bab466574c3339Jerome Glisse	ctx->screen = screen;
3105da246944a787b933a509f0b65bab466574c3339Jerome Glisse	ctx->priv = priv;
3115da246944a787b933a509f0b65bab466574c3339Jerome Glisse	ctx->destroy = noop_destroy_context;
3125da246944a787b933a509f0b65bab466574c3339Jerome Glisse	ctx->flush = noop_flush;
3135da246944a787b933a509f0b65bab466574c3339Jerome Glisse	ctx->clear = noop_clear;
3145da246944a787b933a509f0b65bab466574c3339Jerome Glisse	ctx->clear_render_target = noop_clear_render_target;
3155da246944a787b933a509f0b65bab466574c3339Jerome Glisse	ctx->clear_depth_stencil = noop_clear_depth_stencil;
3165da246944a787b933a509f0b65bab466574c3339Jerome Glisse	ctx->resource_copy_region = noop_resource_copy_region;
3175da246944a787b933a509f0b65bab466574c3339Jerome Glisse	ctx->create_query = noop_create_query;
3185da246944a787b933a509f0b65bab466574c3339Jerome Glisse	ctx->destroy_query = noop_destroy_query;
3195da246944a787b933a509f0b65bab466574c3339Jerome Glisse	ctx->begin_query = noop_begin_query;
3205da246944a787b933a509f0b65bab466574c3339Jerome Glisse	ctx->end_query = noop_end_query;
3215da246944a787b933a509f0b65bab466574c3339Jerome Glisse	ctx->get_query_result = noop_get_query_result;
3225da246944a787b933a509f0b65bab466574c3339Jerome Glisse	ctx->get_transfer = noop_get_transfer;
3235da246944a787b933a509f0b65bab466574c3339Jerome Glisse	ctx->transfer_map = noop_transfer_map;
3245da246944a787b933a509f0b65bab466574c3339Jerome Glisse	ctx->transfer_flush_region = noop_transfer_flush_region;
3255da246944a787b933a509f0b65bab466574c3339Jerome Glisse	ctx->transfer_unmap = noop_transfer_unmap;
3265da246944a787b933a509f0b65bab466574c3339Jerome Glisse	ctx->transfer_destroy = noop_transfer_destroy;
3275da246944a787b933a509f0b65bab466574c3339Jerome Glisse	ctx->transfer_inline_write = noop_transfer_inline_write;
3285da246944a787b933a509f0b65bab466574c3339Jerome Glisse	ctx->is_resource_referenced = noop_is_resource_referenced;
3295da246944a787b933a509f0b65bab466574c3339Jerome Glisse	noop_init_state_functions(ctx);
3305da246944a787b933a509f0b65bab466574c3339Jerome Glisse
3315da246944a787b933a509f0b65bab466574c3339Jerome Glisse	return ctx;
3325da246944a787b933a509f0b65bab466574c3339Jerome Glisse}
3335da246944a787b933a509f0b65bab466574c3339Jerome Glisse
3345da246944a787b933a509f0b65bab466574c3339Jerome Glisse
3355da246944a787b933a509f0b65bab466574c3339Jerome Glisse/*
3365da246944a787b933a509f0b65bab466574c3339Jerome Glisse * pipe_screen
3375da246944a787b933a509f0b65bab466574c3339Jerome Glisse */
3385da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void noop_flush_frontbuffer(struct pipe_screen *_screen,
3394c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger				   struct pipe_resource *resource,
3404c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger				   unsigned level, unsigned layer,
3414c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger				   void *context_private)
3425da246944a787b933a509f0b65bab466574c3339Jerome Glisse{
3435da246944a787b933a509f0b65bab466574c3339Jerome Glisse}
3445da246944a787b933a509f0b65bab466574c3339Jerome Glisse
3455da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic const char *noop_get_vendor(struct pipe_screen* pscreen)
3465da246944a787b933a509f0b65bab466574c3339Jerome Glisse{
3475da246944a787b933a509f0b65bab466574c3339Jerome Glisse	return "X.Org";
3485da246944a787b933a509f0b65bab466574c3339Jerome Glisse}
3495da246944a787b933a509f0b65bab466574c3339Jerome Glisse
3505da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic const char *noop_get_name(struct pipe_screen* pscreen)
3515da246944a787b933a509f0b65bab466574c3339Jerome Glisse{
3525da246944a787b933a509f0b65bab466574c3339Jerome Glisse	return "NOOP";
3535da246944a787b933a509f0b65bab466574c3339Jerome Glisse}
3545da246944a787b933a509f0b65bab466574c3339Jerome Glisse
3555da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic int noop_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
3565da246944a787b933a509f0b65bab466574c3339Jerome Glisse{
3575da246944a787b933a509f0b65bab466574c3339Jerome Glisse	switch (param) {
3585da246944a787b933a509f0b65bab466574c3339Jerome Glisse	/* Supported features (boolean caps). */
3595da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_CAP_NPOT_TEXTURES:
3605da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_CAP_TWO_SIDED_STENCIL:
3615da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_CAP_GLSL:
3625da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_CAP_OCCLUSION_QUERY:
363185d862cd8cd0a56dd86daa01d9c692ff4abfb54Dave Airlie	case PIPE_CAP_POINT_SPRITE:
364185d862cd8cd0a56dd86daa01d9c692ff4abfb54Dave Airlie	case PIPE_CAP_ANISOTROPIC_FILTER:
3655da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_CAP_TEXTURE_MIRROR_CLAMP:
3665da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_CAP_TEXTURE_MIRROR_REPEAT:
367185d862cd8cd0a56dd86daa01d9c692ff4abfb54Dave Airlie	case PIPE_CAP_TEXTURE_SHADOW_MAP:
368185d862cd8cd0a56dd86daa01d9c692ff4abfb54Dave Airlie	case PIPE_CAP_TEXTURE_SWIZZLE:
3695da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_CAP_BLEND_EQUATION_SEPARATE:
370185d862cd8cd0a56dd86daa01d9c692ff4abfb54Dave Airlie
371185d862cd8cd0a56dd86daa01d9c692ff4abfb54Dave Airlie	  return 1;
372185d862cd8cd0a56dd86daa01d9c692ff4abfb54Dave Airlie	case PIPE_CAP_DUAL_SOURCE_BLEND:
373185d862cd8cd0a56dd86daa01d9c692ff4abfb54Dave Airlie
3745da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_CAP_SM3:
3755da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_CAP_INDEP_BLEND_ENABLE:
3765da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_CAP_DEPTHSTENCIL_CLEAR_SEPARATE:
3775da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_CAP_DEPTH_CLAMP:
3785da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_CAP_SHADER_STENCIL_EXPORT:
3795da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_CAP_TIMER_QUERY:
3805da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_CAP_STREAM_OUTPUT:
3815da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_CAP_PRIMITIVE_RESTART:
3825da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_CAP_INDEP_BLEND_FUNC:
3835da246944a787b933a509f0b65bab466574c3339Jerome Glisse		return 0;
3845da246944a787b933a509f0b65bab466574c3339Jerome Glisse
3855da246944a787b933a509f0b65bab466574c3339Jerome Glisse	/* Texturing. */
3865da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_CAP_MAX_TEXTURE_2D_LEVELS:
3875da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
3885da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
3895da246944a787b933a509f0b65bab466574c3339Jerome Glisse		return 14;
3905da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_CAP_MAX_VERTEX_TEXTURE_UNITS:
3915da246944a787b933a509f0b65bab466574c3339Jerome Glisse		return 16;
3925da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_CAP_MAX_TEXTURE_IMAGE_UNITS:
3935da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_CAP_MAX_COMBINED_SAMPLERS:
3945da246944a787b933a509f0b65bab466574c3339Jerome Glisse		return 16;
3955da246944a787b933a509f0b65bab466574c3339Jerome Glisse
3965da246944a787b933a509f0b65bab466574c3339Jerome Glisse	/* Render targets. */
3975da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_CAP_MAX_RENDER_TARGETS:
3985da246944a787b933a509f0b65bab466574c3339Jerome Glisse		return 8;
3995da246944a787b933a509f0b65bab466574c3339Jerome Glisse
4005da246944a787b933a509f0b65bab466574c3339Jerome Glisse	/* Fragment coordinate conventions. */
4015da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT:
4025da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER:
4035da246944a787b933a509f0b65bab466574c3339Jerome Glisse		return 1;
4045da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT:
4055da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER:
4065da246944a787b933a509f0b65bab466574c3339Jerome Glisse		return 0;
4075da246944a787b933a509f0b65bab466574c3339Jerome Glisse
4085da246944a787b933a509f0b65bab466574c3339Jerome Glisse	default:
4095da246944a787b933a509f0b65bab466574c3339Jerome Glisse		return 0;
4105da246944a787b933a509f0b65bab466574c3339Jerome Glisse	}
4115da246944a787b933a509f0b65bab466574c3339Jerome Glisse}
4125da246944a787b933a509f0b65bab466574c3339Jerome Glisse
4135da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic float noop_get_paramf(struct pipe_screen* pscreen, enum pipe_cap param)
4145da246944a787b933a509f0b65bab466574c3339Jerome Glisse{
4155da246944a787b933a509f0b65bab466574c3339Jerome Glisse	switch (param) {
4165da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_CAP_MAX_LINE_WIDTH:
4175da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_CAP_MAX_LINE_WIDTH_AA:
4185da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_CAP_MAX_POINT_WIDTH:
4195da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_CAP_MAX_POINT_WIDTH_AA:
4205da246944a787b933a509f0b65bab466574c3339Jerome Glisse		return 8192.0f;
4215da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_CAP_MAX_TEXTURE_ANISOTROPY:
4225da246944a787b933a509f0b65bab466574c3339Jerome Glisse		return 16.0f;
4235da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_CAP_MAX_TEXTURE_LOD_BIAS:
4245da246944a787b933a509f0b65bab466574c3339Jerome Glisse		return 16.0f;
4255da246944a787b933a509f0b65bab466574c3339Jerome Glisse	default:
4265da246944a787b933a509f0b65bab466574c3339Jerome Glisse		return 0.0f;
4275da246944a787b933a509f0b65bab466574c3339Jerome Glisse	}
4285da246944a787b933a509f0b65bab466574c3339Jerome Glisse}
4295da246944a787b933a509f0b65bab466574c3339Jerome Glisse
4305da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic int noop_get_shader_param(struct pipe_screen* pscreen, unsigned shader, enum pipe_shader_cap param)
4315da246944a787b933a509f0b65bab466574c3339Jerome Glisse{
4325da246944a787b933a509f0b65bab466574c3339Jerome Glisse	switch(shader)
4335da246944a787b933a509f0b65bab466574c3339Jerome Glisse	{
4345da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_SHADER_FRAGMENT:
4355da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_SHADER_VERTEX:
4365da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_SHADER_GEOMETRY:
4375da246944a787b933a509f0b65bab466574c3339Jerome Glisse		break;
4385da246944a787b933a509f0b65bab466574c3339Jerome Glisse	default:
4395da246944a787b933a509f0b65bab466574c3339Jerome Glisse		return 0;
4405da246944a787b933a509f0b65bab466574c3339Jerome Glisse	}
4415da246944a787b933a509f0b65bab466574c3339Jerome Glisse
4425da246944a787b933a509f0b65bab466574c3339Jerome Glisse	switch (param) {
4435da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_SHADER_CAP_MAX_INSTRUCTIONS:
4445da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_SHADER_CAP_MAX_ALU_INSTRUCTIONS:
4455da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_SHADER_CAP_MAX_TEX_INSTRUCTIONS:
4465da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_SHADER_CAP_MAX_TEX_INDIRECTIONS:
4475da246944a787b933a509f0b65bab466574c3339Jerome Glisse		return 16384;
4485da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_SHADER_CAP_MAX_CONTROL_FLOW_DEPTH:
4495da246944a787b933a509f0b65bab466574c3339Jerome Glisse		return 8;
4505da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_SHADER_CAP_MAX_INPUTS:
4515da246944a787b933a509f0b65bab466574c3339Jerome Glisse		return 16;
4525da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_SHADER_CAP_MAX_TEMPS:
4535da246944a787b933a509f0b65bab466574c3339Jerome Glisse		return 256;
4545da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_SHADER_CAP_MAX_ADDRS:
4555da246944a787b933a509f0b65bab466574c3339Jerome Glisse		return 1;
4565da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_SHADER_CAP_MAX_CONSTS:
4575da246944a787b933a509f0b65bab466574c3339Jerome Glisse		return 256;
4585da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_SHADER_CAP_MAX_CONST_BUFFERS:
4595da246944a787b933a509f0b65bab466574c3339Jerome Glisse		return 1;
4605da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_SHADER_CAP_MAX_PREDS:
4615da246944a787b933a509f0b65bab466574c3339Jerome Glisse		return 0;
4625da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED:
4635da246944a787b933a509f0b65bab466574c3339Jerome Glisse		return 1;
4645da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR:
4655da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR:
4665da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR:
4675da246944a787b933a509f0b65bab466574c3339Jerome Glisse	case PIPE_SHADER_CAP_INDIRECT_CONST_ADDR:
4685da246944a787b933a509f0b65bab466574c3339Jerome Glisse		return 1;
4695da246944a787b933a509f0b65bab466574c3339Jerome Glisse	default:
4705da246944a787b933a509f0b65bab466574c3339Jerome Glisse		return 0;
4715da246944a787b933a509f0b65bab466574c3339Jerome Glisse	}
4725da246944a787b933a509f0b65bab466574c3339Jerome Glisse}
4735da246944a787b933a509f0b65bab466574c3339Jerome Glisse
4745da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic boolean noop_is_format_supported(struct pipe_screen* screen,
4755da246944a787b933a509f0b65bab466574c3339Jerome Glisse					enum pipe_format format,
4765da246944a787b933a509f0b65bab466574c3339Jerome Glisse					enum pipe_texture_target target,
4775da246944a787b933a509f0b65bab466574c3339Jerome Glisse					unsigned sample_count,
4785da246944a787b933a509f0b65bab466574c3339Jerome Glisse					unsigned usage,
4795da246944a787b933a509f0b65bab466574c3339Jerome Glisse					unsigned geom_flags)
4805da246944a787b933a509f0b65bab466574c3339Jerome Glisse{
4815da246944a787b933a509f0b65bab466574c3339Jerome Glisse	return true;
4825da246944a787b933a509f0b65bab466574c3339Jerome Glisse}
4835da246944a787b933a509f0b65bab466574c3339Jerome Glisse
4845da246944a787b933a509f0b65bab466574c3339Jerome Glissestatic void noop_destroy_screen(struct pipe_screen *screen)
4855da246944a787b933a509f0b65bab466574c3339Jerome Glisse{
4865da246944a787b933a509f0b65bab466574c3339Jerome Glisse	FREE(screen);
4875da246944a787b933a509f0b65bab466574c3339Jerome Glisse}
4885da246944a787b933a509f0b65bab466574c3339Jerome Glisse
4895da246944a787b933a509f0b65bab466574c3339Jerome Glissestruct pipe_screen *noop_screen_create(struct sw_winsys *winsys)
4905da246944a787b933a509f0b65bab466574c3339Jerome Glisse{
4915da246944a787b933a509f0b65bab466574c3339Jerome Glisse	struct pipe_screen *screen;
4925da246944a787b933a509f0b65bab466574c3339Jerome Glisse
4935da246944a787b933a509f0b65bab466574c3339Jerome Glisse	screen = CALLOC_STRUCT(pipe_screen);
4945da246944a787b933a509f0b65bab466574c3339Jerome Glisse	if (screen == NULL) {
4955da246944a787b933a509f0b65bab466574c3339Jerome Glisse		return NULL;
4965da246944a787b933a509f0b65bab466574c3339Jerome Glisse	}
4975da246944a787b933a509f0b65bab466574c3339Jerome Glisse
4985da246944a787b933a509f0b65bab466574c3339Jerome Glisse	screen->winsys = (struct pipe_winsys*)winsys;
4995da246944a787b933a509f0b65bab466574c3339Jerome Glisse	screen->destroy = noop_destroy_screen;
5005da246944a787b933a509f0b65bab466574c3339Jerome Glisse	screen->get_name = noop_get_name;
5015da246944a787b933a509f0b65bab466574c3339Jerome Glisse	screen->get_vendor = noop_get_vendor;
5025da246944a787b933a509f0b65bab466574c3339Jerome Glisse	screen->get_param = noop_get_param;
5035da246944a787b933a509f0b65bab466574c3339Jerome Glisse	screen->get_shader_param = noop_get_shader_param;
5045da246944a787b933a509f0b65bab466574c3339Jerome Glisse	screen->get_paramf = noop_get_paramf;
5055da246944a787b933a509f0b65bab466574c3339Jerome Glisse	screen->is_format_supported = noop_is_format_supported;
5065da246944a787b933a509f0b65bab466574c3339Jerome Glisse	screen->context_create = noop_create_context;
5075da246944a787b933a509f0b65bab466574c3339Jerome Glisse	screen->resource_create = noop_resource_create;
5085da246944a787b933a509f0b65bab466574c3339Jerome Glisse	screen->resource_from_handle = noop_resource_from_handle;
5095da246944a787b933a509f0b65bab466574c3339Jerome Glisse	screen->resource_get_handle = noop_resource_get_handle;
5105da246944a787b933a509f0b65bab466574c3339Jerome Glisse	screen->resource_destroy = noop_resource_destroy;
5115da246944a787b933a509f0b65bab466574c3339Jerome Glisse	screen->user_buffer_create = noop_user_buffer_create;
5125da246944a787b933a509f0b65bab466574c3339Jerome Glisse	screen->flush_frontbuffer = noop_flush_frontbuffer;
5135da246944a787b933a509f0b65bab466574c3339Jerome Glisse
5145da246944a787b933a509f0b65bab466574c3339Jerome Glisse	return screen;
5155da246944a787b933a509f0b65bab466574c3339Jerome Glisse}
516