llvmpipe/draw: handle constant buffer limits and robustness (v1.1)
[mesa.git] / src / gallium / auxiliary / draw / draw_context.h
index fefda82133809f2004d15b830f5f3e74578be7c1..0098657357bfa8cc4e4c208625023ffdfec07927 100644 (file)
@@ -45,6 +45,8 @@ struct draw_context;
 struct draw_stage;
 struct draw_vertex_shader;
 struct draw_geometry_shader;
+struct draw_tess_ctrl_shader;
+struct draw_tess_eval_shader;
 struct draw_fragment_shader;
 struct tgsi_sampler;
 struct tgsi_image;
@@ -63,6 +65,8 @@ struct draw_so_target {
    int internal_offset;
 };
 
+bool draw_has_llvm(void);
+
 struct draw_context *draw_create( struct pipe_context *pipe );
 
 #ifdef LLVM_AVAILABLE
@@ -118,6 +122,9 @@ void draw_enable_point_sprites(struct draw_context *draw, boolean enable);
 
 void draw_set_zs_format(struct draw_context *draw, enum pipe_format format);
 
+/* for TGSI constants are 4 * sizeof(float), but for NIR they need to be sizeof(float); */
+void draw_set_constant_buffer_stride(struct draw_context *draw, unsigned num_bytes);
+
 boolean
 draw_install_aaline_stage(struct draw_context *draw, struct pipe_context *pipe);
 
@@ -150,6 +157,12 @@ draw_total_vs_outputs(const struct draw_context *draw);
 uint
 draw_total_gs_outputs(const struct draw_context *draw);
 
+uint
+draw_total_tcs_outputs(const struct draw_context *draw);
+
+uint
+draw_total_tes_outputs(const struct draw_context *draw);
+
 void
 draw_texture_sampler(struct draw_context *draw,
                      enum pipe_shader_type shader_type,
@@ -188,6 +201,8 @@ draw_set_mapped_texture(struct draw_context *draw,
                         unsigned sview_idx,
                         uint32_t width, uint32_t height, uint32_t depth,
                         uint32_t first_level, uint32_t last_level,
+                        uint32_t num_samples,
+                        uint32_t sample_stride,
                         const void *base,
                         uint32_t row_stride[PIPE_MAX_TEXTURE_LEVELS],
                         uint32_t img_stride[PIPE_MAX_TEXTURE_LEVELS],
@@ -200,7 +215,9 @@ draw_set_mapped_image(struct draw_context *draw,
                       uint32_t width, uint32_t height, uint32_t depth,
                       const void *base_ptr,
                       uint32_t row_stride,
-                      uint32_t img_stride);
+                      uint32_t img_stride,
+                      uint32_t num_samples,
+                      uint32_t sample_stride);
 
 /*
  * Vertex shader functions
@@ -240,6 +257,26 @@ void draw_bind_geometry_shader(struct draw_context *draw,
 void draw_delete_geometry_shader(struct draw_context *draw,
                                  struct draw_geometry_shader *dvs);
 
+/*
+ * Tess shader functions
+ */
+struct draw_tess_ctrl_shader *
+draw_create_tess_ctrl_shader(struct draw_context *draw,
+                            const struct pipe_shader_state *shader);
+void draw_bind_tess_ctrl_shader(struct draw_context *draw,
+                                struct draw_tess_ctrl_shader *dvs);
+void draw_delete_tess_ctrl_shader(struct draw_context *draw,
+                                  struct draw_tess_ctrl_shader *dvs);
+struct draw_tess_eval_shader *
+draw_create_tess_eval_shader(struct draw_context *draw,
+                            const struct pipe_shader_state *shader);
+void draw_bind_tess_eval_shader(struct draw_context *draw,
+                                struct draw_tess_eval_shader *dvs);
+void draw_delete_tess_eval_shader(struct draw_context *draw,
+                                  struct draw_tess_eval_shader *dvs);
+void draw_set_tess_state(struct draw_context *draw,
+                         const float default_outer_level[4],
+                         const float default_inner_level[2]);
 
 /*
  * Vertex data functions
@@ -312,6 +349,9 @@ void draw_set_force_passthrough( struct draw_context *draw,
 void draw_collect_pipeline_statistics(struct draw_context *draw,
                                       boolean enable);
 
+void draw_collect_primitives_generated(struct draw_context *draw,
+                                       bool eanble);
+
 /*******************************************************************************
  * Draw pipeline 
  */
@@ -329,4 +369,14 @@ draw_get_shader_param_no_llvm(enum pipe_shader_type shader,
 boolean
 draw_get_option_use_llvm(void);
 
+struct lp_cached_code;
+void
+draw_set_disk_cache_callbacks(struct draw_context *draw,
+                              void *data_cookie,
+                              void (*find_shader)(void *cookie,
+                                                  struct lp_cached_code *cache,
+                                                  unsigned char ir_sha1_cache_key[20]),
+                              void (*insert_shader)(void *cookie,
+                                                    struct lp_cached_code *cache,
+                                                    unsigned char ir_sha1_cache_key[20]));
 #endif /* DRAW_CONTEXT_H */