Skip to content

Commit 87bf847

Browse files
committed
Composition with vpp
Signed-off-by: lihaihong <haihongx.li@intel.com>
1 parent 5397937 commit 87bf847

16 files changed

Lines changed: 2029 additions & 54 deletions

Android.bp

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,19 @@ cc_defaults {
5757
"libsync",
5858
"libui",
5959
"libutils",
60+
"libva",
61+
"libva-android",
6062
],
6163

6264
include_dirs: [
6365
"vendor/intel/external/drm-hwcomposer",
64-
"kernel/linux-intel-lts2022"],
66+
"vendor/intel/external/drm-hwcomposer/va",
67+
"vendor/intel/external/drm-hwcomposer/include",
68+
"hardware/intel/external/minigbm-intel/cros_gralloc",
69+
"hardware/intel/external/libva",
70+
"hardware/intel/external/drm-intel/android",
71+
"kernel/linux-intel-lts2022"
72+
],
6573

6674
header_libs: [
6775
"android.hardware.graphics.composer3-command-buffer",
@@ -78,6 +86,7 @@ cc_defaults {
7886
"-DHWC2_USE_CPP11",
7987
"-std=c++17",
8088
"-DUSE_IMAPPER4_METADATA_API",
89+
"-DUSE_GRALLOC1",
8190
],
8291

8392
product_variables: {
@@ -121,6 +130,11 @@ filegroup {
121130
"hwc2_device/HwcDisplayConfigs.cpp",
122131
"hwc2_device/HwcLayer.cpp",
123132
"hwc2_device/hwc2_device.cpp",
133+
134+
"va/varenderer.cpp",
135+
"va/vautils.cpp",
136+
"utils/autolock.cpp",
137+
"gralloc1/gralloc1bufferhandler.cpp",
124138
],
125139
}
126140

backend/Backend.cpp

Lines changed: 6 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -52,18 +52,6 @@ HWC2::Error Backend::ValidateDisplay(HwcDisplay *display, uint32_t *num_types,
5252
std::tie(client_start, client_size) = GetClientLayers(display, layers);
5353

5454
MarkValidated(layers, client_start, client_size);
55-
56-
bool testing_needed = !(client_start == 0 && client_size == layers.size());
57-
58-
AtomicCommitArgs a_args = {.test_only = true};
59-
60-
if (testing_needed &&
61-
display->CreateComposition(a_args) != HWC2::Error::None) {
62-
++display->total_stats().failed_kms_validate_;
63-
client_start = 0;
64-
client_size = layers.size();
65-
MarkValidated(layers, 0, client_size);
66-
}
6755
}
6856

6957
*num_types = client_size;
@@ -80,43 +68,15 @@ std::tuple<int, size_t> Backend::GetClientLayers(
8068
int client_start = -1;
8169
size_t client_size = 0;
8270

83-
int device_start = -1;
84-
size_t device_size = 0;
8571
for (size_t z_order = 0; z_order < layers.size(); ++z_order) {
8672
if (IsClientLayer(display, layers[z_order])) {
8773
if (client_start < 0)
8874
client_start = (int)z_order;
8975
client_size = (z_order - client_start) + 1;
9076
}
91-
if (IsVideoLayer(layers[z_order])) {
92-
if (device_start < 0)
93-
device_start = (int)z_order;
94-
device_size = (z_order - device_start) + 1;
95-
}
96-
}
97-
if (device_size == 0)
98-
return GetExtraClientRange(display, layers, client_start, client_size);
99-
else {
100-
bool status = true;
101-
MarkValidated(layers, client_start, client_size);
102-
for (size_t z_order = 0; z_order < layers.size(); ++z_order) {
103-
if (z_order >= client_start &&
104-
z_order <= (client_start + client_size - 1) &&
105-
IsVideoLayer(layers[z_order]))
106-
status = false;
107-
108-
if (z_order >= device_start &&
109-
z_order <= (device_start + device_size - 1) &&
110-
layers[z_order]->GetValidatedType() == HWC2::Composition::Client)
111-
status = false;
112-
}
113-
if (!status) {
114-
ALOGE("status is abnormal");
115-
return GetExtraClientRange(display, layers, client_start, client_size);
116-
}
117-
return GetExtraClientRange2(display, layers, client_start, client_size, device_start, device_size);
11877
}
11978

79+
return std::make_tuple(client_start, client_size);
12080
}
12181

12282
bool Backend::IsClientLayer(HwcDisplay *display, HwcLayer *layer) {
@@ -155,10 +115,13 @@ uint32_t Backend::CalcPixOps(const std::vector<HwcLayer *> &layers,
155115
void Backend::MarkValidated(std::vector<HwcLayer *> &layers,
156116
size_t client_first_z, size_t client_size) {
157117
for (size_t z_order = 0; z_order < layers.size(); ++z_order) {
158-
if (z_order >= client_first_z && z_order < client_first_z + client_size)
118+
if (z_order >= client_first_z && z_order < client_first_z + client_size) {
159119
layers[z_order]->SetValidatedType(HWC2::Composition::Client);
160-
else
120+
layers[z_order]->SetUseVPPCompose(false);
121+
} else {
161122
layers[z_order]->SetValidatedType(HWC2::Composition::Device);
123+
layers[z_order]->SetUseVPPCompose(true);
124+
}
162125
}
163126
}
164127

0 commit comments

Comments
 (0)