gallium/noop: no operation gallium driver

This driver is a fake swdri driver that perform no operations
beside allocation gallium structure and buffer for upper layer
usage.

It's purpose is to help profiling core mesa/gallium without
having pipe driver overhead hidding hot spot of core code.

scons file are likely inadequate i am unfamiliar with this
build system.

To use it simply rename is to swrast_dri.so and properly set
LIBGL_DRIVERS_PATH env variable.

Signed-off-by: Jerome Glisse <jglisse@redhat.com>
This commit is contained in:
Jerome Glisse 2010-11-15 14:53:21 -05:00
parent 88850b3e4f
commit 5da246944a
9 changed files with 1002 additions and 0 deletions

View File

@ -1708,6 +1708,19 @@ if test "x$enable_gallium_swrast" = xyes || test "x$enable_gallium_swrast" = xau
fi
fi
dnl
dnl Gallium noop configuration
dnl
AC_ARG_ENABLE([gallium-noop],
[AS_HELP_STRING([--enable-gallium-noop],
[build gallium radeon @<:@default=disabled@:>@])],
[enable_gallium_noop="$enableval"],
[enable_gallium_noop=auto])
if test "x$enable_gallium_noop" = xyes; then
GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS noop"
GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS dri-noop"
fi
dnl prepend CORE_DIRS to SRC_DIRS
SRC_DIRS="$CORE_DIRS $SRC_DIRS"

View File

@ -0,0 +1,13 @@
# Meta-driver which combines whichever software rasterizers have been
# built into a single convenience library.
TOP = ../../../..
include $(TOP)/configs/current
LIBNAME = noop
C_SOURCES = \
noop_pipe.c \
noop_state.c
include ../../Makefile.template

View File

@ -0,0 +1,15 @@
#######################################################################
# SConscript for noop convenience library
Import('*')
env = env.Clone()
noop = env.ConvenienceLibrary(
target = 'noop',
source = [
'noop_pipe.c',
'noop_state.c'
]
) + extra
Export('noop')

View File

@ -0,0 +1,547 @@
/*
* Copyright 2010 Red Hat Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* on the rights to use, copy, modify, merge, publish, distribute, sub
* license, and/or sell copies of the Software, and to permit persons to whom
* the Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice (including the next
* paragraph) shall be included in all copies or substantial portions of the
* Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
* THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
* USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include <stdio.h>
#include <errno.h>
#include <pipe/p_defines.h>
#include <pipe/p_state.h>
#include <pipe/p_context.h>
#include <pipe/p_screen.h>
#include <util/u_memory.h>
#include <util/u_inlines.h>
#include <util/u_format.h>
#include "noop_public.h"
#include "state_tracker/sw_winsys.h"
void noop_init_state_functions(struct pipe_context *ctx);
/*
* query
*/
struct noop_query {
unsigned query;
};
static struct pipe_query *noop_create_query(struct pipe_context *ctx, unsigned query_type)
{
struct noop_query *query = CALLOC_STRUCT(noop_query);
return (struct pipe_query *)query;
}
static void noop_destroy_query(struct pipe_context *ctx, struct pipe_query *query)
{
FREE(query);
}
static void noop_begin_query(struct pipe_context *ctx, struct pipe_query *query)
{
}
static void noop_end_query(struct pipe_context *ctx, struct pipe_query *query)
{
}
static boolean noop_get_query_result(struct pipe_context *ctx,
struct pipe_query *query,
boolean wait, void *vresult)
{
uint64_t *result = (uint64_t*)vresult;
*result = 0;
return TRUE;
}
/*
* resource
*/
struct noop_resource {
struct pipe_resource base;
unsigned size;
char *data;
struct sw_displaytarget *dt;
};
static unsigned noop_is_resource_referenced(struct pipe_context *pipe,
struct pipe_resource *resource,
unsigned face, unsigned level)
{
return PIPE_UNREFERENCED;
}
static struct pipe_resource *noop_resource_create(struct pipe_screen *screen,
const struct pipe_resource *templ)
{
struct noop_resource *nresource;
unsigned stride;
nresource = CALLOC_STRUCT(noop_resource);
if (nresource == NULL)
return NULL;
stride = util_format_get_stride(templ->format, templ->width0);
nresource->base = *templ;
nresource->base.screen = screen;
nresource->size = stride * templ->height0 * templ->depth0;
nresource->data = malloc(nresource->size);
pipe_reference_init(&nresource->base.reference, 1);
if (nresource->data == NULL) {
FREE(nresource);
return NULL;
}
#if 0
if (nresource->base.bind & (PIPE_BIND_DISPLAY_TARGET |
PIPE_BIND_SCANOUT |
PIPE_BIND_SHARED)) {
struct sw_winsys *winsys = (struct sw_winsys *)screen->winsys;
unsigned stride;
nresource->dt = winsys->displaytarget_create(winsys, nresource->base.bind,
nresource->base.format,
nresource->base.width0,
nresource->base.height0,
16, &stride);
}
#endif
return &nresource->base;
}
static struct pipe_resource *noop_resource_from_handle(struct pipe_screen * screen,
const struct pipe_resource *templ,
struct winsys_handle *whandle)
{
struct sw_winsys *winsys = (struct sw_winsys *)screen->winsys;
struct noop_resource *nresource;
struct sw_displaytarget *dt;
unsigned stride;
dt = winsys->displaytarget_from_handle(winsys, templ, whandle, &stride);
if (dt == NULL) {
return NULL;
}
nresource = (struct noop_resource *)noop_resource_create(screen, templ);
nresource->dt = dt;
return &nresource->base;
}
static boolean noop_resource_get_handle(struct pipe_screen *screen,
struct pipe_resource *resource,
struct winsys_handle *handle)
{
struct sw_winsys *winsys = (struct sw_winsys *)screen->winsys;
struct noop_resource *nresource = (struct noop_resource *)resource;
if (nresource->dt == NULL)
return FALSE;
return winsys->displaytarget_get_handle(winsys, nresource->dt, handle);
}
static void noop_resource_destroy(struct pipe_screen *screen,
struct pipe_resource *resource)
{
struct noop_resource *nresource = (struct noop_resource *)resource;
if (nresource->dt) {
/* display target */
struct sw_winsys *winsys = (struct sw_winsys *)screen->winsys;
winsys->displaytarget_destroy(winsys, nresource->dt);
}
free(nresource->data);
FREE(resource);
}
static struct pipe_resource *noop_user_buffer_create(struct pipe_screen *screen,
void *ptr, unsigned bytes,
unsigned bind)
{
struct pipe_resource templ;
templ.target = PIPE_BUFFER;
templ.format = PIPE_FORMAT_R8_UNORM;
templ.usage = PIPE_USAGE_IMMUTABLE;
templ.bind = bind;
templ.width0 = bytes;
templ.height0 = 1;
templ.depth0 = 1;
templ.flags = 0;
return noop_resource_create(screen, &templ);
}
/*
* transfer
*/
static struct pipe_transfer *noop_get_transfer(struct pipe_context *context,
struct pipe_resource *resource,
struct pipe_subresource sr,
enum pipe_transfer_usage usage,
const struct pipe_box *box)
{
struct pipe_transfer *transfer;
transfer = CALLOC_STRUCT(pipe_transfer);
if (transfer == NULL)
return NULL;
pipe_resource_reference(&transfer->resource, resource);
transfer->sr = sr;
transfer->usage = usage;
transfer->box = *box;
transfer->stride = 1;
transfer->slice_stride = 1;
return transfer;
}
static void *noop_transfer_map(struct pipe_context *pipe,
struct pipe_transfer *transfer)
{
struct noop_resource *nresource = (struct noop_resource *)transfer->resource;
return nresource->data;
}
static void noop_transfer_flush_region(struct pipe_context *pipe,
struct pipe_transfer *transfer,
const struct pipe_box *box)
{
}
static void noop_transfer_unmap(struct pipe_context *pipe,
struct pipe_transfer *transfer)
{
}
static void noop_transfer_destroy(struct pipe_context *pipe,
struct pipe_transfer *transfer)
{
pipe_resource_reference(&transfer->resource, NULL);
FREE(transfer);
}
static void noop_transfer_inline_write(struct pipe_context *pipe,
struct pipe_resource *resource,
struct pipe_subresource sr,
unsigned usage,
const struct pipe_box *box,
const void *data,
unsigned stride,
unsigned slice_stride)
{
}
/*
* clear/copy
*/
static void noop_clear(struct pipe_context *ctx, unsigned buffers,
const float *rgba, double depth, unsigned stencil)
{
}
static void noop_clear_render_target(struct pipe_context *ctx,
struct pipe_surface *dst,
const float *rgba,
unsigned dstx, unsigned dsty,
unsigned width, unsigned height)
{
}
static void noop_clear_depth_stencil(struct pipe_context *ctx,
struct pipe_surface *dst,
unsigned clear_flags,
double depth,
unsigned stencil,
unsigned dstx, unsigned dsty,
unsigned width, unsigned height)
{
}
static void noop_resource_copy_region(struct pipe_context *ctx,
struct pipe_resource *dst,
struct pipe_subresource subdst,
unsigned dstx, unsigned dsty, unsigned dstz,
struct pipe_resource *src,
struct pipe_subresource subsrc,
unsigned srcx, unsigned srcy, unsigned srcz,
unsigned width, unsigned height)
{
}
/*
* context
*/
static void noop_flush(struct pipe_context *ctx, unsigned flags,
struct pipe_fence_handle **fence)
{
}
static void noop_destroy_context(struct pipe_context *ctx)
{
FREE(ctx);
}
static struct pipe_context *noop_create_context(struct pipe_screen *screen, void *priv)
{
struct pipe_context *ctx = CALLOC_STRUCT(pipe_context);
if (ctx == NULL)
return NULL;
ctx->winsys = screen->winsys;
ctx->screen = screen;
ctx->priv = priv;
ctx->destroy = noop_destroy_context;
ctx->flush = noop_flush;
ctx->clear = noop_clear;
ctx->clear_render_target = noop_clear_render_target;
ctx->clear_depth_stencil = noop_clear_depth_stencil;
ctx->resource_copy_region = noop_resource_copy_region;
ctx->create_query = noop_create_query;
ctx->destroy_query = noop_destroy_query;
ctx->begin_query = noop_begin_query;
ctx->end_query = noop_end_query;
ctx->get_query_result = noop_get_query_result;
ctx->get_transfer = noop_get_transfer;
ctx->transfer_map = noop_transfer_map;
ctx->transfer_flush_region = noop_transfer_flush_region;
ctx->transfer_unmap = noop_transfer_unmap;
ctx->transfer_destroy = noop_transfer_destroy;
ctx->transfer_inline_write = noop_transfer_inline_write;
ctx->is_resource_referenced = noop_is_resource_referenced;
noop_init_state_functions(ctx);
return ctx;
}
/*
* texture
*/
static struct pipe_surface *noop_get_tex_surface(struct pipe_screen *screen,
struct pipe_resource *texture,
unsigned face, unsigned level,
unsigned zslice, unsigned flags)
{
struct pipe_surface *surface = CALLOC_STRUCT(pipe_surface);
if (surface == NULL)
return NULL;
pipe_reference_init(&surface->reference, 1);
pipe_resource_reference(&surface->texture, texture);
surface->format = texture->format;
surface->width = texture->width0;
surface->height = texture->height0;
surface->offset = 0;
surface->usage = flags;
surface->zslice = zslice;
surface->texture = texture;
surface->face = face;
surface->level = level;
return surface;
}
static void noop_tex_surface_destroy(struct pipe_surface *surface)
{
pipe_resource_reference(&surface->texture, NULL);
FREE(surface);
}
/*
* pipe_screen
*/
static void noop_flush_frontbuffer(struct pipe_screen *_screen,
struct pipe_surface *surface,
void *context_private)
{
}
static const char *noop_get_vendor(struct pipe_screen* pscreen)
{
return "X.Org";
}
static const char *noop_get_name(struct pipe_screen* pscreen)
{
return "NOOP";
}
static int noop_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
{
switch (param) {
/* Supported features (boolean caps). */
case PIPE_CAP_NPOT_TEXTURES:
case PIPE_CAP_TWO_SIDED_STENCIL:
case PIPE_CAP_GLSL:
case PIPE_CAP_DUAL_SOURCE_BLEND:
case PIPE_CAP_ANISOTROPIC_FILTER:
case PIPE_CAP_POINT_SPRITE:
case PIPE_CAP_OCCLUSION_QUERY:
case PIPE_CAP_TEXTURE_SHADOW_MAP:
case PIPE_CAP_TEXTURE_MIRROR_CLAMP:
case PIPE_CAP_TEXTURE_MIRROR_REPEAT:
case PIPE_CAP_BLEND_EQUATION_SEPARATE:
case PIPE_CAP_SM3:
case PIPE_CAP_TEXTURE_SWIZZLE:
case PIPE_CAP_INDEP_BLEND_ENABLE:
case PIPE_CAP_DEPTHSTENCIL_CLEAR_SEPARATE:
case PIPE_CAP_DEPTH_CLAMP:
case PIPE_CAP_SHADER_STENCIL_EXPORT:
case PIPE_CAP_TIMER_QUERY:
case PIPE_CAP_STREAM_OUTPUT:
case PIPE_CAP_PRIMITIVE_RESTART:
case PIPE_CAP_INDEP_BLEND_FUNC:
return 0;
/* Texturing. */
case PIPE_CAP_MAX_TEXTURE_2D_LEVELS:
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
return 14;
case PIPE_CAP_MAX_VERTEX_TEXTURE_UNITS:
return 16;
case PIPE_CAP_MAX_TEXTURE_IMAGE_UNITS:
case PIPE_CAP_MAX_COMBINED_SAMPLERS:
return 16;
/* Render targets. */
case PIPE_CAP_MAX_RENDER_TARGETS:
return 8;
/* Fragment coordinate conventions. */
case PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT:
case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER:
return 1;
case PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT:
case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER:
return 0;
default:
return 0;
}
}
static float noop_get_paramf(struct pipe_screen* pscreen, enum pipe_cap param)
{
switch (param) {
case PIPE_CAP_MAX_LINE_WIDTH:
case PIPE_CAP_MAX_LINE_WIDTH_AA:
case PIPE_CAP_MAX_POINT_WIDTH:
case PIPE_CAP_MAX_POINT_WIDTH_AA:
return 8192.0f;
case PIPE_CAP_MAX_TEXTURE_ANISOTROPY:
return 16.0f;
case PIPE_CAP_MAX_TEXTURE_LOD_BIAS:
return 16.0f;
default:
return 0.0f;
}
}
static int noop_get_shader_param(struct pipe_screen* pscreen, unsigned shader, enum pipe_shader_cap param)
{
switch(shader)
{
case PIPE_SHADER_FRAGMENT:
case PIPE_SHADER_VERTEX:
case PIPE_SHADER_GEOMETRY:
break;
default:
return 0;
}
switch (param) {
case PIPE_SHADER_CAP_MAX_INSTRUCTIONS:
case PIPE_SHADER_CAP_MAX_ALU_INSTRUCTIONS:
case PIPE_SHADER_CAP_MAX_TEX_INSTRUCTIONS:
case PIPE_SHADER_CAP_MAX_TEX_INDIRECTIONS:
return 16384;
case PIPE_SHADER_CAP_MAX_CONTROL_FLOW_DEPTH:
return 8;
case PIPE_SHADER_CAP_MAX_INPUTS:
return 16;
case PIPE_SHADER_CAP_MAX_TEMPS:
return 256;
case PIPE_SHADER_CAP_MAX_ADDRS:
return 1;
case PIPE_SHADER_CAP_MAX_CONSTS:
return 256;
case PIPE_SHADER_CAP_MAX_CONST_BUFFERS:
return 1;
case PIPE_SHADER_CAP_MAX_PREDS:
return 0;
case PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED:
return 1;
case PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR:
case PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR:
case PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR:
case PIPE_SHADER_CAP_INDIRECT_CONST_ADDR:
return 1;
default:
return 0;
}
}
static boolean noop_is_format_supported(struct pipe_screen* screen,
enum pipe_format format,
enum pipe_texture_target target,
unsigned sample_count,
unsigned usage,
unsigned geom_flags)
{
return true;
}
static void noop_destroy_screen(struct pipe_screen *screen)
{
FREE(screen);
}
struct pipe_screen *noop_screen_create(struct sw_winsys *winsys)
{
struct pipe_screen *screen;
screen = CALLOC_STRUCT(pipe_screen);
if (screen == NULL) {
return NULL;
}
screen->winsys = (struct pipe_winsys*)winsys;
screen->destroy = noop_destroy_screen;
screen->get_name = noop_get_name;
screen->get_vendor = noop_get_vendor;
screen->get_param = noop_get_param;
screen->get_shader_param = noop_get_shader_param;
screen->get_paramf = noop_get_paramf;
screen->is_format_supported = noop_is_format_supported;
screen->context_create = noop_create_context;
screen->get_tex_surface = noop_get_tex_surface;
screen->tex_surface_destroy = noop_tex_surface_destroy;
screen->resource_create = noop_resource_create;
screen->resource_from_handle = noop_resource_from_handle;
screen->resource_get_handle = noop_resource_get_handle;
screen->resource_destroy = noop_resource_destroy;
screen->user_buffer_create = noop_user_buffer_create;
screen->flush_frontbuffer = noop_flush_frontbuffer;
return screen;
}

View File

@ -0,0 +1,30 @@
/*
* Copyright 2010 Red Hat Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* on the rights to use, copy, modify, merge, publish, distribute, sub
* license, and/or sell copies of the Software, and to permit persons to whom
* the Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice (including the next
* paragraph) shall be included in all copies or substantial portions of the
* Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
* THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
* USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef NOOP_PUBLIC_H
#define NOOP_PUBLIC_H
struct sw_winsys;
struct pipe_screen *noop_screen_create(struct sw_winsys *winsys);
#endif

View File

@ -0,0 +1,256 @@
/*
* Copyright 2010 Red Hat Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* on the rights to use, copy, modify, merge, publish, distribute, sub
* license, and/or sell copies of the Software, and to permit persons to whom
* the Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice (including the next
* paragraph) shall be included in all copies or substantial portions of the
* Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
* THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
* USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include <stdio.h>
#include <errno.h>
#include <pipe/p_defines.h>
#include <pipe/p_state.h>
#include <pipe/p_context.h>
#include <pipe/p_screen.h>
#include <util/u_memory.h>
#include <util/u_inlines.h>
static void noop_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info *info)
{
}
static void noop_set_blend_color(struct pipe_context *ctx,
const struct pipe_blend_color *state)
{
}
static void *noop_create_blend_state(struct pipe_context *ctx,
const struct pipe_blend_state *state)
{
struct pipe_blend_state *nstate = CALLOC_STRUCT(pipe_blend_state);
if (nstate == NULL) {
return NULL;
}
*nstate = *state;
return nstate;
}
static void *noop_create_dsa_state(struct pipe_context *ctx,
const struct pipe_depth_stencil_alpha_state *state)
{
struct pipe_depth_stencil_alpha_state *nstate = CALLOC_STRUCT(pipe_depth_stencil_alpha_state);
if (nstate == NULL) {
return NULL;
}
*nstate = *state;
return nstate;
}
static void *noop_create_rs_state(struct pipe_context *ctx,
const struct pipe_rasterizer_state *state)
{
struct pipe_rasterizer_state *nstate = CALLOC_STRUCT(pipe_rasterizer_state);
if (nstate == NULL) {
return NULL;
}
*nstate = *state;
return nstate;
}
static void *noop_create_sampler_state(struct pipe_context *ctx,
const struct pipe_sampler_state *state)
{
struct pipe_sampler_state *nstate = CALLOC_STRUCT(pipe_sampler_state);
if (nstate == NULL) {
return NULL;
}
*nstate = *state;
return nstate;
}
static struct pipe_sampler_view *noop_create_sampler_view(struct pipe_context *ctx,
struct pipe_resource *texture,
const struct pipe_sampler_view *state)
{
struct pipe_sampler_view *sampler_view = CALLOC_STRUCT(pipe_sampler_view);
if (sampler_view == NULL)
return NULL;
/* initialize base object */
pipe_resource_reference(&sampler_view->texture, texture);
pipe_reference_init(&sampler_view->reference, 1);
sampler_view->context = ctx;
return sampler_view;
}
static void noop_set_vs_sampler_view(struct pipe_context *ctx, unsigned count,
struct pipe_sampler_view **views)
{
}
static void noop_set_ps_sampler_view(struct pipe_context *ctx, unsigned count,
struct pipe_sampler_view **views)
{
}
static void noop_bind_sampler(struct pipe_context *ctx, unsigned count, void **states)
{
}
static void noop_set_clip_state(struct pipe_context *ctx,
const struct pipe_clip_state *state)
{
}
static void noop_set_polygon_stipple(struct pipe_context *ctx,
const struct pipe_poly_stipple *state)
{
}
static void noop_set_sample_mask(struct pipe_context *pipe, unsigned sample_mask)
{
}
static void noop_set_scissor_state(struct pipe_context *ctx,
const struct pipe_scissor_state *state)
{
}
static void noop_set_stencil_ref(struct pipe_context *ctx,
const struct pipe_stencil_ref *state)
{
}
static void noop_set_viewport_state(struct pipe_context *ctx,
const struct pipe_viewport_state *state)
{
}
static void noop_set_framebuffer_state(struct pipe_context *ctx,
const struct pipe_framebuffer_state *state)
{
}
static void noop_set_constant_buffer(struct pipe_context *ctx,
uint shader, uint index,
struct pipe_resource *buffer)
{
}
static void noop_sampler_view_destroy(struct pipe_context *ctx,
struct pipe_sampler_view *state)
{
pipe_resource_reference(&state->texture, NULL);
FREE(state);
}
static void noop_bind_state(struct pipe_context *ctx, void *state)
{
}
static void noop_delete_state(struct pipe_context *ctx, void *state)
{
FREE(state);
}
static void noop_delete_vertex_element(struct pipe_context *ctx, void *state)
{
FREE(state);
}
static void noop_set_index_buffer(struct pipe_context *ctx,
const struct pipe_index_buffer *ib)
{
}
static void noop_set_vertex_buffers(struct pipe_context *ctx, unsigned count,
const struct pipe_vertex_buffer *buffers)
{
}
static void *noop_create_vertex_elements(struct pipe_context *ctx,
unsigned count,
const struct pipe_vertex_element *state)
{
struct pipe_vertex_element *nstate = CALLOC_STRUCT(pipe_vertex_element);
if (nstate == NULL) {
return NULL;
}
*nstate = *state;
return nstate;
}
static void *noop_create_shader_state(struct pipe_context *ctx,
const struct pipe_shader_state *state)
{
struct pipe_shader_state *nstate = CALLOC_STRUCT(pipe_shader_state);
if (nstate == NULL) {
return NULL;
}
*nstate = *state;
return nstate;
}
void noop_init_state_functions(struct pipe_context *ctx)
{
ctx->create_blend_state = noop_create_blend_state;
ctx->create_depth_stencil_alpha_state = noop_create_dsa_state;
ctx->create_fs_state = noop_create_shader_state;
ctx->create_rasterizer_state = noop_create_rs_state;
ctx->create_sampler_state = noop_create_sampler_state;
ctx->create_sampler_view = noop_create_sampler_view;
ctx->create_vertex_elements_state = noop_create_vertex_elements;
ctx->create_vs_state = noop_create_shader_state;
ctx->bind_blend_state = noop_bind_state;
ctx->bind_depth_stencil_alpha_state = noop_bind_state;
ctx->bind_fragment_sampler_states = noop_bind_sampler;
ctx->bind_fs_state = noop_bind_state;
ctx->bind_rasterizer_state = noop_bind_state;
ctx->bind_vertex_elements_state = noop_bind_state;
ctx->bind_vertex_sampler_states = noop_bind_sampler;
ctx->bind_vs_state = noop_bind_state;
ctx->delete_blend_state = noop_delete_state;
ctx->delete_depth_stencil_alpha_state = noop_delete_state;
ctx->delete_fs_state = noop_delete_state;
ctx->delete_rasterizer_state = noop_delete_state;
ctx->delete_sampler_state = noop_delete_state;
ctx->delete_vertex_elements_state = noop_delete_vertex_element;
ctx->delete_vs_state = noop_delete_state;
ctx->set_blend_color = noop_set_blend_color;
ctx->set_clip_state = noop_set_clip_state;
ctx->set_constant_buffer = noop_set_constant_buffer;
ctx->set_fragment_sampler_views = noop_set_ps_sampler_view;
ctx->set_framebuffer_state = noop_set_framebuffer_state;
ctx->set_polygon_stipple = noop_set_polygon_stipple;
ctx->set_sample_mask = noop_set_sample_mask;
ctx->set_scissor_state = noop_set_scissor_state;
ctx->set_stencil_ref = noop_set_stencil_ref;
ctx->set_vertex_buffers = noop_set_vertex_buffers;
ctx->set_index_buffer = noop_set_index_buffer;
ctx->set_vertex_sampler_views = noop_set_vs_sampler_view;
ctx->set_viewport_state = noop_set_viewport_state;
ctx->sampler_view_destroy = noop_sampler_view_destroy;
ctx->draw_vbo = noop_draw_vbo;
}

