#include "bindless_structs.hlsli" struct CameraData { float4x4 View; // 64 float4x4 Projection; // 128 float4x4 InvView; // 192 float4x4 InvProjection; // 256 float4 Position; // 272 }; struct Lighting { uint EnvCubeHandle; // 4 uint DiffuseIrradianceHandle; // 8 uint PrefilterHandle; // 12 uint BrdfLutHandle; // 16 uint LightHandle; // 20 uint PointLightIndexer; // 24 uint DirectionalLightIndexer; // 28 }; struct ModelHandles { uint VertexBufferHandle; // 4 uint VertexDataHandle; // 8 uint MaterialBufferHandle; // 12 uint NodeBufferHandle; // 16 }; struct Block { uint VertexBufferHandle; // 4 uint VertexDataHandle; // 8 uint MaterialBufferHandle; // 12 uint NodeBufferHandle; // 16 uint DebugFlags; // 20 int MaterialIdx; // 24 uint NodeIdx; // 28 }; static const uint USE_DIFFUSE_BIT = 1; static const uint USE_SPECULAR_BIT = 2; static const uint SHOW_DIFFUSE_BIT = 4; static const uint SHOW_PREFILTER_BIT = 8; [[vk::binding(0, 1)]] ConstantBuffer Camera; [[vk::binding(1, 1)]] ConstantBuffer Lights; [[vk::binding(2, 1)]] ConstantBuffer Model; [[vk::push_constant]] Block PushConstant; float3 Uncharted2Tonemap(float3 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; }