nir: Support 8 and 16 component vectors for reduceable intrinsics
Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com> Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6030>
This commit is contained in:
@@ -77,7 +77,7 @@ class Opcode(object):
|
||||
assert len(input_sizes) == len(input_types)
|
||||
assert 0 <= output_size <= 4 or (output_size == 8) or (output_size == 16)
|
||||
for size in input_sizes:
|
||||
assert 0 <= size <= 4
|
||||
assert 0 <= size <= 4 or (size == 8) or (size == 16)
|
||||
if output_size != 0:
|
||||
assert size != 0
|
||||
self.name = name
|
||||
@@ -544,19 +544,18 @@ def binop_reduce(name, output_size, output_type, src_type, prereduce_expr,
|
||||
return reduce_expr.format(src0=src0, src1=src1)
|
||||
def prereduce(src0, src1):
|
||||
return "(" + prereduce_expr.format(src0=src0, src1=src1) + ")"
|
||||
src0 = prereduce("src0.x", "src1.x")
|
||||
src1 = prereduce("src0.y", "src1.y")
|
||||
src2 = prereduce("src0.z", "src1.z")
|
||||
src3 = prereduce("src0.w", "src1.w")
|
||||
opcode(name + "2", output_size, output_type,
|
||||
[2, 2], [src_type, src_type], False, _2src_commutative,
|
||||
final(reduce_(src0, src1)))
|
||||
srcs = [prereduce("src0." + letter, "src1." + letter) for letter in "xyzwefghijklmnop"]
|
||||
def pairwise_reduce(start, size):
|
||||
if (size == 1):
|
||||
return srcs[start]
|
||||
return reduce_(pairwise_reduce(start, size // 2), pairwise_reduce(start + size // 2, size // 2))
|
||||
for size in [2, 4, 8, 16]:
|
||||
opcode(name + str(size), output_size, output_type,
|
||||
[size, size], [src_type, src_type], False, _2src_commutative,
|
||||
final(pairwise_reduce(0, size)))
|
||||
opcode(name + "3", output_size, output_type,
|
||||
[3, 3], [src_type, src_type], False, _2src_commutative,
|
||||
final(reduce_(reduce_(src0, src1), src2)))
|
||||
opcode(name + "4", output_size, output_type,
|
||||
[4, 4], [src_type, src_type], False, _2src_commutative,
|
||||
final(reduce_(reduce_(src0, src1), reduce_(src2, src3))))
|
||||
final(reduce_(reduce_(srcs[0], srcs[1]), srcs[2])))
|
||||
|
||||
def binop_reduce_all_sizes(name, output_size, src_type, prereduce_expr,
|
||||
reduce_expr, final_expr):
|
||||
|
||||
Reference in New Issue
Block a user