intel: Use Clear Color struct size.
The size of the clear color struct (expected by the hardware) is 8 dwords (isl_dev.ss.clear_value_state_size here). But we still need to track the size of the clear color, used when memcopying it to/from the state buffer. For that we keep isl_dev.ss.clear_value_size. v4: - Add struct to gen11 too (Jason, Jordan) - Add field for Converted Clear Color to gen11 (Jason) - Add clear_color_state_offset to differentiate from clear_value_offset. - Fix all the places where clear_value_size was used. v5 (Jason): - Split genxml changes to another commit. - Remove unnecessary gen checks. - Bring back missing offset increment to init_fast_clear_color(). v6 (Jason): - On init_fast_clear_color, change: addr.offset += 4 => sdi.Address.offset += i * 4 - Use GEN_GEN instead of GEN_VERSIONx10. [jordan.l.justen@intel.com: isl_device_init changes] Signed-off-by: Rafael Antognolli <rafael.antognolli@intel.com> Signed-off-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
@@ -826,35 +826,36 @@ init_fast_clear_color(struct anv_cmd_buffer *cmd_buffer,
|
||||
*/
|
||||
struct anv_address addr =
|
||||
anv_image_get_clear_color_addr(cmd_buffer->device, image, aspect);
|
||||
unsigned i = 0;
|
||||
for (; i < cmd_buffer->device->isl_dev.ss.clear_value_size; i += 4) {
|
||||
anv_batch_emit(&cmd_buffer->batch, GENX(MI_STORE_DATA_IMM), sdi) {
|
||||
sdi.Address = addr;
|
||||
|
||||
if (GEN_GEN >= 9) {
|
||||
if (GEN_GEN >= 9) {
|
||||
for (unsigned i = 0; i < 4; i++) {
|
||||
anv_batch_emit(&cmd_buffer->batch, GENX(MI_STORE_DATA_IMM), sdi) {
|
||||
sdi.Address = addr;
|
||||
sdi.Address.offset += i * 4;
|
||||
/* MCS buffers on SKL+ can only have 1/0 clear colors. */
|
||||
assert(image->samples > 1);
|
||||
sdi.ImmediateData = 0;
|
||||
} else if (GEN_VERSIONx10 >= 75) {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
anv_batch_emit(&cmd_buffer->batch, GENX(MI_STORE_DATA_IMM), sdi) {
|
||||
sdi.Address = addr;
|
||||
if (GEN_GEN >= 8 || GEN_IS_HASWELL) {
|
||||
/* Pre-SKL, the dword containing the clear values also contains
|
||||
* other fields, so we need to initialize those fields to match the
|
||||
* values that would be in a color attachment.
|
||||
*/
|
||||
assert(i == 0);
|
||||
sdi.ImmediateData = ISL_CHANNEL_SELECT_RED << 25 |
|
||||
ISL_CHANNEL_SELECT_GREEN << 22 |
|
||||
ISL_CHANNEL_SELECT_BLUE << 19 |
|
||||
ISL_CHANNEL_SELECT_ALPHA << 16;
|
||||
} else if (GEN_VERSIONx10 == 70) {
|
||||
} else if (GEN_GEN == 7) {
|
||||
/* On IVB, the dword containing the clear values also contains
|
||||
* other fields that must be zero or can be zero.
|
||||
*/
|
||||
assert(i == 0);
|
||||
sdi.ImmediateData = 0;
|
||||
}
|
||||
}
|
||||
|
||||
addr.offset += 4;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user