361 lines
11 KiB
GLSL
361 lines
11 KiB
GLSL
Shader "Hidden/Universal Render Pipeline/StencilDitherMaskSeed"
|
|
{
|
|
Properties
|
|
{
|
|
_StencilRefDitherMask ("StencilRefDitherMask", Float) = 0
|
|
_StencilWriteDitherMask ("StencilWriteDitherMask", Float) = 0
|
|
}
|
|
SubShader
|
|
{
|
|
Tags { "RenderPipeline" = "UniversalPipeline" "RenderType" = "Opaque" }
|
|
Pass
|
|
{
|
|
Name "StencilDitherMaskSeed"
|
|
Tags { "RenderPipeline" = "UniversalPipeline" "RenderType" = "Opaque" }
|
|
ZTest Always
|
|
ZWrite Off
|
|
Cull Off
|
|
Stencil
|
|
{
|
|
WriteMask 0
|
|
CompFront Always
|
|
PassFront Replace
|
|
FailFront Keep
|
|
ZFailFront Keep
|
|
CompBack Always
|
|
PassBack Replace
|
|
FailBack Keep
|
|
ZFailBack Keep
|
|
}
|
|
GpuProgramID 60745
|
|
|
|
HLSLPROGRAM
|
|
|
|
// https://docs.unity3d.com/Manual/SL-PragmaDirectives.html
|
|
#pragma vertex vert
|
|
#pragma fragment frag
|
|
#pragma target 5.0
|
|
#pragma multi_compile _ STEREO_INSTANCING_ON
|
|
|
|
|
|
#ifndef STEREO_INSTANCING_ON
|
|
#define ANY_SHADER_VARIANT_ACTIVE
|
|
|
|
float4 _BlitScaleBias;
|
|
|
|
static float4 vertex_uniform_buffer_0[131];
|
|
static float4 gl_Position;
|
|
static int gl_VertexIndex;
|
|
static int gl_BaseVertexARB;
|
|
static float2 vertex_output_1;
|
|
|
|
struct Vertex_Stage_Input
|
|
{
|
|
uint gl_VertexIndex : SV_VertexID;
|
|
uint gl_BaseVertexARB : SV_StartVertexLocation;
|
|
};
|
|
|
|
struct Vertex_Stage_Output
|
|
{
|
|
float2 vertex_output_1 : TEXCOORD; // TEXCOORD
|
|
float4 gl_Position : SV_Position;
|
|
};
|
|
|
|
uint spvBitfieldInsert(uint Base, uint Insert, uint Offset, uint Count)
|
|
{
|
|
uint Mask = Count == 32 ? 0xffffffff : (((1u << Count) - 1) << (Offset & 31));
|
|
return (Base & ~Mask) | ((Insert << Offset) & Mask);
|
|
}
|
|
|
|
uint2 spvBitfieldInsert(uint2 Base, uint2 Insert, uint Offset, uint Count)
|
|
{
|
|
uint Mask = Count == 32 ? 0xffffffff : (((1u << Count) - 1) << (Offset & 31));
|
|
return (Base & ~Mask) | ((Insert << Offset) & Mask);
|
|
}
|
|
|
|
uint3 spvBitfieldInsert(uint3 Base, uint3 Insert, uint Offset, uint Count)
|
|
{
|
|
uint Mask = Count == 32 ? 0xffffffff : (((1u << Count) - 1) << (Offset & 31));
|
|
return (Base & ~Mask) | ((Insert << Offset) & Mask);
|
|
}
|
|
|
|
uint4 spvBitfieldInsert(uint4 Base, uint4 Insert, uint Offset, uint Count)
|
|
{
|
|
uint Mask = Count == 32 ? 0xffffffff : (((1u << Count) - 1) << (Offset & 31));
|
|
return (Base & ~Mask) | ((Insert << Offset) & Mask);
|
|
}
|
|
|
|
void vert_main()
|
|
{
|
|
uint vertex_unnamed_27 = 1u & 31u;
|
|
float vertex_unnamed_39 = float(spvBitfieldInsert(0u, uint(gl_VertexIndex) - uint(gl_BaseVertexARB), vertex_unnamed_27, min((1u & 31u), (32u - vertex_unnamed_27))));
|
|
float vertex_unnamed_40 = float((uint(gl_VertexIndex) - uint(gl_BaseVertexARB)) & 2u);
|
|
gl_Position.x = mad(vertex_unnamed_39, 2.0f, -1.0f);
|
|
gl_Position.y = mad(vertex_unnamed_40, 2.0f, -1.0f);
|
|
vertex_output_1.x = mad(vertex_unnamed_39, vertex_uniform_buffer_0[130u].x, vertex_uniform_buffer_0[130u].z);
|
|
vertex_output_1.y = mad(((-0.0f) - vertex_unnamed_40) + 1.0f, vertex_uniform_buffer_0[130u].y, vertex_uniform_buffer_0[130u].w);
|
|
gl_Position.z = 1.0f;
|
|
gl_Position.w = 1.0f;
|
|
}
|
|
|
|
Vertex_Stage_Output vert(Vertex_Stage_Input stage_input)
|
|
{
|
|
vertex_uniform_buffer_0[130] = float4(_BlitScaleBias[0], _BlitScaleBias[1], _BlitScaleBias[2], _BlitScaleBias[3]);
|
|
|
|
gl_VertexIndex = int(stage_input.gl_VertexIndex + stage_input.gl_BaseVertexARB);
|
|
gl_BaseVertexARB = stage_input.gl_BaseVertexARB;
|
|
vert_main();
|
|
Vertex_Stage_Output stage_output;
|
|
stage_output.gl_Position = gl_Position;
|
|
stage_output.vertex_output_1 = vertex_output_1;
|
|
return stage_output;
|
|
}
|
|
|
|
#endif // !STEREO_INSTANCING_ON
|
|
|
|
|
|
#ifdef STEREO_INSTANCING_ON
|
|
#define ANY_SHADER_VARIANT_ACTIVE
|
|
|
|
float4 _BlitScaleBias;
|
|
|
|
static float4 vertex_uniform_buffer_0[100];
|
|
static float4 gl_Position;
|
|
static uint gl_Layer;
|
|
static int gl_VertexIndex;
|
|
static int gl_InstanceIndex;
|
|
static int gl_BaseVertexARB;
|
|
static int gl_BaseInstanceARB;
|
|
static float2 vertex_output_1;
|
|
|
|
struct Vertex_Stage_Input
|
|
{
|
|
uint gl_VertexIndex : SV_VertexID;
|
|
uint gl_InstanceIndex : SV_InstanceID;
|
|
uint gl_BaseVertexARB : SV_StartVertexLocation;
|
|
uint gl_BaseInstanceARB : SV_StartInstanceLocation;
|
|
};
|
|
|
|
struct Vertex_Stage_Output
|
|
{
|
|
float2 vertex_output_1 : TEXCOORD; // TEXCOORD
|
|
float4 gl_Position : SV_Position;
|
|
uint gl_Layer : SV_RenderTargetArrayIndex;
|
|
};
|
|
|
|
uint spvBitfieldInsert(uint Base, uint Insert, uint Offset, uint Count)
|
|
{
|
|
uint Mask = Count == 32 ? 0xffffffff : (((1u << Count) - 1) << (Offset & 31));
|
|
return (Base & ~Mask) | ((Insert << Offset) & Mask);
|
|
}
|
|
|
|
uint2 spvBitfieldInsert(uint2 Base, uint2 Insert, uint Offset, uint Count)
|
|
{
|
|
uint Mask = Count == 32 ? 0xffffffff : (((1u << Count) - 1) << (Offset & 31));
|
|
return (Base & ~Mask) | ((Insert << Offset) & Mask);
|
|
}
|
|
|
|
uint3 spvBitfieldInsert(uint3 Base, uint3 Insert, uint Offset, uint Count)
|
|
{
|
|
uint Mask = Count == 32 ? 0xffffffff : (((1u << Count) - 1) << (Offset & 31));
|
|
return (Base & ~Mask) | ((Insert << Offset) & Mask);
|
|
}
|
|
|
|
uint4 spvBitfieldInsert(uint4 Base, uint4 Insert, uint Offset, uint Count)
|
|
{
|
|
uint Mask = Count == 32 ? 0xffffffff : (((1u << Count) - 1) << (Offset & 31));
|
|
return (Base & ~Mask) | ((Insert << Offset) & Mask);
|
|
}
|
|
|
|
void vert_main()
|
|
{
|
|
uint vertex_unnamed_30 = 1u & 31u;
|
|
float vertex_unnamed_42 = float(spvBitfieldInsert(0u, uint(gl_VertexIndex) - uint(gl_BaseVertexARB), vertex_unnamed_30, min((1u & 31u), (32u - vertex_unnamed_30))));
|
|
float vertex_unnamed_43 = float((uint(gl_VertexIndex) - uint(gl_BaseVertexARB)) & 2u);
|
|
gl_Position.x = mad(vertex_unnamed_42, 2.0f, -1.0f);
|
|
gl_Position.y = mad(vertex_unnamed_43, 2.0f, -1.0f);
|
|
vertex_output_1.x = mad(vertex_unnamed_42, vertex_uniform_buffer_0[99u].x, vertex_uniform_buffer_0[99u].z);
|
|
vertex_output_1.y = mad(((-0.0f) - vertex_unnamed_43) + 1.0f, vertex_uniform_buffer_0[99u].y, vertex_uniform_buffer_0[99u].w);
|
|
gl_Position.z = 1.0f;
|
|
gl_Position.w = 1.0f;
|
|
gl_Layer = int((uint(gl_InstanceIndex) - uint(gl_BaseInstanceARB)) & 1u);
|
|
}
|
|
|
|
Vertex_Stage_Output vert(Vertex_Stage_Input stage_input)
|
|
{
|
|
vertex_uniform_buffer_0[99] = float4(_BlitScaleBias[0], _BlitScaleBias[1], _BlitScaleBias[2], _BlitScaleBias[3]);
|
|
|
|
gl_VertexIndex = int(stage_input.gl_VertexIndex + stage_input.gl_BaseVertexARB);
|
|
gl_InstanceIndex = int(stage_input.gl_InstanceIndex + stage_input.gl_BaseInstanceARB);
|
|
gl_BaseVertexARB = stage_input.gl_BaseVertexARB;
|
|
gl_BaseInstanceARB = stage_input.gl_BaseInstanceARB;
|
|
vert_main();
|
|
Vertex_Stage_Output stage_output;
|
|
stage_output.gl_Position = gl_Position;
|
|
stage_output.gl_Layer = gl_Layer;
|
|
stage_output.vertex_output_1 = vertex_output_1;
|
|
return stage_output;
|
|
}
|
|
|
|
#endif // STEREO_INSTANCING_ON
|
|
|
|
|
|
#ifndef STEREO_INSTANCING_ON
|
|
#define ANY_SHADER_VARIANT_ACTIVE
|
|
|
|
int _StencilDitherPattern;
|
|
|
|
static float4 fragment_uniform_buffer_0[137];
|
|
static float4 gl_FragCoord;
|
|
static float2 fragment_input_1;
|
|
|
|
struct Fragment_Stage_Input
|
|
{
|
|
float2 fragment_input_1 : TEXCOORD; // TEXCOORD
|
|
float4 gl_FragCoord : SV_Position;
|
|
};
|
|
|
|
static bool discard_state;
|
|
|
|
uint spvBitfieldInsert(uint Base, uint Insert, uint Offset, uint Count)
|
|
{
|
|
uint Mask = Count == 32 ? 0xffffffff : (((1u << Count) - 1) << (Offset & 31));
|
|
return (Base & ~Mask) | ((Insert << Offset) & Mask);
|
|
}
|
|
|
|
uint2 spvBitfieldInsert(uint2 Base, uint2 Insert, uint Offset, uint Count)
|
|
{
|
|
uint Mask = Count == 32 ? 0xffffffff : (((1u << Count) - 1) << (Offset & 31));
|
|
return (Base & ~Mask) | ((Insert << Offset) & Mask);
|
|
}
|
|
|
|
uint3 spvBitfieldInsert(uint3 Base, uint3 Insert, uint Offset, uint Count)
|
|
{
|
|
uint Mask = Count == 32 ? 0xffffffff : (((1u << Count) - 1) << (Offset & 31));
|
|
return (Base & ~Mask) | ((Insert << Offset) & Mask);
|
|
}
|
|
|
|
uint4 spvBitfieldInsert(uint4 Base, uint4 Insert, uint Offset, uint Count)
|
|
{
|
|
uint Mask = Count == 32 ? 0xffffffff : (((1u << Count) - 1) << (Offset & 31));
|
|
return (Base & ~Mask) | ((Insert << Offset) & Mask);
|
|
}
|
|
|
|
void discard_cond(bool fragment_unnamed_52)
|
|
{
|
|
if (fragment_unnamed_52)
|
|
{
|
|
discard_state = true;
|
|
}
|
|
}
|
|
|
|
void discard_exit()
|
|
{
|
|
if (discard_state)
|
|
{
|
|
discard;
|
|
}
|
|
}
|
|
|
|
void frag_main()
|
|
{
|
|
discard_state = false;
|
|
uint fragment_unnamed_25 = uint(gl_FragCoord.x);
|
|
uint fragment_unnamed_32 = 1u & 31u;
|
|
discard_cond(spvBitfieldInsert(fragment_unnamed_25, (fragment_unnamed_25 & 1u) ^ (uint(gl_FragCoord.y) & 1u), fragment_unnamed_32, min((31u & 31u), (32u - fragment_unnamed_32))) != asuint(fragment_uniform_buffer_0[136u]).x);
|
|
discard_exit();
|
|
}
|
|
|
|
void main(Fragment_Stage_Input stage_input)
|
|
{
|
|
gl_FragCoord = stage_input.gl_FragCoord;
|
|
gl_FragCoord.w = 1.0 / gl_FragCoord.w;
|
|
fragment_input_1 = stage_input.fragment_input_1;
|
|
frag_main();
|
|
}
|
|
|
|
#endif // !STEREO_INSTANCING_ON
|
|
|
|
|
|
#ifdef STEREO_INSTANCING_ON
|
|
#define ANY_SHADER_VARIANT_ACTIVE
|
|
|
|
int _StencilDitherPattern;
|
|
|
|
static float4 fragment_uniform_buffer_0[106];
|
|
static float4 gl_FragCoord;
|
|
static float2 fragment_input_1;
|
|
|
|
struct Fragment_Stage_Input
|
|
{
|
|
float2 fragment_input_1 : TEXCOORD; // TEXCOORD
|
|
float4 gl_FragCoord : SV_Position;
|
|
};
|
|
|
|
static bool discard_state;
|
|
|
|
uint spvBitfieldInsert(uint Base, uint Insert, uint Offset, uint Count)
|
|
{
|
|
uint Mask = Count == 32 ? 0xffffffff : (((1u << Count) - 1) << (Offset & 31));
|
|
return (Base & ~Mask) | ((Insert << Offset) & Mask);
|
|
}
|
|
|
|
uint2 spvBitfieldInsert(uint2 Base, uint2 Insert, uint Offset, uint Count)
|
|
{
|
|
uint Mask = Count == 32 ? 0xffffffff : (((1u << Count) - 1) << (Offset & 31));
|
|
return (Base & ~Mask) | ((Insert << Offset) & Mask);
|
|
}
|
|
|
|
uint3 spvBitfieldInsert(uint3 Base, uint3 Insert, uint Offset, uint Count)
|
|
{
|
|
uint Mask = Count == 32 ? 0xffffffff : (((1u << Count) - 1) << (Offset & 31));
|
|
return (Base & ~Mask) | ((Insert << Offset) & Mask);
|
|
}
|
|
|
|
uint4 spvBitfieldInsert(uint4 Base, uint4 Insert, uint Offset, uint Count)
|
|
{
|
|
uint Mask = Count == 32 ? 0xffffffff : (((1u << Count) - 1) << (Offset & 31));
|
|
return (Base & ~Mask) | ((Insert << Offset) & Mask);
|
|
}
|
|
|
|
void discard_cond(bool fragment_unnamed_54)
|
|
{
|
|
if (fragment_unnamed_54)
|
|
{
|
|
discard_state = true;
|
|
}
|
|
}
|
|
|
|
void discard_exit()
|
|
{
|
|
if (discard_state)
|
|
{
|
|
discard;
|
|
}
|
|
}
|
|
|
|
void frag_main()
|
|
{
|
|
discard_state = false;
|
|
uint fragment_unnamed_27 = uint(gl_FragCoord.x);
|
|
uint fragment_unnamed_34 = 1u & 31u;
|
|
discard_cond(spvBitfieldInsert(fragment_unnamed_27, (fragment_unnamed_27 & 1u) ^ (uint(gl_FragCoord.y) & 1u), fragment_unnamed_34, min((31u & 31u), (32u - fragment_unnamed_34))) != asuint(fragment_uniform_buffer_0[105u]).x);
|
|
discard_exit();
|
|
}
|
|
|
|
void main(Fragment_Stage_Input stage_input)
|
|
{
|
|
gl_FragCoord = stage_input.gl_FragCoord;
|
|
gl_FragCoord.w = 1.0 / gl_FragCoord.w;
|
|
fragment_input_1 = stage_input.fragment_input_1;
|
|
frag_main();
|
|
}
|
|
|
|
#endif // STEREO_INSTANCING_ON
|
|
|
|
|
|
ENDHLSL
|
|
}
|
|
}
|
|
}
|