if (shader->info.uses_instanceid) {
unsigned i = machine->SysSemanticToIndex[TGSI_SEMANTIC_INSTANCEID];
assert(i < Elements(machine->SystemValue));
- machine->SystemValue[i][0] = shader->draw->instance_id;
+ for (j = 0; j < QUAD_SIZE; j++)
+ machine->SystemValue[i].i[j] = shader->draw->instance_id;
}
for (i = 0; i < count; i += MAX_TGSI_VERTICES) {
}
#endif
+ if (shader->info.uses_vertexid) {
+ unsigned vid = machine->SysSemanticToIndex[TGSI_SEMANTIC_VERTEXID];
+ assert(vid < Elements(machine->SystemValue));
+ machine->SystemValue[vid].i[j] = i + j;
+ }
+
for (slot = 0; slot < shader->info.num_inputs; slot++) {
#if 0
assert(!util_is_inf_or_nan(input[slot][0]));
static void
fetch_src_file_channel(const struct tgsi_exec_machine *mach,
+ const uint chan_index,
const uint file,
const uint swizzle,
const union tgsi_exec_channel *index,
* gl_FragCoord, for example, in a sys value register.
*/
for (i = 0; i < QUAD_SIZE; i++) {
- chan->f[i] = mach->SystemValue[index->i[i]][0];
+ chan->u[i] = mach->SystemValue[index->i[i]].u[i];
}
break;
/* get current value of address register[swizzle] */
swizzle = tgsi_util_get_src_register_swizzle( ®->Indirect, CHAN_X );
fetch_src_file_channel(mach,
+ chan_index,
reg->Indirect.File,
swizzle,
&index2,
swizzle = tgsi_util_get_src_register_swizzle( ®->DimIndirect, CHAN_X );
fetch_src_file_channel(mach,
+ chan_index,
reg->DimIndirect.File,
swizzle,
&index2,
swizzle = tgsi_util_get_full_src_register_swizzle( reg, chan_index );
fetch_src_file_channel(mach,
+ chan_index,
reg->Register.File,
swizzle,
&index,
/* fetch values from the address/indirection register */
fetch_src_file_channel(mach,
+ chan_index,
reg->Indirect.File,
swizzle,
&index,
swizzle = tgsi_util_get_src_register_swizzle( ®->DimIndirect, CHAN_X );
fetch_src_file_channel(mach,
+ chan_index,
reg->DimIndirect.File,
swizzle,
&index2,
if (inst->Texture.NumOffsets == 1) {
union tgsi_exec_channel index;
index.i[0] = index.i[1] = index.i[2] = index.i[3] = inst->TexOffsets[0].Index;
- fetch_src_file_channel(mach, inst->TexOffsets[0].File,
+ fetch_src_file_channel(mach, 0, inst->TexOffsets[0].File,
inst->TexOffsets[0].SwizzleX, &index, &ZeroVec, &offset[0]);
- fetch_src_file_channel(mach, inst->TexOffsets[0].File,
+ fetch_src_file_channel(mach, 0, inst->TexOffsets[0].File,
inst->TexOffsets[0].SwizzleY, &index, &ZeroVec, &offset[1]);
- fetch_src_file_channel(mach, inst->TexOffsets[0].File,
+ fetch_src_file_channel(mach, 0, inst->TexOffsets[0].File,
inst->TexOffsets[0].SwizzleZ, &index, &ZeroVec, &offset[2]);
offsets[0] = offset[0].i[0];
offsets[1] = offset[1].i[0];