1 /* -*- mesa-c++ -*- 2 * Copyright 2022 Collabora LTD 3 * Author: Gert Wollny <[email protected]> 4 * SPDX-License-Identifier: MIT 5 */ 6 7 #ifndef SFN_TESS_SHADER_H 8 #define SFN_TESS_SHADER_H 9 10 #include "sfn_shader_vs.h" 11 12 namespace r600 { 13 14 class VertexExportStage; 15 16 class TCSShader : public Shader { 17 public: 18 TCSShader(const r600_shader_key& key); 19 20 private: 21 bool do_scan_instruction(nir_instr *instr) override; 22 int do_allocate_reserved_registers() override; 23 24 bool process_stage_intrinsic(nir_intrinsic_instr *intr) override; 25 void do_get_shader_info(r600_shader *sh_info) override; 26 bool store_tess_factor(nir_intrinsic_instr *instr); 27 load_input(UNUSED nir_intrinsic_instr * intr)28 bool load_input(UNUSED nir_intrinsic_instr *intr) override 29 { 30 unreachable("load_input must be lowered in TCS"); 31 }; store_output(UNUSED nir_intrinsic_instr * intr)32 bool store_output(UNUSED nir_intrinsic_instr *intr) override 33 { 34 unreachable("load_output must be lowered in TCS"); 35 }; 36 37 bool read_prop(std::istream& is) override; 38 void do_print_properties(std::ostream& os) const override; 39 40 PRegister m_tess_factor_base; 41 PRegister m_rel_patch_id; 42 PRegister m_invocation_id; 43 PRegister m_primitive_id; 44 45 unsigned m_tcs_prim_mode{0}; 46 }; 47 48 class TESShader : public VertexStageShader { 49 public: 50 TESShader(const pipe_stream_output_info *so_info, 51 const r600_shader *gs_shader, 52 const r600_shader_key& key); 53 54 private: 55 bool do_scan_instruction(nir_instr *instr) override; 56 int do_allocate_reserved_registers() override; 57 58 bool process_stage_intrinsic(nir_intrinsic_instr *intr) override; 59 void do_get_shader_info(r600_shader *sh_info) override; 60 load_input(UNUSED nir_intrinsic_instr * intr)61 bool load_input(UNUSED nir_intrinsic_instr *intr) override 62 { 63 unreachable("load_input must be lowered in TES"); 64 }; store_output(UNUSED nir_intrinsic_instr * intr)65 bool store_output(UNUSED nir_intrinsic_instr *intr) override 66 { 67 unreachable("load_output must be lowered in TES"); 68 }; 69 70 bool read_prop(std::istream& is) override; 71 void do_print_properties(std::ostream& os) const override; 72 73 void do_finalize() override; 74 75 PRegister m_tess_coord[2] = {nullptr, nullptr}; 76 PRegister m_rel_patch_id{nullptr}; 77 PRegister m_primitive_id{nullptr}; 78 79 VertexExportStage *m_export_processor{nullptr}; 80 81 int m_tcs_vertices_out{0}; 82 bool m_vs_as_gs_a{false}; 83 bool m_tes_as_es{false}; 84 }; 85 86 } // namespace r600 87 88 #endif // TCS_H 89