#pragma warning(disable : 3568) // Warning: Unknown pragma #pragma kernel KVectorscopeGather #pragma kernel KVectorscopeClear #pragma only_renderers d3d11 playstation xboxone xboxseries vulkan metal switch #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" #include "Packages/com.unity.render-pipelines.high-definition/Runtime/ShaderLibrary/ShaderVariables.hlsl" // Inputs RWStructuredBuffer _VectorscopeBuffer; Texture2D _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; }