r600g: take into account offset to system inputs at tgsi_interp_egcm()
Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=100785 v2: I was too much twiddling whether to initialize nsys_inputs at the beginning of shader initialization or for allocation of system values, and by the time I decided to go with the first one, I forgot to change it back. Signed-off-by: Constantine Kharlamov <Hi-Angel@yandex.ru> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
469e2ed473
commit
3d466f3e9f
|
@ -1134,9 +1134,10 @@ static int allocate_system_value_inputs(struct r600_shader_ctx *ctx, int gpr_off
|
|||
|
||||
if (enabled) {
|
||||
int gpr = gpr_offset + num_regs++;
|
||||
ctx->shader->nsys_inputs++;
|
||||
|
||||
// add to inputs, allocate a gpr
|
||||
k = ctx->shader->ninput ++;
|
||||
k = ctx->shader->ninput++;
|
||||
ctx->shader->input[k].name = name;
|
||||
ctx->shader->input[k].sid = 0;
|
||||
ctx->shader->input[k].interpolate = TGSI_INTERPOLATE_CONSTANT;
|
||||
|
@ -2945,6 +2946,7 @@ static int r600_shader_from_tgsi(struct r600_context *rctx,
|
|||
shader->indirect_files = ctx.info.indirect_files;
|
||||
|
||||
shader->uses_doubles = ctx.info.uses_doubles;
|
||||
shader->nsys_inputs = 0;
|
||||
|
||||
indirect_gprs = ctx.info.indirect_files & ~((1 << TGSI_FILE_CONSTANT) | (1 << TGSI_FILE_SAMPLER));
|
||||
tgsi_parse_init(&ctx.parse, tokens);
|
||||
|
@ -6322,12 +6324,10 @@ static int tgsi_interp_egcm(struct r600_shader_ctx *ctx)
|
|||
struct r600_bytecode_alu alu;
|
||||
int r, i = 0, k, interp_gpr, interp_base_chan, tmp, lasti;
|
||||
unsigned location;
|
||||
int input;
|
||||
const int input = inst->Src[0].Register.Index + ctx->shader->nsys_inputs;
|
||||
|
||||
assert(inst->Src[0].Register.File == TGSI_FILE_INPUT);
|
||||
|
||||
input = inst->Src[0].Register.Index;
|
||||
|
||||
/* Interpolators have been marked for use already by allocate_system_value_inputs */
|
||||
if (inst->Instruction.Opcode == TGSI_OPCODE_INTERP_OFFSET ||
|
||||
inst->Instruction.Opcode == TGSI_OPCODE_INTERP_SAMPLE) {
|
||||
|
|
|
@ -49,11 +49,11 @@ struct r600_shader_io {
|
|||
int spi_sid;
|
||||
unsigned interpolate;
|
||||
unsigned ij_index;
|
||||
unsigned interpolate_location; // TGSI_INTERPOLATE_LOC_CENTER, CENTROID, SAMPLE
|
||||
unsigned interpolate_location; // TGSI_INTERPOLATE_LOC_CENTER, CENTROID, SAMPLE
|
||||
unsigned lds_pos; /* for evergreen */
|
||||
unsigned back_color_input;
|
||||
unsigned write_mask;
|
||||
int ring_offset;
|
||||
int ring_offset;
|
||||
};
|
||||
|
||||
struct r600_shader {
|
||||
|
@ -62,6 +62,7 @@ struct r600_shader {
|
|||
unsigned ninput;
|
||||
unsigned noutput;
|
||||
unsigned nlds;
|
||||
unsigned nsys_inputs;
|
||||
struct r600_shader_io input[64];
|
||||
struct r600_shader_io output[64];
|
||||
boolean uses_kill;
|
||||
|
|
Loading…
Reference in New Issue