#include "pipe/p_shader_tokens.h"
#include "pipe/p_state.h"
#include "tgsi/tgsi_ureg.h"
+#include "tgsi/tgsi_from_mesa.h"
#include "st_mesa_to_tgsi.h"
#include "st_context.h"
#include "program/prog_instruction.h"
else
assert(index < VARYING_SLOT_MAX);
- assert(t->outputMapping[index] < ARRAY_SIZE(t->outputs));
-
- return t->outputs[t->outputMapping[index]];
+ if (t->outputMapping[index] < ARRAY_SIZE(t->outputs))
+ return t->outputs[t->outputMapping[index]];
+ else {
+ assert(t->procType == PIPE_SHADER_VERTEX);
+ return ureg_dst(ureg_DECL_constant(t->ureg, 0));
+ }
case PROGRAM_ADDRESS:
return t->address[index];
return t->constants[index];
case PROGRAM_INPUT:
- assert(t->inputMapping[index] < ARRAY_SIZE(t->inputs));
- return t->inputs[t->inputMapping[index]];
+ if (t->inputMapping[index] < ARRAY_SIZE(t->inputs))
+ return t->inputs[t->inputMapping[index]];
+ else {
+ assert(t->procType == PIPE_SHADER_VERTEX);
+ return ureg_DECL_constant(t->ureg, 0);
+ }
case PROGRAM_OUTPUT:
- assert(t->outputMapping[index] < ARRAY_SIZE(t->outputs));
- return ureg_src(t->outputs[t->outputMapping[index]]); /* not needed? */
+ if (t->outputMapping[index] < ARRAY_SIZE(t->outputs))
+ return ureg_src(t->outputs[t->outputMapping[index]]);
+ else {
+ assert(t->procType == PIPE_SHADER_VERTEX);
+ return ureg_DECL_constant(t->ureg, 0);
+ }
case PROGRAM_ADDRESS:
return ureg_src(t->address[index]);
GLbitfield64 sysInputs = program->info.system_values_read;
for (i = 0; sysInputs; i++) {
if (sysInputs & (1ull << i)) {
- unsigned semName = _mesa_sysval_to_semantic(i);
+ unsigned semName = tgsi_get_sysval_semantic(i);
t->systemValues[i] = ureg_DECL_system_value(ureg, semName, 0);