3
* Copyright (c) 2018-2019 Collabora LTD
5
* Author: Gert Wollny <gert.wollny@collabora.com>
7
* Permission is hereby granted, free of charge, to any person obtaining a
8
* copy of this software and associated documentation files (the "Software"),
9
* to deal in the Software without restriction, including without limitation
10
* on the rights to use, copy, modify, merge, publish, distribute, sub
11
* license, and/or sell copies of the Software, and to permit persons to whom
12
* the Software is furnished to do so, subject to the following conditions:
14
* The above copyright notice and this permission notice (including the next
15
* paragraph) shall be included in all copies or substantial portions of the
18
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
21
* THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
22
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
23
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
24
* USE OR OTHER DEALINGS IN THE SOFTWARE.
27
#ifndef SFN_EMITTEXINSTRUCTION_H
28
#define SFN_EMITTEXINSTRUCTION_H
30
#include "sfn_emitinstruction.h"
31
#include "sfn_instruction_tex.h"
35
class EmitTexInstruction : public EmitInstruction
38
EmitTexInstruction(ShaderFromNirProcessor& processor);
43
const nir_variable *sampler_deref;
44
const nir_variable *texture_deref;
54
PValue sampler_offset;
55
PValue texture_offset;
58
bool emit_tex_tex(nir_tex_instr* instr, TexInputs& src);
60
bool emit_tex_txf(nir_tex_instr* instr, TexInputs &src);
61
bool emit_tex_txb(nir_tex_instr* instr, TexInputs& src);
62
bool emit_tex_txd(nir_tex_instr* instr, TexInputs& src);
63
bool emit_tex_txl(nir_tex_instr* instr, TexInputs& src);
64
bool emit_tex_txs(nir_tex_instr* instr, TexInputs& src,
65
const std::array<int, 4> &dest_swz);
66
bool emit_tex_texture_samples(nir_tex_instr* instr, TexInputs& src,
67
const std::array<int, 4> &dest_swz);
68
bool emit_tex_lod(nir_tex_instr* instr, TexInputs& src);
69
bool emit_tex_tg4(nir_tex_instr* instr, TexInputs& src);
70
bool emit_tex_txf_ms(nir_tex_instr* instr, TexInputs& src);
71
bool emit_buf_txf(nir_tex_instr* instr, TexInputs& src);
73
bool get_inputs(const nir_tex_instr& instr, TexInputs &src);
75
void set_rect_coordinate_flags(nir_tex_instr* instr, TexInstruction* ir) const;
77
bool do_emit(nir_instr* instr) override;
79
GPRVector make_dest(nir_tex_instr& instr);
80
GPRVector make_dest(nir_tex_instr &instr, const std::array<int, 4> &swizzle);
82
void set_offsets(TexInstruction* ir, nir_src *offset);
83
void handle_array_index(const nir_tex_instr& instr, const GPRVector &src, TexInstruction* ir);
90
SamplerId get_sampler_id(int sampler_id, const nir_variable *deref);
96
#endif // SFN_EMITTEXINSTRUCTION_H