[Mesa-dev] [PATCH V2 09/10] i965/vs: Sample from MCS surface when required
Paul Berry
stereotype441 at gmail.com
Mon Dec 2 08:22:00 PST 2013
On 30 November 2013 15:30, Chris Forbes <chrisf at ijw.co.nz> wrote:
> Signed-off-by: Chris Forbes <chrisf at ijw.co.nz>
> ---
> src/mesa/drivers/dri/i965/brw_vec4.h | 1 +
> src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp | 42
> +++++++++++++++++++++-----
> 2 files changed, 36 insertions(+), 7 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_vec4.h
> b/src/mesa/drivers/dri/i965/brw_vec4.h
> index 5cec9f9..d4029d8 100644
> --- a/src/mesa/drivers/dri/i965/brw_vec4.h
> +++ b/src/mesa/drivers/dri/i965/brw_vec4.h
> @@ -477,6 +477,7 @@ public:
> void emit_unpack_half_2x16(dst_reg dst, src_reg src0);
>
> uint32_t gather_channel(ir_texture *ir, int sampler);
> + src_reg emit_mcs_fetch(ir_texture *ir, src_reg coordinate, int
> sampler);
> void swizzle_result(ir_texture *ir, src_reg orig_val, int sampler);
>
> void emit_ndc_computation();
> diff --git a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
> b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
> index a13eafb..619b386 100644
> --- a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
> @@ -2215,6 +2215,31 @@ vec4_visitor::visit(ir_call *ir)
> }
> }
>
> +src_reg
> +vec4_visitor::emit_mcs_fetch(ir_texture *ir, src_reg coordinate, int
> sampler)
> +{
> + vec4_instruction *inst = new(mem_ctx) vec4_instruction(this,
> SHADER_OPCODE_TXF_MCS);
> + inst->base_mrf = 2;
> + inst->mlen = 1;
> + inst->sampler = sampler;
> + inst->dst = dst_reg(this, glsl_type::uvec4_type);
> + inst->dst.writemask = WRITEMASK_XYZW;
> +
> + /* parameters are: u, v, r, lod; lod will always be zero due to api
> restrictions */
> + int param_base = inst->base_mrf;
> + int coord_mask = (1 << ir->coordinate->type->vector_elements) - 1;
> + int zero_mask = 0xf & ~coord_mask;
> +
> + emit(MOV(dst_reg(MRF, param_base, ir->coordinate->type, coord_mask),
> + coordinate));
> +
> + emit(MOV(dst_reg(MRF, param_base, ir->coordinate->type, zero_mask),
> + src_reg(0)));
> +
> + emit(inst);
> + return src_reg(inst->dst);
> +}
> +
> void
> vec4_visitor::visit(ir_texture *ir)
> {
> @@ -2265,7 +2290,7 @@ vec4_visitor::visit(ir_texture *ir)
> }
>
> const glsl_type *lod_type = NULL, *sample_index_type = NULL;
> - src_reg lod, dPdx, dPdy, sample_index;
> + src_reg lod, dPdx, dPdy, sample_index, mcs;
> switch (ir->op) {
> case ir_tex:
> lod = src_reg(0.0f);
> @@ -2286,6 +2311,11 @@ vec4_visitor::visit(ir_texture *ir)
> ir->lod_info.sample_index->accept(this);
> sample_index = this->result;
> sample_index_type = ir->lod_info.sample_index->type;
> +
> + if (brw->gen >= 7 && key->tex.compressed_multisample_layout_mask &
> (1<<sampler))
> + mcs = emit_mcs_fetch(ir, coordinate, sampler);
> + else
> + mcs = src_reg(0u);
> break;
> case ir_txd:
> ir->lod_info.grad.dPdx->accept(this);
> @@ -2406,13 +2436,11 @@ vec4_visitor::visit(ir_texture *ir)
> } else if (ir->op == ir_txf_ms) {
> emit(MOV(dst_reg(MRF, param_base + 1, sample_index_type,
> WRITEMASK_X),
> sample_index));
> + if (brw->gen >= 7)
> + mcs.swizzle =
> BRW_SWIZZLE4(SWIZZLE_X,SWIZZLE_X,SWIZZLE_X,SWIZZLE_X);
> + emit(MOV(dst_reg(MRF, param_base + 1, glsl_type::uint_type,
> WRITEMASK_Y),
> + mcs));
>
It would be nice to have a quick comment here explaining that the swizzle
and writemask are needed because ld2dms expects mcs to be in position 5,
which corresponds to the y component of the 2nd vec4.
With that added, this patch is:
Reviewed-by: Paul Berry <stereotype441 at gmail.com>
>
> inst->mlen++;
> -
> - /* on Gen7, there is an additional MCS parameter here after SI,
> - * but we don't bother to emit it since it's always zero. If
> - * we start supporting texturing from CMS surfaces, this will
> have
> - * to change
> - */
> } else if (ir->op == ir_txd) {
> const glsl_type *type = lod_type;
>
> --
> 1.8.4.2
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20131202/ece68ee4/attachment.html>
More information about the mesa-dev
mailing list