project-aster/samples/03_model_render/shader/bindless_structs.hlsli

74 lines
1.6 KiB
HLSL

struct VertexData
{
float4 m_Normal;
float2 m_TexCoord0;
float2 m_TexCoord1;
float4 m_Color0;
};
struct TransformData
{
float4x4 transform;
float4x4 normalTransform;
};
struct MaterialData
{
float m_AlbedoFactor[4];
float m_EmissionFactor[3];
float m_MetalFactor;
float m_RoughFactor;
uint m_AlbedoTex;
uint m_NormalTex;
uint m_MetalRoughTex;
uint m_OcclusionTex;
uint m_EmissionTex;
};
struct Block
{
uint vertexBufferHandle;
uint vertexDataHandle;
uint materialBufferHandle;
uint nodeBufferHandle;
uint lightHandle;
uint pointLightIndexer;
uint directionLightIndexer;
int m_MaterialIdx;
uint m_NodeIdx;
};
struct Light
{
float m_Position[3];
float m_Range;
uint m_Color;
float m_Intensity;
};
struct Camera
{
float4x4 view;
float4x4 proj;
};
// Little Endian storage. First short is least significant.
#define IndexerCount(Indexer) (Indexer & 0xFFFF)
#define IndexerOffset(Indexer) ((Indexer & 0xFFFF0000) >> 16);
#define INVALID_HANDLE 0xFFFFFFFF
[[vk::binding(0, 0)]] StructuredBuffer<float4> vertexBuffer[];
[[vk::binding(0, 0)]] StructuredBuffer<VertexData> vertexDataBuffer[];
[[vk::binding(0, 0)]] StructuredBuffer<MaterialData> materialsBuffer[];
[[vk::binding(0, 0)]] StructuredBuffer<TransformData> nodeBuffer[];
[[vk::binding(0, 0)]] StructuredBuffer<Light> lightBuffer[];
[[vk::binding(1, 0)]] Texture2D<float4> textures[];
[[vk::binding(1, 0)]] SamplerState immutableSamplers[];
[[vk::binding(0, 1)]] ConstantBuffer<Camera> camera;
[[vk::push_constant]]
Block pcb;