mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-06 00:10:20 +01:00
Rename the isl_aux_usage enum to clarify that it is optional on gfx125. The new name comes from the Alchemist docs, where the feature is referred to as "Fast Clear Optimization (FCV)". The rename was done with this command: git grep -l "GFX12_CCS_E" | xargs sed -ie "s/GFX12_CCS_E/FCV_CCS_E/g" Reviewed-by: Rohan Garg <rohan.garg@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23220>
428 lines
17 KiB
C++
428 lines
17 KiB
C++
/*
|
|
* Copyright 2019 Intel Corporation
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
* copy of this software and associated documentation files (the "Software"),
|
|
* to deal in the Software without restriction, including without limitation
|
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
* and/or sell copies of the Software, and to permit persons to whom the
|
|
* Software is furnished to do so, subject to the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice (including the next
|
|
* paragraph) shall be included in all copies or substantial portions of the
|
|
* Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
* DEALINGS IN THE SOFTWARE.
|
|
*/
|
|
|
|
#include "gtest/gtest.h"
|
|
#include "isl/isl.h"
|
|
|
|
void
|
|
PrintTo(const enum isl_aux_op &op, ::std::ostream* os) {
|
|
*os << (const char *[]) {
|
|
[ISL_AUX_OP_ASSERT ] = "ISL_AUX_OP_ASSERT",
|
|
[ISL_AUX_OP_NONE ] = "ISL_AUX_OP_NONE",
|
|
[ISL_AUX_OP_FAST_CLEAR ] = "ISL_AUX_OP_FAST_CLEAR",
|
|
[ISL_AUX_OP_FULL_RESOLVE ] = "ISL_AUX_OP_FULL_RESOLVE",
|
|
[ISL_AUX_OP_PARTIAL_RESOLVE] = "ISL_AUX_OP_PARTIAL_RESOLVE",
|
|
[ISL_AUX_OP_AMBIGUATE ] = "ISL_AUX_OP_AMBIGUATE",
|
|
}[op];
|
|
}
|
|
|
|
#define E(state, usage, fc, op) \
|
|
EXPECT_EQ(ISL_AUX_OP_ ## op, \
|
|
isl_aux_prepare_access(ISL_AUX_STATE_ ## state, \
|
|
ISL_AUX_USAGE_ ## usage, fc))
|
|
|
|
TEST(PrepareAccess, CompressedFalseFastClearFalsePartialResolveFalse) {
|
|
E(CLEAR, NONE, false, FULL_RESOLVE);
|
|
E(CLEAR, NONE, true, ASSERT);
|
|
E(PARTIAL_CLEAR, NONE, false, FULL_RESOLVE);
|
|
E(PARTIAL_CLEAR, NONE, true, ASSERT);
|
|
E(COMPRESSED_CLEAR, NONE, false, FULL_RESOLVE);
|
|
E(COMPRESSED_CLEAR, NONE, true, ASSERT);
|
|
E(COMPRESSED_NO_CLEAR, NONE, false, FULL_RESOLVE);
|
|
E(COMPRESSED_NO_CLEAR, NONE, true, ASSERT);
|
|
E(RESOLVED, NONE, false, NONE);
|
|
E(RESOLVED, NONE, true, ASSERT);
|
|
E(PASS_THROUGH, NONE, false, NONE);
|
|
E(PASS_THROUGH, NONE, true, ASSERT);
|
|
E(AUX_INVALID, NONE, false, NONE);
|
|
E(AUX_INVALID, NONE, true, ASSERT);
|
|
}
|
|
|
|
TEST(PrepareAccess, CompressedFalseFastClearTruePartialResolveFalse) {
|
|
E(CLEAR, CCS_D, false, FULL_RESOLVE);
|
|
E(CLEAR, CCS_D, true, NONE);
|
|
E(PARTIAL_CLEAR, CCS_D, false, FULL_RESOLVE);
|
|
E(PARTIAL_CLEAR, CCS_D, true, NONE);
|
|
E(COMPRESSED_CLEAR, CCS_D, false, FULL_RESOLVE);
|
|
E(COMPRESSED_CLEAR, CCS_D, true, FULL_RESOLVE);
|
|
E(COMPRESSED_NO_CLEAR, CCS_D, false, FULL_RESOLVE);
|
|
E(COMPRESSED_NO_CLEAR, CCS_D, true, FULL_RESOLVE);
|
|
E(RESOLVED, CCS_D, false, NONE);
|
|
E(RESOLVED, CCS_D, true, NONE);
|
|
E(PASS_THROUGH, CCS_D, false, NONE);
|
|
E(PASS_THROUGH, CCS_D, true, NONE);
|
|
E(AUX_INVALID, CCS_D, false, AMBIGUATE);
|
|
E(AUX_INVALID, CCS_D, true, AMBIGUATE);
|
|
}
|
|
|
|
TEST(PrepareAccess, CompressedTrueFastClearFalsePartialResolveFalse) {
|
|
E(CLEAR, MC, false, ASSERT);
|
|
E(CLEAR, MC, true, ASSERT);
|
|
E(PARTIAL_CLEAR, MC, false, ASSERT);
|
|
E(PARTIAL_CLEAR, MC, true, ASSERT);
|
|
E(COMPRESSED_CLEAR, MC, false, ASSERT);
|
|
E(COMPRESSED_CLEAR, MC, true, ASSERT);
|
|
E(COMPRESSED_NO_CLEAR, MC, false, NONE);
|
|
E(COMPRESSED_NO_CLEAR, MC, true, ASSERT);
|
|
E(RESOLVED, MC, false, NONE);
|
|
E(RESOLVED, MC, true, ASSERT);
|
|
E(PASS_THROUGH, MC, false, NONE);
|
|
E(PASS_THROUGH, MC, true, ASSERT);
|
|
E(AUX_INVALID, MC, false, AMBIGUATE);
|
|
E(AUX_INVALID, MC, true, ASSERT);
|
|
}
|
|
|
|
TEST(PrepareAccess, CompressedTrueFastClearTruePartialResolveFalse) {
|
|
E(CLEAR, HIZ, false, FULL_RESOLVE);
|
|
E(CLEAR, HIZ, true, NONE);
|
|
E(PARTIAL_CLEAR, HIZ, false, FULL_RESOLVE);
|
|
E(PARTIAL_CLEAR, HIZ, true, NONE);
|
|
E(COMPRESSED_CLEAR, HIZ, false, FULL_RESOLVE);
|
|
E(COMPRESSED_CLEAR, HIZ, true, NONE);
|
|
E(COMPRESSED_NO_CLEAR, HIZ, false, NONE);
|
|
E(COMPRESSED_NO_CLEAR, HIZ, true, NONE);
|
|
E(RESOLVED, HIZ, false, NONE);
|
|
E(RESOLVED, HIZ, true, NONE);
|
|
E(PASS_THROUGH, HIZ, false, NONE);
|
|
E(PASS_THROUGH, HIZ, true, NONE);
|
|
E(AUX_INVALID, HIZ, false, AMBIGUATE);
|
|
E(AUX_INVALID, HIZ, true, AMBIGUATE);
|
|
}
|
|
|
|
TEST(PrepareAccess, CompressedTrueFastClearTruePartialResolveTrue) {
|
|
E(CLEAR, MCS, false, PARTIAL_RESOLVE);
|
|
E(CLEAR, MCS, true, NONE);
|
|
E(PARTIAL_CLEAR, MCS, false, PARTIAL_RESOLVE);
|
|
E(PARTIAL_CLEAR, MCS, true, NONE);
|
|
E(COMPRESSED_CLEAR, MCS, false, PARTIAL_RESOLVE);
|
|
E(COMPRESSED_CLEAR, MCS, true, NONE);
|
|
E(COMPRESSED_NO_CLEAR, MCS, false, NONE);
|
|
E(COMPRESSED_NO_CLEAR, MCS, true, NONE);
|
|
E(RESOLVED, MCS, false, NONE);
|
|
E(RESOLVED, MCS, true, NONE);
|
|
E(PASS_THROUGH, MCS, false, NONE);
|
|
E(PASS_THROUGH, MCS, true, NONE);
|
|
E(AUX_INVALID, MCS, false, AMBIGUATE);
|
|
E(AUX_INVALID, MCS, true, AMBIGUATE);
|
|
}
|
|
|
|
void
|
|
PrintTo(const enum isl_aux_state &state, ::std::ostream* os) {
|
|
*os << (const char *[]) {
|
|
[ISL_AUX_STATE_ASSERT ] = "ISL_AUX_STATE_ASSERT",
|
|
[ISL_AUX_STATE_CLEAR ] = "ISL_AUX_STATE_CLEAR",
|
|
[ISL_AUX_STATE_PARTIAL_CLEAR ] = "ISL_AUX_STATE_PARTIAL_CLEAR",
|
|
[ISL_AUX_STATE_COMPRESSED_CLEAR ] = "ISL_AUX_STATE_COMPRESSED_CLEAR",
|
|
[ISL_AUX_STATE_COMPRESSED_NO_CLEAR] = "ISL_AUX_STATE_COMPRESSED_NO_CLEAR",
|
|
[ISL_AUX_STATE_RESOLVED ] = "ISL_AUX_STATE_RESOLVED",
|
|
[ISL_AUX_STATE_PASS_THROUGH ] = "ISL_AUX_STATE_PASS_THROUGH",
|
|
[ISL_AUX_STATE_AUX_INVALID ] = "ISL_AUX_STATE_AUX_INVALID"
|
|
}[state];
|
|
}
|
|
|
|
#undef E
|
|
#define E(state1, usage, op, state2) \
|
|
EXPECT_EQ(ISL_AUX_STATE_ ## state2, \
|
|
isl_aux_state_transition_aux_op(ISL_AUX_STATE_ ## state1, \
|
|
ISL_AUX_USAGE_ ## usage, \
|
|
ISL_AUX_OP_ ## op))
|
|
|
|
/* The usages used in each test of this suite represent all combinations of
|
|
* ::fast_clear and ::full_resolves_ambiguate.
|
|
*/
|
|
TEST(StateTransitionAuxOp, None) {
|
|
E(CLEAR, NONE, NONE, ASSERT);
|
|
E(PARTIAL_CLEAR, NONE, NONE, ASSERT);
|
|
E(COMPRESSED_CLEAR, NONE, NONE, ASSERT);
|
|
E(COMPRESSED_NO_CLEAR, NONE, NONE, ASSERT);
|
|
E(RESOLVED, NONE, NONE, RESOLVED);
|
|
E(PASS_THROUGH, NONE, NONE, PASS_THROUGH);
|
|
E(AUX_INVALID, NONE, NONE, AUX_INVALID);
|
|
|
|
E(CLEAR, MC, NONE, ASSERT);
|
|
E(PARTIAL_CLEAR, MC, NONE, ASSERT);
|
|
E(COMPRESSED_CLEAR, MC, NONE, ASSERT);
|
|
E(COMPRESSED_NO_CLEAR, MC, NONE, COMPRESSED_NO_CLEAR);
|
|
E(RESOLVED, MC, NONE, RESOLVED);
|
|
E(PASS_THROUGH, MC, NONE, PASS_THROUGH);
|
|
E(AUX_INVALID, MC, NONE, AUX_INVALID);
|
|
|
|
E(CLEAR, HIZ, NONE, CLEAR);
|
|
E(PARTIAL_CLEAR, HIZ, NONE, PARTIAL_CLEAR);
|
|
E(COMPRESSED_CLEAR, HIZ, NONE, COMPRESSED_CLEAR);
|
|
E(COMPRESSED_NO_CLEAR, HIZ, NONE, COMPRESSED_NO_CLEAR);
|
|
E(RESOLVED, HIZ, NONE, RESOLVED);
|
|
E(PASS_THROUGH, HIZ, NONE, PASS_THROUGH);
|
|
E(AUX_INVALID, HIZ, NONE, AUX_INVALID);
|
|
|
|
E(CLEAR, CCS_E, NONE, CLEAR);
|
|
E(PARTIAL_CLEAR, CCS_E, NONE, PARTIAL_CLEAR);
|
|
E(COMPRESSED_CLEAR, CCS_E, NONE, COMPRESSED_CLEAR);
|
|
E(COMPRESSED_NO_CLEAR, CCS_E, NONE, COMPRESSED_NO_CLEAR);
|
|
E(RESOLVED, CCS_E, NONE, RESOLVED);
|
|
E(PASS_THROUGH, CCS_E, NONE, PASS_THROUGH);
|
|
E(AUX_INVALID, CCS_E, NONE, AUX_INVALID);
|
|
}
|
|
|
|
TEST(StateTransitionAuxOp, FastClear) {
|
|
E(CLEAR, NONE, FAST_CLEAR, ASSERT);
|
|
E(PARTIAL_CLEAR, NONE, FAST_CLEAR, ASSERT);
|
|
E(COMPRESSED_CLEAR, NONE, FAST_CLEAR, ASSERT);
|
|
E(COMPRESSED_NO_CLEAR, NONE, FAST_CLEAR, ASSERT);
|
|
E(RESOLVED, NONE, FAST_CLEAR, ASSERT);
|
|
E(PASS_THROUGH, NONE, FAST_CLEAR, ASSERT);
|
|
E(AUX_INVALID, NONE, FAST_CLEAR, ASSERT);
|
|
|
|
E(CLEAR, MC, FAST_CLEAR, ASSERT);
|
|
E(PARTIAL_CLEAR, MC, FAST_CLEAR, ASSERT);
|
|
E(COMPRESSED_CLEAR, MC, FAST_CLEAR, ASSERT);
|
|
E(COMPRESSED_NO_CLEAR, MC, FAST_CLEAR, ASSERT);
|
|
E(RESOLVED, MC, FAST_CLEAR, ASSERT);
|
|
E(PASS_THROUGH, MC, FAST_CLEAR, ASSERT);
|
|
E(AUX_INVALID, MC, FAST_CLEAR, ASSERT);
|
|
|
|
E(CLEAR, HIZ, FAST_CLEAR, CLEAR);
|
|
E(PARTIAL_CLEAR, HIZ, FAST_CLEAR, CLEAR);
|
|
E(COMPRESSED_CLEAR, HIZ, FAST_CLEAR, CLEAR);
|
|
E(COMPRESSED_NO_CLEAR, HIZ, FAST_CLEAR, CLEAR);
|
|
E(RESOLVED, HIZ, FAST_CLEAR, CLEAR);
|
|
E(PASS_THROUGH, HIZ, FAST_CLEAR, CLEAR);
|
|
E(AUX_INVALID, HIZ, FAST_CLEAR, CLEAR);
|
|
|
|
E(CLEAR, CCS_E, FAST_CLEAR, CLEAR);
|
|
E(PARTIAL_CLEAR, CCS_E, FAST_CLEAR, CLEAR);
|
|
E(COMPRESSED_CLEAR, CCS_E, FAST_CLEAR, CLEAR);
|
|
E(COMPRESSED_NO_CLEAR, CCS_E, FAST_CLEAR, CLEAR);
|
|
E(RESOLVED, CCS_E, FAST_CLEAR, CLEAR);
|
|
E(PASS_THROUGH, CCS_E, FAST_CLEAR, CLEAR);
|
|
E(AUX_INVALID, CCS_E, FAST_CLEAR, CLEAR);
|
|
}
|
|
|
|
TEST(StateTransitionAuxOp, PartialResolve) {
|
|
E(CLEAR, NONE, PARTIAL_RESOLVE, ASSERT);
|
|
E(PARTIAL_CLEAR, NONE, PARTIAL_RESOLVE, ASSERT);
|
|
E(COMPRESSED_CLEAR, NONE, PARTIAL_RESOLVE, ASSERT);
|
|
E(COMPRESSED_NO_CLEAR, NONE, PARTIAL_RESOLVE, ASSERT);
|
|
E(RESOLVED, NONE, PARTIAL_RESOLVE, ASSERT);
|
|
E(PASS_THROUGH, NONE, PARTIAL_RESOLVE, ASSERT);
|
|
E(AUX_INVALID, NONE, PARTIAL_RESOLVE, ASSERT);
|
|
|
|
E(CLEAR, MC, PARTIAL_RESOLVE, ASSERT);
|
|
E(PARTIAL_CLEAR, MC, PARTIAL_RESOLVE, ASSERT);
|
|
E(COMPRESSED_CLEAR, MC, PARTIAL_RESOLVE, ASSERT);
|
|
E(COMPRESSED_NO_CLEAR, MC, PARTIAL_RESOLVE, ASSERT);
|
|
E(RESOLVED, MC, PARTIAL_RESOLVE, ASSERT);
|
|
E(PASS_THROUGH, MC, PARTIAL_RESOLVE, ASSERT);
|
|
E(AUX_INVALID, MC, PARTIAL_RESOLVE, ASSERT);
|
|
|
|
E(CLEAR, HIZ, PARTIAL_RESOLVE, ASSERT);
|
|
E(PARTIAL_CLEAR, HIZ, PARTIAL_RESOLVE, ASSERT);
|
|
E(COMPRESSED_CLEAR, HIZ, PARTIAL_RESOLVE, ASSERT);
|
|
E(COMPRESSED_NO_CLEAR, HIZ, PARTIAL_RESOLVE, ASSERT);
|
|
E(RESOLVED, HIZ, PARTIAL_RESOLVE, ASSERT);
|
|
E(PASS_THROUGH, HIZ, PARTIAL_RESOLVE, ASSERT);
|
|
E(AUX_INVALID, HIZ, PARTIAL_RESOLVE, ASSERT);
|
|
|
|
E(CLEAR, CCS_E, PARTIAL_RESOLVE, COMPRESSED_NO_CLEAR);
|
|
E(PARTIAL_CLEAR, CCS_E, PARTIAL_RESOLVE, COMPRESSED_NO_CLEAR);
|
|
E(COMPRESSED_CLEAR, CCS_E, PARTIAL_RESOLVE, COMPRESSED_NO_CLEAR);
|
|
E(COMPRESSED_NO_CLEAR, CCS_E, PARTIAL_RESOLVE, COMPRESSED_NO_CLEAR);
|
|
E(RESOLVED, CCS_E, PARTIAL_RESOLVE, RESOLVED);
|
|
E(PASS_THROUGH, CCS_E, PARTIAL_RESOLVE, PASS_THROUGH);
|
|
E(AUX_INVALID, CCS_E, PARTIAL_RESOLVE, ASSERT);
|
|
}
|
|
|
|
TEST(StateTransitionAuxOp, FullResolve) {
|
|
E(CLEAR, NONE, FULL_RESOLVE, ASSERT);
|
|
E(PARTIAL_CLEAR, NONE, FULL_RESOLVE, ASSERT);
|
|
E(COMPRESSED_CLEAR, NONE, FULL_RESOLVE, ASSERT);
|
|
E(COMPRESSED_NO_CLEAR, NONE, FULL_RESOLVE, ASSERT);
|
|
E(RESOLVED, NONE, FULL_RESOLVE, ASSERT);
|
|
E(PASS_THROUGH, NONE, FULL_RESOLVE, ASSERT);
|
|
E(AUX_INVALID, NONE, FULL_RESOLVE, ASSERT);
|
|
|
|
E(CLEAR, MC, FULL_RESOLVE, ASSERT);
|
|
E(PARTIAL_CLEAR, MC, FULL_RESOLVE, ASSERT);
|
|
E(COMPRESSED_CLEAR, MC, FULL_RESOLVE, ASSERT);
|
|
E(COMPRESSED_NO_CLEAR, MC, FULL_RESOLVE, PASS_THROUGH);
|
|
E(RESOLVED, MC, FULL_RESOLVE, PASS_THROUGH);
|
|
E(PASS_THROUGH, MC, FULL_RESOLVE, PASS_THROUGH);
|
|
E(AUX_INVALID, MC, FULL_RESOLVE, ASSERT);
|
|
|
|
E(CLEAR, HIZ, FULL_RESOLVE, RESOLVED);
|
|
E(PARTIAL_CLEAR, HIZ, FULL_RESOLVE, RESOLVED);
|
|
E(COMPRESSED_CLEAR, HIZ, FULL_RESOLVE, RESOLVED);
|
|
E(COMPRESSED_NO_CLEAR, HIZ, FULL_RESOLVE, RESOLVED);
|
|
E(RESOLVED, HIZ, FULL_RESOLVE, RESOLVED);
|
|
E(PASS_THROUGH, HIZ, FULL_RESOLVE, PASS_THROUGH);
|
|
E(AUX_INVALID, HIZ, FULL_RESOLVE, ASSERT);
|
|
|
|
E(CLEAR, CCS_E, FULL_RESOLVE, PASS_THROUGH);
|
|
E(PARTIAL_CLEAR, CCS_E, FULL_RESOLVE, PASS_THROUGH);
|
|
E(COMPRESSED_CLEAR, CCS_E, FULL_RESOLVE, PASS_THROUGH);
|
|
E(COMPRESSED_NO_CLEAR, CCS_E, FULL_RESOLVE, PASS_THROUGH);
|
|
E(RESOLVED, CCS_E, FULL_RESOLVE, PASS_THROUGH);
|
|
E(PASS_THROUGH, CCS_E, FULL_RESOLVE, PASS_THROUGH);
|
|
E(AUX_INVALID, CCS_E, FULL_RESOLVE, ASSERT);
|
|
}
|
|
|
|
TEST(StateTransitionAuxOp, Ambiguate) {
|
|
E(CLEAR, NONE, AMBIGUATE, ASSERT);
|
|
E(PARTIAL_CLEAR, NONE, AMBIGUATE, ASSERT);
|
|
E(COMPRESSED_CLEAR, NONE, AMBIGUATE, ASSERT);
|
|
E(COMPRESSED_NO_CLEAR, NONE, AMBIGUATE, ASSERT);
|
|
E(RESOLVED, NONE, AMBIGUATE, ASSERT);
|
|
E(PASS_THROUGH, NONE, AMBIGUATE, ASSERT);
|
|
E(AUX_INVALID, NONE, AMBIGUATE, ASSERT);
|
|
|
|
E(CLEAR, MC, AMBIGUATE, ASSERT);
|
|
E(PARTIAL_CLEAR, MC, AMBIGUATE, ASSERT);
|
|
E(COMPRESSED_CLEAR, MC, AMBIGUATE, ASSERT);
|
|
E(COMPRESSED_NO_CLEAR, MC, AMBIGUATE, PASS_THROUGH);
|
|
E(RESOLVED, MC, AMBIGUATE, PASS_THROUGH);
|
|
E(PASS_THROUGH, MC, AMBIGUATE, PASS_THROUGH);
|
|
E(AUX_INVALID, MC, AMBIGUATE, PASS_THROUGH);
|
|
|
|
E(CLEAR, HIZ, AMBIGUATE, PASS_THROUGH);
|
|
E(PARTIAL_CLEAR, HIZ, AMBIGUATE, PASS_THROUGH);
|
|
E(COMPRESSED_CLEAR, HIZ, AMBIGUATE, PASS_THROUGH);
|
|
E(COMPRESSED_NO_CLEAR, HIZ, AMBIGUATE, PASS_THROUGH);
|
|
E(RESOLVED, HIZ, AMBIGUATE, PASS_THROUGH);
|
|
E(PASS_THROUGH, HIZ, AMBIGUATE, PASS_THROUGH);
|
|
E(AUX_INVALID, HIZ, AMBIGUATE, PASS_THROUGH);
|
|
|
|
E(CLEAR, CCS_E, AMBIGUATE, PASS_THROUGH);
|
|
E(PARTIAL_CLEAR, CCS_E, AMBIGUATE, PASS_THROUGH);
|
|
E(COMPRESSED_CLEAR, CCS_E, AMBIGUATE, PASS_THROUGH);
|
|
E(COMPRESSED_NO_CLEAR, CCS_E, AMBIGUATE, PASS_THROUGH);
|
|
E(RESOLVED, CCS_E, AMBIGUATE, PASS_THROUGH);
|
|
E(PASS_THROUGH, CCS_E, AMBIGUATE, PASS_THROUGH);
|
|
E(AUX_INVALID, CCS_E, AMBIGUATE, PASS_THROUGH);
|
|
}
|
|
|
|
#undef E
|
|
#define E(state1, usage, full_surface, state2) \
|
|
EXPECT_EQ(ISL_AUX_STATE_ ## state2, \
|
|
isl_aux_state_transition_write(ISL_AUX_STATE_ ## state1, \
|
|
ISL_AUX_USAGE_ ## usage, \
|
|
full_surface))
|
|
|
|
TEST(StateTransitionWrite, WritesOnlyTouchMain) {
|
|
E(CLEAR, NONE, false, ASSERT);
|
|
E(CLEAR, NONE, true, AUX_INVALID);
|
|
E(PARTIAL_CLEAR, NONE, false, ASSERT);
|
|
E(PARTIAL_CLEAR, NONE, true, AUX_INVALID);
|
|
E(COMPRESSED_CLEAR, NONE, false, ASSERT);
|
|
E(COMPRESSED_CLEAR, NONE, true, AUX_INVALID);
|
|
E(COMPRESSED_NO_CLEAR, NONE, false, ASSERT);
|
|
E(COMPRESSED_NO_CLEAR, NONE, true, AUX_INVALID);
|
|
E(RESOLVED, NONE, false, AUX_INVALID);
|
|
E(RESOLVED, NONE, true, AUX_INVALID);
|
|
E(PASS_THROUGH, NONE, false, PASS_THROUGH);
|
|
E(PASS_THROUGH, NONE, true, PASS_THROUGH);
|
|
E(AUX_INVALID, NONE, false, AUX_INVALID);
|
|
E(AUX_INVALID, NONE, true, AUX_INVALID);
|
|
}
|
|
|
|
TEST(StateTransitionWrite, WritesCompress) {
|
|
E(CLEAR, MCS, false, COMPRESSED_CLEAR);
|
|
E(CLEAR, MCS, true, COMPRESSED_NO_CLEAR);
|
|
E(PARTIAL_CLEAR, MCS, false, COMPRESSED_CLEAR);
|
|
E(PARTIAL_CLEAR, MCS, true, COMPRESSED_NO_CLEAR);
|
|
E(COMPRESSED_CLEAR, MCS, false, COMPRESSED_CLEAR);
|
|
E(COMPRESSED_CLEAR, MCS, true, COMPRESSED_NO_CLEAR);
|
|
E(COMPRESSED_NO_CLEAR, MCS, false, COMPRESSED_NO_CLEAR);
|
|
E(COMPRESSED_NO_CLEAR, MCS, true, COMPRESSED_NO_CLEAR);
|
|
E(RESOLVED, MCS, false, COMPRESSED_NO_CLEAR);
|
|
E(RESOLVED, MCS, true, COMPRESSED_NO_CLEAR);
|
|
E(PASS_THROUGH, MCS, false, COMPRESSED_NO_CLEAR);
|
|
E(PASS_THROUGH, MCS, true, COMPRESSED_NO_CLEAR);
|
|
E(AUX_INVALID, MCS, false, ASSERT);
|
|
E(AUX_INVALID, MCS, true, ASSERT);
|
|
|
|
E(CLEAR, STC_CCS, false, ASSERT);
|
|
E(CLEAR, STC_CCS, true, ASSERT);
|
|
E(PARTIAL_CLEAR, STC_CCS, false, ASSERT);
|
|
E(PARTIAL_CLEAR, STC_CCS, true, ASSERT);
|
|
E(COMPRESSED_CLEAR, STC_CCS, false, ASSERT);
|
|
E(COMPRESSED_CLEAR, STC_CCS, true, ASSERT);
|
|
E(COMPRESSED_NO_CLEAR, STC_CCS, false, COMPRESSED_NO_CLEAR);
|
|
E(COMPRESSED_NO_CLEAR, STC_CCS, true, COMPRESSED_NO_CLEAR);
|
|
E(RESOLVED, STC_CCS, false, COMPRESSED_NO_CLEAR);
|
|
E(RESOLVED, STC_CCS, true, COMPRESSED_NO_CLEAR);
|
|
E(PASS_THROUGH, STC_CCS, false, COMPRESSED_NO_CLEAR);
|
|
E(PASS_THROUGH, STC_CCS, true, COMPRESSED_NO_CLEAR);
|
|
E(AUX_INVALID, STC_CCS, false, ASSERT);
|
|
E(AUX_INVALID, STC_CCS, true, ASSERT);
|
|
}
|
|
|
|
TEST(StateTransitionWrite, WritesCompressClear) {
|
|
E(CLEAR, FCV_CCS_E, false, COMPRESSED_CLEAR);
|
|
E(CLEAR, FCV_CCS_E, true, COMPRESSED_CLEAR);
|
|
E(PARTIAL_CLEAR, FCV_CCS_E, false, COMPRESSED_CLEAR);
|
|
E(PARTIAL_CLEAR, FCV_CCS_E, true, COMPRESSED_CLEAR);
|
|
E(COMPRESSED_CLEAR, FCV_CCS_E, false, COMPRESSED_CLEAR);
|
|
E(COMPRESSED_CLEAR, FCV_CCS_E, true, COMPRESSED_CLEAR);
|
|
E(COMPRESSED_NO_CLEAR, FCV_CCS_E, false, COMPRESSED_CLEAR);
|
|
E(COMPRESSED_NO_CLEAR, FCV_CCS_E, true, COMPRESSED_CLEAR);
|
|
E(RESOLVED, FCV_CCS_E, false, COMPRESSED_CLEAR);
|
|
E(RESOLVED, FCV_CCS_E, true, COMPRESSED_CLEAR);
|
|
E(PASS_THROUGH, FCV_CCS_E, false, COMPRESSED_CLEAR);
|
|
E(PASS_THROUGH, FCV_CCS_E, true, COMPRESSED_CLEAR);
|
|
E(AUX_INVALID, FCV_CCS_E, false, ASSERT);
|
|
E(AUX_INVALID, FCV_CCS_E, true, ASSERT);
|
|
}
|
|
|
|
TEST(StateTransitionWrite, WritesResolveAmbiguate) {
|
|
E(CLEAR, CCS_D, false, PARTIAL_CLEAR);
|
|
E(CLEAR, CCS_D, true, PASS_THROUGH);
|
|
E(PARTIAL_CLEAR, CCS_D, false, PARTIAL_CLEAR);
|
|
E(PARTIAL_CLEAR, CCS_D, true, PASS_THROUGH);
|
|
E(COMPRESSED_CLEAR, CCS_D, false, ASSERT);
|
|
E(COMPRESSED_CLEAR, CCS_D, true, ASSERT);
|
|
E(COMPRESSED_NO_CLEAR, CCS_D, false, ASSERT);
|
|
E(COMPRESSED_NO_CLEAR, CCS_D, true, ASSERT);
|
|
E(RESOLVED, CCS_D, false, RESOLVED);
|
|
E(RESOLVED, CCS_D, true, PASS_THROUGH);
|
|
E(PASS_THROUGH, CCS_D, false, PASS_THROUGH);
|
|
E(PASS_THROUGH, CCS_D, true, PASS_THROUGH);
|
|
E(AUX_INVALID, CCS_D, false, ASSERT);
|
|
E(AUX_INVALID, CCS_D, true, ASSERT);
|
|
|
|
E(CLEAR, MC, false, ASSERT);
|
|
E(CLEAR, MC, true, ASSERT);
|
|
E(PARTIAL_CLEAR, MC, false, ASSERT);
|
|
E(PARTIAL_CLEAR, MC, true, ASSERT);
|
|
E(COMPRESSED_CLEAR, MC, false, ASSERT);
|
|
E(COMPRESSED_CLEAR, MC, true, ASSERT);
|
|
E(COMPRESSED_NO_CLEAR, MC, false, COMPRESSED_NO_CLEAR);
|
|
E(COMPRESSED_NO_CLEAR, MC, true, PASS_THROUGH);
|
|
E(RESOLVED, MC, false, RESOLVED);
|
|
E(RESOLVED, MC, true, PASS_THROUGH);
|
|
E(PASS_THROUGH, MC, false, PASS_THROUGH);
|
|
E(PASS_THROUGH, MC, true, PASS_THROUGH);
|
|
E(AUX_INVALID, MC, false, ASSERT);
|
|
E(AUX_INVALID, MC, true, ASSERT);
|
|
}
|
|
|
|
#undef E
|