gallivm: fix indirect addressing of temps in soa mode
[mesa.git] / src / gallium / auxiliary / draw / draw_private.h
index 6a085be27fc9507778714819b043db818a7a48e3..25a8ae614987a1b4786be1f391f1b54867d4d229 100644 (file)
@@ -141,9 +141,11 @@ struct draw_context
       /* Current active frontend */
       struct draw_pt_front_end *frontend;
       unsigned prim;
-      unsigned opt;
+      unsigned opt;     /**< bitmask of PT_x flags */
       unsigned eltSize; /* saved eltSize for flushing */
 
+      boolean rebind_parameters;
+
       struct {
          struct draw_pt_middle_end *fetch_emit;
          struct draw_pt_middle_end *fetch_shade_emit;
@@ -174,6 +176,7 @@ struct draw_context
          /** vertex element/index buffer (ex: glDrawElements) */
          const void *elts;
          /** bytes per index (0, 1, 2 or 4) */
+         unsigned eltSizeIB;
          unsigned eltSize;
          int eltBias;
          unsigned min_index;
@@ -245,16 +248,9 @@ struct draw_context
       struct {
          struct tgsi_exec_machine *machine;
 
-         struct tgsi_sampler **samplers;
-         uint num_samplers;
+         struct tgsi_sampler *sampler;
       } tgsi;
 
-      const void *aligned_constants[PIPE_MAX_CONSTANT_BUFFERS];
-
-      const void *aligned_constant_storage[PIPE_MAX_CONSTANT_BUFFERS];
-      unsigned const_storage_size[PIPE_MAX_CONSTANT_BUFFERS];
-
-
       struct translate *fetch;
       struct translate_cache *fetch_cache;
       struct translate *emit;
@@ -271,8 +267,7 @@ struct draw_context
       struct {
          struct tgsi_exec_machine *machine;
 
-         struct tgsi_sampler **samplers;
-         uint num_samplers;
+         struct tgsi_sampler *sampler;
       } tgsi;
 
    } gs;
@@ -284,7 +279,6 @@ struct draw_context
 
    /** Stream output (vertex feedback) state */
    struct {
-      struct pipe_stream_output_info state;
       struct draw_so_target *targets[PIPE_MAX_SO_BUFFERS];
       uint num_targets;
    } so;
@@ -308,10 +302,18 @@ struct draw_context
    struct draw_llvm *llvm;
 #endif
 
-   struct pipe_sampler_view *sampler_views[PIPE_MAX_VERTEX_SAMPLERS];
-   unsigned num_sampler_views;
-   const struct pipe_sampler_state *samplers[PIPE_MAX_VERTEX_SAMPLERS];
-   unsigned num_samplers;
+   /** Texture sampler and sampler view state.
+    * Note that we have arrays indexed by shader type.  At this time
+    * we only handle vertex and geometry shaders in the draw module, but
+    * there may be more in the future (ex: hull and tessellation).
+    */
+   struct pipe_sampler_view *sampler_views[PIPE_SHADER_TYPES][PIPE_MAX_SHADER_SAMPLER_VIEWS];
+   unsigned num_sampler_views[PIPE_SHADER_TYPES];
+   const struct pipe_sampler_state *samplers[PIPE_SHADER_TYPES][PIPE_MAX_SAMPLERS];
+   unsigned num_samplers[PIPE_SHADER_TYPES];
+
+   struct pipe_query_data_pipeline_statistics statistics;
+   boolean collect_statistics;
 
    void *driver_private;
 };
@@ -353,6 +355,7 @@ struct draw_prim_info {
  * Draw common initialization code
  */
 boolean draw_init(struct draw_context *draw);
+void draw_new_instance(struct draw_context *draw);
 
 /*******************************************************************************
  * Vertex shader code:
@@ -363,24 +366,12 @@ void draw_vs_destroy( struct draw_context *draw );
 void draw_vs_set_viewport( struct draw_context *, 
                            const struct pipe_viewport_state * );
 
-void
-draw_vs_set_constants(struct draw_context *,
-                      unsigned slot,
-                      const void *constants,
-                      unsigned size);
-
-
 
 /*******************************************************************************
  * Geometry shading code:
  */
 boolean draw_gs_init( struct draw_context *draw );
 
-void
-draw_gs_set_constants(struct draw_context *,
-                      unsigned slot,
-                      const void *constants,
-                      unsigned size);
 
 void draw_gs_destroy( struct draw_context *draw );
 
@@ -446,8 +437,9 @@ void draw_pipeline_flush( struct draw_context *draw,
  * Flushing 
  */
 
-#define DRAW_FLUSH_STATE_CHANGE              0x8
-#define DRAW_FLUSH_BACKEND                   0x10
+#define DRAW_FLUSH_PARAMETER_CHANGE 0x1  /**< Constants, viewport, etc */
+#define DRAW_FLUSH_STATE_CHANGE     0x2  /**< Other/heavy state changes */
+#define DRAW_FLUSH_BACKEND          0x4  /**< Flush the output buffer */
 
 
 void draw_do_flush( struct draw_context *draw, unsigned flags );