mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-21 23:50:22 +01:00
nak: add algebraic lowering pass
Lowering and file copied from bifrost_nir_algebraic.py Signed-off-by: Karol Herbst <kherbst@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26214>
This commit is contained in:
parent
8c73b1eb90
commit
cedb101d3f
4 changed files with 78 additions and 2 deletions
|
|
@ -120,9 +120,20 @@ _libnak_rs = static_library(
|
|||
link_with: [_libbitview_rs, libnak_bindings_gen, _libnak_ir_proc_rs],
|
||||
)
|
||||
|
||||
nak_nir_algebraic_c = custom_target(
|
||||
'nak_nir_algebraic.c',
|
||||
input : 'nak_nir_algebraic.py',
|
||||
output : 'nak_nir_algebraic.c',
|
||||
command : [
|
||||
prog_python, '@INPUT@', '-p', dir_compiler_nir,
|
||||
],
|
||||
capture : true,
|
||||
depend_files : nir_algebraic_depends,
|
||||
)
|
||||
|
||||
_libnak = static_library(
|
||||
'nak',
|
||||
libnak_c_files,
|
||||
[libnak_c_files, nak_nir_algebraic_c],
|
||||
include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium],
|
||||
dependencies : libnak_deps,
|
||||
link_with : [_libnak_rs],
|
||||
|
|
|
|||
|
|
@ -1208,7 +1208,9 @@ nak_postprocess_nir(nir_shader *nir,
|
|||
|
||||
do {
|
||||
progress = false;
|
||||
if (OPT(nir, nir_opt_algebraic_late)) {
|
||||
OPT(nir, nir_opt_algebraic_late);
|
||||
OPT(nir, nak_nir_lower_algebraic_late, nak);
|
||||
if (progress) {
|
||||
OPT(nir, nir_opt_constant_folding);
|
||||
OPT(nir, nir_copy_prop);
|
||||
OPT(nir, nir_opt_dce);
|
||||
|
|
|
|||
62
src/nouveau/compiler/nak_nir_algebraic.py
Normal file
62
src/nouveau/compiler/nak_nir_algebraic.py
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
# Copyright (C) 2023 Red Hat, Inc.
|
||||
# Copyright (C) 2021 Collabora, Ltd.
|
||||
# Copyright (C) 2016 Intel Corporation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice (including the next
|
||||
# paragraph) shall be included in all copies or substantial portions of the
|
||||
# Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
# IN THE SOFTWARE.
|
||||
|
||||
import argparse
|
||||
import sys
|
||||
|
||||
a = 'a'
|
||||
b = 'b'
|
||||
|
||||
# common conditions to improve readability
|
||||
volta = 'nak->sm >= 70 && nak->sm < 75'
|
||||
|
||||
algebraic_lowering = [
|
||||
# Volta doesn't have `IMNMX`
|
||||
(('imin', 'a', 'b'), ('bcsel', ('ilt', a, b), a, b), volta),
|
||||
(('imax', 'a', 'b'), ('bcsel', ('ilt', a, b), b, a), volta),
|
||||
(('umin', 'a', 'b'), ('bcsel', ('ult', a, b), a, b), volta),
|
||||
(('umax', 'a', 'b'), ('bcsel', ('ult', a, b), b, a), volta),
|
||||
]
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('-p', '--import-path', required=True)
|
||||
args = parser.parse_args()
|
||||
sys.path.insert(0, args.import_path)
|
||||
run()
|
||||
|
||||
|
||||
def run():
|
||||
import nir_algebraic # pylint: disable=import-error
|
||||
|
||||
print('#include "nak_private.h"')
|
||||
|
||||
print(nir_algebraic.AlgebraicPass("nak_nir_lower_algebraic_late",
|
||||
algebraic_lowering,
|
||||
[
|
||||
("const struct nak_compiler *", "nak"),
|
||||
]).render())
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
|
@ -146,6 +146,7 @@ struct nak_nir_tex_flags {
|
|||
bool nak_nir_lower_scan_reduce(nir_shader *shader);
|
||||
bool nak_nir_lower_tex(nir_shader *nir, const struct nak_compiler *nak);
|
||||
bool nak_nir_lower_gs_intrinsics(nir_shader *shader);
|
||||
bool nak_nir_lower_algebraic_late(nir_shader *nir, const struct nak_compiler *nak);
|
||||
|
||||
struct nak_nir_attr_io_flags {
|
||||
bool output : 1;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue