On Fri, Jun 02, 2017 at 01:05:47PM -0700, Jason Ekstrand wrote: > On Fri, Jun 2, 2017 at 12:57 PM, Nanley Chery <[email protected]> wrote: > > > On Fri, May 26, 2017 at 04:30:18PM -0700, Jason Ekstrand wrote: > > > This enum describes all of the states that a auxiliary compressed > > ^ > > an > > > surface can have. All of the states as well as normative language for > > > referring to each of the compression operations is provided in the > > > truly colossal comment for the new isl_aux_state enum. There is also > > > a diagram showing how surfaces move between the different states. > > > --- > > > src/intel/isl/isl.h | 142 ++++++++++++++++++++++++++++++ > > ++++++++++++++++++++++ > > > 1 file changed, 142 insertions(+) > > > > > > diff --git a/src/intel/isl/isl.h b/src/intel/isl/isl.h > > > index b9d8fa8..df6d3e3 100644 > > > --- a/src/intel/isl/isl.h > > > +++ b/src/intel/isl/isl.h > > > @@ -560,6 +560,148 @@ enum isl_aux_usage { > > > ISL_AUX_USAGE_CCS_E, > > > }; > > > > > > +/** > > > + * Enum for keeping track of the state an auxiliary compressed surface. > > > + * > > > + * For any given auxiliary surface compression format (HiZ, CCS, or > > MCS), any > > > + * given slice (lod + array layer) can be in one of the six states > > described > > > + * by this enum. Draw and resolve operations may cause the slice to > > change > > > + * from one state to another. The six valid states are: > > > + * > > > + * 1) Clear: In this state, each block in the auxiliary surface > > contains a > > > + * magic value that indicates that the block is in the clear > > state. If > > > + * a block is in the clear state, it's values in the primary > > surface are > > > + * ignored and the color of the samples in the block is taken > > either the > > > + * RENDER_SURFACE_STATE packet for color or 3DSTATE_CLEAR_PARAMS > > for > > > + * depth. Since neither the primary surface nor the auxiliary > > surface > > > + * contains the clear value, the surface can be cleared to a > > different > > > + * color by simply changing the clear color without modifying > > either > > > + * surface. > > > + * > > > + * 2) Compressed w/ Clear: In this state, neither the auxiliary > > surface > > > + * nor the primary surface has a complete representation of the > > data. > > > + * Instead, both surfaces must be used together or else rendering > > > + * corruption may occur. Depending on the auxiliary compression > > format > > > + * and the data, any given block in the primary surface may > > contain all, > > > + * some, or none of the data required to reconstruct the actual > > sample > > > + * values. Blocks may also be in the clear state (see Clear) and > > have > > > + * their value taken from outside the surface. > > > + * > > > + * 3) Compressed w/o Clear: This state is identical to the state > > above > > > + * except that no blocks are in the clear state. In this state, > > all of > > > + * the data required to reconstruct the final sample values is > > contained > > > + * in the auxiliary and primary surface and the clear value is not > > > + * considered. > > > + * > > > + * 4) Resolved: In this state, the primary surface contains 100% of > > the > > > + * data. The auxiliary surface is also valid so the surface can > > be > > > + * validly used with or without aux enabled. The auxiliary > > surface may, > > > + * however, contain non-trivial data and any update to the primary > > > + * surface with aux disabled will cause the two to get out of > > sync. > > > + * > > > + * 5) Pass-through: In this state, the primary surface contains > > 100% of the > > > + * data and every block in the auxiliary surface contains a magic > > value > > > + * which indicates that the auxiliary surface should be ignored > > and the > > > + * only the primary surface should be considered. Updating the > > primary > > > + * surface without aux works fine and can be done repeatedly in > > this > > > + * mode. Writing to a surface in pass-through mode with aux > > enabled may > > > + * cause the auxiliary buffer to contain non-trivial data and no > > longer > > > + * be in the pass-through state. > > > + * > > > + * 5) Aux Invalid: In this state, the primary surface contains 100% > > of the > > ^ > > 6 > > > + * data and the auxiliary surface is completely bogus. Any > > attempt to > > > + * use the auxiliary surface is liable to result in rendering > > > + * corruption. The only thing that one can do to re-enable aux > > once > > > + * this state is reached is to use an ambiguate pass to > > transition into > > > + * the pass-through state. > > > + * > > > + * Drawing with or without aux enabled may implicitly cause the surface > > to > > > + * transition between these states. There are also four types of > > "resolve" > > > + * operations which cause an explicit transition: > > > + * > > > > I'm not sure why Fast Clear is described as a "resolve" operation. To > > me, "resolve" operations are those which make data in one buffer match > > the data in another buffer. Perhaps you can clarify this? > > > > How about "auxiliary compression operation"? Yeah, resolve is a bit of a > bad name. > > --Jason > >
That's better. With those 3 issues fixed, this patch is Reviewed-by: Nanley Chery <[email protected]> > > > + * 1) Fast Clear: This operation writes the magic "clear" value to > > the > > > + * auxiliary surface. This operation will safely transition any > > slice > > > + * of a surface from any state to the clear state so long as the > > entire > > > + * slice is fast cleared at once. > > > + * > > > + * 2) Full Resolve: This operation combines the auxiliary surface > > data > > > + * with the primary surface data and writes the result to the > > primary. > > > + * For CCS resolves, this operation is destructive in the sense > > that it > > > + * also sets the auxiliary surface to the pass-through mode. For > > HiZ, > > > + * it is not destructive. > > > + * > > > + * 3) Partial Resolve: This operation considers blocks which are in > > the > > > + * "clear" state and writes the clear value directly into the > > primary or > > > + * auxiliary surface. Once this operation completes, the surface > > is > > > + * still compressed but no longer references the clear color. > > This > > > + * operation is only available for CCS. > > > + * > > > + * 4) Ambiguate: This operation throws away the current auxiliary > > data and > > > + * replaces it with the magic pass-through value. If an ambiguate > > > + * operation is performed when the primary surface does not > > contain 100% > > > + * of the data, data will be lost. This operation is only > > implemented > > > + * in hardware for depth where it is called a HiZ resolve. > > > + * > > > + * Not all operations are valid or useful in all states. The diagram > > below > > > + * contains a complete description of the states and all valid and > > useful > > > + * transitions except clear. > > > + * > > > + * Draw w/ Aux > > > + * +----------+ > > > + * | | > > > + * | +-------------+ Draw w/ Aux +-------------+ > > > + * +------>| Compressed |<---------------------| Clear | > > > + * | w/ Clear | | | > > > + * +-------------+ +-------------+ > > > + * | | | > > > + * Partial | | | > > > + * Resolve | | Full Resolve | > > > + * | +----------------------------+ | Full > > > + * | | | Resolve > > > + * Draw w/ aux | | | > > > + * +----------+ | | | > > > + * | | \|/ \|/ \|/ > > > + * | +-------------+ Full Resolve +-------------+ > > > + * +------>| Compressed |--------------------->| Resolved | > > > + * | w/o Clear |<---------------------| | > > > + * +-------------+ Draw w/ Aux +-------------+ > > > + * /|\ | | > > > + * | Draw | | Draw > > > + * | w/ Aux | | w/o Aux > > > + * | Ambiguate | | > > > + * | +----------------------------+ | > > > + * Draw w/o Aux | | | Draw w/o > > Aux > > > + * +----------+ | | | > > +----------+ > > > + * | | | \|/ \|/ | > > | > > > + * | +-------------+ Ambiguate +-------------+ > > | > > > + * +------>| Pass- |<---------------------| Aux > > |<------+ > > > + * | through | | Invalid | > > > + * +-------------+ +-------------+ > > > + * > > > + * > > > + * As referenced in the description of the different operations above, > > not all > > > + * auxiliary surface formats actually support all of the above modes. > > With > > > + * HiZ, for instance, does not have a partial resolve operation so the > > two > > > + * "compressed" modes are the same. With CCS, the resolve operation is > > > + * destructive and takes you directly to passthrough so the "resolved" > > state > > > + * doesn't really exist. However, if you consider the CCS resolve > > operation > > > + * as doing a resolve and then an ambiguate, the diagram is still > > accurate. > > > + */ > > > > This comment is very helpful. > > _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