View File

@ -0,0 +1,34 @@
TOP = ../../../..
include $(TOP)/configs/current
LIBNAME = noop_dri.so
DRIVER_DEFINES = \
-D__NOT_HAVE_DRM_H
PIPE_DRIVERS = \
$(TOP)/src/gallium/state_trackers/dri/sw/libdrisw.a \
$(TOP)/src/gallium/winsys/sw/dri/libswdri.a \
$(TOP)/src/gallium/drivers/softpipe/libsoftpipe.a \
$(TOP)/src/gallium/drivers/trace/libtrace.a \
$(TOP)/src/gallium/drivers/rbug/librbug.a \
$(TOP)/src/gallium/drivers/noop/libnoop.a
SWRAST_COMMON_GALLIUM_SOURCES = \
$(TOP)/src/mesa/drivers/dri/common/utils.c \
$(TOP)/src/mesa/drivers/dri/common/drisw_util.c \
$(TOP)/src/mesa/drivers/dri/common/xmlconfig.c
C_SOURCES = \
swrast_drm_api.c \
$(SWRAST_COMMON_GALLIUM_SOURCES) \
$(DRIVER_SOURCES)
ASM_SOURCES =
include ../Makefile.dri
INCLUDES += \
-I$(TOP)/src/gallium/winsys/sw/dri
symlinks:

