#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]);
* u,i -> l,h: (99.0 + 0.5) * -1 + 100 = 0.5
* u,h -> l,i: (99.5 + 0.5) * -1 + 100 = 0
*/
- if (program->OriginUpperLeft) {
+ if (program->info.fs.origin_upper_left) {
/* Fragment shader wants origin in upper-left */
if (pscreen->get_param(pscreen,
PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT)) {
assert(0);
}
- if (program->PixelCenterInteger) {
+ if (program->info.fs.pixel_center_integer) {
/* Fragment shader wants pixel center integer */
if (pscreen->get_param(pscreen,
PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER)) {
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);
}
for (i = 0; i < program->Parameters->NumParameters; i++) {
+ unsigned pvo = program->Parameters->ParameterValueOffset[i];
+
switch (program->Parameters->Parameters[i].Type) {
case PROGRAM_STATE_VAR:
case PROGRAM_UNIFORM:
*/
case PROGRAM_CONSTANT:
if (program->arb.IndirectRegisterFiles & PROGRAM_ANY_CONST)
- t->constants[i] = ureg_DECL_constant(ureg, i);
+ t->constants[i] = ureg_DECL_constant( ureg, i );
else
- t->constants[i] =
+ t->constants[i] =
ureg_DECL_immediate(ureg,
(const float *)
- program->Parameters->ParameterValues[i],
+ program->Parameters->ParameterValues + pvo,
4);
break;
default: