Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. /**************************************************************************
  2.  *
  3.  * Copyright 2010 VMware, Inc.
  4.  * All Rights Reserved.
  5.  *
  6.  * Permission is hereby granted, free of charge, to any person obtaining a
  7.  * copy of this software and associated documentation files (the
  8.  * "Software"), to deal in the Software without restriction, including
  9.  * without limitation the rights to use, copy, modify, merge, publish,
  10.  * distribute, sub license, and/or sell copies of the Software, and to
  11.  * permit persons to whom the Software is furnished to do so, subject to
  12.  * the following conditions:
  13.  *
  14.  * The above copyright notice and this permission notice (including the
  15.  * next paragraph) shall be included in all copies or substantial portions
  16.  * of the Software.
  17.  *
  18.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  19.  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  20.  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
  21.  * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
  22.  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
  23.  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
  24.  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  25.  *
  26.  **************************************************************************/
  27.  
  28. #include "util/u_math.h"
  29. #include "util/u_memory.h"
  30. #include "pipe/p_shader_tokens.h"
  31. #include "pipe/p_screen.h"
  32.  
  33. #include "draw_private.h"
  34. #include "draw_context.h"
  35. #include "draw_vs.h"
  36. #include "draw_llvm.h"
  37.  
  38. #include "tgsi/tgsi_parse.h"
  39. #include "tgsi/tgsi_scan.h"
  40.  
  41. static void
  42. vs_llvm_prepare(struct draw_vertex_shader *shader,
  43.                 struct draw_context *draw)
  44. {
  45.    /*struct llvm_vertex_shader *evs = llvm_vertex_shader(shader);*/
  46. }
  47.  
  48. static void
  49. vs_llvm_run_linear( struct draw_vertex_shader *shader,
  50.                     const float (*input)[4],
  51.                     float (*output)[4],
  52.                     const void *constants[PIPE_MAX_CONSTANT_BUFFERS],
  53.                     const unsigned constants_size[PIPE_MAX_CONSTANT_BUFFERS],
  54.                     unsigned count,
  55.                     unsigned input_stride,
  56.                     unsigned output_stride )
  57. {
  58.    /* we should never get here since the entire pipeline is
  59.     * generated in draw_pt_fetch_shade_pipeline_llvm.c */
  60.    debug_assert(0);
  61. }
  62.  
  63.  
  64. static void
  65. vs_llvm_delete( struct draw_vertex_shader *dvs )
  66. {
  67.    struct llvm_vertex_shader *shader = llvm_vertex_shader(dvs);
  68.    struct draw_llvm_variant_list_item *li;
  69.  
  70.    li = first_elem(&shader->variants);
  71.    while(!at_end(&shader->variants, li)) {
  72.       struct draw_llvm_variant_list_item *next = next_elem(li);
  73.       draw_llvm_destroy_variant(li->base);
  74.       li = next;
  75.    }
  76.  
  77.    assert(shader->variants_cached == 0);
  78.    FREE((void*) dvs->state.tokens);
  79.    FREE( dvs );
  80. }
  81.  
  82.  
  83. struct draw_vertex_shader *
  84. draw_create_vs_llvm(struct draw_context *draw,
  85.                     const struct pipe_shader_state *state)
  86. {
  87.    struct llvm_vertex_shader *vs = CALLOC_STRUCT( llvm_vertex_shader );
  88.  
  89.    if (vs == NULL)
  90.       return NULL;
  91.  
  92.    /* we make a private copy of the tokens */
  93.    vs->base.state.tokens = tgsi_dup_tokens(state->tokens);
  94.    if (!vs->base.state.tokens) {
  95.       FREE(vs);
  96.       return NULL;
  97.    }
  98.  
  99.    tgsi_scan_shader(state->tokens, &vs->base.info);
  100.  
  101.    vs->variant_key_size =
  102.       draw_llvm_variant_key_size(
  103.          vs->base.info.file_max[TGSI_FILE_INPUT]+1,
  104.          MAX2(vs->base.info.file_max[TGSI_FILE_SAMPLER]+1,
  105.               vs->base.info.file_max[TGSI_FILE_SAMPLER_VIEW]+1));
  106.  
  107.    vs->base.state.stream_output = state->stream_output;
  108.    vs->base.draw = draw;
  109.    vs->base.prepare = vs_llvm_prepare;
  110.    vs->base.run_linear = vs_llvm_run_linear;
  111.    vs->base.delete = vs_llvm_delete;
  112.    vs->base.create_variant = draw_vs_create_variant_generic;
  113.  
  114.    make_empty_list(&vs->variants);
  115.  
  116.    return &vs->base;
  117. }
  118.