View File

@ -0,0 +1,31 @@
Import('*')
env = drienv.Clone()
env.Append(CPPPATH = [
'#/src/gallium/winsys/sw/dri',
])
env.Prepend(LIBS = [
st_drisw,
ws_dri,
noop,
mesa,
glsl,
gallium,
COMMON_DRI_SW_OBJECTS
])
env.Prepend(LIBS = [noop])
swrastg_sources = [
'swrast_drm_api.c'
]
module = env.LoadableModule(
target ='noop_dri.so',
source = swrastg_sources,
SHLIBPREFIX = '',
)
env.Alias('dri-noop', module)

View File

@ -0,0 +1,63 @@
/**************************************************************************
*
* Copyright 2009, VMware, Inc.
* All Rights Reserved.
* Copyright 2010 George Sapountzis <gsapountzis@gmail.com>
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sub license, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice (including the
* next paragraph) shall be included in all copies or substantial portions
* of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
* IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
* ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
**************************************************************************/
#include "pipe/p_compiler.h"
#include "util/u_memory.h"
#include "dri_sw_winsys.h"
#include "noop/noop_public.h"
#include "target-helpers/inline_debug_helper.h"
#include "target-helpers/inline_sw_helper.h"
struct pipe_screen *
drisw_create_screen(struct drisw_loader_funcs *lf)
{
struct sw_winsys *winsys = NULL;
struct pipe_screen *screen = NULL;
winsys = dri_create_sw_winsys(lf);
if (winsys == NULL)
return NULL;
screen = noop_screen_create(winsys);
if (!screen)
goto fail;
screen = debug_screen_wrap(screen);
return screen;
fail:
if (winsys)
winsys->destroy(winsys);
return NULL;
}
/* vim: set sw=3 ts=8 sts=3 expandtab: */