i965: Store QPitch in intel_mipmap_tree.
Broadwell allows us to specify an arbitrary value for QPitch, rather than baking a specific formula into the hardware and requiring software to lay things out to match. The only restriction is that the software provided QPitch needs to be large enough so successive array slices do not overlap. In order to support this flexibility, software needs to specify QPitch in a bunch of packets. Storing QPitch makes that easy, and allows us to adjust it in a single place should we wish to change it in the future. Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Paul Berry <stereotype441@gmail.com>
This commit is contained in:
@@ -238,26 +238,25 @@ static void
|
||||
brw_miptree_layout_texture_array(struct brw_context *brw,
|
||||
struct intel_mipmap_tree *mt)
|
||||
{
|
||||
unsigned qpitch = 0;
|
||||
int h0, h1;
|
||||
|
||||
h0 = ALIGN(mt->physical_height0, mt->align_h);
|
||||
h1 = ALIGN(minify(mt->physical_height0, 1), mt->align_h);
|
||||
if (mt->array_spacing_lod0)
|
||||
qpitch = h0;
|
||||
mt->qpitch = h0;
|
||||
else
|
||||
qpitch = (h0 + h1 + (brw->gen >= 7 ? 12 : 11) * mt->align_h);
|
||||
mt->qpitch = (h0 + h1 + (brw->gen >= 7 ? 12 : 11) * mt->align_h);
|
||||
if (mt->compressed)
|
||||
qpitch /= 4;
|
||||
mt->qpitch /= 4;
|
||||
|
||||
brw_miptree_layout_2d(mt);
|
||||
|
||||
for (unsigned level = mt->first_level; level <= mt->last_level; level++) {
|
||||
for (int q = 0; q < mt->physical_depth0; q++) {
|
||||
intel_miptree_set_image_offset(mt, level, q, 0, q * qpitch);
|
||||
intel_miptree_set_image_offset(mt, level, q, 0, q * mt->qpitch);
|
||||
}
|
||||
}
|
||||
mt->total_height = qpitch * mt->physical_depth0;
|
||||
mt->total_height = mt->qpitch * mt->physical_depth0;
|
||||
|
||||
align_cube(mt);
|
||||
}
|
||||
|
@@ -333,6 +333,11 @@ struct intel_mipmap_tree
|
||||
*/
|
||||
bool array_spacing_lod0;
|
||||
|
||||
/**
|
||||
* The distance in rows between array slices.
|
||||
*/
|
||||
uint32_t qpitch;
|
||||
|
||||
/**
|
||||
* MSAA layout used by this buffer.
|
||||
*/
|
||||
|
Reference in New Issue
Block a user