ilo: plug a potential index buffer leak
[mesa.git] / src / gallium / drivers / ilo / ilo_shader.h
index f286a9f785f6e1563bdd0e970b758d43df34ad39..6a2b8a397b39679eb1fdcf6a59a2b8beebb9674e 100644 (file)
 
 #include "ilo_common.h"
 
+enum ilo_kernel_param {
+   ILO_KERNEL_INPUT_COUNT,
+   ILO_KERNEL_OUTPUT_COUNT,
+   ILO_KERNEL_URB_DATA_START_REG,
+
+   ILO_KERNEL_VS_INPUT_INSTANCEID,
+   ILO_KERNEL_VS_INPUT_VERTEXID,
+   ILO_KERNEL_VS_INPUT_EDGEFLAG,
+   ILO_KERNEL_VS_PCB_UCP_SIZE,
+   ILO_KERNEL_VS_GEN6_SO,
+   ILO_KERNEL_VS_GEN6_SO_START_REG,
+   ILO_KERNEL_VS_GEN6_SO_POINT_OFFSET,
+   ILO_KERNEL_VS_GEN6_SO_LINE_OFFSET,
+   ILO_KERNEL_VS_GEN6_SO_TRI_OFFSET,
+
+   ILO_KERNEL_GS_DISCARD_ADJACENCY,
+   ILO_KERNEL_GS_GEN6_SVBI_POST_INC,
+
+   ILO_KERNEL_FS_INPUT_Z,
+   ILO_KERNEL_FS_INPUT_W,
+   ILO_KERNEL_FS_OUTPUT_Z,
+   ILO_KERNEL_FS_USE_KILL,
+   ILO_KERNEL_FS_BARYCENTRIC_INTERPOLATIONS,
+   ILO_KERNEL_FS_DISPATCH_16_OFFSET,
+
+   ILO_KERNEL_PARAM_COUNT,
+};
+
+struct ilo_kernel_routing {
+   uint32_t const_interp_enable;
+   uint32_t point_sprite_enable;
+   unsigned source_skip, source_len;
+
+   bool swizzle_enable;
+   uint16_t swizzles[16];
+};
+
 struct intel_bo;
 struct ilo_context;
+struct ilo_rasterizer_state;
 struct ilo_shader_cache;
 struct ilo_shader_state;
+struct ilo_shader_cso;
 
 struct ilo_shader_cache *
 ilo_shader_cache_create(void);
@@ -55,10 +94,55 @@ ilo_shader_cache_upload(struct ilo_shader_cache *shc,
                         bool incremental);
 
 struct ilo_shader_state *
-ilo_shader_state_create(const struct ilo_context *ilo,
-                        int type, const void *templ);
+ilo_shader_create_vs(const struct ilo_dev_info *dev,
+                     const struct pipe_shader_state *state,
+                     const struct ilo_context *precompile);
+
+struct ilo_shader_state *
+ilo_shader_create_gs(const struct ilo_dev_info *dev,
+                     const struct pipe_shader_state *state,
+                     const struct ilo_context *precompile);
+
+struct ilo_shader_state *
+ilo_shader_create_fs(const struct ilo_dev_info *dev,
+                     const struct pipe_shader_state *state,
+                     const struct ilo_context *precompile);
+
+struct ilo_shader_state *
+ilo_shader_create_cs(const struct ilo_dev_info *dev,
+                     const struct pipe_compute_state *state,
+                     const struct ilo_context *precompile);
 
 void
-ilo_shader_state_destroy(struct ilo_shader_state *state);
+ilo_shader_destroy(struct ilo_shader_state *shader);
+
+int
+ilo_shader_get_type(const struct ilo_shader_state *shader);
+
+bool
+ilo_shader_select_kernel(struct ilo_shader_state *shader,
+                         const struct ilo_context *ilo,
+                         uint32_t dirty);
+
+bool
+ilo_shader_select_kernel_routing(struct ilo_shader_state *shader,
+                                 const struct ilo_shader_state *source,
+                                 const struct ilo_rasterizer_state *rasterizer);
+
+uint32_t
+ilo_shader_get_kernel_offset(const struct ilo_shader_state *shader);
+
+int
+ilo_shader_get_kernel_param(const struct ilo_shader_state *shader,
+                            enum ilo_kernel_param param);
+
+const struct ilo_shader_cso *
+ilo_shader_get_kernel_cso(const struct ilo_shader_state *shader);
+
+const struct pipe_stream_output_info *
+ilo_shader_get_kernel_so_info(const struct ilo_shader_state *shader);
+
+const struct ilo_kernel_routing *
+ilo_shader_get_kernel_routing(const struct ilo_shader_state *shader);
 
 #endif /* ILO_SHADER_H */