[Mesa-dev] [RFC PATCH 24/26] i965/vs: emit sample index for txf

Ian Romanick idr at freedesktop.org
Fri Jan 4 13:54:43 PST 2013


On 01/04/2013 01:52 PM, Paul Berry wrote:
> On 29 December 2012 04:35, Chris Forbes <chrisf at ijw.co.nz
> <mailto:chrisf at ijw.co.nz>> wrote:
>
>     When fetching texels from a multisample surface, the sample index is
>     provided as an extra argument after the lod, and the actual lod needs
>     to be hardwired to 0.
>
>     The frontend gives us the sample index in the lod parameter, so fix this
>     up.
>
> How much work would it be to modify the front end so that instead of
> giving us the sample index in the lod parameter, we add a "sample_index"
> element to the ir_texture::lod_info union?  It seems like that would
> make this code easier to follow.

I was thinking the same thing.

>     Signed-off-by: Chris Forbes <chrisf at ijw.co.nz <mailto:chrisf at ijw.co.nz>>
>     ---
>       src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp | 15 +++++++++++++--
>       1 file changed, 13 insertions(+), 2 deletions(-)
>
>     diff --git a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
>     b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
>     index 104057c..8aa4b2d 100644
>     --- a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
>     +++ b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
>     @@ -2088,8 +2088,19 @@ vec4_visitor::visit(ir_texture *ir)
>               }
>               emit(MOV(dst_reg(MRF, mrf, ir->lod_info.lod->type,
>     writemask), lod));
>             } else if (ir->op == ir_txf) {
>     -        emit(MOV(dst_reg(MRF, param_base, ir->lod_info.lod->type,
>     WRITEMASK_W),
>     -                 lod));
>     +         if (ir->sampler->type->sampler_dimensionality ==
>     GLSL_SAMPLER_DIM_MS) {
>     +            /* for multisample samplers, actual lod is always 0,
>     and the
>     +             * extra parameter is the sample index */
>     +            emit(MOV(dst_reg(MRF, param_base,
>     ir->lod_info.lod->type, WRITEMASK_W),
>     +                     src_reg(0)));
>     +            emit(MOV(dst_reg(MRF, param_base + 1,
>     ir->lod_info.lod->type, WRITEMASK_X),
>     +                     lod));   /* sample_index */
>     +            inst->mlen++;     /* spilled over into a second reg of
>     args */
>     +         }
>     +         else {
>     +            emit(MOV(dst_reg(MRF, param_base,
>     ir->lod_info.lod->type, WRITEMASK_W),
>     +                     lod));
>     +         }
>             } else if (ir->op == ir_txd) {
>               const glsl_type *type = ir->lod_info.grad.dPdx->type;
>
>     --
>     1.8.0.3
>
> _______________________________________________
> 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