• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef SFN_GEOMETRYSHADER_H
2 #define SFN_GEOMETRYSHADER_H
3 
4 
5 #include "sfn_shader.h"
6 #include "sfn_instr_export.h"
7 
8 namespace r600 {
9 
10 class GeometryShader : public Shader {
11 public:
12    GeometryShader(const r600_shader_key& key);
13 
14 
15 
16 private:
17    bool do_scan_instruction(nir_instr *instr) override;
18    int do_allocate_reserved_registers() override;
19 
20    bool process_stage_intrinsic(nir_intrinsic_instr *intr) override;
21 
22    bool process_store_output(nir_intrinsic_instr *intr);
23    bool process_load_input(nir_intrinsic_instr *intr);
24 
25    void do_finalize() override;
26 
27    void do_get_shader_info(r600_shader *sh_info) override;
28 
29    bool read_prop(std::istream& is) override;
30    void do_print_properties(std::ostream& os) const override;
31 
32    void emit_adj_fix();
33 
34    bool emit_load_per_vertex_input(nir_intrinsic_instr* instr);
35 
load_input(UNUSED nir_intrinsic_instr * intr)36    bool load_input(UNUSED nir_intrinsic_instr *intr) override {
37       unreachable("load_input must be lowered in GS");
38    };
39    bool store_output(nir_intrinsic_instr* instr) override;
40    bool emit_vertex(nir_intrinsic_instr* instr, bool cut);
41 
42    std::array<PRegister, 6> m_per_vertex_offsets{nullptr};
43    PRegister m_primitive_id{nullptr};
44    PRegister m_invocation_id{nullptr};
45    std::array<PRegister, 4> m_export_base{nullptr};
46 
47    unsigned m_ring_item_sizes[4]{0};
48 
49    bool m_tri_strip_adj_fix{false};
50    bool m_first_vertex_emitted{false};
51    int m_offset{0};
52    int m_next_input_ring_offset{0};
53    int m_cc_dist_mask{0};
54    int m_clip_dist_write{0};
55    int m_cur_ring_output{0};
56    bool m_gs_tri_strip_adj_fix{false};
57    uint64_t m_input_mask{0};
58    unsigned m_noutputs{0};
59    bool m_out_viewport{false};
60    bool m_out_misc_write{false};
61 
62    std::map<int, MemRingOutInstr *> m_streamout_data;
63 };
64 
65 }
66 
67 #endif // GEOMETRYSHADER_H
68