|
@@ -421,8 +421,7 @@ private:
|
|
|
const auto& cr_params = current_surface->GetSurfaceParams();
|
|
const auto& cr_params = current_surface->GetSurfaceParams();
|
|
|
TSurface new_surface;
|
|
TSurface new_surface;
|
|
|
if (cr_params.pixel_format != params.pixel_format && !is_render &&
|
|
if (cr_params.pixel_format != params.pixel_format && !is_render &&
|
|
|
- siblings_table[static_cast<std::size_t>(cr_params.pixel_format)] ==
|
|
|
|
|
- params.pixel_format) {
|
|
|
|
|
|
|
+ GetSiblingFormat(cr_params.pixel_format) == params.pixel_format) {
|
|
|
SurfaceParams new_params = params;
|
|
SurfaceParams new_params = params;
|
|
|
new_params.pixel_format = cr_params.pixel_format;
|
|
new_params.pixel_format = cr_params.pixel_format;
|
|
|
new_params.component_type = cr_params.component_type;
|
|
new_params.component_type = cr_params.component_type;
|
|
@@ -459,17 +458,16 @@ private:
|
|
|
const SurfaceParams& params, bool is_render) {
|
|
const SurfaceParams& params, bool is_render) {
|
|
|
const bool is_mirage = !current_surface->MatchFormat(params.pixel_format);
|
|
const bool is_mirage = !current_surface->MatchFormat(params.pixel_format);
|
|
|
const bool matches_target = current_surface->MatchTarget(params.target);
|
|
const bool matches_target = current_surface->MatchTarget(params.target);
|
|
|
- const auto match_check = ([&]() -> std::pair<TSurface, TView> {
|
|
|
|
|
|
|
+ const auto match_check = [&]() -> std::pair<TSurface, TView> {
|
|
|
if (matches_target) {
|
|
if (matches_target) {
|
|
|
return {current_surface, current_surface->GetMainView()};
|
|
return {current_surface, current_surface->GetMainView()};
|
|
|
}
|
|
}
|
|
|
return {current_surface, current_surface->EmplaceOverview(params)};
|
|
return {current_surface, current_surface->EmplaceOverview(params)};
|
|
|
- });
|
|
|
|
|
|
|
+ };
|
|
|
if (!is_mirage) {
|
|
if (!is_mirage) {
|
|
|
return match_check();
|
|
return match_check();
|
|
|
}
|
|
}
|
|
|
- if (!is_render && siblings_table[static_cast<std::size_t>(current_surface->GetFormat())] ==
|
|
|
|
|
- params.pixel_format) {
|
|
|
|
|
|
|
+ if (!is_render && GetSiblingFormat(current_surface->GetFormat()) == params.pixel_format) {
|
|
|
return match_check();
|
|
return match_check();
|
|
|
}
|
|
}
|
|
|
return RebuildSurface(current_surface, params, is_render);
|
|
return RebuildSurface(current_surface, params, is_render);
|
|
@@ -766,6 +764,10 @@ private:
|
|
|
return {};
|
|
return {};
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ constexpr PixelFormat GetSiblingFormat(PixelFormat format) const {
|
|
|
|
|
+ return siblings_table[static_cast<std::size_t>(format)];
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
struct FramebufferTargetInfo {
|
|
struct FramebufferTargetInfo {
|
|
|
TSurface target;
|
|
TSurface target;
|
|
|
TView view;
|
|
TView view;
|