Jason Ekstrand <[email protected]> writes: > --- > src/mesa/drivers/dri/i965/brw_fs_surface_builder.cpp | 18 ++++++++++++++++++ > 1 file changed, 18 insertions(+) > > diff --git a/src/mesa/drivers/dri/i965/brw_fs_surface_builder.cpp > b/src/mesa/drivers/dri/i965/brw_fs_surface_builder.cpp > index 75734d2..4adffdd 100644 > --- a/src/mesa/drivers/dri/i965/brw_fs_surface_builder.cpp > +++ b/src/mesa/drivers/dri/i965/brw_fs_surface_builder.cpp > @@ -717,6 +717,15 @@ namespace { > bld.emit_minmax(offset(dst, bld, c), offset(dst, bld, c), > brw_imm_d(-(int)scale(widths[c] - s) - 1), > BRW_CONDITIONAL_GE); > + > + /* Mask off all but the bits we actually want. Otherwise, if > + * we pass a negative number into the hardware when it's > + * expecting something like UINT8, it will happily clamp it to > + * +255 for us. > + */ > + if (is_signed && widths[c] < 32) > + bld.AND(offset(dst, bld, c), offset(dst, bld, c), > + brw_imm_d((1 << widths[c]) - 1)); > } > } > > @@ -787,6 +796,15 @@ namespace { > /* Convert to integer. */ > bld.RNDE(offset(fdst, bld, c), offset(fdst, bld, c)); > bld.MOV(offset(dst, bld, c), offset(fdst, bld, c)); > + > + /* Mask off all but the bits we actually want. Otherwise, if > + * we pass a negative number into the hardware when it's > + * expecting something like UINT8, it will happily clamp it to > + * +255 for us. > + */ > + if (is_signed && widths[c] < 32) > + bld.AND(offset(dst, bld, c), offset(dst, bld, c), > + brw_imm_d((1 << widths[c]) - 1));
Can you use the scale() helper to compute the bitmask like the code above does? Otherwise looks good: Reviewed-by: Francisco Jerez <[email protected]> Thanks! > } > } > > -- > 2.5.0.400.gff86faf > > _______________________________________________ > mesa-dev mailing list > [email protected] > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
signature.asc
Description: PGP signature
_______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
