Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- "\x12\x04\x96\x19#pragma clang diagnostic ignored \"-Wmissing-prototypes\"
- #include <metal_stdlib>
- #include <simd/simd.h>
- using namespace metal;
- struct VStoFS
- {
- float4 position;
- float2 uv0;
- float3 worldPosition;
- float3 tangentToWorldZ;
- float4 tangentToWorldX;
- };
- struct SurfaceData
- {
- float4 albedo;
- float4 worldNormal;
- float depth;
- float roughness;
- float metalness;
- uint mask;
- };
- struct MaterialParams
- {
- float2 gUVOffset;
- float2 gUVTile;
- float3 gEmissiveColor;
- };
- struct PerObject
- {
- float4x4 gMatWorld;
- float4x4 gMatInvWorld;
- float4x4 gMatWorldNoScale;
- float4x4 gMatInvWorldNoScale;
- float gWorldDeterminantSign;
- uint gLayer;
- };
- struct spvDescriptorSetBuffer0
- {
- constant PerObject* m_191 [[id(15)]];
- texture2d<float> gAlbedoTex [[id(22)]];
- texture2d<float> gNormalTex [[id(23)]];
- sampler gAlbedoTexSmplr [[id(23)]];
- texture2d<float> gRoughnessTex [[id(24)]];
- sampler gNormalTexSmplr [[id(24)]];
- texture2d<float> gMetalnessTex [[id(25)]];
- sampler gRoughnessTexSmplr [[id(25)]];
- texture2d<float> gEmissiveMaskTex [[id(26)]];
- sampler gMetalnessTexSmplr [[id(26)]];
- constant MaterialParams* m_135 [[id(27)]];
- sampler gEmissiveMaskTexSmplr [[id(27)]];
- };
- struct main0_out
- {
- float3 SV_Target0 [[color(0)]];
- float4 SV_Target1 [[color(1)]];
- float4 SV_Target2 [[color(2)]];
- float2 SV_Target3 [[color(3)]];
- float SV_Target4 [[color(4)]];
- };
- struct main0_in
- {
- float2 bs_TEXCOORD0 [[user(locn0)]];
- float3 bs_TEXCOORD1 [[user(locn1)]];
- float3 bs_NORMAL0 [[user(locn2)]];
- float4 bs_TANGENT0 [[user(locn3)]];
- };
- float3 calcWorldNormal(thread const VStoFS& xsr_input, thread const float3& surfaceNormal)
- {
- float3 tangentToWorldX = xsr_input.tangentToWorldX.xyz;
- float3 tangentToWorldZ = xsr_input.tangentToWorldZ;
- float3 tangentToWorldY = cross(tangentToWorldZ, tangentToWorldX) * xsr_input.tangentToWorldX.w;
- float3x3 tangentToWorld = float3x3(float3(tangentToWorldX), float3(tangentToWorldY), float3(tangentToWorldZ));
- return normalize(tangentToWorld * surfaceNormal);
- }
- void encodeGBuffer(thread const SurfaceData& data, thread float4& GBufferAData, thread float4& GBufferBData, thread float2& GBufferCData, thread float& GBufferDData)
- {
- GBufferAData = data.albedo;
- float3 _91 = float3((data.worldNormal.xyz * 0.5) + float3(0.5));
- GBufferBData = float4(_91.x, _91.y, _91.z, GBufferBData.w);
- GBufferBData.w = 1.0;
- GBufferCData.x = data.roughness;
- GBufferCData.y = data.metalness;
- GBufferDData = float(data.mask) / 256.0;
- }
- fragment main0_out main0(main0_in in [[stage_in]], constant spvDescriptorSetBuffer0& spvDescriptorSet0 [[buffer(0)]], float4 gl_FragCoord [[position]])
- {
- main0_out out = {};
- VStoFS xsr_input;
- xsr_input.position = gl_FragCoord;
- xsr_input.uv0 = in.bs_TEXCOORD0;
- xsr_input.worldPosition = in.bs_TEXCOORD1;
- xsr_input.tangentToWorldZ = in.bs_NORMAL0;
- xsr_input.tangentToWorldX = in.bs_TANGENT0;
- float2 uv = (xsr_input.uv0 * (*spvDescriptorSet0.m_135).gUVTile) + (*spvDescriptorSet0.m_135).gUVOffset;
- float3 normal = normalize(float3((spvDescriptorSet0.gNormalTex.sample(spvDescriptorSet0.gNormalTexSmplr, uv) * 2.0).xyz) - float3(1.0));
- VStoFS param = xsr_input;
- float3 param_1 = normal;
- float3 worldNormal = calcWorldNormal(param, param_1);
- SurfaceData surfaceData;
- surfaceData.albedo = spvDescriptorSet0.gAlbedoTex.sample(spvDescriptorSet0.gAlbedoTexSmplr, uv);
- surfaceData.worldNormal = float4(worldNormal.x, worldNormal.y, worldNormal.z, surfaceData.worldNormal.w);
- surfaceData.roughness = spvDescriptorSet0.gRoughnessTex.sample(spvDescriptorSet0.gRoughnessTexSmplr, uv).x;
- surfaceData.metalness = spvDescriptorSet0.gMetalnessTex.sample(spvDescriptorSet0.gMetalnessTexSmplr, uv).x;
- surfaceData.mask = (*spvDescriptorSet0.m_191).gLayer;
- SurfaceData param_2 = surfaceData;
- float4 param_3;
- float4 param_4;
- float2 param_5;
- float param_6;
- encodeGBuffer(param_2, param_3, param_4, param_5, param_6);
- out.SV_Target1 = param_3;
- out.SV_Target2 = param_4;
- out.SV_Target3 = param_5;
- out.SV_Target4 = param_6;
- out.SV_Target0 = (*spvDescriptorSet0.m_135).gEmissiveColor * spvDescriptorSet0.gEmissiveMaskTex.sample(spvDescriptorSet0.gEmissiveMaskTexSmplr, uv).x;
- return out;
- }
- "
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement