[Mesa-dev] [PATCH 3/4] i965/fs: Support arbitrarily large sampler indices on Broadwell+.
Chris Forbes
chrisf at ijw.co.nz
Thu Jan 23 15:54:03 PST 2014
How big is the sampler state pointer on Broadwell?
My understanding was it would have to be >32bits, and this looks like
it will do the wrong thing if the sampler state table is placed across
a 4G boundary. Perhaps there is something else that makes this not a
factor, though.
On Fri, Jan 24, 2014 at 10:13 AM, Kenneth Graunke <kenneth at whitecape.org> wrote:
> I added support for these on Haswell, but forgot to update the Broadwell
> code before landing it. Partially fixes Piglit's max-samplers test.
>
> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
> ---
> src/mesa/drivers/dri/i965/gen8_fs_generator.cpp | 19 ++++++++++++++++++-
> 1 file changed, 18 insertions(+), 1 deletion(-)
>
> diff --git a/src/mesa/drivers/dri/i965/gen8_fs_generator.cpp b/src/mesa/drivers/dri/i965/gen8_fs_generator.cpp
> index 62b1e02..151ddb8 100644
> --- a/src/mesa/drivers/dri/i965/gen8_fs_generator.cpp
> +++ b/src/mesa/drivers/dri/i965/gen8_fs_generator.cpp
> @@ -254,6 +254,23 @@ gen8_fs_generator::generate_tex(fs_inst *ir,
> brw_imm_ud(ir->texture_offset));
> }
>
> + if (ir->sampler >= 16) {
> + /* The "Sampler Index" field can only store values between 0 and 15.
> + * However, we can add an offset to the "Sampler State Pointer"
> + * field, effectively selecting a different set of 16 samplers.
> + *
> + * The "Sampler State Pointer" needs to be aligned to a 32-byte
> + * offset, and each sampler state is only 16-bytes, so we can't
> + * exclusively use the offset - we have to use both.
> + */
> + gen8_instruction *add =
> + ADD(retype(brw_vec1_grf(src.nr, 3), BRW_REGISTER_TYPE_UD),
> + get_element_ud(brw_vec8_grf(0, 0), 3),
> + brw_imm_ud(16 * (ir->sampler / 16) *
> + sizeof(gen7_sampler_state)));
> + gen8_set_mask_control(add, BRW_MASK_DISABLE);
> + }
> +
> default_state.exec_size = save_exec_size;
> }
>
> @@ -265,7 +282,7 @@ gen8_fs_generator::generate_tex(fs_inst *ir,
> gen8_set_src0(brw, inst, src);
> gen8_set_sampler_message(brw, inst,
> surf_index,
> - ir->sampler,
> + ir->sampler % 16,
> msg_type,
> rlen,
> ir->mlen,
> --
> 1.8.5.2
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list