lima/gpir: add helper function for emit load node

Reviewed-by: Vasily Khoruzhick <anarsoul@gmail.com>
Reviewed-by: Erico Nunes <nunes.erico@gmail.com>
Signed-off-by: Qiang Yu <yuq825@gmail.com>
This commit is contained in:
Qiang Yu
2019-04-21 09:54:46 +08:00
parent ac779ff2b7
commit 4a74e28130

View File

@@ -153,37 +153,36 @@ static bool gpir_emit_alu(gpir_block *block, nir_instr *ni)
return true; return true;
} }
static gpir_node *gpir_create_load(gpir_block *block, nir_dest *dest,
int op, int index, int component)
{
gpir_load_node *load = gpir_node_create_dest(block, op, dest);
if (unlikely(!load))
return NULL;
load->index = index;
load->component = component;
return &load->node;
}
static bool gpir_emit_intrinsic(gpir_block *block, nir_instr *ni) static bool gpir_emit_intrinsic(gpir_block *block, nir_instr *ni)
{ {
nir_intrinsic_instr *instr = nir_instr_as_intrinsic(ni); nir_intrinsic_instr *instr = nir_instr_as_intrinsic(ni);
switch (instr->intrinsic) { switch (instr->intrinsic) {
case nir_intrinsic_load_input: case nir_intrinsic_load_input:
{ return gpir_create_load(block, &instr->dest,
gpir_load_node *load = gpir_op_load_attribute,
gpir_node_create_dest(block, gpir_op_load_attribute, &instr->dest); nir_intrinsic_base(instr),
if (unlikely(!load)) nir_intrinsic_component(instr)) != NULL;
return false;
load->index = nir_intrinsic_base(instr);
load->component = nir_intrinsic_component(instr);
return true;
}
case nir_intrinsic_load_uniform: case nir_intrinsic_load_uniform:
{ {
gpir_load_node *load =
gpir_node_create_dest(block, gpir_op_load_uniform, &instr->dest);
if (unlikely(!load))
return false;
int offset = nir_intrinsic_base(instr); int offset = nir_intrinsic_base(instr);
offset += (int)nir_src_as_float(instr->src[0]); offset += (int)nir_src_as_float(instr->src[0]);
load->index = offset / 4; return gpir_create_load(block, &instr->dest,
load->component = offset % 4; gpir_op_load_uniform,
offset / 4, offset % 4) != NULL;
return true;
} }
case nir_intrinsic_store_output: case nir_intrinsic_store_output:
{ {