st/glsl_to_tgsi: swizzle PROGRAM_OUTPUTs correctly in src_register translation
This is required for reading directly from fragment shader stencil and depth outputs. Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
parent
611166b8ed
commit
0a58b258ca
|
@ -5383,9 +5383,19 @@ src_register(struct st_translate *t, const st_src_reg *reg)
|
|||
|
||||
case PROGRAM_TEMPORARY:
|
||||
case PROGRAM_ARRAY:
|
||||
case PROGRAM_OUTPUT:
|
||||
return ureg_src(dst_register(t, reg->file, reg->index, reg->array_id));
|
||||
|
||||
case PROGRAM_OUTPUT: {
|
||||
struct ureg_dst dst = dst_register(t, reg->file, reg->index, reg->array_id);
|
||||
assert(dst.WriteMask != 0);
|
||||
unsigned shift = ffs(dst.WriteMask) - 1;
|
||||
return ureg_swizzle(ureg_src(dst),
|
||||
shift,
|
||||
MIN2(shift + 1, 3),
|
||||
MIN2(shift + 2, 3),
|
||||
MIN2(shift + 3, 3));
|
||||
}
|
||||
|
||||
case PROGRAM_UNIFORM:
|
||||
assert(reg->index >= 0);
|
||||
return reg->index < t->num_constants ?
|
||||
|
|
Loading…
Reference in New Issue