mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 02:48:06 +02:00
st/mesa: translate shader system inputs
This commit is contained in:
parent
2d62fb6c3f
commit
2b5e1e5287
1 changed files with 27 additions and 0 deletions
|
|
@ -72,6 +72,7 @@ struct st_translate {
|
|||
struct ureg_src inputs[PIPE_MAX_SHADER_INPUTS];
|
||||
struct ureg_dst address[1];
|
||||
struct ureg_src samplers[PIPE_MAX_SAMPLERS];
|
||||
struct ureg_src systemValues[SYSTEM_VALUE_MAX];
|
||||
|
||||
/* Extra info for handling point size clamping in vertex shader */
|
||||
struct ureg_dst pointSizeResult; /**< Actual point size output register */
|
||||
|
|
@ -104,6 +105,13 @@ struct st_translate {
|
|||
};
|
||||
|
||||
|
||||
/** Map Mesa's SYSTEM_VALUE_x to TGSI_SEMANTIC_x */
|
||||
static unsigned mesa_sysval_to_semantic[SYSTEM_VALUE_MAX] = {
|
||||
TGSI_SEMANTIC_FACE,
|
||||
TGSI_SEMANTIC_INSTANCEID
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Make note of a branch to a label in the TGSI code.
|
||||
* After we've emitted all instructions, we'll go over the list
|
||||
|
|
@ -245,6 +253,10 @@ src_register( struct st_translate *t,
|
|||
case PROGRAM_ADDRESS:
|
||||
return ureg_src(t->address[index]);
|
||||
|
||||
case PROGRAM_SYSTEM_VALUE:
|
||||
assert(index < Elements(t->systemValues));
|
||||
return t->systemValues[index];
|
||||
|
||||
default:
|
||||
debug_assert( 0 );
|
||||
return ureg_src_undef();
|
||||
|
|
@ -1076,6 +1088,21 @@ st_translate_mesa_program(
|
|||
t->address[0] = ureg_DECL_address( ureg );
|
||||
}
|
||||
|
||||
/* Declare misc input registers
|
||||
*/
|
||||
{
|
||||
GLbitfield sysInputs = program->SystemValuesRead;
|
||||
unsigned numSys = 0;
|
||||
for (i = 0; sysInputs; i++) {
|
||||
if (sysInputs & (1 << i)) {
|
||||
unsigned semName = mesa_sysval_to_semantic[i];
|
||||
t->systemValues[i] = ureg_DECL_system_value(ureg, numSys, semName, 0);
|
||||
numSys++;
|
||||
sysInputs &= ~(1 << i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (program->IndirectRegisterFiles & (1 << PROGRAM_TEMPORARY)) {
|
||||
/* If temps are accessed with indirect addressing, declare temporaries
|
||||
* in sequential order. Else, we declare them on demand elsewhere.
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue