summaryrefslogtreecommitdiffstats
path: root/src/gallium/auxiliary/draw/draw_gs.h
diff options
context:
space:
mode:
authorZack Rusin <[email protected]>2013-02-18 04:00:19 -0800
committerZack Rusin <[email protected]>2013-03-27 03:53:02 -0700
commite96f4e3b853ff5fe4d927c69695c0b5f1966d448 (patch)
tree0ec9030bb93df2046f73afed5bcb999ca8af5e68 /src/gallium/auxiliary/draw/draw_gs.h
parentedcebe665d1204269f5961079a63c5f632cf3f07 (diff)
gallium/llvm: implement geometry shaders in the llvm paths
This commits implements code generation of the geometry shaders in the SOA paths. All the code is there but bugs are likely present. Signed-off-by: Zack Rusin <[email protected]> Reviewed-by: Brian Paul <[email protected]> Reviewed-by: José Fonseca <[email protected]>
Diffstat (limited to 'src/gallium/auxiliary/draw/draw_gs.h')
-rw-r--r--src/gallium/auxiliary/draw/draw_gs.h35
1 files changed, 34 insertions, 1 deletions
diff --git a/src/gallium/auxiliary/draw/draw_gs.h b/src/gallium/auxiliary/draw/draw_gs.h
index 7ab4f04a33d..e62b34a1794 100644
--- a/src/gallium/auxiliary/draw/draw_gs.h
+++ b/src/gallium/auxiliary/draw/draw_gs.h
@@ -31,11 +31,28 @@
#include "draw_context.h"
#include "draw_private.h"
-
#define MAX_TGSI_PRIMITIVES 4
struct draw_context;
+#ifdef HAVE_LLVM
+struct draw_gs_jit_context;
+struct draw_gs_llvm_variant;
+
+/**
+ * Structure holding the inputs to the geometry shader. It uses SOA layout.
+ * The dimensions are as follows:
+ * - maximum number of vertices for a geometry shader input primitive
+ * (6 for triangle_adjacency)
+ * - maximum number of attributes for each vertex
+ * - four channels per each attribute (x,y,z,w)
+ * - number of input primitives equal to the SOA vector length
+ */
+struct draw_gs_inputs {
+ float data[6][PIPE_MAX_SHADER_INPUTS][TGSI_NUM_CHANNELS][TGSI_NUM_CHANNELS];
+};
+#endif
+
/**
* Private version of the compiled geometry shader
*/
@@ -66,6 +83,19 @@ struct draw_geometry_shader {
unsigned fetched_prim_count;
const float (*input)[4];
const struct tgsi_shader_info *input_info;
+ unsigned vector_length;
+ unsigned max_out_prims;
+
+#ifdef HAVE_LLVM
+ struct draw_gs_inputs *gs_input;
+ struct draw_gs_jit_context *jit_context;
+ struct draw_gs_llvm_variant *current_variant;
+ struct vertex_header *gs_output;
+
+ int **llvm_prim_lengths;
+ int *llvm_emitted_primitives;
+ int *llvm_emitted_vertices;
+#endif
void (*fetch_inputs)(struct draw_geometry_shader *shader,
unsigned *indices,
@@ -102,4 +132,7 @@ void draw_geometry_shader_prepare(struct draw_geometry_shader *shader,
int draw_gs_max_output_vertices(struct draw_geometry_shader *shader,
unsigned pipe_prim);
+void draw_gs_set_current_variant(struct draw_geometry_shader *shader,
+ struct draw_gs_llvm_variant *variant);
+
#endif