You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
1.3 KiB
37 lines
1.3 KiB
#pragma warning(disable : 3568) // Warning: Unknown pragma
|
|
#pragma kernel KVectorscopeGather
|
|
#pragma kernel KVectorscopeClear
|
|
#pragma only_renderers d3d11 playstation xboxone xboxseries vulkan metal switch switch2
|
|
|
|
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl"
|
|
#include "Packages/com.unity.render-pipelines.high-definition/Runtime/ShaderLibrary/ShaderVariables.hlsl"
|
|
|
|
// Inputs
|
|
RWStructuredBuffer<uint> _VectorscopeBuffer;
|
|
Texture2D<float4> _Source;
|
|
uint _BufferSize;
|
|
|
|
#define GROUP_SIZE_X 16
|
|
#define GROUP_SIZE_Y 16
|
|
|
|
[numthreads(GROUP_SIZE_X, GROUP_SIZE_Y, 1)]
|
|
void KVectorscopeGather(uint2 dispatchThreadId : SV_DispatchThreadID)
|
|
{
|
|
if (dispatchThreadId.x >= uint(_ScreenSize.x) || dispatchThreadId.y >= uint(_ScreenSize.y))
|
|
return;
|
|
|
|
const float3 yuv = RGBToYCoCg(LinearToSRGB(saturate(_Source[dispatchThreadId].xyz)));
|
|
const uint2 uv = uint2(
|
|
(uint)floor(yuv.y * _BufferSize),
|
|
(uint)floor(yuv.z * _BufferSize)
|
|
);
|
|
|
|
InterlockedAdd(_VectorscopeBuffer[uv.y * _BufferSize + uv.x], 1u);
|
|
}
|
|
|
|
[numthreads(GROUP_SIZE_X, GROUP_SIZE_Y, 1)]
|
|
void KVectorscopeClear(uint2 dispatchThreadId : SV_DispatchThreadID)
|
|
{
|
|
if (dispatchThreadId.x < _BufferSize && dispatchThreadId.y < _BufferSize)
|
|
_VectorscopeBuffer[dispatchThreadId.y * _BufferSize + dispatchThreadId.x] = 0u;
|
|
}
|