diff options
Diffstat (limited to 'src/gallium/auxiliary/gallivm')
-rw-r--r-- | src/gallium/auxiliary/gallivm/lp_bld_nir_soa.c | 4 | ||||
-rw-r--r-- | src/gallium/auxiliary/gallivm/lp_bld_tgsi.h | 5 |
2 files changed, 9 insertions, 0 deletions
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_nir_soa.c b/src/gallium/auxiliary/gallivm/lp_bld_nir_soa.c index 6af022a8bca..3134f959e39 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_nir_soa.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_nir_soa.c @@ -425,6 +425,10 @@ static void emit_load_var(struct lp_build_nir_context *bld_base, } break; case nir_var_shader_out: + if (bld->fs_iface && bld->fs_iface->fb_fetch) { + bld->fs_iface->fb_fetch(bld->fs_iface, &bld_base->base, var->data.driver_location, result); + return; + } for (unsigned i = 0; i < num_components; i++) { int idx = (i * dmul) + var->data.location_frac; if (bld->tcs_iface) { diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi.h b/src/gallium/auxiliary/gallivm/lp_bld_tgsi.h index b059c1a8a4e..856cea40c55 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi.h +++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi.h @@ -251,6 +251,11 @@ struct lp_build_fs_iface { unsigned attrib, unsigned chan, bool centroid, bool sample, LLVMValueRef indir_index, LLVMValueRef offsets[2]); + + void (*fb_fetch)(const struct lp_build_fs_iface *iface, + struct lp_build_context *bld, + unsigned cbuf, + LLVMValueRef result[4]); }; void |