Paul Berry <stereotype...@gmail.com> writes: > +/** > + * Determine if fast color clear supports the given clear color. > + * > + * Fast color clear can only clear to color values of 1.0 or 0.0. At the > + * moment we only support floating point buffers.
floating point, unorm, or snorm buffers, right? > diff --git a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c > b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c > index a75ac81..ba941c0 100644 > --- a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c > +++ b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c > @@ -1201,6 +1201,54 @@ intel_miptree_alloc_mcs(struct intel_context *intel, > #endif > } > > + > +bool > +intel_miptree_alloc_non_msrt_mcs(struct intel_context *intel, > + struct intel_mipmap_tree *mt) > +{ > +#ifdef I915 > + assert(!"MCS not supported on i915"); > + return false; > +#else > + assert(mt->mcs_mt == NULL); > + > + /* The format of the MCS buffer is opaque to the driver; all that matters > + * is that we get its size and pitch right. We'll pretend that the format > + * is R32. Since an MCS tile covers 128 blocks horizontally, and a > Y-tiled > + * R32 buffer is 32 pixels across, we'll need to scale the width down by > + * the block width and then a further factor of 4. Since an MCS tile > + * covers 256 blocks vertically, and a Y-tiled R32 buffer is 32 rows high, > + * we'll need to scale the height down by the block height and then a > + * further factor of 8. > + */ > + const gl_format format = MESA_FORMAT_R_UINT32; > + unsigned block_width_px; > + unsigned block_height; > + intel_get_non_msrt_mcs_alignment(intel, mt, &block_width_px, > &block_height); > + unsigned width_divisor = block_width_px * 4; > + unsigned height_divisor = block_height * 8; > + unsigned mcs_width = > + ALIGN(mt->logical_width0, width_divisor) / width_divisor; > + unsigned mcs_height = > + ALIGN(mt->logical_height0, height_divisor) / height_divisor; > + assert(mt->logical_depth0 == 1); > + mt->mcs_mt = intel_miptree_create(intel, > + mt->target, > + format, > + mt->first_level, > + mt->last_level, > + mcs_width, > + mcs_height, > + mt->logical_depth0, > + true, > + 0 /* num_samples */, > + INTEL_MIPTREE_TILING_Y); > + > + return mt->mcs_mt; > +#endif Does this actually create an appropriate miptree? Don't you need something that has the smaller levels' sizes also aligned to width_divisor and height_divisor?
pgp6t6ux5UcZY.pgp
Description: PGP signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev