etnaviv: remove not used etna_bits_ones(..)
[mesa.git] / src / gallium / drivers / etnaviv / etnaviv_compiler.h
index 8582e305a073cd170b20b5551ce267df7338a269..b7feeb6d49b7be471c7ae1f23e86da12228230c1 100644 (file)
 
 #include "etnaviv_context.h"
 #include "etnaviv_internal.h"
+#include "etnaviv_shader.h"
 #include "pipe/p_compiler.h"
 #include "pipe/p_shader_tokens.h"
+#include "compiler/shader_enums.h"
 
 /* XXX some of these are pretty arbitrary limits, may be better to switch
  * to dynamic allocation at some point.
@@ -46,6 +48,7 @@
 struct etna_shader_inout {
    int reg; /* native register */
    struct tgsi_declaration_semantic semantic; /* tgsi semantic name and index */
+   int slot; /* nir: gl_varying_slot or gl_vert_attrib */
    int num_components;
 };
 
@@ -58,7 +61,7 @@ struct etna_shader_io_file {
 struct etna_shader_variant {
    uint32_t id; /* for debug */
 
-   uint processor; /* TGSI_PROCESSOR_... */
+   gl_shader_stage stage;
    uint32_t code_size; /* code size in uint32 words */
    uint32_t *code;
    unsigned num_loops;
@@ -76,12 +79,13 @@ struct etna_shader_variant {
    /* outputs (for linking) */
    struct etna_shader_io_file outfile;
 
-   /* index into outputs (for linking) */
+   /* index into outputs (for linking) - only for TGSI compiler */
    int output_count_per_semantic[TGSI_SEMANTIC_COUNT];
    struct etna_shader_inout * *output_per_semantic_list; /* list of pointers to outputs */
    struct etna_shader_inout **output_per_semantic[TGSI_SEMANTIC_COUNT];
 
-   /* special outputs (vs only) */
+   /* special inputs/outputs (vs only) */
+   int vs_id_in_reg; /* vertexid+instanceid input */
    int vs_pos_out_reg; /* VS position output */
    int vs_pointsize_out_reg; /* VS point size output */
    uint32_t vs_load_balancing;
@@ -93,11 +97,17 @@ struct etna_shader_variant {
    /* unknown input property (XX_INPUT_COUNT, field UNK8) */
    uint32_t input_count_unk8;
 
+   /* shader is larger than GPU instruction limit, thus needs icache */
+   bool needs_icache;
+
    /* shader variants form a linked list */
    struct etna_shader_variant *next;
 
    /* replicated here to avoid passing extra ptrs everywhere */
    struct etna_shader *shader;
+   struct etna_shader_key key;
+
+   struct etna_bo *bo; /* cached code memory bo handle (for icache) */
 };
 
 struct etna_varying {
@@ -111,6 +121,7 @@ struct etna_shader_link_info {
    /* each PS input is annotated with the VS output reg */
    unsigned num_varyings;
    struct etna_varying varyings[ETNA_NUM_INPUTS];
+   int pcoord_varying_comp_ofs;
 };
 
 bool
@@ -126,4 +137,20 @@ etna_link_shader(struct etna_shader_link_info *info,
 void
 etna_destroy_shader(struct etna_shader_variant *shader);
 
+/* NIR compiler */
+
+bool
+etna_compile_shader_nir(struct etna_shader_variant *shader);
+
+void
+etna_dump_shader_nir(const struct etna_shader_variant *shader);
+
+bool
+etna_link_shader_nir(struct etna_shader_link_info *info,
+                     const struct etna_shader_variant *vs,
+                     const struct etna_shader_variant *fs);
+
+void
+etna_destroy_shader_nir(struct etna_shader_variant *shader);
+
 #endif