struct Camera { mat4 m_View; // 64 mat4 m_Projection; // 128 mat4 m_InvView; // 192 mat4 m_InvProjection; // 256 vec4 m_Position; // 272 }; struct Lighting { uint m_EnvCubeHandle; // 4 uint m_DiffuseIrradianceHandle; // 8 uint m_PrefilterHandle; // 12 uint m_BrdfLutHandle; // 16 uint m_LightHandle; // 20 uint m_PointLightIndexer; // 24 uint m_DirectionalLightIndexer; // 28 }; layout(set=1, binding=0) uniform Ubo { Camera camera; Lighting lights; }; // Little Endian storage. First short is least significant. #define IndexerCount(Indexer) (Indexer & 0xFFFF) #define IndexerOffset(Indexer) ((Indexer & 0xFFFF0000) >> 16) #define PI 3.1415926535 vec3 Uncharted2Tonemap(vec3 color) { float A = 0.15f; float B = 0.50f; float C = 0.10f; float D = 0.20f; float E = 0.02f; float F = 0.30f; float W = 11.2f; return ((color * (A * color + C * B) + D * E) / (color * (A * color + B) + D * F)) - E / F; }