§
     ’Þj}  ã                  ó|   — d dl mZ d dlmZ d dlmZ ddlmZm	Z	m
Z
mZmZmZ ddlmZ  G d„ dej        ¦  «        Zd	S )
é    )Úannotations)Úspatial_upsamplers)Útemporal_upsamplersé   )ÚDLSSG_LINUXÚdlssg_capabilitiesÚframe_generateÚis_rtx_50_seriesÚrelease_flow_modelÚunavailable_reason)ÚDLSS5SpatialUpsamplerc                  óŽ   — e Zd ZdZdZdd„Zd„ Zdd„Zddddœd	„Ze	d
„ ¦   «         Z
e	d„ ¦   «         Zd„ Zddœd„Zdddœd„Zd„ ZdS )ÚDLSSGTemporalUpsamplerÚdlssg)ç       @g      @g      @g      @g      @Nc                ó>   — || _         |�ddlm}  ||¦  «         d S d S )Nr   )Úconfigure_depth_estimator)Úserver_configÚruntimer   )Úselfr   Úfiles_locatorr   s       úOC:\Users\johnn\OneDrive\Documents\AI\postprocessing\dlss5\temporal_upsampler.pyÚ__init__zDLSSGTemporalUpsampler.__init__   sA   € Ø*ˆÔØÐ$Ø:Ð:Ð:Ð:Ð:Ð:Ø%Ð% mÑ4Ô4Ð4Ð4Ð4ð %Ð$ó    c                óZ   — t          j        t          j        | j        d¦  «        ¦  «        S )NÚdlss5)r   Únormalize_config_sectionÚspatial_apiÚread_config_section_by_keyr   ©r   s    r   ÚconfigzDLSSGTemporalUpsampler.config   s8   € Ý$Ô=½kÔ>dÐeiÔewð  zAñ  ?Bô  ?Bñ  Cô  Cð  	Cr   Tc                ór   — ddl m} |                      ¦   «         d         dk    r |d| j        ¦  «        gng S )Nr   )Úquery_preprocessor_download_defÚmotion_vectorÚraftÚflow)Úpreprocessing.processorsr#   r!   r   )r   Úenabled_onlyr#   s      r   Úquery_download_defsz*DLSSGTemporalUpsampler.query_download_defs   sX   € ØLÐLÐLÐLÐLÐLàPT×P[ÒP[ÑP]ÔP]Ð^mÔPnÐrxÒPxÐPxÐ/Ð/°¸Ô8JÑKÔKÐLÐLð  Að  	Ar   )Úsend_cmdÚstatus_textÚgenc               óV   — ddl m}  ||                      ¦   «         ||pd||¬¦  «        S )Nr   )Úprocess_files_def_if_neededz-Downloading DLSS Frame Generation Model Files)r*   r+   r,   Úprocess_files)Úshared.utils.downloadr.   r)   )r   r/   r*   r+   r,   Ú_kwargsr.   s          r   ÚdownloadzDLSSGTemporalUpsampler.download   sb   € ØEÐEÐEÐEÐEÐEà*Ð*¨4×+CÒ+CÑ+EÔ+EÐPXÐfqð  geð  veð  knð  ~Kð  Lñ  Lô  Lð  	Lr   c                ó@   — | j         rt          j        nt          j        S ©N)Úreason_disabledÚapiÚPROCESSOR_STATUS_DISABLEDÚPROCESSOR_STATUS_ENABLEDr    s    r   ÚstatuszDLSSGTemporalUpsampler.status    s   € à04Ô0DÐf�sÔ,Ð,Í#ÔJfÐfr   c                ó"   — t          d¬¦  «        S )NT©Útemporal)r   r    s    r   r5   z&DLSSGTemporalUpsampler.reason_disabled$   s   € å!¨4Ð0Ñ0Ô0Ð0r   c           	     ó:  ‡‡— t          d¬¦  «        }|st          ¦   «         ni }t          |                     dd¦  «        ¦  «        }t          |                     dd¦  «        ¦  «        Št          rdnt          ¦   «         rdnd	Št          ˆfd
„| j        D ¦   «         ¦  «        }|r)|dk    r!t          ˆˆfd„| j        D ¦   «         ¦  «        nd}|s	|dk     rd}n|s‰dz   ‰k     rd‰dz   › �}d|rd|› d�ndz   }ddd| j        di|| j        fg| j        |idddœS )NTr;   Úworker_versionr   Úmulti_frame_count_maxr   é   é   é   c              3  óD   •K  — | ]}|t          d ‰¦  «        k    ¯|V — ŒdS )rB   N)Úmin)Ú.0ÚscaleÚhardware_limits     €r   ú	<genexpr>zFDLSSGTemporalUpsampler.query_temporal_upsampler_def.<locals>.<genexpr>.   s9   øè è € ÐcÐc eÀ5ÍCÐPQÐSaÑLbÔLbÒCbÐCb˜EÐCbÐCbÐCbÐCbÐcÐcr   c              3  ó:   •K  — | ]}|‰k    ¯|d z
  ‰k    ¯|V — ŒdS )r   N© )rE   rF   rG   Úmaximums     €€r   rH   zFDLSSGTemporalUpsampler.query_temporal_upsampler_def.<locals>.<genexpr>0   s@   øè è € ÐxÐx¨%ÀuÐP^ÒG^ÐG^ÐchÐklÑclÐpwÒcwÐcw ÐcwÐcwÐcwÐcwÐxÐxr   )r   zworker v2 required for x3+zGPU/runtime supports up to xzDLSS Frame Generationz (ú)Ú r   i'  zdlssg*2a
  NVIDIA DLSS Frame Generation using video motion estimation. Linux supports experimental x2 with the NVIDIA Vulkan driver and a compatible RTX GPU. Windows supports x2-x4 and capability-gated x5/x6 on RTX 50 series, and requires Windows 11, HAGS, and RTX 40 or newer.)ÚnameÚ
config_keyÚposÚ
method_posÚmethodsÚmultipliersÚdefault_temporal_upsamplingÚdescription)	r   r   ÚintÚgetr   r
   ÚtupleÚMULTIPLIERSÚMETHOD)r   ÚreasonÚcapabilitiesr>   rS   ÚlabelrG   rK   s         @@r   Úquery_temporal_upsampler_defz3DLSSGTemporalUpsampler.query_temporal_upsampler_def(   sž  øø€ Ý#¨TÐ2Ñ2Ô2ˆØ39ÐAÕ)Ñ+Ô+Ð+¸rˆÝ˜\×-Ò-Ð.>ÀÑBÔBÑCÔCˆÝ�l×&Ò&Ð'>ÀÑBÔBÑCÔCˆÝ)ÐO˜˜Õ5EÑ5GÔ5GÐ0N°°ÈQˆÝÐcÐcÐcÐc¨tÔ/?ÐcÑcÔcÑcÔcˆØð 	\ð }Kð  OPò  }Pð  }P�%ÐxÐxÐxÐxÐx°4Ô3CÐxÑxÔxÑxÔxÐxð  V\ˆKØð 	B˜.¨1Ò,Ð,Ø1ˆFˆFØð 	B˜G a™K¨.Ò8Ð8ØA°G¸a±KÐAÐAˆFØ'¸VÐ+K¨>°¨>¨>¨>¨>ÈÑLˆà+Ø!ØØœ;¨Ð/Ø ¤Ð,Ð-Ø œK¨Ð5Ø+4ð hð	
ð 	
ð 		
r   F)Úsource_is_imagec               óö  — |                       |¦  «        }|�|d         | j        vrd|› �S |rdS t          r|d         dk    rdS t          d¬¦  «        }|rd|› d	�S t	          ¦   «         }t          |                     d
d¦  «        ¦  «        }t          |                     dd¦  «        ¦  «        }|d         dk    rt          ¦   «         sdS |d         dk    r|dk     rdS |d         dz
  |k    r	d|dz   › d�S dS )Nr   z$Unknown DLSS Frame Generation mode: z1Temporal Upsampling can not be used with an Imager@   z7Linux DLSS Frame Generation currently supports x2 only.Tr;   z&DLSS Frame Generation is unavailable: z. See docs/DLSS5.md.r>   r   r?   rB   zADLSS Frame Generation x5/x6 requires a GeForce RTX 50-series GPU.zBDLSS Frame Generation x3-x6 requires worker v2. See docs/DLSS5.md.z2DLSS Frame Generation on this GPU supports up to xú.rM   )Úsplit_valuerY   r   r   r   rV   rW   r
   )r   Útemporal_upsamplingr_   Úsplitr[   r\   r>   rK   s           r   Úvalidate_upsamplingz*DLSSGTemporalUpsampler.validate_upsamplingA   s?  € Ø× Ò Ð!4Ñ5Ô5ˆØˆ=˜E !œH¨DÔ,<Ð<Ð<ØOÐ:MÐOÐOÐOØð 	GØFÐFÝð 	M˜5 œ8 qš=˜=ØLÐLÝ#¨TÐ2Ñ2Ô2ˆØð 	YØX¸FÐXÐXÐXÐXÝ)Ñ+Ô+ˆÝ˜\×-Ò-Ð.>ÀÑBÔBÑCÔCˆÝ�l×&Ò&Ð'>ÀÑBÔBÑCÔCˆØ�Œ8�aŠ<ˆ<Õ 0Ñ 2Ô 2ˆ<ØVÐVØ�Œ8�aŠ<ˆ<˜N¨QÒ.Ð.ØWÐWØ�Œ8�a‰<˜'Ò!Ð!ØVÈÐRSÉÐVÐVÐVÐVØˆrr   )Úabort_callbackÚprogress_callbackc          	     óú   — |                       |¦  «        }|rt          |¦  «        ‚t          |                      |¦  «        d         ¦  «        }	t	          ||||	|                      ¦   «         d         ||¬¦  «        S )Nr   r$   )r$   rf   rg   )re   ÚRuntimeErrorrV   rb   r	   r!   )
r   rc   ÚsampleÚprevious_last_frameÚfpsrf   rg   ÚkwargsÚerrorrF   s
             r   Útemporal_upsamplez(DLSSGTemporalUpsampler.temporal_upsampleW   s”   € Ø×(Ò(Ð)<Ñ=Ô=ˆØð 	&Ý˜uÑ%Ô%Ð%Ý�D×$Ò$Ð%8Ñ9Ô9¸!Ô<Ñ=Ô=ˆÝ˜fÐ&9¸3ÀÐUY×U`ÒU`ÑUbÔUbÐcrÔUsð  ESð  gxð  yñ  yô  yð  	yr   c                ó"   — t          ¦   «          d S r4   )r   r    s    r   Úrelease_vramz#DLSSGTemporalUpsampler.release_vram^   s   € ÝÑÔÐÐÐr   )NN)T)Ú__name__Ú
__module__Ú__qualname__rZ   rY   r   r!   r)   r2   Úpropertyr9   r5   r^   re   ro   rq   rJ   r   r   r   r   	   s&  € € € € € Ø€FØ+€Kð5ð 5ð 5ð 5ðCð Cð CðAð Að Að Að
 37ÀDÈdð Lð Lð Lð Lð Lð
 ðgð gñ „Xðgð ð1ð 1ñ „Xð1ð
ð 
ð 
ð2 KPð ð ð ð ð ð, jnð  BFð yð yð yð yð yðð ð ð ð r   r   N)Ú
__future__r   Úpostprocessingr   r   r   r6   r   r   r   r	   r
   r   r   Úspatial_upsamplerr   ÚSimpleScaleSuffixMixinr   rJ   r   r   ú<module>rz      s¾   ðØ "Ð "Ð "Ð "Ð "Ð "à <Ð <Ð <Ð <Ð <Ð <Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø ~Ð ~Ð ~Ð ~Ð ~Ð ~Ð ~Ð ~Ð ~Ð ~Ð ~Ð ~Ð ~Ð ~Ð ~Ð ~Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4ðVð Vð Vð Vð V˜SÔ7ñ Vô Vð Vð Vð Vr   