xref: /aosp_15_r20/external/mesa3d/src/gallium/drivers/r600/sfn/sfn_shader_tess.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
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