1 #ifndef SFN_EMITSSBOINSTRUCTION_H
2 #define SFN_EMITSSBOINSTRUCTION_H
4 #include "sfn_emitinstruction.h"
5 #include "sfn_instruction_gds.h"
9 class EmitSSBOInstruction
: public EmitInstruction
{
11 EmitSSBOInstruction(ShaderFromNirProcessor
& processor
);
13 void set_ssbo_offset(int offset
);
15 void set_require_rat_return_address();
16 bool load_rat_return_address();
17 bool load_atomic_inc_limits();
20 bool do_emit(nir_instr
*instr
);
22 bool emit_atomic(const nir_intrinsic_instr
* instr
);
23 bool emit_unary_atomic(const nir_intrinsic_instr
* instr
);
24 bool emit_atomic_add(const nir_intrinsic_instr
* instr
);
25 bool emit_atomic_inc(const nir_intrinsic_instr
* instr
);
26 bool emit_atomic_pre_dec(const nir_intrinsic_instr
* instr
);
28 bool emit_load_ssbo(const nir_intrinsic_instr
* instr
);
29 bool emit_store_ssbo(const nir_intrinsic_instr
* instr
);
31 bool emit_image_size(const nir_intrinsic_instr
*intrin
);
32 bool emit_image_load(const nir_intrinsic_instr
*intrin
);
33 bool emit_image_store(const nir_intrinsic_instr
*intrin
);
34 bool emit_ssbo_atomic_op(const nir_intrinsic_instr
*intrin
);
35 bool emit_buffer_size(const nir_intrinsic_instr
*intrin
);
37 bool fetch_return_value(const nir_intrinsic_instr
*intrin
);
39 ESDOp
get_opcode(nir_intrinsic_op opcode
);
40 RatInstruction::ERatOp
get_rat_opcode(const nir_intrinsic_op opcode
, pipe_format format
) const;
42 GPRVector
make_dest(const nir_intrinsic_instr
* instr
);
44 PValue m_atomic_update
;
46 bool m_require_rat_return_address
;
47 GPRVector m_rat_return_address
;
48 int m_ssbo_image_offset
;
53 #endif // SFN_EMITSSBOINSTRUCTION_H