diff options
author | Alyssa Rosenzweig <[email protected]> | 2019-06-28 09:30:59 -0700 |
---|---|---|
committer | Alyssa Rosenzweig <[email protected]> | 2019-07-01 07:42:56 -0700 |
commit | 9b97ed12506000fdf21917fb08e2b11fa8d26ef6 (patch) | |
tree | 09f4e3445de23936148592ddd5eaaa2f5eddcac6 | |
parent | aa333ac6ad4873bc66b42e12f342381344da5060 (diff) |
panfrost/midgard: Emit type appropriate ld_vary
Signed-off-by: Alyssa Rosenzweig <[email protected]>
-rw-r--r-- | src/gallium/drivers/panfrost/midgard/midgard_compile.c | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/src/gallium/drivers/panfrost/midgard/midgard_compile.c b/src/gallium/drivers/panfrost/midgard/midgard_compile.c index d7155289a71..4a399293af0 100644 --- a/src/gallium/drivers/panfrost/midgard/midgard_compile.c +++ b/src/gallium/drivers/panfrost/midgard/midgard_compile.c @@ -1091,7 +1091,7 @@ emit_varying_read( compiler_context *ctx, unsigned dest, unsigned offset, unsigned nr_comp, unsigned component, - nir_src *indirect_offset) + nir_src *indirect_offset, nir_alu_type type) { /* XXX: Half-floats? */ /* TODO: swizzle, mask */ @@ -1119,6 +1119,23 @@ emit_varying_read( ins.load_store.unknown = 0x1e9e; /* xxx: what is this? */ } + /* Use the type appropriate load */ + switch (type) { + case nir_type_uint: + case nir_type_bool: + ins.load_store.op = midgard_op_ld_vary_32u; + break; + case nir_type_int: + ins.load_store.op = midgard_op_ld_vary_32i; + break; + case nir_type_float: + ins.load_store.op = midgard_op_ld_vary_32; + break; + default: + unreachable("Attempted to load unknown type"); + break; + } + emit_mir_instruction(ctx, ins); } @@ -1280,7 +1297,7 @@ emit_intrinsic(compiler_context *ctx, nir_intrinsic_instr *instr) uint32_t uindex = nir_src_as_uint(index) + 1; emit_ubo_read(ctx, reg, offset / 16, NULL, uindex); } else if (ctx->stage == MESA_SHADER_FRAGMENT && !ctx->is_blend) { - emit_varying_read(ctx, reg, offset, nr_comp, component, !direct ? &instr->src[0] : NULL); + emit_varying_read(ctx, reg, offset, nr_comp, component, !direct ? &instr->src[0] : NULL, t); } else if (ctx->is_blend) { /* For blend shaders, load the input color, which is * preloaded to r0 */ |