• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* -*- mesa-c++  -*-
2  *
3  * Copyright (c) 2022 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 ALUREADPORTVALIDATION_H
28 #define ALUREADPORTVALIDATION_H
29 
30 #include "sfn_instr_alu.h"
31 
32 namespace r600 {
33 
34 class AluReadportReservation {
35 public:
36    AluReadportReservation();
37    AluReadportReservation(const AluReadportReservation& orig) = default;
38    AluReadportReservation& operator = (const AluReadportReservation& orig) = default;
39 
40    bool schedule_vec_src(PVirtualValue src[3],  int nsrc, AluBankSwizzle swz);
41 
42    bool schedule_vec_instruction(const AluInstr& alu, AluBankSwizzle swz);
43    bool schedule_trans_instruction(const AluInstr& alu, AluBankSwizzle swz);
44 
45    bool reserve_gpr(int sel, int chan, int cycle);
46    bool reserve_const(const UniformValue& value);
47 
48    bool add_literal(uint32_t value);
49 
50    static int cycle_vec(AluBankSwizzle swz, int src);
51    static int cycle_trans(AluBankSwizzle swz, int src);
52 
53    static const int max_chan_channels = 4;
54    static const int max_gpr_readports = 3;
55 
56    std::array<std::array<int, max_chan_channels>, max_gpr_readports> m_hw_gpr;
57    std::array<int, max_chan_channels> m_hw_const_addr;
58    std::array<int, max_chan_channels>  m_hw_const_chan;
59    std::array<int, max_chan_channels>  m_hw_const_bank;
60    std::array<uint32_t, max_chan_channels> m_literals;
61    uint32_t m_nliterals{0};
62 };
63 
64 
65 }
66 
67 #endif // ALUREADPORTVALIDATION_H
68