~mmach/netext73/mesa-haswell

« back to all changes in this revision

Viewing changes to src/gallium/drivers/r600/sfn/sfn_instruction_tex.h

  • Committer: mmach
  • Date: 2022-09-22 19:56:13 UTC
  • Revision ID: netbit73@gmail.com-20220922195613-wtik9mmy20tmor0i
2022-09-22 21:17:09

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* -*- mesa-c++  -*-
2
 
 *
3
 
 * Copyright (c) 2019 Collabora LTD
4
 
 *
5
 
 * Author: Gert Wollny <gert.wollny@collabora.com>
6
 
 *
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:
13
 
 *
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
16
 
 * Software.
17
 
 *
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.
25
 
 */
26
 
 
27
 
#ifndef INSTRUCTION_TEX_H
28
 
#define INSTRUCTION_TEX_H
29
 
 
30
 
#include "sfn_instruction_base.h"
31
 
 
32
 
namespace r600 {
33
 
 
34
 
class TexInstruction : public Instruction {
35
 
public:
36
 
   enum Opcode {
37
 
      ld = FETCH_OP_LD,
38
 
      get_resinfo = FETCH_OP_GET_TEXTURE_RESINFO,
39
 
      get_nsampled = FETCH_OP_GET_NUMBER_OF_SAMPLES,
40
 
      get_tex_lod = FETCH_OP_GET_LOD,
41
 
      get_gradient_h = FETCH_OP_GET_GRADIENTS_H,
42
 
      get_gradient_v = FETCH_OP_GET_GRADIENTS_V,
43
 
      set_offsets = FETCH_OP_SET_TEXTURE_OFFSETS,
44
 
      keep_gradients = FETCH_OP_KEEP_GRADIENTS,
45
 
      set_gradient_h = FETCH_OP_SET_GRADIENTS_H,
46
 
      set_gradient_v = FETCH_OP_SET_GRADIENTS_V,
47
 
      sample = FETCH_OP_SAMPLE,
48
 
      sample_l = FETCH_OP_SAMPLE_L,
49
 
      sample_lb = FETCH_OP_SAMPLE_LB,
50
 
      sample_lz = FETCH_OP_SAMPLE_LZ,
51
 
      sample_g = FETCH_OP_SAMPLE_G,
52
 
      sample_g_lb = FETCH_OP_SAMPLE_G_L,
53
 
      gather4 = FETCH_OP_GATHER4,
54
 
      gather4_o =  FETCH_OP_GATHER4_O,
55
 
 
56
 
      sample_c = FETCH_OP_SAMPLE_C,
57
 
      sample_c_l = FETCH_OP_SAMPLE_C_L,
58
 
      sample_c_lb = FETCH_OP_SAMPLE_C_LB,
59
 
      sample_c_lz = FETCH_OP_SAMPLE_C_LZ,
60
 
      sample_c_g = FETCH_OP_SAMPLE_C_G,
61
 
      sample_c_g_lb = FETCH_OP_SAMPLE_C_G_L,
62
 
      gather4_c = FETCH_OP_GATHER4_C,
63
 
      gather4_c_o =  FETCH_OP_GATHER4_C_O,
64
 
 
65
 
   };
66
 
 
67
 
   enum Flags {
68
 
      x_unnormalized,
69
 
      y_unnormalized,
70
 
      z_unnormalized,
71
 
      w_unnormalized,
72
 
      grad_fine
73
 
   };
74
 
 
75
 
   TexInstruction(Opcode op, const GPRVector& dest, const GPRVector& src, unsigned sid,
76
 
                  unsigned rid, PValue sampler_offset);
77
 
 
78
 
   const GPRVector& src() const {return m_src;}
79
 
   const GPRVector& dst() const {return m_dst;}
80
 
   unsigned opcode() const {return m_opcode;}
81
 
   unsigned sampler_id() const {return m_sampler_id;}
82
 
   unsigned resource_id() const {return m_resource_id;}
83
 
 
84
 
   void replace_values(const ValueSet& candidates, PValue new_value) override;
85
 
 
86
 
   void set_offset(unsigned index, int32_t val);
87
 
   int get_offset(unsigned index) const;
88
 
 
89
 
   void set_inst_mode(int inst_mode) { m_inst_mode = inst_mode;}
90
 
 
91
 
   int inst_mode() const { return m_inst_mode;}
92
 
 
93
 
   void set_flag(Flags flag) {
94
 
      m_flags.set(flag);
95
 
   }
96
 
 
97
 
   PValue sampler_offset() const {
98
 
      return m_sampler_offset;
99
 
   }
100
 
 
101
 
   bool has_flag(Flags flag) const {
102
 
      return m_flags.test(flag);
103
 
   }
104
 
 
105
 
   int dest_swizzle(int i) const {
106
 
      assert(i < 4);
107
 
      return m_dest_swizzle[i];
108
 
   }
109
 
 
110
 
   void set_dest_swizzle(const std::array<int,4>& swz) {
111
 
      m_dest_swizzle = swz;
112
 
   }
113
 
 
114
 
   void set_gather_comp(int cmp);
115
 
 
116
 
   bool accept(InstructionVisitor& visitor) override {return visitor.visit(*this);}
117
 
   bool accept(ConstInstructionVisitor& visitor) const override {return visitor.visit(*this);}
118
 
 
119
 
private:
120
 
   bool is_equal_to(const Instruction& lhs) const override;
121
 
   void do_print(std::ostream& os) const override;
122
 
 
123
 
   static const char *opname(Opcode code);
124
 
 
125
 
   Opcode m_opcode;
126
 
   GPRVector m_dst;
127
 
   GPRVector m_src;
128
 
   unsigned m_sampler_id;
129
 
   unsigned m_resource_id;
130
 
   std::bitset<8> m_flags;
131
 
   int m_offset[3];
132
 
   int m_inst_mode;
133
 
   std::array<int,4> m_dest_swizzle;
134
 
   PValue m_sampler_offset;
135
 
};
136
 
 
137
 
bool r600_nir_lower_int_tg4(nir_shader *nir);
138
 
bool r600_nir_lower_txl_txf_array_or_cube(nir_shader *shader);
139
 
bool r600_nir_lower_cube_to_2darray(nir_shader *shader);
140
 
 
141
 
}
142
 
 
143
 
#endif // INSTRUCTION_TEX_H