diff options
Diffstat (limited to 'src/gallium/state_trackers/python/p_context.i')
-rw-r--r-- | src/gallium/state_trackers/python/p_context.i | 756 |
1 files changed, 0 insertions, 756 deletions
diff --git a/src/gallium/state_trackers/python/p_context.i b/src/gallium/state_trackers/python/p_context.i deleted file mode 100644 index 17d25ad..0000000 --- a/src/gallium/state_trackers/python/p_context.i +++ /dev/null @@ -1,756 +0,0 @@ - /************************************************************************** - * - * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. - * 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 TUNGSTEN GRAPHICS 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. - * - **************************************************************************/ - -/** - * @file - * SWIG interface definion for Gallium types. - * - * @author Jose Fonseca <jrfonseca@tungstengraphics.com> - */ - -%nodefaultctor st_context; -%nodefaultdtor st_context; - -struct st_context { -}; - -%extend st_context { - - ~st_context() { - st_context_destroy($self); - } - - /* - * State functions (create/bind/destroy state objects) - */ - - void set_blend( const struct pipe_blend_state *state ) { - cso_set_blend($self->cso, state); - } - - void set_fragment_sampler( unsigned index, const struct pipe_sampler_state *state ) { - cso_single_sampler($self->cso, index, state); - cso_single_sampler_done($self->cso); - } - - void set_vertex_sampler( unsigned index, const struct pipe_sampler_state *state ) { - cso_single_vertex_sampler($self->cso, index, state); - cso_single_vertex_sampler_done($self->cso); - } - - void set_rasterizer( const struct pipe_rasterizer_state *state ) { - cso_set_rasterizer($self->cso, state); - } - - void set_depth_stencil_alpha(const struct pipe_depth_stencil_alpha_state *state) { - cso_set_depth_stencil_alpha($self->cso, state); - } - - void set_fragment_shader( const struct pipe_shader_state *state ) { - void *fs; - - if(!state) { - cso_set_fragment_shader_handle($self->cso, NULL); - return; - } - - fs = $self->pipe->create_fs_state($self->pipe, state); - if(!fs) - return; - - if(cso_set_fragment_shader_handle($self->cso, fs) != PIPE_OK) - return; - - cso_delete_fragment_shader($self->cso, $self->fs); - $self->fs = fs; - } - - void set_vertex_shader( const struct pipe_shader_state *state ) { - void *vs; - - if(!state) { - cso_set_vertex_shader_handle($self->cso, NULL); - return; - } - - vs = $self->pipe->create_vs_state($self->pipe, state); - if(!vs) - return; - - if(cso_set_vertex_shader_handle($self->cso, vs) != PIPE_OK) - return; - - cso_delete_vertex_shader($self->cso, $self->vs); - $self->vs = vs; - } - - void set_geometry_shader( const struct pipe_shader_state *state ) { - void *gs; - - if(!state) { - cso_set_geometry_shader_handle($self->cso, NULL); - return; - } - - gs = $self->pipe->create_gs_state($self->pipe, state); - if(!gs) - return; - - if(cso_set_geometry_shader_handle($self->cso, gs) != PIPE_OK) - return; - - cso_delete_geometry_shader($self->cso, $self->gs); - $self->gs = gs; - } - - struct pipe_sampler_view * - create_sampler_view(struct pipe_resource *texture, - enum pipe_format format = PIPE_FORMAT_NONE, - unsigned first_level = 0, - unsigned last_level = ~0, - unsigned first_layer = 0, - unsigned last_layer = ~0, - unsigned swizzle_r = 0, - unsigned swizzle_g = 1, - unsigned swizzle_b = 2, - unsigned swizzle_a = 3) - { - struct pipe_context *pipe = $self->pipe; - struct pipe_sampler_view templat; - - memset(&templat, 0, sizeof templat); - if (format == PIPE_FORMAT_NONE) { - templat.format = texture->format; - } else { - templat.format = format; - } - templat.u.tex.last_level = MIN2(last_level, texture->last_level); - templat.u.tex.first_level = first_level; - templat.u.tex.first_layer = first_layer; - templat.u.tex.last_layer = last_layer; - templat.swizzle_r = swizzle_r; - templat.swizzle_g = swizzle_g; - templat.swizzle_b = swizzle_b; - templat.swizzle_a = swizzle_a; - - return pipe->create_sampler_view(pipe, texture, &templat); - } - - void - sampler_view_destroy(struct pipe_context *ctx, - struct pipe_sampler_view *view) - { - struct pipe_context *pipe = $self->pipe; - - pipe->sampler_view_destroy(pipe, view); - } - - /* - * Parameter-like state (or properties) - */ - - void set_blend_color(const struct pipe_blend_color *state ) { - cso_set_blend_color($self->cso, state); - } - - void set_stencil_ref(const struct pipe_stencil_ref *state ) { - cso_set_stencil_ref($self->cso, state); - } - - void set_clip(const struct pipe_clip_state *state ) { - $self->pipe->set_clip_state($self->pipe, state); - } - - void set_constant_buffer(unsigned shader, unsigned index, - struct pipe_resource *buffer ) - { - $self->pipe->set_constant_buffer($self->pipe, shader, index, buffer); - } - - void set_framebuffer(const struct pipe_framebuffer_state *state ) - { - memcpy(&$self->framebuffer, state, sizeof *state); - cso_set_framebuffer($self->cso, state); - } - - void set_polygon_stipple(const struct pipe_poly_stipple *state ) { - $self->pipe->set_polygon_stipple($self->pipe, state); - } - - void set_scissor(const struct pipe_scissor_state *state ) { - $self->pipe->set_scissor_state($self->pipe, state); - } - - void set_viewport(const struct pipe_viewport_state *state) { - cso_set_viewport($self->cso, state); - } - - void set_fragment_sampler_view(unsigned index, - struct pipe_sampler_view *view) - { - pipe_sampler_view_reference(&$self->fragment_sampler_views[index], view); - - $self->pipe->set_fragment_sampler_views($self->pipe, - PIPE_MAX_SAMPLERS, - $self->fragment_sampler_views); - } - - void set_vertex_sampler_view(unsigned index, - struct pipe_sampler_view *view) - { - pipe_sampler_view_reference(&$self->vertex_sampler_views[index], view); - - $self->pipe->set_vertex_sampler_views($self->pipe, - PIPE_MAX_VERTEX_SAMPLERS, - $self->vertex_sampler_views); - } - - void set_fragment_sampler_texture(unsigned index, - struct pipe_resource *texture) { - struct pipe_sampler_view templ; - - if(!texture) - texture = $self->default_texture; - pipe_sampler_view_reference(&$self->fragment_sampler_views[index], NULL); - u_sampler_view_default_template(&templ, - texture, - texture->format); - $self->fragment_sampler_views[index] = $self->pipe->create_sampler_view($self->pipe, - texture, - &templ); - $self->pipe->set_fragment_sampler_views($self->pipe, - PIPE_MAX_SAMPLERS, - $self->fragment_sampler_views); - } - - void set_vertex_sampler_texture(unsigned index, - struct pipe_resource *texture) { - struct pipe_sampler_view templ; - - if(!texture) - texture = $self->default_texture; - pipe_sampler_view_reference(&$self->vertex_sampler_views[index], NULL); - u_sampler_view_default_template(&templ, - texture, - texture->format); - $self->vertex_sampler_views[index] = $self->pipe->create_sampler_view($self->pipe, - texture, - &templ); - - $self->pipe->set_vertex_sampler_views($self->pipe, - PIPE_MAX_VERTEX_SAMPLERS, - $self->vertex_sampler_views); - } - - void set_vertex_buffer(unsigned index, - unsigned stride, - unsigned buffer_offset, - struct pipe_resource *buffer) - { - unsigned i; - struct pipe_vertex_buffer state; - - memset(&state, 0, sizeof(state)); - state.stride = stride; - state.buffer_offset = buffer_offset; - state.buffer = buffer; - - memcpy(&$self->vertex_buffers[index], &state, sizeof(state)); - - for(i = 0; i < PIPE_MAX_ATTRIBS; ++i) - if(self->vertex_buffers[i].buffer) - $self->num_vertex_buffers = i + 1; - - $self->pipe->set_vertex_buffers($self->pipe, - $self->num_vertex_buffers, - $self->vertex_buffers); - } - - void set_index_buffer(unsigned index_size, - unsigned offset, - struct pipe_resource *buffer) - { - struct pipe_index_buffer ib; - - memset(&ib, 0, sizeof(ib)); - ib.index_size = index_size; - ib.offset = offset; - ib.buffer = buffer; - - $self->pipe->set_index_buffer($self->pipe, &ib); - } - - void set_vertex_element(unsigned index, - const struct pipe_vertex_element *element) - { - memcpy(&$self->vertex_elements[index], element, sizeof(*element)); - } - - void set_vertex_elements(unsigned num) - { - $self->num_vertex_elements = num; - cso_set_vertex_elements($self->cso, - $self->num_vertex_elements, - $self->vertex_elements); - } - - /* - * Draw functions - */ - - void draw_arrays(unsigned mode, unsigned start, unsigned count) { - util_draw_arrays($self->pipe, mode, start, count); - } - - void draw_vbo(const struct pipe_draw_info *info) - { - $self->pipe->draw_vbo($self->pipe, info); - } - - void draw_vertices(unsigned prim, - unsigned num_verts, - unsigned num_attribs, - const float *vertices) - { - struct pipe_context *pipe = $self->pipe; - struct pipe_screen *screen = pipe->screen; - struct pipe_resource *vbuf; - struct pipe_transfer *transfer; - struct pipe_vertex_element velements[PIPE_MAX_ATTRIBS]; - struct pipe_vertex_buffer vbuffer; - float *map; - unsigned size; - unsigned i; - - size = num_verts * num_attribs * 4 * sizeof(float); - - vbuf = pipe_buffer_create(screen, - PIPE_BIND_VERTEX_BUFFER, - PIPE_USAGE_STATIC, - size); - if(!vbuf) - goto error1; - - map = pipe_buffer_map(pipe, vbuf, PIPE_TRANSFER_WRITE, &transfer); - if (!map) - goto error2; - memcpy(map, vertices, size); - pipe_buffer_unmap(pipe, transfer); - - cso_save_vertex_elements($self->cso); - - /* tell pipe about the vertex attributes */ - for (i = 0; i < num_attribs; i++) { - velements[i].src_offset = i * 4 * sizeof(float); - velements[i].instance_divisor = 0; - velements[i].vertex_buffer_index = 0; - velements[i].src_format = PIPE_FORMAT_R32G32B32A32_FLOAT; - } - cso_set_vertex_elements($self->cso, num_attribs, velements); - - /* tell pipe about the vertex buffer */ - memset(&vbuffer, 0, sizeof(vbuffer)); - vbuffer.buffer = vbuf; - vbuffer.stride = num_attribs * 4 * sizeof(float); /* vertex size */ - vbuffer.buffer_offset = 0; - pipe->set_vertex_buffers(pipe, 1, &vbuffer); - - /* draw */ - util_draw_arrays(pipe, prim, 0, num_verts); - - cso_restore_vertex_elements($self->cso); - -error2: - pipe_resource_reference(&vbuf, NULL); -error1: - ; - } - - void - clear(unsigned buffers, const float *rgba, double depth = 0.0f, - unsigned stencil = 0) - { - $self->pipe->clear($self->pipe, buffers, rgba, depth, stencil); - } - - void - flush(unsigned flags = 0) { - struct pipe_fence_handle *fence = NULL; - $self->pipe->flush($self->pipe, &fence); - if(fence) { - /* TODO: allow asynchronous operation */ - $self->pipe->screen->fence_finish( $self->pipe->screen, fence, PIPE_TIMEOUT_INFINITE ); - $self->pipe->screen->fence_reference( $self->pipe->screen, &fence, NULL ); - } - } - - /* - * Surface functions - */ - - void resource_copy_region(struct pipe_resource *dst, - unsigned dst_level, - unsigned dstx, unsigned dsty, unsigned dstz, - struct pipe_resource *src, - unsigned src_level, - const struct pipe_box *src_box) - { - $self->pipe->resource_copy_region($self->pipe, - dst, dst_level, dstx, dsty, dstz, - src, src_level, src_box); - } - - - void clear_render_target(struct st_surface *dst, - float *rgba, - unsigned x, unsigned y, - unsigned width, unsigned height) - { - struct pipe_surface *_dst = NULL; - - _dst = st_pipe_surface($self->pipe, dst, PIPE_BIND_RENDER_TARGET); - if(!_dst) - SWIG_exception(SWIG_ValueError, "couldn't acquire destination surface for writing"); - - $self->pipe->clear_render_target($self->pipe, _dst, rgba, x, y, width, height); - - fail: - pipe_surface_reference(&_dst, NULL); - } - - void clear_depth_stencil(struct st_surface *dst, - unsigned clear_flags, - double depth, - unsigned stencil, - unsigned x, unsigned y, - unsigned width, unsigned height) - { - struct pipe_surface *_dst = NULL; - - _dst = st_pipe_surface($self->pipe, dst, PIPE_BIND_DEPTH_STENCIL); - if(!_dst) - SWIG_exception(SWIG_ValueError, "couldn't acquire destination surface for writing"); - - $self->pipe->clear_depth_stencil($self->pipe, _dst, clear_flags, depth, stencil, - x, y, width, height); - - fail: - pipe_surface_reference(&_dst, NULL); - } - - %cstring_output_allocate_size(char **STRING, int *LENGTH, free(*$1)); - void - surface_read_raw(struct st_surface *surface, - unsigned x, unsigned y, unsigned w, unsigned h, - char **STRING, int *LENGTH) - { - struct pipe_resource *texture = surface->texture; - struct pipe_context *pipe = $self->pipe; - struct pipe_transfer *transfer; - unsigned stride; - - stride = util_format_get_stride(texture->format, w); - *LENGTH = util_format_get_nblocksy(texture->format, h) * stride; - *STRING = (char *) malloc(*LENGTH); - if(!*STRING) - return; - - transfer = pipe_get_transfer(pipe, - surface->texture, - surface->level, - surface->layer, - PIPE_TRANSFER_READ, - x, y, w, h); - if(transfer) { - pipe_get_tile_raw(pipe, transfer, 0, 0, w, h, *STRING, stride); - pipe->transfer_destroy(pipe, transfer); - } - } - - %cstring_input_binary(const char *STRING, unsigned LENGTH); - void - surface_write_raw(struct st_surface *surface, - unsigned x, unsigned y, unsigned w, unsigned h, - const char *STRING, unsigned LENGTH, unsigned stride = 0) - { - struct pipe_resource *texture = surface->texture; - struct pipe_context *pipe = $self->pipe; - struct pipe_transfer *transfer; - - if(stride == 0) - stride = util_format_get_stride(texture->format, w); - - if(LENGTH < util_format_get_nblocksy(texture->format, h) * stride) - SWIG_exception(SWIG_ValueError, "offset must be smaller than buffer size"); - - transfer = pipe_get_transfer(pipe, - surface->texture, - surface->level, - surface->layer, - PIPE_TRANSFER_WRITE, - x, y, w, h); - if(!transfer) - SWIG_exception(SWIG_MemoryError, "couldn't initiate transfer"); - - pipe_put_tile_raw(pipe, transfer, 0, 0, w, h, STRING, stride); - pipe->transfer_destroy(pipe, transfer); - - fail: - return; - } - - void - surface_read_rgba(struct st_surface *surface, - unsigned x, unsigned y, unsigned w, unsigned h, - float *rgba) - { - struct pipe_context *pipe = $self->pipe; - struct pipe_transfer *transfer; - transfer = pipe_get_transfer(pipe, - surface->texture, - surface->level, - surface->layer, - PIPE_TRANSFER_READ, - x, y, w, h); - if(transfer) { - pipe_get_tile_rgba(pipe, transfer, 0, 0, w, h, rgba); - pipe->transfer_destroy(pipe, transfer); - } - } - - void - surface_write_rgba(struct st_surface *surface, - unsigned x, unsigned y, unsigned w, unsigned h, - const float *rgba) - { - struct pipe_context *pipe = $self->pipe; - struct pipe_transfer *transfer; - transfer = pipe_get_transfer(pipe, - surface->texture, - surface->level, - surface->layer, - PIPE_TRANSFER_WRITE, - x, y, w, h); - if(transfer) { - pipe_put_tile_rgba(pipe, transfer, 0, 0, w, h, rgba); - pipe->transfer_destroy(pipe, transfer); - } - } - - %cstring_output_allocate_size(char **STRING, int *LENGTH, free(*$1)); - void - surface_read_rgba8(struct st_surface *surface, - unsigned x, unsigned y, unsigned w, unsigned h, - char **STRING, int *LENGTH) - { - struct pipe_context *pipe = $self->pipe; - struct pipe_transfer *transfer; - float *rgba; - unsigned char *rgba8; - unsigned i, j, k; - - *LENGTH = 0; - *STRING = NULL; - - if (!surface) - return; - - *LENGTH = h*w*4; - *STRING = (char *) malloc(*LENGTH); - if(!*STRING) - return; - - rgba = malloc(h*w*4*sizeof(float)); - if(!rgba) - return; - - rgba8 = (unsigned char *) *STRING; - - transfer = pipe_get_transfer(pipe, - surface->texture, - surface->level, - surface->layer, - PIPE_TRANSFER_READ, - x, y, w, h); - if(transfer) { - pipe_get_tile_rgba(pipe, transfer, 0, 0, w, h, rgba); - for(j = 0; j < h; ++j) { - for(i = 0; i < w; ++i) - for(k = 0; k <4; ++k) - rgba8[j*w*4 + i*4 + k] = float_to_ubyte(rgba[j*w*4 + i*4 + k]); - } - pipe->transfer_destroy(pipe, transfer); - } - - free(rgba); - } - - void - surface_read_z(struct st_surface *surface, - unsigned x, unsigned y, unsigned w, unsigned h, - unsigned *z) - { - struct pipe_context *pipe = $self->pipe; - struct pipe_transfer *transfer; - transfer = pipe_get_transfer(pipe, - surface->texture, - surface->level, - surface->layer, - PIPE_TRANSFER_READ, - x, y, w, h); - if(transfer) { - pipe_get_tile_z(pipe, transfer, 0, 0, w, h, z); - pipe->transfer_destroy(pipe, transfer); - } - } - - void - surface_write_z(struct st_surface *surface, - unsigned x, unsigned y, unsigned w, unsigned h, - const unsigned *z) - { - struct pipe_context *pipe = $self->pipe; - struct pipe_transfer *transfer; - transfer = pipe_get_transfer(pipe, - surface->texture, - surface->level, - surface->layer, - PIPE_TRANSFER_WRITE, - x, y, w, h); - if(transfer) { - pipe_put_tile_z(pipe, transfer, 0, 0, w, h, z); - pipe->transfer_destroy(pipe, transfer); - } - } - - void - surface_sample_rgba(struct st_surface *surface, - float *rgba, - int norm = 0) - { - st_sample_surface($self->pipe, surface, rgba, norm != 0); - } - - unsigned - surface_compare_rgba(struct st_surface *surface, - unsigned x, unsigned y, unsigned w, unsigned h, - const float *rgba, float tol = 0.0) - { - struct pipe_context *pipe = $self->pipe; - struct pipe_transfer *transfer; - float *rgba2; - const float *p1; - const float *p2; - unsigned i, j, n; - - rgba2 = MALLOC(h*w*4*sizeof(float)); - if(!rgba2) - return ~0; - - transfer = pipe_get_transfer(pipe, - surface->texture, - surface->level, - surface->layer, - PIPE_TRANSFER_READ, - x, y, w, h); - if(!transfer) { - FREE(rgba2); - return ~0; - } - - pipe_get_tile_rgba(pipe, transfer, 0, 0, w, h, rgba2); - pipe->transfer_destroy(pipe, transfer); - - p1 = rgba; - p2 = rgba2; - n = 0; - for(i = h*w; i; --i) { - unsigned differs = 0; - for(j = 4; j; --j) { - float delta = *p2++ - *p1++; - if (delta < -tol || delta > tol) - differs = 1; - } - n += differs; - } - - FREE(rgba2); - - return n; - } - - %cstring_input_binary(const char *STRING, unsigned LENGTH); - void - transfer_inline_write(struct pipe_resource *resource, - unsigned level, - unsigned usage, - const struct pipe_box *box, - const char *STRING, unsigned LENGTH, - unsigned stride, - unsigned layer_stride) - { - struct pipe_context *pipe = $self->pipe; - - pipe->transfer_inline_write(pipe, resource, level, usage, box, STRING, stride, layer_stride); - } - - %cstring_output_allocate_size(char **STRING, int *LENGTH, free(*$1)); - void buffer_read(struct pipe_resource *buffer, - char **STRING, int *LENGTH) - { - struct pipe_context *pipe = $self->pipe; - - assert(buffer->target == PIPE_BUFFER); - - *LENGTH = buffer->width0; - *STRING = (char *) malloc(buffer->width0); - if(!*STRING) - return; - - pipe_buffer_read(pipe, buffer, 0, buffer->width0, *STRING); - } - - void buffer_write(struct pipe_resource *buffer, - const char *STRING, unsigned LENGTH, unsigned offset = 0) - { - struct pipe_context *pipe = $self->pipe; - - assert(buffer->target == PIPE_BUFFER); - - if(offset > buffer->width0) - SWIG_exception(SWIG_ValueError, "offset must be smaller than buffer size"); - - if(offset + LENGTH > buffer->width0) - SWIG_exception(SWIG_ValueError, "data length must fit inside the buffer"); - - pipe_buffer_write(pipe, buffer, offset, LENGTH, STRING); - -fail: - return; - } - -}; |