| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952 |
- /**************************************************************************
- *
- * Copyright 2009 VMware, Inc.
- * All Rights Reserved.
- *
- * 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_context.h"
- #include "util/u_memory.h"
- #include "util/u_inlines.h"
-
- #include "id_context.h"
- #include "id_objects.h"
-
-
- static void
- identity_destroy(struct pipe_context *_pipe)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct pipe_context *pipe = id_pipe->pipe;
-
- pipe->destroy(pipe);
-
- FREE(id_pipe);
- }
-
- static void
- identity_draw_arrays(struct pipe_context *_pipe,
- unsigned prim,
- unsigned start,
- unsigned count)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct pipe_context *pipe = id_pipe->pipe;
-
- pipe->draw_arrays(pipe,
- prim,
- start,
- count);
- }
-
- static void
- identity_draw_elements(struct pipe_context *_pipe,
- struct pipe_resource *_indexResource,
- unsigned indexSize,
- int indexBias,
- unsigned prim,
- unsigned start,
- unsigned count)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct identity_resource *id_resource = identity_resource(_indexResource);
- struct pipe_context *pipe = id_pipe->pipe;
- struct pipe_resource *indexResource = id_resource->resource;
-
- pipe->draw_elements(pipe,
- indexResource,
- indexSize,
- indexBias,
- prim,
- start,
- count);
- }
-
- static void
- identity_draw_range_elements(struct pipe_context *_pipe,
- struct pipe_resource *_indexResource,
- unsigned indexSize,
- int indexBias,
- unsigned minIndex,
- unsigned maxIndex,
- unsigned mode,
- unsigned start,
- unsigned count)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct identity_resource *id_resource = identity_resource(_indexResource);
- struct pipe_context *pipe = id_pipe->pipe;
- struct pipe_resource *indexResource = id_resource->resource;
-
- pipe->draw_range_elements(pipe,
- indexResource,
- indexSize,
- indexBias,
- minIndex,
- maxIndex,
- mode,
- start,
- count);
- }
-
- static struct pipe_query *
- identity_create_query(struct pipe_context *_pipe,
- unsigned query_type)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct pipe_context *pipe = id_pipe->pipe;
-
- return pipe->create_query(pipe,
- query_type);
- }
-
- static void
- identity_destroy_query(struct pipe_context *_pipe,
- struct pipe_query *query)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct pipe_context *pipe = id_pipe->pipe;
-
- pipe->destroy_query(pipe,
- query);
- }
-
- static void
- identity_begin_query(struct pipe_context *_pipe,
- struct pipe_query *query)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct pipe_context *pipe = id_pipe->pipe;
-
- pipe->begin_query(pipe,
- query);
- }
-
- static void
- identity_end_query(struct pipe_context *_pipe,
- struct pipe_query *query)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct pipe_context *pipe = id_pipe->pipe;
-
- pipe->end_query(pipe,
- query);
- }
-
- static boolean
- identity_get_query_result(struct pipe_context *_pipe,
- struct pipe_query *query,
- boolean wait,
- void *result)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct pipe_context *pipe = id_pipe->pipe;
-
- return pipe->get_query_result(pipe,
- query,
- wait,
- result);
- }
-
- static void *
- identity_create_blend_state(struct pipe_context *_pipe,
- const struct pipe_blend_state *blend)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct pipe_context *pipe = id_pipe->pipe;
-
- return pipe->create_blend_state(pipe,
- blend);
- }
-
- static void
- identity_bind_blend_state(struct pipe_context *_pipe,
- void *blend)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct pipe_context *pipe = id_pipe->pipe;
-
- pipe->bind_blend_state(pipe,
- blend);
- }
-
- static void
- identity_delete_blend_state(struct pipe_context *_pipe,
- void *blend)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct pipe_context *pipe = id_pipe->pipe;
-
- pipe->delete_blend_state(pipe,
- blend);
- }
-
- static void *
- identity_create_sampler_state(struct pipe_context *_pipe,
- const struct pipe_sampler_state *sampler)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct pipe_context *pipe = id_pipe->pipe;
-
- return pipe->create_sampler_state(pipe,
- sampler);
- }
-
- static void
- identity_bind_fragment_sampler_states(struct pipe_context *_pipe,
- unsigned num_samplers,
- void **samplers)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct pipe_context *pipe = id_pipe->pipe;
-
- pipe->bind_fragment_sampler_states(pipe,
- num_samplers,
- samplers);
- }
-
- static void
- identity_bind_vertex_sampler_states(struct pipe_context *_pipe,
- unsigned num_samplers,
- void **samplers)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct pipe_context *pipe = id_pipe->pipe;
-
- pipe->bind_vertex_sampler_states(pipe,
- num_samplers,
- samplers);
- }
-
- static void
- identity_delete_sampler_state(struct pipe_context *_pipe,
- void *sampler)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct pipe_context *pipe = id_pipe->pipe;
-
- pipe->delete_sampler_state(pipe,
- sampler);
- }
-
- static void *
- identity_create_rasterizer_state(struct pipe_context *_pipe,
- const struct pipe_rasterizer_state *rasterizer)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct pipe_context *pipe = id_pipe->pipe;
-
- return pipe->create_rasterizer_state(pipe,
- rasterizer);
- }
-
- static void
- identity_bind_rasterizer_state(struct pipe_context *_pipe,
- void *rasterizer)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct pipe_context *pipe = id_pipe->pipe;
-
- pipe->bind_rasterizer_state(pipe,
- rasterizer);
- }
-
- static void
- identity_delete_rasterizer_state(struct pipe_context *_pipe,
- void *rasterizer)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct pipe_context *pipe = id_pipe->pipe;
-
- pipe->delete_rasterizer_state(pipe,
- rasterizer);
- }
-
- static void *
- identity_create_depth_stencil_alpha_state(struct pipe_context *_pipe,
- const struct pipe_depth_stencil_alpha_state *depth_stencil_alpha)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct pipe_context *pipe = id_pipe->pipe;
-
- return pipe->create_depth_stencil_alpha_state(pipe,
- depth_stencil_alpha);
- }
-
- static void
- identity_bind_depth_stencil_alpha_state(struct pipe_context *_pipe,
- void *depth_stencil_alpha)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct pipe_context *pipe = id_pipe->pipe;
-
- pipe->bind_depth_stencil_alpha_state(pipe,
- depth_stencil_alpha);
- }
-
- static void
- identity_delete_depth_stencil_alpha_state(struct pipe_context *_pipe,
- void *depth_stencil_alpha)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct pipe_context *pipe = id_pipe->pipe;
-
- pipe->delete_depth_stencil_alpha_state(pipe,
- depth_stencil_alpha);
- }
-
- static void *
- identity_create_fs_state(struct pipe_context *_pipe,
- const struct pipe_shader_state *fs)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct pipe_context *pipe = id_pipe->pipe;
-
- return pipe->create_fs_state(pipe,
- fs);
- }
-
- static void
- identity_bind_fs_state(struct pipe_context *_pipe,
- void *fs)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct pipe_context *pipe = id_pipe->pipe;
-
- pipe->bind_fs_state(pipe,
- fs);
- }
-
- static void
- identity_delete_fs_state(struct pipe_context *_pipe,
- void *fs)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct pipe_context *pipe = id_pipe->pipe;
-
- pipe->delete_fs_state(pipe,
- fs);
- }
-
- static void *
- identity_create_vs_state(struct pipe_context *_pipe,
- const struct pipe_shader_state *vs)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct pipe_context *pipe = id_pipe->pipe;
-
- return pipe->create_vs_state(pipe,
- vs);
- }
-
- static void
- identity_bind_vs_state(struct pipe_context *_pipe,
- void *vs)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct pipe_context *pipe = id_pipe->pipe;
-
- pipe->bind_vs_state(pipe,
- vs);
- }
-
- static void
- identity_delete_vs_state(struct pipe_context *_pipe,
- void *vs)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct pipe_context *pipe = id_pipe->pipe;
-
- pipe->delete_vs_state(pipe,
- vs);
- }
-
-
- static void *
- identity_create_vertex_elements_state(struct pipe_context *_pipe,
- unsigned num_elements,
- const struct pipe_vertex_element *vertex_elements)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct pipe_context *pipe = id_pipe->pipe;
-
- return pipe->create_vertex_elements_state(pipe,
- num_elements,
- vertex_elements);
- }
-
- static void
- identity_bind_vertex_elements_state(struct pipe_context *_pipe,
- void *velems)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct pipe_context *pipe = id_pipe->pipe;
-
- pipe->bind_vertex_elements_state(pipe,
- velems);
- }
-
- static void
- identity_delete_vertex_elements_state(struct pipe_context *_pipe,
- void *velems)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct pipe_context *pipe = id_pipe->pipe;
-
- pipe->delete_vertex_elements_state(pipe,
- velems);
- }
-
- static void
- identity_set_blend_color(struct pipe_context *_pipe,
- const struct pipe_blend_color *blend_color)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct pipe_context *pipe = id_pipe->pipe;
-
- pipe->set_blend_color(pipe,
- blend_color);
- }
-
- static void
- identity_set_stencil_ref(struct pipe_context *_pipe,
- const struct pipe_stencil_ref *stencil_ref)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct pipe_context *pipe = id_pipe->pipe;
-
- pipe->set_stencil_ref(pipe,
- stencil_ref);
- }
-
- static void
- identity_set_clip_state(struct pipe_context *_pipe,
- const struct pipe_clip_state *clip)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct pipe_context *pipe = id_pipe->pipe;
-
- pipe->set_clip_state(pipe,
- clip);
- }
-
- static void
- identity_set_sample_mask(struct pipe_context *_pipe,
- unsigned sample_mask)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct pipe_context *pipe = id_pipe->pipe;
-
- pipe->set_sample_mask(pipe,
- sample_mask);
- }
-
- static void
- identity_set_constant_buffer(struct pipe_context *_pipe,
- uint shader,
- uint index,
- struct pipe_resource *_resource)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct pipe_context *pipe = id_pipe->pipe;
- struct pipe_resource *unwrapped_resource;
- struct pipe_resource *resource = NULL;
-
- /* XXX hmm? unwrap the input state */
- if (_resource) {
- unwrapped_resource = identity_resource_unwrap(_resource);
- resource = unwrapped_resource;
- }
-
- pipe->set_constant_buffer(pipe,
- shader,
- index,
- resource);
- }
-
- static void
- identity_set_framebuffer_state(struct pipe_context *_pipe,
- const struct pipe_framebuffer_state *_state)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct pipe_context *pipe = id_pipe->pipe;
- struct pipe_framebuffer_state unwrapped_state;
- struct pipe_framebuffer_state *state = NULL;
- unsigned i;
-
- /* unwrap the input state */
- if (_state) {
- memcpy(&unwrapped_state, _state, sizeof(unwrapped_state));
- for(i = 0; i < _state->nr_cbufs; i++)
- unwrapped_state.cbufs[i] = identity_surface_unwrap(_state->cbufs[i]);
- for (; i < PIPE_MAX_COLOR_BUFS; i++)
- unwrapped_state.cbufs[i] = NULL;
- unwrapped_state.zsbuf = identity_surface_unwrap(_state->zsbuf);
- state = &unwrapped_state;
- }
-
- pipe->set_framebuffer_state(pipe,
- state);
- }
-
- static void
- identity_set_polygon_stipple(struct pipe_context *_pipe,
- const struct pipe_poly_stipple *poly_stipple)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct pipe_context *pipe = id_pipe->pipe;
-
- pipe->set_polygon_stipple(pipe,
- poly_stipple);
- }
-
- static void
- identity_set_scissor_state(struct pipe_context *_pipe,
- const struct pipe_scissor_state *scissor)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct pipe_context *pipe = id_pipe->pipe;
-
- pipe->set_scissor_state(pipe,
- scissor);
- }
-
- static void
- identity_set_viewport_state(struct pipe_context *_pipe,
- const struct pipe_viewport_state *viewport)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct pipe_context *pipe = id_pipe->pipe;
-
- pipe->set_viewport_state(pipe,
- viewport);
- }
-
- static void
- identity_set_fragment_sampler_views(struct pipe_context *_pipe,
- unsigned num,
- struct pipe_sampler_view **_views)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct pipe_context *pipe = id_pipe->pipe;
- struct pipe_sampler_view *unwrapped_views[PIPE_MAX_SAMPLERS];
- struct pipe_sampler_view **views = NULL;
- unsigned i;
-
- if (_views) {
- for (i = 0; i < num; i++)
- unwrapped_views[i] = identity_sampler_view_unwrap(_views[i]);
- for (; i < PIPE_MAX_SAMPLERS; i++)
- unwrapped_views[i] = NULL;
-
- views = unwrapped_views;
- }
-
- pipe->set_fragment_sampler_views(pipe, num, views);
- }
-
- static void
- identity_set_vertex_sampler_views(struct pipe_context *_pipe,
- unsigned num,
- struct pipe_sampler_view **_views)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct pipe_context *pipe = id_pipe->pipe;
- struct pipe_sampler_view *unwrapped_views[PIPE_MAX_VERTEX_SAMPLERS];
- struct pipe_sampler_view **views = NULL;
- unsigned i;
-
- if (_views) {
- for (i = 0; i < num; i++)
- unwrapped_views[i] = identity_sampler_view_unwrap(_views[i]);
- for (; i < PIPE_MAX_VERTEX_SAMPLERS; i++)
- unwrapped_views[i] = NULL;
-
- views = unwrapped_views;
- }
-
- pipe->set_vertex_sampler_views(pipe, num, views);
- }
-
- static void
- identity_set_vertex_buffers(struct pipe_context *_pipe,
- unsigned num_buffers,
- const struct pipe_vertex_buffer *_buffers)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct pipe_context *pipe = id_pipe->pipe;
- struct pipe_vertex_buffer unwrapped_buffers[PIPE_MAX_SHADER_INPUTS];
- struct pipe_vertex_buffer *buffers = NULL;
- unsigned i;
-
- if (num_buffers) {
- memcpy(unwrapped_buffers, _buffers, num_buffers * sizeof(*_buffers));
- for (i = 0; i < num_buffers; i++)
- unwrapped_buffers[i].buffer = identity_resource_unwrap(_buffers[i].buffer);
- buffers = unwrapped_buffers;
- }
-
- pipe->set_vertex_buffers(pipe,
- num_buffers,
- buffers);
- }
- static void
- identity_resource_copy_region(struct pipe_context *_pipe,
- 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)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct identity_resource *id_resource_dst = identity_resource(_dst);
- struct identity_resource *id_resource_src = identity_resource(_src);
- struct pipe_context *pipe = id_pipe->pipe;
- struct pipe_resource *dst = id_resource_dst->resource;
- struct pipe_resource *src = id_resource_src->resource;
-
- pipe->resource_copy_region(pipe,
- dst,
- subdst,
- dstx,
- dsty,
- dstz,
- src,
- subsrc,
- srcx,
- srcy,
- srcz,
- width,
- height);
- }
-
- static void
- identity_clear(struct pipe_context *_pipe,
- unsigned buffers,
- const float *rgba,
- double depth,
- unsigned stencil)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct pipe_context *pipe = id_pipe->pipe;
-
- pipe->clear(pipe,
- buffers,
- rgba,
- depth,
- stencil);
- }
-
- static void
- identity_clear_render_target(struct pipe_context *_pipe,
- struct pipe_surface *_dst,
- const float *rgba,
- unsigned dstx, unsigned dsty,
- unsigned width, unsigned height)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct identity_surface *id_surface_dst = identity_surface(_dst);
- struct pipe_context *pipe = id_pipe->pipe;
- struct pipe_surface *dst = id_surface_dst->surface;
-
- pipe->clear_render_target(pipe,
- dst,
- rgba,
- dstx,
- dsty,
- width,
- height);
- }
- static void
- identity_clear_depth_stencil(struct pipe_context *_pipe,
- struct pipe_surface *_dst,
- unsigned clear_flags,
- double depth,
- unsigned stencil,
- unsigned dstx, unsigned dsty,
- unsigned width, unsigned height)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct identity_surface *id_surface_dst = identity_surface(_dst);
- struct pipe_context *pipe = id_pipe->pipe;
- struct pipe_surface *dst = id_surface_dst->surface;
-
- pipe->clear_depth_stencil(pipe,
- dst,
- clear_flags,
- depth,
- stencil,
- dstx,
- dsty,
- width,
- height);
-
- }
-
- static void
- identity_flush(struct pipe_context *_pipe,
- unsigned flags,
- struct pipe_fence_handle **fence)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct pipe_context *pipe = id_pipe->pipe;
-
- pipe->flush(pipe,
- flags,
- fence);
- }
-
- static unsigned int
- identity_is_resource_referenced(struct pipe_context *_pipe,
- struct pipe_resource *_resource,
- unsigned face,
- unsigned level)
- {
- struct identity_context *id_pipe = identity_context(_pipe);
- struct identity_resource *id_resource = identity_resource(_resource);
- struct pipe_context *pipe = id_pipe->pipe;
- struct pipe_resource *resource = id_resource->resource;
-
- return pipe->is_resource_referenced(pipe,
- resource,
- face,
- level);
- }
-
- static struct pipe_sampler_view *
- identity_context_create_sampler_view(struct pipe_context *_pipe,
- struct pipe_resource *_resource,
- const struct pipe_sampler_view *templ)
- {
- struct identity_context *id_context = identity_context(_pipe);
- struct identity_resource *id_resource = identity_resource(_resource);
- struct pipe_context *pipe = id_context->pipe;
- struct pipe_resource *resource = id_resource->resource;
- struct pipe_sampler_view *result;
-
- result = pipe->create_sampler_view(pipe,
- resource,
- templ);
-
- if (result)
- return identity_sampler_view_create(id_context, id_resource, result);
- return NULL;
- }
-
- static void
- identity_context_sampler_view_destroy(struct pipe_context *_pipe,
- struct pipe_sampler_view *_view)
- {
- identity_sampler_view_destroy(identity_context(_pipe),
- identity_sampler_view(_view));
- }
-
- static struct pipe_transfer *
- identity_context_get_transfer(struct pipe_context *_context,
- struct pipe_resource *_resource,
- struct pipe_subresource sr,
- unsigned usage,
- const struct pipe_box *box)
- {
- struct identity_context *id_context = identity_context(_context);
- struct identity_resource *id_resource = identity_resource(_resource);
- struct pipe_context *context = id_context->pipe;
- struct pipe_resource *resource = id_resource->resource;
- struct pipe_transfer *result;
-
- result = context->get_transfer(context,
- resource,
- sr,
- usage,
- box);
-
- if (result)
- return identity_transfer_create(id_context, id_resource, result);
- return NULL;
- }
-
- static void
- identity_context_transfer_destroy(struct pipe_context *_pipe,
- struct pipe_transfer *_transfer)
- {
- identity_transfer_destroy(identity_context(_pipe),
- identity_transfer(_transfer));
- }
-
- static void *
- identity_context_transfer_map(struct pipe_context *_context,
- struct pipe_transfer *_transfer)
- {
- struct identity_context *id_context = identity_context(_context);
- struct identity_transfer *id_transfer = identity_transfer(_transfer);
- struct pipe_context *context = id_context->pipe;
- struct pipe_transfer *transfer = id_transfer->transfer;
-
- return context->transfer_map(context,
- transfer);
- }
-
-
-
- static void
- identity_context_transfer_flush_region(struct pipe_context *_context,
- struct pipe_transfer *_transfer,
- const struct pipe_box *box)
- {
- struct identity_context *id_context = identity_context(_context);
- struct identity_transfer *id_transfer = identity_transfer(_transfer);
- struct pipe_context *context = id_context->pipe;
- struct pipe_transfer *transfer = id_transfer->transfer;
-
- context->transfer_flush_region(context,
- transfer,
- box);
- }
-
-
- static void
- identity_context_transfer_unmap(struct pipe_context *_context,
- struct pipe_transfer *_transfer)
- {
- struct identity_context *id_context = identity_context(_context);
- struct identity_transfer *id_transfer = identity_transfer(_transfer);
- struct pipe_context *context = id_context->pipe;
- struct pipe_transfer *transfer = id_transfer->transfer;
-
- context->transfer_unmap(context,
- transfer);
- }
-
-
- static void
- identity_context_transfer_inline_write(struct pipe_context *_context,
- struct pipe_resource *_resource,
- struct pipe_subresource sr,
- unsigned usage,
- const struct pipe_box *box,
- const void *data,
- unsigned stride,
- unsigned slice_stride)
- {
- struct identity_context *id_context = identity_context(_context);
- struct identity_resource *id_resource = identity_resource(_resource);
- struct pipe_context *context = id_context->pipe;
- struct pipe_resource *resource = id_resource->resource;
-
- context->transfer_inline_write(context,
- resource,
- sr,
- usage,
- box,
- data,
- stride,
- slice_stride);
- }
-
-
- struct pipe_context *
- identity_context_create(struct pipe_screen *_screen, struct pipe_context *pipe)
- {
- struct identity_context *id_pipe;
- (void)identity_screen(_screen);
-
- id_pipe = CALLOC_STRUCT(identity_context);
- if (!id_pipe) {
- return NULL;
- }
-
- id_pipe->base.winsys = NULL;
- id_pipe->base.screen = _screen;
- id_pipe->base.priv = pipe->priv; /* expose wrapped data */
- id_pipe->base.draw = NULL;
-
- id_pipe->base.destroy = identity_destroy;
- id_pipe->base.draw_arrays = identity_draw_arrays;
- id_pipe->base.draw_elements = identity_draw_elements;
- id_pipe->base.draw_range_elements = identity_draw_range_elements;
- id_pipe->base.create_query = identity_create_query;
- id_pipe->base.destroy_query = identity_destroy_query;
- id_pipe->base.begin_query = identity_begin_query;
- id_pipe->base.end_query = identity_end_query;
- id_pipe->base.get_query_result = identity_get_query_result;
- id_pipe->base.create_blend_state = identity_create_blend_state;
- id_pipe->base.bind_blend_state = identity_bind_blend_state;
- id_pipe->base.delete_blend_state = identity_delete_blend_state;
- id_pipe->base.create_sampler_state = identity_create_sampler_state;
- id_pipe->base.bind_fragment_sampler_states = identity_bind_fragment_sampler_states;
- id_pipe->base.bind_vertex_sampler_states = identity_bind_vertex_sampler_states;
- id_pipe->base.delete_sampler_state = identity_delete_sampler_state;
- id_pipe->base.create_rasterizer_state = identity_create_rasterizer_state;
- id_pipe->base.bind_rasterizer_state = identity_bind_rasterizer_state;
- id_pipe->base.delete_rasterizer_state = identity_delete_rasterizer_state;
- id_pipe->base.create_depth_stencil_alpha_state = identity_create_depth_stencil_alpha_state;
- id_pipe->base.bind_depth_stencil_alpha_state = identity_bind_depth_stencil_alpha_state;
- id_pipe->base.delete_depth_stencil_alpha_state = identity_delete_depth_stencil_alpha_state;
- id_pipe->base.create_fs_state = identity_create_fs_state;
- id_pipe->base.bind_fs_state = identity_bind_fs_state;
- id_pipe->base.delete_fs_state = identity_delete_fs_state;
- id_pipe->base.create_vs_state = identity_create_vs_state;
- id_pipe->base.bind_vs_state = identity_bind_vs_state;
- id_pipe->base.delete_vs_state = identity_delete_vs_state;
- id_pipe->base.create_vertex_elements_state = identity_create_vertex_elements_state;
- id_pipe->base.bind_vertex_elements_state = identity_bind_vertex_elements_state;
- id_pipe->base.delete_vertex_elements_state = identity_delete_vertex_elements_state;
- id_pipe->base.set_blend_color = identity_set_blend_color;
- id_pipe->base.set_stencil_ref = identity_set_stencil_ref;
- id_pipe->base.set_clip_state = identity_set_clip_state;
- id_pipe->base.set_sample_mask = identity_set_sample_mask;
- id_pipe->base.set_constant_buffer = identity_set_constant_buffer;
- id_pipe->base.set_framebuffer_state = identity_set_framebuffer_state;
- id_pipe->base.set_polygon_stipple = identity_set_polygon_stipple;
- id_pipe->base.set_scissor_state = identity_set_scissor_state;
- id_pipe->base.set_viewport_state = identity_set_viewport_state;
- id_pipe->base.set_fragment_sampler_views = identity_set_fragment_sampler_views;
- id_pipe->base.set_vertex_sampler_views = identity_set_vertex_sampler_views;
- id_pipe->base.set_vertex_buffers = identity_set_vertex_buffers;
- id_pipe->base.resource_copy_region = identity_resource_copy_region;
- id_pipe->base.clear = identity_clear;
- id_pipe->base.clear_render_target = identity_clear_render_target;
- id_pipe->base.clear_depth_stencil = identity_clear_depth_stencil;
- id_pipe->base.flush = identity_flush;
- id_pipe->base.is_resource_referenced = identity_is_resource_referenced;
- id_pipe->base.create_sampler_view = identity_context_create_sampler_view;
- id_pipe->base.sampler_view_destroy = identity_context_sampler_view_destroy;
- id_pipe->base.get_transfer = identity_context_get_transfer;
- id_pipe->base.transfer_destroy = identity_context_transfer_destroy;
- id_pipe->base.transfer_map = identity_context_transfer_map;
- id_pipe->base.transfer_unmap = identity_context_transfer_unmap;
- id_pipe->base.transfer_flush_region = identity_context_transfer_flush_region;
- id_pipe->base.transfer_inline_write = identity_context_transfer_inline_write;
-
- id_pipe->pipe = pipe;
-
- return &id_pipe->base;
- }
|