1 #ifndef VERTEXSTAGEEXPORT_H
2 #define VERTEXSTAGEEXPORT_H
4 #include "sfn_shader_base.h"
8 class VertexStage
: public ShaderFromNirProcessor
{
10 using ShaderFromNirProcessor::ShaderFromNirProcessor
;
12 virtual PValue
primitive_id() = 0;
15 class VertexStageExportBase
18 VertexStageExportBase(VertexStage
& proc
);
19 virtual ~VertexStageExportBase();
20 void setup_paramn_map();
21 virtual bool store_deref(const nir_variable
*out_var
, nir_intrinsic_instr
* instr
) = 0;
22 virtual void finalize_exports() = 0;
23 virtual bool do_process_outputs(nir_variable
*output
);
24 int cur_param() const {return m_cur_param
;}
27 std::map
<unsigned, unsigned> m_param_map
;
32 class VertexStageExportForFS
: public VertexStageExportBase
35 VertexStageExportForFS(VertexStage
& proc
,
36 const pipe_stream_output_info
*so_info
,
37 r600_pipe_shader
*pipe_shader
,
38 const r600_shader_key
& key
);
40 bool store_deref(const nir_variable
*out_var
, nir_intrinsic_instr
* instr
) override
;
41 void finalize_exports() override
;
44 bool emit_varying_param(const nir_variable
*out_var
, nir_intrinsic_instr
* instr
);
45 bool emit_varying_pos(const nir_variable
*out_var
, nir_intrinsic_instr
* instr
,
46 std::array
<uint32_t, 4> *swizzle_override
= nullptr);
47 bool emit_clip_vertices(const nir_variable
*out_var
, nir_intrinsic_instr
* instr
);
48 bool emit_stream(int stream
);
50 ExportInstruction
*m_last_param_export
;
51 ExportInstruction
*m_last_pos_export
;
54 int m_enabled_stream_buffers_mask
;
55 const pipe_stream_output_info
*m_so_info
;
56 r600_pipe_shader
*m_pipe_shader
;
57 const r600_shader_key
& m_key
;
61 class VertexStageExportForGS
: public VertexStageExportBase
64 VertexStageExportForGS(VertexStage
& proc
,
65 const r600_shader
*gs_shader
);
66 bool store_deref(const nir_variable
*out_var
, nir_intrinsic_instr
* instr
) override
;
67 void finalize_exports() override
;
70 unsigned m_num_clip_dist
;
71 const r600_shader
*m_gs_shader
;
74 class VertexStageExportForES
: public VertexStageExportBase
77 VertexStageExportForES(VertexStage
& proc
);
78 bool store_deref(const nir_variable
*out_var
, nir_intrinsic_instr
* instr
) override
;
79 void finalize_exports() override
;
85 #endif // VERTEXSTAGEEXPORT_H