#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]);
/**
* Map mesa texture target to TGSI texture target.
*/
-unsigned
-st_translate_texture_target(GLuint textarget, GLboolean shadow)
+enum tgsi_texture_type
+st_translate_texture_target(gl_texture_index textarget, GLboolean shadow)
{
if (shadow) {
switch (textarget) {
/**
* Map GLSL base type to TGSI return type.
*/
-unsigned
+enum tgsi_return_type
st_translate_texture_type(enum glsl_base_type type)
{
switch (type) {
* Need to replace instances of INPUT[WPOS] with temp T
* where T = INPUT[WPOS] by y is inverted.
*/
- static const gl_state_index wposTransformState[STATE_LENGTH]
+ static const gl_state_index16 wposTransformState[STATE_LENGTH]
= { STATE_INTERNAL, STATE_FB_WPOS_Y_TRANSFORM, 0, 0, 0 };
/* XXX: note we are modifying the incoming shader here! Need to
* 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)) {
/* Declare misc input registers
*/
- GLbitfield sysInputs = program->info.system_values_read;
+ GLbitfield64 sysInputs = program->info.system_values_read;
for (i = 0; sysInputs; i++) {
- if (sysInputs & (1 << i)) {
- unsigned semName = _mesa_sysval_to_semantic(i);
+ if (sysInputs & (1ull << i)) {
+ unsigned semName = tgsi_get_sysval_semantic(i);
t->systemValues[i] = ureg_DECL_system_value(ureg, semName, 0);
semName == TGSI_SEMANTIC_POSITION)
emit_wpos(st_context(ctx), t, program, ureg);
- sysInputs &= ~(1 << i);
+ sysInputs &= ~(1ull << i);
}
}
}
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: