tgsi: Add ureg_DECL_immediate_block_uint().
Allows declaring a contiguous block of immediates. Useful for relative indexing.
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user