struct VertexData { float4 Normal; float2 TexCoord0; float2 TexCoord1; float4 Color0; }; struct TransformData { float4x4 Transform; float4x4 NormalTransform; }; struct MaterialData { float AlbedoFactor[4]; float EmissionFactor[3]; float MetalFactor; float RoughFactor; uint AlbedoTex; uint NormalTex; uint MetalRoughTex; uint OcclusionTex; uint EmissionTex; }; struct PointLight { float Position[3]; float Range; uint Color; float Intensity; }; struct DirectionalLight { float Direction[3]; float Validity_; uint Color; float Intensity; }; // Little Endian storage. First short is least significant. #define IndexerCount(Indexer) (Indexer & 0xFFFF) #define IndexerOffset(Indexer) ((Indexer & 0xFFFF0000) >> 16); #define INVALID_HANDLE 0xFFFFFFFF static const float HALF_PI = 1.57079633f; static const float PI = 3.14159265f; static const float TAU = 6.28318530f; [[vk::binding(0, 0)]] StructuredBuffer VertexBuffer[]; [[vk::binding(0, 0)]] StructuredBuffer VertexDataBuffer[]; [[vk::binding(0, 0)]] StructuredBuffer MaterialsBuffer[]; [[vk::binding(0, 0)]] StructuredBuffer NodeBuffer[]; [[vk::binding(0, 0)]] StructuredBuffer PointLightBuffer[]; [[vk::binding(0, 0)]] StructuredBuffer DirectionalLightBuffer[]; [[vk::binding(1, 0)]] Texture2D Textures[]; [[vk::binding(1, 0)]] TextureCube TextureCubes[]; [[vk::binding(1, 0)]] SamplerState ImmutableSamplers[]; [[vk::binding(2, 0)]] RWTexture2D StorageTextures[]; [[vk::binding(2, 0)]] RWTexture2DArray StorageTextureArrays[];