tgsi/ureg: merge input and fs_input arrays

This commit is contained in:
Marek Olšák
2015-05-10 16:51:32 +02:00
parent 3b1d157751
commit d3fbc65986

View File

@@ -107,18 +107,11 @@ struct ureg_program
unsigned first; unsigned first;
unsigned last; unsigned last;
unsigned array_id; unsigned array_id;
} fs_input[UREG_MAX_INPUT]; } input[UREG_MAX_INPUT];
unsigned nr_fs_inputs, nr_fs_input_regs; unsigned nr_inputs, nr_input_regs;
unsigned vs_inputs[UREG_MAX_INPUT/32]; unsigned vs_inputs[UREG_MAX_INPUT/32];
struct {
unsigned index;
unsigned semantic_name;
unsigned semantic_index;
} input[UREG_MAX_INPUT];
unsigned nr_inputs;
struct { struct {
unsigned index; unsigned index;
unsigned semantic_name; unsigned semantic_name;
@@ -263,35 +256,35 @@ ureg_DECL_fs_input_cyl_centroid(struct ureg_program *ureg,
{ {
unsigned i; unsigned i;
for (i = 0; i < ureg->nr_fs_inputs; i++) { for (i = 0; i < ureg->nr_inputs; i++) {
if (ureg->fs_input[i].semantic_name == semantic_name && if (ureg->input[i].semantic_name == semantic_name &&
ureg->fs_input[i].semantic_index == semantic_index) { ureg->input[i].semantic_index == semantic_index) {
assert(ureg->fs_input[i].interp == interp_mode); assert(ureg->input[i].interp == interp_mode);
assert(ureg->fs_input[i].cylindrical_wrap == cylindrical_wrap); assert(ureg->input[i].cylindrical_wrap == cylindrical_wrap);
assert(ureg->fs_input[i].interp_location == interp_location); assert(ureg->input[i].interp_location == interp_location);
assert(ureg->fs_input[i].array_id == array_id); assert(ureg->input[i].array_id == array_id);
goto out; goto out;
} }
} }
if (ureg->nr_fs_inputs < UREG_MAX_INPUT) { if (ureg->nr_inputs < UREG_MAX_INPUT) {
assert(array_size >= 1); assert(array_size >= 1);
ureg->fs_input[i].semantic_name = semantic_name; ureg->input[i].semantic_name = semantic_name;
ureg->fs_input[i].semantic_index = semantic_index; ureg->input[i].semantic_index = semantic_index;
ureg->fs_input[i].interp = interp_mode; ureg->input[i].interp = interp_mode;
ureg->fs_input[i].cylindrical_wrap = cylindrical_wrap; ureg->input[i].cylindrical_wrap = cylindrical_wrap;
ureg->fs_input[i].interp_location = interp_location; ureg->input[i].interp_location = interp_location;
ureg->fs_input[i].first = ureg->nr_fs_input_regs; ureg->input[i].first = ureg->nr_input_regs;
ureg->fs_input[i].last = ureg->nr_fs_input_regs + array_size - 1; ureg->input[i].last = ureg->nr_input_regs + array_size - 1;
ureg->fs_input[i].array_id = array_id; ureg->input[i].array_id = array_id;
ureg->nr_fs_input_regs += array_size; ureg->nr_input_regs += array_size;
ureg->nr_fs_inputs++; ureg->nr_inputs++;
} else { } else {
set_bad(ureg); set_bad(ureg);
} }
out: out:
return ureg_src_array_register(TGSI_FILE_INPUT, ureg->fs_input[i].first, return ureg_src_array_register(TGSI_FILE_INPUT, ureg->input[i].first,
array_id); array_id);
} }
@@ -312,19 +305,8 @@ ureg_DECL_input(struct ureg_program *ureg,
unsigned semantic_name, unsigned semantic_name,
unsigned semantic_index) unsigned semantic_index)
{ {
int i = 0; return ureg_DECL_fs_input_cyl_centroid(ureg, semantic_name, semantic_index,
0, 0, 0, 0, 1);
if (ureg->nr_inputs < UREG_MAX_INPUT) {
i = ureg->nr_inputs;
ureg->input[i].index = i;
ureg->input[i].semantic_name = semantic_name;
ureg->input[i].semantic_index = semantic_index;
ureg->nr_inputs++;
} else {
set_bad(ureg);
}
return ureg_src_register(TGSI_FILE_INPUT, i);
} }
@@ -1486,23 +1468,23 @@ static void emit_decls( struct ureg_program *ureg )
} }
} }
} else if (ureg->processor == TGSI_PROCESSOR_FRAGMENT) { } else if (ureg->processor == TGSI_PROCESSOR_FRAGMENT) {
for (i = 0; i < ureg->nr_fs_inputs; i++) { for (i = 0; i < ureg->nr_inputs; i++) {
emit_decl_fs(ureg, emit_decl_fs(ureg,
TGSI_FILE_INPUT, TGSI_FILE_INPUT,
ureg->fs_input[i].first, ureg->input[i].first,
ureg->fs_input[i].last, ureg->input[i].last,
ureg->fs_input[i].semantic_name, ureg->input[i].semantic_name,
ureg->fs_input[i].semantic_index, ureg->input[i].semantic_index,
ureg->fs_input[i].interp, ureg->input[i].interp,
ureg->fs_input[i].cylindrical_wrap, ureg->input[i].cylindrical_wrap,
ureg->fs_input[i].interp_location, ureg->input[i].interp_location,
ureg->fs_input[i].array_id); ureg->input[i].array_id);
} }
} else { } else {
for (i = 0; i < ureg->nr_inputs; i++) { for (i = 0; i < ureg->nr_inputs; i++) {
emit_decl_semantic(ureg, emit_decl_semantic(ureg,
TGSI_FILE_INPUT, TGSI_FILE_INPUT,
ureg->input[i].index, ureg->input[i].first,
ureg->input[i].semantic_name, ureg->input[i].semantic_name,
ureg->input[i].semantic_index, ureg->input[i].semantic_index,
TGSI_WRITEMASK_XYZW); TGSI_WRITEMASK_XYZW);