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