mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-06-09 23:08:18 +02:00
lavapipe: Add lvp_nir_lower_push_constants
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/39496>
This commit is contained in:
parent
a4bdc0ba0d
commit
a12e7c85f5
4 changed files with 43 additions and 14 deletions
|
|
@ -16,6 +16,7 @@ liblvp_files = files(
|
|||
'nir/lvp_nir_lower_exec_graph.c',
|
||||
'nir/lvp_nir_lower_input_attachments.c',
|
||||
'nir/lvp_nir_lower_pipeline_layout.c',
|
||||
'nir/lvp_nir_lower_push_constants.c',
|
||||
'nir/lvp_nir_lower_ray_queries.c',
|
||||
'nir/lvp_nir_lower_sparse_residency.c',
|
||||
'nir/lvp_nir_opt_robustness.c',
|
||||
|
|
|
|||
|
|
@ -114,6 +114,8 @@ void lvp_lower_pipeline_layout(const struct lvp_device *device,
|
|||
struct lvp_pipeline_layout *layout,
|
||||
nir_shader *shader);
|
||||
|
||||
bool lvp_nir_lower_push_constants(nir_shader *shader);
|
||||
|
||||
bool lvp_nir_lower_ray_queries(struct nir_shader *shader);
|
||||
|
||||
bool lvp_nir_lower_sparse_residency(struct nir_shader *shader);
|
||||
|
|
|
|||
|
|
@ -196,16 +196,6 @@ lower_load_ubo(nir_builder *b, nir_intrinsic_instr *intrin, void *data_cb)
|
|||
return true;
|
||||
}
|
||||
|
||||
static void
|
||||
lower_push_constant(nir_builder *b, nir_intrinsic_instr *intrin, void *data_cb)
|
||||
{
|
||||
nir_def *load = nir_load_ubo(b, intrin->def.num_components, intrin->def.bit_size,
|
||||
nir_imm_int(b, 0), intrin->src[0].ssa,
|
||||
.range = nir_intrinsic_range(intrin));
|
||||
nir_def_rewrite_uses(&intrin->def, load);
|
||||
nir_instr_remove(&intrin->instr);
|
||||
}
|
||||
|
||||
static bool
|
||||
lower_vri_instr(struct nir_builder *b, nir_instr *instr, void *data_cb)
|
||||
{
|
||||
|
|
@ -260,10 +250,6 @@ lower_vri_instr(struct nir_builder *b, nir_instr *instr, void *data_cb)
|
|||
lower_image_intrinsic(b, intrin, data_cb);
|
||||
return true;
|
||||
|
||||
case nir_intrinsic_load_push_constant:
|
||||
lower_push_constant(b, intrin, data_cb);
|
||||
return true;
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,40 @@
|
|||
/*
|
||||
* Copyright © 2025 Valve Corporation
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include "lvp_private.h"
|
||||
#include "lvp_nir.h"
|
||||
|
||||
static void
|
||||
lower_push_constant(nir_builder *b, nir_intrinsic_instr *intrin, void *data_cb)
|
||||
{
|
||||
nir_def *load = nir_load_ubo(b, intrin->def.num_components, intrin->def.bit_size,
|
||||
nir_imm_int(b, 0), intrin->src[0].ssa,
|
||||
.range = nir_intrinsic_range(intrin));
|
||||
nir_def_rewrite_uses(&intrin->def, load);
|
||||
nir_instr_remove(&intrin->instr);
|
||||
}
|
||||
|
||||
static bool
|
||||
pass(struct nir_builder *b, nir_intrinsic_instr *intr, void *data)
|
||||
{
|
||||
b->cursor = nir_before_instr(&intr->instr);
|
||||
|
||||
if (intr->intrinsic != nir_intrinsic_load_push_constant)
|
||||
return false;
|
||||
|
||||
nir_def *load = nir_load_ubo(b, intr->def.num_components, intr->def.bit_size,
|
||||
nir_imm_int(b, 0), intr->src[0].ssa,
|
||||
.range = nir_intrinsic_range(intr));
|
||||
nir_def_replace(&intr->def, load);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
lvp_nir_lower_push_constants(nir_shader *shader)
|
||||
{
|
||||
nir_shader_intrinsics_pass(shader, pass, nir_metadata_control_flow, NULL);
|
||||
}
|
||||
|
||||
Loading…
Add table
Reference in a new issue