lima/ppir: switch to derivative intrinsics

Signed-off-by: Erico Nunes <nunes.erico@gmail.com>
Reviewed-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30661>
This commit is contained in:
Erico Nunes
2024-08-14 01:19:44 +02:00
committed by Marge Bot
parent cc5d481f41
commit 749d7e96bf
2 changed files with 33 additions and 2 deletions
+32 -2
View File
@@ -151,8 +151,6 @@ static int nir_to_ppir_opcodes[nir_num_opcodes] = {
[nir_op_inot] = ppir_op_not,
[nir_op_ftrunc] = ppir_op_trunc,
[nir_op_fsat] = ppir_op_sat,
[nir_op_fddx] = ppir_op_ddx,
[nir_op_fddy] = ppir_op_ddy,
[nir_op_fclamp_pos_mali] = ppir_op_clamp_pos,
};
@@ -200,6 +198,33 @@ static bool ppir_emit_alu(ppir_block *block, nir_instr *ni)
return true;
}
static bool ppir_emit_derivative(ppir_block *block, nir_instr *ni, int op)
{
assert(op == ppir_op_ddx || op == ppir_op_ddy);
nir_intrinsic_instr *instr = nir_instr_as_intrinsic(ni);
nir_def *def = &instr->def;
unsigned mask = nir_component_mask(def->num_components);
ppir_alu_node *node = ppir_node_create_dest(block, op, def, mask);
if (!node)
return false;
ppir_dest *pd = &node->dest;
unsigned src_mask = pd->write_mask;
uint8_t identity[4] = { PIPE_SWIZZLE_X, PIPE_SWIZZLE_Y,
PIPE_SWIZZLE_Z, PIPE_SWIZZLE_W };
node->num_src = 1;
nir_src *intr_src = instr->src;
ppir_src *ps = node->src;
memcpy(ps->swizzle, identity, sizeof(identity));
ppir_node_add_src(block->comp, &node->node, ps, intr_src, src_mask);
list_addtail(&node->node.list, &block->node_list);
return true;
}
static ppir_block *ppir_block_create(ppir_compiler *comp);
static bool ppir_emit_discard_block(ppir_compiler *comp)
@@ -416,6 +441,11 @@ static bool ppir_emit_intrinsic(ppir_block *block, nir_instr *ni)
list_addtail(&node->list, &block->node_list);
return true;
case nir_intrinsic_ddx:
return ppir_emit_derivative(block, ni, ppir_op_ddx);
case nir_intrinsic_ddy:
return ppir_emit_derivative(block, ni, ppir_op_ddy);
default:
ppir_error("unsupported nir_intrinsic_instr %s\n",
nir_intrinsic_infos[instr->intrinsic].name);
+1
View File
@@ -86,6 +86,7 @@ static const nir_shader_compiler_options fs_nir_options = {
.force_indirect_unrolling_sampler = true,
.lower_varying_from_uniform = true,
.max_unroll_iterations = 32,
.has_ddx_intrinsics = true,
};
const void *