From 47ed0b41be03a1a98eeeb8422fc0d8b5f0efcb60 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Mon, 6 Feb 2023 10:49:32 -0500 Subject: [PATCH] nir: Add Mali load_output taking converison Mali's LD_TILE instruction (mapping to NIR's load_output) requires a "conversion descriptor" specifying how to convert from the register foramt to the tilebuffer format. To implement framebuffer fetch on OpenGL without shader variants, we generate these descriptors in the driver and pass them in a uniform. However, to comply with the Ekstrand Rule, we can't have magically materialized system values -- they should come only from the NIR where the driver can lower as it pleases (e.g. PanVK can lower to a constant because it knows the framebuffer format at pipeline create time). Add intrinsics to model this. Signed-off-by: Alyssa Rosenzweig Reviewed-by: Boris Brezillon Part-of: --- src/compiler/nir/nir_intrinsics.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/compiler/nir/nir_intrinsics.py b/src/compiler/nir/nir_intrinsics.py index 93c5edf..74b301b 100644 --- a/src/compiler/nir/nir_intrinsics.py +++ b/src/compiler/nir/nir_intrinsics.py @@ -1298,6 +1298,14 @@ load("raw_output_pan", [1], [IO_SEMANTICS], [CAN_ELIMINATE, CAN_REORDER]) # src[] = { sampler_index } load("sampler_lod_parameters_pan", [1], flags=[CAN_ELIMINATE, CAN_REORDER]) +# Like load_output but using a specified render target conversion descriptor +load("converted_output_pan", [1], indices=[DEST_TYPE, IO_SEMANTICS], flags=[CAN_ELIMINATE]) + +# Load the render target conversion descriptor for a given render target given +# in the BASE index. Converts to a type with size given by the source type. +# Valid in fragment and blend stages. +system_value("rt_conversion_pan", 1, indices=[BASE, SRC_TYPE], bit_sizes=[32]) + # Loads the sample position array on Bifrost, in a packed Arm-specific format system_value("sample_positions_pan", 1, bit_sizes=[64]) -- 2.7.4