{
    "Name": "depthMitigation",
    "OverrideMaterial": "engine:engineDefaults.rematerialdefinition",
    "Parameters": {
        "Constants": {
            "viewToProjArray": "view.viewToProjArray",
            "viewportPercentsArray" : "view.viewportPercentsArray"
        },
        "Buffers": {
            "position": "geometry.vertexPosition",
            "texcoord": "geometry.vertexUV"
        },
        "Textures": {
            "lowResPortalMask" : "fallback.blackArray",
            "textureBlueNoise" : "engine:blueNoise64RGBA8.ktx"
        }
    },
    "Techniques": [
        {
            "Name": "ClearDepth",
            "VertexShader": {
                "Entry": "fullScreen2Vert"
            },
            "State" : {
                "AlphaBlend" : false,
                "WriteDepth" : true,
                "DepthCompareFunction" : "Always"
            }
        },
        {
            "Name": "RenderLinearizedDepthSU",
            "VertexShader": {
                "Entry": "vsLinearizedDepthOnly"
            },

            "PixelShader": {
                "Entry": "fsLinearizedDepthAsColor"
            },
            "State" : {
                "AlphaBlend" : false,
                "WriteDepth" : true,
                "DepthCompareFunction" : "Greater"
            },
            "FunctionConstants": {
                "LinearizeDepthColorOutputIndex" : "0"
            }
        },
        {
            "Name": "RenderLinearizedDepthContent",
            "VertexShader": {
                "Entry": "vsLinearizedDepthOnly"
            },

            "PixelShader": {
                "Entry": "fsLinearizedDepthAsColorWithDither"
            },
            "State" : {
                "WriteStencil": true,
                "AlphaBlend" : false,
                "WriteDepth" : true,
                "DepthCompareFunction" : "Greater"
            },
            "FunctionConstants": {
                "EnableDepthDither"               : "true",
                "LinearizeDepthColorOutputIndex"  : "1",
                "PortalClippingMode"              : "0"
            },
            "Variations" : {
                "EnableDepthDither"               : ["true", "false"],
                "PortalClippingMode"              : ["0", "1", "2"]
            },
            "SupportsRuntimeFunctionConstants" : true,
        },
        {
            "Name": "RenderLinearizedDepthMajorDepthConflictContributor",
            "VertexShader": {
                "Entry": "vsLinearizedDepthOnly"
            },

            "PixelShader": {
                "Entry": "fsLinearizedDepthAsColorWithDither"
            },
            "State" : {
                "AlphaBlend" : false,
                "WriteDepth" : true,
                "DepthCompareFunction" : "Greater"
            },
            "FunctionConstants": {
                "EnableDepthDither"               : "true",
                "LinearizeDepthColorOutputIndex"  : "2"
            },
            "Variations" : {
                "EnableDepthDither"                : ["true", "false"],
            }
        },
        {
            "Name": "RenderLinearizedDepthEnvironment",
            "VertexShader": {
                "Entry": "vsLinearizedDepthOnly"
            },

            "PixelShader": {
                "Entry": "fsLinearizedDepthAsColorWithDither"
            },
            "State" : {
                "AlphaBlend" : false,
                "WriteDepth" : true,
                "DepthCompareFunction" : "Greater"
            },
            "FunctionConstants": {
                "EnableDepthDither"               : "true",
                "LinearizeDepthColorOutputIndex"  : "3"
            },
            "Variations" : {
                "EnableDepthDither"                : ["true", "false"],
            }
        }
    ],
    "TechniqueMapping": {
        "ClearDepth": "ClearDepth",
        "RenderLinearizedDepthSU": "RenderLinearizedDepthSU",
        "RenderLinearizedDepthEnvironmentToDepthDifferenceTexture": "RenderLinearizedDepthEnvironment",
        "RenderLinearizedDepthContent": "RenderLinearizedDepthContent",
        "RenderLinearizedDepthMajorDepthConflictContributor": "RenderLinearizedDepthMajorDepthConflictContributor"
    }
}
