tgsi/ureg: add ureg_DECL_output_layout

For specifying an exact location/component.

v2: change the order of parameters (Dave)

Reviewed-by: Edward O'Callaghan <funfunctor@folklore1984.net> (v1)
Reviewed-by: Dave Airlie <airlied@redhat.com> (v1)
This commit is contained in:
Nicolai Hähnle 2016-10-12 17:24:37 +02:00
parent 047a7c7a0b
commit 2b460c750a
2 changed files with 38 additions and 13 deletions

View File

@ -405,9 +405,10 @@ out:
}
struct ureg_dst
ureg_DECL_output_masked(struct ureg_program *ureg,
unsigned name,
struct ureg_dst
ureg_DECL_output_layout(struct ureg_program *ureg,
unsigned semantic_name,
unsigned semantic_index,
unsigned index,
unsigned usage_mask,
unsigned array_id,
@ -418,22 +419,24 @@ ureg_DECL_output_masked(struct ureg_program *ureg,
assert(usage_mask != 0);
for (i = 0; i < ureg->nr_outputs; i++) {
if (ureg->output[i].semantic_name == name &&
ureg->output[i].semantic_index == index) {
assert(ureg->output[i].array_id == array_id);
ureg->output[i].usage_mask |= usage_mask;
goto out;
if (ureg->output[i].semantic_name == semantic_name &&
ureg->output[i].semantic_index == semantic_index) {
if (ureg->output[i].array_id == array_id) {
ureg->output[i].usage_mask |= usage_mask;
goto out;
}
assert((ureg->output[i].usage_mask & usage_mask) == 0);
}
}
if (ureg->nr_outputs < UREG_MAX_OUTPUT) {
ureg->output[i].semantic_name = name;
ureg->output[i].semantic_index = index;
ureg->output[i].semantic_name = semantic_name;
ureg->output[i].semantic_index = semantic_index;
ureg->output[i].usage_mask = usage_mask;
ureg->output[i].first = ureg->nr_output_regs;
ureg->output[i].last = ureg->nr_output_regs + array_size - 1;
ureg->output[i].first = index;
ureg->output[i].last = index + array_size - 1;
ureg->output[i].array_id = array_id;
ureg->nr_output_regs += array_size;
ureg->nr_output_regs = MAX2(ureg->nr_output_regs, index + array_size);
ureg->nr_outputs++;
}
else {
@ -446,6 +449,19 @@ out:
}
struct ureg_dst
ureg_DECL_output_masked(struct ureg_program *ureg,
unsigned name,
unsigned index,
unsigned usage_mask,
unsigned array_id,
unsigned array_size)
{
return ureg_DECL_output_layout(ureg, name, index,
ureg->nr_output_regs, usage_mask, array_id, array_size);
}
struct ureg_dst
ureg_DECL_output(struct ureg_program *ureg,
unsigned name,

View File

@ -247,6 +247,15 @@ ureg_DECL_system_value(struct ureg_program *,
unsigned semantic_name,
unsigned semantic_index);
struct ureg_dst
ureg_DECL_output_layout(struct ureg_program *,
unsigned semantic_name,
unsigned semantic_index,
unsigned index,
unsigned usage_mask,
unsigned array_id,
unsigned array_size);
struct ureg_dst
ureg_DECL_output_masked(struct ureg_program *,
unsigned semantic_name,