[Mesa-dev] [PATCH] i965/generator/tex: Handle an immediate sampler with an indirect texture

Eduardo Lima Mitev elima at igalia.com
Fri Dec 23 09:54:01 UTC 2016


Looks good,

Reviewed-by: Eduardo Lima Mitev <elima at igalia.com>

thanks!

On 12/23/2016 01:14 AM, Jason Ekstrand wrote:
> In this case we were dying when we tried to do SHL addr sampler imm(8)
> because that puts an immediate in src0 of a two source instruction. This
> fixes 2704 of the new separate sampler Vulkan CTS tests on Sky Lake.
> 
> Cc: "13.0" <mesa-stable at lists.freedesktop.org>
> ---
>  src/mesa/drivers/dri/i965/brw_fs_generator.cpp   | 8 ++++++--
>  src/mesa/drivers/dri/i965/brw_vec4_generator.cpp | 8 ++++++--
>  2 files changed, 12 insertions(+), 4 deletions(-)
> 
> diff --git a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
> index aed3c72..0710be9 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
> @@ -916,8 +916,12 @@ fs_generator::generate_tex(fs_inst *inst, struct brw_reg dst, struct brw_reg src
>        if (brw_regs_equal(&surface_reg, &sampler_reg)) {
>           brw_MUL(p, addr, sampler_reg, brw_imm_uw(0x101));
>        } else {
> -         brw_SHL(p, addr, sampler_reg, brw_imm_ud(8));
> -         brw_OR(p, addr, addr, surface_reg);
> +         if (sampler_reg.file == BRW_IMMEDIATE_VALUE) {
> +            brw_OR(p, addr, surface_reg, brw_imm_ud(sampler_reg.ud << 8));
> +         } else {
> +            brw_SHL(p, addr, sampler_reg, brw_imm_ud(8));
> +            brw_OR(p, addr, addr, surface_reg);
> +         }
>        }
>        if (base_binding_table_index)
>           brw_ADD(p, addr, addr, brw_imm_ud(base_binding_table_index));
> diff --git a/src/mesa/drivers/dri/i965/brw_vec4_generator.cpp b/src/mesa/drivers/dri/i965/brw_vec4_generator.cpp
> index ef7ce78..4967663 100644
> --- a/src/mesa/drivers/dri/i965/brw_vec4_generator.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_vec4_generator.cpp
> @@ -298,8 +298,12 @@ generate_tex(struct brw_codegen *p,
>        if (brw_regs_equal(&surface_reg, &sampler_reg)) {
>           brw_MUL(p, addr, sampler_reg, brw_imm_uw(0x101));
>        } else {
> -         brw_SHL(p, addr, sampler_reg, brw_imm_ud(8));
> -         brw_OR(p, addr, addr, surface_reg);
> +         if (sampler_reg.file == BRW_IMMEDIATE_VALUE) {
> +            brw_OR(p, addr, surface_reg, brw_imm_ud(sampler_reg.ud << 8));
> +         } else {
> +            brw_SHL(p, addr, sampler_reg, brw_imm_ud(8));
> +            brw_OR(p, addr, addr, surface_reg);
> +         }
>        }
>        if (base_binding_table_index)
>           brw_ADD(p, addr, addr, brw_imm_ud(base_binding_table_index));
> 



More information about the mesa-dev mailing list