tgsi: Add ureg_DECL_immediate_block_uint().

Allows declaring a contiguous block of immediates. Useful for
relative indexing.
This commit is contained in:
Michal Krol
2010-01-18 12:11:05 +01:00
parent 4c041fac96
commit 4698a865e0
2 changed files with 34 additions and 0 deletions
+29
View File
@@ -655,6 +655,35 @@ ureg_DECL_immediate_uint( struct ureg_program *ureg,
}
struct ureg_src
ureg_DECL_immediate_block_uint( struct ureg_program *ureg,
const unsigned *v,
unsigned nr )
{
uint index;
uint i;
if (ureg->nr_immediates + (nr + 3) / 4 > UREG_MAX_IMMEDIATE) {
set_bad(ureg);
return ureg_src_register(TGSI_FILE_IMMEDIATE, 0);
}
index = ureg->nr_immediates;
ureg->nr_immediates += (nr + 3) / 4;
for (i = index; i < ureg->nr_immediates; i++) {
ureg->immediate[i].type = TGSI_IMM_UINT32;
ureg->immediate[i].nr = nr > 4 ? 4 : nr;
memcpy(ureg->immediate[i].value.u,
&v[(i - index) * 4],
ureg->immediate[i].nr * sizeof(uint));
nr -= 4;
}
return ureg_src_register(TGSI_FILE_IMMEDIATE, index);
}
struct ureg_src
ureg_DECL_immediate_int( struct ureg_program *ureg,
const int *v,
+5
View File
@@ -167,6 +167,11 @@ ureg_DECL_immediate_uint( struct ureg_program *,
const unsigned *v,
unsigned nr );
struct ureg_src
ureg_DECL_immediate_block_uint( struct ureg_program *,
const unsigned *v,
unsigned nr );
struct ureg_src
ureg_DECL_immediate_int( struct ureg_program *,
const int *v,