zoukankan      html  css  js  c++  java
  • ue metal feature level

       if (Input.ShaderFormat == NAME_SF_METAL || Input.ShaderFormat == NAME_SF_METAL_TVOS)
        {
            UE_CLOG(VersionEnum < 2, LogShaders, Warning, TEXT("Metal shader version must be Metal v1.2 or higher for format %s!"), VersionEnum, *Input.ShaderFormat.ToString());
            VersionEnum = VersionEnum >= 2 ? VersionEnum : 2;
            AdditionalDefines.SetDefine(TEXT("METAL_PROFILE"), 1);
        }
        else if (Input.ShaderFormat == NAME_SF_METAL_MRT || Input.ShaderFormat == NAME_SF_METAL_MRT_TVOS)
        {
            UE_CLOG(VersionEnum < 2, LogShaders, Warning, TEXT("Metal shader version must be Metal v1.2 or higher for format %s!"), VersionEnum, *Input.ShaderFormat.ToString());
            AdditionalDefines.SetDefine(TEXT("METAL_MRT_PROFILE"), 1);
            VersionEnum = VersionEnum >= 2 ? VersionEnum : 2;
            MetalCompilerTarget = HCT_FeatureLevelSM5;
            Semantics = EMetalGPUSemanticsTBDRDesktop;
        }
        else if (Input.ShaderFormat == NAME_SF_METAL_MACES3_1)
        {
            UE_CLOG(VersionEnum < 3, LogShaders, Warning, TEXT("Metal shader version must be Metal v2.0 or higher for format %s!"), VersionEnum, *Input.ShaderFormat.ToString());
            AdditionalDefines.SetDefine(TEXT("METAL_PROFILE"), 1);
            VersionEnum = VersionEnum > 3 ? VersionEnum : 3;
            MetalCompilerTarget = HCT_FeatureLevelES3_1;
            Semantics = EMetalGPUSemanticsImmediateDesktop;
        }
        else if (Input.ShaderFormat == NAME_SF_METAL_SM5_NOTESS)
        {
            UE_CLOG(VersionEnum < 3, LogShaders, Warning, TEXT("Metal shader version must be Metal v2.0 or higher for format %s!"), VersionEnum, *Input.ShaderFormat.ToString());
            AdditionalDefines.SetDefine(TEXT("METAL_SM5_NOTESS_PROFILE"), 1);
            AdditionalDefines.SetDefine(TEXT("USING_VERTEX_SHADER_LAYER"), 1);
            VersionEnum = VersionEnum > 3 ? VersionEnum : 3;
            MetalCompilerTarget = HCT_FeatureLevelSM5;
            Semantics = EMetalGPUSemanticsImmediateDesktop;
        }
        else if (Input.ShaderFormat == NAME_SF_METAL_SM5)
        {
            UE_CLOG(VersionEnum < 3, LogShaders, Warning, TEXT("Metal shader version must be Metal v2.0 or higher for format %s!"), VersionEnum, *Input.ShaderFormat.ToString());
            AdditionalDefines.SetDefine(TEXT("METAL_SM5_PROFILE"), 1);
            AdditionalDefines.SetDefine(TEXT("USING_VERTEX_SHADER_LAYER"), 1);
            VersionEnum = VersionEnum > 3 ? VersionEnum : 3;
            MetalCompilerTarget = HCT_FeatureLevelSM5;
            Semantics = EMetalGPUSemanticsImmediateDesktop;
        }
        else if (Input.ShaderFormat == NAME_SF_METAL_MRT_MAC)
        {
            UE_CLOG(VersionEnum < 3, LogShaders, Warning, TEXT("Metal shader version must be Metal v2.0 or higher for format %s!"), VersionEnum, *Input.ShaderFormat.ToString());
            AdditionalDefines.SetDefine(TEXT("METAL_MRT_PROFILE"), 1);
            VersionEnum = VersionEnum > 3 ? VersionEnum : 3;
            MetalCompilerTarget = HCT_FeatureLevelSM5;
            Semantics = EMetalGPUSemanticsTBDRDesktop;
        }
    #if PS4_PROFILE
        #define FEATURE_LEVEL FEATURE_LEVEL_SM5
    
    #elif SM5_PROFILE
        // SM5 = full dx11 features (high end UE4 rendering)
        #define FEATURE_LEVEL FEATURE_LEVEL_SM5
    
    #elif SM4_PROFILE
        #define FEATURE_LEVEL FEATURE_LEVEL_SM4
    
    #elif SWITCH_PROFILE || SWITCH_PROFILE_FORWARD
        #undef ES3_1_PROFILE
    
        #if SWITCH_PROFILE
            #define FEATURE_LEVEL FEATURE_LEVEL_SM5
        #else
            #define FEATURE_LEVEL FEATURE_LEVEL_ES3_1
            // @todo switch: maybe all uses of this should check feature level not profile?
            #define ES3_1_PROFILE 1
        #endif
    
    #elif VULKAN_PROFILE
        #define FEATURE_LEVEL FEATURE_LEVEL_ES3_1
        // @todo: replace usage of ES3_1_PROFILE with FEATURE_LEVEL where appropriate
        #undef ES3_1_PROFILE
        #define ES3_1_PROFILE 1 
    
    #elif VULKAN_PROFILE_SM5
        #define FEATURE_LEVEL FEATURE_LEVEL_SM5
        #define STENCIL_COMPONENT_SWIZZLE .x
    
    #elif METAL_PROFILE
        #define FEATURE_LEVEL  FEATURE_LEVEL_ES3_1
        // @todo metal: remove this and make sure all uses handle METAL_PROFILE
        #undef ES3_1_PROFILE
        #define ES3_1_PROFILE 1
    #if MAX_SHADER_LANGUAGE_VERSION >= 3
        #define FCOLOR_COMPONENT_SWIZZLE .rgba
    #else
        #define FCOLOR_COMPONENT_SWIZZLE .bgra
    #endif
        #define FMANUALFETCH_COLOR_COMPONENT_SWIZZLE .bgra
        #define STENCIL_COMPONENT_SWIZZLE .x
    
    #elif METAL_MRT_PROFILE
        #define FEATURE_LEVEL FEATURE_LEVEL_SM5
    #if MAX_SHADER_LANGUAGE_VERSION >= 3
        #define FCOLOR_COMPONENT_SWIZZLE .rgba
    #else
        #define FCOLOR_COMPONENT_SWIZZLE .bgra
    #endif
        #define FMANUALFETCH_COLOR_COMPONENT_SWIZZLE .bgra
        #define STENCIL_COMPONENT_SWIZZLE .x
    
    #elif METAL_SM5_NOTESS_PROFILE
        #define FEATURE_LEVEL FEATURE_LEVEL_SM5
        #define FCOLOR_COMPONENT_SWIZZLE .rgba
        #define FMANUALFETCH_COLOR_COMPONENT_SWIZZLE .bgra
        #define STENCIL_COMPONENT_SWIZZLE .x
    
    #elif METAL_SM5_PROFILE
        #define FEATURE_LEVEL FEATURE_LEVEL_SM5
        #define FCOLOR_COMPONENT_SWIZZLE .rgba
        #define FMANUALFETCH_COLOR_COMPONENT_SWIZZLE .bgra
        #define STENCIL_COMPONENT_SWIZZLE .x
    
    #elif ES3_1_PROFILE
        #define FEATURE_LEVEL FEATURE_LEVEL_ES3_1
    
        #if COMPILER_GLSL_ES3_1
            #define FCOLOR_COMPONENT_SWIZZLE .bgra  
            #define FMANUALFETCH_COLOR_COMPONENT_SWIZZLE .bgra
        #else 
            #define FCOLOR_COMPONENT_SWIZZLE .rgba
            #define FMANUALFETCH_COLOR_COMPONENT_SWIZZLE .bgra
        #endif
    
        #if COMPILER_GLSL || COMPILER_GLSL_ES3_1
            // A8 textures when sampled have their component in R
            #define A8_SAMPLE_MASK .r
        #endif
    #elif VECTORVM_PROFILE
        #define FEATURE_LEVEL FEATURE_LEVEL_SM5
    #endif

    SM5---dx11

    metal_MRT_Profile  sm5 tbdrDesktop 这俩不确定

    metal_sm5_noTess_Profile   no tessellation

    metal_sm5_profile 就是ios desktop renderer 的sm5  

    metal_Profile es31

    shader这里 metal的有三种

     metal sm5 ---basepass desktop  mac上的desktop renderer

    metal ---metal低版本---mobilebasepass ---gl_LastFragDataR_4 SceneDepth放这里 Mobile deferred 也是这个 ps里用这个(METAL_PROFILE && !MAC) && PIXELSHADER

    metal MRT---basepass   Mobile deferred SceneTextureStruct_SceneDepthTexture. ---这个就是mobile desktop renderer on mobile (METAL_MRT_PROFILE&& !MAC) && PIXELSHADER

     不一样的shader编号

    不同quality同样编号

  • 相关阅读:
    2、requests练习
    1、接口基础
    9、异常和文件
    宝马5系图片分类下载自动创建文件夹并保存
    opencv操作视频python
    利用协程框架,无界面浏览器爬取上海高院开庭数据
    协程框架
    多线程抓取邮箱
    selenium操作下拉选和网页提示框
    selenium相关导入By、Keys、WebDriverWait、ActionChains,显示等待与隐式等待
  • 原文地址:https://www.cnblogs.com/minggoddess/p/14466447.html
Copyright © 2011-2022 走看看