2019-08-19 00:40:52 +02:00
|
|
|
|
|
|
|
#define M_PI 3.14159265359
|
|
|
|
#define ROUGHNESS_MAX_LOD 5
|
|
|
|
|
|
|
|
/* Set 0 Scene data, screen and sources (changes the least) */
|
|
|
|
|
2019-08-20 22:54:03 +02:00
|
|
|
layout(set=0,binding=1) uniform texture2D depth_buffer;
|
|
|
|
layout(set=0,binding=2) uniform texture2D color_buffer;
|
|
|
|
layout(set=0,binding=3) uniform texture2D normal_buffer;
|
2019-08-19 00:40:52 +02:00
|
|
|
|
|
|
|
layout(set=0,binding=4,std140) uniform SceneData {
|
|
|
|
|
|
|
|
mat4 projection_matrix;
|
|
|
|
mat4 inv_projection_matrix;
|
|
|
|
|
|
|
|
mat4 camera_matrix;
|
|
|
|
mat4 inv_camera_matrix;
|
|
|
|
|
|
|
|
vec2 viewport_size;
|
|
|
|
vec2 screen_pixel_size;
|
|
|
|
|
|
|
|
//used for shadow mapping only
|
|
|
|
float z_offset;
|
|
|
|
float z_slope_scale;
|
|
|
|
|
|
|
|
|
|
|
|
float time;
|
|
|
|
float reflection_multiplier; // one normally, zero when rendering reflections
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
vec4 ambient_light_color;
|
|
|
|
vec4 bg_color;
|
|
|
|
|
|
|
|
vec4 fog_color_enabled;
|
|
|
|
vec4 fog_sun_color_amount;
|
|
|
|
|
|
|
|
float ambient_energy;
|
|
|
|
float bg_energy;
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
vec2 shadow_atlas_pixel_size;
|
|
|
|
vec2 directional_shadow_pixel_size;
|
|
|
|
|
|
|
|
|
|
|
|
float z_far;
|
|
|
|
|
|
|
|
float subsurface_scatter_width;
|
|
|
|
float ambient_occlusion_affect_light;
|
|
|
|
float ambient_occlusion_affect_ao_channel;
|
|
|
|
float opaque_prepass_threshold;
|
|
|
|
|
|
|
|
bool fog_depth_enabled;
|
|
|
|
float fog_depth_begin;
|
|
|
|
float fog_depth_end;
|
|
|
|
float fog_density;
|
|
|
|
float fog_depth_curve;
|
|
|
|
bool fog_transmit_enabled;
|
|
|
|
float fog_transmit_curve;
|
|
|
|
bool fog_height_enabled;
|
|
|
|
float fog_height_min;
|
|
|
|
float fog_height_max;
|
|
|
|
float fog_height_curve;
|
|
|
|
#endif
|
|
|
|
} scene_data;
|
|
|
|
|
|
|
|
layout(set = 0, binding = 5) uniform sampler material_samplers[12];
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
struct DirectionalLightData {
|
|
|
|
|
|
|
|
vec4 light_pos_inv_radius;
|
|
|
|
vec4 light_direction_attenuation;
|
|
|
|
vec4 light_color_energy;
|
|
|
|
vec4 light_params; // cone attenuation, angle, specular, shadow enabled,
|
|
|
|
vec4 light_clamp;
|
|
|
|
vec4 shadow_color_contact;
|
|
|
|
mat4 shadow_matrix1;
|
|
|
|
mat4 shadow_matrix2;
|
|
|
|
mat4 shadow_matrix3;
|
|
|
|
mat4 shadow_matrix4;
|
|
|
|
vec4 shadow_split_offsets;
|
|
|
|
};
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/* Set 1 Skeleton Data (most objects lack it, so it changes little */
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
layout(set = 1 binding = 0, std140) uniform SkeletonData {
|
|
|
|
mat4 transform;
|
|
|
|
bool use_skeleton;
|
|
|
|
bool use_world_coords;
|
|
|
|
bool pad1;
|
|
|
|
bool pad2;
|
|
|
|
} skeleton;
|
|
|
|
|
|
|
|
layout(set = 1, binding = 1) uniform textureBuffer skeleton_bones;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/* Set 2 Custom Material Data (changess less than instance) */
|
|
|
|
|
|
|
|
|
|
|
|
/* Set 3 Instance Data (Set on every draw call) */
|
|
|
|
|
|
|
|
layout(push_constant, binding = 0, std430) uniform DrawData {
|
|
|
|
//used in forward rendering, 16 bits indices, max 8
|
2019-08-20 22:54:03 +02:00
|
|
|
uint reflection_probe_count;
|
|
|
|
uint omni_light_count;
|
|
|
|
uint spot_light_count;
|
|
|
|
uint decal_count;
|
2019-08-19 00:40:52 +02:00
|
|
|
uvec4 reflection_probe_indices;
|
|
|
|
uvec4 omni_light_indices;
|
|
|
|
uvec4 spot_light_indices;
|
|
|
|
uvec4 decal_indices;
|
|
|
|
} draw_data;
|
|
|
|
|
2019-08-20 22:54:03 +02:00
|
|
|
layout(set = 3, binding = 0, std140) uniform InstanceData {
|
2019-08-19 00:40:52 +02:00
|
|
|
mat4 transform;
|
|
|
|
mat3 normal_transform;
|
|
|
|
uint flags;
|
|
|
|
uint pad0;
|
2019-08-20 22:54:03 +02:00
|
|
|
uint pad1;
|
|
|
|
uint pad2;
|
2019-08-19 00:40:52 +02:00
|
|
|
} instance_data;
|
|
|
|
|
|
|
|
layout(set = 3, binding = 1) uniform textureBuffer multimesh_transforms;
|
|
|
|
|
|
|
|
#ifdef USE_LIGHTMAP
|
|
|
|
|
|
|
|
layout(set = 3, binding = 2) uniform texture2D lightmap;
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef USE_VOXEL_CONE_TRACING
|
|
|
|
|
|
|
|
layout(set = 3, binding = 3) uniform texture3D gi_probe[2];
|
|
|
|
|
|
|
|
#ifdef USE_ANISOTROPIC_VOXEL_CONE_TRACING
|
|
|
|
layout(set = 3, binding = 4) uniform texture3D gi_probe_aniso_pos[2];
|
|
|
|
layout(set = 3, binding = 5) uniform texture3D gi_probe_aniso_neg[2];
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#endif
|