|
|
@@ -253,45 +253,30 @@ public:
|
|
|
}
|
|
|
|
|
|
TView EmplaceOverview(const SurfaceParams& overview_params) {
|
|
|
- ViewParams vp{};
|
|
|
- vp.base_level = 0;
|
|
|
- vp.num_levels = params.num_levels;
|
|
|
- vp.target = overview_params.target;
|
|
|
- if (params.is_layered && !overview_params.is_layered) {
|
|
|
- vp.base_layer = 0;
|
|
|
- vp.num_layers = 1;
|
|
|
- } else {
|
|
|
- vp.base_layer = 0;
|
|
|
- vp.num_layers = params.depth;
|
|
|
- }
|
|
|
- return GetView(vp);
|
|
|
+ const u32 num_layers{params.is_layered && !overview_params.is_layered ? 1 : params.depth};
|
|
|
+ const ViewParams view_params(overview_params.target, 0, num_layers, 0, params.num_levels);
|
|
|
+ return GetView(view_params);
|
|
|
}
|
|
|
|
|
|
std::optional<TView> EmplaceView(const SurfaceParams& view_params, const GPUVAddr view_addr) {
|
|
|
- if (view_addr < gpu_addr)
|
|
|
- return {};
|
|
|
- if (params.target == SurfaceTarget::Texture3D ||
|
|
|
+ if (view_addr < gpu_addr || params.target == SurfaceTarget::Texture3D ||
|
|
|
view_params.target == SurfaceTarget::Texture3D) {
|
|
|
return {};
|
|
|
}
|
|
|
- const std::size_t size = view_params.GetGuestSizeInBytes();
|
|
|
- auto layer_mipmap = GetLayerMipmap(view_addr);
|
|
|
+ const std::size_t size{view_params.GetGuestSizeInBytes()};
|
|
|
+ const auto layer_mipmap{GetLayerMipmap(view_addr)};
|
|
|
if (!layer_mipmap) {
|
|
|
return {};
|
|
|
}
|
|
|
- const u32 layer = (*layer_mipmap).first;
|
|
|
- const u32 mipmap = (*layer_mipmap).second;
|
|
|
+ const u32 layer{layer_mipmap->first};
|
|
|
+ const u32 mipmap{layer_mipmap->second};
|
|
|
if (GetMipmapSize(mipmap) != size) {
|
|
|
- // TODO: the view may cover many mimaps, this case can still go on
|
|
|
+ // TODO: The view may cover many mimaps, this case can still go on.
|
|
|
+ // This edge-case can be safely be ignored since it will just result in worse
|
|
|
+ // performance.
|
|
|
return {};
|
|
|
}
|
|
|
- ViewParams vp{};
|
|
|
- vp.base_layer = layer;
|
|
|
- vp.num_layers = 1;
|
|
|
- vp.base_level = mipmap;
|
|
|
- vp.num_levels = 1;
|
|
|
- vp.target = view_params.target;
|
|
|
- return {GetView(vp)};
|
|
|
+ return GetView(ViewParams(params.target, layer, 1, mipmap, 1));
|
|
|
}
|
|
|
|
|
|
TView GetMainView() const {
|