#  SPV_EXT_descriptor_indexing GLSL.std.450 main$ rend3-pbr/shaders/src/depth.fragrend3-pbr/shaders/src/lighting/texture_access.glsl rend3-pbr/shaders/src/structures.glsl// OpModuleProcessed entry-point main // OpModuleProcessed client vulkan100 // OpModuleProcessed target-env vulkan1.0 // OpModuleProcessed entry-point main #line 1 #version 440 #ifdef GPU_MODE #extension GL_EXT_nonuniform_qualifier : require #endif #ifdef ALPHA_CUTOUT #include "structures.glsl" layout(location = 0) in vec4 i_position; layout(location = 1) in vec2 i_coords0; layout(location = 2) in vec4 i_color; layout(location = 3) flat in uint i_material; layout(set = 0, binding = 0) uniform sampler primary_sampler; #ifdef GPU_MODE layout(set = 2, binding = 0, std430) readonly buffer MaterialBuffer { GPUMaterialData materials[]; }; layout(set = 3, binding = 0) uniform texture2D textures[]; #endif #ifdef CPU_MODE layout(set = 2, binding = 0) uniform texture2D albedo_tex; layout(set = 2, binding = 1) uniform texture2D normal_tex; layout(set = 2, binding = 2) uniform texture2D roughness_tex; layout(set = 2, binding = 3) uniform texture2D metallic_tex; layout(set = 2, binding = 4) uniform texture2D reflectance_tex; layout(set = 2, binding = 5) uniform texture2D clear_coat_tex; layout(set = 2, binding = 6) uniform texture2D clear_coat_roughness_tex; layout(set = 2, binding = 7) uniform texture2D emissive_tex; layout(set = 2, binding = 8) uniform texture2D anisotropy_tex; layout(set = 2, binding = 9) uniform texture2D ambient_occlusion_tex; layout(set = 2, binding = 10) uniform TextureData { CPUMaterialData material; }; #endif #include "lighting/texture_access.glsl" void main() { #ifdef GPU_MODE GPUMaterialData material = materials[i_material]; #endif bool has_albedo = HAS_ALBEDO_TEXTURE; vec2 coords = vec2(material.uv_transform0 * vec3(i_coords0, 1.0)); vec2 uvdx = dFdx(coords); vec2 uvdy = dFdy(coords); if (has_albedo) { vec4 albedo = textureGrad(sampler2D(ALBEDO_TEXTURE, primary_sampler), coords, uvdx, uvdy); if (albedo.a <= material.alpha_cutout) { discard; } } } #else // ALPHA_CUTOUT void main() {} #endif // ALPHA_CUTOUT #ifndef SHADER_TEXTURE_ACCESS_GLSL #define SHADER_TEXTURE_ACCESS_GLSL bool has_texture(uint idx) { return idx != 0; } #ifdef GPU_MODE #define MATERIAL_TYPE GPUMaterialData #define HAS_ALBEDO_TEXTURE has_texture(material.albedo_tex) #define HAS_NORMAL_TEXTURE has_texture(material.normal_tex) #define HAS_ROUGHNESS_TEXTURE has_texture(material.roughness_tex) #define HAS_METALLIC_TEXTURE has_texture(material.metallic_tex) #define HAS_REFLECTANCE_TEXTURE has_texture(material.reflectance_tex) #define HAS_CLEAR_COAT_TEXTURE has_texture(material.clear_coat_tex) #define HAS_CLEAR_COAT_ROUGHNESS_TEXTURE has_texture(material.clear_coat_roughness_tex) #define HAS_EMISSIVE_TEXTURE has_texture(material.emissive_tex) #define HAS_ANISOTROPY_TEXTURE has_texture(material.anisotropy_tex) #define HAS_AMBIENT_OCCLUSION_TEXTURE has_texture(material.ambient_occlusion_tex) #define ALBEDO_TEXTURE textures[nonuniformEXT(material.albedo_tex - 1)] #define NORMAL_TEXTURE textures[nonuniformEXT(material.normal_tex - 1)] #define ROUGHNESS_TEXTURE textures[nonuniformEXT(material.roughness_tex - 1)] #define METALLIC_TEXTURE textures[nonuniformEXT(material.metallic_tex - 1)] #define REFLECTANCE_TEXTURE textures[nonuniformEXT(material.reflectance_tex - 1)] #define CLEAR_COAT_TEXTURE textures[nonuniformEXT(material.clear_coat_tex - 1)] #define CLEAR_COAT_ROUGHNESS_TEXTURE textures[nonuniformEXT(material.clear_coat_roughness_tex - 1)] #define EMISSIVE_TEXTURE textures[nonuniformEXT(material.emissive_tex - 1)] #define ANISOTROPY_TEXTURE textures[nonuniformEXT(material.anisotropy_tex - 1)] #define AMBIENT_OCCLUSION_TEXTURE textures[nonuniformEXT(material.ambient_occlusion_tex - 1)] #endif #ifdef CPU_MODE #define MATERIAL_TYPE CPUMaterialData #define HAS_ALBEDO_TEXTURE bool((material.texture_enable >> 0) & 0x1) #define HAS_NORMAL_TEXTURE bool((material.texture_enable >> 1) & 0x1) #define HAS_ROUGHNESS_TEXTURE bool((material.texture_enable >> 2) & 0x1) #define HAS_METALLIC_TEXTURE bool((material.texture_enable >> 3) & 0x1) #define HAS_REFLECTANCE_TEXTURE bool((material.texture_enable >> 4) & 0x1) #define HAS_CLEAR_COAT_TEXTURE bool((material.texture_enable >> 5) & 0x1) #define HAS_CLEAR_COAT_ROUGHNESS_TEXTURE bool((material.texture_enable >> 6) & 0x1) #define HAS_EMISSIVE_TEXTURE bool((material.texture_enable >> 7) & 0x1) #define HAS_ANISOTROPY_TEXTURE bool((material.texture_enable >> 8) & 0x1) #define HAS_AMBIENT_OCCLUSION_TEXTURE bool((material.texture_enable >> 9) & 0x1) #define ALBEDO_TEXTURE albedo_tex #define NORMAL_TEXTURE normal_tex #define ROUGHNESS_TEXTURE roughness_tex #define METALLIC_TEXTURE metallic_tex #define REFLECTANCE_TEXTURE reflectance_tex #define CLEAR_COAT_TEXTURE clear_coat_tex #define CLEAR_COAT_ROUGHNESS_TEXTURE clear_coat_roughness_tex #define EMISSIVE_TEXTURE emissive_tex #define ANISOTROPY_TEXTURE anisotropy_tex #define AMBIENT_OCCLUSION_TEXTURE ambient_occlusion_tex #endif #endif // SHADER_TEXTURE_ACCESS_GLSL#ifndef SHADER_STRUCTURES_GLSL #define SHADER_STRUCTURES_GLSL struct Plane { vec4 inner; }; struct Frustum { Plane left; Plane right; Plane top; Plane bottom; // No far plane Plane near; }; struct ObjectInputData { uint start_idx; uint count; int vertex_offset; uint material_idx; mat4 transform; // xyz position; w radius vec4 bounding_sphere; }; /// If you change this struct, change the object output size in culling.rs struct ObjectOutputData { mat4 model_view; mat4 model_view_proj; mat3 inv_trans_model_view; uint material_idx; }; struct IndirectCall { uint vertex_count; uint instance_count; uint base_index; int vertex_offset; uint base_instance; }; #define FLAGS_ALBEDO_ACTIVE 0x0001 #define FLAGS_ALBEDO_BLEND 0x0002 #define FLAGS_ALBEDO_VERTEX_SRGB 0x0004 #define FLAGS_BICOMPONENT_NORMAL 0x0008 #define FLAGS_SWIZZLED_NORMAL 0x0010 #define FLAGS_AOMR_COMBINED 0x0020 #define FLAGS_AOMR_SWIZZLED_SPLIT 0x0040 #define FLAGS_AOMR_SPLIT 0x0080 #define FLAGS_AOMR_BW_SPLIT 0x0100 #define FLAGS_CC_GLTF_COMBINED 0x0200 #define FLAGS_CC_GLTF_SPLIT 0x0400 #define FLAGS_CC_BW_SPLIT 0x0800 #define FLAGS_UNLIT 0x1000 #define FLAGS_NEAREST 0x2000 #define MATERIAL_FLAG(name) bool(material.material_flags & name) struct GPUMaterialData { uint albedo_tex; uint normal_tex; uint roughness_tex; uint metallic_tex; // -- 16 -- uint reflectance_tex; uint clear_coat_tex; uint clear_coat_roughness_tex; uint emissive_tex; // -- 16 -- uint anisotropy_tex; uint ambient_occlusion_tex; uint _padding0; uint _padding1; // -- 16 -- mat3 uv_transform0; // -- 16 -- mat3 uv_transform1; // -- 16 -- vec4 albedo; // -- 16 -- vec3 emissive; float roughness; // -- 16 -- float metallic; float reflectance; float clear_coat; float clear_coat_roughness; // -- 16 -- float anisotropy; float ambient_occlusion; float alpha_cutout; uint material_flags; }; struct CPUMaterialData { mat3 uv_transform0; // -- 16 -- mat3 uv_transform1; // -- 16 -- vec4 albedo; // -- 16 -- vec3 emissive; float roughness; // -- 16 -- float metallic; float reflectance; float clear_coat; float clear_coat_roughness; // -- 16 -- float anisotropy; float ambient_occlusion; float alpha_cutout; uint material_flags; // -- 16 -- uint texture_enable; }; struct UniformData { mat4 view; mat4 view_proj; mat4 inv_view; mat4 inv_origin_view_proj; Frustum frustum; vec4 ambient; }; struct DirectionalLightBufferHeader { uint total_lights; }; struct DirectionalLight { mat4 view_proj; vec3 color; vec3 direction; }; #endif GL_EXT_nonuniform_qualifier GL_GOOGLE_cpp_style_line_directiveGL_GOOGLE_include_directivemainGPUMaterialDataalbedo_texnormal_texroughness_texmetallic_texreflectance_texclear_coat_tex clear_coat_roughness_texemissive_texanisotropy_tex  ambient_occlusion_tex _padding0 _padding1 uv_transform0 uv_transform1albedoemissiveroughnessmetallicreflectanceclear_coat clear_coat_roughnessanisotropyambient_occlusionalpha_cutoutmaterial_flagsMaterialBuffermaterials $i_materiali_coords0texturesprimary_sampleri_positioni_colorH#H#H#H# H#H#H#H#H# H #$H #(H #,H H #0H H H #`H H#H#H#H#H#H#H#H#H#H#H#GHH#GG "G !G$G$GG"G!GGGG"G!GG!  +     ; ! +!" # ;#$ &} };+?  ;+   ; ;;  + + 6*= %$A&' "%=A'= A'=A'= /=}QQPQQP}0}1}4 S A==VX6Q 78