Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Mesa 3-D graphics library
  3.  *
  4.  * Copyright (C) 2012-2013 LunarG, Inc.
  5.  *
  6.  * Permission is hereby granted, free of charge, to any person obtaining a
  7.  * copy of this software and associated documentation files (the "Software"),
  8.  * to deal in the Software without restriction, including without limitation
  9.  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  10.  * and/or sell copies of the Software, and to permit persons to whom the
  11.  * Software is furnished to do so, subject to the following conditions:
  12.  *
  13.  * The above copyright notice and this permission notice shall be included
  14.  * in all copies or substantial portions of the Software.
  15.  *
  16.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  17.  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  18.  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  19.  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  20.  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  21.  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  22.  * DEALINGS IN THE SOFTWARE.
  23.  *
  24.  * Authors:
  25.  *    Chia-I Wu <olv@lunarg.com>
  26.  */
  27.  
  28. #ifndef ILO_SHADER_H
  29. #define ILO_SHADER_H
  30.  
  31. #include "ilo_common.h"
  32.  
  33. enum ilo_kernel_param {
  34.    ILO_KERNEL_INPUT_COUNT,
  35.    ILO_KERNEL_OUTPUT_COUNT,
  36.    ILO_KERNEL_URB_DATA_START_REG,
  37.  
  38.    ILO_KERNEL_VS_INPUT_INSTANCEID,
  39.    ILO_KERNEL_VS_INPUT_VERTEXID,
  40.    ILO_KERNEL_VS_INPUT_EDGEFLAG,
  41.    ILO_KERNEL_VS_PCB_UCP_SIZE,
  42.    ILO_KERNEL_VS_GEN6_SO,
  43.    ILO_KERNEL_VS_GEN6_SO_START_REG,
  44.    ILO_KERNEL_VS_GEN6_SO_POINT_OFFSET,
  45.    ILO_KERNEL_VS_GEN6_SO_LINE_OFFSET,
  46.    ILO_KERNEL_VS_GEN6_SO_TRI_OFFSET,
  47.  
  48.    ILO_KERNEL_GS_DISCARD_ADJACENCY,
  49.    ILO_KERNEL_GS_GEN6_SVBI_POST_INC,
  50.  
  51.    ILO_KERNEL_FS_INPUT_Z,
  52.    ILO_KERNEL_FS_INPUT_W,
  53.    ILO_KERNEL_FS_OUTPUT_Z,
  54.    ILO_KERNEL_FS_USE_KILL,
  55.    ILO_KERNEL_FS_BARYCENTRIC_INTERPOLATIONS,
  56.    ILO_KERNEL_FS_DISPATCH_16_OFFSET,
  57.  
  58.    ILO_KERNEL_PARAM_COUNT,
  59. };
  60.  
  61. struct ilo_kernel_routing {
  62.    uint32_t const_interp_enable;
  63.    uint32_t point_sprite_enable;
  64.    unsigned source_skip, source_len;
  65.  
  66.    bool swizzle_enable;
  67.    uint16_t swizzles[16];
  68. };
  69.  
  70. struct intel_bo;
  71. struct ilo_context;
  72. struct ilo_rasterizer_state;
  73. struct ilo_shader_cache;
  74. struct ilo_shader_state;
  75. struct ilo_shader_cso;
  76.  
  77. struct ilo_shader_cache *
  78. ilo_shader_cache_create(void);
  79.  
  80. void
  81. ilo_shader_cache_destroy(struct ilo_shader_cache *shc);
  82.  
  83. void
  84. ilo_shader_cache_add(struct ilo_shader_cache *shc,
  85.                      struct ilo_shader_state *shader);
  86.  
  87. void
  88. ilo_shader_cache_remove(struct ilo_shader_cache *shc,
  89.                         struct ilo_shader_state *shader);
  90.  
  91. int
  92. ilo_shader_cache_upload(struct ilo_shader_cache *shc,
  93.                         struct intel_bo *bo, unsigned offset,
  94.                         bool incremental);
  95.  
  96. struct ilo_shader_state *
  97. ilo_shader_create_vs(const struct ilo_dev_info *dev,
  98.                      const struct pipe_shader_state *state,
  99.                      const struct ilo_context *precompile);
  100.  
  101. struct ilo_shader_state *
  102. ilo_shader_create_gs(const struct ilo_dev_info *dev,
  103.                      const struct pipe_shader_state *state,
  104.                      const struct ilo_context *precompile);
  105.  
  106. struct ilo_shader_state *
  107. ilo_shader_create_fs(const struct ilo_dev_info *dev,
  108.                      const struct pipe_shader_state *state,
  109.                      const struct ilo_context *precompile);
  110.  
  111. struct ilo_shader_state *
  112. ilo_shader_create_cs(const struct ilo_dev_info *dev,
  113.                      const struct pipe_compute_state *state,
  114.                      const struct ilo_context *precompile);
  115.  
  116. void
  117. ilo_shader_destroy(struct ilo_shader_state *shader);
  118.  
  119. int
  120. ilo_shader_get_type(const struct ilo_shader_state *shader);
  121.  
  122. bool
  123. ilo_shader_select_kernel(struct ilo_shader_state *shader,
  124.                          const struct ilo_context *ilo,
  125.                          uint32_t dirty);
  126.  
  127. bool
  128. ilo_shader_select_kernel_routing(struct ilo_shader_state *shader,
  129.                                  const struct ilo_shader_state *source,
  130.                                  const struct ilo_rasterizer_state *rasterizer);
  131.  
  132. uint32_t
  133. ilo_shader_get_kernel_offset(const struct ilo_shader_state *shader);
  134.  
  135. int
  136. ilo_shader_get_kernel_param(const struct ilo_shader_state *shader,
  137.                             enum ilo_kernel_param param);
  138.  
  139. const struct ilo_shader_cso *
  140. ilo_shader_get_kernel_cso(const struct ilo_shader_state *shader);
  141.  
  142. const struct pipe_stream_output_info *
  143. ilo_shader_get_kernel_so_info(const struct ilo_shader_state *shader);
  144.  
  145. const struct ilo_kernel_routing *
  146. ilo_shader_get_kernel_routing(const struct ilo_shader_state *shader);
  147.  
  148. #endif /* ILO_SHADER_H */
  149.