surface_view: Add constructor for ViewParams
This commit is contained in:
		| @@ -226,13 +226,8 @@ CachedSurface::CachedSurface(const GPUVAddr gpu_addr, const SurfaceParams& param | ||||
|     target = GetTextureTarget(params.target); | ||||
|     texture = CreateTexture(params, target, internal_format); | ||||
|     DecorateSurfaceName(); | ||||
|     ViewParams main{}; | ||||
|     main.num_levels = params.num_levels; | ||||
|     main.base_level = 0; | ||||
|     main.base_layer = 0; | ||||
|     main.num_layers = params.is_layered ? params.depth : 1; | ||||
|     main.target = params.target; | ||||
|     main_view = CreateView(main); | ||||
|     main_view = CreateView( | ||||
|         ViewParams(params.target, 0, params.is_layered ? params.depth : 1, 0, params.num_levels)); | ||||
|     main_view->DecorateViewName(gpu_addr, | ||||
|                                 params.TargetName() + "V:" + std::to_string(view_count++)); | ||||
| } | ||||
| @@ -378,13 +373,11 @@ void CachedSurfaceView::Attach(GLenum attachment) const { | ||||
|     switch (owner_params.target) { | ||||
|     case SurfaceTarget::Texture1D: | ||||
|         glFramebufferTexture1D(GL_DRAW_FRAMEBUFFER, attachment, surface.GetTarget(), | ||||
|                                surface.GetTexture(), | ||||
|                                params.base_level); | ||||
|                                surface.GetTexture(), params.base_level); | ||||
|         break; | ||||
|     case SurfaceTarget::Texture2D: | ||||
|         glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, attachment, surface.GetTarget(), | ||||
|                                surface.GetTexture(), | ||||
|                                params.base_level); | ||||
|                                surface.GetTexture(), params.base_level); | ||||
|         break; | ||||
|     case SurfaceTarget::Texture1DArray: | ||||
|     case SurfaceTarget::Texture2DArray: | ||||
|   | ||||
| @@ -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 { | ||||
|   | ||||
| @@ -13,15 +13,21 @@ | ||||
| namespace VideoCommon { | ||||
|  | ||||
| struct ViewParams { | ||||
|     ViewParams(VideoCore::Surface::SurfaceTarget target, u32 base_layer, u32 num_layers, | ||||
|                u32 base_level, u32 num_levels) | ||||
|         : target{target}, base_layer{base_layer}, num_layers{num_layers}, base_level{base_level}, | ||||
|           num_levels{num_levels} {} | ||||
|  | ||||
|     std::size_t Hash() const; | ||||
|  | ||||
|     bool operator==(const ViewParams& rhs) const; | ||||
|  | ||||
|     VideoCore::Surface::SurfaceTarget target{}; | ||||
|     u32 base_layer{}; | ||||
|     u32 num_layers{}; | ||||
|     u32 base_level{}; | ||||
|     u32 num_levels{}; | ||||
|     VideoCore::Surface::SurfaceTarget target; | ||||
|  | ||||
|     bool IsLayered() const { | ||||
|         switch (target) { | ||||
|         case VideoCore::Surface::SurfaceTarget::Texture1DArray: | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 ReinUsesLisp
					ReinUsesLisp