From cac1d2e850bb0ac5d4d6fa6949faabdc57b82c21 Mon Sep 17 00:00:00 2001 From: Sascha Willems Date: Sun, 24 May 2020 21:27:33 +0200 Subject: [PATCH 1/7] Moved ktx submodule to tag 3.0.1 --- external/ktx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/external/ktx b/external/ktx index 726d14d0..2179edf2 160000 --- a/external/ktx +++ b/external/ktx @@ -1 +1 @@ -Subproject commit 726d14d02c95bb21ec9e43807751b491d295dd3c +Subproject commit 2179edf2bead34d1ec1102b2e7ce0383414d837c From ca884587a4019b47ae27b3959c6ce0a32d913c08 Mon Sep 17 00:00:00 2001 From: Ben Clayton Date: Fri, 29 May 2020 16:08:53 +0100 Subject: [PATCH 2/7] Move shaders into glsl and hlsl directories Move `data/shaders` to `data/shaders/glsl` Move `data/hlsl` to `data/shaders/hlsl` Fix up shader paths in the cpp files to point to the new glsl location. `data/shaders/hlsl/compile.py` still overwrites the glsl .spv files (for now). Issue: #723 --- README.md | 16 ++-- android/examples/_template/build.gradle | 4 +- android/examples/bloom/build.gradle | 8 +- android/examples/computecloth/build.gradle | 8 +- .../examples/computecullandlod/build.gradle | 8 +- android/examples/computeheadless/build.gradle | 8 +- android/examples/computenbody/build.gradle | 8 +- .../examples/computeparticles/build.gradle | 8 +- .../examples/computeraytracing/build.gradle | 8 +- android/examples/computeshader/build.gradle | 8 +- .../examples/conservativeraster/build.gradle | 8 +- android/examples/debugmarker/build.gradle | 8 +- android/examples/deferred/build.gradle | 8 +- .../deferredmultisampling/build.gradle | 8 +- android/examples/deferredshadows/build.gradle | 8 +- android/examples/descriptorsets/build.gradle | 8 +- android/examples/displacement/build.gradle | 8 +- .../examples/distancefieldfonts/build.gradle | 8 +- .../dynamicuniformbuffer/build.gradle | 8 +- android/examples/gears/build.gradle | 8 +- android/examples/geometryshader/build.gradle | 8 +- android/examples/gltfscene/build.gradle | 8 +- android/examples/hdr/build.gradle | 8 +- android/examples/imgui/build.gradle | 8 +- android/examples/indirectdraw/build.gradle | 8 +- .../examples/inlineuniformblocks/build.gradle | 8 +- .../examples/inputattachments/build.gradle | 10 +-- android/examples/instancing/build.gradle | 8 +- android/examples/multisampling/build.gradle | 8 +- android/examples/multithreading/build.gradle | 8 +- android/examples/multiview/build.gradle | 8 +- .../negativeviewportheight/build.gradle | 8 +- android/examples/occlusionquery/build.gradle | 8 +- android/examples/offscreen/build.gradle | 8 +- android/examples/parallaxmapping/build.gradle | 8 +- android/examples/particlefire/build.gradle | 8 +- android/examples/pbrbasic/build.gradle | 8 +- android/examples/pbribl/build.gradle | 8 +- android/examples/pbrtexture/build.gradle | 8 +- android/examples/pipelines/build.gradle | 8 +- .../examples/pipelinestatistics/build.gradle | 8 +- android/examples/pushconstants/build.gradle | 8 +- android/examples/pushdescriptors/build.gradle | 8 +- android/examples/radialblur/build.gradle | 8 +- android/examples/renderheadless/build.gradle | 8 +- android/examples/scenerendering/build.gradle | 8 +- android/examples/screenshot/build.gradle | 8 +- android/examples/shadowmapping/build.gradle | 8 +- .../shadowmappingcascade/build.gradle | 8 +- .../examples/shadowmappingomni/build.gradle | 8 +- .../examples/skeletalanimation/build.gradle | 8 +- .../specializationconstants/build.gradle | 8 +- .../examples/sphericalenvmapping/build.gradle | 8 +- android/examples/ssao/build.gradle | 8 +- android/examples/stencilbuffer/build.gradle | 8 +- android/examples/subpasses/build.gradle | 8 +- .../examples/terraintessellation/build.gradle | 8 +- android/examples/tessellation/build.gradle | 8 +- android/examples/textoverlay/build.gradle | 8 +- android/examples/texture/build.gradle | 8 +- android/examples/texture3d/build.gradle | 8 +- android/examples/texturearray/build.gradle | 8 +- android/examples/texturecubemap/build.gradle | 8 +- .../examples/texturemipmapgen/build.gradle | 8 +- android/examples/triangle/build.gradle | 8 +- android/examples/viewportarray/build.gradle | 8 +- android/examples/vulkanscene/build.gradle | 8 +- base/VulkanTools.cpp | 7 +- base/VulkanTools.h | 3 +- base/vulkanexamplebase.cpp | 24 +++--- .../{ => glsl}/base/generate-spirv.bat | 0 data/shaders/{ => glsl}/base/textoverlay.frag | 0 .../{ => glsl}/base/textoverlay.frag.spv | Bin data/shaders/{ => glsl}/base/textoverlay.vert | 0 .../{ => glsl}/base/textoverlay.vert.spv | Bin data/shaders/{ => glsl}/base/uioverlay.frag | 0 .../{ => glsl}/base/uioverlay.frag.spv | Bin data/shaders/{ => glsl}/base/uioverlay.vert | 0 .../{ => glsl}/base/uioverlay.vert.spv | Bin data/shaders/{ => glsl}/bloom/colorpass.frag | 0 .../{ => glsl}/bloom/colorpass.frag.spv | Bin data/shaders/{ => glsl}/bloom/colorpass.vert | 0 .../{ => glsl}/bloom/colorpass.vert.spv | Bin data/shaders/{ => glsl}/bloom/gaussblur.frag | 0 .../{ => glsl}/bloom/gaussblur.frag.spv | Bin data/shaders/{ => glsl}/bloom/gaussblur.vert | 0 .../{ => glsl}/bloom/gaussblur.vert.spv | Bin .../{ => glsl}/bloom/generate-spirv.bat | 0 data/shaders/{ => glsl}/bloom/phongpass.frag | 0 .../{ => glsl}/bloom/phongpass.frag.spv | Bin data/shaders/{ => glsl}/bloom/phongpass.vert | 0 .../{ => glsl}/bloom/phongpass.vert.spv | Bin data/shaders/{ => glsl}/bloom/skybox.frag | 0 data/shaders/{ => glsl}/bloom/skybox.frag.spv | Bin data/shaders/{ => glsl}/bloom/skybox.vert | 0 data/shaders/{ => glsl}/bloom/skybox.vert.spv | Bin data/shaders/{ => glsl}/compileshaders.py | 0 .../{ => glsl}/computecloth/cloth.comp | 0 .../{ => glsl}/computecloth/cloth.comp.spv | Bin .../{ => glsl}/computecloth/cloth.frag | 0 .../{ => glsl}/computecloth/cloth.frag.spv | Bin .../{ => glsl}/computecloth/cloth.vert | 0 .../{ => glsl}/computecloth/cloth.vert.spv | Bin .../{ => glsl}/computecloth/sphere.frag | 0 .../{ => glsl}/computecloth/sphere.frag.spv | Bin .../{ => glsl}/computecloth/sphere.vert | 0 .../{ => glsl}/computecloth/sphere.vert.spv | Bin .../{ => glsl}/computecullandlod/cull.comp | 0 .../computecullandlod/cull.comp.spv | Bin .../computecullandlod/indirectdraw.frag | 0 .../computecullandlod/indirectdraw.frag.spv | Bin .../computecullandlod/indirectdraw.vert | 0 .../computecullandlod/indirectdraw.vert.spv | Bin .../{ => glsl}/computeheadless/headless.comp | 0 .../computeheadless/headless.comp.spv | Bin .../{ => glsl}/computenbody/particle.frag | 0 .../{ => glsl}/computenbody/particle.frag.spv | Bin .../{ => glsl}/computenbody/particle.vert | 0 .../{ => glsl}/computenbody/particle.vert.spv | Bin .../computenbody/particle_calculate.comp | 0 .../computenbody/particle_calculate.comp.spv | Bin .../computenbody/particle_integrate.comp | 0 .../computenbody/particle_integrate.comp.spv | Bin .../computeparticles/generate-spirv.bat | 0 .../{ => glsl}/computeparticles/particle.comp | 0 .../computeparticles/particle.comp.spv | Bin .../{ => glsl}/computeparticles/particle.frag | 0 .../computeparticles/particle.frag.spv | Bin .../{ => glsl}/computeparticles/particle.vert | 0 .../computeparticles/particle.vert.spv | Bin .../computeraytracing/generate-spirv.bat | 0 .../computeraytracing/raytracing.comp | 0 .../computeraytracing/raytracing.comp.spv | Bin .../{ => glsl}/computeraytracing/texture.frag | 0 .../computeraytracing/texture.frag.spv | Bin .../{ => glsl}/computeraytracing/texture.vert | 0 .../computeraytracing/texture.vert.spv | Bin .../{ => glsl}/computeshader/edgedetect.comp | 0 .../computeshader/edgedetect.comp.spv | Bin .../{ => glsl}/computeshader/emboss.comp | 0 .../{ => glsl}/computeshader/emboss.comp.spv | Bin .../computeshader/generate-spirv.bat | 0 .../{ => glsl}/computeshader/sharpen.comp | 0 .../{ => glsl}/computeshader/sharpen.comp.spv | Bin .../{ => glsl}/computeshader/texture.frag | 0 .../{ => glsl}/computeshader/texture.frag.spv | Bin .../{ => glsl}/computeshader/texture.vert | 0 .../{ => glsl}/computeshader/texture.vert.spv | Bin .../{ => glsl}/conditionalrender/model.frag | 0 .../conditionalrender/model.frag.spv | Bin .../{ => glsl}/conditionalrender/model.vert | 0 .../conditionalrender/model.vert.spv | Bin .../conservativeraster/fullscreen.frag | 0 .../conservativeraster/fullscreen.frag.spv | Bin .../conservativeraster/fullscreen.vert | 0 .../conservativeraster/fullscreen.vert.spv | Bin .../conservativeraster/triangle.frag | 0 .../conservativeraster/triangle.frag.spv | Bin .../conservativeraster/triangle.vert | 0 .../conservativeraster/triangle.vert.spv | Bin .../conservativeraster/triangleoverlay.frag | 0 .../triangleoverlay.frag.spv | Bin .../{ => glsl}/debugmarker/colorpass.frag | 0 .../{ => glsl}/debugmarker/colorpass.frag.spv | Bin .../{ => glsl}/debugmarker/colorpass.vert | 0 .../{ => glsl}/debugmarker/colorpass.vert.spv | Bin .../{ => glsl}/debugmarker/generate-spirv.bat | 0 .../{ => glsl}/debugmarker/postprocess.frag | 0 .../debugmarker/postprocess.frag.spv | Bin .../{ => glsl}/debugmarker/postprocess.vert | 0 .../debugmarker/postprocess.vert.spv | Bin data/shaders/{ => glsl}/debugmarker/toon.frag | 0 .../{ => glsl}/debugmarker/toon.frag.spv | Bin data/shaders/{ => glsl}/debugmarker/toon.vert | 0 .../{ => glsl}/debugmarker/toon.vert.spv | Bin data/shaders/{ => glsl}/deferred/debug.frag | 0 .../{ => glsl}/deferred/debug.frag.spv | Bin data/shaders/{ => glsl}/deferred/debug.vert | 0 .../{ => glsl}/deferred/debug.vert.spv | Bin .../shaders/{ => glsl}/deferred/deferred.frag | 0 .../{ => glsl}/deferred/deferred.frag.spv | Bin .../shaders/{ => glsl}/deferred/deferred.vert | 0 .../{ => glsl}/deferred/deferred.vert.spv | Bin .../{ => glsl}/deferred/generate-spirv.bat | 0 data/shaders/{ => glsl}/deferred/mrt.frag | 0 data/shaders/{ => glsl}/deferred/mrt.frag.spv | Bin data/shaders/{ => glsl}/deferred/mrt.vert | 0 data/shaders/{ => glsl}/deferred/mrt.vert.spv | Bin .../deferredmultisampling/debug.frag | 0 .../deferredmultisampling/debug.frag.spv | Bin .../deferredmultisampling/debug.vert | 0 .../deferredmultisampling/debug.vert.spv | Bin .../deferredmultisampling/deferred.frag | 0 .../deferredmultisampling/deferred.frag.spv | Bin .../deferredmultisampling/deferred.vert | 0 .../deferredmultisampling/deferred.vert.spv | Bin .../{ => glsl}/deferredmultisampling/mrt.frag | 0 .../deferredmultisampling/mrt.frag.spv | Bin .../{ => glsl}/deferredmultisampling/mrt.vert | 0 .../deferredmultisampling/mrt.vert.spv | Bin .../{ => glsl}/deferredshadows/debug.frag | 0 .../{ => glsl}/deferredshadows/debug.frag.spv | Bin .../{ => glsl}/deferredshadows/debug.vert | 0 .../{ => glsl}/deferredshadows/debug.vert.spv | Bin .../{ => glsl}/deferredshadows/deferred.frag | 0 .../deferredshadows/deferred.frag.spv | Bin .../{ => glsl}/deferredshadows/deferred.vert | 0 .../deferredshadows/deferred.vert.spv | Bin .../deferredshadows/generate-spirv.bat | 0 .../{ => glsl}/deferredshadows/geom.spv | Bin .../{ => glsl}/deferredshadows/mrt.frag | 0 .../{ => glsl}/deferredshadows/mrt.frag.spv | Bin .../{ => glsl}/deferredshadows/mrt.vert | 0 .../{ => glsl}/deferredshadows/mrt.vert.spv | Bin .../{ => glsl}/deferredshadows/shadow.geom | 0 .../deferredshadows/shadow.geom.spv | Bin .../{ => glsl}/deferredshadows/shadow.vert | 0 .../deferredshadows/shadow.vert.spv | Bin .../descriptorindexing.frag | 0 .../descriptorindexing.frag.spv | Bin .../descriptorindexing.vert | 0 .../descriptorindexing.vert.spv | Bin .../{ => glsl}/descriptorsets/cube.frag | 0 .../{ => glsl}/descriptorsets/cube.frag.spv | Bin .../{ => glsl}/descriptorsets/cube.vert | 0 .../{ => glsl}/descriptorsets/cube.vert.spv | Bin .../shaders/{ => glsl}/displacement/base.frag | 0 .../{ => glsl}/displacement/base.frag.spv | Bin .../shaders/{ => glsl}/displacement/base.vert | 0 .../{ => glsl}/displacement/base.vert.spv | Bin .../{ => glsl}/displacement/displacement.tesc | 0 .../displacement/displacement.tesc.spv | Bin .../{ => glsl}/displacement/displacement.tese | 0 .../displacement/displacement.tese.spv | Bin .../displacement/generate-spirv.bat | 0 .../{ => glsl}/distancefieldfonts/bitmap.frag | 0 .../distancefieldfonts/bitmap.frag.spv | Bin .../{ => glsl}/distancefieldfonts/bitmap.vert | 0 .../distancefieldfonts/bitmap.vert.spv | Bin .../distancefieldfonts/generate-spirv.bat | 0 .../{ => glsl}/distancefieldfonts/sdf.frag | 0 .../distancefieldfonts/sdf.frag.spv | Bin .../{ => glsl}/distancefieldfonts/sdf.vert | 0 .../distancefieldfonts/sdf.vert.spv | Bin .../{ => glsl}/dynamicuniformbuffer/base.frag | 0 .../dynamicuniformbuffer/base.frag.spv | Bin .../{ => glsl}/dynamicuniformbuffer/base.vert | 0 .../dynamicuniformbuffer/base.vert.spv | Bin data/shaders/{ => glsl}/gears/gears.frag | 0 data/shaders/{ => glsl}/gears/gears.frag.spv | Bin data/shaders/{ => glsl}/gears/gears.vert | 0 data/shaders/{ => glsl}/gears/gears.vert.spv | Bin .../{ => glsl}/geometryshader/base.frag | 0 .../{ => glsl}/geometryshader/base.frag.spv | Bin .../{ => glsl}/geometryshader/base.vert | 0 .../{ => glsl}/geometryshader/base.vert.spv | Bin .../geometryshader/generate-spirv.bat | 0 .../{ => glsl}/geometryshader/mesh.frag | 0 .../{ => glsl}/geometryshader/mesh.frag.spv | Bin .../{ => glsl}/geometryshader/mesh.vert | 0 .../{ => glsl}/geometryshader/mesh.vert.spv | Bin .../geometryshader/normaldebug.geom | 0 .../geometryshader/normaldebug.geom.spv | Bin data/shaders/{ => glsl}/gltfscene/mesh.frag | 0 .../{ => glsl}/gltfscene/mesh.frag.spv | Bin data/shaders/{ => glsl}/gltfscene/mesh.vert | 0 .../{ => glsl}/gltfscene/mesh.vert.spv | Bin data/shaders/{ => glsl}/hdr/bloom.frag | 0 data/shaders/{ => glsl}/hdr/bloom.frag.spv | Bin data/shaders/{ => glsl}/hdr/bloom.vert | 0 data/shaders/{ => glsl}/hdr/bloom.vert.spv | Bin data/shaders/{ => glsl}/hdr/composition.frag | 0 .../{ => glsl}/hdr/composition.frag.spv | Bin data/shaders/{ => glsl}/hdr/composition.vert | 0 .../{ => glsl}/hdr/composition.vert.spv | Bin data/shaders/{ => glsl}/hdr/gbuffer.frag | 0 data/shaders/{ => glsl}/hdr/gbuffer.frag.spv | Bin data/shaders/{ => glsl}/hdr/gbuffer.vert | 0 data/shaders/{ => glsl}/hdr/gbuffer.vert.spv | Bin data/shaders/{ => glsl}/imgui/scene.frag | 0 data/shaders/{ => glsl}/imgui/scene.frag.spv | Bin data/shaders/{ => glsl}/imgui/scene.vert | 0 data/shaders/{ => glsl}/imgui/scene.vert.spv | Bin data/shaders/{ => glsl}/imgui/ui.frag | 0 data/shaders/{ => glsl}/imgui/ui.frag.spv | Bin data/shaders/{ => glsl}/imgui/ui.vert | 0 data/shaders/{ => glsl}/imgui/ui.vert.spv | Bin .../indirectdraw/generate-spirv.bat | 0 .../{ => glsl}/indirectdraw/ground.frag | 0 .../{ => glsl}/indirectdraw/ground.frag.spv | Bin .../{ => glsl}/indirectdraw/ground.vert | 0 .../{ => glsl}/indirectdraw/ground.vert.spv | Bin .../{ => glsl}/indirectdraw/indirectdraw.frag | 0 .../indirectdraw/indirectdraw.frag.spv | Bin .../{ => glsl}/indirectdraw/indirectdraw.vert | 0 .../indirectdraw/indirectdraw.vert.spv | Bin .../{ => glsl}/indirectdraw/skysphere.frag | 0 .../indirectdraw/skysphere.frag.spv | Bin .../{ => glsl}/indirectdraw/skysphere.vert | 0 .../indirectdraw/skysphere.vert.spv | Bin .../{ => glsl}/inlineuniformblocks/pbr.frag | 0 .../inlineuniformblocks/pbr.frag.spv | Bin .../{ => glsl}/inlineuniformblocks/pbr.vert | 0 .../inlineuniformblocks/pbr.vert.spv | Bin .../inputattachments/attachmentread.frag | 0 .../inputattachments/attachmentread.frag.spv | Bin .../inputattachments/attachmentread.vert | 0 .../inputattachments/attachmentread.vert.spv | Bin .../inputattachments/attachmentwrite.frag | 0 .../inputattachments/attachmentwrite.frag.spv | Bin .../inputattachments/attachmentwrite.vert | 0 .../inputattachments/attachmentwrite.vert.spv | Bin .../{ => glsl}/instancing/generate-spirv.bat | 0 .../{ => glsl}/instancing/instancing.frag | 0 .../{ => glsl}/instancing/instancing.frag.spv | Bin .../{ => glsl}/instancing/instancing.vert | 0 .../{ => glsl}/instancing/instancing.vert.spv | Bin .../shaders/{ => glsl}/instancing/planet.frag | 0 .../{ => glsl}/instancing/planet.frag.spv | Bin .../shaders/{ => glsl}/instancing/planet.vert | 0 .../{ => glsl}/instancing/planet.vert.spv | Bin .../{ => glsl}/instancing/starfield.frag | 0 .../{ => glsl}/instancing/starfield.frag.spv | Bin .../{ => glsl}/instancing/starfield.vert | 0 .../{ => glsl}/instancing/starfield.vert.spv | Bin .../{ => glsl}/multisampling/mesh.frag | 0 .../{ => glsl}/multisampling/mesh.frag.spv | Bin .../{ => glsl}/multisampling/mesh.vert | 0 .../{ => glsl}/multisampling/mesh.vert.spv | Bin .../multithreading/generate-spirv.bat | 0 .../{ => glsl}/multithreading/phong.frag | 0 .../{ => glsl}/multithreading/phong.frag.spv | Bin .../{ => glsl}/multithreading/phong.vert | 0 .../{ => glsl}/multithreading/phong.vert.spv | Bin .../{ => glsl}/multithreading/starsphere.frag | 0 .../multithreading/starsphere.frag.spv | Bin .../{ => glsl}/multithreading/starsphere.vert | 0 .../multithreading/starsphere.vert.spv | Bin .../{ => glsl}/multiview/multiview.frag | 0 .../{ => glsl}/multiview/multiview.frag.spv | Bin .../{ => glsl}/multiview/multiview.vert | 0 .../{ => glsl}/multiview/multiview.vert.spv | Bin .../{ => glsl}/multiview/viewdisplay.frag | 0 .../{ => glsl}/multiview/viewdisplay.frag.spv | Bin .../{ => glsl}/multiview/viewdisplay.vert | 0 .../{ => glsl}/multiview/viewdisplay.vert.spv | Bin .../negativeviewportheight/quad.frag | 0 .../negativeviewportheight/quad.frag.spv | Bin .../negativeviewportheight/quad.vert | 0 .../negativeviewportheight/quad.vert.spv | Bin .../nv_ray_tracing_basic/closesthit.rchit | 0 .../nv_ray_tracing_basic/closesthit.rchit.spv | Bin .../nv_ray_tracing_basic/miss.rmiss | 0 .../nv_ray_tracing_basic/miss.rmiss.spv | Bin .../nv_ray_tracing_basic/raygen.rgen | 0 .../nv_ray_tracing_basic/raygen.rgen.spv | Bin .../closesthit.rchit | 0 .../closesthit.rchit.spv | Bin .../nv_ray_tracing_reflections/miss.rmiss | 0 .../nv_ray_tracing_reflections/miss.rmiss.spv | Bin .../nv_ray_tracing_reflections/raygen.rgen | 0 .../raygen.rgen.spv | Bin .../nv_ray_tracing_shadows/closesthit.rchit | 0 .../closesthit.rchit.spv | Bin .../nv_ray_tracing_shadows/miss.rmiss | 0 .../nv_ray_tracing_shadows/miss.rmiss.spv | Bin .../nv_ray_tracing_shadows/raygen.rgen | 0 .../nv_ray_tracing_shadows/raygen.rgen.spv | Bin .../nv_ray_tracing_shadows/shadow.rmiss | 0 .../nv_ray_tracing_shadows/shadow.rmiss.spv | Bin .../occlusionquery/generate-spirv.bat | 0 .../{ => glsl}/occlusionquery/mesh.frag | 0 .../{ => glsl}/occlusionquery/mesh.frag.spv | Bin .../{ => glsl}/occlusionquery/mesh.vert | 0 .../{ => glsl}/occlusionquery/mesh.vert.spv | Bin .../{ => glsl}/occlusionquery/occluder.frag | 0 .../occlusionquery/occluder.frag.spv | Bin .../{ => glsl}/occlusionquery/occluder.vert | 0 .../occlusionquery/occluder.vert.spv | Bin .../{ => glsl}/occlusionquery/simple.frag | 0 .../{ => glsl}/occlusionquery/simple.frag.spv | Bin .../{ => glsl}/occlusionquery/simple.vert | 0 .../{ => glsl}/occlusionquery/simple.vert.spv | Bin .../{ => glsl}/offscreen/generate-spirv.bat | 0 data/shaders/{ => glsl}/offscreen/mirror.frag | 0 .../{ => glsl}/offscreen/mirror.frag.spv | Bin data/shaders/{ => glsl}/offscreen/mirror.vert | 0 .../{ => glsl}/offscreen/mirror.vert.spv | Bin data/shaders/{ => glsl}/offscreen/phong.frag | 0 .../{ => glsl}/offscreen/phong.frag.spv | Bin data/shaders/{ => glsl}/offscreen/phong.vert | 0 .../{ => glsl}/offscreen/phong.vert.spv | Bin data/shaders/{ => glsl}/offscreen/quad.frag | 0 .../{ => glsl}/offscreen/quad.frag.spv | Bin data/shaders/{ => glsl}/offscreen/quad.vert | 0 .../{ => glsl}/offscreen/quad.vert.spv | Bin .../{ => glsl}/parallaxmapping/parallax.frag | 0 .../parallaxmapping/parallax.frag.spv | Bin .../{ => glsl}/parallaxmapping/parallax.vert | 0 .../parallaxmapping/parallax.vert.spv | Bin .../particlefire/generate-spirv.bat | 0 .../{ => glsl}/particlefire/normalmap.frag | 0 .../particlefire/normalmap.frag.spv | Bin .../{ => glsl}/particlefire/normalmap.vert | 0 .../particlefire/normalmap.vert.spv | Bin .../{ => glsl}/particlefire/particle.frag | 0 .../{ => glsl}/particlefire/particle.frag.spv | Bin .../{ => glsl}/particlefire/particle.vert | 0 .../{ => glsl}/particlefire/particle.vert.spv | Bin data/shaders/{ => glsl}/pbrbasic/pbr.frag | 0 data/shaders/{ => glsl}/pbrbasic/pbr.frag.spv | Bin data/shaders/{ => glsl}/pbrbasic/pbr.vert | 0 data/shaders/{ => glsl}/pbrbasic/pbr.vert.spv | Bin .../shaders/{ => glsl}/pbribl/filtercube.vert | 0 .../{ => glsl}/pbribl/filtercube.vert.spv | Bin .../shaders/{ => glsl}/pbribl/genbrdflut.frag | 0 .../{ => glsl}/pbribl/genbrdflut.frag.spv | Bin .../shaders/{ => glsl}/pbribl/genbrdflut.vert | 0 .../{ => glsl}/pbribl/genbrdflut.vert.spv | Bin .../{ => glsl}/pbribl/irradiancecube.frag | 0 .../{ => glsl}/pbribl/irradiancecube.frag.spv | Bin data/shaders/{ => glsl}/pbribl/pbribl.frag | 0 .../shaders/{ => glsl}/pbribl/pbribl.frag.spv | Bin data/shaders/{ => glsl}/pbribl/pbribl.vert | 0 .../shaders/{ => glsl}/pbribl/pbribl.vert.spv | Bin .../{ => glsl}/pbribl/prefilterenvmap.frag | 0 .../pbribl/prefilterenvmap.frag.spv | Bin data/shaders/{ => glsl}/pbribl/skybox.frag | 0 .../shaders/{ => glsl}/pbribl/skybox.frag.spv | Bin data/shaders/{ => glsl}/pbribl/skybox.vert | 0 .../shaders/{ => glsl}/pbribl/skybox.vert.spv | Bin .../{ => glsl}/pbrtexture/filtercube.vert | 0 .../{ => glsl}/pbrtexture/filtercube.vert.spv | Bin .../{ => glsl}/pbrtexture/genbrdflut.frag | 0 .../{ => glsl}/pbrtexture/genbrdflut.frag.spv | Bin .../{ => glsl}/pbrtexture/genbrdflut.vert | 0 .../{ => glsl}/pbrtexture/genbrdflut.vert.spv | Bin .../{ => glsl}/pbrtexture/irradiancecube.frag | 0 .../pbrtexture/irradiancecube.frag.spv | Bin .../{ => glsl}/pbrtexture/pbrtexture.frag | 0 .../{ => glsl}/pbrtexture/pbrtexture.frag.spv | Bin .../{ => glsl}/pbrtexture/pbrtexture.vert | 0 .../{ => glsl}/pbrtexture/pbrtexture.vert.spv | Bin .../pbrtexture/prefilterenvmap.frag | 0 .../pbrtexture/prefilterenvmap.frag.spv | Bin .../shaders/{ => glsl}/pbrtexture/skybox.frag | 0 .../{ => glsl}/pbrtexture/skybox.frag.spv | Bin .../shaders/{ => glsl}/pbrtexture/skybox.vert | 0 .../{ => glsl}/pbrtexture/skybox.vert.spv | Bin .../{ => glsl}/pipelines/generate-spriv.bat | 0 data/shaders/{ => glsl}/pipelines/phong.frag | 0 .../{ => glsl}/pipelines/phong.frag.spv | Bin data/shaders/{ => glsl}/pipelines/phong.vert | 0 .../{ => glsl}/pipelines/phong.vert.spv | Bin data/shaders/{ => glsl}/pipelines/toon.frag | 0 .../{ => glsl}/pipelines/toon.frag.spv | Bin data/shaders/{ => glsl}/pipelines/toon.vert | 0 .../{ => glsl}/pipelines/toon.vert.spv | Bin .../{ => glsl}/pipelines/wireframe.frag | 0 .../{ => glsl}/pipelines/wireframe.frag.spv | Bin .../{ => glsl}/pipelines/wireframe.vert | 0 .../{ => glsl}/pipelines/wireframe.vert.spv | Bin .../{ => glsl}/pipelinestatistics/scene.frag | 0 .../pipelinestatistics/scene.frag.spv | Bin .../{ => glsl}/pipelinestatistics/scene.tesc | 0 .../pipelinestatistics/scene.tesc.spv | Bin .../{ => glsl}/pipelinestatistics/scene.tese | 0 .../pipelinestatistics/scene.tese.spv | Bin .../{ => glsl}/pipelinestatistics/scene.vert | 0 .../pipelinestatistics/scene.vert.spv | Bin .../pushconstants/generate-spirv.bat | 0 .../{ => glsl}/pushconstants/lights.frag | 0 .../{ => glsl}/pushconstants/lights.frag.spv | Bin .../{ => glsl}/pushconstants/lights.vert | 0 .../{ => glsl}/pushconstants/lights.vert.spv | Bin .../{ => glsl}/pushdescriptors/cube.frag | 0 .../{ => glsl}/pushdescriptors/cube.frag.spv | Bin .../{ => glsl}/pushdescriptors/cube.vert | 0 .../{ => glsl}/pushdescriptors/cube.vert.spv | Bin .../{ => glsl}/radialblur/colorpass.frag | 0 .../{ => glsl}/radialblur/colorpass.frag.spv | Bin .../{ => glsl}/radialblur/colorpass.vert | 0 .../{ => glsl}/radialblur/colorpass.vert.spv | Bin .../{ => glsl}/radialblur/generate-spirv.bat | 0 .../{ => glsl}/radialblur/phongpass.frag | 0 .../{ => glsl}/radialblur/phongpass.frag.spv | Bin .../{ => glsl}/radialblur/phongpass.vert | 0 .../{ => glsl}/radialblur/phongpass.vert.spv | Bin .../{ => glsl}/radialblur/radialblur.frag | 0 .../{ => glsl}/radialblur/radialblur.frag.spv | Bin .../{ => glsl}/radialblur/radialblur.vert | 0 .../{ => glsl}/radialblur/radialblur.vert.spv | Bin .../{ => glsl}/renderheadless/triangle.frag | 0 .../renderheadless/triangle.frag.spv | Bin .../{ => glsl}/renderheadless/triangle.vert | 0 .../renderheadless/triangle.vert.spv | Bin .../scenerendering/generate-spirv.bat | 0 .../{ => glsl}/scenerendering/scene.frag | 0 .../{ => glsl}/scenerendering/scene.frag.spv | Bin .../{ => glsl}/scenerendering/scene.vert | 0 .../{ => glsl}/scenerendering/scene.vert.spv | Bin data/shaders/{ => glsl}/screenshot/mesh.frag | 0 .../{ => glsl}/screenshot/mesh.frag.spv | Bin data/shaders/{ => glsl}/screenshot/mesh.vert | 0 .../{ => glsl}/screenshot/mesh.vert.spv | Bin .../shadowmapomni/cubemapdisplay.frag | 0 .../shadowmapomni/cubemapdisplay.frag.spv | Bin .../shadowmapomni/cubemapdisplay.vert | 0 .../shadowmapomni/cubemapdisplay.vert.spv | Bin .../shadowmapomni/generate-spirv.bat | 0 .../{ => glsl}/shadowmapomni/offscreen.frag | 0 .../shadowmapomni/offscreen.frag.spv | Bin .../{ => glsl}/shadowmapomni/offscreen.vert | 0 .../shadowmapomni/offscreen.vert.spv | Bin .../{ => glsl}/shadowmapomni/scene.frag | 0 .../{ => glsl}/shadowmapomni/scene.frag.spv | Bin .../{ => glsl}/shadowmapomni/scene.vert | 0 .../{ => glsl}/shadowmapomni/scene.vert.spv | Bin .../shadowmapping/generate-spirv.bat | 0 .../{ => glsl}/shadowmapping/offscreen.frag | 0 .../shadowmapping/offscreen.frag.spv | Bin .../{ => glsl}/shadowmapping/offscreen.vert | 0 .../shadowmapping/offscreen.vert.spv | Bin .../{ => glsl}/shadowmapping/quad.frag | 0 .../{ => glsl}/shadowmapping/quad.frag.spv | Bin .../{ => glsl}/shadowmapping/quad.vert | 0 .../{ => glsl}/shadowmapping/quad.vert.spv | Bin .../{ => glsl}/shadowmapping/scene.frag | 0 .../{ => glsl}/shadowmapping/scene.frag.spv | Bin .../{ => glsl}/shadowmapping/scene.vert | 0 .../{ => glsl}/shadowmapping/scene.vert.spv | Bin .../shadowmappingcascade/debugshadowmap.frag | 0 .../debugshadowmap.frag.spv | Bin .../shadowmappingcascade/debugshadowmap.vert | 0 .../debugshadowmap.vert.spv | Bin .../shadowmappingcascade/depthpass.frag | 0 .../shadowmappingcascade/depthpass.frag.spv | Bin .../shadowmappingcascade/depthpass.vert | 0 .../shadowmappingcascade/depthpass.vert.spv | Bin .../shadowmappingcascade/scene.frag | 0 .../shadowmappingcascade/scene.frag.spv | Bin .../shadowmappingcascade/scene.vert | 0 .../shadowmappingcascade/scene.vert.spv | Bin .../{ => glsl}/skeletalanimation/mesh.frag | 0 .../skeletalanimation/mesh.frag.spv | Bin .../{ => glsl}/skeletalanimation/mesh.vert | 0 .../skeletalanimation/mesh.vert.spv | Bin .../{ => glsl}/skeletalanimation/texture.frag | 0 .../skeletalanimation/texture.frag.spv | Bin .../{ => glsl}/skeletalanimation/texture.vert | 0 .../skeletalanimation/texture.vert.spv | Bin .../specializationconstants/uber.frag | 0 .../specializationconstants/uber.frag.spv | Bin .../specializationconstants/uber.vert | 0 .../specializationconstants/uber.vert.spv | Bin .../sphericalenvmapping/generate-spirv.bat | 0 .../{ => glsl}/sphericalenvmapping/sem.frag | 0 .../sphericalenvmapping/sem.frag.spv | Bin .../{ => glsl}/sphericalenvmapping/sem.vert | 0 .../sphericalenvmapping/sem.vert.spv | Bin data/shaders/{ => glsl}/ssao/blur.frag | 0 data/shaders/{ => glsl}/ssao/blur.frag.spv | Bin data/shaders/{ => glsl}/ssao/composition.frag | 0 .../{ => glsl}/ssao/composition.frag.spv | Bin data/shaders/{ => glsl}/ssao/fullscreen.vert | 0 .../{ => glsl}/ssao/fullscreen.vert.spv | Bin data/shaders/{ => glsl}/ssao/gbuffer.frag | 0 data/shaders/{ => glsl}/ssao/gbuffer.frag.spv | Bin data/shaders/{ => glsl}/ssao/gbuffer.vert | 0 data/shaders/{ => glsl}/ssao/gbuffer.vert.spv | Bin data/shaders/{ => glsl}/ssao/ssao.frag | 0 data/shaders/{ => glsl}/ssao/ssao.frag.spv | Bin .../{ => glsl}/stencilbuffer/outline.frag | 0 .../{ => glsl}/stencilbuffer/outline.frag.spv | Bin .../{ => glsl}/stencilbuffer/outline.vert | 0 .../{ => glsl}/stencilbuffer/outline.vert.spv | Bin .../{ => glsl}/stencilbuffer/toon.frag | 0 .../{ => glsl}/stencilbuffer/toon.frag.spv | Bin .../{ => glsl}/stencilbuffer/toon.vert | 0 .../{ => glsl}/stencilbuffer/toon.vert.spv | Bin .../{ => glsl}/subpasses/composition.frag | 0 .../{ => glsl}/subpasses/composition.frag.spv | Bin .../{ => glsl}/subpasses/composition.vert | 0 .../{ => glsl}/subpasses/composition.vert.spv | Bin .../shaders/{ => glsl}/subpasses/gbuffer.frag | 0 .../{ => glsl}/subpasses/gbuffer.frag.spv | Bin .../shaders/{ => glsl}/subpasses/gbuffer.vert | 0 .../{ => glsl}/subpasses/gbuffer.vert.spv | Bin .../{ => glsl}/subpasses/transparent.frag | 0 .../{ => glsl}/subpasses/transparent.frag.spv | Bin .../{ => glsl}/subpasses/transparent.vert | 0 .../{ => glsl}/subpasses/transparent.vert.spv | Bin .../terraintessellation/generate-spirv.bat | 0 .../terraintessellation/skysphere.frag | 0 .../terraintessellation/skysphere.frag.spv | Bin .../terraintessellation/skysphere.vert | 0 .../terraintessellation/skysphere.vert.spv | Bin .../terraintessellation/terrain.frag | 0 .../terraintessellation/terrain.frag.spv | Bin .../terraintessellation/terrain.tesc | 0 .../terraintessellation/terrain.tesc.spv | Bin .../terraintessellation/terrain.tese | 0 .../terraintessellation/terrain.tese.spv | Bin .../terraintessellation/terrain.vert | 0 .../terraintessellation/terrain.vert.spv | Bin .../shaders/{ => glsl}/tessellation/base.frag | 0 .../{ => glsl}/tessellation/base.frag.spv | Bin .../shaders/{ => glsl}/tessellation/base.vert | 0 .../{ => glsl}/tessellation/base.vert.spv | Bin .../tessellation/generate-spriv.bat | 0 .../{ => glsl}/tessellation/passthrough.tesc | 0 .../tessellation/passthrough.tesc.spv | Bin .../{ => glsl}/tessellation/passthrough.tese | 0 .../tessellation/passthrough.tese.spv | Bin .../{ => glsl}/tessellation/pntriangles.tesc | 0 .../tessellation/pntriangles.tesc.spv | Bin .../{ => glsl}/tessellation/pntriangles.tese | 0 .../tessellation/pntriangles.tese.spv | Bin data/shaders/{ => glsl}/textoverlay/mesh.frag | 0 .../{ => glsl}/textoverlay/mesh.frag.spv | Bin data/shaders/{ => glsl}/textoverlay/mesh.vert | 0 .../{ => glsl}/textoverlay/mesh.vert.spv | Bin data/shaders/{ => glsl}/textoverlay/text.frag | 0 .../{ => glsl}/textoverlay/text.frag.spv | Bin data/shaders/{ => glsl}/textoverlay/text.vert | 0 .../{ => glsl}/textoverlay/text.vert.spv | Bin .../{ => glsl}/texture/generate-spirv.bat | 0 data/shaders/{ => glsl}/texture/texture.frag | 0 .../{ => glsl}/texture/texture.frag.spv | Bin data/shaders/{ => glsl}/texture/texture.vert | 0 .../{ => glsl}/texture/texture.vert.spv | Bin .../{ => glsl}/texture3d/texture3d.frag | 0 .../{ => glsl}/texture3d/texture3d.frag.spv | Bin .../{ => glsl}/texture3d/texture3d.vert | 0 .../{ => glsl}/texture3d/texture3d.vert.spv | Bin .../texturearray/generate-spirv.bat | 0 .../{ => glsl}/texturearray/instancing.frag | 0 .../texturearray/instancing.frag.spv | Bin .../{ => glsl}/texturearray/instancing.vert | 0 .../texturearray/instancing.vert.spv | Bin .../{ => glsl}/texturecubemap/reflect.frag | 0 .../texturecubemap/reflect.frag.spv | Bin .../{ => glsl}/texturecubemap/reflect.vert | 0 .../texturecubemap/reflect.vert.spv | Bin .../{ => glsl}/texturecubemap/skybox.frag | 0 .../{ => glsl}/texturecubemap/skybox.frag.spv | Bin .../{ => glsl}/texturecubemap/skybox.vert | 0 .../{ => glsl}/texturecubemap/skybox.vert.spv | Bin .../{ => glsl}/texturemipmapgen/texture.frag | 0 .../texturemipmapgen/texture.frag.spv | Bin .../{ => glsl}/texturemipmapgen/texture.vert | 0 .../texturemipmapgen/texture.vert.spv | Bin .../sparseresidency.frag | 0 .../sparseresidency.frag.spv | Bin .../sparseresidency.vert | 0 .../sparseresidency.vert.spv | Bin .../shaders/{ => glsl}/triangle/triangle.frag | 0 .../{ => glsl}/triangle/triangle.frag.spv | Bin .../shaders/{ => glsl}/triangle/triangle.vert | 0 .../{ => glsl}/triangle/triangle.vert.spv | Bin .../{ => glsl}/viewportarray/multiview.geom | 0 .../viewportarray/multiview.geom.spv | Bin .../{ => glsl}/viewportarray/scene.frag | 0 .../{ => glsl}/viewportarray/scene.frag.spv | Bin .../{ => glsl}/viewportarray/scene.vert | 0 .../{ => glsl}/viewportarray/scene.vert.spv | Bin .../{ => glsl}/vulkanscene/generate-spriv.bat | 0 data/shaders/{ => glsl}/vulkanscene/logo.frag | 0 .../{ => glsl}/vulkanscene/logo.frag.spv | Bin data/shaders/{ => glsl}/vulkanscene/logo.vert | 0 .../{ => glsl}/vulkanscene/logo.vert.spv | Bin data/shaders/{ => glsl}/vulkanscene/mesh.frag | 0 .../{ => glsl}/vulkanscene/mesh.frag.spv | Bin data/shaders/{ => glsl}/vulkanscene/mesh.vert | 0 .../{ => glsl}/vulkanscene/mesh.vert.spv | Bin .../{ => glsl}/vulkanscene/skybox.frag | 0 .../{ => glsl}/vulkanscene/skybox.frag.spv | Bin .../{ => glsl}/vulkanscene/skybox.vert | 0 .../{ => glsl}/vulkanscene/skybox.vert.spv | Bin data/{ => shaders}/hlsl/README.md | 2 +- data/{ => shaders}/hlsl/base/textoverlay.frag | 0 data/{ => shaders}/hlsl/base/textoverlay.vert | 0 data/{ => shaders}/hlsl/base/uioverlay.frag | 0 data/{ => shaders}/hlsl/base/uioverlay.vert | 0 data/{ => shaders}/hlsl/bloom/colorpass.frag | 0 data/{ => shaders}/hlsl/bloom/colorpass.vert | 0 data/{ => shaders}/hlsl/bloom/gaussblur.frag | 0 data/{ => shaders}/hlsl/bloom/gaussblur.vert | 0 data/{ => shaders}/hlsl/bloom/phongpass.frag | 0 data/{ => shaders}/hlsl/bloom/phongpass.vert | 0 data/{ => shaders}/hlsl/bloom/skybox.frag | 0 data/{ => shaders}/hlsl/bloom/skybox.vert | 0 data/{ => shaders}/hlsl/compile.py | 2 +- .../hlsl/computecloth/cloth.comp | 0 .../hlsl/computecloth/cloth.frag | 0 .../hlsl/computecloth/cloth.vert | 0 .../hlsl/computecloth/sphere.frag | 0 .../hlsl/computecloth/sphere.vert | 0 .../hlsl/computecullandlod/cull.comp | 0 .../hlsl/computecullandlod/indirectdraw.frag | 0 .../hlsl/computecullandlod/indirectdraw.vert | 0 .../hlsl/computeheadless/headless.comp | 0 .../hlsl/computenbody/particle.frag | 0 .../hlsl/computenbody/particle.vert | 0 .../hlsl/computenbody/particle_calculate.comp | 0 .../hlsl/computenbody/particle_integrate.comp | 0 .../hlsl/computeparticles/particle.comp | 0 .../hlsl/computeparticles/particle.frag | 0 .../hlsl/computeparticles/particle.vert | 0 .../hlsl/computeraytracing/raytracing.comp | 0 .../hlsl/computeraytracing/texture.frag | 0 .../hlsl/computeraytracing/texture.vert | 0 .../hlsl/computeshader/edgedetect.comp | 0 .../hlsl/computeshader/emboss.comp | 0 .../hlsl/computeshader/sharpen.comp | 0 .../hlsl/computeshader/texture.frag | 0 .../hlsl/computeshader/texture.vert | 0 .../hlsl/conditionalrender/model.frag | 0 .../hlsl/conditionalrender/model.vert | 0 .../hlsl/conservativeraster/fullscreen.frag | 0 .../hlsl/conservativeraster/fullscreen.vert | 0 .../hlsl/conservativeraster/triangle.frag | 0 .../hlsl/conservativeraster/triangle.vert | 0 .../conservativeraster/triangleoverlay.frag | 0 .../hlsl/debugmarker/colorpass.frag | 0 .../hlsl/debugmarker/colorpass.vert | 0 .../hlsl/debugmarker/postprocess.frag | 0 .../hlsl/debugmarker/postprocess.vert | 0 data/{ => shaders}/hlsl/debugmarker/toon.frag | 0 data/{ => shaders}/hlsl/debugmarker/toon.vert | 0 data/{ => shaders}/hlsl/deferred/debug.frag | 0 data/{ => shaders}/hlsl/deferred/debug.vert | 0 .../{ => shaders}/hlsl/deferred/deferred.frag | 0 .../{ => shaders}/hlsl/deferred/deferred.vert | 0 data/{ => shaders}/hlsl/deferred/mrt.frag | 0 data/{ => shaders}/hlsl/deferred/mrt.vert | 0 .../hlsl/deferredmultisampling/debug.frag | 0 .../hlsl/deferredmultisampling/debug.vert | 0 .../hlsl/deferredmultisampling/deferred.frag | 0 .../hlsl/deferredmultisampling/deferred.vert | 0 .../hlsl/deferredmultisampling/mrt.frag | 0 .../hlsl/deferredmultisampling/mrt.vert | 0 .../hlsl/deferredshadows/debug.frag | 0 .../hlsl/deferredshadows/debug.vert | 0 .../hlsl/deferredshadows/deferred.frag | 0 .../hlsl/deferredshadows/deferred.vert | 0 .../hlsl/deferredshadows/mrt.frag | 0 .../hlsl/deferredshadows/mrt.vert | 0 .../hlsl/deferredshadows/shadow.geom | 0 .../hlsl/deferredshadows/shadow.vert | 0 .../hlsl/descriptorsets/cube.frag | 0 .../hlsl/descriptorsets/cube.vert | 0 .../{ => shaders}/hlsl/displacement/base.frag | 0 .../{ => shaders}/hlsl/displacement/base.vert | 0 .../hlsl/displacement/displacement.tesc | 0 .../hlsl/displacement/displacement.tese | 0 .../hlsl/distancefieldfonts/bitmap.frag | 0 .../hlsl/distancefieldfonts/bitmap.vert | 0 .../hlsl/distancefieldfonts/sdf.frag | 0 .../hlsl/distancefieldfonts/sdf.vert | 0 .../hlsl/dynamicuniformbuffer/base.frag | 0 .../hlsl/dynamicuniformbuffer/base.vert | 0 data/{ => shaders}/hlsl/gears/gears.frag | 0 data/{ => shaders}/hlsl/gears/gears.vert | 0 .../hlsl/geometryshader/base.frag | 0 .../hlsl/geometryshader/base.vert | 0 .../hlsl/geometryshader/mesh.frag | 0 .../hlsl/geometryshader/mesh.vert | 0 .../hlsl/geometryshader/normaldebug.geom | 0 data/{ => shaders}/hlsl/gltfscene/mesh.frag | 0 data/{ => shaders}/hlsl/gltfscene/mesh.vert | 0 data/{ => shaders}/hlsl/hdr/bloom.frag | 0 data/{ => shaders}/hlsl/hdr/bloom.vert | 0 data/{ => shaders}/hlsl/hdr/composition.frag | 0 data/{ => shaders}/hlsl/hdr/composition.vert | 0 data/{ => shaders}/hlsl/hdr/gbuffer.frag | 0 data/{ => shaders}/hlsl/hdr/gbuffer.vert | 0 data/{ => shaders}/hlsl/imgui/scene.frag | 0 data/{ => shaders}/hlsl/imgui/scene.vert | 0 data/{ => shaders}/hlsl/imgui/ui.frag | 0 data/{ => shaders}/hlsl/imgui/ui.vert | 0 .../hlsl/indirectdraw/ground.frag | 0 .../hlsl/indirectdraw/ground.vert | 0 .../hlsl/indirectdraw/indirectdraw.frag | 0 .../hlsl/indirectdraw/indirectdraw.vert | 0 .../hlsl/indirectdraw/skysphere.frag | 0 .../hlsl/indirectdraw/skysphere.vert | 0 .../hlsl/inlineuniformblocks/pbr.frag | 0 .../hlsl/inlineuniformblocks/pbr.vert | 0 .../hlsl/inputattachments/attachmentread.frag | 0 .../hlsl/inputattachments/attachmentread.vert | 0 .../inputattachments/attachmentwrite.frag | 0 .../inputattachments/attachmentwrite.vert | 0 .../hlsl/instancing/instancing.frag | 0 .../hlsl/instancing/instancing.vert | 0 .../{ => shaders}/hlsl/instancing/planet.frag | 0 .../{ => shaders}/hlsl/instancing/planet.vert | 0 .../hlsl/instancing/starfield.frag | 0 .../hlsl/instancing/starfield.vert | 0 data/{ => shaders}/hlsl/mesh/mesh.frag | 0 data/{ => shaders}/hlsl/mesh/mesh.vert | 0 .../hlsl/multisampling/scene.frag | 0 .../hlsl/multisampling/scene.vert | 0 .../hlsl/multithreading/phong.frag | 0 .../hlsl/multithreading/phong.vert | 0 .../hlsl/multithreading/starsphere.frag | 0 .../hlsl/multithreading/starsphere.vert | 0 .../hlsl/multiview/multiview.frag | 0 .../hlsl/multiview/multiview.vert | 0 .../hlsl/multiview/viewdisplay.frag | 0 .../hlsl/multiview/viewdisplay.vert | 0 .../hlsl/negativeviewportheight/quad.frag | 0 .../hlsl/negativeviewportheight/quad.vert | 0 .../nv_ray_tracing_basic/closesthit.rchit | 0 .../hlsl/nv_ray_tracing_basic/miss.rmiss | 0 .../hlsl/nv_ray_tracing_basic/raygen.rgen | 0 .../closesthit.rchit | 0 .../nv_ray_tracing_reflections/miss.rmiss | 0 .../nv_ray_tracing_reflections/raygen.rgen | 0 .../nv_ray_tracing_shadows/closesthit.rchit | 0 .../hlsl/nv_ray_tracing_shadows/miss.rmiss | 0 .../hlsl/nv_ray_tracing_shadows/raygen.rgen | 0 .../hlsl/nv_ray_tracing_shadows/shadow.rmiss | 0 .../hlsl/occlusionquery/mesh.frag | 0 .../hlsl/occlusionquery/mesh.vert | 0 .../hlsl/occlusionquery/occluder.frag | 0 .../hlsl/occlusionquery/occluder.vert | 0 .../hlsl/occlusionquery/simple.frag | 0 .../hlsl/occlusionquery/simple.vert | 0 data/{ => shaders}/hlsl/offscreen/mirror.frag | 0 data/{ => shaders}/hlsl/offscreen/mirror.vert | 0 data/{ => shaders}/hlsl/offscreen/phong.frag | 0 data/{ => shaders}/hlsl/offscreen/phong.vert | 0 data/{ => shaders}/hlsl/offscreen/quad.frag | 0 data/{ => shaders}/hlsl/offscreen/quad.vert | 0 .../hlsl/parallaxmapping/parallax.frag | 0 .../hlsl/parallaxmapping/parallax.vert | 0 .../hlsl/particlefire/normalmap.frag | 0 .../hlsl/particlefire/normalmap.vert | 0 .../hlsl/particlefire/particle.frag | 0 .../hlsl/particlefire/particle.vert | 0 data/{ => shaders}/hlsl/pbrbasic/pbr.frag | 0 data/{ => shaders}/hlsl/pbrbasic/pbr.vert | 0 .../{ => shaders}/hlsl/pbribl/filtercube.vert | 0 .../{ => shaders}/hlsl/pbribl/genbrdflut.frag | 0 .../{ => shaders}/hlsl/pbribl/genbrdflut.vert | 0 .../hlsl/pbribl/irradiancecube.frag | 0 data/{ => shaders}/hlsl/pbribl/pbribl.frag | 0 data/{ => shaders}/hlsl/pbribl/pbribl.vert | 0 .../hlsl/pbribl/prefilterenvmap.frag | 0 data/{ => shaders}/hlsl/pbribl/skybox.frag | 0 data/{ => shaders}/hlsl/pbribl/skybox.vert | 0 .../hlsl/pbrtexture/filtercube.vert | 0 .../hlsl/pbrtexture/genbrdflut.frag | 0 .../hlsl/pbrtexture/genbrdflut.vert | 0 .../hlsl/pbrtexture/irradiancecube.frag | 0 .../hlsl/pbrtexture/pbrtexture.frag | 0 .../hlsl/pbrtexture/pbrtexture.vert | 0 .../hlsl/pbrtexture/prefilterenvmap.frag | 0 .../{ => shaders}/hlsl/pbrtexture/skybox.frag | 0 .../{ => shaders}/hlsl/pbrtexture/skybox.vert | 0 data/{ => shaders}/hlsl/pipelines/phong.frag | 0 data/{ => shaders}/hlsl/pipelines/phong.vert | 0 data/{ => shaders}/hlsl/pipelines/toon.frag | 0 data/{ => shaders}/hlsl/pipelines/toon.vert | 0 .../hlsl/pipelines/wireframe.frag | 0 .../hlsl/pipelines/wireframe.vert | 0 .../hlsl/pipelinestatistics/scene.frag | 0 .../hlsl/pipelinestatistics/scene.tesc | 0 .../hlsl/pipelinestatistics/scene.tese | 0 .../hlsl/pipelinestatistics/scene.vert | 0 .../hlsl/pushconstants/lights.frag | 0 .../hlsl/pushconstants/lights.vert | 0 .../hlsl/pushdescriptors/cube.frag | 0 .../hlsl/pushdescriptors/cube.vert | 0 .../hlsl/radialblur/colorpass.frag | 0 .../hlsl/radialblur/colorpass.vert | 0 .../hlsl/radialblur/phongpass.frag | 0 .../hlsl/radialblur/phongpass.vert | 0 .../hlsl/radialblur/radialblur.frag | 0 .../hlsl/radialblur/radialblur.vert | 0 .../hlsl/renderheadless/triangle.frag | 0 .../hlsl/renderheadless/triangle.vert | 0 .../hlsl/scenerendering/scene.frag | 0 .../hlsl/scenerendering/scene.vert | 0 data/{ => shaders}/hlsl/screenshot/mesh.frag | 0 data/{ => shaders}/hlsl/screenshot/mesh.vert | 0 .../hlsl/shadowmapomni/cubemapdisplay.frag | 0 .../hlsl/shadowmapomni/cubemapdisplay.vert | 0 .../hlsl/shadowmapomni/offscreen.frag | 0 .../hlsl/shadowmapomni/offscreen.vert | 0 .../hlsl/shadowmapomni/scene.frag | 0 .../hlsl/shadowmapomni/scene.vert | 0 .../hlsl/shadowmapping/offscreen.frag | 0 .../hlsl/shadowmapping/offscreen.vert | 0 .../hlsl/shadowmapping/quad.frag | 0 .../hlsl/shadowmapping/quad.vert | 0 .../hlsl/shadowmapping/scene.frag | 0 .../hlsl/shadowmapping/scene.vert | 0 .../shadowmappingcascade/debugshadowmap.frag | 0 .../shadowmappingcascade/debugshadowmap.vert | 0 .../hlsl/shadowmappingcascade/depthpass.frag | 0 .../hlsl/shadowmappingcascade/depthpass.vert | 0 .../hlsl/shadowmappingcascade/scene.frag | 0 .../hlsl/shadowmappingcascade/scene.vert | 0 .../hlsl/skeletalanimation/mesh.frag | 0 .../hlsl/skeletalanimation/mesh.vert | 0 .../hlsl/skeletalanimation/texture.frag | 0 .../hlsl/skeletalanimation/texture.vert | 0 .../hlsl/specializationconstants/uber.frag | 0 .../hlsl/specializationconstants/uber.vert | 0 .../hlsl/sphericalenvmapping/sem.frag | 0 .../hlsl/sphericalenvmapping/sem.vert | 0 data/{ => shaders}/hlsl/ssao/blur.frag | 0 data/{ => shaders}/hlsl/ssao/composition.frag | 0 data/{ => shaders}/hlsl/ssao/fullscreen.vert | 0 data/{ => shaders}/hlsl/ssao/gbuffer.frag | 0 data/{ => shaders}/hlsl/ssao/gbuffer.vert | 0 data/{ => shaders}/hlsl/ssao/ssao.frag | 0 .../hlsl/stencilbuffer/outline.frag | 0 .../hlsl/stencilbuffer/outline.vert | 0 .../hlsl/stencilbuffer/toon.frag | 0 .../hlsl/stencilbuffer/toon.vert | 0 .../hlsl/subpasses/composition.frag | 0 .../hlsl/subpasses/composition.vert | 0 .../{ => shaders}/hlsl/subpasses/gbuffer.frag | 0 .../{ => shaders}/hlsl/subpasses/gbuffer.vert | 0 .../hlsl/subpasses/transparent.frag | 0 .../hlsl/subpasses/transparent.vert | 0 .../hlsl/terraintessellation/skysphere.frag | 0 .../hlsl/terraintessellation/skysphere.vert | 0 .../hlsl/terraintessellation/terrain.frag | 0 .../hlsl/terraintessellation/terrain.tesc | 0 .../hlsl/terraintessellation/terrain.tese | 0 .../hlsl/terraintessellation/terrain.vert | 0 .../{ => shaders}/hlsl/tessellation/base.frag | 0 .../{ => shaders}/hlsl/tessellation/base.vert | 0 .../hlsl/tessellation/passthrough.tesc | 0 .../hlsl/tessellation/passthrough.tese | 0 .../hlsl/tessellation/pntriangles.tesc | 0 .../hlsl/tessellation/pntriangles.tese | 0 data/{ => shaders}/hlsl/textoverlay/mesh.frag | 0 data/{ => shaders}/hlsl/textoverlay/mesh.vert | 0 data/{ => shaders}/hlsl/textoverlay/text.frag | 0 data/{ => shaders}/hlsl/textoverlay/text.vert | 0 data/{ => shaders}/hlsl/texture/texture.frag | 0 data/{ => shaders}/hlsl/texture/texture.vert | 0 .../hlsl/texture3d/texture3d.frag | 0 .../hlsl/texture3d/texture3d.vert | 0 .../hlsl/texturearray/instancing.frag | 0 .../hlsl/texturearray/instancing.vert | 0 .../hlsl/texturecubemap/reflect.frag | 0 .../hlsl/texturecubemap/reflect.vert | 0 .../hlsl/texturecubemap/skybox.frag | 0 .../hlsl/texturecubemap/skybox.vert | 0 .../hlsl/texturemipmapgen/texture.frag | 0 .../hlsl/texturemipmapgen/texture.vert | 0 .../sparseresidency.frag | 0 .../sparseresidency.vert | 0 .../{ => shaders}/hlsl/triangle/triangle.frag | 0 .../{ => shaders}/hlsl/triangle/triangle.vert | 0 .../hlsl/viewportarray/multiview.geom | 0 .../hlsl/viewportarray/scene.frag | 0 .../hlsl/viewportarray/scene.vert | 0 data/{ => shaders}/hlsl/vulkanscene/logo.frag | 0 data/{ => shaders}/hlsl/vulkanscene/logo.vert | 0 data/{ => shaders}/hlsl/vulkanscene/mesh.frag | 0 data/{ => shaders}/hlsl/vulkanscene/mesh.vert | 0 .../hlsl/vulkanscene/skybox.frag | 0 .../hlsl/vulkanscene/skybox.vert | 0 examples/CMakeLists.txt | 2 +- examples/bloom/bloom.cpp | 48 ++++++------ examples/commandbuffers/commandbuffers.cpp | 24 +++--- examples/computecloth/computecloth.cpp | 38 ++++----- .../computecullandlod/computecullandlod.cpp | 32 ++++---- examples/computeheadless/computeheadless.cpp | 28 +++---- examples/computenbody/computenbody.cpp | 24 +++--- .../computeparticles/computeparticles.cpp | 6 +- .../computeraytracing/computeraytracing.cpp | 16 ++-- examples/computeshader/computeshader.cpp | 24 +++--- .../conditionalrender/conditionalrender.cpp | 8 +- .../conservativeraster/conservativeraster.cpp | 36 ++++----- examples/debugmarker/debugmarker.cpp | 38 ++++----- examples/deferred/deferred.cpp | 50 ++++++------ .../deferredmultisampling.cpp | 48 ++++++------ examples/deferredshadows/deferredshadows.cpp | 36 ++++----- .../descriptorindexing/descriptorindexing.cpp | 24 +++--- examples/descriptorsets/descriptorsets.cpp | 20 ++--- examples/displacement/displacement.cpp | 18 ++--- .../distancefieldfonts/distancefieldfonts.cpp | 42 +++++----- .../dynamicuniformbuffer.cpp | 18 ++--- examples/gears/gears.cpp | 6 +- examples/geometryshader/geometryshader.cpp | 14 ++-- examples/gltfscene/gltfscene.cpp | 26 +++---- examples/hdr/hdr.cpp | 12 +-- examples/imgui/main.cpp | 24 +++--- examples/indirectdraw/indirectdraw.cpp | 34 ++++----- .../inlineuniformblocks.cpp | 8 +- .../inputattachments/inputattachments.cpp | 22 +++--- examples/instancing/instancing.cpp | 44 +++++------ examples/multisampling/multisampling.cpp | 28 +++---- examples/multithreading/multithreading.cpp | 28 +++---- examples/multiview/multiview.cpp | 26 +++---- .../negativeviewportheight.cpp | 16 ++-- .../nv_ray_tracing_basic.cpp | 8 +- .../nv_ray_tracing_reflections.cpp | 8 +- .../nv_ray_tracing_shadows.cpp | 12 +-- examples/occlusionquery/occlusionquery.cpp | 16 ++-- examples/offscreen/offscreen.cpp | 24 +++--- examples/parallaxmapping/parallaxmapping.cpp | 36 ++++----- examples/particlefire/particlefire.cpp | 16 ++-- examples/pbrbasic/pbrbasic.cpp | 8 +- examples/pbribl/pbribl.cpp | 42 +++++----- examples/pbrtexture/main.cpp | 40 +++++----- examples/pipelines/pipelines.cpp | 36 ++++----- .../pipelinestatistics/pipelinestatistics.cpp | 14 ++-- examples/pushconstants/pushconstants.cpp | 14 ++-- examples/pushdescriptors/pushdescriptors.cpp | 16 ++-- examples/radialblur/radialblur.cpp | 20 ++--- examples/renderheadless/renderheadless.cpp | 22 +++--- examples/scenerendering/scenerendering.cpp | 16 ++-- examples/screenshot/screenshot.cpp | 24 +++--- examples/shadowmapping/shadowmapping.cpp | 24 +++--- .../shadowmappingcascade.cpp | 22 +++--- .../shadowmappingomni/shadowmappingomni.cpp | 40 +++++----- .../skeletalanimation/skeletalanimation.cpp | 44 +++++------ .../specializationconstants.cpp | 18 ++--- .../sphericalenvmapping.cpp | 6 +- examples/ssao/ssao.cpp | 38 ++++----- examples/stencilbuffer/stencilbuffer.cpp | 16 ++-- examples/subpasses/subpasses.cpp | 50 ++++++------ .../terraintessellation.cpp | 38 ++++----- examples/tessellation/tessellation.cpp | 24 +++--- examples/textoverlay/textoverlay.cpp | 20 ++--- examples/texture/texture.cpp | 4 +- examples/texture3d/texture3d.cpp | 72 +++++++++--------- examples/texturearray/texturearray.cpp | 4 +- examples/texturecubemap/texturecubemap.cpp | 8 +- .../texturemipmapgen/texturemipmapgen.cpp | 20 ++--- .../texturesparseresidency.cpp | 64 ++++++++-------- examples/triangle/triangle.cpp | 32 ++++---- examples/viewportarray/viewportarray.cpp | 20 ++--- examples/vulkanscene/vulkanscene.cpp | 24 +++--- 1043 files changed, 1207 insertions(+), 1201 deletions(-) rename data/shaders/{ => glsl}/base/generate-spirv.bat (100%) rename data/shaders/{ => glsl}/base/textoverlay.frag (100%) rename data/shaders/{ => glsl}/base/textoverlay.frag.spv (100%) rename data/shaders/{ => glsl}/base/textoverlay.vert (100%) rename data/shaders/{ => glsl}/base/textoverlay.vert.spv (100%) rename data/shaders/{ => glsl}/base/uioverlay.frag (100%) rename data/shaders/{ => glsl}/base/uioverlay.frag.spv (100%) rename data/shaders/{ => glsl}/base/uioverlay.vert (100%) rename data/shaders/{ => glsl}/base/uioverlay.vert.spv (100%) rename data/shaders/{ => glsl}/bloom/colorpass.frag (100%) rename data/shaders/{ => glsl}/bloom/colorpass.frag.spv (100%) rename data/shaders/{ => glsl}/bloom/colorpass.vert (100%) rename data/shaders/{ => glsl}/bloom/colorpass.vert.spv (100%) rename data/shaders/{ => glsl}/bloom/gaussblur.frag (100%) rename data/shaders/{ => glsl}/bloom/gaussblur.frag.spv (100%) rename data/shaders/{ => glsl}/bloom/gaussblur.vert (100%) rename data/shaders/{ => glsl}/bloom/gaussblur.vert.spv (100%) rename data/shaders/{ => glsl}/bloom/generate-spirv.bat (100%) rename data/shaders/{ => glsl}/bloom/phongpass.frag (100%) rename data/shaders/{ => glsl}/bloom/phongpass.frag.spv (100%) rename data/shaders/{ => glsl}/bloom/phongpass.vert (100%) rename data/shaders/{ => glsl}/bloom/phongpass.vert.spv (100%) rename data/shaders/{ => glsl}/bloom/skybox.frag (100%) rename data/shaders/{ => glsl}/bloom/skybox.frag.spv (100%) rename data/shaders/{ => glsl}/bloom/skybox.vert (100%) rename data/shaders/{ => glsl}/bloom/skybox.vert.spv (100%) rename data/shaders/{ => glsl}/compileshaders.py (100%) rename data/shaders/{ => glsl}/computecloth/cloth.comp (100%) rename data/shaders/{ => glsl}/computecloth/cloth.comp.spv (100%) rename data/shaders/{ => glsl}/computecloth/cloth.frag (100%) rename data/shaders/{ => glsl}/computecloth/cloth.frag.spv (100%) rename data/shaders/{ => glsl}/computecloth/cloth.vert (100%) rename data/shaders/{ => glsl}/computecloth/cloth.vert.spv (100%) rename data/shaders/{ => glsl}/computecloth/sphere.frag (100%) rename data/shaders/{ => glsl}/computecloth/sphere.frag.spv (100%) rename data/shaders/{ => glsl}/computecloth/sphere.vert (100%) rename data/shaders/{ => glsl}/computecloth/sphere.vert.spv (100%) rename data/shaders/{ => glsl}/computecullandlod/cull.comp (100%) rename data/shaders/{ => glsl}/computecullandlod/cull.comp.spv (100%) rename data/shaders/{ => glsl}/computecullandlod/indirectdraw.frag (100%) rename data/shaders/{ => glsl}/computecullandlod/indirectdraw.frag.spv (100%) rename data/shaders/{ => glsl}/computecullandlod/indirectdraw.vert (100%) rename data/shaders/{ => glsl}/computecullandlod/indirectdraw.vert.spv (100%) rename data/shaders/{ => glsl}/computeheadless/headless.comp (100%) rename data/shaders/{ => glsl}/computeheadless/headless.comp.spv (100%) rename data/shaders/{ => glsl}/computenbody/particle.frag (100%) rename data/shaders/{ => glsl}/computenbody/particle.frag.spv (100%) rename data/shaders/{ => glsl}/computenbody/particle.vert (100%) rename data/shaders/{ => glsl}/computenbody/particle.vert.spv (100%) rename data/shaders/{ => glsl}/computenbody/particle_calculate.comp (100%) rename data/shaders/{ => glsl}/computenbody/particle_calculate.comp.spv (100%) rename data/shaders/{ => glsl}/computenbody/particle_integrate.comp (100%) rename data/shaders/{ => glsl}/computenbody/particle_integrate.comp.spv (100%) rename data/shaders/{ => glsl}/computeparticles/generate-spirv.bat (100%) rename data/shaders/{ => glsl}/computeparticles/particle.comp (100%) rename data/shaders/{ => glsl}/computeparticles/particle.comp.spv (100%) rename data/shaders/{ => glsl}/computeparticles/particle.frag (100%) rename data/shaders/{ => glsl}/computeparticles/particle.frag.spv (100%) rename data/shaders/{ => glsl}/computeparticles/particle.vert (100%) rename data/shaders/{ => glsl}/computeparticles/particle.vert.spv (100%) rename data/shaders/{ => glsl}/computeraytracing/generate-spirv.bat (100%) rename data/shaders/{ => glsl}/computeraytracing/raytracing.comp (100%) rename data/shaders/{ => glsl}/computeraytracing/raytracing.comp.spv (100%) rename data/shaders/{ => glsl}/computeraytracing/texture.frag (100%) rename data/shaders/{ => glsl}/computeraytracing/texture.frag.spv (100%) rename data/shaders/{ => glsl}/computeraytracing/texture.vert (100%) rename data/shaders/{ => glsl}/computeraytracing/texture.vert.spv (100%) rename data/shaders/{ => glsl}/computeshader/edgedetect.comp (100%) rename data/shaders/{ => glsl}/computeshader/edgedetect.comp.spv (100%) rename data/shaders/{ => glsl}/computeshader/emboss.comp (100%) rename data/shaders/{ => glsl}/computeshader/emboss.comp.spv (100%) rename data/shaders/{ => glsl}/computeshader/generate-spirv.bat (100%) rename data/shaders/{ => glsl}/computeshader/sharpen.comp (100%) rename data/shaders/{ => glsl}/computeshader/sharpen.comp.spv (100%) rename data/shaders/{ => glsl}/computeshader/texture.frag (100%) rename data/shaders/{ => glsl}/computeshader/texture.frag.spv (100%) rename data/shaders/{ => glsl}/computeshader/texture.vert (100%) rename data/shaders/{ => glsl}/computeshader/texture.vert.spv (100%) rename data/shaders/{ => glsl}/conditionalrender/model.frag (100%) rename data/shaders/{ => glsl}/conditionalrender/model.frag.spv (100%) rename data/shaders/{ => glsl}/conditionalrender/model.vert (100%) rename data/shaders/{ => glsl}/conditionalrender/model.vert.spv (100%) rename data/shaders/{ => glsl}/conservativeraster/fullscreen.frag (100%) rename data/shaders/{ => glsl}/conservativeraster/fullscreen.frag.spv (100%) rename data/shaders/{ => glsl}/conservativeraster/fullscreen.vert (100%) rename data/shaders/{ => glsl}/conservativeraster/fullscreen.vert.spv (100%) rename data/shaders/{ => glsl}/conservativeraster/triangle.frag (100%) rename data/shaders/{ => glsl}/conservativeraster/triangle.frag.spv (100%) rename data/shaders/{ => glsl}/conservativeraster/triangle.vert (100%) rename data/shaders/{ => glsl}/conservativeraster/triangle.vert.spv (100%) rename data/shaders/{ => glsl}/conservativeraster/triangleoverlay.frag (100%) rename data/shaders/{ => glsl}/conservativeraster/triangleoverlay.frag.spv (100%) rename data/shaders/{ => glsl}/debugmarker/colorpass.frag (100%) rename data/shaders/{ => glsl}/debugmarker/colorpass.frag.spv (100%) rename data/shaders/{ => glsl}/debugmarker/colorpass.vert (100%) rename data/shaders/{ => glsl}/debugmarker/colorpass.vert.spv (100%) rename data/shaders/{ => glsl}/debugmarker/generate-spirv.bat (100%) rename data/shaders/{ => glsl}/debugmarker/postprocess.frag (100%) rename data/shaders/{ => glsl}/debugmarker/postprocess.frag.spv (100%) rename data/shaders/{ => glsl}/debugmarker/postprocess.vert (100%) rename data/shaders/{ => glsl}/debugmarker/postprocess.vert.spv (100%) rename data/shaders/{ => glsl}/debugmarker/toon.frag (100%) rename data/shaders/{ => glsl}/debugmarker/toon.frag.spv (100%) rename data/shaders/{ => glsl}/debugmarker/toon.vert (100%) rename data/shaders/{ => glsl}/debugmarker/toon.vert.spv (100%) rename data/shaders/{ => glsl}/deferred/debug.frag (100%) rename data/shaders/{ => glsl}/deferred/debug.frag.spv (100%) rename data/shaders/{ => glsl}/deferred/debug.vert (100%) rename data/shaders/{ => glsl}/deferred/debug.vert.spv (100%) rename data/shaders/{ => glsl}/deferred/deferred.frag (100%) rename data/shaders/{ => glsl}/deferred/deferred.frag.spv (100%) rename data/shaders/{ => glsl}/deferred/deferred.vert (100%) rename data/shaders/{ => glsl}/deferred/deferred.vert.spv (100%) rename data/shaders/{ => glsl}/deferred/generate-spirv.bat (100%) rename data/shaders/{ => glsl}/deferred/mrt.frag (100%) rename data/shaders/{ => glsl}/deferred/mrt.frag.spv (100%) rename data/shaders/{ => glsl}/deferred/mrt.vert (100%) rename data/shaders/{ => glsl}/deferred/mrt.vert.spv (100%) rename data/shaders/{ => glsl}/deferredmultisampling/debug.frag (100%) rename data/shaders/{ => glsl}/deferredmultisampling/debug.frag.spv (100%) rename data/shaders/{ => glsl}/deferredmultisampling/debug.vert (100%) rename data/shaders/{ => glsl}/deferredmultisampling/debug.vert.spv (100%) rename data/shaders/{ => glsl}/deferredmultisampling/deferred.frag (100%) rename data/shaders/{ => glsl}/deferredmultisampling/deferred.frag.spv (100%) rename data/shaders/{ => glsl}/deferredmultisampling/deferred.vert (100%) rename data/shaders/{ => glsl}/deferredmultisampling/deferred.vert.spv (100%) rename data/shaders/{ => glsl}/deferredmultisampling/mrt.frag (100%) rename data/shaders/{ => glsl}/deferredmultisampling/mrt.frag.spv (100%) rename data/shaders/{ => glsl}/deferredmultisampling/mrt.vert (100%) rename data/shaders/{ => glsl}/deferredmultisampling/mrt.vert.spv (100%) rename data/shaders/{ => glsl}/deferredshadows/debug.frag (100%) rename data/shaders/{ => glsl}/deferredshadows/debug.frag.spv (100%) rename data/shaders/{ => glsl}/deferredshadows/debug.vert (100%) rename data/shaders/{ => glsl}/deferredshadows/debug.vert.spv (100%) rename data/shaders/{ => glsl}/deferredshadows/deferred.frag (100%) rename data/shaders/{ => glsl}/deferredshadows/deferred.frag.spv (100%) rename data/shaders/{ => glsl}/deferredshadows/deferred.vert (100%) rename data/shaders/{ => glsl}/deferredshadows/deferred.vert.spv (100%) rename data/shaders/{ => glsl}/deferredshadows/generate-spirv.bat (100%) rename data/shaders/{ => glsl}/deferredshadows/geom.spv (100%) rename data/shaders/{ => glsl}/deferredshadows/mrt.frag (100%) rename data/shaders/{ => glsl}/deferredshadows/mrt.frag.spv (100%) rename data/shaders/{ => glsl}/deferredshadows/mrt.vert (100%) rename data/shaders/{ => glsl}/deferredshadows/mrt.vert.spv (100%) rename data/shaders/{ => glsl}/deferredshadows/shadow.geom (100%) rename data/shaders/{ => glsl}/deferredshadows/shadow.geom.spv (100%) rename data/shaders/{ => glsl}/deferredshadows/shadow.vert (100%) rename data/shaders/{ => glsl}/deferredshadows/shadow.vert.spv (100%) rename data/shaders/{ => glsl}/descriptorindexing/descriptorindexing.frag (100%) rename data/shaders/{ => glsl}/descriptorindexing/descriptorindexing.frag.spv (100%) rename data/shaders/{ => glsl}/descriptorindexing/descriptorindexing.vert (100%) rename data/shaders/{ => glsl}/descriptorindexing/descriptorindexing.vert.spv (100%) rename data/shaders/{ => glsl}/descriptorsets/cube.frag (100%) rename data/shaders/{ => glsl}/descriptorsets/cube.frag.spv (100%) rename data/shaders/{ => glsl}/descriptorsets/cube.vert (100%) rename data/shaders/{ => glsl}/descriptorsets/cube.vert.spv (100%) rename data/shaders/{ => glsl}/displacement/base.frag (100%) rename data/shaders/{ => glsl}/displacement/base.frag.spv (100%) rename data/shaders/{ => glsl}/displacement/base.vert (100%) rename data/shaders/{ => glsl}/displacement/base.vert.spv (100%) rename data/shaders/{ => glsl}/displacement/displacement.tesc (100%) rename data/shaders/{ => glsl}/displacement/displacement.tesc.spv (100%) rename data/shaders/{ => glsl}/displacement/displacement.tese (100%) rename data/shaders/{ => glsl}/displacement/displacement.tese.spv (100%) rename data/shaders/{ => glsl}/displacement/generate-spirv.bat (100%) rename data/shaders/{ => glsl}/distancefieldfonts/bitmap.frag (100%) rename data/shaders/{ => glsl}/distancefieldfonts/bitmap.frag.spv (100%) rename data/shaders/{ => glsl}/distancefieldfonts/bitmap.vert (100%) rename data/shaders/{ => glsl}/distancefieldfonts/bitmap.vert.spv (100%) rename data/shaders/{ => glsl}/distancefieldfonts/generate-spirv.bat (100%) rename data/shaders/{ => glsl}/distancefieldfonts/sdf.frag (100%) rename data/shaders/{ => glsl}/distancefieldfonts/sdf.frag.spv (100%) rename data/shaders/{ => glsl}/distancefieldfonts/sdf.vert (100%) rename data/shaders/{ => glsl}/distancefieldfonts/sdf.vert.spv (100%) rename data/shaders/{ => glsl}/dynamicuniformbuffer/base.frag (100%) rename data/shaders/{ => glsl}/dynamicuniformbuffer/base.frag.spv (100%) rename data/shaders/{ => glsl}/dynamicuniformbuffer/base.vert (100%) rename data/shaders/{ => glsl}/dynamicuniformbuffer/base.vert.spv (100%) rename data/shaders/{ => glsl}/gears/gears.frag (100%) rename data/shaders/{ => glsl}/gears/gears.frag.spv (100%) rename data/shaders/{ => glsl}/gears/gears.vert (100%) rename data/shaders/{ => glsl}/gears/gears.vert.spv (100%) rename data/shaders/{ => glsl}/geometryshader/base.frag (100%) rename data/shaders/{ => glsl}/geometryshader/base.frag.spv (100%) rename data/shaders/{ => glsl}/geometryshader/base.vert (100%) rename data/shaders/{ => glsl}/geometryshader/base.vert.spv (100%) rename data/shaders/{ => glsl}/geometryshader/generate-spirv.bat (100%) rename data/shaders/{ => glsl}/geometryshader/mesh.frag (100%) rename data/shaders/{ => glsl}/geometryshader/mesh.frag.spv (100%) rename data/shaders/{ => glsl}/geometryshader/mesh.vert (100%) rename data/shaders/{ => glsl}/geometryshader/mesh.vert.spv (100%) rename data/shaders/{ => glsl}/geometryshader/normaldebug.geom (100%) rename data/shaders/{ => glsl}/geometryshader/normaldebug.geom.spv (100%) rename data/shaders/{ => glsl}/gltfscene/mesh.frag (100%) rename data/shaders/{ => glsl}/gltfscene/mesh.frag.spv (100%) rename data/shaders/{ => glsl}/gltfscene/mesh.vert (100%) rename data/shaders/{ => glsl}/gltfscene/mesh.vert.spv (100%) rename data/shaders/{ => glsl}/hdr/bloom.frag (100%) rename data/shaders/{ => glsl}/hdr/bloom.frag.spv (100%) rename data/shaders/{ => glsl}/hdr/bloom.vert (100%) rename data/shaders/{ => glsl}/hdr/bloom.vert.spv (100%) rename data/shaders/{ => glsl}/hdr/composition.frag (100%) rename data/shaders/{ => glsl}/hdr/composition.frag.spv (100%) rename data/shaders/{ => glsl}/hdr/composition.vert (100%) rename data/shaders/{ => glsl}/hdr/composition.vert.spv (100%) rename data/shaders/{ => glsl}/hdr/gbuffer.frag (100%) rename data/shaders/{ => glsl}/hdr/gbuffer.frag.spv (100%) rename data/shaders/{ => glsl}/hdr/gbuffer.vert (100%) rename data/shaders/{ => glsl}/hdr/gbuffer.vert.spv (100%) rename data/shaders/{ => glsl}/imgui/scene.frag (100%) rename data/shaders/{ => glsl}/imgui/scene.frag.spv (100%) rename data/shaders/{ => glsl}/imgui/scene.vert (100%) rename data/shaders/{ => glsl}/imgui/scene.vert.spv (100%) rename data/shaders/{ => glsl}/imgui/ui.frag (100%) rename data/shaders/{ => glsl}/imgui/ui.frag.spv (100%) rename data/shaders/{ => glsl}/imgui/ui.vert (100%) rename data/shaders/{ => glsl}/imgui/ui.vert.spv (100%) rename data/shaders/{ => glsl}/indirectdraw/generate-spirv.bat (100%) rename data/shaders/{ => glsl}/indirectdraw/ground.frag (100%) rename data/shaders/{ => glsl}/indirectdraw/ground.frag.spv (100%) rename data/shaders/{ => glsl}/indirectdraw/ground.vert (100%) rename data/shaders/{ => glsl}/indirectdraw/ground.vert.spv (100%) rename data/shaders/{ => glsl}/indirectdraw/indirectdraw.frag (100%) rename data/shaders/{ => glsl}/indirectdraw/indirectdraw.frag.spv (100%) rename data/shaders/{ => glsl}/indirectdraw/indirectdraw.vert (100%) rename data/shaders/{ => glsl}/indirectdraw/indirectdraw.vert.spv (100%) rename data/shaders/{ => glsl}/indirectdraw/skysphere.frag (100%) rename data/shaders/{ => glsl}/indirectdraw/skysphere.frag.spv (100%) rename data/shaders/{ => glsl}/indirectdraw/skysphere.vert (100%) rename data/shaders/{ => glsl}/indirectdraw/skysphere.vert.spv (100%) rename data/shaders/{ => glsl}/inlineuniformblocks/pbr.frag (100%) rename data/shaders/{ => glsl}/inlineuniformblocks/pbr.frag.spv (100%) rename data/shaders/{ => glsl}/inlineuniformblocks/pbr.vert (100%) rename data/shaders/{ => glsl}/inlineuniformblocks/pbr.vert.spv (100%) rename data/shaders/{ => glsl}/inputattachments/attachmentread.frag (100%) rename data/shaders/{ => glsl}/inputattachments/attachmentread.frag.spv (100%) rename data/shaders/{ => glsl}/inputattachments/attachmentread.vert (100%) rename data/shaders/{ => glsl}/inputattachments/attachmentread.vert.spv (100%) rename data/shaders/{ => glsl}/inputattachments/attachmentwrite.frag (100%) rename data/shaders/{ => glsl}/inputattachments/attachmentwrite.frag.spv (100%) rename data/shaders/{ => glsl}/inputattachments/attachmentwrite.vert (100%) rename data/shaders/{ => glsl}/inputattachments/attachmentwrite.vert.spv (100%) rename data/shaders/{ => glsl}/instancing/generate-spirv.bat (100%) rename data/shaders/{ => glsl}/instancing/instancing.frag (100%) rename data/shaders/{ => glsl}/instancing/instancing.frag.spv (100%) rename data/shaders/{ => glsl}/instancing/instancing.vert (100%) rename data/shaders/{ => glsl}/instancing/instancing.vert.spv (100%) rename data/shaders/{ => glsl}/instancing/planet.frag (100%) rename data/shaders/{ => glsl}/instancing/planet.frag.spv (100%) rename data/shaders/{ => glsl}/instancing/planet.vert (100%) rename data/shaders/{ => glsl}/instancing/planet.vert.spv (100%) rename data/shaders/{ => glsl}/instancing/starfield.frag (100%) rename data/shaders/{ => glsl}/instancing/starfield.frag.spv (100%) rename data/shaders/{ => glsl}/instancing/starfield.vert (100%) rename data/shaders/{ => glsl}/instancing/starfield.vert.spv (100%) rename data/shaders/{ => glsl}/multisampling/mesh.frag (100%) rename data/shaders/{ => glsl}/multisampling/mesh.frag.spv (100%) rename data/shaders/{ => glsl}/multisampling/mesh.vert (100%) rename data/shaders/{ => glsl}/multisampling/mesh.vert.spv (100%) rename data/shaders/{ => glsl}/multithreading/generate-spirv.bat (100%) rename data/shaders/{ => glsl}/multithreading/phong.frag (100%) rename data/shaders/{ => glsl}/multithreading/phong.frag.spv (100%) rename data/shaders/{ => glsl}/multithreading/phong.vert (100%) rename data/shaders/{ => glsl}/multithreading/phong.vert.spv (100%) rename data/shaders/{ => glsl}/multithreading/starsphere.frag (100%) rename data/shaders/{ => glsl}/multithreading/starsphere.frag.spv (100%) rename data/shaders/{ => glsl}/multithreading/starsphere.vert (100%) rename data/shaders/{ => glsl}/multithreading/starsphere.vert.spv (100%) rename data/shaders/{ => glsl}/multiview/multiview.frag (100%) rename data/shaders/{ => glsl}/multiview/multiview.frag.spv (100%) rename data/shaders/{ => glsl}/multiview/multiview.vert (100%) rename data/shaders/{ => glsl}/multiview/multiview.vert.spv (100%) rename data/shaders/{ => glsl}/multiview/viewdisplay.frag (100%) rename data/shaders/{ => glsl}/multiview/viewdisplay.frag.spv (100%) rename data/shaders/{ => glsl}/multiview/viewdisplay.vert (100%) rename data/shaders/{ => glsl}/multiview/viewdisplay.vert.spv (100%) rename data/shaders/{ => glsl}/negativeviewportheight/quad.frag (100%) rename data/shaders/{ => glsl}/negativeviewportheight/quad.frag.spv (100%) rename data/shaders/{ => glsl}/negativeviewportheight/quad.vert (100%) rename data/shaders/{ => glsl}/negativeviewportheight/quad.vert.spv (100%) rename data/shaders/{ => glsl}/nv_ray_tracing_basic/closesthit.rchit (100%) rename data/shaders/{ => glsl}/nv_ray_tracing_basic/closesthit.rchit.spv (100%) rename data/shaders/{ => glsl}/nv_ray_tracing_basic/miss.rmiss (100%) rename data/shaders/{ => glsl}/nv_ray_tracing_basic/miss.rmiss.spv (100%) rename data/shaders/{ => glsl}/nv_ray_tracing_basic/raygen.rgen (100%) rename data/shaders/{ => glsl}/nv_ray_tracing_basic/raygen.rgen.spv (100%) rename data/shaders/{ => glsl}/nv_ray_tracing_reflections/closesthit.rchit (100%) rename data/shaders/{ => glsl}/nv_ray_tracing_reflections/closesthit.rchit.spv (100%) rename data/shaders/{ => glsl}/nv_ray_tracing_reflections/miss.rmiss (100%) rename data/shaders/{ => glsl}/nv_ray_tracing_reflections/miss.rmiss.spv (100%) rename data/shaders/{ => glsl}/nv_ray_tracing_reflections/raygen.rgen (100%) rename data/shaders/{ => glsl}/nv_ray_tracing_reflections/raygen.rgen.spv (100%) rename data/shaders/{ => glsl}/nv_ray_tracing_shadows/closesthit.rchit (100%) rename data/shaders/{ => glsl}/nv_ray_tracing_shadows/closesthit.rchit.spv (100%) rename data/shaders/{ => glsl}/nv_ray_tracing_shadows/miss.rmiss (100%) rename data/shaders/{ => glsl}/nv_ray_tracing_shadows/miss.rmiss.spv (100%) rename data/shaders/{ => glsl}/nv_ray_tracing_shadows/raygen.rgen (100%) rename data/shaders/{ => glsl}/nv_ray_tracing_shadows/raygen.rgen.spv (100%) rename data/shaders/{ => glsl}/nv_ray_tracing_shadows/shadow.rmiss (100%) rename data/shaders/{ => glsl}/nv_ray_tracing_shadows/shadow.rmiss.spv (100%) rename data/shaders/{ => glsl}/occlusionquery/generate-spirv.bat (100%) rename data/shaders/{ => glsl}/occlusionquery/mesh.frag (100%) rename data/shaders/{ => glsl}/occlusionquery/mesh.frag.spv (100%) rename data/shaders/{ => glsl}/occlusionquery/mesh.vert (100%) rename data/shaders/{ => glsl}/occlusionquery/mesh.vert.spv (100%) rename data/shaders/{ => glsl}/occlusionquery/occluder.frag (100%) rename data/shaders/{ => glsl}/occlusionquery/occluder.frag.spv (100%) rename data/shaders/{ => glsl}/occlusionquery/occluder.vert (100%) rename data/shaders/{ => glsl}/occlusionquery/occluder.vert.spv (100%) rename data/shaders/{ => glsl}/occlusionquery/simple.frag (100%) rename data/shaders/{ => glsl}/occlusionquery/simple.frag.spv (100%) rename data/shaders/{ => glsl}/occlusionquery/simple.vert (100%) rename data/shaders/{ => glsl}/occlusionquery/simple.vert.spv (100%) rename data/shaders/{ => glsl}/offscreen/generate-spirv.bat (100%) rename data/shaders/{ => glsl}/offscreen/mirror.frag (100%) rename data/shaders/{ => glsl}/offscreen/mirror.frag.spv (100%) rename data/shaders/{ => glsl}/offscreen/mirror.vert (100%) rename data/shaders/{ => glsl}/offscreen/mirror.vert.spv (100%) rename data/shaders/{ => glsl}/offscreen/phong.frag (100%) rename data/shaders/{ => glsl}/offscreen/phong.frag.spv (100%) rename data/shaders/{ => glsl}/offscreen/phong.vert (100%) rename data/shaders/{ => glsl}/offscreen/phong.vert.spv (100%) rename data/shaders/{ => glsl}/offscreen/quad.frag (100%) rename data/shaders/{ => glsl}/offscreen/quad.frag.spv (100%) rename data/shaders/{ => glsl}/offscreen/quad.vert (100%) rename data/shaders/{ => glsl}/offscreen/quad.vert.spv (100%) rename data/shaders/{ => glsl}/parallaxmapping/parallax.frag (100%) rename data/shaders/{ => glsl}/parallaxmapping/parallax.frag.spv (100%) rename data/shaders/{ => glsl}/parallaxmapping/parallax.vert (100%) rename data/shaders/{ => glsl}/parallaxmapping/parallax.vert.spv (100%) rename data/shaders/{ => glsl}/particlefire/generate-spirv.bat (100%) rename data/shaders/{ => glsl}/particlefire/normalmap.frag (100%) rename data/shaders/{ => glsl}/particlefire/normalmap.frag.spv (100%) rename data/shaders/{ => glsl}/particlefire/normalmap.vert (100%) rename data/shaders/{ => glsl}/particlefire/normalmap.vert.spv (100%) rename data/shaders/{ => glsl}/particlefire/particle.frag (100%) rename data/shaders/{ => glsl}/particlefire/particle.frag.spv (100%) rename data/shaders/{ => glsl}/particlefire/particle.vert (100%) rename data/shaders/{ => glsl}/particlefire/particle.vert.spv (100%) rename data/shaders/{ => glsl}/pbrbasic/pbr.frag (100%) rename data/shaders/{ => glsl}/pbrbasic/pbr.frag.spv (100%) rename data/shaders/{ => glsl}/pbrbasic/pbr.vert (100%) rename data/shaders/{ => glsl}/pbrbasic/pbr.vert.spv (100%) rename data/shaders/{ => glsl}/pbribl/filtercube.vert (100%) rename data/shaders/{ => glsl}/pbribl/filtercube.vert.spv (100%) rename data/shaders/{ => glsl}/pbribl/genbrdflut.frag (100%) rename data/shaders/{ => glsl}/pbribl/genbrdflut.frag.spv (100%) rename data/shaders/{ => glsl}/pbribl/genbrdflut.vert (100%) rename data/shaders/{ => glsl}/pbribl/genbrdflut.vert.spv (100%) rename data/shaders/{ => glsl}/pbribl/irradiancecube.frag (100%) rename data/shaders/{ => glsl}/pbribl/irradiancecube.frag.spv (100%) rename data/shaders/{ => glsl}/pbribl/pbribl.frag (100%) rename data/shaders/{ => glsl}/pbribl/pbribl.frag.spv (100%) rename data/shaders/{ => glsl}/pbribl/pbribl.vert (100%) rename data/shaders/{ => glsl}/pbribl/pbribl.vert.spv (100%) rename data/shaders/{ => glsl}/pbribl/prefilterenvmap.frag (100%) rename data/shaders/{ => glsl}/pbribl/prefilterenvmap.frag.spv (100%) rename data/shaders/{ => glsl}/pbribl/skybox.frag (100%) rename data/shaders/{ => glsl}/pbribl/skybox.frag.spv (100%) rename data/shaders/{ => glsl}/pbribl/skybox.vert (100%) rename data/shaders/{ => glsl}/pbribl/skybox.vert.spv (100%) rename data/shaders/{ => glsl}/pbrtexture/filtercube.vert (100%) rename data/shaders/{ => glsl}/pbrtexture/filtercube.vert.spv (100%) rename data/shaders/{ => glsl}/pbrtexture/genbrdflut.frag (100%) rename data/shaders/{ => glsl}/pbrtexture/genbrdflut.frag.spv (100%) rename data/shaders/{ => glsl}/pbrtexture/genbrdflut.vert (100%) rename data/shaders/{ => glsl}/pbrtexture/genbrdflut.vert.spv (100%) rename data/shaders/{ => glsl}/pbrtexture/irradiancecube.frag (100%) rename data/shaders/{ => glsl}/pbrtexture/irradiancecube.frag.spv (100%) rename data/shaders/{ => glsl}/pbrtexture/pbrtexture.frag (100%) rename data/shaders/{ => glsl}/pbrtexture/pbrtexture.frag.spv (100%) rename data/shaders/{ => glsl}/pbrtexture/pbrtexture.vert (100%) rename data/shaders/{ => glsl}/pbrtexture/pbrtexture.vert.spv (100%) rename data/shaders/{ => glsl}/pbrtexture/prefilterenvmap.frag (100%) rename data/shaders/{ => glsl}/pbrtexture/prefilterenvmap.frag.spv (100%) rename data/shaders/{ => glsl}/pbrtexture/skybox.frag (100%) rename data/shaders/{ => glsl}/pbrtexture/skybox.frag.spv (100%) rename data/shaders/{ => glsl}/pbrtexture/skybox.vert (100%) rename data/shaders/{ => glsl}/pbrtexture/skybox.vert.spv (100%) rename data/shaders/{ => glsl}/pipelines/generate-spriv.bat (100%) rename data/shaders/{ => glsl}/pipelines/phong.frag (100%) rename data/shaders/{ => glsl}/pipelines/phong.frag.spv (100%) rename data/shaders/{ => glsl}/pipelines/phong.vert (100%) rename data/shaders/{ => glsl}/pipelines/phong.vert.spv (100%) rename data/shaders/{ => glsl}/pipelines/toon.frag (100%) rename data/shaders/{ => glsl}/pipelines/toon.frag.spv (100%) rename data/shaders/{ => glsl}/pipelines/toon.vert (100%) rename data/shaders/{ => glsl}/pipelines/toon.vert.spv (100%) rename data/shaders/{ => glsl}/pipelines/wireframe.frag (100%) rename data/shaders/{ => glsl}/pipelines/wireframe.frag.spv (100%) rename data/shaders/{ => glsl}/pipelines/wireframe.vert (100%) rename data/shaders/{ => glsl}/pipelines/wireframe.vert.spv (100%) rename data/shaders/{ => glsl}/pipelinestatistics/scene.frag (100%) rename data/shaders/{ => glsl}/pipelinestatistics/scene.frag.spv (100%) rename data/shaders/{ => glsl}/pipelinestatistics/scene.tesc (100%) rename data/shaders/{ => glsl}/pipelinestatistics/scene.tesc.spv (100%) rename data/shaders/{ => glsl}/pipelinestatistics/scene.tese (100%) rename data/shaders/{ => glsl}/pipelinestatistics/scene.tese.spv (100%) rename data/shaders/{ => glsl}/pipelinestatistics/scene.vert (100%) rename data/shaders/{ => glsl}/pipelinestatistics/scene.vert.spv (100%) rename data/shaders/{ => glsl}/pushconstants/generate-spirv.bat (100%) rename data/shaders/{ => glsl}/pushconstants/lights.frag (100%) rename data/shaders/{ => glsl}/pushconstants/lights.frag.spv (100%) rename data/shaders/{ => glsl}/pushconstants/lights.vert (100%) rename data/shaders/{ => glsl}/pushconstants/lights.vert.spv (100%) rename data/shaders/{ => glsl}/pushdescriptors/cube.frag (100%) rename data/shaders/{ => glsl}/pushdescriptors/cube.frag.spv (100%) rename data/shaders/{ => glsl}/pushdescriptors/cube.vert (100%) rename data/shaders/{ => glsl}/pushdescriptors/cube.vert.spv (100%) rename data/shaders/{ => glsl}/radialblur/colorpass.frag (100%) rename data/shaders/{ => glsl}/radialblur/colorpass.frag.spv (100%) rename data/shaders/{ => glsl}/radialblur/colorpass.vert (100%) rename data/shaders/{ => glsl}/radialblur/colorpass.vert.spv (100%) rename data/shaders/{ => glsl}/radialblur/generate-spirv.bat (100%) rename data/shaders/{ => glsl}/radialblur/phongpass.frag (100%) rename data/shaders/{ => glsl}/radialblur/phongpass.frag.spv (100%) rename data/shaders/{ => glsl}/radialblur/phongpass.vert (100%) rename data/shaders/{ => glsl}/radialblur/phongpass.vert.spv (100%) rename data/shaders/{ => glsl}/radialblur/radialblur.frag (100%) rename data/shaders/{ => glsl}/radialblur/radialblur.frag.spv (100%) rename data/shaders/{ => glsl}/radialblur/radialblur.vert (100%) rename data/shaders/{ => glsl}/radialblur/radialblur.vert.spv (100%) rename data/shaders/{ => glsl}/renderheadless/triangle.frag (100%) rename data/shaders/{ => glsl}/renderheadless/triangle.frag.spv (100%) rename data/shaders/{ => glsl}/renderheadless/triangle.vert (100%) rename data/shaders/{ => glsl}/renderheadless/triangle.vert.spv (100%) rename data/shaders/{ => glsl}/scenerendering/generate-spirv.bat (100%) rename data/shaders/{ => glsl}/scenerendering/scene.frag (100%) rename data/shaders/{ => glsl}/scenerendering/scene.frag.spv (100%) rename data/shaders/{ => glsl}/scenerendering/scene.vert (100%) rename data/shaders/{ => glsl}/scenerendering/scene.vert.spv (100%) rename data/shaders/{ => glsl}/screenshot/mesh.frag (100%) rename data/shaders/{ => glsl}/screenshot/mesh.frag.spv (100%) rename data/shaders/{ => glsl}/screenshot/mesh.vert (100%) rename data/shaders/{ => glsl}/screenshot/mesh.vert.spv (100%) rename data/shaders/{ => glsl}/shadowmapomni/cubemapdisplay.frag (100%) rename data/shaders/{ => glsl}/shadowmapomni/cubemapdisplay.frag.spv (100%) rename data/shaders/{ => glsl}/shadowmapomni/cubemapdisplay.vert (100%) rename data/shaders/{ => glsl}/shadowmapomni/cubemapdisplay.vert.spv (100%) rename data/shaders/{ => glsl}/shadowmapomni/generate-spirv.bat (100%) rename data/shaders/{ => glsl}/shadowmapomni/offscreen.frag (100%) rename data/shaders/{ => glsl}/shadowmapomni/offscreen.frag.spv (100%) rename data/shaders/{ => glsl}/shadowmapomni/offscreen.vert (100%) rename data/shaders/{ => glsl}/shadowmapomni/offscreen.vert.spv (100%) rename data/shaders/{ => glsl}/shadowmapomni/scene.frag (100%) rename data/shaders/{ => glsl}/shadowmapomni/scene.frag.spv (100%) rename data/shaders/{ => glsl}/shadowmapomni/scene.vert (100%) rename data/shaders/{ => glsl}/shadowmapomni/scene.vert.spv (100%) rename data/shaders/{ => glsl}/shadowmapping/generate-spirv.bat (100%) rename data/shaders/{ => glsl}/shadowmapping/offscreen.frag (100%) rename data/shaders/{ => glsl}/shadowmapping/offscreen.frag.spv (100%) rename data/shaders/{ => glsl}/shadowmapping/offscreen.vert (100%) rename data/shaders/{ => glsl}/shadowmapping/offscreen.vert.spv (100%) rename data/shaders/{ => glsl}/shadowmapping/quad.frag (100%) rename data/shaders/{ => glsl}/shadowmapping/quad.frag.spv (100%) rename data/shaders/{ => glsl}/shadowmapping/quad.vert (100%) rename data/shaders/{ => glsl}/shadowmapping/quad.vert.spv (100%) rename data/shaders/{ => glsl}/shadowmapping/scene.frag (100%) rename data/shaders/{ => glsl}/shadowmapping/scene.frag.spv (100%) rename data/shaders/{ => glsl}/shadowmapping/scene.vert (100%) rename data/shaders/{ => glsl}/shadowmapping/scene.vert.spv (100%) rename data/shaders/{ => glsl}/shadowmappingcascade/debugshadowmap.frag (100%) rename data/shaders/{ => glsl}/shadowmappingcascade/debugshadowmap.frag.spv (100%) rename data/shaders/{ => glsl}/shadowmappingcascade/debugshadowmap.vert (100%) rename data/shaders/{ => glsl}/shadowmappingcascade/debugshadowmap.vert.spv (100%) rename data/shaders/{ => glsl}/shadowmappingcascade/depthpass.frag (100%) rename data/shaders/{ => glsl}/shadowmappingcascade/depthpass.frag.spv (100%) rename data/shaders/{ => glsl}/shadowmappingcascade/depthpass.vert (100%) rename data/shaders/{ => glsl}/shadowmappingcascade/depthpass.vert.spv (100%) rename data/shaders/{ => glsl}/shadowmappingcascade/scene.frag (100%) rename data/shaders/{ => glsl}/shadowmappingcascade/scene.frag.spv (100%) rename data/shaders/{ => glsl}/shadowmappingcascade/scene.vert (100%) rename data/shaders/{ => glsl}/shadowmappingcascade/scene.vert.spv (100%) rename data/shaders/{ => glsl}/skeletalanimation/mesh.frag (100%) rename data/shaders/{ => glsl}/skeletalanimation/mesh.frag.spv (100%) rename data/shaders/{ => glsl}/skeletalanimation/mesh.vert (100%) rename data/shaders/{ => glsl}/skeletalanimation/mesh.vert.spv (100%) rename data/shaders/{ => glsl}/skeletalanimation/texture.frag (100%) rename data/shaders/{ => glsl}/skeletalanimation/texture.frag.spv (100%) rename data/shaders/{ => glsl}/skeletalanimation/texture.vert (100%) rename data/shaders/{ => glsl}/skeletalanimation/texture.vert.spv (100%) rename data/shaders/{ => glsl}/specializationconstants/uber.frag (100%) rename data/shaders/{ => glsl}/specializationconstants/uber.frag.spv (100%) rename data/shaders/{ => glsl}/specializationconstants/uber.vert (100%) rename data/shaders/{ => glsl}/specializationconstants/uber.vert.spv (100%) rename data/shaders/{ => glsl}/sphericalenvmapping/generate-spirv.bat (100%) rename data/shaders/{ => glsl}/sphericalenvmapping/sem.frag (100%) rename data/shaders/{ => glsl}/sphericalenvmapping/sem.frag.spv (100%) rename data/shaders/{ => glsl}/sphericalenvmapping/sem.vert (100%) rename data/shaders/{ => glsl}/sphericalenvmapping/sem.vert.spv (100%) rename data/shaders/{ => glsl}/ssao/blur.frag (100%) rename data/shaders/{ => glsl}/ssao/blur.frag.spv (100%) rename data/shaders/{ => glsl}/ssao/composition.frag (100%) rename data/shaders/{ => glsl}/ssao/composition.frag.spv (100%) rename data/shaders/{ => glsl}/ssao/fullscreen.vert (100%) rename data/shaders/{ => glsl}/ssao/fullscreen.vert.spv (100%) rename data/shaders/{ => glsl}/ssao/gbuffer.frag (100%) rename data/shaders/{ => glsl}/ssao/gbuffer.frag.spv (100%) rename data/shaders/{ => glsl}/ssao/gbuffer.vert (100%) rename data/shaders/{ => glsl}/ssao/gbuffer.vert.spv (100%) rename data/shaders/{ => glsl}/ssao/ssao.frag (100%) rename data/shaders/{ => glsl}/ssao/ssao.frag.spv (100%) rename data/shaders/{ => glsl}/stencilbuffer/outline.frag (100%) rename data/shaders/{ => glsl}/stencilbuffer/outline.frag.spv (100%) rename data/shaders/{ => glsl}/stencilbuffer/outline.vert (100%) rename data/shaders/{ => glsl}/stencilbuffer/outline.vert.spv (100%) rename data/shaders/{ => glsl}/stencilbuffer/toon.frag (100%) rename data/shaders/{ => glsl}/stencilbuffer/toon.frag.spv (100%) rename data/shaders/{ => glsl}/stencilbuffer/toon.vert (100%) rename data/shaders/{ => glsl}/stencilbuffer/toon.vert.spv (100%) rename data/shaders/{ => glsl}/subpasses/composition.frag (100%) rename data/shaders/{ => glsl}/subpasses/composition.frag.spv (100%) rename data/shaders/{ => glsl}/subpasses/composition.vert (100%) rename data/shaders/{ => glsl}/subpasses/composition.vert.spv (100%) rename data/shaders/{ => glsl}/subpasses/gbuffer.frag (100%) rename data/shaders/{ => glsl}/subpasses/gbuffer.frag.spv (100%) rename data/shaders/{ => glsl}/subpasses/gbuffer.vert (100%) rename data/shaders/{ => glsl}/subpasses/gbuffer.vert.spv (100%) rename data/shaders/{ => glsl}/subpasses/transparent.frag (100%) rename data/shaders/{ => glsl}/subpasses/transparent.frag.spv (100%) rename data/shaders/{ => glsl}/subpasses/transparent.vert (100%) rename data/shaders/{ => glsl}/subpasses/transparent.vert.spv (100%) rename data/shaders/{ => glsl}/terraintessellation/generate-spirv.bat (100%) rename data/shaders/{ => glsl}/terraintessellation/skysphere.frag (100%) rename data/shaders/{ => glsl}/terraintessellation/skysphere.frag.spv (100%) rename data/shaders/{ => glsl}/terraintessellation/skysphere.vert (100%) rename data/shaders/{ => glsl}/terraintessellation/skysphere.vert.spv (100%) rename data/shaders/{ => glsl}/terraintessellation/terrain.frag (100%) rename data/shaders/{ => glsl}/terraintessellation/terrain.frag.spv (100%) rename data/shaders/{ => glsl}/terraintessellation/terrain.tesc (100%) rename data/shaders/{ => glsl}/terraintessellation/terrain.tesc.spv (100%) rename data/shaders/{ => glsl}/terraintessellation/terrain.tese (100%) rename data/shaders/{ => glsl}/terraintessellation/terrain.tese.spv (100%) rename data/shaders/{ => glsl}/terraintessellation/terrain.vert (100%) rename data/shaders/{ => glsl}/terraintessellation/terrain.vert.spv (100%) rename data/shaders/{ => glsl}/tessellation/base.frag (100%) rename data/shaders/{ => glsl}/tessellation/base.frag.spv (100%) rename data/shaders/{ => glsl}/tessellation/base.vert (100%) rename data/shaders/{ => glsl}/tessellation/base.vert.spv (100%) rename data/shaders/{ => glsl}/tessellation/generate-spriv.bat (100%) rename data/shaders/{ => glsl}/tessellation/passthrough.tesc (100%) rename data/shaders/{ => glsl}/tessellation/passthrough.tesc.spv (100%) rename data/shaders/{ => glsl}/tessellation/passthrough.tese (100%) rename data/shaders/{ => glsl}/tessellation/passthrough.tese.spv (100%) rename data/shaders/{ => glsl}/tessellation/pntriangles.tesc (100%) rename data/shaders/{ => glsl}/tessellation/pntriangles.tesc.spv (100%) rename data/shaders/{ => glsl}/tessellation/pntriangles.tese (100%) rename data/shaders/{ => glsl}/tessellation/pntriangles.tese.spv (100%) rename data/shaders/{ => glsl}/textoverlay/mesh.frag (100%) rename data/shaders/{ => glsl}/textoverlay/mesh.frag.spv (100%) rename data/shaders/{ => glsl}/textoverlay/mesh.vert (100%) rename data/shaders/{ => glsl}/textoverlay/mesh.vert.spv (100%) rename data/shaders/{ => glsl}/textoverlay/text.frag (100%) rename data/shaders/{ => glsl}/textoverlay/text.frag.spv (100%) rename data/shaders/{ => glsl}/textoverlay/text.vert (100%) rename data/shaders/{ => glsl}/textoverlay/text.vert.spv (100%) rename data/shaders/{ => glsl}/texture/generate-spirv.bat (100%) rename data/shaders/{ => glsl}/texture/texture.frag (100%) rename data/shaders/{ => glsl}/texture/texture.frag.spv (100%) rename data/shaders/{ => glsl}/texture/texture.vert (100%) rename data/shaders/{ => glsl}/texture/texture.vert.spv (100%) rename data/shaders/{ => glsl}/texture3d/texture3d.frag (100%) rename data/shaders/{ => glsl}/texture3d/texture3d.frag.spv (100%) rename data/shaders/{ => glsl}/texture3d/texture3d.vert (100%) rename data/shaders/{ => glsl}/texture3d/texture3d.vert.spv (100%) rename data/shaders/{ => glsl}/texturearray/generate-spirv.bat (100%) rename data/shaders/{ => glsl}/texturearray/instancing.frag (100%) rename data/shaders/{ => glsl}/texturearray/instancing.frag.spv (100%) rename data/shaders/{ => glsl}/texturearray/instancing.vert (100%) rename data/shaders/{ => glsl}/texturearray/instancing.vert.spv (100%) rename data/shaders/{ => glsl}/texturecubemap/reflect.frag (100%) rename data/shaders/{ => glsl}/texturecubemap/reflect.frag.spv (100%) rename data/shaders/{ => glsl}/texturecubemap/reflect.vert (100%) rename data/shaders/{ => glsl}/texturecubemap/reflect.vert.spv (100%) rename data/shaders/{ => glsl}/texturecubemap/skybox.frag (100%) rename data/shaders/{ => glsl}/texturecubemap/skybox.frag.spv (100%) rename data/shaders/{ => glsl}/texturecubemap/skybox.vert (100%) rename data/shaders/{ => glsl}/texturecubemap/skybox.vert.spv (100%) rename data/shaders/{ => glsl}/texturemipmapgen/texture.frag (100%) rename data/shaders/{ => glsl}/texturemipmapgen/texture.frag.spv (100%) rename data/shaders/{ => glsl}/texturemipmapgen/texture.vert (100%) rename data/shaders/{ => glsl}/texturemipmapgen/texture.vert.spv (100%) rename data/shaders/{ => glsl}/texturesparseresidency/sparseresidency.frag (100%) rename data/shaders/{ => glsl}/texturesparseresidency/sparseresidency.frag.spv (100%) rename data/shaders/{ => glsl}/texturesparseresidency/sparseresidency.vert (100%) rename data/shaders/{ => glsl}/texturesparseresidency/sparseresidency.vert.spv (100%) rename data/shaders/{ => glsl}/triangle/triangle.frag (100%) rename data/shaders/{ => glsl}/triangle/triangle.frag.spv (100%) rename data/shaders/{ => glsl}/triangle/triangle.vert (100%) rename data/shaders/{ => glsl}/triangle/triangle.vert.spv (100%) rename data/shaders/{ => glsl}/viewportarray/multiview.geom (100%) rename data/shaders/{ => glsl}/viewportarray/multiview.geom.spv (100%) rename data/shaders/{ => glsl}/viewportarray/scene.frag (100%) rename data/shaders/{ => glsl}/viewportarray/scene.frag.spv (100%) rename data/shaders/{ => glsl}/viewportarray/scene.vert (100%) rename data/shaders/{ => glsl}/viewportarray/scene.vert.spv (100%) rename data/shaders/{ => glsl}/vulkanscene/generate-spriv.bat (100%) rename data/shaders/{ => glsl}/vulkanscene/logo.frag (100%) rename data/shaders/{ => glsl}/vulkanscene/logo.frag.spv (100%) rename data/shaders/{ => glsl}/vulkanscene/logo.vert (100%) rename data/shaders/{ => glsl}/vulkanscene/logo.vert.spv (100%) rename data/shaders/{ => glsl}/vulkanscene/mesh.frag (100%) rename data/shaders/{ => glsl}/vulkanscene/mesh.frag.spv (100%) rename data/shaders/{ => glsl}/vulkanscene/mesh.vert (100%) rename data/shaders/{ => glsl}/vulkanscene/mesh.vert.spv (100%) rename data/shaders/{ => glsl}/vulkanscene/skybox.frag (100%) rename data/shaders/{ => glsl}/vulkanscene/skybox.frag.spv (100%) rename data/shaders/{ => glsl}/vulkanscene/skybox.vert (100%) rename data/shaders/{ => glsl}/vulkanscene/skybox.vert.spv (100%) rename data/{ => shaders}/hlsl/README.md (93%) rename data/{ => shaders}/hlsl/base/textoverlay.frag (100%) rename data/{ => shaders}/hlsl/base/textoverlay.vert (100%) rename data/{ => shaders}/hlsl/base/uioverlay.frag (100%) rename data/{ => shaders}/hlsl/base/uioverlay.vert (100%) rename data/{ => shaders}/hlsl/bloom/colorpass.frag (100%) rename data/{ => shaders}/hlsl/bloom/colorpass.vert (100%) rename data/{ => shaders}/hlsl/bloom/gaussblur.frag (100%) rename data/{ => shaders}/hlsl/bloom/gaussblur.vert (100%) rename data/{ => shaders}/hlsl/bloom/phongpass.frag (100%) rename data/{ => shaders}/hlsl/bloom/phongpass.vert (100%) rename data/{ => shaders}/hlsl/bloom/skybox.frag (100%) rename data/{ => shaders}/hlsl/bloom/skybox.vert (100%) rename data/{ => shaders}/hlsl/compile.py (97%) rename data/{ => shaders}/hlsl/computecloth/cloth.comp (100%) rename data/{ => shaders}/hlsl/computecloth/cloth.frag (100%) rename data/{ => shaders}/hlsl/computecloth/cloth.vert (100%) rename data/{ => shaders}/hlsl/computecloth/sphere.frag (100%) rename data/{ => shaders}/hlsl/computecloth/sphere.vert (100%) rename data/{ => shaders}/hlsl/computecullandlod/cull.comp (100%) rename data/{ => shaders}/hlsl/computecullandlod/indirectdraw.frag (100%) rename data/{ => shaders}/hlsl/computecullandlod/indirectdraw.vert (100%) rename data/{ => shaders}/hlsl/computeheadless/headless.comp (100%) rename data/{ => shaders}/hlsl/computenbody/particle.frag (100%) rename data/{ => shaders}/hlsl/computenbody/particle.vert (100%) rename data/{ => shaders}/hlsl/computenbody/particle_calculate.comp (100%) rename data/{ => shaders}/hlsl/computenbody/particle_integrate.comp (100%) rename data/{ => shaders}/hlsl/computeparticles/particle.comp (100%) rename data/{ => shaders}/hlsl/computeparticles/particle.frag (100%) rename data/{ => shaders}/hlsl/computeparticles/particle.vert (100%) rename data/{ => shaders}/hlsl/computeraytracing/raytracing.comp (100%) rename data/{ => shaders}/hlsl/computeraytracing/texture.frag (100%) rename data/{ => shaders}/hlsl/computeraytracing/texture.vert (100%) rename data/{ => shaders}/hlsl/computeshader/edgedetect.comp (100%) rename data/{ => shaders}/hlsl/computeshader/emboss.comp (100%) rename data/{ => shaders}/hlsl/computeshader/sharpen.comp (100%) rename data/{ => shaders}/hlsl/computeshader/texture.frag (100%) rename data/{ => shaders}/hlsl/computeshader/texture.vert (100%) rename data/{ => shaders}/hlsl/conditionalrender/model.frag (100%) rename data/{ => shaders}/hlsl/conditionalrender/model.vert (100%) rename data/{ => shaders}/hlsl/conservativeraster/fullscreen.frag (100%) rename data/{ => shaders}/hlsl/conservativeraster/fullscreen.vert (100%) rename data/{ => shaders}/hlsl/conservativeraster/triangle.frag (100%) rename data/{ => shaders}/hlsl/conservativeraster/triangle.vert (100%) rename data/{ => shaders}/hlsl/conservativeraster/triangleoverlay.frag (100%) rename data/{ => shaders}/hlsl/debugmarker/colorpass.frag (100%) rename data/{ => shaders}/hlsl/debugmarker/colorpass.vert (100%) rename data/{ => shaders}/hlsl/debugmarker/postprocess.frag (100%) rename data/{ => shaders}/hlsl/debugmarker/postprocess.vert (100%) rename data/{ => shaders}/hlsl/debugmarker/toon.frag (100%) rename data/{ => shaders}/hlsl/debugmarker/toon.vert (100%) rename data/{ => shaders}/hlsl/deferred/debug.frag (100%) rename data/{ => shaders}/hlsl/deferred/debug.vert (100%) rename data/{ => shaders}/hlsl/deferred/deferred.frag (100%) rename data/{ => shaders}/hlsl/deferred/deferred.vert (100%) rename data/{ => shaders}/hlsl/deferred/mrt.frag (100%) rename data/{ => shaders}/hlsl/deferred/mrt.vert (100%) rename data/{ => shaders}/hlsl/deferredmultisampling/debug.frag (100%) rename data/{ => shaders}/hlsl/deferredmultisampling/debug.vert (100%) rename data/{ => shaders}/hlsl/deferredmultisampling/deferred.frag (100%) rename data/{ => shaders}/hlsl/deferredmultisampling/deferred.vert (100%) rename data/{ => shaders}/hlsl/deferredmultisampling/mrt.frag (100%) rename data/{ => shaders}/hlsl/deferredmultisampling/mrt.vert (100%) rename data/{ => shaders}/hlsl/deferredshadows/debug.frag (100%) rename data/{ => shaders}/hlsl/deferredshadows/debug.vert (100%) rename data/{ => shaders}/hlsl/deferredshadows/deferred.frag (100%) rename data/{ => shaders}/hlsl/deferredshadows/deferred.vert (100%) rename data/{ => shaders}/hlsl/deferredshadows/mrt.frag (100%) rename data/{ => shaders}/hlsl/deferredshadows/mrt.vert (100%) rename data/{ => shaders}/hlsl/deferredshadows/shadow.geom (100%) rename data/{ => shaders}/hlsl/deferredshadows/shadow.vert (100%) rename data/{ => shaders}/hlsl/descriptorsets/cube.frag (100%) rename data/{ => shaders}/hlsl/descriptorsets/cube.vert (100%) rename data/{ => shaders}/hlsl/displacement/base.frag (100%) rename data/{ => shaders}/hlsl/displacement/base.vert (100%) rename data/{ => shaders}/hlsl/displacement/displacement.tesc (100%) rename data/{ => shaders}/hlsl/displacement/displacement.tese (100%) rename data/{ => shaders}/hlsl/distancefieldfonts/bitmap.frag (100%) rename data/{ => shaders}/hlsl/distancefieldfonts/bitmap.vert (100%) rename data/{ => shaders}/hlsl/distancefieldfonts/sdf.frag (100%) rename data/{ => shaders}/hlsl/distancefieldfonts/sdf.vert (100%) rename data/{ => shaders}/hlsl/dynamicuniformbuffer/base.frag (100%) rename data/{ => shaders}/hlsl/dynamicuniformbuffer/base.vert (100%) rename data/{ => shaders}/hlsl/gears/gears.frag (100%) rename data/{ => shaders}/hlsl/gears/gears.vert (100%) rename data/{ => shaders}/hlsl/geometryshader/base.frag (100%) rename data/{ => shaders}/hlsl/geometryshader/base.vert (100%) rename data/{ => shaders}/hlsl/geometryshader/mesh.frag (100%) rename data/{ => shaders}/hlsl/geometryshader/mesh.vert (100%) rename data/{ => shaders}/hlsl/geometryshader/normaldebug.geom (100%) rename data/{ => shaders}/hlsl/gltfscene/mesh.frag (100%) rename data/{ => shaders}/hlsl/gltfscene/mesh.vert (100%) rename data/{ => shaders}/hlsl/hdr/bloom.frag (100%) rename data/{ => shaders}/hlsl/hdr/bloom.vert (100%) rename data/{ => shaders}/hlsl/hdr/composition.frag (100%) rename data/{ => shaders}/hlsl/hdr/composition.vert (100%) rename data/{ => shaders}/hlsl/hdr/gbuffer.frag (100%) rename data/{ => shaders}/hlsl/hdr/gbuffer.vert (100%) rename data/{ => shaders}/hlsl/imgui/scene.frag (100%) rename data/{ => shaders}/hlsl/imgui/scene.vert (100%) rename data/{ => shaders}/hlsl/imgui/ui.frag (100%) rename data/{ => shaders}/hlsl/imgui/ui.vert (100%) rename data/{ => shaders}/hlsl/indirectdraw/ground.frag (100%) rename data/{ => shaders}/hlsl/indirectdraw/ground.vert (100%) rename data/{ => shaders}/hlsl/indirectdraw/indirectdraw.frag (100%) rename data/{ => shaders}/hlsl/indirectdraw/indirectdraw.vert (100%) rename data/{ => shaders}/hlsl/indirectdraw/skysphere.frag (100%) rename data/{ => shaders}/hlsl/indirectdraw/skysphere.vert (100%) rename data/{ => shaders}/hlsl/inlineuniformblocks/pbr.frag (100%) rename data/{ => shaders}/hlsl/inlineuniformblocks/pbr.vert (100%) rename data/{ => shaders}/hlsl/inputattachments/attachmentread.frag (100%) rename data/{ => shaders}/hlsl/inputattachments/attachmentread.vert (100%) rename data/{ => shaders}/hlsl/inputattachments/attachmentwrite.frag (100%) rename data/{ => shaders}/hlsl/inputattachments/attachmentwrite.vert (100%) rename data/{ => shaders}/hlsl/instancing/instancing.frag (100%) rename data/{ => shaders}/hlsl/instancing/instancing.vert (100%) rename data/{ => shaders}/hlsl/instancing/planet.frag (100%) rename data/{ => shaders}/hlsl/instancing/planet.vert (100%) rename data/{ => shaders}/hlsl/instancing/starfield.frag (100%) rename data/{ => shaders}/hlsl/instancing/starfield.vert (100%) rename data/{ => shaders}/hlsl/mesh/mesh.frag (100%) rename data/{ => shaders}/hlsl/mesh/mesh.vert (100%) rename data/{ => shaders}/hlsl/multisampling/scene.frag (100%) rename data/{ => shaders}/hlsl/multisampling/scene.vert (100%) rename data/{ => shaders}/hlsl/multithreading/phong.frag (100%) rename data/{ => shaders}/hlsl/multithreading/phong.vert (100%) rename data/{ => shaders}/hlsl/multithreading/starsphere.frag (100%) rename data/{ => shaders}/hlsl/multithreading/starsphere.vert (100%) rename data/{ => shaders}/hlsl/multiview/multiview.frag (100%) rename data/{ => shaders}/hlsl/multiview/multiview.vert (100%) rename data/{ => shaders}/hlsl/multiview/viewdisplay.frag (100%) rename data/{ => shaders}/hlsl/multiview/viewdisplay.vert (100%) rename data/{ => shaders}/hlsl/negativeviewportheight/quad.frag (100%) rename data/{ => shaders}/hlsl/negativeviewportheight/quad.vert (100%) rename data/{ => shaders}/hlsl/nv_ray_tracing_basic/closesthit.rchit (100%) rename data/{ => shaders}/hlsl/nv_ray_tracing_basic/miss.rmiss (100%) rename data/{ => shaders}/hlsl/nv_ray_tracing_basic/raygen.rgen (100%) rename data/{ => shaders}/hlsl/nv_ray_tracing_reflections/closesthit.rchit (100%) rename data/{ => shaders}/hlsl/nv_ray_tracing_reflections/miss.rmiss (100%) rename data/{ => shaders}/hlsl/nv_ray_tracing_reflections/raygen.rgen (100%) rename data/{ => shaders}/hlsl/nv_ray_tracing_shadows/closesthit.rchit (100%) rename data/{ => shaders}/hlsl/nv_ray_tracing_shadows/miss.rmiss (100%) rename data/{ => shaders}/hlsl/nv_ray_tracing_shadows/raygen.rgen (100%) rename data/{ => shaders}/hlsl/nv_ray_tracing_shadows/shadow.rmiss (100%) rename data/{ => shaders}/hlsl/occlusionquery/mesh.frag (100%) rename data/{ => shaders}/hlsl/occlusionquery/mesh.vert (100%) rename data/{ => shaders}/hlsl/occlusionquery/occluder.frag (100%) rename data/{ => shaders}/hlsl/occlusionquery/occluder.vert (100%) rename data/{ => shaders}/hlsl/occlusionquery/simple.frag (100%) rename data/{ => shaders}/hlsl/occlusionquery/simple.vert (100%) rename data/{ => shaders}/hlsl/offscreen/mirror.frag (100%) rename data/{ => shaders}/hlsl/offscreen/mirror.vert (100%) rename data/{ => shaders}/hlsl/offscreen/phong.frag (100%) rename data/{ => shaders}/hlsl/offscreen/phong.vert (100%) rename data/{ => shaders}/hlsl/offscreen/quad.frag (100%) rename data/{ => shaders}/hlsl/offscreen/quad.vert (100%) rename data/{ => shaders}/hlsl/parallaxmapping/parallax.frag (100%) rename data/{ => shaders}/hlsl/parallaxmapping/parallax.vert (100%) rename data/{ => shaders}/hlsl/particlefire/normalmap.frag (100%) rename data/{ => shaders}/hlsl/particlefire/normalmap.vert (100%) rename data/{ => shaders}/hlsl/particlefire/particle.frag (100%) rename data/{ => shaders}/hlsl/particlefire/particle.vert (100%) rename data/{ => shaders}/hlsl/pbrbasic/pbr.frag (100%) rename data/{ => shaders}/hlsl/pbrbasic/pbr.vert (100%) rename data/{ => shaders}/hlsl/pbribl/filtercube.vert (100%) rename data/{ => shaders}/hlsl/pbribl/genbrdflut.frag (100%) rename data/{ => shaders}/hlsl/pbribl/genbrdflut.vert (100%) rename data/{ => shaders}/hlsl/pbribl/irradiancecube.frag (100%) rename data/{ => shaders}/hlsl/pbribl/pbribl.frag (100%) rename data/{ => shaders}/hlsl/pbribl/pbribl.vert (100%) rename data/{ => shaders}/hlsl/pbribl/prefilterenvmap.frag (100%) rename data/{ => shaders}/hlsl/pbribl/skybox.frag (100%) rename data/{ => shaders}/hlsl/pbribl/skybox.vert (100%) rename data/{ => shaders}/hlsl/pbrtexture/filtercube.vert (100%) rename data/{ => shaders}/hlsl/pbrtexture/genbrdflut.frag (100%) rename data/{ => shaders}/hlsl/pbrtexture/genbrdflut.vert (100%) rename data/{ => shaders}/hlsl/pbrtexture/irradiancecube.frag (100%) rename data/{ => shaders}/hlsl/pbrtexture/pbrtexture.frag (100%) rename data/{ => shaders}/hlsl/pbrtexture/pbrtexture.vert (100%) rename data/{ => shaders}/hlsl/pbrtexture/prefilterenvmap.frag (100%) rename data/{ => shaders}/hlsl/pbrtexture/skybox.frag (100%) rename data/{ => shaders}/hlsl/pbrtexture/skybox.vert (100%) rename data/{ => shaders}/hlsl/pipelines/phong.frag (100%) rename data/{ => shaders}/hlsl/pipelines/phong.vert (100%) rename data/{ => shaders}/hlsl/pipelines/toon.frag (100%) rename data/{ => shaders}/hlsl/pipelines/toon.vert (100%) rename data/{ => shaders}/hlsl/pipelines/wireframe.frag (100%) rename data/{ => shaders}/hlsl/pipelines/wireframe.vert (100%) rename data/{ => shaders}/hlsl/pipelinestatistics/scene.frag (100%) rename data/{ => shaders}/hlsl/pipelinestatistics/scene.tesc (100%) rename data/{ => shaders}/hlsl/pipelinestatistics/scene.tese (100%) rename data/{ => shaders}/hlsl/pipelinestatistics/scene.vert (100%) rename data/{ => shaders}/hlsl/pushconstants/lights.frag (100%) rename data/{ => shaders}/hlsl/pushconstants/lights.vert (100%) rename data/{ => shaders}/hlsl/pushdescriptors/cube.frag (100%) rename data/{ => shaders}/hlsl/pushdescriptors/cube.vert (100%) rename data/{ => shaders}/hlsl/radialblur/colorpass.frag (100%) rename data/{ => shaders}/hlsl/radialblur/colorpass.vert (100%) rename data/{ => shaders}/hlsl/radialblur/phongpass.frag (100%) rename data/{ => shaders}/hlsl/radialblur/phongpass.vert (100%) rename data/{ => shaders}/hlsl/radialblur/radialblur.frag (100%) rename data/{ => shaders}/hlsl/radialblur/radialblur.vert (100%) rename data/{ => shaders}/hlsl/renderheadless/triangle.frag (100%) rename data/{ => shaders}/hlsl/renderheadless/triangle.vert (100%) rename data/{ => shaders}/hlsl/scenerendering/scene.frag (100%) rename data/{ => shaders}/hlsl/scenerendering/scene.vert (100%) rename data/{ => shaders}/hlsl/screenshot/mesh.frag (100%) rename data/{ => shaders}/hlsl/screenshot/mesh.vert (100%) rename data/{ => shaders}/hlsl/shadowmapomni/cubemapdisplay.frag (100%) rename data/{ => shaders}/hlsl/shadowmapomni/cubemapdisplay.vert (100%) rename data/{ => shaders}/hlsl/shadowmapomni/offscreen.frag (100%) rename data/{ => shaders}/hlsl/shadowmapomni/offscreen.vert (100%) rename data/{ => shaders}/hlsl/shadowmapomni/scene.frag (100%) rename data/{ => shaders}/hlsl/shadowmapomni/scene.vert (100%) rename data/{ => shaders}/hlsl/shadowmapping/offscreen.frag (100%) rename data/{ => shaders}/hlsl/shadowmapping/offscreen.vert (100%) rename data/{ => shaders}/hlsl/shadowmapping/quad.frag (100%) rename data/{ => shaders}/hlsl/shadowmapping/quad.vert (100%) rename data/{ => shaders}/hlsl/shadowmapping/scene.frag (100%) rename data/{ => shaders}/hlsl/shadowmapping/scene.vert (100%) rename data/{ => shaders}/hlsl/shadowmappingcascade/debugshadowmap.frag (100%) rename data/{ => shaders}/hlsl/shadowmappingcascade/debugshadowmap.vert (100%) rename data/{ => shaders}/hlsl/shadowmappingcascade/depthpass.frag (100%) rename data/{ => shaders}/hlsl/shadowmappingcascade/depthpass.vert (100%) rename data/{ => shaders}/hlsl/shadowmappingcascade/scene.frag (100%) rename data/{ => shaders}/hlsl/shadowmappingcascade/scene.vert (100%) rename data/{ => shaders}/hlsl/skeletalanimation/mesh.frag (100%) rename data/{ => shaders}/hlsl/skeletalanimation/mesh.vert (100%) rename data/{ => shaders}/hlsl/skeletalanimation/texture.frag (100%) rename data/{ => shaders}/hlsl/skeletalanimation/texture.vert (100%) rename data/{ => shaders}/hlsl/specializationconstants/uber.frag (100%) rename data/{ => shaders}/hlsl/specializationconstants/uber.vert (100%) rename data/{ => shaders}/hlsl/sphericalenvmapping/sem.frag (100%) rename data/{ => shaders}/hlsl/sphericalenvmapping/sem.vert (100%) rename data/{ => shaders}/hlsl/ssao/blur.frag (100%) rename data/{ => shaders}/hlsl/ssao/composition.frag (100%) rename data/{ => shaders}/hlsl/ssao/fullscreen.vert (100%) rename data/{ => shaders}/hlsl/ssao/gbuffer.frag (100%) rename data/{ => shaders}/hlsl/ssao/gbuffer.vert (100%) rename data/{ => shaders}/hlsl/ssao/ssao.frag (100%) rename data/{ => shaders}/hlsl/stencilbuffer/outline.frag (100%) rename data/{ => shaders}/hlsl/stencilbuffer/outline.vert (100%) rename data/{ => shaders}/hlsl/stencilbuffer/toon.frag (100%) rename data/{ => shaders}/hlsl/stencilbuffer/toon.vert (100%) rename data/{ => shaders}/hlsl/subpasses/composition.frag (100%) rename data/{ => shaders}/hlsl/subpasses/composition.vert (100%) rename data/{ => shaders}/hlsl/subpasses/gbuffer.frag (100%) rename data/{ => shaders}/hlsl/subpasses/gbuffer.vert (100%) rename data/{ => shaders}/hlsl/subpasses/transparent.frag (100%) rename data/{ => shaders}/hlsl/subpasses/transparent.vert (100%) rename data/{ => shaders}/hlsl/terraintessellation/skysphere.frag (100%) rename data/{ => shaders}/hlsl/terraintessellation/skysphere.vert (100%) rename data/{ => shaders}/hlsl/terraintessellation/terrain.frag (100%) rename data/{ => shaders}/hlsl/terraintessellation/terrain.tesc (100%) rename data/{ => shaders}/hlsl/terraintessellation/terrain.tese (100%) rename data/{ => shaders}/hlsl/terraintessellation/terrain.vert (100%) rename data/{ => shaders}/hlsl/tessellation/base.frag (100%) rename data/{ => shaders}/hlsl/tessellation/base.vert (100%) rename data/{ => shaders}/hlsl/tessellation/passthrough.tesc (100%) rename data/{ => shaders}/hlsl/tessellation/passthrough.tese (100%) rename data/{ => shaders}/hlsl/tessellation/pntriangles.tesc (100%) rename data/{ => shaders}/hlsl/tessellation/pntriangles.tese (100%) rename data/{ => shaders}/hlsl/textoverlay/mesh.frag (100%) rename data/{ => shaders}/hlsl/textoverlay/mesh.vert (100%) rename data/{ => shaders}/hlsl/textoverlay/text.frag (100%) rename data/{ => shaders}/hlsl/textoverlay/text.vert (100%) rename data/{ => shaders}/hlsl/texture/texture.frag (100%) rename data/{ => shaders}/hlsl/texture/texture.vert (100%) rename data/{ => shaders}/hlsl/texture3d/texture3d.frag (100%) rename data/{ => shaders}/hlsl/texture3d/texture3d.vert (100%) rename data/{ => shaders}/hlsl/texturearray/instancing.frag (100%) rename data/{ => shaders}/hlsl/texturearray/instancing.vert (100%) rename data/{ => shaders}/hlsl/texturecubemap/reflect.frag (100%) rename data/{ => shaders}/hlsl/texturecubemap/reflect.vert (100%) rename data/{ => shaders}/hlsl/texturecubemap/skybox.frag (100%) rename data/{ => shaders}/hlsl/texturecubemap/skybox.vert (100%) rename data/{ => shaders}/hlsl/texturemipmapgen/texture.frag (100%) rename data/{ => shaders}/hlsl/texturemipmapgen/texture.vert (100%) rename data/{ => shaders}/hlsl/texturesparseresidency/sparseresidency.frag (100%) rename data/{ => shaders}/hlsl/texturesparseresidency/sparseresidency.vert (100%) rename data/{ => shaders}/hlsl/triangle/triangle.frag (100%) rename data/{ => shaders}/hlsl/triangle/triangle.vert (100%) rename data/{ => shaders}/hlsl/viewportarray/multiview.geom (100%) rename data/{ => shaders}/hlsl/viewportarray/scene.frag (100%) rename data/{ => shaders}/hlsl/viewportarray/scene.vert (100%) rename data/{ => shaders}/hlsl/vulkanscene/logo.frag (100%) rename data/{ => shaders}/hlsl/vulkanscene/logo.vert (100%) rename data/{ => shaders}/hlsl/vulkanscene/mesh.frag (100%) rename data/{ => shaders}/hlsl/vulkanscene/mesh.vert (100%) rename data/{ => shaders}/hlsl/vulkanscene/skybox.frag (100%) rename data/{ => shaders}/hlsl/vulkanscene/skybox.vert (100%) diff --git a/README.md b/README.md index edf424af..f263fbae 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ A comprehensive collection of open source C++ examples for [Vulkan®](https://ww ## Official Khronos Vulkan Samples -Khronos recently made an official Vulkan Samples repository available to the public ([press release](https://www.khronos.org/blog/vulkan-releases-unified-samples-repository?utm_source=Khronos%20Blog&utm_medium=Twitter&utm_campaign=Vulkan%20Repository)). +Khronos recently made an official Vulkan Samples repository available to the public ([press release](https://www.khronos.org/blog/vulkan-releases-unified-samples-repository?utm_source=Khronos%20Blog&utm_medium=Twitter&utm_campaign=Vulkan%20Repository)). You can find this repository at https://github.com/KhronosGroup/Vulkan-Samples @@ -39,7 +39,7 @@ This repository contains submodules for external dependencies, so when doing a f ``` git clone --recursive https://github.com/SaschaWillems/Vulkan.git -``` +``` Existing repositories can be updated manually: @@ -63,7 +63,7 @@ See [BUILD.md](BUILD.md) for details on how to build for the different platforms ## Shaders -Vulkan consumes shaders in an intermediate representation called SPIR-V. This makes it possible to use different shader languages by compiling them to that bytecode format. The primary shader language used here is [GLSL](data/shaders) but thanks to an external contribution you'll also find [HLSL](data/hlsl) shader sources. +Vulkan consumes shaders in an intermediate representation called SPIR-V. This makes it possible to use different shader languages by compiling them to that bytecode format. The primary shader language used here is [GLSL](data/shaders/glsl) but thanks to an external contribution you'll also find [HLSL](data/shaders/hlsl) shader sources. ## Examples @@ -118,7 +118,7 @@ Uses input attachments to read framebuffer contents from a previous sub pass at #### [13 - Sub passes](examples/subpasses/) -Advanced example that uses sub passes and input attachments to write and read back data from framebuffer attachments (same location only) in single render pass. This is used to implement deferred render composition with added forward transparency in a single pass. +Advanced example that uses sub passes and input attachments to write and read back data from framebuffer attachments (same location only) in single render pass. This is used to implement deferred render composition with added forward transparency in a single pass. #### [14 - Offscreen rendering](examples/offscreen/) @@ -144,7 +144,7 @@ Implements multisample anti-aliasing (MSAA) using a renderpass with multisampled #### [03 - High dynamic range](examples/hdr/) -Implements a high dynamic range rendering pipeline using 16/32 bit floating point precision for all internal formats, textures and calculations, including a bloom pass, manual exposure and tone mapping. +Implements a high dynamic range rendering pipeline using 16/32 bit floating point precision for all internal formats, textures and calculations, including a bloom pass, manual exposure and tone mapping. #### [04 - Shadow mapping](examples/shadowmapping/) @@ -164,7 +164,7 @@ Generating a complete mip-chain at runtime instead of loading it from a file, by #### [08 - Skeletal animation](examples/skeletalanimation/) -Loads and renders an animated skinned 3D model. Skinning is done on the GPU by passing per-vertex bone weights and translation matrices. +Loads and renders an animated skinned 3D model. Skinning is done on the GPU by passing per-vertex bone weights and translation matrices. #### [09 - Capturing screenshots](examples/screenshot/) @@ -278,7 +278,7 @@ Renders a terrain using tessellation shaders for height displacement (based on a Uses curved PN-triangles ([paper](http://alex.vlachos.com/graphics/CurvedPNTriangles.pdf)) for adding details to a low-polygon model. -### Headless +### Headless Examples that run one-time tasks and don't make use of visual output (no window system integration). These can be run in environments where no user interface is available ([blog entry](https://www.saschawillems.de/tutorials/vulkan/headless_examples)). @@ -320,7 +320,7 @@ Implements multiple texture mapping methods to simulate depth based on texture i #### [04 - Spherical environment mapping](examples/sphericalenvmapping/) -Uses a spherical material capture texture array defining environment lighting and reflection information to fake complex lighting. +Uses a spherical material capture texture array defining environment lighting and reflection information to fake complex lighting. ### Extensions diff --git a/android/examples/_template/build.gradle b/android/examples/_template/build.gradle index a28a1af1..ffe46fed 100644 --- a/android/examples/_template/build.gradle +++ b/android/examples/_template/build.gradle @@ -43,8 +43,8 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } diff --git a/android/examples/bloom/build.gradle b/android/examples/bloom/build.gradle index 74c0e8d5..16830afa 100644 --- a/android/examples/bloom/build.gradle +++ b/android/examples/bloom/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/bloom' - into 'assets/shaders/bloom' + from '../../../data/shaders/glsl/bloom' + into 'assets/shaders/glsl/bloom' include '*.*' } diff --git a/android/examples/computecloth/build.gradle b/android/examples/computecloth/build.gradle index f2892eb1..0ef53609 100644 --- a/android/examples/computecloth/build.gradle +++ b/android/examples/computecloth/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/computecloth' - into 'assets/shaders/computecloth' + from '../../../data/shaders/glsl/computecloth' + into 'assets/shaders/glsl/computecloth' include '*.*' } diff --git a/android/examples/computecullandlod/build.gradle b/android/examples/computecullandlod/build.gradle index 573dc23e..25abc01e 100644 --- a/android/examples/computecullandlod/build.gradle +++ b/android/examples/computecullandlod/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/computecullandlod' - into 'assets/shaders/computecullandlod' + from '../../../data/shaders/glsl/computecullandlod' + into 'assets/shaders/glsl/computecullandlod' include '*.*' } diff --git a/android/examples/computeheadless/build.gradle b/android/examples/computeheadless/build.gradle index e2c6d2e6..d184269a 100644 --- a/android/examples/computeheadless/build.gradle +++ b/android/examples/computeheadless/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/computeheadless' - into 'assets/shaders/computeheadless' + from '../../../data/shaders/glsl/computeheadless' + into 'assets/shaders/glsl/computeheadless' include '*.*' } diff --git a/android/examples/computenbody/build.gradle b/android/examples/computenbody/build.gradle index 2e80f80f..2cf5b665 100644 --- a/android/examples/computenbody/build.gradle +++ b/android/examples/computenbody/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/computenbody' - into 'assets/shaders/computenbody' + from '../../../data/shaders/glsl/computenbody' + into 'assets/shaders/glsl/computenbody' include '*.*' } diff --git a/android/examples/computeparticles/build.gradle b/android/examples/computeparticles/build.gradle index 862a0464..dacefcde 100644 --- a/android/examples/computeparticles/build.gradle +++ b/android/examples/computeparticles/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/computeparticles' - into 'assets/shaders/computeparticles' + from '../../../data/shaders/glsl/computeparticles' + into 'assets/shaders/glsl/computeparticles' include '*.*' } diff --git a/android/examples/computeraytracing/build.gradle b/android/examples/computeraytracing/build.gradle index d096d913..7646825d 100644 --- a/android/examples/computeraytracing/build.gradle +++ b/android/examples/computeraytracing/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/computeraytracing' - into 'assets/shaders/computeraytracing' + from '../../../data/shaders/glsl/computeraytracing' + into 'assets/shaders/glsl/computeraytracing' include '*.*' } diff --git a/android/examples/computeshader/build.gradle b/android/examples/computeshader/build.gradle index 3c25f59a..e89c3dcd 100644 --- a/android/examples/computeshader/build.gradle +++ b/android/examples/computeshader/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/computeshader' - into 'assets/shaders/computeshader' + from '../../../data/shaders/glsl/computeshader' + into 'assets/shaders/glsl/computeshader' include '*.*' } diff --git a/android/examples/conservativeraster/build.gradle b/android/examples/conservativeraster/build.gradle index dc36fbce..e875180a 100644 --- a/android/examples/conservativeraster/build.gradle +++ b/android/examples/conservativeraster/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/conservativeraster' - into 'assets/shaders/conservativeraster' + from '../../../data/shaders/glsl/conservativeraster' + into 'assets/shaders/glsl/conservativeraster' include '*.*' } diff --git a/android/examples/debugmarker/build.gradle b/android/examples/debugmarker/build.gradle index 659775c3..740e034a 100644 --- a/android/examples/debugmarker/build.gradle +++ b/android/examples/debugmarker/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/debugmarker' - into 'assets/shaders/debugmarker' + from '../../../data/shaders/glsl/debugmarker' + into 'assets/shaders/glsl/debugmarker' include '*.*' } diff --git a/android/examples/deferred/build.gradle b/android/examples/deferred/build.gradle index b4a72972..76d3ae4b 100644 --- a/android/examples/deferred/build.gradle +++ b/android/examples/deferred/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/deferred' - into 'assets/shaders/deferred' + from '../../../data/shaders/glsl/deferred' + into 'assets/shaders/glsl/deferred' include '*.*' } diff --git a/android/examples/deferredmultisampling/build.gradle b/android/examples/deferredmultisampling/build.gradle index 228d1355..a54eb4e4 100644 --- a/android/examples/deferredmultisampling/build.gradle +++ b/android/examples/deferredmultisampling/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/deferredmultisampling' - into 'assets/shaders/deferredmultisampling' + from '../../../data/shaders/glsl/deferredmultisampling' + into 'assets/shaders/glsl/deferredmultisampling' include '*.*' } diff --git a/android/examples/deferredshadows/build.gradle b/android/examples/deferredshadows/build.gradle index 31380374..b65a47ee 100644 --- a/android/examples/deferredshadows/build.gradle +++ b/android/examples/deferredshadows/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/deferredshadows' - into 'assets/shaders/deferredshadows' + from '../../../data/shaders/glsl/deferredshadows' + into 'assets/shaders/glsl/deferredshadows' include '*.*' } diff --git a/android/examples/descriptorsets/build.gradle b/android/examples/descriptorsets/build.gradle index 0b1bb1a7..07a95460 100644 --- a/android/examples/descriptorsets/build.gradle +++ b/android/examples/descriptorsets/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/descriptorsets' - into 'assets/shaders/descriptorsets' + from '../../../data/shaders/glsl/descriptorsets' + into 'assets/shaders/glsl/descriptorsets' include '*.*' } diff --git a/android/examples/displacement/build.gradle b/android/examples/displacement/build.gradle index 84cada59..398177af 100644 --- a/android/examples/displacement/build.gradle +++ b/android/examples/displacement/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/displacement' - into 'assets/shaders/displacement' + from '../../../data/shaders/glsl/displacement' + into 'assets/shaders/glsl/displacement' include '*.*' } diff --git a/android/examples/distancefieldfonts/build.gradle b/android/examples/distancefieldfonts/build.gradle index 13d40538..92bfbd19 100644 --- a/android/examples/distancefieldfonts/build.gradle +++ b/android/examples/distancefieldfonts/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/distancefieldfonts' - into 'assets/shaders/distancefieldfonts' + from '../../../data/shaders/glsl/distancefieldfonts' + into 'assets/shaders/glsl/distancefieldfonts' include '*.*' } diff --git a/android/examples/dynamicuniformbuffer/build.gradle b/android/examples/dynamicuniformbuffer/build.gradle index 085d5e7e..ce471084 100644 --- a/android/examples/dynamicuniformbuffer/build.gradle +++ b/android/examples/dynamicuniformbuffer/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/dynamicuniformbuffer' - into 'assets/shaders/dynamicuniformbuffer' + from '../../../data/shaders/glsl/dynamicuniformbuffer' + into 'assets/shaders/glsl/dynamicuniformbuffer' include '*.*' } diff --git a/android/examples/gears/build.gradle b/android/examples/gears/build.gradle index fe4c5d94..9d4b347b 100644 --- a/android/examples/gears/build.gradle +++ b/android/examples/gears/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/gears' - into 'assets/shaders/gears' + from '../../../data/shaders/glsl/gears' + into 'assets/shaders/glsl/gears' include '*.*' } diff --git a/android/examples/geometryshader/build.gradle b/android/examples/geometryshader/build.gradle index bc17ee94..c6bd8068 100644 --- a/android/examples/geometryshader/build.gradle +++ b/android/examples/geometryshader/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/geometryshader' - into 'assets/shaders/geometryshader' + from '../../../data/shaders/glsl/geometryshader' + into 'assets/shaders/glsl/geometryshader' include '*.*' } diff --git a/android/examples/gltfscene/build.gradle b/android/examples/gltfscene/build.gradle index 64ab443d..6af39be5 100644 --- a/android/examples/gltfscene/build.gradle +++ b/android/examples/gltfscene/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/gltfscene' - into 'assets/shaders/gltfscene' + from '../../../data/shaders/glsl/gltfscene' + into 'assets/shaders/glsl/gltfscene' include '*.*' } diff --git a/android/examples/hdr/build.gradle b/android/examples/hdr/build.gradle index 14815c5a..9117c118 100644 --- a/android/examples/hdr/build.gradle +++ b/android/examples/hdr/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/hdr' - into 'assets/shaders/hdr' + from '../../../data/shaders/glsl/hdr' + into 'assets/shaders/glsl/hdr' include '*.*' } diff --git a/android/examples/imgui/build.gradle b/android/examples/imgui/build.gradle index fcfec1de..0334e311 100644 --- a/android/examples/imgui/build.gradle +++ b/android/examples/imgui/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/imgui' - into 'assets/shaders/imgui' + from '../../../data/shaders/glsl/imgui' + into 'assets/shaders/glsl/imgui' include '*.*' } diff --git a/android/examples/indirectdraw/build.gradle b/android/examples/indirectdraw/build.gradle index 9884e576..c1e38fe2 100644 --- a/android/examples/indirectdraw/build.gradle +++ b/android/examples/indirectdraw/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/indirectdraw' - into 'assets/shaders/indirectdraw' + from '../../../data/shaders/glsl/indirectdraw' + into 'assets/shaders/glsl/indirectdraw' include '*.*' } diff --git a/android/examples/inlineuniformblocks/build.gradle b/android/examples/inlineuniformblocks/build.gradle index 55c33ab0..4c8783b1 100644 --- a/android/examples/inlineuniformblocks/build.gradle +++ b/android/examples/inlineuniformblocks/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/inlineuniformblocks' - into 'assets/shaders/inlineuniformblocks' + from '../../../data/shaders/glsl/inlineuniformblocks' + into 'assets/shaders/glsl/inlineuniformblocks' include '*.*' } diff --git a/android/examples/inputattachments/build.gradle b/android/examples/inputattachments/build.gradle index 4102b0f0..06a7f6ae 100644 --- a/android/examples/inputattachments/build.gradle +++ b/android/examples/inputattachments/build.gradle @@ -48,14 +48,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/inputattachments' - into 'assets/shaders/inputattachments' + from '../../../data/shaders/glsl/inputattachments' + into 'assets/shaders/glsl/inputattachments' include '*.*' } @@ -64,7 +64,7 @@ task copyTask { into 'assets/models' include 'treasure_smooth.dae' } - + } preBuild.dependsOn copyTask \ No newline at end of file diff --git a/android/examples/instancing/build.gradle b/android/examples/instancing/build.gradle index 1a7a68ac..69ab8bc8 100644 --- a/android/examples/instancing/build.gradle +++ b/android/examples/instancing/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/instancing' - into 'assets/shaders/instancing' + from '../../../data/shaders/glsl/instancing' + into 'assets/shaders/glsl/instancing' include '*.*' } diff --git a/android/examples/multisampling/build.gradle b/android/examples/multisampling/build.gradle index a398cc85..fcac664d 100644 --- a/android/examples/multisampling/build.gradle +++ b/android/examples/multisampling/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/multisampling' - into 'assets/shaders/mesh' + from '../../../data/shaders/glsl/multisampling' + into 'assets/shaders/glsl/mesh' include '*.*' } diff --git a/android/examples/multithreading/build.gradle b/android/examples/multithreading/build.gradle index 4a427147..64604c12 100644 --- a/android/examples/multithreading/build.gradle +++ b/android/examples/multithreading/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/multithreading' - into 'assets/shaders/multithreading' + from '../../../data/shaders/glsl/multithreading' + into 'assets/shaders/glsl/multithreading' include '*.*' } diff --git a/android/examples/multiview/build.gradle b/android/examples/multiview/build.gradle index 84d6166c..481c6665 100644 --- a/android/examples/multiview/build.gradle +++ b/android/examples/multiview/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/multiview' - into 'assets/shaders/multiview' + from '../../../data/shaders/glsl/multiview' + into 'assets/shaders/glsl/multiview' include '*.*' } diff --git a/android/examples/negativeviewportheight/build.gradle b/android/examples/negativeviewportheight/build.gradle index 2822d74d..fcee9a9b 100644 --- a/android/examples/negativeviewportheight/build.gradle +++ b/android/examples/negativeviewportheight/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/negativeviewportheight' - into 'assets/shaders/negativeviewportheight' + from '../../../data/shaders/glsl/negativeviewportheight' + into 'assets/shaders/glsl/negativeviewportheight' include '*.*' } diff --git a/android/examples/occlusionquery/build.gradle b/android/examples/occlusionquery/build.gradle index 65a853b0..0aff998b 100644 --- a/android/examples/occlusionquery/build.gradle +++ b/android/examples/occlusionquery/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/occlusionquery' - into 'assets/shaders/occlusionquery' + from '../../../data/shaders/glsl/occlusionquery' + into 'assets/shaders/glsl/occlusionquery' include '*.*' } diff --git a/android/examples/offscreen/build.gradle b/android/examples/offscreen/build.gradle index f2e3c568..7fb3756e 100644 --- a/android/examples/offscreen/build.gradle +++ b/android/examples/offscreen/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/offscreen' - into 'assets/shaders/offscreen' + from '../../../data/shaders/glsl/offscreen' + into 'assets/shaders/glsl/offscreen' include '*.*' } diff --git a/android/examples/parallaxmapping/build.gradle b/android/examples/parallaxmapping/build.gradle index 84b6e682..e26808b8 100644 --- a/android/examples/parallaxmapping/build.gradle +++ b/android/examples/parallaxmapping/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/parallaxmapping' - into 'assets/shaders/parallaxmapping' + from '../../../data/shaders/glsl/parallaxmapping' + into 'assets/shaders/glsl/parallaxmapping' include '*.*' } diff --git a/android/examples/particlefire/build.gradle b/android/examples/particlefire/build.gradle index 85696dde..beba17b0 100644 --- a/android/examples/particlefire/build.gradle +++ b/android/examples/particlefire/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/particlefire' - into 'assets/shaders/particlefire' + from '../../../data/shaders/glsl/particlefire' + into 'assets/shaders/glsl/particlefire' include '*.*' } diff --git a/android/examples/pbrbasic/build.gradle b/android/examples/pbrbasic/build.gradle index 0ba55abf..9204d359 100644 --- a/android/examples/pbrbasic/build.gradle +++ b/android/examples/pbrbasic/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/pbrbasic' - into 'assets/shaders/pbrbasic' + from '../../../data/shaders/glsl/pbrbasic' + into 'assets/shaders/glsl/pbrbasic' include '*.*' } diff --git a/android/examples/pbribl/build.gradle b/android/examples/pbribl/build.gradle index 515b0e33..2feb7709 100644 --- a/android/examples/pbribl/build.gradle +++ b/android/examples/pbribl/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/pbribl' - into 'assets/shaders/pbribl' + from '../../../data/shaders/glsl/pbribl' + into 'assets/shaders/glsl/pbribl' include '*.*' } diff --git a/android/examples/pbrtexture/build.gradle b/android/examples/pbrtexture/build.gradle index 5ebe67fe..184bdfe1 100644 --- a/android/examples/pbrtexture/build.gradle +++ b/android/examples/pbrtexture/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/pbrtexture' - into 'assets/shaders/pbrtexture' + from '../../../data/shaders/glsl/pbrtexture' + into 'assets/shaders/glsl/pbrtexture' include '*.*' } diff --git a/android/examples/pipelines/build.gradle b/android/examples/pipelines/build.gradle index 9d1fa448..36cb9f07 100644 --- a/android/examples/pipelines/build.gradle +++ b/android/examples/pipelines/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/pipelines' - into 'assets/shaders/pipelines' + from '../../../data/shaders/glsl/pipelines' + into 'assets/shaders/glsl/pipelines' include '*.*' } diff --git a/android/examples/pipelinestatistics/build.gradle b/android/examples/pipelinestatistics/build.gradle index 21522054..3eb8f8ea 100644 --- a/android/examples/pipelinestatistics/build.gradle +++ b/android/examples/pipelinestatistics/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/pipelinestatistics' - into 'assets/shaders/pipelinestatistics' + from '../../../data/shaders/glsl/pipelinestatistics' + into 'assets/shaders/glsl/pipelinestatistics' include '*.*' } diff --git a/android/examples/pushconstants/build.gradle b/android/examples/pushconstants/build.gradle index e993ba1a..ee017703 100644 --- a/android/examples/pushconstants/build.gradle +++ b/android/examples/pushconstants/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/pushconstants' - into 'assets/shaders/pushconstants' + from '../../../data/shaders/glsl/pushconstants' + into 'assets/shaders/glsl/pushconstants' include '*.*' } diff --git a/android/examples/pushdescriptors/build.gradle b/android/examples/pushdescriptors/build.gradle index c04b5532..270e97ad 100644 --- a/android/examples/pushdescriptors/build.gradle +++ b/android/examples/pushdescriptors/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/pushdescriptors' - into 'assets/shaders/pushdescriptors' + from '../../../data/shaders/glsl/pushdescriptors' + into 'assets/shaders/glsl/pushdescriptors' include '*.*' } diff --git a/android/examples/radialblur/build.gradle b/android/examples/radialblur/build.gradle index ea8463ba..fbd6745c 100644 --- a/android/examples/radialblur/build.gradle +++ b/android/examples/radialblur/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/radialblur' - into 'assets/shaders/radialblur' + from '../../../data/shaders/glsl/radialblur' + into 'assets/shaders/glsl/radialblur' include '*.*' } diff --git a/android/examples/renderheadless/build.gradle b/android/examples/renderheadless/build.gradle index 75a4a6af..75bb3f3e 100644 --- a/android/examples/renderheadless/build.gradle +++ b/android/examples/renderheadless/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/renderheadless' - into 'assets/shaders/renderheadless' + from '../../../data/shaders/glsl/renderheadless' + into 'assets/shaders/glsl/renderheadless' include '*.*' } diff --git a/android/examples/scenerendering/build.gradle b/android/examples/scenerendering/build.gradle index 7ace9b7d..4de41b21 100644 --- a/android/examples/scenerendering/build.gradle +++ b/android/examples/scenerendering/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/scenerendering' - into 'assets/shaders/scenerendering' + from '../../../data/shaders/glsl/scenerendering' + into 'assets/shaders/glsl/scenerendering' include '*.*' } diff --git a/android/examples/screenshot/build.gradle b/android/examples/screenshot/build.gradle index 377a210a..b226ee23 100644 --- a/android/examples/screenshot/build.gradle +++ b/android/examples/screenshot/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/screenshot' - into 'assets/shaders/screenshot' + from '../../../data/shaders/glsl/screenshot' + into 'assets/shaders/glsl/screenshot' include '*.*' } diff --git a/android/examples/shadowmapping/build.gradle b/android/examples/shadowmapping/build.gradle index 1eb439e2..f78da5d5 100644 --- a/android/examples/shadowmapping/build.gradle +++ b/android/examples/shadowmapping/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/shadowmapping' - into 'assets/shaders/shadowmapping' + from '../../../data/shaders/glsl/shadowmapping' + into 'assets/shaders/glsl/shadowmapping' include '*.*' } diff --git a/android/examples/shadowmappingcascade/build.gradle b/android/examples/shadowmappingcascade/build.gradle index 57f421ff..9b140841 100644 --- a/android/examples/shadowmappingcascade/build.gradle +++ b/android/examples/shadowmappingcascade/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/shadowmappingcascade' - into 'assets/shaders/shadowmappingcascade' + from '../../../data/shaders/glsl/shadowmappingcascade' + into 'assets/shaders/glsl/shadowmappingcascade' include '*.*' } diff --git a/android/examples/shadowmappingomni/build.gradle b/android/examples/shadowmappingomni/build.gradle index e36544af..38685ff9 100644 --- a/android/examples/shadowmappingomni/build.gradle +++ b/android/examples/shadowmappingomni/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/shadowmapomni' - into 'assets/shaders/shadowmapomni' + from '../../../data/shaders/glsl/shadowmapomni' + into 'assets/shaders/glsl/shadowmapomni' include '*.*' } diff --git a/android/examples/skeletalanimation/build.gradle b/android/examples/skeletalanimation/build.gradle index e86aa8bf..cdb88fce 100644 --- a/android/examples/skeletalanimation/build.gradle +++ b/android/examples/skeletalanimation/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/skeletalanimation' - into 'assets/shaders/skeletalanimation' + from '../../../data/shaders/glsl/skeletalanimation' + into 'assets/shaders/glsl/skeletalanimation' include '*.*' } diff --git a/android/examples/specializationconstants/build.gradle b/android/examples/specializationconstants/build.gradle index afbe66ed..73556cbe 100644 --- a/android/examples/specializationconstants/build.gradle +++ b/android/examples/specializationconstants/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/specializationconstants' - into 'assets/shaders/specializationconstants' + from '../../../data/shaders/glsl/specializationconstants' + into 'assets/shaders/glsl/specializationconstants' include '*.*' } diff --git a/android/examples/sphericalenvmapping/build.gradle b/android/examples/sphericalenvmapping/build.gradle index 5e89a45d..3b48d16c 100644 --- a/android/examples/sphericalenvmapping/build.gradle +++ b/android/examples/sphericalenvmapping/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/sphericalenvmapping' - into 'assets/shaders/sphericalenvmapping' + from '../../../data/shaders/glsl/sphericalenvmapping' + into 'assets/shaders/glsl/sphericalenvmapping' include '*.*' } diff --git a/android/examples/ssao/build.gradle b/android/examples/ssao/build.gradle index 118df53b..abae9d55 100644 --- a/android/examples/ssao/build.gradle +++ b/android/examples/ssao/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/ssao' - into 'assets/shaders/ssao' + from '../../../data/shaders/glsl/ssao' + into 'assets/shaders/glsl/ssao' include '*.*' } diff --git a/android/examples/stencilbuffer/build.gradle b/android/examples/stencilbuffer/build.gradle index 48c38a30..97a2149c 100644 --- a/android/examples/stencilbuffer/build.gradle +++ b/android/examples/stencilbuffer/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/stencilbuffer' - into 'assets/shaders/stencilbuffer' + from '../../../data/shaders/glsl/stencilbuffer' + into 'assets/shaders/glsl/stencilbuffer' include '*.*' } diff --git a/android/examples/subpasses/build.gradle b/android/examples/subpasses/build.gradle index 41a6e5eb..a2fa2874 100644 --- a/android/examples/subpasses/build.gradle +++ b/android/examples/subpasses/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/subpasses' - into 'assets/shaders/subpasses' + from '../../../data/shaders/glsl/subpasses' + into 'assets/shaders/glsl/subpasses' include '*.*' } diff --git a/android/examples/terraintessellation/build.gradle b/android/examples/terraintessellation/build.gradle index 05b7acf9..6e8ed458 100644 --- a/android/examples/terraintessellation/build.gradle +++ b/android/examples/terraintessellation/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/terraintessellation' - into 'assets/shaders/terraintessellation' + from '../../../data/shaders/glsl/terraintessellation' + into 'assets/shaders/glsl/terraintessellation' include '*.*' } diff --git a/android/examples/tessellation/build.gradle b/android/examples/tessellation/build.gradle index e43ec428..a7ba36d2 100644 --- a/android/examples/tessellation/build.gradle +++ b/android/examples/tessellation/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/tessellation' - into 'assets/shaders/tessellation' + from '../../../data/shaders/glsl/tessellation' + into 'assets/shaders/glsl/tessellation' include '*.*' } diff --git a/android/examples/textoverlay/build.gradle b/android/examples/textoverlay/build.gradle index 4198d550..068941bf 100644 --- a/android/examples/textoverlay/build.gradle +++ b/android/examples/textoverlay/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/textoverlay' - into 'assets/shaders/textoverlay' + from '../../../data/shaders/glsl/textoverlay' + into 'assets/shaders/glsl/textoverlay' include '*.*' } diff --git a/android/examples/texture/build.gradle b/android/examples/texture/build.gradle index 6144ac11..a0f5da3a 100644 --- a/android/examples/texture/build.gradle +++ b/android/examples/texture/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/texture' - into 'assets/shaders/texture' + from '../../../data/shaders/glsl/texture' + into 'assets/shaders/glsl/texture' include '*.*' } diff --git a/android/examples/texture3d/build.gradle b/android/examples/texture3d/build.gradle index 807cc918..ed29b15b 100644 --- a/android/examples/texture3d/build.gradle +++ b/android/examples/texture3d/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/texture3d' - into 'assets/shaders/texture3d' + from '../../../data/shaders/glsl/texture3d' + into 'assets/shaders/glsl/texture3d' include '*.*' } diff --git a/android/examples/texturearray/build.gradle b/android/examples/texturearray/build.gradle index b2c9c02f..c8755100 100644 --- a/android/examples/texturearray/build.gradle +++ b/android/examples/texturearray/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/texturearray' - into 'assets/shaders/texturearray' + from '../../../data/shaders/glsl/texturearray' + into 'assets/shaders/glsl/texturearray' include '*.*' } diff --git a/android/examples/texturecubemap/build.gradle b/android/examples/texturecubemap/build.gradle index 739dbe8b..b07224b5 100644 --- a/android/examples/texturecubemap/build.gradle +++ b/android/examples/texturecubemap/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/texturecubemap' - into 'assets/shaders/texturecubemap' + from '../../../data/shaders/glsl/texturecubemap' + into 'assets/shaders/glsl/texturecubemap' include '*.*' } diff --git a/android/examples/texturemipmapgen/build.gradle b/android/examples/texturemipmapgen/build.gradle index a0fe719b..04036d61 100644 --- a/android/examples/texturemipmapgen/build.gradle +++ b/android/examples/texturemipmapgen/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/texturemipmapgen' - into 'assets/shaders/texturemipmapgen' + from '../../../data/shaders/glsl/texturemipmapgen' + into 'assets/shaders/glsl/texturemipmapgen' include '*.*' } diff --git a/android/examples/triangle/build.gradle b/android/examples/triangle/build.gradle index 7fcb5758..dba65944 100644 --- a/android/examples/triangle/build.gradle +++ b/android/examples/triangle/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/triangle' - into 'assets/shaders/triangle' + from '../../../data/shaders/glsl/triangle' + into 'assets/shaders/glsl/triangle' include '*.*' } diff --git a/android/examples/viewportarray/build.gradle b/android/examples/viewportarray/build.gradle index a066416b..ab3c8654 100644 --- a/android/examples/viewportarray/build.gradle +++ b/android/examples/viewportarray/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/viewportarray' - into 'assets/shaders/viewportarray' + from '../../../data/shaders/glsl/viewportarray' + into 'assets/shaders/glsl/viewportarray' include '*.*' } diff --git a/android/examples/vulkanscene/build.gradle b/android/examples/vulkanscene/build.gradle index 65d21b6b..a0651def 100644 --- a/android/examples/vulkanscene/build.gradle +++ b/android/examples/vulkanscene/build.gradle @@ -43,14 +43,14 @@ task copyTask { } copy { - from '../../../data/shaders/base' - into "assets/shaders/base" + from '../../../data/shaders/glsl/base' + into 'assets/shaders/glsl/base' include '*.spv' } copy { - from '../../../data/shaders/vulkanscene' - into 'assets/shaders/vulkanscene' + from '../../../data/shaders/glsl/vulkanscene' + into 'assets/shaders/glsl/vulkanscene' include '*.*' } diff --git a/base/VulkanTools.cpp b/base/VulkanTools.cpp index 5e720fc8..40783e78 100644 --- a/base/VulkanTools.cpp +++ b/base/VulkanTools.cpp @@ -19,6 +19,11 @@ const std::string getAssetPath() #endif } +const std::string getShadersPath() +{ + return getAssetPath() + "shaders/glsl/"; +} + namespace vks { namespace tools @@ -152,7 +157,7 @@ namespace vks break; case VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL: - // Image is a transfer source + // Image is a transfer source // Make sure any reads from the image have been finished imageMemoryBarrier.srcAccessMask = VK_ACCESS_TRANSFER_READ_BIT; break; diff --git a/base/VulkanTools.h b/base/VulkanTools.h index 46ff411f..d6b0fd6b 100644 --- a/base/VulkanTools.h +++ b/base/VulkanTools.h @@ -60,6 +60,7 @@ #endif const std::string getAssetPath(); +const std::string getShadersPath(); namespace vks { @@ -113,7 +114,7 @@ namespace vks void exitFatal(std::string message, int32_t exitCode); void exitFatal(std::string message, VkResult resultCode); - // Load a SPIR-V shader (binary) + // Load a SPIR-V shader (binary) #if defined(__ANDROID__) VkShaderModule loadShader(AAssetManager* assetManager, const char *fileName, VkDevice device); #else diff --git a/base/vulkanexamplebase.cpp b/base/vulkanexamplebase.cpp index 66695059..2cfbfbfa 100644 --- a/base/vulkanexamplebase.cpp +++ b/base/vulkanexamplebase.cpp @@ -17,7 +17,7 @@ VkResult VulkanExampleBase::createInstance(bool enableValidation) // Validation can also be forced via a define #if defined(_VALIDATION) this->settings.validation = true; -#endif +#endif VkApplicationInfo appInfo = {}; appInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO; @@ -66,7 +66,7 @@ VkResult VulkanExampleBase::createInstance(bool enableValidation) if (settings.validation) { // The VK_LAYER_KHRONOS_validation contains all current validation functionality. - // Note that on Android this layer requires at least NDK r20 + // Note that on Android this layer requires at least NDK r20 const char* validationLayerName = "VK_LAYER_KHRONOS_validation"; // Check if this layer is available at instance level uint32_t instanceLayerCount; @@ -155,8 +155,8 @@ void VulkanExampleBase::prepare() UIOverlay.device = vulkanDevice; UIOverlay.queue = queue; UIOverlay.shaders = { - loadShader(getAssetPath() + "shaders/base/uioverlay.vert.spv", VK_SHADER_STAGE_VERTEX_BIT), - loadShader(getAssetPath() + "shaders/base/uioverlay.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT), + loadShader(getShadersPath() + "base/uioverlay.vert.spv", VK_SHADER_STAGE_VERTEX_BIT), + loadShader(getShadersPath() + "base/uioverlay.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT), }; UIOverlay.prepareResources(); UIOverlay.preparePipeline(pipelineCache, renderPass); @@ -685,7 +685,7 @@ VulkanExampleBase::VulkanExampleBase(bool enableValidation) benchmark.outputFrameTimes = true; } } - + #if defined(VK_USE_PLATFORM_ANDROID_KHR) // Vulkan library is loaded dynamically on Android bool libLoaded = vks::android::loadVulkanLibrary(); @@ -822,7 +822,7 @@ bool VulkanExampleBase::initVulkan() // Defaults to the first device unless specified by command line uint32_t selectedDevice = 0; -#if !defined(VK_USE_PLATFORM_ANDROID_KHR) +#if !defined(VK_USE_PLATFORM_ANDROID_KHR) // GPU selection via command line argument for (size_t i = 0; i < args.size(); i++) { @@ -832,11 +832,11 @@ bool VulkanExampleBase::initVulkan() char* endptr; uint32_t index = strtol(args[i + 1], &endptr, 10); if (endptr != args[i + 1]) - { + { if (index > gpuCount - 1) { std::cerr << "Selected device index " << index << " is out of range, reverting to device 0 (use -listgpus to show available Vulkan devices)" << std::endl; - } + } else { std::cout << "Selected Vulkan device " << index << std::endl; @@ -1794,7 +1794,7 @@ xcb_window_t VulkanExampleBase::setupWindow() &(atom_wm_fullscreen->atom)); free(atom_wm_fullscreen); free(atom_wm_state); - } + } xcb_map_window(connection, window); @@ -1888,7 +1888,7 @@ void VulkanExampleBase::handleEvent(const xcb_generic_event_t *event) break; } } - break; + break; case XCB_KEY_RELEASE: { const xcb_key_release_event_t *keyEvent = (const xcb_key_release_event_t *)event; @@ -2127,7 +2127,7 @@ void VulkanExampleBase::windowResize() vkDestroyImageView(device, depthStencil.view, nullptr); vkDestroyImage(device, depthStencil.image, nullptr); vkFreeMemory(device, depthStencil.mem, nullptr); - setupDepthStencil(); + setupDepthStencil(); for (uint32_t i = 0; i < frameBuffers.size(); i++) { vkDestroyFramebuffer(device, frameBuffers[i], nullptr); } @@ -2200,7 +2200,7 @@ void VulkanExampleBase::initSwapchain() { #if defined(_WIN32) swapChain.initSurface(windowInstance, window); -#elif defined(VK_USE_PLATFORM_ANDROID_KHR) +#elif defined(VK_USE_PLATFORM_ANDROID_KHR) swapChain.initSurface(androidApp->window); #elif (defined(VK_USE_PLATFORM_IOS_MVK) || defined(VK_USE_PLATFORM_MACOS_MVK)) swapChain.initSurface(view); diff --git a/data/shaders/base/generate-spirv.bat b/data/shaders/glsl/base/generate-spirv.bat similarity index 100% rename from data/shaders/base/generate-spirv.bat rename to data/shaders/glsl/base/generate-spirv.bat diff --git a/data/shaders/base/textoverlay.frag b/data/shaders/glsl/base/textoverlay.frag similarity index 100% rename from data/shaders/base/textoverlay.frag rename to data/shaders/glsl/base/textoverlay.frag diff --git a/data/shaders/base/textoverlay.frag.spv b/data/shaders/glsl/base/textoverlay.frag.spv similarity index 100% rename from data/shaders/base/textoverlay.frag.spv rename to data/shaders/glsl/base/textoverlay.frag.spv diff --git a/data/shaders/base/textoverlay.vert b/data/shaders/glsl/base/textoverlay.vert similarity index 100% rename from data/shaders/base/textoverlay.vert rename to data/shaders/glsl/base/textoverlay.vert diff --git a/data/shaders/base/textoverlay.vert.spv b/data/shaders/glsl/base/textoverlay.vert.spv similarity index 100% rename from data/shaders/base/textoverlay.vert.spv rename to data/shaders/glsl/base/textoverlay.vert.spv diff --git a/data/shaders/base/uioverlay.frag b/data/shaders/glsl/base/uioverlay.frag similarity index 100% rename from data/shaders/base/uioverlay.frag rename to data/shaders/glsl/base/uioverlay.frag diff --git a/data/shaders/base/uioverlay.frag.spv b/data/shaders/glsl/base/uioverlay.frag.spv similarity index 100% rename from data/shaders/base/uioverlay.frag.spv rename to data/shaders/glsl/base/uioverlay.frag.spv diff --git a/data/shaders/base/uioverlay.vert b/data/shaders/glsl/base/uioverlay.vert similarity index 100% rename from data/shaders/base/uioverlay.vert rename to data/shaders/glsl/base/uioverlay.vert diff --git a/data/shaders/base/uioverlay.vert.spv b/data/shaders/glsl/base/uioverlay.vert.spv similarity index 100% rename from data/shaders/base/uioverlay.vert.spv rename to data/shaders/glsl/base/uioverlay.vert.spv diff --git a/data/shaders/bloom/colorpass.frag b/data/shaders/glsl/bloom/colorpass.frag similarity index 100% rename from data/shaders/bloom/colorpass.frag rename to data/shaders/glsl/bloom/colorpass.frag diff --git a/data/shaders/bloom/colorpass.frag.spv b/data/shaders/glsl/bloom/colorpass.frag.spv similarity index 100% rename from data/shaders/bloom/colorpass.frag.spv rename to data/shaders/glsl/bloom/colorpass.frag.spv diff --git a/data/shaders/bloom/colorpass.vert b/data/shaders/glsl/bloom/colorpass.vert similarity index 100% rename from data/shaders/bloom/colorpass.vert rename to data/shaders/glsl/bloom/colorpass.vert diff --git a/data/shaders/bloom/colorpass.vert.spv b/data/shaders/glsl/bloom/colorpass.vert.spv similarity index 100% rename from data/shaders/bloom/colorpass.vert.spv rename to data/shaders/glsl/bloom/colorpass.vert.spv diff --git a/data/shaders/bloom/gaussblur.frag b/data/shaders/glsl/bloom/gaussblur.frag similarity index 100% rename from data/shaders/bloom/gaussblur.frag rename to data/shaders/glsl/bloom/gaussblur.frag diff --git a/data/shaders/bloom/gaussblur.frag.spv b/data/shaders/glsl/bloom/gaussblur.frag.spv similarity index 100% rename from data/shaders/bloom/gaussblur.frag.spv rename to data/shaders/glsl/bloom/gaussblur.frag.spv diff --git a/data/shaders/bloom/gaussblur.vert b/data/shaders/glsl/bloom/gaussblur.vert similarity index 100% rename from data/shaders/bloom/gaussblur.vert rename to data/shaders/glsl/bloom/gaussblur.vert diff --git a/data/shaders/bloom/gaussblur.vert.spv b/data/shaders/glsl/bloom/gaussblur.vert.spv similarity index 100% rename from data/shaders/bloom/gaussblur.vert.spv rename to data/shaders/glsl/bloom/gaussblur.vert.spv diff --git a/data/shaders/bloom/generate-spirv.bat b/data/shaders/glsl/bloom/generate-spirv.bat similarity index 100% rename from data/shaders/bloom/generate-spirv.bat rename to data/shaders/glsl/bloom/generate-spirv.bat diff --git a/data/shaders/bloom/phongpass.frag b/data/shaders/glsl/bloom/phongpass.frag similarity index 100% rename from data/shaders/bloom/phongpass.frag rename to data/shaders/glsl/bloom/phongpass.frag diff --git a/data/shaders/bloom/phongpass.frag.spv b/data/shaders/glsl/bloom/phongpass.frag.spv similarity index 100% rename from data/shaders/bloom/phongpass.frag.spv rename to data/shaders/glsl/bloom/phongpass.frag.spv diff --git a/data/shaders/bloom/phongpass.vert b/data/shaders/glsl/bloom/phongpass.vert similarity index 100% rename from data/shaders/bloom/phongpass.vert rename to data/shaders/glsl/bloom/phongpass.vert diff --git a/data/shaders/bloom/phongpass.vert.spv b/data/shaders/glsl/bloom/phongpass.vert.spv similarity index 100% rename from data/shaders/bloom/phongpass.vert.spv rename to data/shaders/glsl/bloom/phongpass.vert.spv diff --git a/data/shaders/bloom/skybox.frag b/data/shaders/glsl/bloom/skybox.frag similarity index 100% rename from data/shaders/bloom/skybox.frag rename to data/shaders/glsl/bloom/skybox.frag diff --git a/data/shaders/bloom/skybox.frag.spv b/data/shaders/glsl/bloom/skybox.frag.spv similarity index 100% rename from data/shaders/bloom/skybox.frag.spv rename to data/shaders/glsl/bloom/skybox.frag.spv diff --git a/data/shaders/bloom/skybox.vert b/data/shaders/glsl/bloom/skybox.vert similarity index 100% rename from data/shaders/bloom/skybox.vert rename to data/shaders/glsl/bloom/skybox.vert diff --git a/data/shaders/bloom/skybox.vert.spv b/data/shaders/glsl/bloom/skybox.vert.spv similarity index 100% rename from data/shaders/bloom/skybox.vert.spv rename to data/shaders/glsl/bloom/skybox.vert.spv diff --git a/data/shaders/compileshaders.py b/data/shaders/glsl/compileshaders.py similarity index 100% rename from data/shaders/compileshaders.py rename to data/shaders/glsl/compileshaders.py diff --git a/data/shaders/computecloth/cloth.comp b/data/shaders/glsl/computecloth/cloth.comp similarity index 100% rename from data/shaders/computecloth/cloth.comp rename to data/shaders/glsl/computecloth/cloth.comp diff --git a/data/shaders/computecloth/cloth.comp.spv b/data/shaders/glsl/computecloth/cloth.comp.spv similarity index 100% rename from data/shaders/computecloth/cloth.comp.spv rename to data/shaders/glsl/computecloth/cloth.comp.spv diff --git a/data/shaders/computecloth/cloth.frag b/data/shaders/glsl/computecloth/cloth.frag similarity index 100% rename from data/shaders/computecloth/cloth.frag rename to data/shaders/glsl/computecloth/cloth.frag diff --git a/data/shaders/computecloth/cloth.frag.spv b/data/shaders/glsl/computecloth/cloth.frag.spv similarity index 100% rename from data/shaders/computecloth/cloth.frag.spv rename to data/shaders/glsl/computecloth/cloth.frag.spv diff --git a/data/shaders/computecloth/cloth.vert b/data/shaders/glsl/computecloth/cloth.vert similarity index 100% rename from data/shaders/computecloth/cloth.vert rename to data/shaders/glsl/computecloth/cloth.vert diff --git a/data/shaders/computecloth/cloth.vert.spv b/data/shaders/glsl/computecloth/cloth.vert.spv similarity index 100% rename from data/shaders/computecloth/cloth.vert.spv rename to data/shaders/glsl/computecloth/cloth.vert.spv diff --git a/data/shaders/computecloth/sphere.frag b/data/shaders/glsl/computecloth/sphere.frag similarity index 100% rename from data/shaders/computecloth/sphere.frag rename to data/shaders/glsl/computecloth/sphere.frag diff --git a/data/shaders/computecloth/sphere.frag.spv b/data/shaders/glsl/computecloth/sphere.frag.spv similarity index 100% rename from data/shaders/computecloth/sphere.frag.spv rename to data/shaders/glsl/computecloth/sphere.frag.spv diff --git a/data/shaders/computecloth/sphere.vert b/data/shaders/glsl/computecloth/sphere.vert similarity index 100% rename from data/shaders/computecloth/sphere.vert rename to data/shaders/glsl/computecloth/sphere.vert diff --git a/data/shaders/computecloth/sphere.vert.spv b/data/shaders/glsl/computecloth/sphere.vert.spv similarity index 100% rename from data/shaders/computecloth/sphere.vert.spv rename to data/shaders/glsl/computecloth/sphere.vert.spv diff --git a/data/shaders/computecullandlod/cull.comp b/data/shaders/glsl/computecullandlod/cull.comp similarity index 100% rename from data/shaders/computecullandlod/cull.comp rename to data/shaders/glsl/computecullandlod/cull.comp diff --git a/data/shaders/computecullandlod/cull.comp.spv b/data/shaders/glsl/computecullandlod/cull.comp.spv similarity index 100% rename from data/shaders/computecullandlod/cull.comp.spv rename to data/shaders/glsl/computecullandlod/cull.comp.spv diff --git a/data/shaders/computecullandlod/indirectdraw.frag b/data/shaders/glsl/computecullandlod/indirectdraw.frag similarity index 100% rename from data/shaders/computecullandlod/indirectdraw.frag rename to data/shaders/glsl/computecullandlod/indirectdraw.frag diff --git a/data/shaders/computecullandlod/indirectdraw.frag.spv b/data/shaders/glsl/computecullandlod/indirectdraw.frag.spv similarity index 100% rename from data/shaders/computecullandlod/indirectdraw.frag.spv rename to data/shaders/glsl/computecullandlod/indirectdraw.frag.spv diff --git a/data/shaders/computecullandlod/indirectdraw.vert b/data/shaders/glsl/computecullandlod/indirectdraw.vert similarity index 100% rename from data/shaders/computecullandlod/indirectdraw.vert rename to data/shaders/glsl/computecullandlod/indirectdraw.vert diff --git a/data/shaders/computecullandlod/indirectdraw.vert.spv b/data/shaders/glsl/computecullandlod/indirectdraw.vert.spv similarity index 100% rename from data/shaders/computecullandlod/indirectdraw.vert.spv rename to data/shaders/glsl/computecullandlod/indirectdraw.vert.spv diff --git a/data/shaders/computeheadless/headless.comp b/data/shaders/glsl/computeheadless/headless.comp similarity index 100% rename from data/shaders/computeheadless/headless.comp rename to data/shaders/glsl/computeheadless/headless.comp diff --git a/data/shaders/computeheadless/headless.comp.spv b/data/shaders/glsl/computeheadless/headless.comp.spv similarity index 100% rename from data/shaders/computeheadless/headless.comp.spv rename to data/shaders/glsl/computeheadless/headless.comp.spv diff --git a/data/shaders/computenbody/particle.frag b/data/shaders/glsl/computenbody/particle.frag similarity index 100% rename from data/shaders/computenbody/particle.frag rename to data/shaders/glsl/computenbody/particle.frag diff --git a/data/shaders/computenbody/particle.frag.spv b/data/shaders/glsl/computenbody/particle.frag.spv similarity index 100% rename from data/shaders/computenbody/particle.frag.spv rename to data/shaders/glsl/computenbody/particle.frag.spv diff --git a/data/shaders/computenbody/particle.vert b/data/shaders/glsl/computenbody/particle.vert similarity index 100% rename from data/shaders/computenbody/particle.vert rename to data/shaders/glsl/computenbody/particle.vert diff --git a/data/shaders/computenbody/particle.vert.spv b/data/shaders/glsl/computenbody/particle.vert.spv similarity index 100% rename from data/shaders/computenbody/particle.vert.spv rename to data/shaders/glsl/computenbody/particle.vert.spv diff --git a/data/shaders/computenbody/particle_calculate.comp b/data/shaders/glsl/computenbody/particle_calculate.comp similarity index 100% rename from data/shaders/computenbody/particle_calculate.comp rename to data/shaders/glsl/computenbody/particle_calculate.comp diff --git a/data/shaders/computenbody/particle_calculate.comp.spv b/data/shaders/glsl/computenbody/particle_calculate.comp.spv similarity index 100% rename from data/shaders/computenbody/particle_calculate.comp.spv rename to data/shaders/glsl/computenbody/particle_calculate.comp.spv diff --git a/data/shaders/computenbody/particle_integrate.comp b/data/shaders/glsl/computenbody/particle_integrate.comp similarity index 100% rename from data/shaders/computenbody/particle_integrate.comp rename to data/shaders/glsl/computenbody/particle_integrate.comp diff --git a/data/shaders/computenbody/particle_integrate.comp.spv b/data/shaders/glsl/computenbody/particle_integrate.comp.spv similarity index 100% rename from data/shaders/computenbody/particle_integrate.comp.spv rename to data/shaders/glsl/computenbody/particle_integrate.comp.spv diff --git a/data/shaders/computeparticles/generate-spirv.bat b/data/shaders/glsl/computeparticles/generate-spirv.bat similarity index 100% rename from data/shaders/computeparticles/generate-spirv.bat rename to data/shaders/glsl/computeparticles/generate-spirv.bat diff --git a/data/shaders/computeparticles/particle.comp b/data/shaders/glsl/computeparticles/particle.comp similarity index 100% rename from data/shaders/computeparticles/particle.comp rename to data/shaders/glsl/computeparticles/particle.comp diff --git a/data/shaders/computeparticles/particle.comp.spv b/data/shaders/glsl/computeparticles/particle.comp.spv similarity index 100% rename from data/shaders/computeparticles/particle.comp.spv rename to data/shaders/glsl/computeparticles/particle.comp.spv diff --git a/data/shaders/computeparticles/particle.frag b/data/shaders/glsl/computeparticles/particle.frag similarity index 100% rename from data/shaders/computeparticles/particle.frag rename to data/shaders/glsl/computeparticles/particle.frag diff --git a/data/shaders/computeparticles/particle.frag.spv b/data/shaders/glsl/computeparticles/particle.frag.spv similarity index 100% rename from data/shaders/computeparticles/particle.frag.spv rename to data/shaders/glsl/computeparticles/particle.frag.spv diff --git a/data/shaders/computeparticles/particle.vert b/data/shaders/glsl/computeparticles/particle.vert similarity index 100% rename from data/shaders/computeparticles/particle.vert rename to data/shaders/glsl/computeparticles/particle.vert diff --git a/data/shaders/computeparticles/particle.vert.spv b/data/shaders/glsl/computeparticles/particle.vert.spv similarity index 100% rename from data/shaders/computeparticles/particle.vert.spv rename to data/shaders/glsl/computeparticles/particle.vert.spv diff --git a/data/shaders/computeraytracing/generate-spirv.bat b/data/shaders/glsl/computeraytracing/generate-spirv.bat similarity index 100% rename from data/shaders/computeraytracing/generate-spirv.bat rename to data/shaders/glsl/computeraytracing/generate-spirv.bat diff --git a/data/shaders/computeraytracing/raytracing.comp b/data/shaders/glsl/computeraytracing/raytracing.comp similarity index 100% rename from data/shaders/computeraytracing/raytracing.comp rename to data/shaders/glsl/computeraytracing/raytracing.comp diff --git a/data/shaders/computeraytracing/raytracing.comp.spv b/data/shaders/glsl/computeraytracing/raytracing.comp.spv similarity index 100% rename from data/shaders/computeraytracing/raytracing.comp.spv rename to data/shaders/glsl/computeraytracing/raytracing.comp.spv diff --git a/data/shaders/computeraytracing/texture.frag b/data/shaders/glsl/computeraytracing/texture.frag similarity index 100% rename from data/shaders/computeraytracing/texture.frag rename to data/shaders/glsl/computeraytracing/texture.frag diff --git a/data/shaders/computeraytracing/texture.frag.spv b/data/shaders/glsl/computeraytracing/texture.frag.spv similarity index 100% rename from data/shaders/computeraytracing/texture.frag.spv rename to data/shaders/glsl/computeraytracing/texture.frag.spv diff --git a/data/shaders/computeraytracing/texture.vert b/data/shaders/glsl/computeraytracing/texture.vert similarity index 100% rename from data/shaders/computeraytracing/texture.vert rename to data/shaders/glsl/computeraytracing/texture.vert diff --git a/data/shaders/computeraytracing/texture.vert.spv b/data/shaders/glsl/computeraytracing/texture.vert.spv similarity index 100% rename from data/shaders/computeraytracing/texture.vert.spv rename to data/shaders/glsl/computeraytracing/texture.vert.spv diff --git a/data/shaders/computeshader/edgedetect.comp b/data/shaders/glsl/computeshader/edgedetect.comp similarity index 100% rename from data/shaders/computeshader/edgedetect.comp rename to data/shaders/glsl/computeshader/edgedetect.comp diff --git a/data/shaders/computeshader/edgedetect.comp.spv b/data/shaders/glsl/computeshader/edgedetect.comp.spv similarity index 100% rename from data/shaders/computeshader/edgedetect.comp.spv rename to data/shaders/glsl/computeshader/edgedetect.comp.spv diff --git a/data/shaders/computeshader/emboss.comp b/data/shaders/glsl/computeshader/emboss.comp similarity index 100% rename from data/shaders/computeshader/emboss.comp rename to data/shaders/glsl/computeshader/emboss.comp diff --git a/data/shaders/computeshader/emboss.comp.spv b/data/shaders/glsl/computeshader/emboss.comp.spv similarity index 100% rename from data/shaders/computeshader/emboss.comp.spv rename to data/shaders/glsl/computeshader/emboss.comp.spv diff --git a/data/shaders/computeshader/generate-spirv.bat b/data/shaders/glsl/computeshader/generate-spirv.bat similarity index 100% rename from data/shaders/computeshader/generate-spirv.bat rename to data/shaders/glsl/computeshader/generate-spirv.bat diff --git a/data/shaders/computeshader/sharpen.comp b/data/shaders/glsl/computeshader/sharpen.comp similarity index 100% rename from data/shaders/computeshader/sharpen.comp rename to data/shaders/glsl/computeshader/sharpen.comp diff --git a/data/shaders/computeshader/sharpen.comp.spv b/data/shaders/glsl/computeshader/sharpen.comp.spv similarity index 100% rename from data/shaders/computeshader/sharpen.comp.spv rename to data/shaders/glsl/computeshader/sharpen.comp.spv diff --git a/data/shaders/computeshader/texture.frag b/data/shaders/glsl/computeshader/texture.frag similarity index 100% rename from data/shaders/computeshader/texture.frag rename to data/shaders/glsl/computeshader/texture.frag diff --git a/data/shaders/computeshader/texture.frag.spv b/data/shaders/glsl/computeshader/texture.frag.spv similarity index 100% rename from data/shaders/computeshader/texture.frag.spv rename to data/shaders/glsl/computeshader/texture.frag.spv diff --git a/data/shaders/computeshader/texture.vert b/data/shaders/glsl/computeshader/texture.vert similarity index 100% rename from data/shaders/computeshader/texture.vert rename to data/shaders/glsl/computeshader/texture.vert diff --git a/data/shaders/computeshader/texture.vert.spv b/data/shaders/glsl/computeshader/texture.vert.spv similarity index 100% rename from data/shaders/computeshader/texture.vert.spv rename to data/shaders/glsl/computeshader/texture.vert.spv diff --git a/data/shaders/conditionalrender/model.frag b/data/shaders/glsl/conditionalrender/model.frag similarity index 100% rename from data/shaders/conditionalrender/model.frag rename to data/shaders/glsl/conditionalrender/model.frag diff --git a/data/shaders/conditionalrender/model.frag.spv b/data/shaders/glsl/conditionalrender/model.frag.spv similarity index 100% rename from data/shaders/conditionalrender/model.frag.spv rename to data/shaders/glsl/conditionalrender/model.frag.spv diff --git a/data/shaders/conditionalrender/model.vert b/data/shaders/glsl/conditionalrender/model.vert similarity index 100% rename from data/shaders/conditionalrender/model.vert rename to data/shaders/glsl/conditionalrender/model.vert diff --git a/data/shaders/conditionalrender/model.vert.spv b/data/shaders/glsl/conditionalrender/model.vert.spv similarity index 100% rename from data/shaders/conditionalrender/model.vert.spv rename to data/shaders/glsl/conditionalrender/model.vert.spv diff --git a/data/shaders/conservativeraster/fullscreen.frag b/data/shaders/glsl/conservativeraster/fullscreen.frag similarity index 100% rename from data/shaders/conservativeraster/fullscreen.frag rename to data/shaders/glsl/conservativeraster/fullscreen.frag diff --git a/data/shaders/conservativeraster/fullscreen.frag.spv b/data/shaders/glsl/conservativeraster/fullscreen.frag.spv similarity index 100% rename from data/shaders/conservativeraster/fullscreen.frag.spv rename to data/shaders/glsl/conservativeraster/fullscreen.frag.spv diff --git a/data/shaders/conservativeraster/fullscreen.vert b/data/shaders/glsl/conservativeraster/fullscreen.vert similarity index 100% rename from data/shaders/conservativeraster/fullscreen.vert rename to data/shaders/glsl/conservativeraster/fullscreen.vert diff --git a/data/shaders/conservativeraster/fullscreen.vert.spv b/data/shaders/glsl/conservativeraster/fullscreen.vert.spv similarity index 100% rename from data/shaders/conservativeraster/fullscreen.vert.spv rename to data/shaders/glsl/conservativeraster/fullscreen.vert.spv diff --git a/data/shaders/conservativeraster/triangle.frag b/data/shaders/glsl/conservativeraster/triangle.frag similarity index 100% rename from data/shaders/conservativeraster/triangle.frag rename to data/shaders/glsl/conservativeraster/triangle.frag diff --git a/data/shaders/conservativeraster/triangle.frag.spv b/data/shaders/glsl/conservativeraster/triangle.frag.spv similarity index 100% rename from data/shaders/conservativeraster/triangle.frag.spv rename to data/shaders/glsl/conservativeraster/triangle.frag.spv diff --git a/data/shaders/conservativeraster/triangle.vert b/data/shaders/glsl/conservativeraster/triangle.vert similarity index 100% rename from data/shaders/conservativeraster/triangle.vert rename to data/shaders/glsl/conservativeraster/triangle.vert diff --git a/data/shaders/conservativeraster/triangle.vert.spv b/data/shaders/glsl/conservativeraster/triangle.vert.spv similarity index 100% rename from data/shaders/conservativeraster/triangle.vert.spv rename to data/shaders/glsl/conservativeraster/triangle.vert.spv diff --git a/data/shaders/conservativeraster/triangleoverlay.frag b/data/shaders/glsl/conservativeraster/triangleoverlay.frag similarity index 100% rename from data/shaders/conservativeraster/triangleoverlay.frag rename to data/shaders/glsl/conservativeraster/triangleoverlay.frag diff --git a/data/shaders/conservativeraster/triangleoverlay.frag.spv b/data/shaders/glsl/conservativeraster/triangleoverlay.frag.spv similarity index 100% rename from data/shaders/conservativeraster/triangleoverlay.frag.spv rename to data/shaders/glsl/conservativeraster/triangleoverlay.frag.spv diff --git a/data/shaders/debugmarker/colorpass.frag b/data/shaders/glsl/debugmarker/colorpass.frag similarity index 100% rename from data/shaders/debugmarker/colorpass.frag rename to data/shaders/glsl/debugmarker/colorpass.frag diff --git a/data/shaders/debugmarker/colorpass.frag.spv b/data/shaders/glsl/debugmarker/colorpass.frag.spv similarity index 100% rename from data/shaders/debugmarker/colorpass.frag.spv rename to data/shaders/glsl/debugmarker/colorpass.frag.spv diff --git a/data/shaders/debugmarker/colorpass.vert b/data/shaders/glsl/debugmarker/colorpass.vert similarity index 100% rename from data/shaders/debugmarker/colorpass.vert rename to data/shaders/glsl/debugmarker/colorpass.vert diff --git a/data/shaders/debugmarker/colorpass.vert.spv b/data/shaders/glsl/debugmarker/colorpass.vert.spv similarity index 100% rename from data/shaders/debugmarker/colorpass.vert.spv rename to data/shaders/glsl/debugmarker/colorpass.vert.spv diff --git a/data/shaders/debugmarker/generate-spirv.bat b/data/shaders/glsl/debugmarker/generate-spirv.bat similarity index 100% rename from data/shaders/debugmarker/generate-spirv.bat rename to data/shaders/glsl/debugmarker/generate-spirv.bat diff --git a/data/shaders/debugmarker/postprocess.frag b/data/shaders/glsl/debugmarker/postprocess.frag similarity index 100% rename from data/shaders/debugmarker/postprocess.frag rename to data/shaders/glsl/debugmarker/postprocess.frag diff --git a/data/shaders/debugmarker/postprocess.frag.spv b/data/shaders/glsl/debugmarker/postprocess.frag.spv similarity index 100% rename from data/shaders/debugmarker/postprocess.frag.spv rename to data/shaders/glsl/debugmarker/postprocess.frag.spv diff --git a/data/shaders/debugmarker/postprocess.vert b/data/shaders/glsl/debugmarker/postprocess.vert similarity index 100% rename from data/shaders/debugmarker/postprocess.vert rename to data/shaders/glsl/debugmarker/postprocess.vert diff --git a/data/shaders/debugmarker/postprocess.vert.spv b/data/shaders/glsl/debugmarker/postprocess.vert.spv similarity index 100% rename from data/shaders/debugmarker/postprocess.vert.spv rename to data/shaders/glsl/debugmarker/postprocess.vert.spv diff --git a/data/shaders/debugmarker/toon.frag b/data/shaders/glsl/debugmarker/toon.frag similarity index 100% rename from data/shaders/debugmarker/toon.frag rename to data/shaders/glsl/debugmarker/toon.frag diff --git a/data/shaders/debugmarker/toon.frag.spv b/data/shaders/glsl/debugmarker/toon.frag.spv similarity index 100% rename from data/shaders/debugmarker/toon.frag.spv rename to data/shaders/glsl/debugmarker/toon.frag.spv diff --git a/data/shaders/debugmarker/toon.vert b/data/shaders/glsl/debugmarker/toon.vert similarity index 100% rename from data/shaders/debugmarker/toon.vert rename to data/shaders/glsl/debugmarker/toon.vert diff --git a/data/shaders/debugmarker/toon.vert.spv b/data/shaders/glsl/debugmarker/toon.vert.spv similarity index 100% rename from data/shaders/debugmarker/toon.vert.spv rename to data/shaders/glsl/debugmarker/toon.vert.spv diff --git a/data/shaders/deferred/debug.frag b/data/shaders/glsl/deferred/debug.frag similarity index 100% rename from data/shaders/deferred/debug.frag rename to data/shaders/glsl/deferred/debug.frag diff --git a/data/shaders/deferred/debug.frag.spv b/data/shaders/glsl/deferred/debug.frag.spv similarity index 100% rename from data/shaders/deferred/debug.frag.spv rename to data/shaders/glsl/deferred/debug.frag.spv diff --git a/data/shaders/deferred/debug.vert b/data/shaders/glsl/deferred/debug.vert similarity index 100% rename from data/shaders/deferred/debug.vert rename to data/shaders/glsl/deferred/debug.vert diff --git a/data/shaders/deferred/debug.vert.spv b/data/shaders/glsl/deferred/debug.vert.spv similarity index 100% rename from data/shaders/deferred/debug.vert.spv rename to data/shaders/glsl/deferred/debug.vert.spv diff --git a/data/shaders/deferred/deferred.frag b/data/shaders/glsl/deferred/deferred.frag similarity index 100% rename from data/shaders/deferred/deferred.frag rename to data/shaders/glsl/deferred/deferred.frag diff --git a/data/shaders/deferred/deferred.frag.spv b/data/shaders/glsl/deferred/deferred.frag.spv similarity index 100% rename from data/shaders/deferred/deferred.frag.spv rename to data/shaders/glsl/deferred/deferred.frag.spv diff --git a/data/shaders/deferred/deferred.vert b/data/shaders/glsl/deferred/deferred.vert similarity index 100% rename from data/shaders/deferred/deferred.vert rename to data/shaders/glsl/deferred/deferred.vert diff --git a/data/shaders/deferred/deferred.vert.spv b/data/shaders/glsl/deferred/deferred.vert.spv similarity index 100% rename from data/shaders/deferred/deferred.vert.spv rename to data/shaders/glsl/deferred/deferred.vert.spv diff --git a/data/shaders/deferred/generate-spirv.bat b/data/shaders/glsl/deferred/generate-spirv.bat similarity index 100% rename from data/shaders/deferred/generate-spirv.bat rename to data/shaders/glsl/deferred/generate-spirv.bat diff --git a/data/shaders/deferred/mrt.frag b/data/shaders/glsl/deferred/mrt.frag similarity index 100% rename from data/shaders/deferred/mrt.frag rename to data/shaders/glsl/deferred/mrt.frag diff --git a/data/shaders/deferred/mrt.frag.spv b/data/shaders/glsl/deferred/mrt.frag.spv similarity index 100% rename from data/shaders/deferred/mrt.frag.spv rename to data/shaders/glsl/deferred/mrt.frag.spv diff --git a/data/shaders/deferred/mrt.vert b/data/shaders/glsl/deferred/mrt.vert similarity index 100% rename from data/shaders/deferred/mrt.vert rename to data/shaders/glsl/deferred/mrt.vert diff --git a/data/shaders/deferred/mrt.vert.spv b/data/shaders/glsl/deferred/mrt.vert.spv similarity index 100% rename from data/shaders/deferred/mrt.vert.spv rename to data/shaders/glsl/deferred/mrt.vert.spv diff --git a/data/shaders/deferredmultisampling/debug.frag b/data/shaders/glsl/deferredmultisampling/debug.frag similarity index 100% rename from data/shaders/deferredmultisampling/debug.frag rename to data/shaders/glsl/deferredmultisampling/debug.frag diff --git a/data/shaders/deferredmultisampling/debug.frag.spv b/data/shaders/glsl/deferredmultisampling/debug.frag.spv similarity index 100% rename from data/shaders/deferredmultisampling/debug.frag.spv rename to data/shaders/glsl/deferredmultisampling/debug.frag.spv diff --git a/data/shaders/deferredmultisampling/debug.vert b/data/shaders/glsl/deferredmultisampling/debug.vert similarity index 100% rename from data/shaders/deferredmultisampling/debug.vert rename to data/shaders/glsl/deferredmultisampling/debug.vert diff --git a/data/shaders/deferredmultisampling/debug.vert.spv b/data/shaders/glsl/deferredmultisampling/debug.vert.spv similarity index 100% rename from data/shaders/deferredmultisampling/debug.vert.spv rename to data/shaders/glsl/deferredmultisampling/debug.vert.spv diff --git a/data/shaders/deferredmultisampling/deferred.frag b/data/shaders/glsl/deferredmultisampling/deferred.frag similarity index 100% rename from data/shaders/deferredmultisampling/deferred.frag rename to data/shaders/glsl/deferredmultisampling/deferred.frag diff --git a/data/shaders/deferredmultisampling/deferred.frag.spv b/data/shaders/glsl/deferredmultisampling/deferred.frag.spv similarity index 100% rename from data/shaders/deferredmultisampling/deferred.frag.spv rename to data/shaders/glsl/deferredmultisampling/deferred.frag.spv diff --git a/data/shaders/deferredmultisampling/deferred.vert b/data/shaders/glsl/deferredmultisampling/deferred.vert similarity index 100% rename from data/shaders/deferredmultisampling/deferred.vert rename to data/shaders/glsl/deferredmultisampling/deferred.vert diff --git a/data/shaders/deferredmultisampling/deferred.vert.spv b/data/shaders/glsl/deferredmultisampling/deferred.vert.spv similarity index 100% rename from data/shaders/deferredmultisampling/deferred.vert.spv rename to data/shaders/glsl/deferredmultisampling/deferred.vert.spv diff --git a/data/shaders/deferredmultisampling/mrt.frag b/data/shaders/glsl/deferredmultisampling/mrt.frag similarity index 100% rename from data/shaders/deferredmultisampling/mrt.frag rename to data/shaders/glsl/deferredmultisampling/mrt.frag diff --git a/data/shaders/deferredmultisampling/mrt.frag.spv b/data/shaders/glsl/deferredmultisampling/mrt.frag.spv similarity index 100% rename from data/shaders/deferredmultisampling/mrt.frag.spv rename to data/shaders/glsl/deferredmultisampling/mrt.frag.spv diff --git a/data/shaders/deferredmultisampling/mrt.vert b/data/shaders/glsl/deferredmultisampling/mrt.vert similarity index 100% rename from data/shaders/deferredmultisampling/mrt.vert rename to data/shaders/glsl/deferredmultisampling/mrt.vert diff --git a/data/shaders/deferredmultisampling/mrt.vert.spv b/data/shaders/glsl/deferredmultisampling/mrt.vert.spv similarity index 100% rename from data/shaders/deferredmultisampling/mrt.vert.spv rename to data/shaders/glsl/deferredmultisampling/mrt.vert.spv diff --git a/data/shaders/deferredshadows/debug.frag b/data/shaders/glsl/deferredshadows/debug.frag similarity index 100% rename from data/shaders/deferredshadows/debug.frag rename to data/shaders/glsl/deferredshadows/debug.frag diff --git a/data/shaders/deferredshadows/debug.frag.spv b/data/shaders/glsl/deferredshadows/debug.frag.spv similarity index 100% rename from data/shaders/deferredshadows/debug.frag.spv rename to data/shaders/glsl/deferredshadows/debug.frag.spv diff --git a/data/shaders/deferredshadows/debug.vert b/data/shaders/glsl/deferredshadows/debug.vert similarity index 100% rename from data/shaders/deferredshadows/debug.vert rename to data/shaders/glsl/deferredshadows/debug.vert diff --git a/data/shaders/deferredshadows/debug.vert.spv b/data/shaders/glsl/deferredshadows/debug.vert.spv similarity index 100% rename from data/shaders/deferredshadows/debug.vert.spv rename to data/shaders/glsl/deferredshadows/debug.vert.spv diff --git a/data/shaders/deferredshadows/deferred.frag b/data/shaders/glsl/deferredshadows/deferred.frag similarity index 100% rename from data/shaders/deferredshadows/deferred.frag rename to data/shaders/glsl/deferredshadows/deferred.frag diff --git a/data/shaders/deferredshadows/deferred.frag.spv b/data/shaders/glsl/deferredshadows/deferred.frag.spv similarity index 100% rename from data/shaders/deferredshadows/deferred.frag.spv rename to data/shaders/glsl/deferredshadows/deferred.frag.spv diff --git a/data/shaders/deferredshadows/deferred.vert b/data/shaders/glsl/deferredshadows/deferred.vert similarity index 100% rename from data/shaders/deferredshadows/deferred.vert rename to data/shaders/glsl/deferredshadows/deferred.vert diff --git a/data/shaders/deferredshadows/deferred.vert.spv b/data/shaders/glsl/deferredshadows/deferred.vert.spv similarity index 100% rename from data/shaders/deferredshadows/deferred.vert.spv rename to data/shaders/glsl/deferredshadows/deferred.vert.spv diff --git a/data/shaders/deferredshadows/generate-spirv.bat b/data/shaders/glsl/deferredshadows/generate-spirv.bat similarity index 100% rename from data/shaders/deferredshadows/generate-spirv.bat rename to data/shaders/glsl/deferredshadows/generate-spirv.bat diff --git a/data/shaders/deferredshadows/geom.spv b/data/shaders/glsl/deferredshadows/geom.spv similarity index 100% rename from data/shaders/deferredshadows/geom.spv rename to data/shaders/glsl/deferredshadows/geom.spv diff --git a/data/shaders/deferredshadows/mrt.frag b/data/shaders/glsl/deferredshadows/mrt.frag similarity index 100% rename from data/shaders/deferredshadows/mrt.frag rename to data/shaders/glsl/deferredshadows/mrt.frag diff --git a/data/shaders/deferredshadows/mrt.frag.spv b/data/shaders/glsl/deferredshadows/mrt.frag.spv similarity index 100% rename from data/shaders/deferredshadows/mrt.frag.spv rename to data/shaders/glsl/deferredshadows/mrt.frag.spv diff --git a/data/shaders/deferredshadows/mrt.vert b/data/shaders/glsl/deferredshadows/mrt.vert similarity index 100% rename from data/shaders/deferredshadows/mrt.vert rename to data/shaders/glsl/deferredshadows/mrt.vert diff --git a/data/shaders/deferredshadows/mrt.vert.spv b/data/shaders/glsl/deferredshadows/mrt.vert.spv similarity index 100% rename from data/shaders/deferredshadows/mrt.vert.spv rename to data/shaders/glsl/deferredshadows/mrt.vert.spv diff --git a/data/shaders/deferredshadows/shadow.geom b/data/shaders/glsl/deferredshadows/shadow.geom similarity index 100% rename from data/shaders/deferredshadows/shadow.geom rename to data/shaders/glsl/deferredshadows/shadow.geom diff --git a/data/shaders/deferredshadows/shadow.geom.spv b/data/shaders/glsl/deferredshadows/shadow.geom.spv similarity index 100% rename from data/shaders/deferredshadows/shadow.geom.spv rename to data/shaders/glsl/deferredshadows/shadow.geom.spv diff --git a/data/shaders/deferredshadows/shadow.vert b/data/shaders/glsl/deferredshadows/shadow.vert similarity index 100% rename from data/shaders/deferredshadows/shadow.vert rename to data/shaders/glsl/deferredshadows/shadow.vert diff --git a/data/shaders/deferredshadows/shadow.vert.spv b/data/shaders/glsl/deferredshadows/shadow.vert.spv similarity index 100% rename from data/shaders/deferredshadows/shadow.vert.spv rename to data/shaders/glsl/deferredshadows/shadow.vert.spv diff --git a/data/shaders/descriptorindexing/descriptorindexing.frag b/data/shaders/glsl/descriptorindexing/descriptorindexing.frag similarity index 100% rename from data/shaders/descriptorindexing/descriptorindexing.frag rename to data/shaders/glsl/descriptorindexing/descriptorindexing.frag diff --git a/data/shaders/descriptorindexing/descriptorindexing.frag.spv b/data/shaders/glsl/descriptorindexing/descriptorindexing.frag.spv similarity index 100% rename from data/shaders/descriptorindexing/descriptorindexing.frag.spv rename to data/shaders/glsl/descriptorindexing/descriptorindexing.frag.spv diff --git a/data/shaders/descriptorindexing/descriptorindexing.vert b/data/shaders/glsl/descriptorindexing/descriptorindexing.vert similarity index 100% rename from data/shaders/descriptorindexing/descriptorindexing.vert rename to data/shaders/glsl/descriptorindexing/descriptorindexing.vert diff --git a/data/shaders/descriptorindexing/descriptorindexing.vert.spv b/data/shaders/glsl/descriptorindexing/descriptorindexing.vert.spv similarity index 100% rename from data/shaders/descriptorindexing/descriptorindexing.vert.spv rename to data/shaders/glsl/descriptorindexing/descriptorindexing.vert.spv diff --git a/data/shaders/descriptorsets/cube.frag b/data/shaders/glsl/descriptorsets/cube.frag similarity index 100% rename from data/shaders/descriptorsets/cube.frag rename to data/shaders/glsl/descriptorsets/cube.frag diff --git a/data/shaders/descriptorsets/cube.frag.spv b/data/shaders/glsl/descriptorsets/cube.frag.spv similarity index 100% rename from data/shaders/descriptorsets/cube.frag.spv rename to data/shaders/glsl/descriptorsets/cube.frag.spv diff --git a/data/shaders/descriptorsets/cube.vert b/data/shaders/glsl/descriptorsets/cube.vert similarity index 100% rename from data/shaders/descriptorsets/cube.vert rename to data/shaders/glsl/descriptorsets/cube.vert diff --git a/data/shaders/descriptorsets/cube.vert.spv b/data/shaders/glsl/descriptorsets/cube.vert.spv similarity index 100% rename from data/shaders/descriptorsets/cube.vert.spv rename to data/shaders/glsl/descriptorsets/cube.vert.spv diff --git a/data/shaders/displacement/base.frag b/data/shaders/glsl/displacement/base.frag similarity index 100% rename from data/shaders/displacement/base.frag rename to data/shaders/glsl/displacement/base.frag diff --git a/data/shaders/displacement/base.frag.spv b/data/shaders/glsl/displacement/base.frag.spv similarity index 100% rename from data/shaders/displacement/base.frag.spv rename to data/shaders/glsl/displacement/base.frag.spv diff --git a/data/shaders/displacement/base.vert b/data/shaders/glsl/displacement/base.vert similarity index 100% rename from data/shaders/displacement/base.vert rename to data/shaders/glsl/displacement/base.vert diff --git a/data/shaders/displacement/base.vert.spv b/data/shaders/glsl/displacement/base.vert.spv similarity index 100% rename from data/shaders/displacement/base.vert.spv rename to data/shaders/glsl/displacement/base.vert.spv diff --git a/data/shaders/displacement/displacement.tesc b/data/shaders/glsl/displacement/displacement.tesc similarity index 100% rename from data/shaders/displacement/displacement.tesc rename to data/shaders/glsl/displacement/displacement.tesc diff --git a/data/shaders/displacement/displacement.tesc.spv b/data/shaders/glsl/displacement/displacement.tesc.spv similarity index 100% rename from data/shaders/displacement/displacement.tesc.spv rename to data/shaders/glsl/displacement/displacement.tesc.spv diff --git a/data/shaders/displacement/displacement.tese b/data/shaders/glsl/displacement/displacement.tese similarity index 100% rename from data/shaders/displacement/displacement.tese rename to data/shaders/glsl/displacement/displacement.tese diff --git a/data/shaders/displacement/displacement.tese.spv b/data/shaders/glsl/displacement/displacement.tese.spv similarity index 100% rename from data/shaders/displacement/displacement.tese.spv rename to data/shaders/glsl/displacement/displacement.tese.spv diff --git a/data/shaders/displacement/generate-spirv.bat b/data/shaders/glsl/displacement/generate-spirv.bat similarity index 100% rename from data/shaders/displacement/generate-spirv.bat rename to data/shaders/glsl/displacement/generate-spirv.bat diff --git a/data/shaders/distancefieldfonts/bitmap.frag b/data/shaders/glsl/distancefieldfonts/bitmap.frag similarity index 100% rename from data/shaders/distancefieldfonts/bitmap.frag rename to data/shaders/glsl/distancefieldfonts/bitmap.frag diff --git a/data/shaders/distancefieldfonts/bitmap.frag.spv b/data/shaders/glsl/distancefieldfonts/bitmap.frag.spv similarity index 100% rename from data/shaders/distancefieldfonts/bitmap.frag.spv rename to data/shaders/glsl/distancefieldfonts/bitmap.frag.spv diff --git a/data/shaders/distancefieldfonts/bitmap.vert b/data/shaders/glsl/distancefieldfonts/bitmap.vert similarity index 100% rename from data/shaders/distancefieldfonts/bitmap.vert rename to data/shaders/glsl/distancefieldfonts/bitmap.vert diff --git a/data/shaders/distancefieldfonts/bitmap.vert.spv b/data/shaders/glsl/distancefieldfonts/bitmap.vert.spv similarity index 100% rename from data/shaders/distancefieldfonts/bitmap.vert.spv rename to data/shaders/glsl/distancefieldfonts/bitmap.vert.spv diff --git a/data/shaders/distancefieldfonts/generate-spirv.bat b/data/shaders/glsl/distancefieldfonts/generate-spirv.bat similarity index 100% rename from data/shaders/distancefieldfonts/generate-spirv.bat rename to data/shaders/glsl/distancefieldfonts/generate-spirv.bat diff --git a/data/shaders/distancefieldfonts/sdf.frag b/data/shaders/glsl/distancefieldfonts/sdf.frag similarity index 100% rename from data/shaders/distancefieldfonts/sdf.frag rename to data/shaders/glsl/distancefieldfonts/sdf.frag diff --git a/data/shaders/distancefieldfonts/sdf.frag.spv b/data/shaders/glsl/distancefieldfonts/sdf.frag.spv similarity index 100% rename from data/shaders/distancefieldfonts/sdf.frag.spv rename to data/shaders/glsl/distancefieldfonts/sdf.frag.spv diff --git a/data/shaders/distancefieldfonts/sdf.vert b/data/shaders/glsl/distancefieldfonts/sdf.vert similarity index 100% rename from data/shaders/distancefieldfonts/sdf.vert rename to data/shaders/glsl/distancefieldfonts/sdf.vert diff --git a/data/shaders/distancefieldfonts/sdf.vert.spv b/data/shaders/glsl/distancefieldfonts/sdf.vert.spv similarity index 100% rename from data/shaders/distancefieldfonts/sdf.vert.spv rename to data/shaders/glsl/distancefieldfonts/sdf.vert.spv diff --git a/data/shaders/dynamicuniformbuffer/base.frag b/data/shaders/glsl/dynamicuniformbuffer/base.frag similarity index 100% rename from data/shaders/dynamicuniformbuffer/base.frag rename to data/shaders/glsl/dynamicuniformbuffer/base.frag diff --git a/data/shaders/dynamicuniformbuffer/base.frag.spv b/data/shaders/glsl/dynamicuniformbuffer/base.frag.spv similarity index 100% rename from data/shaders/dynamicuniformbuffer/base.frag.spv rename to data/shaders/glsl/dynamicuniformbuffer/base.frag.spv diff --git a/data/shaders/dynamicuniformbuffer/base.vert b/data/shaders/glsl/dynamicuniformbuffer/base.vert similarity index 100% rename from data/shaders/dynamicuniformbuffer/base.vert rename to data/shaders/glsl/dynamicuniformbuffer/base.vert diff --git a/data/shaders/dynamicuniformbuffer/base.vert.spv b/data/shaders/glsl/dynamicuniformbuffer/base.vert.spv similarity index 100% rename from data/shaders/dynamicuniformbuffer/base.vert.spv rename to data/shaders/glsl/dynamicuniformbuffer/base.vert.spv diff --git a/data/shaders/gears/gears.frag b/data/shaders/glsl/gears/gears.frag similarity index 100% rename from data/shaders/gears/gears.frag rename to data/shaders/glsl/gears/gears.frag diff --git a/data/shaders/gears/gears.frag.spv b/data/shaders/glsl/gears/gears.frag.spv similarity index 100% rename from data/shaders/gears/gears.frag.spv rename to data/shaders/glsl/gears/gears.frag.spv diff --git a/data/shaders/gears/gears.vert b/data/shaders/glsl/gears/gears.vert similarity index 100% rename from data/shaders/gears/gears.vert rename to data/shaders/glsl/gears/gears.vert diff --git a/data/shaders/gears/gears.vert.spv b/data/shaders/glsl/gears/gears.vert.spv similarity index 100% rename from data/shaders/gears/gears.vert.spv rename to data/shaders/glsl/gears/gears.vert.spv diff --git a/data/shaders/geometryshader/base.frag b/data/shaders/glsl/geometryshader/base.frag similarity index 100% rename from data/shaders/geometryshader/base.frag rename to data/shaders/glsl/geometryshader/base.frag diff --git a/data/shaders/geometryshader/base.frag.spv b/data/shaders/glsl/geometryshader/base.frag.spv similarity index 100% rename from data/shaders/geometryshader/base.frag.spv rename to data/shaders/glsl/geometryshader/base.frag.spv diff --git a/data/shaders/geometryshader/base.vert b/data/shaders/glsl/geometryshader/base.vert similarity index 100% rename from data/shaders/geometryshader/base.vert rename to data/shaders/glsl/geometryshader/base.vert diff --git a/data/shaders/geometryshader/base.vert.spv b/data/shaders/glsl/geometryshader/base.vert.spv similarity index 100% rename from data/shaders/geometryshader/base.vert.spv rename to data/shaders/glsl/geometryshader/base.vert.spv diff --git a/data/shaders/geometryshader/generate-spirv.bat b/data/shaders/glsl/geometryshader/generate-spirv.bat similarity index 100% rename from data/shaders/geometryshader/generate-spirv.bat rename to data/shaders/glsl/geometryshader/generate-spirv.bat diff --git a/data/shaders/geometryshader/mesh.frag b/data/shaders/glsl/geometryshader/mesh.frag similarity index 100% rename from data/shaders/geometryshader/mesh.frag rename to data/shaders/glsl/geometryshader/mesh.frag diff --git a/data/shaders/geometryshader/mesh.frag.spv b/data/shaders/glsl/geometryshader/mesh.frag.spv similarity index 100% rename from data/shaders/geometryshader/mesh.frag.spv rename to data/shaders/glsl/geometryshader/mesh.frag.spv diff --git a/data/shaders/geometryshader/mesh.vert b/data/shaders/glsl/geometryshader/mesh.vert similarity index 100% rename from data/shaders/geometryshader/mesh.vert rename to data/shaders/glsl/geometryshader/mesh.vert diff --git a/data/shaders/geometryshader/mesh.vert.spv b/data/shaders/glsl/geometryshader/mesh.vert.spv similarity index 100% rename from data/shaders/geometryshader/mesh.vert.spv rename to data/shaders/glsl/geometryshader/mesh.vert.spv diff --git a/data/shaders/geometryshader/normaldebug.geom b/data/shaders/glsl/geometryshader/normaldebug.geom similarity index 100% rename from data/shaders/geometryshader/normaldebug.geom rename to data/shaders/glsl/geometryshader/normaldebug.geom diff --git a/data/shaders/geometryshader/normaldebug.geom.spv b/data/shaders/glsl/geometryshader/normaldebug.geom.spv similarity index 100% rename from data/shaders/geometryshader/normaldebug.geom.spv rename to data/shaders/glsl/geometryshader/normaldebug.geom.spv diff --git a/data/shaders/gltfscene/mesh.frag b/data/shaders/glsl/gltfscene/mesh.frag similarity index 100% rename from data/shaders/gltfscene/mesh.frag rename to data/shaders/glsl/gltfscene/mesh.frag diff --git a/data/shaders/gltfscene/mesh.frag.spv b/data/shaders/glsl/gltfscene/mesh.frag.spv similarity index 100% rename from data/shaders/gltfscene/mesh.frag.spv rename to data/shaders/glsl/gltfscene/mesh.frag.spv diff --git a/data/shaders/gltfscene/mesh.vert b/data/shaders/glsl/gltfscene/mesh.vert similarity index 100% rename from data/shaders/gltfscene/mesh.vert rename to data/shaders/glsl/gltfscene/mesh.vert diff --git a/data/shaders/gltfscene/mesh.vert.spv b/data/shaders/glsl/gltfscene/mesh.vert.spv similarity index 100% rename from data/shaders/gltfscene/mesh.vert.spv rename to data/shaders/glsl/gltfscene/mesh.vert.spv diff --git a/data/shaders/hdr/bloom.frag b/data/shaders/glsl/hdr/bloom.frag similarity index 100% rename from data/shaders/hdr/bloom.frag rename to data/shaders/glsl/hdr/bloom.frag diff --git a/data/shaders/hdr/bloom.frag.spv b/data/shaders/glsl/hdr/bloom.frag.spv similarity index 100% rename from data/shaders/hdr/bloom.frag.spv rename to data/shaders/glsl/hdr/bloom.frag.spv diff --git a/data/shaders/hdr/bloom.vert b/data/shaders/glsl/hdr/bloom.vert similarity index 100% rename from data/shaders/hdr/bloom.vert rename to data/shaders/glsl/hdr/bloom.vert diff --git a/data/shaders/hdr/bloom.vert.spv b/data/shaders/glsl/hdr/bloom.vert.spv similarity index 100% rename from data/shaders/hdr/bloom.vert.spv rename to data/shaders/glsl/hdr/bloom.vert.spv diff --git a/data/shaders/hdr/composition.frag b/data/shaders/glsl/hdr/composition.frag similarity index 100% rename from data/shaders/hdr/composition.frag rename to data/shaders/glsl/hdr/composition.frag diff --git a/data/shaders/hdr/composition.frag.spv b/data/shaders/glsl/hdr/composition.frag.spv similarity index 100% rename from data/shaders/hdr/composition.frag.spv rename to data/shaders/glsl/hdr/composition.frag.spv diff --git a/data/shaders/hdr/composition.vert b/data/shaders/glsl/hdr/composition.vert similarity index 100% rename from data/shaders/hdr/composition.vert rename to data/shaders/glsl/hdr/composition.vert diff --git a/data/shaders/hdr/composition.vert.spv b/data/shaders/glsl/hdr/composition.vert.spv similarity index 100% rename from data/shaders/hdr/composition.vert.spv rename to data/shaders/glsl/hdr/composition.vert.spv diff --git a/data/shaders/hdr/gbuffer.frag b/data/shaders/glsl/hdr/gbuffer.frag similarity index 100% rename from data/shaders/hdr/gbuffer.frag rename to data/shaders/glsl/hdr/gbuffer.frag diff --git a/data/shaders/hdr/gbuffer.frag.spv b/data/shaders/glsl/hdr/gbuffer.frag.spv similarity index 100% rename from data/shaders/hdr/gbuffer.frag.spv rename to data/shaders/glsl/hdr/gbuffer.frag.spv diff --git a/data/shaders/hdr/gbuffer.vert b/data/shaders/glsl/hdr/gbuffer.vert similarity index 100% rename from data/shaders/hdr/gbuffer.vert rename to data/shaders/glsl/hdr/gbuffer.vert diff --git a/data/shaders/hdr/gbuffer.vert.spv b/data/shaders/glsl/hdr/gbuffer.vert.spv similarity index 100% rename from data/shaders/hdr/gbuffer.vert.spv rename to data/shaders/glsl/hdr/gbuffer.vert.spv diff --git a/data/shaders/imgui/scene.frag b/data/shaders/glsl/imgui/scene.frag similarity index 100% rename from data/shaders/imgui/scene.frag rename to data/shaders/glsl/imgui/scene.frag diff --git a/data/shaders/imgui/scene.frag.spv b/data/shaders/glsl/imgui/scene.frag.spv similarity index 100% rename from data/shaders/imgui/scene.frag.spv rename to data/shaders/glsl/imgui/scene.frag.spv diff --git a/data/shaders/imgui/scene.vert b/data/shaders/glsl/imgui/scene.vert similarity index 100% rename from data/shaders/imgui/scene.vert rename to data/shaders/glsl/imgui/scene.vert diff --git a/data/shaders/imgui/scene.vert.spv b/data/shaders/glsl/imgui/scene.vert.spv similarity index 100% rename from data/shaders/imgui/scene.vert.spv rename to data/shaders/glsl/imgui/scene.vert.spv diff --git a/data/shaders/imgui/ui.frag b/data/shaders/glsl/imgui/ui.frag similarity index 100% rename from data/shaders/imgui/ui.frag rename to data/shaders/glsl/imgui/ui.frag diff --git a/data/shaders/imgui/ui.frag.spv b/data/shaders/glsl/imgui/ui.frag.spv similarity index 100% rename from data/shaders/imgui/ui.frag.spv rename to data/shaders/glsl/imgui/ui.frag.spv diff --git a/data/shaders/imgui/ui.vert b/data/shaders/glsl/imgui/ui.vert similarity index 100% rename from data/shaders/imgui/ui.vert rename to data/shaders/glsl/imgui/ui.vert diff --git a/data/shaders/imgui/ui.vert.spv b/data/shaders/glsl/imgui/ui.vert.spv similarity index 100% rename from data/shaders/imgui/ui.vert.spv rename to data/shaders/glsl/imgui/ui.vert.spv diff --git a/data/shaders/indirectdraw/generate-spirv.bat b/data/shaders/glsl/indirectdraw/generate-spirv.bat similarity index 100% rename from data/shaders/indirectdraw/generate-spirv.bat rename to data/shaders/glsl/indirectdraw/generate-spirv.bat diff --git a/data/shaders/indirectdraw/ground.frag b/data/shaders/glsl/indirectdraw/ground.frag similarity index 100% rename from data/shaders/indirectdraw/ground.frag rename to data/shaders/glsl/indirectdraw/ground.frag diff --git a/data/shaders/indirectdraw/ground.frag.spv b/data/shaders/glsl/indirectdraw/ground.frag.spv similarity index 100% rename from data/shaders/indirectdraw/ground.frag.spv rename to data/shaders/glsl/indirectdraw/ground.frag.spv diff --git a/data/shaders/indirectdraw/ground.vert b/data/shaders/glsl/indirectdraw/ground.vert similarity index 100% rename from data/shaders/indirectdraw/ground.vert rename to data/shaders/glsl/indirectdraw/ground.vert diff --git a/data/shaders/indirectdraw/ground.vert.spv b/data/shaders/glsl/indirectdraw/ground.vert.spv similarity index 100% rename from data/shaders/indirectdraw/ground.vert.spv rename to data/shaders/glsl/indirectdraw/ground.vert.spv diff --git a/data/shaders/indirectdraw/indirectdraw.frag b/data/shaders/glsl/indirectdraw/indirectdraw.frag similarity index 100% rename from data/shaders/indirectdraw/indirectdraw.frag rename to data/shaders/glsl/indirectdraw/indirectdraw.frag diff --git a/data/shaders/indirectdraw/indirectdraw.frag.spv b/data/shaders/glsl/indirectdraw/indirectdraw.frag.spv similarity index 100% rename from data/shaders/indirectdraw/indirectdraw.frag.spv rename to data/shaders/glsl/indirectdraw/indirectdraw.frag.spv diff --git a/data/shaders/indirectdraw/indirectdraw.vert b/data/shaders/glsl/indirectdraw/indirectdraw.vert similarity index 100% rename from data/shaders/indirectdraw/indirectdraw.vert rename to data/shaders/glsl/indirectdraw/indirectdraw.vert diff --git a/data/shaders/indirectdraw/indirectdraw.vert.spv b/data/shaders/glsl/indirectdraw/indirectdraw.vert.spv similarity index 100% rename from data/shaders/indirectdraw/indirectdraw.vert.spv rename to data/shaders/glsl/indirectdraw/indirectdraw.vert.spv diff --git a/data/shaders/indirectdraw/skysphere.frag b/data/shaders/glsl/indirectdraw/skysphere.frag similarity index 100% rename from data/shaders/indirectdraw/skysphere.frag rename to data/shaders/glsl/indirectdraw/skysphere.frag diff --git a/data/shaders/indirectdraw/skysphere.frag.spv b/data/shaders/glsl/indirectdraw/skysphere.frag.spv similarity index 100% rename from data/shaders/indirectdraw/skysphere.frag.spv rename to data/shaders/glsl/indirectdraw/skysphere.frag.spv diff --git a/data/shaders/indirectdraw/skysphere.vert b/data/shaders/glsl/indirectdraw/skysphere.vert similarity index 100% rename from data/shaders/indirectdraw/skysphere.vert rename to data/shaders/glsl/indirectdraw/skysphere.vert diff --git a/data/shaders/indirectdraw/skysphere.vert.spv b/data/shaders/glsl/indirectdraw/skysphere.vert.spv similarity index 100% rename from data/shaders/indirectdraw/skysphere.vert.spv rename to data/shaders/glsl/indirectdraw/skysphere.vert.spv diff --git a/data/shaders/inlineuniformblocks/pbr.frag b/data/shaders/glsl/inlineuniformblocks/pbr.frag similarity index 100% rename from data/shaders/inlineuniformblocks/pbr.frag rename to data/shaders/glsl/inlineuniformblocks/pbr.frag diff --git a/data/shaders/inlineuniformblocks/pbr.frag.spv b/data/shaders/glsl/inlineuniformblocks/pbr.frag.spv similarity index 100% rename from data/shaders/inlineuniformblocks/pbr.frag.spv rename to data/shaders/glsl/inlineuniformblocks/pbr.frag.spv diff --git a/data/shaders/inlineuniformblocks/pbr.vert b/data/shaders/glsl/inlineuniformblocks/pbr.vert similarity index 100% rename from data/shaders/inlineuniformblocks/pbr.vert rename to data/shaders/glsl/inlineuniformblocks/pbr.vert diff --git a/data/shaders/inlineuniformblocks/pbr.vert.spv b/data/shaders/glsl/inlineuniformblocks/pbr.vert.spv similarity index 100% rename from data/shaders/inlineuniformblocks/pbr.vert.spv rename to data/shaders/glsl/inlineuniformblocks/pbr.vert.spv diff --git a/data/shaders/inputattachments/attachmentread.frag b/data/shaders/glsl/inputattachments/attachmentread.frag similarity index 100% rename from data/shaders/inputattachments/attachmentread.frag rename to data/shaders/glsl/inputattachments/attachmentread.frag diff --git a/data/shaders/inputattachments/attachmentread.frag.spv b/data/shaders/glsl/inputattachments/attachmentread.frag.spv similarity index 100% rename from data/shaders/inputattachments/attachmentread.frag.spv rename to data/shaders/glsl/inputattachments/attachmentread.frag.spv diff --git a/data/shaders/inputattachments/attachmentread.vert b/data/shaders/glsl/inputattachments/attachmentread.vert similarity index 100% rename from data/shaders/inputattachments/attachmentread.vert rename to data/shaders/glsl/inputattachments/attachmentread.vert diff --git a/data/shaders/inputattachments/attachmentread.vert.spv b/data/shaders/glsl/inputattachments/attachmentread.vert.spv similarity index 100% rename from data/shaders/inputattachments/attachmentread.vert.spv rename to data/shaders/glsl/inputattachments/attachmentread.vert.spv diff --git a/data/shaders/inputattachments/attachmentwrite.frag b/data/shaders/glsl/inputattachments/attachmentwrite.frag similarity index 100% rename from data/shaders/inputattachments/attachmentwrite.frag rename to data/shaders/glsl/inputattachments/attachmentwrite.frag diff --git a/data/shaders/inputattachments/attachmentwrite.frag.spv b/data/shaders/glsl/inputattachments/attachmentwrite.frag.spv similarity index 100% rename from data/shaders/inputattachments/attachmentwrite.frag.spv rename to data/shaders/glsl/inputattachments/attachmentwrite.frag.spv diff --git a/data/shaders/inputattachments/attachmentwrite.vert b/data/shaders/glsl/inputattachments/attachmentwrite.vert similarity index 100% rename from data/shaders/inputattachments/attachmentwrite.vert rename to data/shaders/glsl/inputattachments/attachmentwrite.vert diff --git a/data/shaders/inputattachments/attachmentwrite.vert.spv b/data/shaders/glsl/inputattachments/attachmentwrite.vert.spv similarity index 100% rename from data/shaders/inputattachments/attachmentwrite.vert.spv rename to data/shaders/glsl/inputattachments/attachmentwrite.vert.spv diff --git a/data/shaders/instancing/generate-spirv.bat b/data/shaders/glsl/instancing/generate-spirv.bat similarity index 100% rename from data/shaders/instancing/generate-spirv.bat rename to data/shaders/glsl/instancing/generate-spirv.bat diff --git a/data/shaders/instancing/instancing.frag b/data/shaders/glsl/instancing/instancing.frag similarity index 100% rename from data/shaders/instancing/instancing.frag rename to data/shaders/glsl/instancing/instancing.frag diff --git a/data/shaders/instancing/instancing.frag.spv b/data/shaders/glsl/instancing/instancing.frag.spv similarity index 100% rename from data/shaders/instancing/instancing.frag.spv rename to data/shaders/glsl/instancing/instancing.frag.spv diff --git a/data/shaders/instancing/instancing.vert b/data/shaders/glsl/instancing/instancing.vert similarity index 100% rename from data/shaders/instancing/instancing.vert rename to data/shaders/glsl/instancing/instancing.vert diff --git a/data/shaders/instancing/instancing.vert.spv b/data/shaders/glsl/instancing/instancing.vert.spv similarity index 100% rename from data/shaders/instancing/instancing.vert.spv rename to data/shaders/glsl/instancing/instancing.vert.spv diff --git a/data/shaders/instancing/planet.frag b/data/shaders/glsl/instancing/planet.frag similarity index 100% rename from data/shaders/instancing/planet.frag rename to data/shaders/glsl/instancing/planet.frag diff --git a/data/shaders/instancing/planet.frag.spv b/data/shaders/glsl/instancing/planet.frag.spv similarity index 100% rename from data/shaders/instancing/planet.frag.spv rename to data/shaders/glsl/instancing/planet.frag.spv diff --git a/data/shaders/instancing/planet.vert b/data/shaders/glsl/instancing/planet.vert similarity index 100% rename from data/shaders/instancing/planet.vert rename to data/shaders/glsl/instancing/planet.vert diff --git a/data/shaders/instancing/planet.vert.spv b/data/shaders/glsl/instancing/planet.vert.spv similarity index 100% rename from data/shaders/instancing/planet.vert.spv rename to data/shaders/glsl/instancing/planet.vert.spv diff --git a/data/shaders/instancing/starfield.frag b/data/shaders/glsl/instancing/starfield.frag similarity index 100% rename from data/shaders/instancing/starfield.frag rename to data/shaders/glsl/instancing/starfield.frag diff --git a/data/shaders/instancing/starfield.frag.spv b/data/shaders/glsl/instancing/starfield.frag.spv similarity index 100% rename from data/shaders/instancing/starfield.frag.spv rename to data/shaders/glsl/instancing/starfield.frag.spv diff --git a/data/shaders/instancing/starfield.vert b/data/shaders/glsl/instancing/starfield.vert similarity index 100% rename from data/shaders/instancing/starfield.vert rename to data/shaders/glsl/instancing/starfield.vert diff --git a/data/shaders/instancing/starfield.vert.spv b/data/shaders/glsl/instancing/starfield.vert.spv similarity index 100% rename from data/shaders/instancing/starfield.vert.spv rename to data/shaders/glsl/instancing/starfield.vert.spv diff --git a/data/shaders/multisampling/mesh.frag b/data/shaders/glsl/multisampling/mesh.frag similarity index 100% rename from data/shaders/multisampling/mesh.frag rename to data/shaders/glsl/multisampling/mesh.frag diff --git a/data/shaders/multisampling/mesh.frag.spv b/data/shaders/glsl/multisampling/mesh.frag.spv similarity index 100% rename from data/shaders/multisampling/mesh.frag.spv rename to data/shaders/glsl/multisampling/mesh.frag.spv diff --git a/data/shaders/multisampling/mesh.vert b/data/shaders/glsl/multisampling/mesh.vert similarity index 100% rename from data/shaders/multisampling/mesh.vert rename to data/shaders/glsl/multisampling/mesh.vert diff --git a/data/shaders/multisampling/mesh.vert.spv b/data/shaders/glsl/multisampling/mesh.vert.spv similarity index 100% rename from data/shaders/multisampling/mesh.vert.spv rename to data/shaders/glsl/multisampling/mesh.vert.spv diff --git a/data/shaders/multithreading/generate-spirv.bat b/data/shaders/glsl/multithreading/generate-spirv.bat similarity index 100% rename from data/shaders/multithreading/generate-spirv.bat rename to data/shaders/glsl/multithreading/generate-spirv.bat diff --git a/data/shaders/multithreading/phong.frag b/data/shaders/glsl/multithreading/phong.frag similarity index 100% rename from data/shaders/multithreading/phong.frag rename to data/shaders/glsl/multithreading/phong.frag diff --git a/data/shaders/multithreading/phong.frag.spv b/data/shaders/glsl/multithreading/phong.frag.spv similarity index 100% rename from data/shaders/multithreading/phong.frag.spv rename to data/shaders/glsl/multithreading/phong.frag.spv diff --git a/data/shaders/multithreading/phong.vert b/data/shaders/glsl/multithreading/phong.vert similarity index 100% rename from data/shaders/multithreading/phong.vert rename to data/shaders/glsl/multithreading/phong.vert diff --git a/data/shaders/multithreading/phong.vert.spv b/data/shaders/glsl/multithreading/phong.vert.spv similarity index 100% rename from data/shaders/multithreading/phong.vert.spv rename to data/shaders/glsl/multithreading/phong.vert.spv diff --git a/data/shaders/multithreading/starsphere.frag b/data/shaders/glsl/multithreading/starsphere.frag similarity index 100% rename from data/shaders/multithreading/starsphere.frag rename to data/shaders/glsl/multithreading/starsphere.frag diff --git a/data/shaders/multithreading/starsphere.frag.spv b/data/shaders/glsl/multithreading/starsphere.frag.spv similarity index 100% rename from data/shaders/multithreading/starsphere.frag.spv rename to data/shaders/glsl/multithreading/starsphere.frag.spv diff --git a/data/shaders/multithreading/starsphere.vert b/data/shaders/glsl/multithreading/starsphere.vert similarity index 100% rename from data/shaders/multithreading/starsphere.vert rename to data/shaders/glsl/multithreading/starsphere.vert diff --git a/data/shaders/multithreading/starsphere.vert.spv b/data/shaders/glsl/multithreading/starsphere.vert.spv similarity index 100% rename from data/shaders/multithreading/starsphere.vert.spv rename to data/shaders/glsl/multithreading/starsphere.vert.spv diff --git a/data/shaders/multiview/multiview.frag b/data/shaders/glsl/multiview/multiview.frag similarity index 100% rename from data/shaders/multiview/multiview.frag rename to data/shaders/glsl/multiview/multiview.frag diff --git a/data/shaders/multiview/multiview.frag.spv b/data/shaders/glsl/multiview/multiview.frag.spv similarity index 100% rename from data/shaders/multiview/multiview.frag.spv rename to data/shaders/glsl/multiview/multiview.frag.spv diff --git a/data/shaders/multiview/multiview.vert b/data/shaders/glsl/multiview/multiview.vert similarity index 100% rename from data/shaders/multiview/multiview.vert rename to data/shaders/glsl/multiview/multiview.vert diff --git a/data/shaders/multiview/multiview.vert.spv b/data/shaders/glsl/multiview/multiview.vert.spv similarity index 100% rename from data/shaders/multiview/multiview.vert.spv rename to data/shaders/glsl/multiview/multiview.vert.spv diff --git a/data/shaders/multiview/viewdisplay.frag b/data/shaders/glsl/multiview/viewdisplay.frag similarity index 100% rename from data/shaders/multiview/viewdisplay.frag rename to data/shaders/glsl/multiview/viewdisplay.frag diff --git a/data/shaders/multiview/viewdisplay.frag.spv b/data/shaders/glsl/multiview/viewdisplay.frag.spv similarity index 100% rename from data/shaders/multiview/viewdisplay.frag.spv rename to data/shaders/glsl/multiview/viewdisplay.frag.spv diff --git a/data/shaders/multiview/viewdisplay.vert b/data/shaders/glsl/multiview/viewdisplay.vert similarity index 100% rename from data/shaders/multiview/viewdisplay.vert rename to data/shaders/glsl/multiview/viewdisplay.vert diff --git a/data/shaders/multiview/viewdisplay.vert.spv b/data/shaders/glsl/multiview/viewdisplay.vert.spv similarity index 100% rename from data/shaders/multiview/viewdisplay.vert.spv rename to data/shaders/glsl/multiview/viewdisplay.vert.spv diff --git a/data/shaders/negativeviewportheight/quad.frag b/data/shaders/glsl/negativeviewportheight/quad.frag similarity index 100% rename from data/shaders/negativeviewportheight/quad.frag rename to data/shaders/glsl/negativeviewportheight/quad.frag diff --git a/data/shaders/negativeviewportheight/quad.frag.spv b/data/shaders/glsl/negativeviewportheight/quad.frag.spv similarity index 100% rename from data/shaders/negativeviewportheight/quad.frag.spv rename to data/shaders/glsl/negativeviewportheight/quad.frag.spv diff --git a/data/shaders/negativeviewportheight/quad.vert b/data/shaders/glsl/negativeviewportheight/quad.vert similarity index 100% rename from data/shaders/negativeviewportheight/quad.vert rename to data/shaders/glsl/negativeviewportheight/quad.vert diff --git a/data/shaders/negativeviewportheight/quad.vert.spv b/data/shaders/glsl/negativeviewportheight/quad.vert.spv similarity index 100% rename from data/shaders/negativeviewportheight/quad.vert.spv rename to data/shaders/glsl/negativeviewportheight/quad.vert.spv diff --git a/data/shaders/nv_ray_tracing_basic/closesthit.rchit b/data/shaders/glsl/nv_ray_tracing_basic/closesthit.rchit similarity index 100% rename from data/shaders/nv_ray_tracing_basic/closesthit.rchit rename to data/shaders/glsl/nv_ray_tracing_basic/closesthit.rchit diff --git a/data/shaders/nv_ray_tracing_basic/closesthit.rchit.spv b/data/shaders/glsl/nv_ray_tracing_basic/closesthit.rchit.spv similarity index 100% rename from data/shaders/nv_ray_tracing_basic/closesthit.rchit.spv rename to data/shaders/glsl/nv_ray_tracing_basic/closesthit.rchit.spv diff --git a/data/shaders/nv_ray_tracing_basic/miss.rmiss b/data/shaders/glsl/nv_ray_tracing_basic/miss.rmiss similarity index 100% rename from data/shaders/nv_ray_tracing_basic/miss.rmiss rename to data/shaders/glsl/nv_ray_tracing_basic/miss.rmiss diff --git a/data/shaders/nv_ray_tracing_basic/miss.rmiss.spv b/data/shaders/glsl/nv_ray_tracing_basic/miss.rmiss.spv similarity index 100% rename from data/shaders/nv_ray_tracing_basic/miss.rmiss.spv rename to data/shaders/glsl/nv_ray_tracing_basic/miss.rmiss.spv diff --git a/data/shaders/nv_ray_tracing_basic/raygen.rgen b/data/shaders/glsl/nv_ray_tracing_basic/raygen.rgen similarity index 100% rename from data/shaders/nv_ray_tracing_basic/raygen.rgen rename to data/shaders/glsl/nv_ray_tracing_basic/raygen.rgen diff --git a/data/shaders/nv_ray_tracing_basic/raygen.rgen.spv b/data/shaders/glsl/nv_ray_tracing_basic/raygen.rgen.spv similarity index 100% rename from data/shaders/nv_ray_tracing_basic/raygen.rgen.spv rename to data/shaders/glsl/nv_ray_tracing_basic/raygen.rgen.spv diff --git a/data/shaders/nv_ray_tracing_reflections/closesthit.rchit b/data/shaders/glsl/nv_ray_tracing_reflections/closesthit.rchit similarity index 100% rename from data/shaders/nv_ray_tracing_reflections/closesthit.rchit rename to data/shaders/glsl/nv_ray_tracing_reflections/closesthit.rchit diff --git a/data/shaders/nv_ray_tracing_reflections/closesthit.rchit.spv b/data/shaders/glsl/nv_ray_tracing_reflections/closesthit.rchit.spv similarity index 100% rename from data/shaders/nv_ray_tracing_reflections/closesthit.rchit.spv rename to data/shaders/glsl/nv_ray_tracing_reflections/closesthit.rchit.spv diff --git a/data/shaders/nv_ray_tracing_reflections/miss.rmiss b/data/shaders/glsl/nv_ray_tracing_reflections/miss.rmiss similarity index 100% rename from data/shaders/nv_ray_tracing_reflections/miss.rmiss rename to data/shaders/glsl/nv_ray_tracing_reflections/miss.rmiss diff --git a/data/shaders/nv_ray_tracing_reflections/miss.rmiss.spv b/data/shaders/glsl/nv_ray_tracing_reflections/miss.rmiss.spv similarity index 100% rename from data/shaders/nv_ray_tracing_reflections/miss.rmiss.spv rename to data/shaders/glsl/nv_ray_tracing_reflections/miss.rmiss.spv diff --git a/data/shaders/nv_ray_tracing_reflections/raygen.rgen b/data/shaders/glsl/nv_ray_tracing_reflections/raygen.rgen similarity index 100% rename from data/shaders/nv_ray_tracing_reflections/raygen.rgen rename to data/shaders/glsl/nv_ray_tracing_reflections/raygen.rgen diff --git a/data/shaders/nv_ray_tracing_reflections/raygen.rgen.spv b/data/shaders/glsl/nv_ray_tracing_reflections/raygen.rgen.spv similarity index 100% rename from data/shaders/nv_ray_tracing_reflections/raygen.rgen.spv rename to data/shaders/glsl/nv_ray_tracing_reflections/raygen.rgen.spv diff --git a/data/shaders/nv_ray_tracing_shadows/closesthit.rchit b/data/shaders/glsl/nv_ray_tracing_shadows/closesthit.rchit similarity index 100% rename from data/shaders/nv_ray_tracing_shadows/closesthit.rchit rename to data/shaders/glsl/nv_ray_tracing_shadows/closesthit.rchit diff --git a/data/shaders/nv_ray_tracing_shadows/closesthit.rchit.spv b/data/shaders/glsl/nv_ray_tracing_shadows/closesthit.rchit.spv similarity index 100% rename from data/shaders/nv_ray_tracing_shadows/closesthit.rchit.spv rename to data/shaders/glsl/nv_ray_tracing_shadows/closesthit.rchit.spv diff --git a/data/shaders/nv_ray_tracing_shadows/miss.rmiss b/data/shaders/glsl/nv_ray_tracing_shadows/miss.rmiss similarity index 100% rename from data/shaders/nv_ray_tracing_shadows/miss.rmiss rename to data/shaders/glsl/nv_ray_tracing_shadows/miss.rmiss diff --git a/data/shaders/nv_ray_tracing_shadows/miss.rmiss.spv b/data/shaders/glsl/nv_ray_tracing_shadows/miss.rmiss.spv similarity index 100% rename from data/shaders/nv_ray_tracing_shadows/miss.rmiss.spv rename to data/shaders/glsl/nv_ray_tracing_shadows/miss.rmiss.spv diff --git a/data/shaders/nv_ray_tracing_shadows/raygen.rgen b/data/shaders/glsl/nv_ray_tracing_shadows/raygen.rgen similarity index 100% rename from data/shaders/nv_ray_tracing_shadows/raygen.rgen rename to data/shaders/glsl/nv_ray_tracing_shadows/raygen.rgen diff --git a/data/shaders/nv_ray_tracing_shadows/raygen.rgen.spv b/data/shaders/glsl/nv_ray_tracing_shadows/raygen.rgen.spv similarity index 100% rename from data/shaders/nv_ray_tracing_shadows/raygen.rgen.spv rename to data/shaders/glsl/nv_ray_tracing_shadows/raygen.rgen.spv diff --git a/data/shaders/nv_ray_tracing_shadows/shadow.rmiss b/data/shaders/glsl/nv_ray_tracing_shadows/shadow.rmiss similarity index 100% rename from data/shaders/nv_ray_tracing_shadows/shadow.rmiss rename to data/shaders/glsl/nv_ray_tracing_shadows/shadow.rmiss diff --git a/data/shaders/nv_ray_tracing_shadows/shadow.rmiss.spv b/data/shaders/glsl/nv_ray_tracing_shadows/shadow.rmiss.spv similarity index 100% rename from data/shaders/nv_ray_tracing_shadows/shadow.rmiss.spv rename to data/shaders/glsl/nv_ray_tracing_shadows/shadow.rmiss.spv diff --git a/data/shaders/occlusionquery/generate-spirv.bat b/data/shaders/glsl/occlusionquery/generate-spirv.bat similarity index 100% rename from data/shaders/occlusionquery/generate-spirv.bat rename to data/shaders/glsl/occlusionquery/generate-spirv.bat diff --git a/data/shaders/occlusionquery/mesh.frag b/data/shaders/glsl/occlusionquery/mesh.frag similarity index 100% rename from data/shaders/occlusionquery/mesh.frag rename to data/shaders/glsl/occlusionquery/mesh.frag diff --git a/data/shaders/occlusionquery/mesh.frag.spv b/data/shaders/glsl/occlusionquery/mesh.frag.spv similarity index 100% rename from data/shaders/occlusionquery/mesh.frag.spv rename to data/shaders/glsl/occlusionquery/mesh.frag.spv diff --git a/data/shaders/occlusionquery/mesh.vert b/data/shaders/glsl/occlusionquery/mesh.vert similarity index 100% rename from data/shaders/occlusionquery/mesh.vert rename to data/shaders/glsl/occlusionquery/mesh.vert diff --git a/data/shaders/occlusionquery/mesh.vert.spv b/data/shaders/glsl/occlusionquery/mesh.vert.spv similarity index 100% rename from data/shaders/occlusionquery/mesh.vert.spv rename to data/shaders/glsl/occlusionquery/mesh.vert.spv diff --git a/data/shaders/occlusionquery/occluder.frag b/data/shaders/glsl/occlusionquery/occluder.frag similarity index 100% rename from data/shaders/occlusionquery/occluder.frag rename to data/shaders/glsl/occlusionquery/occluder.frag diff --git a/data/shaders/occlusionquery/occluder.frag.spv b/data/shaders/glsl/occlusionquery/occluder.frag.spv similarity index 100% rename from data/shaders/occlusionquery/occluder.frag.spv rename to data/shaders/glsl/occlusionquery/occluder.frag.spv diff --git a/data/shaders/occlusionquery/occluder.vert b/data/shaders/glsl/occlusionquery/occluder.vert similarity index 100% rename from data/shaders/occlusionquery/occluder.vert rename to data/shaders/glsl/occlusionquery/occluder.vert diff --git a/data/shaders/occlusionquery/occluder.vert.spv b/data/shaders/glsl/occlusionquery/occluder.vert.spv similarity index 100% rename from data/shaders/occlusionquery/occluder.vert.spv rename to data/shaders/glsl/occlusionquery/occluder.vert.spv diff --git a/data/shaders/occlusionquery/simple.frag b/data/shaders/glsl/occlusionquery/simple.frag similarity index 100% rename from data/shaders/occlusionquery/simple.frag rename to data/shaders/glsl/occlusionquery/simple.frag diff --git a/data/shaders/occlusionquery/simple.frag.spv b/data/shaders/glsl/occlusionquery/simple.frag.spv similarity index 100% rename from data/shaders/occlusionquery/simple.frag.spv rename to data/shaders/glsl/occlusionquery/simple.frag.spv diff --git a/data/shaders/occlusionquery/simple.vert b/data/shaders/glsl/occlusionquery/simple.vert similarity index 100% rename from data/shaders/occlusionquery/simple.vert rename to data/shaders/glsl/occlusionquery/simple.vert diff --git a/data/shaders/occlusionquery/simple.vert.spv b/data/shaders/glsl/occlusionquery/simple.vert.spv similarity index 100% rename from data/shaders/occlusionquery/simple.vert.spv rename to data/shaders/glsl/occlusionquery/simple.vert.spv diff --git a/data/shaders/offscreen/generate-spirv.bat b/data/shaders/glsl/offscreen/generate-spirv.bat similarity index 100% rename from data/shaders/offscreen/generate-spirv.bat rename to data/shaders/glsl/offscreen/generate-spirv.bat diff --git a/data/shaders/offscreen/mirror.frag b/data/shaders/glsl/offscreen/mirror.frag similarity index 100% rename from data/shaders/offscreen/mirror.frag rename to data/shaders/glsl/offscreen/mirror.frag diff --git a/data/shaders/offscreen/mirror.frag.spv b/data/shaders/glsl/offscreen/mirror.frag.spv similarity index 100% rename from data/shaders/offscreen/mirror.frag.spv rename to data/shaders/glsl/offscreen/mirror.frag.spv diff --git a/data/shaders/offscreen/mirror.vert b/data/shaders/glsl/offscreen/mirror.vert similarity index 100% rename from data/shaders/offscreen/mirror.vert rename to data/shaders/glsl/offscreen/mirror.vert diff --git a/data/shaders/offscreen/mirror.vert.spv b/data/shaders/glsl/offscreen/mirror.vert.spv similarity index 100% rename from data/shaders/offscreen/mirror.vert.spv rename to data/shaders/glsl/offscreen/mirror.vert.spv diff --git a/data/shaders/offscreen/phong.frag b/data/shaders/glsl/offscreen/phong.frag similarity index 100% rename from data/shaders/offscreen/phong.frag rename to data/shaders/glsl/offscreen/phong.frag diff --git a/data/shaders/offscreen/phong.frag.spv b/data/shaders/glsl/offscreen/phong.frag.spv similarity index 100% rename from data/shaders/offscreen/phong.frag.spv rename to data/shaders/glsl/offscreen/phong.frag.spv diff --git a/data/shaders/offscreen/phong.vert b/data/shaders/glsl/offscreen/phong.vert similarity index 100% rename from data/shaders/offscreen/phong.vert rename to data/shaders/glsl/offscreen/phong.vert diff --git a/data/shaders/offscreen/phong.vert.spv b/data/shaders/glsl/offscreen/phong.vert.spv similarity index 100% rename from data/shaders/offscreen/phong.vert.spv rename to data/shaders/glsl/offscreen/phong.vert.spv diff --git a/data/shaders/offscreen/quad.frag b/data/shaders/glsl/offscreen/quad.frag similarity index 100% rename from data/shaders/offscreen/quad.frag rename to data/shaders/glsl/offscreen/quad.frag diff --git a/data/shaders/offscreen/quad.frag.spv b/data/shaders/glsl/offscreen/quad.frag.spv similarity index 100% rename from data/shaders/offscreen/quad.frag.spv rename to data/shaders/glsl/offscreen/quad.frag.spv diff --git a/data/shaders/offscreen/quad.vert b/data/shaders/glsl/offscreen/quad.vert similarity index 100% rename from data/shaders/offscreen/quad.vert rename to data/shaders/glsl/offscreen/quad.vert diff --git a/data/shaders/offscreen/quad.vert.spv b/data/shaders/glsl/offscreen/quad.vert.spv similarity index 100% rename from data/shaders/offscreen/quad.vert.spv rename to data/shaders/glsl/offscreen/quad.vert.spv diff --git a/data/shaders/parallaxmapping/parallax.frag b/data/shaders/glsl/parallaxmapping/parallax.frag similarity index 100% rename from data/shaders/parallaxmapping/parallax.frag rename to data/shaders/glsl/parallaxmapping/parallax.frag diff --git a/data/shaders/parallaxmapping/parallax.frag.spv b/data/shaders/glsl/parallaxmapping/parallax.frag.spv similarity index 100% rename from data/shaders/parallaxmapping/parallax.frag.spv rename to data/shaders/glsl/parallaxmapping/parallax.frag.spv diff --git a/data/shaders/parallaxmapping/parallax.vert b/data/shaders/glsl/parallaxmapping/parallax.vert similarity index 100% rename from data/shaders/parallaxmapping/parallax.vert rename to data/shaders/glsl/parallaxmapping/parallax.vert diff --git a/data/shaders/parallaxmapping/parallax.vert.spv b/data/shaders/glsl/parallaxmapping/parallax.vert.spv similarity index 100% rename from data/shaders/parallaxmapping/parallax.vert.spv rename to data/shaders/glsl/parallaxmapping/parallax.vert.spv diff --git a/data/shaders/particlefire/generate-spirv.bat b/data/shaders/glsl/particlefire/generate-spirv.bat similarity index 100% rename from data/shaders/particlefire/generate-spirv.bat rename to data/shaders/glsl/particlefire/generate-spirv.bat diff --git a/data/shaders/particlefire/normalmap.frag b/data/shaders/glsl/particlefire/normalmap.frag similarity index 100% rename from data/shaders/particlefire/normalmap.frag rename to data/shaders/glsl/particlefire/normalmap.frag diff --git a/data/shaders/particlefire/normalmap.frag.spv b/data/shaders/glsl/particlefire/normalmap.frag.spv similarity index 100% rename from data/shaders/particlefire/normalmap.frag.spv rename to data/shaders/glsl/particlefire/normalmap.frag.spv diff --git a/data/shaders/particlefire/normalmap.vert b/data/shaders/glsl/particlefire/normalmap.vert similarity index 100% rename from data/shaders/particlefire/normalmap.vert rename to data/shaders/glsl/particlefire/normalmap.vert diff --git a/data/shaders/particlefire/normalmap.vert.spv b/data/shaders/glsl/particlefire/normalmap.vert.spv similarity index 100% rename from data/shaders/particlefire/normalmap.vert.spv rename to data/shaders/glsl/particlefire/normalmap.vert.spv diff --git a/data/shaders/particlefire/particle.frag b/data/shaders/glsl/particlefire/particle.frag similarity index 100% rename from data/shaders/particlefire/particle.frag rename to data/shaders/glsl/particlefire/particle.frag diff --git a/data/shaders/particlefire/particle.frag.spv b/data/shaders/glsl/particlefire/particle.frag.spv similarity index 100% rename from data/shaders/particlefire/particle.frag.spv rename to data/shaders/glsl/particlefire/particle.frag.spv diff --git a/data/shaders/particlefire/particle.vert b/data/shaders/glsl/particlefire/particle.vert similarity index 100% rename from data/shaders/particlefire/particle.vert rename to data/shaders/glsl/particlefire/particle.vert diff --git a/data/shaders/particlefire/particle.vert.spv b/data/shaders/glsl/particlefire/particle.vert.spv similarity index 100% rename from data/shaders/particlefire/particle.vert.spv rename to data/shaders/glsl/particlefire/particle.vert.spv diff --git a/data/shaders/pbrbasic/pbr.frag b/data/shaders/glsl/pbrbasic/pbr.frag similarity index 100% rename from data/shaders/pbrbasic/pbr.frag rename to data/shaders/glsl/pbrbasic/pbr.frag diff --git a/data/shaders/pbrbasic/pbr.frag.spv b/data/shaders/glsl/pbrbasic/pbr.frag.spv similarity index 100% rename from data/shaders/pbrbasic/pbr.frag.spv rename to data/shaders/glsl/pbrbasic/pbr.frag.spv diff --git a/data/shaders/pbrbasic/pbr.vert b/data/shaders/glsl/pbrbasic/pbr.vert similarity index 100% rename from data/shaders/pbrbasic/pbr.vert rename to data/shaders/glsl/pbrbasic/pbr.vert diff --git a/data/shaders/pbrbasic/pbr.vert.spv b/data/shaders/glsl/pbrbasic/pbr.vert.spv similarity index 100% rename from data/shaders/pbrbasic/pbr.vert.spv rename to data/shaders/glsl/pbrbasic/pbr.vert.spv diff --git a/data/shaders/pbribl/filtercube.vert b/data/shaders/glsl/pbribl/filtercube.vert similarity index 100% rename from data/shaders/pbribl/filtercube.vert rename to data/shaders/glsl/pbribl/filtercube.vert diff --git a/data/shaders/pbribl/filtercube.vert.spv b/data/shaders/glsl/pbribl/filtercube.vert.spv similarity index 100% rename from data/shaders/pbribl/filtercube.vert.spv rename to data/shaders/glsl/pbribl/filtercube.vert.spv diff --git a/data/shaders/pbribl/genbrdflut.frag b/data/shaders/glsl/pbribl/genbrdflut.frag similarity index 100% rename from data/shaders/pbribl/genbrdflut.frag rename to data/shaders/glsl/pbribl/genbrdflut.frag diff --git a/data/shaders/pbribl/genbrdflut.frag.spv b/data/shaders/glsl/pbribl/genbrdflut.frag.spv similarity index 100% rename from data/shaders/pbribl/genbrdflut.frag.spv rename to data/shaders/glsl/pbribl/genbrdflut.frag.spv diff --git a/data/shaders/pbribl/genbrdflut.vert b/data/shaders/glsl/pbribl/genbrdflut.vert similarity index 100% rename from data/shaders/pbribl/genbrdflut.vert rename to data/shaders/glsl/pbribl/genbrdflut.vert diff --git a/data/shaders/pbribl/genbrdflut.vert.spv b/data/shaders/glsl/pbribl/genbrdflut.vert.spv similarity index 100% rename from data/shaders/pbribl/genbrdflut.vert.spv rename to data/shaders/glsl/pbribl/genbrdflut.vert.spv diff --git a/data/shaders/pbribl/irradiancecube.frag b/data/shaders/glsl/pbribl/irradiancecube.frag similarity index 100% rename from data/shaders/pbribl/irradiancecube.frag rename to data/shaders/glsl/pbribl/irradiancecube.frag diff --git a/data/shaders/pbribl/irradiancecube.frag.spv b/data/shaders/glsl/pbribl/irradiancecube.frag.spv similarity index 100% rename from data/shaders/pbribl/irradiancecube.frag.spv rename to data/shaders/glsl/pbribl/irradiancecube.frag.spv diff --git a/data/shaders/pbribl/pbribl.frag b/data/shaders/glsl/pbribl/pbribl.frag similarity index 100% rename from data/shaders/pbribl/pbribl.frag rename to data/shaders/glsl/pbribl/pbribl.frag diff --git a/data/shaders/pbribl/pbribl.frag.spv b/data/shaders/glsl/pbribl/pbribl.frag.spv similarity index 100% rename from data/shaders/pbribl/pbribl.frag.spv rename to data/shaders/glsl/pbribl/pbribl.frag.spv diff --git a/data/shaders/pbribl/pbribl.vert b/data/shaders/glsl/pbribl/pbribl.vert similarity index 100% rename from data/shaders/pbribl/pbribl.vert rename to data/shaders/glsl/pbribl/pbribl.vert diff --git a/data/shaders/pbribl/pbribl.vert.spv b/data/shaders/glsl/pbribl/pbribl.vert.spv similarity index 100% rename from data/shaders/pbribl/pbribl.vert.spv rename to data/shaders/glsl/pbribl/pbribl.vert.spv diff --git a/data/shaders/pbribl/prefilterenvmap.frag b/data/shaders/glsl/pbribl/prefilterenvmap.frag similarity index 100% rename from data/shaders/pbribl/prefilterenvmap.frag rename to data/shaders/glsl/pbribl/prefilterenvmap.frag diff --git a/data/shaders/pbribl/prefilterenvmap.frag.spv b/data/shaders/glsl/pbribl/prefilterenvmap.frag.spv similarity index 100% rename from data/shaders/pbribl/prefilterenvmap.frag.spv rename to data/shaders/glsl/pbribl/prefilterenvmap.frag.spv diff --git a/data/shaders/pbribl/skybox.frag b/data/shaders/glsl/pbribl/skybox.frag similarity index 100% rename from data/shaders/pbribl/skybox.frag rename to data/shaders/glsl/pbribl/skybox.frag diff --git a/data/shaders/pbribl/skybox.frag.spv b/data/shaders/glsl/pbribl/skybox.frag.spv similarity index 100% rename from data/shaders/pbribl/skybox.frag.spv rename to data/shaders/glsl/pbribl/skybox.frag.spv diff --git a/data/shaders/pbribl/skybox.vert b/data/shaders/glsl/pbribl/skybox.vert similarity index 100% rename from data/shaders/pbribl/skybox.vert rename to data/shaders/glsl/pbribl/skybox.vert diff --git a/data/shaders/pbribl/skybox.vert.spv b/data/shaders/glsl/pbribl/skybox.vert.spv similarity index 100% rename from data/shaders/pbribl/skybox.vert.spv rename to data/shaders/glsl/pbribl/skybox.vert.spv diff --git a/data/shaders/pbrtexture/filtercube.vert b/data/shaders/glsl/pbrtexture/filtercube.vert similarity index 100% rename from data/shaders/pbrtexture/filtercube.vert rename to data/shaders/glsl/pbrtexture/filtercube.vert diff --git a/data/shaders/pbrtexture/filtercube.vert.spv b/data/shaders/glsl/pbrtexture/filtercube.vert.spv similarity index 100% rename from data/shaders/pbrtexture/filtercube.vert.spv rename to data/shaders/glsl/pbrtexture/filtercube.vert.spv diff --git a/data/shaders/pbrtexture/genbrdflut.frag b/data/shaders/glsl/pbrtexture/genbrdflut.frag similarity index 100% rename from data/shaders/pbrtexture/genbrdflut.frag rename to data/shaders/glsl/pbrtexture/genbrdflut.frag diff --git a/data/shaders/pbrtexture/genbrdflut.frag.spv b/data/shaders/glsl/pbrtexture/genbrdflut.frag.spv similarity index 100% rename from data/shaders/pbrtexture/genbrdflut.frag.spv rename to data/shaders/glsl/pbrtexture/genbrdflut.frag.spv diff --git a/data/shaders/pbrtexture/genbrdflut.vert b/data/shaders/glsl/pbrtexture/genbrdflut.vert similarity index 100% rename from data/shaders/pbrtexture/genbrdflut.vert rename to data/shaders/glsl/pbrtexture/genbrdflut.vert diff --git a/data/shaders/pbrtexture/genbrdflut.vert.spv b/data/shaders/glsl/pbrtexture/genbrdflut.vert.spv similarity index 100% rename from data/shaders/pbrtexture/genbrdflut.vert.spv rename to data/shaders/glsl/pbrtexture/genbrdflut.vert.spv diff --git a/data/shaders/pbrtexture/irradiancecube.frag b/data/shaders/glsl/pbrtexture/irradiancecube.frag similarity index 100% rename from data/shaders/pbrtexture/irradiancecube.frag rename to data/shaders/glsl/pbrtexture/irradiancecube.frag diff --git a/data/shaders/pbrtexture/irradiancecube.frag.spv b/data/shaders/glsl/pbrtexture/irradiancecube.frag.spv similarity index 100% rename from data/shaders/pbrtexture/irradiancecube.frag.spv rename to data/shaders/glsl/pbrtexture/irradiancecube.frag.spv diff --git a/data/shaders/pbrtexture/pbrtexture.frag b/data/shaders/glsl/pbrtexture/pbrtexture.frag similarity index 100% rename from data/shaders/pbrtexture/pbrtexture.frag rename to data/shaders/glsl/pbrtexture/pbrtexture.frag diff --git a/data/shaders/pbrtexture/pbrtexture.frag.spv b/data/shaders/glsl/pbrtexture/pbrtexture.frag.spv similarity index 100% rename from data/shaders/pbrtexture/pbrtexture.frag.spv rename to data/shaders/glsl/pbrtexture/pbrtexture.frag.spv diff --git a/data/shaders/pbrtexture/pbrtexture.vert b/data/shaders/glsl/pbrtexture/pbrtexture.vert similarity index 100% rename from data/shaders/pbrtexture/pbrtexture.vert rename to data/shaders/glsl/pbrtexture/pbrtexture.vert diff --git a/data/shaders/pbrtexture/pbrtexture.vert.spv b/data/shaders/glsl/pbrtexture/pbrtexture.vert.spv similarity index 100% rename from data/shaders/pbrtexture/pbrtexture.vert.spv rename to data/shaders/glsl/pbrtexture/pbrtexture.vert.spv diff --git a/data/shaders/pbrtexture/prefilterenvmap.frag b/data/shaders/glsl/pbrtexture/prefilterenvmap.frag similarity index 100% rename from data/shaders/pbrtexture/prefilterenvmap.frag rename to data/shaders/glsl/pbrtexture/prefilterenvmap.frag diff --git a/data/shaders/pbrtexture/prefilterenvmap.frag.spv b/data/shaders/glsl/pbrtexture/prefilterenvmap.frag.spv similarity index 100% rename from data/shaders/pbrtexture/prefilterenvmap.frag.spv rename to data/shaders/glsl/pbrtexture/prefilterenvmap.frag.spv diff --git a/data/shaders/pbrtexture/skybox.frag b/data/shaders/glsl/pbrtexture/skybox.frag similarity index 100% rename from data/shaders/pbrtexture/skybox.frag rename to data/shaders/glsl/pbrtexture/skybox.frag diff --git a/data/shaders/pbrtexture/skybox.frag.spv b/data/shaders/glsl/pbrtexture/skybox.frag.spv similarity index 100% rename from data/shaders/pbrtexture/skybox.frag.spv rename to data/shaders/glsl/pbrtexture/skybox.frag.spv diff --git a/data/shaders/pbrtexture/skybox.vert b/data/shaders/glsl/pbrtexture/skybox.vert similarity index 100% rename from data/shaders/pbrtexture/skybox.vert rename to data/shaders/glsl/pbrtexture/skybox.vert diff --git a/data/shaders/pbrtexture/skybox.vert.spv b/data/shaders/glsl/pbrtexture/skybox.vert.spv similarity index 100% rename from data/shaders/pbrtexture/skybox.vert.spv rename to data/shaders/glsl/pbrtexture/skybox.vert.spv diff --git a/data/shaders/pipelines/generate-spriv.bat b/data/shaders/glsl/pipelines/generate-spriv.bat similarity index 100% rename from data/shaders/pipelines/generate-spriv.bat rename to data/shaders/glsl/pipelines/generate-spriv.bat diff --git a/data/shaders/pipelines/phong.frag b/data/shaders/glsl/pipelines/phong.frag similarity index 100% rename from data/shaders/pipelines/phong.frag rename to data/shaders/glsl/pipelines/phong.frag diff --git a/data/shaders/pipelines/phong.frag.spv b/data/shaders/glsl/pipelines/phong.frag.spv similarity index 100% rename from data/shaders/pipelines/phong.frag.spv rename to data/shaders/glsl/pipelines/phong.frag.spv diff --git a/data/shaders/pipelines/phong.vert b/data/shaders/glsl/pipelines/phong.vert similarity index 100% rename from data/shaders/pipelines/phong.vert rename to data/shaders/glsl/pipelines/phong.vert diff --git a/data/shaders/pipelines/phong.vert.spv b/data/shaders/glsl/pipelines/phong.vert.spv similarity index 100% rename from data/shaders/pipelines/phong.vert.spv rename to data/shaders/glsl/pipelines/phong.vert.spv diff --git a/data/shaders/pipelines/toon.frag b/data/shaders/glsl/pipelines/toon.frag similarity index 100% rename from data/shaders/pipelines/toon.frag rename to data/shaders/glsl/pipelines/toon.frag diff --git a/data/shaders/pipelines/toon.frag.spv b/data/shaders/glsl/pipelines/toon.frag.spv similarity index 100% rename from data/shaders/pipelines/toon.frag.spv rename to data/shaders/glsl/pipelines/toon.frag.spv diff --git a/data/shaders/pipelines/toon.vert b/data/shaders/glsl/pipelines/toon.vert similarity index 100% rename from data/shaders/pipelines/toon.vert rename to data/shaders/glsl/pipelines/toon.vert diff --git a/data/shaders/pipelines/toon.vert.spv b/data/shaders/glsl/pipelines/toon.vert.spv similarity index 100% rename from data/shaders/pipelines/toon.vert.spv rename to data/shaders/glsl/pipelines/toon.vert.spv diff --git a/data/shaders/pipelines/wireframe.frag b/data/shaders/glsl/pipelines/wireframe.frag similarity index 100% rename from data/shaders/pipelines/wireframe.frag rename to data/shaders/glsl/pipelines/wireframe.frag diff --git a/data/shaders/pipelines/wireframe.frag.spv b/data/shaders/glsl/pipelines/wireframe.frag.spv similarity index 100% rename from data/shaders/pipelines/wireframe.frag.spv rename to data/shaders/glsl/pipelines/wireframe.frag.spv diff --git a/data/shaders/pipelines/wireframe.vert b/data/shaders/glsl/pipelines/wireframe.vert similarity index 100% rename from data/shaders/pipelines/wireframe.vert rename to data/shaders/glsl/pipelines/wireframe.vert diff --git a/data/shaders/pipelines/wireframe.vert.spv b/data/shaders/glsl/pipelines/wireframe.vert.spv similarity index 100% rename from data/shaders/pipelines/wireframe.vert.spv rename to data/shaders/glsl/pipelines/wireframe.vert.spv diff --git a/data/shaders/pipelinestatistics/scene.frag b/data/shaders/glsl/pipelinestatistics/scene.frag similarity index 100% rename from data/shaders/pipelinestatistics/scene.frag rename to data/shaders/glsl/pipelinestatistics/scene.frag diff --git a/data/shaders/pipelinestatistics/scene.frag.spv b/data/shaders/glsl/pipelinestatistics/scene.frag.spv similarity index 100% rename from data/shaders/pipelinestatistics/scene.frag.spv rename to data/shaders/glsl/pipelinestatistics/scene.frag.spv diff --git a/data/shaders/pipelinestatistics/scene.tesc b/data/shaders/glsl/pipelinestatistics/scene.tesc similarity index 100% rename from data/shaders/pipelinestatistics/scene.tesc rename to data/shaders/glsl/pipelinestatistics/scene.tesc diff --git a/data/shaders/pipelinestatistics/scene.tesc.spv b/data/shaders/glsl/pipelinestatistics/scene.tesc.spv similarity index 100% rename from data/shaders/pipelinestatistics/scene.tesc.spv rename to data/shaders/glsl/pipelinestatistics/scene.tesc.spv diff --git a/data/shaders/pipelinestatistics/scene.tese b/data/shaders/glsl/pipelinestatistics/scene.tese similarity index 100% rename from data/shaders/pipelinestatistics/scene.tese rename to data/shaders/glsl/pipelinestatistics/scene.tese diff --git a/data/shaders/pipelinestatistics/scene.tese.spv b/data/shaders/glsl/pipelinestatistics/scene.tese.spv similarity index 100% rename from data/shaders/pipelinestatistics/scene.tese.spv rename to data/shaders/glsl/pipelinestatistics/scene.tese.spv diff --git a/data/shaders/pipelinestatistics/scene.vert b/data/shaders/glsl/pipelinestatistics/scene.vert similarity index 100% rename from data/shaders/pipelinestatistics/scene.vert rename to data/shaders/glsl/pipelinestatistics/scene.vert diff --git a/data/shaders/pipelinestatistics/scene.vert.spv b/data/shaders/glsl/pipelinestatistics/scene.vert.spv similarity index 100% rename from data/shaders/pipelinestatistics/scene.vert.spv rename to data/shaders/glsl/pipelinestatistics/scene.vert.spv diff --git a/data/shaders/pushconstants/generate-spirv.bat b/data/shaders/glsl/pushconstants/generate-spirv.bat similarity index 100% rename from data/shaders/pushconstants/generate-spirv.bat rename to data/shaders/glsl/pushconstants/generate-spirv.bat diff --git a/data/shaders/pushconstants/lights.frag b/data/shaders/glsl/pushconstants/lights.frag similarity index 100% rename from data/shaders/pushconstants/lights.frag rename to data/shaders/glsl/pushconstants/lights.frag diff --git a/data/shaders/pushconstants/lights.frag.spv b/data/shaders/glsl/pushconstants/lights.frag.spv similarity index 100% rename from data/shaders/pushconstants/lights.frag.spv rename to data/shaders/glsl/pushconstants/lights.frag.spv diff --git a/data/shaders/pushconstants/lights.vert b/data/shaders/glsl/pushconstants/lights.vert similarity index 100% rename from data/shaders/pushconstants/lights.vert rename to data/shaders/glsl/pushconstants/lights.vert diff --git a/data/shaders/pushconstants/lights.vert.spv b/data/shaders/glsl/pushconstants/lights.vert.spv similarity index 100% rename from data/shaders/pushconstants/lights.vert.spv rename to data/shaders/glsl/pushconstants/lights.vert.spv diff --git a/data/shaders/pushdescriptors/cube.frag b/data/shaders/glsl/pushdescriptors/cube.frag similarity index 100% rename from data/shaders/pushdescriptors/cube.frag rename to data/shaders/glsl/pushdescriptors/cube.frag diff --git a/data/shaders/pushdescriptors/cube.frag.spv b/data/shaders/glsl/pushdescriptors/cube.frag.spv similarity index 100% rename from data/shaders/pushdescriptors/cube.frag.spv rename to data/shaders/glsl/pushdescriptors/cube.frag.spv diff --git a/data/shaders/pushdescriptors/cube.vert b/data/shaders/glsl/pushdescriptors/cube.vert similarity index 100% rename from data/shaders/pushdescriptors/cube.vert rename to data/shaders/glsl/pushdescriptors/cube.vert diff --git a/data/shaders/pushdescriptors/cube.vert.spv b/data/shaders/glsl/pushdescriptors/cube.vert.spv similarity index 100% rename from data/shaders/pushdescriptors/cube.vert.spv rename to data/shaders/glsl/pushdescriptors/cube.vert.spv diff --git a/data/shaders/radialblur/colorpass.frag b/data/shaders/glsl/radialblur/colorpass.frag similarity index 100% rename from data/shaders/radialblur/colorpass.frag rename to data/shaders/glsl/radialblur/colorpass.frag diff --git a/data/shaders/radialblur/colorpass.frag.spv b/data/shaders/glsl/radialblur/colorpass.frag.spv similarity index 100% rename from data/shaders/radialblur/colorpass.frag.spv rename to data/shaders/glsl/radialblur/colorpass.frag.spv diff --git a/data/shaders/radialblur/colorpass.vert b/data/shaders/glsl/radialblur/colorpass.vert similarity index 100% rename from data/shaders/radialblur/colorpass.vert rename to data/shaders/glsl/radialblur/colorpass.vert diff --git a/data/shaders/radialblur/colorpass.vert.spv b/data/shaders/glsl/radialblur/colorpass.vert.spv similarity index 100% rename from data/shaders/radialblur/colorpass.vert.spv rename to data/shaders/glsl/radialblur/colorpass.vert.spv diff --git a/data/shaders/radialblur/generate-spirv.bat b/data/shaders/glsl/radialblur/generate-spirv.bat similarity index 100% rename from data/shaders/radialblur/generate-spirv.bat rename to data/shaders/glsl/radialblur/generate-spirv.bat diff --git a/data/shaders/radialblur/phongpass.frag b/data/shaders/glsl/radialblur/phongpass.frag similarity index 100% rename from data/shaders/radialblur/phongpass.frag rename to data/shaders/glsl/radialblur/phongpass.frag diff --git a/data/shaders/radialblur/phongpass.frag.spv b/data/shaders/glsl/radialblur/phongpass.frag.spv similarity index 100% rename from data/shaders/radialblur/phongpass.frag.spv rename to data/shaders/glsl/radialblur/phongpass.frag.spv diff --git a/data/shaders/radialblur/phongpass.vert b/data/shaders/glsl/radialblur/phongpass.vert similarity index 100% rename from data/shaders/radialblur/phongpass.vert rename to data/shaders/glsl/radialblur/phongpass.vert diff --git a/data/shaders/radialblur/phongpass.vert.spv b/data/shaders/glsl/radialblur/phongpass.vert.spv similarity index 100% rename from data/shaders/radialblur/phongpass.vert.spv rename to data/shaders/glsl/radialblur/phongpass.vert.spv diff --git a/data/shaders/radialblur/radialblur.frag b/data/shaders/glsl/radialblur/radialblur.frag similarity index 100% rename from data/shaders/radialblur/radialblur.frag rename to data/shaders/glsl/radialblur/radialblur.frag diff --git a/data/shaders/radialblur/radialblur.frag.spv b/data/shaders/glsl/radialblur/radialblur.frag.spv similarity index 100% rename from data/shaders/radialblur/radialblur.frag.spv rename to data/shaders/glsl/radialblur/radialblur.frag.spv diff --git a/data/shaders/radialblur/radialblur.vert b/data/shaders/glsl/radialblur/radialblur.vert similarity index 100% rename from data/shaders/radialblur/radialblur.vert rename to data/shaders/glsl/radialblur/radialblur.vert diff --git a/data/shaders/radialblur/radialblur.vert.spv b/data/shaders/glsl/radialblur/radialblur.vert.spv similarity index 100% rename from data/shaders/radialblur/radialblur.vert.spv rename to data/shaders/glsl/radialblur/radialblur.vert.spv diff --git a/data/shaders/renderheadless/triangle.frag b/data/shaders/glsl/renderheadless/triangle.frag similarity index 100% rename from data/shaders/renderheadless/triangle.frag rename to data/shaders/glsl/renderheadless/triangle.frag diff --git a/data/shaders/renderheadless/triangle.frag.spv b/data/shaders/glsl/renderheadless/triangle.frag.spv similarity index 100% rename from data/shaders/renderheadless/triangle.frag.spv rename to data/shaders/glsl/renderheadless/triangle.frag.spv diff --git a/data/shaders/renderheadless/triangle.vert b/data/shaders/glsl/renderheadless/triangle.vert similarity index 100% rename from data/shaders/renderheadless/triangle.vert rename to data/shaders/glsl/renderheadless/triangle.vert diff --git a/data/shaders/renderheadless/triangle.vert.spv b/data/shaders/glsl/renderheadless/triangle.vert.spv similarity index 100% rename from data/shaders/renderheadless/triangle.vert.spv rename to data/shaders/glsl/renderheadless/triangle.vert.spv diff --git a/data/shaders/scenerendering/generate-spirv.bat b/data/shaders/glsl/scenerendering/generate-spirv.bat similarity index 100% rename from data/shaders/scenerendering/generate-spirv.bat rename to data/shaders/glsl/scenerendering/generate-spirv.bat diff --git a/data/shaders/scenerendering/scene.frag b/data/shaders/glsl/scenerendering/scene.frag similarity index 100% rename from data/shaders/scenerendering/scene.frag rename to data/shaders/glsl/scenerendering/scene.frag diff --git a/data/shaders/scenerendering/scene.frag.spv b/data/shaders/glsl/scenerendering/scene.frag.spv similarity index 100% rename from data/shaders/scenerendering/scene.frag.spv rename to data/shaders/glsl/scenerendering/scene.frag.spv diff --git a/data/shaders/scenerendering/scene.vert b/data/shaders/glsl/scenerendering/scene.vert similarity index 100% rename from data/shaders/scenerendering/scene.vert rename to data/shaders/glsl/scenerendering/scene.vert diff --git a/data/shaders/scenerendering/scene.vert.spv b/data/shaders/glsl/scenerendering/scene.vert.spv similarity index 100% rename from data/shaders/scenerendering/scene.vert.spv rename to data/shaders/glsl/scenerendering/scene.vert.spv diff --git a/data/shaders/screenshot/mesh.frag b/data/shaders/glsl/screenshot/mesh.frag similarity index 100% rename from data/shaders/screenshot/mesh.frag rename to data/shaders/glsl/screenshot/mesh.frag diff --git a/data/shaders/screenshot/mesh.frag.spv b/data/shaders/glsl/screenshot/mesh.frag.spv similarity index 100% rename from data/shaders/screenshot/mesh.frag.spv rename to data/shaders/glsl/screenshot/mesh.frag.spv diff --git a/data/shaders/screenshot/mesh.vert b/data/shaders/glsl/screenshot/mesh.vert similarity index 100% rename from data/shaders/screenshot/mesh.vert rename to data/shaders/glsl/screenshot/mesh.vert diff --git a/data/shaders/screenshot/mesh.vert.spv b/data/shaders/glsl/screenshot/mesh.vert.spv similarity index 100% rename from data/shaders/screenshot/mesh.vert.spv rename to data/shaders/glsl/screenshot/mesh.vert.spv diff --git a/data/shaders/shadowmapomni/cubemapdisplay.frag b/data/shaders/glsl/shadowmapomni/cubemapdisplay.frag similarity index 100% rename from data/shaders/shadowmapomni/cubemapdisplay.frag rename to data/shaders/glsl/shadowmapomni/cubemapdisplay.frag diff --git a/data/shaders/shadowmapomni/cubemapdisplay.frag.spv b/data/shaders/glsl/shadowmapomni/cubemapdisplay.frag.spv similarity index 100% rename from data/shaders/shadowmapomni/cubemapdisplay.frag.spv rename to data/shaders/glsl/shadowmapomni/cubemapdisplay.frag.spv diff --git a/data/shaders/shadowmapomni/cubemapdisplay.vert b/data/shaders/glsl/shadowmapomni/cubemapdisplay.vert similarity index 100% rename from data/shaders/shadowmapomni/cubemapdisplay.vert rename to data/shaders/glsl/shadowmapomni/cubemapdisplay.vert diff --git a/data/shaders/shadowmapomni/cubemapdisplay.vert.spv b/data/shaders/glsl/shadowmapomni/cubemapdisplay.vert.spv similarity index 100% rename from data/shaders/shadowmapomni/cubemapdisplay.vert.spv rename to data/shaders/glsl/shadowmapomni/cubemapdisplay.vert.spv diff --git a/data/shaders/shadowmapomni/generate-spirv.bat b/data/shaders/glsl/shadowmapomni/generate-spirv.bat similarity index 100% rename from data/shaders/shadowmapomni/generate-spirv.bat rename to data/shaders/glsl/shadowmapomni/generate-spirv.bat diff --git a/data/shaders/shadowmapomni/offscreen.frag b/data/shaders/glsl/shadowmapomni/offscreen.frag similarity index 100% rename from data/shaders/shadowmapomni/offscreen.frag rename to data/shaders/glsl/shadowmapomni/offscreen.frag diff --git a/data/shaders/shadowmapomni/offscreen.frag.spv b/data/shaders/glsl/shadowmapomni/offscreen.frag.spv similarity index 100% rename from data/shaders/shadowmapomni/offscreen.frag.spv rename to data/shaders/glsl/shadowmapomni/offscreen.frag.spv diff --git a/data/shaders/shadowmapomni/offscreen.vert b/data/shaders/glsl/shadowmapomni/offscreen.vert similarity index 100% rename from data/shaders/shadowmapomni/offscreen.vert rename to data/shaders/glsl/shadowmapomni/offscreen.vert diff --git a/data/shaders/shadowmapomni/offscreen.vert.spv b/data/shaders/glsl/shadowmapomni/offscreen.vert.spv similarity index 100% rename from data/shaders/shadowmapomni/offscreen.vert.spv rename to data/shaders/glsl/shadowmapomni/offscreen.vert.spv diff --git a/data/shaders/shadowmapomni/scene.frag b/data/shaders/glsl/shadowmapomni/scene.frag similarity index 100% rename from data/shaders/shadowmapomni/scene.frag rename to data/shaders/glsl/shadowmapomni/scene.frag diff --git a/data/shaders/shadowmapomni/scene.frag.spv b/data/shaders/glsl/shadowmapomni/scene.frag.spv similarity index 100% rename from data/shaders/shadowmapomni/scene.frag.spv rename to data/shaders/glsl/shadowmapomni/scene.frag.spv diff --git a/data/shaders/shadowmapomni/scene.vert b/data/shaders/glsl/shadowmapomni/scene.vert similarity index 100% rename from data/shaders/shadowmapomni/scene.vert rename to data/shaders/glsl/shadowmapomni/scene.vert diff --git a/data/shaders/shadowmapomni/scene.vert.spv b/data/shaders/glsl/shadowmapomni/scene.vert.spv similarity index 100% rename from data/shaders/shadowmapomni/scene.vert.spv rename to data/shaders/glsl/shadowmapomni/scene.vert.spv diff --git a/data/shaders/shadowmapping/generate-spirv.bat b/data/shaders/glsl/shadowmapping/generate-spirv.bat similarity index 100% rename from data/shaders/shadowmapping/generate-spirv.bat rename to data/shaders/glsl/shadowmapping/generate-spirv.bat diff --git a/data/shaders/shadowmapping/offscreen.frag b/data/shaders/glsl/shadowmapping/offscreen.frag similarity index 100% rename from data/shaders/shadowmapping/offscreen.frag rename to data/shaders/glsl/shadowmapping/offscreen.frag diff --git a/data/shaders/shadowmapping/offscreen.frag.spv b/data/shaders/glsl/shadowmapping/offscreen.frag.spv similarity index 100% rename from data/shaders/shadowmapping/offscreen.frag.spv rename to data/shaders/glsl/shadowmapping/offscreen.frag.spv diff --git a/data/shaders/shadowmapping/offscreen.vert b/data/shaders/glsl/shadowmapping/offscreen.vert similarity index 100% rename from data/shaders/shadowmapping/offscreen.vert rename to data/shaders/glsl/shadowmapping/offscreen.vert diff --git a/data/shaders/shadowmapping/offscreen.vert.spv b/data/shaders/glsl/shadowmapping/offscreen.vert.spv similarity index 100% rename from data/shaders/shadowmapping/offscreen.vert.spv rename to data/shaders/glsl/shadowmapping/offscreen.vert.spv diff --git a/data/shaders/shadowmapping/quad.frag b/data/shaders/glsl/shadowmapping/quad.frag similarity index 100% rename from data/shaders/shadowmapping/quad.frag rename to data/shaders/glsl/shadowmapping/quad.frag diff --git a/data/shaders/shadowmapping/quad.frag.spv b/data/shaders/glsl/shadowmapping/quad.frag.spv similarity index 100% rename from data/shaders/shadowmapping/quad.frag.spv rename to data/shaders/glsl/shadowmapping/quad.frag.spv diff --git a/data/shaders/shadowmapping/quad.vert b/data/shaders/glsl/shadowmapping/quad.vert similarity index 100% rename from data/shaders/shadowmapping/quad.vert rename to data/shaders/glsl/shadowmapping/quad.vert diff --git a/data/shaders/shadowmapping/quad.vert.spv b/data/shaders/glsl/shadowmapping/quad.vert.spv similarity index 100% rename from data/shaders/shadowmapping/quad.vert.spv rename to data/shaders/glsl/shadowmapping/quad.vert.spv diff --git a/data/shaders/shadowmapping/scene.frag b/data/shaders/glsl/shadowmapping/scene.frag similarity index 100% rename from data/shaders/shadowmapping/scene.frag rename to data/shaders/glsl/shadowmapping/scene.frag diff --git a/data/shaders/shadowmapping/scene.frag.spv b/data/shaders/glsl/shadowmapping/scene.frag.spv similarity index 100% rename from data/shaders/shadowmapping/scene.frag.spv rename to data/shaders/glsl/shadowmapping/scene.frag.spv diff --git a/data/shaders/shadowmapping/scene.vert b/data/shaders/glsl/shadowmapping/scene.vert similarity index 100% rename from data/shaders/shadowmapping/scene.vert rename to data/shaders/glsl/shadowmapping/scene.vert diff --git a/data/shaders/shadowmapping/scene.vert.spv b/data/shaders/glsl/shadowmapping/scene.vert.spv similarity index 100% rename from data/shaders/shadowmapping/scene.vert.spv rename to data/shaders/glsl/shadowmapping/scene.vert.spv diff --git a/data/shaders/shadowmappingcascade/debugshadowmap.frag b/data/shaders/glsl/shadowmappingcascade/debugshadowmap.frag similarity index 100% rename from data/shaders/shadowmappingcascade/debugshadowmap.frag rename to data/shaders/glsl/shadowmappingcascade/debugshadowmap.frag diff --git a/data/shaders/shadowmappingcascade/debugshadowmap.frag.spv b/data/shaders/glsl/shadowmappingcascade/debugshadowmap.frag.spv similarity index 100% rename from data/shaders/shadowmappingcascade/debugshadowmap.frag.spv rename to data/shaders/glsl/shadowmappingcascade/debugshadowmap.frag.spv diff --git a/data/shaders/shadowmappingcascade/debugshadowmap.vert b/data/shaders/glsl/shadowmappingcascade/debugshadowmap.vert similarity index 100% rename from data/shaders/shadowmappingcascade/debugshadowmap.vert rename to data/shaders/glsl/shadowmappingcascade/debugshadowmap.vert diff --git a/data/shaders/shadowmappingcascade/debugshadowmap.vert.spv b/data/shaders/glsl/shadowmappingcascade/debugshadowmap.vert.spv similarity index 100% rename from data/shaders/shadowmappingcascade/debugshadowmap.vert.spv rename to data/shaders/glsl/shadowmappingcascade/debugshadowmap.vert.spv diff --git a/data/shaders/shadowmappingcascade/depthpass.frag b/data/shaders/glsl/shadowmappingcascade/depthpass.frag similarity index 100% rename from data/shaders/shadowmappingcascade/depthpass.frag rename to data/shaders/glsl/shadowmappingcascade/depthpass.frag diff --git a/data/shaders/shadowmappingcascade/depthpass.frag.spv b/data/shaders/glsl/shadowmappingcascade/depthpass.frag.spv similarity index 100% rename from data/shaders/shadowmappingcascade/depthpass.frag.spv rename to data/shaders/glsl/shadowmappingcascade/depthpass.frag.spv diff --git a/data/shaders/shadowmappingcascade/depthpass.vert b/data/shaders/glsl/shadowmappingcascade/depthpass.vert similarity index 100% rename from data/shaders/shadowmappingcascade/depthpass.vert rename to data/shaders/glsl/shadowmappingcascade/depthpass.vert diff --git a/data/shaders/shadowmappingcascade/depthpass.vert.spv b/data/shaders/glsl/shadowmappingcascade/depthpass.vert.spv similarity index 100% rename from data/shaders/shadowmappingcascade/depthpass.vert.spv rename to data/shaders/glsl/shadowmappingcascade/depthpass.vert.spv diff --git a/data/shaders/shadowmappingcascade/scene.frag b/data/shaders/glsl/shadowmappingcascade/scene.frag similarity index 100% rename from data/shaders/shadowmappingcascade/scene.frag rename to data/shaders/glsl/shadowmappingcascade/scene.frag diff --git a/data/shaders/shadowmappingcascade/scene.frag.spv b/data/shaders/glsl/shadowmappingcascade/scene.frag.spv similarity index 100% rename from data/shaders/shadowmappingcascade/scene.frag.spv rename to data/shaders/glsl/shadowmappingcascade/scene.frag.spv diff --git a/data/shaders/shadowmappingcascade/scene.vert b/data/shaders/glsl/shadowmappingcascade/scene.vert similarity index 100% rename from data/shaders/shadowmappingcascade/scene.vert rename to data/shaders/glsl/shadowmappingcascade/scene.vert diff --git a/data/shaders/shadowmappingcascade/scene.vert.spv b/data/shaders/glsl/shadowmappingcascade/scene.vert.spv similarity index 100% rename from data/shaders/shadowmappingcascade/scene.vert.spv rename to data/shaders/glsl/shadowmappingcascade/scene.vert.spv diff --git a/data/shaders/skeletalanimation/mesh.frag b/data/shaders/glsl/skeletalanimation/mesh.frag similarity index 100% rename from data/shaders/skeletalanimation/mesh.frag rename to data/shaders/glsl/skeletalanimation/mesh.frag diff --git a/data/shaders/skeletalanimation/mesh.frag.spv b/data/shaders/glsl/skeletalanimation/mesh.frag.spv similarity index 100% rename from data/shaders/skeletalanimation/mesh.frag.spv rename to data/shaders/glsl/skeletalanimation/mesh.frag.spv diff --git a/data/shaders/skeletalanimation/mesh.vert b/data/shaders/glsl/skeletalanimation/mesh.vert similarity index 100% rename from data/shaders/skeletalanimation/mesh.vert rename to data/shaders/glsl/skeletalanimation/mesh.vert diff --git a/data/shaders/skeletalanimation/mesh.vert.spv b/data/shaders/glsl/skeletalanimation/mesh.vert.spv similarity index 100% rename from data/shaders/skeletalanimation/mesh.vert.spv rename to data/shaders/glsl/skeletalanimation/mesh.vert.spv diff --git a/data/shaders/skeletalanimation/texture.frag b/data/shaders/glsl/skeletalanimation/texture.frag similarity index 100% rename from data/shaders/skeletalanimation/texture.frag rename to data/shaders/glsl/skeletalanimation/texture.frag diff --git a/data/shaders/skeletalanimation/texture.frag.spv b/data/shaders/glsl/skeletalanimation/texture.frag.spv similarity index 100% rename from data/shaders/skeletalanimation/texture.frag.spv rename to data/shaders/glsl/skeletalanimation/texture.frag.spv diff --git a/data/shaders/skeletalanimation/texture.vert b/data/shaders/glsl/skeletalanimation/texture.vert similarity index 100% rename from data/shaders/skeletalanimation/texture.vert rename to data/shaders/glsl/skeletalanimation/texture.vert diff --git a/data/shaders/skeletalanimation/texture.vert.spv b/data/shaders/glsl/skeletalanimation/texture.vert.spv similarity index 100% rename from data/shaders/skeletalanimation/texture.vert.spv rename to data/shaders/glsl/skeletalanimation/texture.vert.spv diff --git a/data/shaders/specializationconstants/uber.frag b/data/shaders/glsl/specializationconstants/uber.frag similarity index 100% rename from data/shaders/specializationconstants/uber.frag rename to data/shaders/glsl/specializationconstants/uber.frag diff --git a/data/shaders/specializationconstants/uber.frag.spv b/data/shaders/glsl/specializationconstants/uber.frag.spv similarity index 100% rename from data/shaders/specializationconstants/uber.frag.spv rename to data/shaders/glsl/specializationconstants/uber.frag.spv diff --git a/data/shaders/specializationconstants/uber.vert b/data/shaders/glsl/specializationconstants/uber.vert similarity index 100% rename from data/shaders/specializationconstants/uber.vert rename to data/shaders/glsl/specializationconstants/uber.vert diff --git a/data/shaders/specializationconstants/uber.vert.spv b/data/shaders/glsl/specializationconstants/uber.vert.spv similarity index 100% rename from data/shaders/specializationconstants/uber.vert.spv rename to data/shaders/glsl/specializationconstants/uber.vert.spv diff --git a/data/shaders/sphericalenvmapping/generate-spirv.bat b/data/shaders/glsl/sphericalenvmapping/generate-spirv.bat similarity index 100% rename from data/shaders/sphericalenvmapping/generate-spirv.bat rename to data/shaders/glsl/sphericalenvmapping/generate-spirv.bat diff --git a/data/shaders/sphericalenvmapping/sem.frag b/data/shaders/glsl/sphericalenvmapping/sem.frag similarity index 100% rename from data/shaders/sphericalenvmapping/sem.frag rename to data/shaders/glsl/sphericalenvmapping/sem.frag diff --git a/data/shaders/sphericalenvmapping/sem.frag.spv b/data/shaders/glsl/sphericalenvmapping/sem.frag.spv similarity index 100% rename from data/shaders/sphericalenvmapping/sem.frag.spv rename to data/shaders/glsl/sphericalenvmapping/sem.frag.spv diff --git a/data/shaders/sphericalenvmapping/sem.vert b/data/shaders/glsl/sphericalenvmapping/sem.vert similarity index 100% rename from data/shaders/sphericalenvmapping/sem.vert rename to data/shaders/glsl/sphericalenvmapping/sem.vert diff --git a/data/shaders/sphericalenvmapping/sem.vert.spv b/data/shaders/glsl/sphericalenvmapping/sem.vert.spv similarity index 100% rename from data/shaders/sphericalenvmapping/sem.vert.spv rename to data/shaders/glsl/sphericalenvmapping/sem.vert.spv diff --git a/data/shaders/ssao/blur.frag b/data/shaders/glsl/ssao/blur.frag similarity index 100% rename from data/shaders/ssao/blur.frag rename to data/shaders/glsl/ssao/blur.frag diff --git a/data/shaders/ssao/blur.frag.spv b/data/shaders/glsl/ssao/blur.frag.spv similarity index 100% rename from data/shaders/ssao/blur.frag.spv rename to data/shaders/glsl/ssao/blur.frag.spv diff --git a/data/shaders/ssao/composition.frag b/data/shaders/glsl/ssao/composition.frag similarity index 100% rename from data/shaders/ssao/composition.frag rename to data/shaders/glsl/ssao/composition.frag diff --git a/data/shaders/ssao/composition.frag.spv b/data/shaders/glsl/ssao/composition.frag.spv similarity index 100% rename from data/shaders/ssao/composition.frag.spv rename to data/shaders/glsl/ssao/composition.frag.spv diff --git a/data/shaders/ssao/fullscreen.vert b/data/shaders/glsl/ssao/fullscreen.vert similarity index 100% rename from data/shaders/ssao/fullscreen.vert rename to data/shaders/glsl/ssao/fullscreen.vert diff --git a/data/shaders/ssao/fullscreen.vert.spv b/data/shaders/glsl/ssao/fullscreen.vert.spv similarity index 100% rename from data/shaders/ssao/fullscreen.vert.spv rename to data/shaders/glsl/ssao/fullscreen.vert.spv diff --git a/data/shaders/ssao/gbuffer.frag b/data/shaders/glsl/ssao/gbuffer.frag similarity index 100% rename from data/shaders/ssao/gbuffer.frag rename to data/shaders/glsl/ssao/gbuffer.frag diff --git a/data/shaders/ssao/gbuffer.frag.spv b/data/shaders/glsl/ssao/gbuffer.frag.spv similarity index 100% rename from data/shaders/ssao/gbuffer.frag.spv rename to data/shaders/glsl/ssao/gbuffer.frag.spv diff --git a/data/shaders/ssao/gbuffer.vert b/data/shaders/glsl/ssao/gbuffer.vert similarity index 100% rename from data/shaders/ssao/gbuffer.vert rename to data/shaders/glsl/ssao/gbuffer.vert diff --git a/data/shaders/ssao/gbuffer.vert.spv b/data/shaders/glsl/ssao/gbuffer.vert.spv similarity index 100% rename from data/shaders/ssao/gbuffer.vert.spv rename to data/shaders/glsl/ssao/gbuffer.vert.spv diff --git a/data/shaders/ssao/ssao.frag b/data/shaders/glsl/ssao/ssao.frag similarity index 100% rename from data/shaders/ssao/ssao.frag rename to data/shaders/glsl/ssao/ssao.frag diff --git a/data/shaders/ssao/ssao.frag.spv b/data/shaders/glsl/ssao/ssao.frag.spv similarity index 100% rename from data/shaders/ssao/ssao.frag.spv rename to data/shaders/glsl/ssao/ssao.frag.spv diff --git a/data/shaders/stencilbuffer/outline.frag b/data/shaders/glsl/stencilbuffer/outline.frag similarity index 100% rename from data/shaders/stencilbuffer/outline.frag rename to data/shaders/glsl/stencilbuffer/outline.frag diff --git a/data/shaders/stencilbuffer/outline.frag.spv b/data/shaders/glsl/stencilbuffer/outline.frag.spv similarity index 100% rename from data/shaders/stencilbuffer/outline.frag.spv rename to data/shaders/glsl/stencilbuffer/outline.frag.spv diff --git a/data/shaders/stencilbuffer/outline.vert b/data/shaders/glsl/stencilbuffer/outline.vert similarity index 100% rename from data/shaders/stencilbuffer/outline.vert rename to data/shaders/glsl/stencilbuffer/outline.vert diff --git a/data/shaders/stencilbuffer/outline.vert.spv b/data/shaders/glsl/stencilbuffer/outline.vert.spv similarity index 100% rename from data/shaders/stencilbuffer/outline.vert.spv rename to data/shaders/glsl/stencilbuffer/outline.vert.spv diff --git a/data/shaders/stencilbuffer/toon.frag b/data/shaders/glsl/stencilbuffer/toon.frag similarity index 100% rename from data/shaders/stencilbuffer/toon.frag rename to data/shaders/glsl/stencilbuffer/toon.frag diff --git a/data/shaders/stencilbuffer/toon.frag.spv b/data/shaders/glsl/stencilbuffer/toon.frag.spv similarity index 100% rename from data/shaders/stencilbuffer/toon.frag.spv rename to data/shaders/glsl/stencilbuffer/toon.frag.spv diff --git a/data/shaders/stencilbuffer/toon.vert b/data/shaders/glsl/stencilbuffer/toon.vert similarity index 100% rename from data/shaders/stencilbuffer/toon.vert rename to data/shaders/glsl/stencilbuffer/toon.vert diff --git a/data/shaders/stencilbuffer/toon.vert.spv b/data/shaders/glsl/stencilbuffer/toon.vert.spv similarity index 100% rename from data/shaders/stencilbuffer/toon.vert.spv rename to data/shaders/glsl/stencilbuffer/toon.vert.spv diff --git a/data/shaders/subpasses/composition.frag b/data/shaders/glsl/subpasses/composition.frag similarity index 100% rename from data/shaders/subpasses/composition.frag rename to data/shaders/glsl/subpasses/composition.frag diff --git a/data/shaders/subpasses/composition.frag.spv b/data/shaders/glsl/subpasses/composition.frag.spv similarity index 100% rename from data/shaders/subpasses/composition.frag.spv rename to data/shaders/glsl/subpasses/composition.frag.spv diff --git a/data/shaders/subpasses/composition.vert b/data/shaders/glsl/subpasses/composition.vert similarity index 100% rename from data/shaders/subpasses/composition.vert rename to data/shaders/glsl/subpasses/composition.vert diff --git a/data/shaders/subpasses/composition.vert.spv b/data/shaders/glsl/subpasses/composition.vert.spv similarity index 100% rename from data/shaders/subpasses/composition.vert.spv rename to data/shaders/glsl/subpasses/composition.vert.spv diff --git a/data/shaders/subpasses/gbuffer.frag b/data/shaders/glsl/subpasses/gbuffer.frag similarity index 100% rename from data/shaders/subpasses/gbuffer.frag rename to data/shaders/glsl/subpasses/gbuffer.frag diff --git a/data/shaders/subpasses/gbuffer.frag.spv b/data/shaders/glsl/subpasses/gbuffer.frag.spv similarity index 100% rename from data/shaders/subpasses/gbuffer.frag.spv rename to data/shaders/glsl/subpasses/gbuffer.frag.spv diff --git a/data/shaders/subpasses/gbuffer.vert b/data/shaders/glsl/subpasses/gbuffer.vert similarity index 100% rename from data/shaders/subpasses/gbuffer.vert rename to data/shaders/glsl/subpasses/gbuffer.vert diff --git a/data/shaders/subpasses/gbuffer.vert.spv b/data/shaders/glsl/subpasses/gbuffer.vert.spv similarity index 100% rename from data/shaders/subpasses/gbuffer.vert.spv rename to data/shaders/glsl/subpasses/gbuffer.vert.spv diff --git a/data/shaders/subpasses/transparent.frag b/data/shaders/glsl/subpasses/transparent.frag similarity index 100% rename from data/shaders/subpasses/transparent.frag rename to data/shaders/glsl/subpasses/transparent.frag diff --git a/data/shaders/subpasses/transparent.frag.spv b/data/shaders/glsl/subpasses/transparent.frag.spv similarity index 100% rename from data/shaders/subpasses/transparent.frag.spv rename to data/shaders/glsl/subpasses/transparent.frag.spv diff --git a/data/shaders/subpasses/transparent.vert b/data/shaders/glsl/subpasses/transparent.vert similarity index 100% rename from data/shaders/subpasses/transparent.vert rename to data/shaders/glsl/subpasses/transparent.vert diff --git a/data/shaders/subpasses/transparent.vert.spv b/data/shaders/glsl/subpasses/transparent.vert.spv similarity index 100% rename from data/shaders/subpasses/transparent.vert.spv rename to data/shaders/glsl/subpasses/transparent.vert.spv diff --git a/data/shaders/terraintessellation/generate-spirv.bat b/data/shaders/glsl/terraintessellation/generate-spirv.bat similarity index 100% rename from data/shaders/terraintessellation/generate-spirv.bat rename to data/shaders/glsl/terraintessellation/generate-spirv.bat diff --git a/data/shaders/terraintessellation/skysphere.frag b/data/shaders/glsl/terraintessellation/skysphere.frag similarity index 100% rename from data/shaders/terraintessellation/skysphere.frag rename to data/shaders/glsl/terraintessellation/skysphere.frag diff --git a/data/shaders/terraintessellation/skysphere.frag.spv b/data/shaders/glsl/terraintessellation/skysphere.frag.spv similarity index 100% rename from data/shaders/terraintessellation/skysphere.frag.spv rename to data/shaders/glsl/terraintessellation/skysphere.frag.spv diff --git a/data/shaders/terraintessellation/skysphere.vert b/data/shaders/glsl/terraintessellation/skysphere.vert similarity index 100% rename from data/shaders/terraintessellation/skysphere.vert rename to data/shaders/glsl/terraintessellation/skysphere.vert diff --git a/data/shaders/terraintessellation/skysphere.vert.spv b/data/shaders/glsl/terraintessellation/skysphere.vert.spv similarity index 100% rename from data/shaders/terraintessellation/skysphere.vert.spv rename to data/shaders/glsl/terraintessellation/skysphere.vert.spv diff --git a/data/shaders/terraintessellation/terrain.frag b/data/shaders/glsl/terraintessellation/terrain.frag similarity index 100% rename from data/shaders/terraintessellation/terrain.frag rename to data/shaders/glsl/terraintessellation/terrain.frag diff --git a/data/shaders/terraintessellation/terrain.frag.spv b/data/shaders/glsl/terraintessellation/terrain.frag.spv similarity index 100% rename from data/shaders/terraintessellation/terrain.frag.spv rename to data/shaders/glsl/terraintessellation/terrain.frag.spv diff --git a/data/shaders/terraintessellation/terrain.tesc b/data/shaders/glsl/terraintessellation/terrain.tesc similarity index 100% rename from data/shaders/terraintessellation/terrain.tesc rename to data/shaders/glsl/terraintessellation/terrain.tesc diff --git a/data/shaders/terraintessellation/terrain.tesc.spv b/data/shaders/glsl/terraintessellation/terrain.tesc.spv similarity index 100% rename from data/shaders/terraintessellation/terrain.tesc.spv rename to data/shaders/glsl/terraintessellation/terrain.tesc.spv diff --git a/data/shaders/terraintessellation/terrain.tese b/data/shaders/glsl/terraintessellation/terrain.tese similarity index 100% rename from data/shaders/terraintessellation/terrain.tese rename to data/shaders/glsl/terraintessellation/terrain.tese diff --git a/data/shaders/terraintessellation/terrain.tese.spv b/data/shaders/glsl/terraintessellation/terrain.tese.spv similarity index 100% rename from data/shaders/terraintessellation/terrain.tese.spv rename to data/shaders/glsl/terraintessellation/terrain.tese.spv diff --git a/data/shaders/terraintessellation/terrain.vert b/data/shaders/glsl/terraintessellation/terrain.vert similarity index 100% rename from data/shaders/terraintessellation/terrain.vert rename to data/shaders/glsl/terraintessellation/terrain.vert diff --git a/data/shaders/terraintessellation/terrain.vert.spv b/data/shaders/glsl/terraintessellation/terrain.vert.spv similarity index 100% rename from data/shaders/terraintessellation/terrain.vert.spv rename to data/shaders/glsl/terraintessellation/terrain.vert.spv diff --git a/data/shaders/tessellation/base.frag b/data/shaders/glsl/tessellation/base.frag similarity index 100% rename from data/shaders/tessellation/base.frag rename to data/shaders/glsl/tessellation/base.frag diff --git a/data/shaders/tessellation/base.frag.spv b/data/shaders/glsl/tessellation/base.frag.spv similarity index 100% rename from data/shaders/tessellation/base.frag.spv rename to data/shaders/glsl/tessellation/base.frag.spv diff --git a/data/shaders/tessellation/base.vert b/data/shaders/glsl/tessellation/base.vert similarity index 100% rename from data/shaders/tessellation/base.vert rename to data/shaders/glsl/tessellation/base.vert diff --git a/data/shaders/tessellation/base.vert.spv b/data/shaders/glsl/tessellation/base.vert.spv similarity index 100% rename from data/shaders/tessellation/base.vert.spv rename to data/shaders/glsl/tessellation/base.vert.spv diff --git a/data/shaders/tessellation/generate-spriv.bat b/data/shaders/glsl/tessellation/generate-spriv.bat similarity index 100% rename from data/shaders/tessellation/generate-spriv.bat rename to data/shaders/glsl/tessellation/generate-spriv.bat diff --git a/data/shaders/tessellation/passthrough.tesc b/data/shaders/glsl/tessellation/passthrough.tesc similarity index 100% rename from data/shaders/tessellation/passthrough.tesc rename to data/shaders/glsl/tessellation/passthrough.tesc diff --git a/data/shaders/tessellation/passthrough.tesc.spv b/data/shaders/glsl/tessellation/passthrough.tesc.spv similarity index 100% rename from data/shaders/tessellation/passthrough.tesc.spv rename to data/shaders/glsl/tessellation/passthrough.tesc.spv diff --git a/data/shaders/tessellation/passthrough.tese b/data/shaders/glsl/tessellation/passthrough.tese similarity index 100% rename from data/shaders/tessellation/passthrough.tese rename to data/shaders/glsl/tessellation/passthrough.tese diff --git a/data/shaders/tessellation/passthrough.tese.spv b/data/shaders/glsl/tessellation/passthrough.tese.spv similarity index 100% rename from data/shaders/tessellation/passthrough.tese.spv rename to data/shaders/glsl/tessellation/passthrough.tese.spv diff --git a/data/shaders/tessellation/pntriangles.tesc b/data/shaders/glsl/tessellation/pntriangles.tesc similarity index 100% rename from data/shaders/tessellation/pntriangles.tesc rename to data/shaders/glsl/tessellation/pntriangles.tesc diff --git a/data/shaders/tessellation/pntriangles.tesc.spv b/data/shaders/glsl/tessellation/pntriangles.tesc.spv similarity index 100% rename from data/shaders/tessellation/pntriangles.tesc.spv rename to data/shaders/glsl/tessellation/pntriangles.tesc.spv diff --git a/data/shaders/tessellation/pntriangles.tese b/data/shaders/glsl/tessellation/pntriangles.tese similarity index 100% rename from data/shaders/tessellation/pntriangles.tese rename to data/shaders/glsl/tessellation/pntriangles.tese diff --git a/data/shaders/tessellation/pntriangles.tese.spv b/data/shaders/glsl/tessellation/pntriangles.tese.spv similarity index 100% rename from data/shaders/tessellation/pntriangles.tese.spv rename to data/shaders/glsl/tessellation/pntriangles.tese.spv diff --git a/data/shaders/textoverlay/mesh.frag b/data/shaders/glsl/textoverlay/mesh.frag similarity index 100% rename from data/shaders/textoverlay/mesh.frag rename to data/shaders/glsl/textoverlay/mesh.frag diff --git a/data/shaders/textoverlay/mesh.frag.spv b/data/shaders/glsl/textoverlay/mesh.frag.spv similarity index 100% rename from data/shaders/textoverlay/mesh.frag.spv rename to data/shaders/glsl/textoverlay/mesh.frag.spv diff --git a/data/shaders/textoverlay/mesh.vert b/data/shaders/glsl/textoverlay/mesh.vert similarity index 100% rename from data/shaders/textoverlay/mesh.vert rename to data/shaders/glsl/textoverlay/mesh.vert diff --git a/data/shaders/textoverlay/mesh.vert.spv b/data/shaders/glsl/textoverlay/mesh.vert.spv similarity index 100% rename from data/shaders/textoverlay/mesh.vert.spv rename to data/shaders/glsl/textoverlay/mesh.vert.spv diff --git a/data/shaders/textoverlay/text.frag b/data/shaders/glsl/textoverlay/text.frag similarity index 100% rename from data/shaders/textoverlay/text.frag rename to data/shaders/glsl/textoverlay/text.frag diff --git a/data/shaders/textoverlay/text.frag.spv b/data/shaders/glsl/textoverlay/text.frag.spv similarity index 100% rename from data/shaders/textoverlay/text.frag.spv rename to data/shaders/glsl/textoverlay/text.frag.spv diff --git a/data/shaders/textoverlay/text.vert b/data/shaders/glsl/textoverlay/text.vert similarity index 100% rename from data/shaders/textoverlay/text.vert rename to data/shaders/glsl/textoverlay/text.vert diff --git a/data/shaders/textoverlay/text.vert.spv b/data/shaders/glsl/textoverlay/text.vert.spv similarity index 100% rename from data/shaders/textoverlay/text.vert.spv rename to data/shaders/glsl/textoverlay/text.vert.spv diff --git a/data/shaders/texture/generate-spirv.bat b/data/shaders/glsl/texture/generate-spirv.bat similarity index 100% rename from data/shaders/texture/generate-spirv.bat rename to data/shaders/glsl/texture/generate-spirv.bat diff --git a/data/shaders/texture/texture.frag b/data/shaders/glsl/texture/texture.frag similarity index 100% rename from data/shaders/texture/texture.frag rename to data/shaders/glsl/texture/texture.frag diff --git a/data/shaders/texture/texture.frag.spv b/data/shaders/glsl/texture/texture.frag.spv similarity index 100% rename from data/shaders/texture/texture.frag.spv rename to data/shaders/glsl/texture/texture.frag.spv diff --git a/data/shaders/texture/texture.vert b/data/shaders/glsl/texture/texture.vert similarity index 100% rename from data/shaders/texture/texture.vert rename to data/shaders/glsl/texture/texture.vert diff --git a/data/shaders/texture/texture.vert.spv b/data/shaders/glsl/texture/texture.vert.spv similarity index 100% rename from data/shaders/texture/texture.vert.spv rename to data/shaders/glsl/texture/texture.vert.spv diff --git a/data/shaders/texture3d/texture3d.frag b/data/shaders/glsl/texture3d/texture3d.frag similarity index 100% rename from data/shaders/texture3d/texture3d.frag rename to data/shaders/glsl/texture3d/texture3d.frag diff --git a/data/shaders/texture3d/texture3d.frag.spv b/data/shaders/glsl/texture3d/texture3d.frag.spv similarity index 100% rename from data/shaders/texture3d/texture3d.frag.spv rename to data/shaders/glsl/texture3d/texture3d.frag.spv diff --git a/data/shaders/texture3d/texture3d.vert b/data/shaders/glsl/texture3d/texture3d.vert similarity index 100% rename from data/shaders/texture3d/texture3d.vert rename to data/shaders/glsl/texture3d/texture3d.vert diff --git a/data/shaders/texture3d/texture3d.vert.spv b/data/shaders/glsl/texture3d/texture3d.vert.spv similarity index 100% rename from data/shaders/texture3d/texture3d.vert.spv rename to data/shaders/glsl/texture3d/texture3d.vert.spv diff --git a/data/shaders/texturearray/generate-spirv.bat b/data/shaders/glsl/texturearray/generate-spirv.bat similarity index 100% rename from data/shaders/texturearray/generate-spirv.bat rename to data/shaders/glsl/texturearray/generate-spirv.bat diff --git a/data/shaders/texturearray/instancing.frag b/data/shaders/glsl/texturearray/instancing.frag similarity index 100% rename from data/shaders/texturearray/instancing.frag rename to data/shaders/glsl/texturearray/instancing.frag diff --git a/data/shaders/texturearray/instancing.frag.spv b/data/shaders/glsl/texturearray/instancing.frag.spv similarity index 100% rename from data/shaders/texturearray/instancing.frag.spv rename to data/shaders/glsl/texturearray/instancing.frag.spv diff --git a/data/shaders/texturearray/instancing.vert b/data/shaders/glsl/texturearray/instancing.vert similarity index 100% rename from data/shaders/texturearray/instancing.vert rename to data/shaders/glsl/texturearray/instancing.vert diff --git a/data/shaders/texturearray/instancing.vert.spv b/data/shaders/glsl/texturearray/instancing.vert.spv similarity index 100% rename from data/shaders/texturearray/instancing.vert.spv rename to data/shaders/glsl/texturearray/instancing.vert.spv diff --git a/data/shaders/texturecubemap/reflect.frag b/data/shaders/glsl/texturecubemap/reflect.frag similarity index 100% rename from data/shaders/texturecubemap/reflect.frag rename to data/shaders/glsl/texturecubemap/reflect.frag diff --git a/data/shaders/texturecubemap/reflect.frag.spv b/data/shaders/glsl/texturecubemap/reflect.frag.spv similarity index 100% rename from data/shaders/texturecubemap/reflect.frag.spv rename to data/shaders/glsl/texturecubemap/reflect.frag.spv diff --git a/data/shaders/texturecubemap/reflect.vert b/data/shaders/glsl/texturecubemap/reflect.vert similarity index 100% rename from data/shaders/texturecubemap/reflect.vert rename to data/shaders/glsl/texturecubemap/reflect.vert diff --git a/data/shaders/texturecubemap/reflect.vert.spv b/data/shaders/glsl/texturecubemap/reflect.vert.spv similarity index 100% rename from data/shaders/texturecubemap/reflect.vert.spv rename to data/shaders/glsl/texturecubemap/reflect.vert.spv diff --git a/data/shaders/texturecubemap/skybox.frag b/data/shaders/glsl/texturecubemap/skybox.frag similarity index 100% rename from data/shaders/texturecubemap/skybox.frag rename to data/shaders/glsl/texturecubemap/skybox.frag diff --git a/data/shaders/texturecubemap/skybox.frag.spv b/data/shaders/glsl/texturecubemap/skybox.frag.spv similarity index 100% rename from data/shaders/texturecubemap/skybox.frag.spv rename to data/shaders/glsl/texturecubemap/skybox.frag.spv diff --git a/data/shaders/texturecubemap/skybox.vert b/data/shaders/glsl/texturecubemap/skybox.vert similarity index 100% rename from data/shaders/texturecubemap/skybox.vert rename to data/shaders/glsl/texturecubemap/skybox.vert diff --git a/data/shaders/texturecubemap/skybox.vert.spv b/data/shaders/glsl/texturecubemap/skybox.vert.spv similarity index 100% rename from data/shaders/texturecubemap/skybox.vert.spv rename to data/shaders/glsl/texturecubemap/skybox.vert.spv diff --git a/data/shaders/texturemipmapgen/texture.frag b/data/shaders/glsl/texturemipmapgen/texture.frag similarity index 100% rename from data/shaders/texturemipmapgen/texture.frag rename to data/shaders/glsl/texturemipmapgen/texture.frag diff --git a/data/shaders/texturemipmapgen/texture.frag.spv b/data/shaders/glsl/texturemipmapgen/texture.frag.spv similarity index 100% rename from data/shaders/texturemipmapgen/texture.frag.spv rename to data/shaders/glsl/texturemipmapgen/texture.frag.spv diff --git a/data/shaders/texturemipmapgen/texture.vert b/data/shaders/glsl/texturemipmapgen/texture.vert similarity index 100% rename from data/shaders/texturemipmapgen/texture.vert rename to data/shaders/glsl/texturemipmapgen/texture.vert diff --git a/data/shaders/texturemipmapgen/texture.vert.spv b/data/shaders/glsl/texturemipmapgen/texture.vert.spv similarity index 100% rename from data/shaders/texturemipmapgen/texture.vert.spv rename to data/shaders/glsl/texturemipmapgen/texture.vert.spv diff --git a/data/shaders/texturesparseresidency/sparseresidency.frag b/data/shaders/glsl/texturesparseresidency/sparseresidency.frag similarity index 100% rename from data/shaders/texturesparseresidency/sparseresidency.frag rename to data/shaders/glsl/texturesparseresidency/sparseresidency.frag diff --git a/data/shaders/texturesparseresidency/sparseresidency.frag.spv b/data/shaders/glsl/texturesparseresidency/sparseresidency.frag.spv similarity index 100% rename from data/shaders/texturesparseresidency/sparseresidency.frag.spv rename to data/shaders/glsl/texturesparseresidency/sparseresidency.frag.spv diff --git a/data/shaders/texturesparseresidency/sparseresidency.vert b/data/shaders/glsl/texturesparseresidency/sparseresidency.vert similarity index 100% rename from data/shaders/texturesparseresidency/sparseresidency.vert rename to data/shaders/glsl/texturesparseresidency/sparseresidency.vert diff --git a/data/shaders/texturesparseresidency/sparseresidency.vert.spv b/data/shaders/glsl/texturesparseresidency/sparseresidency.vert.spv similarity index 100% rename from data/shaders/texturesparseresidency/sparseresidency.vert.spv rename to data/shaders/glsl/texturesparseresidency/sparseresidency.vert.spv diff --git a/data/shaders/triangle/triangle.frag b/data/shaders/glsl/triangle/triangle.frag similarity index 100% rename from data/shaders/triangle/triangle.frag rename to data/shaders/glsl/triangle/triangle.frag diff --git a/data/shaders/triangle/triangle.frag.spv b/data/shaders/glsl/triangle/triangle.frag.spv similarity index 100% rename from data/shaders/triangle/triangle.frag.spv rename to data/shaders/glsl/triangle/triangle.frag.spv diff --git a/data/shaders/triangle/triangle.vert b/data/shaders/glsl/triangle/triangle.vert similarity index 100% rename from data/shaders/triangle/triangle.vert rename to data/shaders/glsl/triangle/triangle.vert diff --git a/data/shaders/triangle/triangle.vert.spv b/data/shaders/glsl/triangle/triangle.vert.spv similarity index 100% rename from data/shaders/triangle/triangle.vert.spv rename to data/shaders/glsl/triangle/triangle.vert.spv diff --git a/data/shaders/viewportarray/multiview.geom b/data/shaders/glsl/viewportarray/multiview.geom similarity index 100% rename from data/shaders/viewportarray/multiview.geom rename to data/shaders/glsl/viewportarray/multiview.geom diff --git a/data/shaders/viewportarray/multiview.geom.spv b/data/shaders/glsl/viewportarray/multiview.geom.spv similarity index 100% rename from data/shaders/viewportarray/multiview.geom.spv rename to data/shaders/glsl/viewportarray/multiview.geom.spv diff --git a/data/shaders/viewportarray/scene.frag b/data/shaders/glsl/viewportarray/scene.frag similarity index 100% rename from data/shaders/viewportarray/scene.frag rename to data/shaders/glsl/viewportarray/scene.frag diff --git a/data/shaders/viewportarray/scene.frag.spv b/data/shaders/glsl/viewportarray/scene.frag.spv similarity index 100% rename from data/shaders/viewportarray/scene.frag.spv rename to data/shaders/glsl/viewportarray/scene.frag.spv diff --git a/data/shaders/viewportarray/scene.vert b/data/shaders/glsl/viewportarray/scene.vert similarity index 100% rename from data/shaders/viewportarray/scene.vert rename to data/shaders/glsl/viewportarray/scene.vert diff --git a/data/shaders/viewportarray/scene.vert.spv b/data/shaders/glsl/viewportarray/scene.vert.spv similarity index 100% rename from data/shaders/viewportarray/scene.vert.spv rename to data/shaders/glsl/viewportarray/scene.vert.spv diff --git a/data/shaders/vulkanscene/generate-spriv.bat b/data/shaders/glsl/vulkanscene/generate-spriv.bat similarity index 100% rename from data/shaders/vulkanscene/generate-spriv.bat rename to data/shaders/glsl/vulkanscene/generate-spriv.bat diff --git a/data/shaders/vulkanscene/logo.frag b/data/shaders/glsl/vulkanscene/logo.frag similarity index 100% rename from data/shaders/vulkanscene/logo.frag rename to data/shaders/glsl/vulkanscene/logo.frag diff --git a/data/shaders/vulkanscene/logo.frag.spv b/data/shaders/glsl/vulkanscene/logo.frag.spv similarity index 100% rename from data/shaders/vulkanscene/logo.frag.spv rename to data/shaders/glsl/vulkanscene/logo.frag.spv diff --git a/data/shaders/vulkanscene/logo.vert b/data/shaders/glsl/vulkanscene/logo.vert similarity index 100% rename from data/shaders/vulkanscene/logo.vert rename to data/shaders/glsl/vulkanscene/logo.vert diff --git a/data/shaders/vulkanscene/logo.vert.spv b/data/shaders/glsl/vulkanscene/logo.vert.spv similarity index 100% rename from data/shaders/vulkanscene/logo.vert.spv rename to data/shaders/glsl/vulkanscene/logo.vert.spv diff --git a/data/shaders/vulkanscene/mesh.frag b/data/shaders/glsl/vulkanscene/mesh.frag similarity index 100% rename from data/shaders/vulkanscene/mesh.frag rename to data/shaders/glsl/vulkanscene/mesh.frag diff --git a/data/shaders/vulkanscene/mesh.frag.spv b/data/shaders/glsl/vulkanscene/mesh.frag.spv similarity index 100% rename from data/shaders/vulkanscene/mesh.frag.spv rename to data/shaders/glsl/vulkanscene/mesh.frag.spv diff --git a/data/shaders/vulkanscene/mesh.vert b/data/shaders/glsl/vulkanscene/mesh.vert similarity index 100% rename from data/shaders/vulkanscene/mesh.vert rename to data/shaders/glsl/vulkanscene/mesh.vert diff --git a/data/shaders/vulkanscene/mesh.vert.spv b/data/shaders/glsl/vulkanscene/mesh.vert.spv similarity index 100% rename from data/shaders/vulkanscene/mesh.vert.spv rename to data/shaders/glsl/vulkanscene/mesh.vert.spv diff --git a/data/shaders/vulkanscene/skybox.frag b/data/shaders/glsl/vulkanscene/skybox.frag similarity index 100% rename from data/shaders/vulkanscene/skybox.frag rename to data/shaders/glsl/vulkanscene/skybox.frag diff --git a/data/shaders/vulkanscene/skybox.frag.spv b/data/shaders/glsl/vulkanscene/skybox.frag.spv similarity index 100% rename from data/shaders/vulkanscene/skybox.frag.spv rename to data/shaders/glsl/vulkanscene/skybox.frag.spv diff --git a/data/shaders/vulkanscene/skybox.vert b/data/shaders/glsl/vulkanscene/skybox.vert similarity index 100% rename from data/shaders/vulkanscene/skybox.vert rename to data/shaders/glsl/vulkanscene/skybox.vert diff --git a/data/shaders/vulkanscene/skybox.vert.spv b/data/shaders/glsl/vulkanscene/skybox.vert.spv similarity index 100% rename from data/shaders/vulkanscene/skybox.vert.spv rename to data/shaders/glsl/vulkanscene/skybox.vert.spv diff --git a/data/hlsl/README.md b/data/shaders/hlsl/README.md similarity index 93% rename from data/hlsl/README.md rename to data/shaders/hlsl/README.md index dfb2c79d..20a3de5b 100644 --- a/data/hlsl/README.md +++ b/data/shaders/hlsl/README.md @@ -1,6 +1,6 @@ ## HLSL Shaders -This directory contains a fork of the shaders found in [data/shaders](https://github.com/SaschaWillems/Vulkan/tree/master/data/shaders), re-written in HLSL. +This directory contains a fork of the shaders found in [data/shaders/glsl](https://github.com/SaschaWillems/Vulkan/tree/master/data/shaders/glsl), re-written in HLSL. These can be compiled with [DXC](https://github.com/microsoft/DirectXShaderCompiler) using the `compile.py` script. ### Known issues diff --git a/data/hlsl/base/textoverlay.frag b/data/shaders/hlsl/base/textoverlay.frag similarity index 100% rename from data/hlsl/base/textoverlay.frag rename to data/shaders/hlsl/base/textoverlay.frag diff --git a/data/hlsl/base/textoverlay.vert b/data/shaders/hlsl/base/textoverlay.vert similarity index 100% rename from data/hlsl/base/textoverlay.vert rename to data/shaders/hlsl/base/textoverlay.vert diff --git a/data/hlsl/base/uioverlay.frag b/data/shaders/hlsl/base/uioverlay.frag similarity index 100% rename from data/hlsl/base/uioverlay.frag rename to data/shaders/hlsl/base/uioverlay.frag diff --git a/data/hlsl/base/uioverlay.vert b/data/shaders/hlsl/base/uioverlay.vert similarity index 100% rename from data/hlsl/base/uioverlay.vert rename to data/shaders/hlsl/base/uioverlay.vert diff --git a/data/hlsl/bloom/colorpass.frag b/data/shaders/hlsl/bloom/colorpass.frag similarity index 100% rename from data/hlsl/bloom/colorpass.frag rename to data/shaders/hlsl/bloom/colorpass.frag diff --git a/data/hlsl/bloom/colorpass.vert b/data/shaders/hlsl/bloom/colorpass.vert similarity index 100% rename from data/hlsl/bloom/colorpass.vert rename to data/shaders/hlsl/bloom/colorpass.vert diff --git a/data/hlsl/bloom/gaussblur.frag b/data/shaders/hlsl/bloom/gaussblur.frag similarity index 100% rename from data/hlsl/bloom/gaussblur.frag rename to data/shaders/hlsl/bloom/gaussblur.frag diff --git a/data/hlsl/bloom/gaussblur.vert b/data/shaders/hlsl/bloom/gaussblur.vert similarity index 100% rename from data/hlsl/bloom/gaussblur.vert rename to data/shaders/hlsl/bloom/gaussblur.vert diff --git a/data/hlsl/bloom/phongpass.frag b/data/shaders/hlsl/bloom/phongpass.frag similarity index 100% rename from data/hlsl/bloom/phongpass.frag rename to data/shaders/hlsl/bloom/phongpass.frag diff --git a/data/hlsl/bloom/phongpass.vert b/data/shaders/hlsl/bloom/phongpass.vert similarity index 100% rename from data/hlsl/bloom/phongpass.vert rename to data/shaders/hlsl/bloom/phongpass.vert diff --git a/data/hlsl/bloom/skybox.frag b/data/shaders/hlsl/bloom/skybox.frag similarity index 100% rename from data/hlsl/bloom/skybox.frag rename to data/shaders/hlsl/bloom/skybox.frag diff --git a/data/hlsl/bloom/skybox.vert b/data/shaders/hlsl/bloom/skybox.vert similarity index 100% rename from data/hlsl/bloom/skybox.vert rename to data/shaders/hlsl/bloom/skybox.vert diff --git a/data/hlsl/compile.py b/data/shaders/hlsl/compile.py similarity index 97% rename from data/hlsl/compile.py rename to data/shaders/hlsl/compile.py index bad1f59b..2538b0d9 100644 --- a/data/hlsl/compile.py +++ b/data/shaders/hlsl/compile.py @@ -36,7 +36,7 @@ for root, dirs, files in os.walk(dir_path): if file.endswith(".vert") or file.endswith(".frag") or file.endswith(".comp") or file.endswith(".geom") or file.endswith(".tesc") or file.endswith(".tese") or file.endswith(".rgen") or file.endswith(".rchit") or file.endswith(".rmiss"): hlsl_file = os.path.join(root, file) - spv_out = os.path.abspath(os.path.join(dir_path, "..", "shaders", os.path.relpath(hlsl_file, dir_path) + ".spv")) + spv_out = os.path.abspath(os.path.join(dir_path, "..", "glsl", os.path.relpath(hlsl_file, dir_path) + ".spv")) # Make the spv directory if it does not already exist spv_dir = os.path.dirname(spv_out) diff --git a/data/hlsl/computecloth/cloth.comp b/data/shaders/hlsl/computecloth/cloth.comp similarity index 100% rename from data/hlsl/computecloth/cloth.comp rename to data/shaders/hlsl/computecloth/cloth.comp diff --git a/data/hlsl/computecloth/cloth.frag b/data/shaders/hlsl/computecloth/cloth.frag similarity index 100% rename from data/hlsl/computecloth/cloth.frag rename to data/shaders/hlsl/computecloth/cloth.frag diff --git a/data/hlsl/computecloth/cloth.vert b/data/shaders/hlsl/computecloth/cloth.vert similarity index 100% rename from data/hlsl/computecloth/cloth.vert rename to data/shaders/hlsl/computecloth/cloth.vert diff --git a/data/hlsl/computecloth/sphere.frag b/data/shaders/hlsl/computecloth/sphere.frag similarity index 100% rename from data/hlsl/computecloth/sphere.frag rename to data/shaders/hlsl/computecloth/sphere.frag diff --git a/data/hlsl/computecloth/sphere.vert b/data/shaders/hlsl/computecloth/sphere.vert similarity index 100% rename from data/hlsl/computecloth/sphere.vert rename to data/shaders/hlsl/computecloth/sphere.vert diff --git a/data/hlsl/computecullandlod/cull.comp b/data/shaders/hlsl/computecullandlod/cull.comp similarity index 100% rename from data/hlsl/computecullandlod/cull.comp rename to data/shaders/hlsl/computecullandlod/cull.comp diff --git a/data/hlsl/computecullandlod/indirectdraw.frag b/data/shaders/hlsl/computecullandlod/indirectdraw.frag similarity index 100% rename from data/hlsl/computecullandlod/indirectdraw.frag rename to data/shaders/hlsl/computecullandlod/indirectdraw.frag diff --git a/data/hlsl/computecullandlod/indirectdraw.vert b/data/shaders/hlsl/computecullandlod/indirectdraw.vert similarity index 100% rename from data/hlsl/computecullandlod/indirectdraw.vert rename to data/shaders/hlsl/computecullandlod/indirectdraw.vert diff --git a/data/hlsl/computeheadless/headless.comp b/data/shaders/hlsl/computeheadless/headless.comp similarity index 100% rename from data/hlsl/computeheadless/headless.comp rename to data/shaders/hlsl/computeheadless/headless.comp diff --git a/data/hlsl/computenbody/particle.frag b/data/shaders/hlsl/computenbody/particle.frag similarity index 100% rename from data/hlsl/computenbody/particle.frag rename to data/shaders/hlsl/computenbody/particle.frag diff --git a/data/hlsl/computenbody/particle.vert b/data/shaders/hlsl/computenbody/particle.vert similarity index 100% rename from data/hlsl/computenbody/particle.vert rename to data/shaders/hlsl/computenbody/particle.vert diff --git a/data/hlsl/computenbody/particle_calculate.comp b/data/shaders/hlsl/computenbody/particle_calculate.comp similarity index 100% rename from data/hlsl/computenbody/particle_calculate.comp rename to data/shaders/hlsl/computenbody/particle_calculate.comp diff --git a/data/hlsl/computenbody/particle_integrate.comp b/data/shaders/hlsl/computenbody/particle_integrate.comp similarity index 100% rename from data/hlsl/computenbody/particle_integrate.comp rename to data/shaders/hlsl/computenbody/particle_integrate.comp diff --git a/data/hlsl/computeparticles/particle.comp b/data/shaders/hlsl/computeparticles/particle.comp similarity index 100% rename from data/hlsl/computeparticles/particle.comp rename to data/shaders/hlsl/computeparticles/particle.comp diff --git a/data/hlsl/computeparticles/particle.frag b/data/shaders/hlsl/computeparticles/particle.frag similarity index 100% rename from data/hlsl/computeparticles/particle.frag rename to data/shaders/hlsl/computeparticles/particle.frag diff --git a/data/hlsl/computeparticles/particle.vert b/data/shaders/hlsl/computeparticles/particle.vert similarity index 100% rename from data/hlsl/computeparticles/particle.vert rename to data/shaders/hlsl/computeparticles/particle.vert diff --git a/data/hlsl/computeraytracing/raytracing.comp b/data/shaders/hlsl/computeraytracing/raytracing.comp similarity index 100% rename from data/hlsl/computeraytracing/raytracing.comp rename to data/shaders/hlsl/computeraytracing/raytracing.comp diff --git a/data/hlsl/computeraytracing/texture.frag b/data/shaders/hlsl/computeraytracing/texture.frag similarity index 100% rename from data/hlsl/computeraytracing/texture.frag rename to data/shaders/hlsl/computeraytracing/texture.frag diff --git a/data/hlsl/computeraytracing/texture.vert b/data/shaders/hlsl/computeraytracing/texture.vert similarity index 100% rename from data/hlsl/computeraytracing/texture.vert rename to data/shaders/hlsl/computeraytracing/texture.vert diff --git a/data/hlsl/computeshader/edgedetect.comp b/data/shaders/hlsl/computeshader/edgedetect.comp similarity index 100% rename from data/hlsl/computeshader/edgedetect.comp rename to data/shaders/hlsl/computeshader/edgedetect.comp diff --git a/data/hlsl/computeshader/emboss.comp b/data/shaders/hlsl/computeshader/emboss.comp similarity index 100% rename from data/hlsl/computeshader/emboss.comp rename to data/shaders/hlsl/computeshader/emboss.comp diff --git a/data/hlsl/computeshader/sharpen.comp b/data/shaders/hlsl/computeshader/sharpen.comp similarity index 100% rename from data/hlsl/computeshader/sharpen.comp rename to data/shaders/hlsl/computeshader/sharpen.comp diff --git a/data/hlsl/computeshader/texture.frag b/data/shaders/hlsl/computeshader/texture.frag similarity index 100% rename from data/hlsl/computeshader/texture.frag rename to data/shaders/hlsl/computeshader/texture.frag diff --git a/data/hlsl/computeshader/texture.vert b/data/shaders/hlsl/computeshader/texture.vert similarity index 100% rename from data/hlsl/computeshader/texture.vert rename to data/shaders/hlsl/computeshader/texture.vert diff --git a/data/hlsl/conditionalrender/model.frag b/data/shaders/hlsl/conditionalrender/model.frag similarity index 100% rename from data/hlsl/conditionalrender/model.frag rename to data/shaders/hlsl/conditionalrender/model.frag diff --git a/data/hlsl/conditionalrender/model.vert b/data/shaders/hlsl/conditionalrender/model.vert similarity index 100% rename from data/hlsl/conditionalrender/model.vert rename to data/shaders/hlsl/conditionalrender/model.vert diff --git a/data/hlsl/conservativeraster/fullscreen.frag b/data/shaders/hlsl/conservativeraster/fullscreen.frag similarity index 100% rename from data/hlsl/conservativeraster/fullscreen.frag rename to data/shaders/hlsl/conservativeraster/fullscreen.frag diff --git a/data/hlsl/conservativeraster/fullscreen.vert b/data/shaders/hlsl/conservativeraster/fullscreen.vert similarity index 100% rename from data/hlsl/conservativeraster/fullscreen.vert rename to data/shaders/hlsl/conservativeraster/fullscreen.vert diff --git a/data/hlsl/conservativeraster/triangle.frag b/data/shaders/hlsl/conservativeraster/triangle.frag similarity index 100% rename from data/hlsl/conservativeraster/triangle.frag rename to data/shaders/hlsl/conservativeraster/triangle.frag diff --git a/data/hlsl/conservativeraster/triangle.vert b/data/shaders/hlsl/conservativeraster/triangle.vert similarity index 100% rename from data/hlsl/conservativeraster/triangle.vert rename to data/shaders/hlsl/conservativeraster/triangle.vert diff --git a/data/hlsl/conservativeraster/triangleoverlay.frag b/data/shaders/hlsl/conservativeraster/triangleoverlay.frag similarity index 100% rename from data/hlsl/conservativeraster/triangleoverlay.frag rename to data/shaders/hlsl/conservativeraster/triangleoverlay.frag diff --git a/data/hlsl/debugmarker/colorpass.frag b/data/shaders/hlsl/debugmarker/colorpass.frag similarity index 100% rename from data/hlsl/debugmarker/colorpass.frag rename to data/shaders/hlsl/debugmarker/colorpass.frag diff --git a/data/hlsl/debugmarker/colorpass.vert b/data/shaders/hlsl/debugmarker/colorpass.vert similarity index 100% rename from data/hlsl/debugmarker/colorpass.vert rename to data/shaders/hlsl/debugmarker/colorpass.vert diff --git a/data/hlsl/debugmarker/postprocess.frag b/data/shaders/hlsl/debugmarker/postprocess.frag similarity index 100% rename from data/hlsl/debugmarker/postprocess.frag rename to data/shaders/hlsl/debugmarker/postprocess.frag diff --git a/data/hlsl/debugmarker/postprocess.vert b/data/shaders/hlsl/debugmarker/postprocess.vert similarity index 100% rename from data/hlsl/debugmarker/postprocess.vert rename to data/shaders/hlsl/debugmarker/postprocess.vert diff --git a/data/hlsl/debugmarker/toon.frag b/data/shaders/hlsl/debugmarker/toon.frag similarity index 100% rename from data/hlsl/debugmarker/toon.frag rename to data/shaders/hlsl/debugmarker/toon.frag diff --git a/data/hlsl/debugmarker/toon.vert b/data/shaders/hlsl/debugmarker/toon.vert similarity index 100% rename from data/hlsl/debugmarker/toon.vert rename to data/shaders/hlsl/debugmarker/toon.vert diff --git a/data/hlsl/deferred/debug.frag b/data/shaders/hlsl/deferred/debug.frag similarity index 100% rename from data/hlsl/deferred/debug.frag rename to data/shaders/hlsl/deferred/debug.frag diff --git a/data/hlsl/deferred/debug.vert b/data/shaders/hlsl/deferred/debug.vert similarity index 100% rename from data/hlsl/deferred/debug.vert rename to data/shaders/hlsl/deferred/debug.vert diff --git a/data/hlsl/deferred/deferred.frag b/data/shaders/hlsl/deferred/deferred.frag similarity index 100% rename from data/hlsl/deferred/deferred.frag rename to data/shaders/hlsl/deferred/deferred.frag diff --git a/data/hlsl/deferred/deferred.vert b/data/shaders/hlsl/deferred/deferred.vert similarity index 100% rename from data/hlsl/deferred/deferred.vert rename to data/shaders/hlsl/deferred/deferred.vert diff --git a/data/hlsl/deferred/mrt.frag b/data/shaders/hlsl/deferred/mrt.frag similarity index 100% rename from data/hlsl/deferred/mrt.frag rename to data/shaders/hlsl/deferred/mrt.frag diff --git a/data/hlsl/deferred/mrt.vert b/data/shaders/hlsl/deferred/mrt.vert similarity index 100% rename from data/hlsl/deferred/mrt.vert rename to data/shaders/hlsl/deferred/mrt.vert diff --git a/data/hlsl/deferredmultisampling/debug.frag b/data/shaders/hlsl/deferredmultisampling/debug.frag similarity index 100% rename from data/hlsl/deferredmultisampling/debug.frag rename to data/shaders/hlsl/deferredmultisampling/debug.frag diff --git a/data/hlsl/deferredmultisampling/debug.vert b/data/shaders/hlsl/deferredmultisampling/debug.vert similarity index 100% rename from data/hlsl/deferredmultisampling/debug.vert rename to data/shaders/hlsl/deferredmultisampling/debug.vert diff --git a/data/hlsl/deferredmultisampling/deferred.frag b/data/shaders/hlsl/deferredmultisampling/deferred.frag similarity index 100% rename from data/hlsl/deferredmultisampling/deferred.frag rename to data/shaders/hlsl/deferredmultisampling/deferred.frag diff --git a/data/hlsl/deferredmultisampling/deferred.vert b/data/shaders/hlsl/deferredmultisampling/deferred.vert similarity index 100% rename from data/hlsl/deferredmultisampling/deferred.vert rename to data/shaders/hlsl/deferredmultisampling/deferred.vert diff --git a/data/hlsl/deferredmultisampling/mrt.frag b/data/shaders/hlsl/deferredmultisampling/mrt.frag similarity index 100% rename from data/hlsl/deferredmultisampling/mrt.frag rename to data/shaders/hlsl/deferredmultisampling/mrt.frag diff --git a/data/hlsl/deferredmultisampling/mrt.vert b/data/shaders/hlsl/deferredmultisampling/mrt.vert similarity index 100% rename from data/hlsl/deferredmultisampling/mrt.vert rename to data/shaders/hlsl/deferredmultisampling/mrt.vert diff --git a/data/hlsl/deferredshadows/debug.frag b/data/shaders/hlsl/deferredshadows/debug.frag similarity index 100% rename from data/hlsl/deferredshadows/debug.frag rename to data/shaders/hlsl/deferredshadows/debug.frag diff --git a/data/hlsl/deferredshadows/debug.vert b/data/shaders/hlsl/deferredshadows/debug.vert similarity index 100% rename from data/hlsl/deferredshadows/debug.vert rename to data/shaders/hlsl/deferredshadows/debug.vert diff --git a/data/hlsl/deferredshadows/deferred.frag b/data/shaders/hlsl/deferredshadows/deferred.frag similarity index 100% rename from data/hlsl/deferredshadows/deferred.frag rename to data/shaders/hlsl/deferredshadows/deferred.frag diff --git a/data/hlsl/deferredshadows/deferred.vert b/data/shaders/hlsl/deferredshadows/deferred.vert similarity index 100% rename from data/hlsl/deferredshadows/deferred.vert rename to data/shaders/hlsl/deferredshadows/deferred.vert diff --git a/data/hlsl/deferredshadows/mrt.frag b/data/shaders/hlsl/deferredshadows/mrt.frag similarity index 100% rename from data/hlsl/deferredshadows/mrt.frag rename to data/shaders/hlsl/deferredshadows/mrt.frag diff --git a/data/hlsl/deferredshadows/mrt.vert b/data/shaders/hlsl/deferredshadows/mrt.vert similarity index 100% rename from data/hlsl/deferredshadows/mrt.vert rename to data/shaders/hlsl/deferredshadows/mrt.vert diff --git a/data/hlsl/deferredshadows/shadow.geom b/data/shaders/hlsl/deferredshadows/shadow.geom similarity index 100% rename from data/hlsl/deferredshadows/shadow.geom rename to data/shaders/hlsl/deferredshadows/shadow.geom diff --git a/data/hlsl/deferredshadows/shadow.vert b/data/shaders/hlsl/deferredshadows/shadow.vert similarity index 100% rename from data/hlsl/deferredshadows/shadow.vert rename to data/shaders/hlsl/deferredshadows/shadow.vert diff --git a/data/hlsl/descriptorsets/cube.frag b/data/shaders/hlsl/descriptorsets/cube.frag similarity index 100% rename from data/hlsl/descriptorsets/cube.frag rename to data/shaders/hlsl/descriptorsets/cube.frag diff --git a/data/hlsl/descriptorsets/cube.vert b/data/shaders/hlsl/descriptorsets/cube.vert similarity index 100% rename from data/hlsl/descriptorsets/cube.vert rename to data/shaders/hlsl/descriptorsets/cube.vert diff --git a/data/hlsl/displacement/base.frag b/data/shaders/hlsl/displacement/base.frag similarity index 100% rename from data/hlsl/displacement/base.frag rename to data/shaders/hlsl/displacement/base.frag diff --git a/data/hlsl/displacement/base.vert b/data/shaders/hlsl/displacement/base.vert similarity index 100% rename from data/hlsl/displacement/base.vert rename to data/shaders/hlsl/displacement/base.vert diff --git a/data/hlsl/displacement/displacement.tesc b/data/shaders/hlsl/displacement/displacement.tesc similarity index 100% rename from data/hlsl/displacement/displacement.tesc rename to data/shaders/hlsl/displacement/displacement.tesc diff --git a/data/hlsl/displacement/displacement.tese b/data/shaders/hlsl/displacement/displacement.tese similarity index 100% rename from data/hlsl/displacement/displacement.tese rename to data/shaders/hlsl/displacement/displacement.tese diff --git a/data/hlsl/distancefieldfonts/bitmap.frag b/data/shaders/hlsl/distancefieldfonts/bitmap.frag similarity index 100% rename from data/hlsl/distancefieldfonts/bitmap.frag rename to data/shaders/hlsl/distancefieldfonts/bitmap.frag diff --git a/data/hlsl/distancefieldfonts/bitmap.vert b/data/shaders/hlsl/distancefieldfonts/bitmap.vert similarity index 100% rename from data/hlsl/distancefieldfonts/bitmap.vert rename to data/shaders/hlsl/distancefieldfonts/bitmap.vert diff --git a/data/hlsl/distancefieldfonts/sdf.frag b/data/shaders/hlsl/distancefieldfonts/sdf.frag similarity index 100% rename from data/hlsl/distancefieldfonts/sdf.frag rename to data/shaders/hlsl/distancefieldfonts/sdf.frag diff --git a/data/hlsl/distancefieldfonts/sdf.vert b/data/shaders/hlsl/distancefieldfonts/sdf.vert similarity index 100% rename from data/hlsl/distancefieldfonts/sdf.vert rename to data/shaders/hlsl/distancefieldfonts/sdf.vert diff --git a/data/hlsl/dynamicuniformbuffer/base.frag b/data/shaders/hlsl/dynamicuniformbuffer/base.frag similarity index 100% rename from data/hlsl/dynamicuniformbuffer/base.frag rename to data/shaders/hlsl/dynamicuniformbuffer/base.frag diff --git a/data/hlsl/dynamicuniformbuffer/base.vert b/data/shaders/hlsl/dynamicuniformbuffer/base.vert similarity index 100% rename from data/hlsl/dynamicuniformbuffer/base.vert rename to data/shaders/hlsl/dynamicuniformbuffer/base.vert diff --git a/data/hlsl/gears/gears.frag b/data/shaders/hlsl/gears/gears.frag similarity index 100% rename from data/hlsl/gears/gears.frag rename to data/shaders/hlsl/gears/gears.frag diff --git a/data/hlsl/gears/gears.vert b/data/shaders/hlsl/gears/gears.vert similarity index 100% rename from data/hlsl/gears/gears.vert rename to data/shaders/hlsl/gears/gears.vert diff --git a/data/hlsl/geometryshader/base.frag b/data/shaders/hlsl/geometryshader/base.frag similarity index 100% rename from data/hlsl/geometryshader/base.frag rename to data/shaders/hlsl/geometryshader/base.frag diff --git a/data/hlsl/geometryshader/base.vert b/data/shaders/hlsl/geometryshader/base.vert similarity index 100% rename from data/hlsl/geometryshader/base.vert rename to data/shaders/hlsl/geometryshader/base.vert diff --git a/data/hlsl/geometryshader/mesh.frag b/data/shaders/hlsl/geometryshader/mesh.frag similarity index 100% rename from data/hlsl/geometryshader/mesh.frag rename to data/shaders/hlsl/geometryshader/mesh.frag diff --git a/data/hlsl/geometryshader/mesh.vert b/data/shaders/hlsl/geometryshader/mesh.vert similarity index 100% rename from data/hlsl/geometryshader/mesh.vert rename to data/shaders/hlsl/geometryshader/mesh.vert diff --git a/data/hlsl/geometryshader/normaldebug.geom b/data/shaders/hlsl/geometryshader/normaldebug.geom similarity index 100% rename from data/hlsl/geometryshader/normaldebug.geom rename to data/shaders/hlsl/geometryshader/normaldebug.geom diff --git a/data/hlsl/gltfscene/mesh.frag b/data/shaders/hlsl/gltfscene/mesh.frag similarity index 100% rename from data/hlsl/gltfscene/mesh.frag rename to data/shaders/hlsl/gltfscene/mesh.frag diff --git a/data/hlsl/gltfscene/mesh.vert b/data/shaders/hlsl/gltfscene/mesh.vert similarity index 100% rename from data/hlsl/gltfscene/mesh.vert rename to data/shaders/hlsl/gltfscene/mesh.vert diff --git a/data/hlsl/hdr/bloom.frag b/data/shaders/hlsl/hdr/bloom.frag similarity index 100% rename from data/hlsl/hdr/bloom.frag rename to data/shaders/hlsl/hdr/bloom.frag diff --git a/data/hlsl/hdr/bloom.vert b/data/shaders/hlsl/hdr/bloom.vert similarity index 100% rename from data/hlsl/hdr/bloom.vert rename to data/shaders/hlsl/hdr/bloom.vert diff --git a/data/hlsl/hdr/composition.frag b/data/shaders/hlsl/hdr/composition.frag similarity index 100% rename from data/hlsl/hdr/composition.frag rename to data/shaders/hlsl/hdr/composition.frag diff --git a/data/hlsl/hdr/composition.vert b/data/shaders/hlsl/hdr/composition.vert similarity index 100% rename from data/hlsl/hdr/composition.vert rename to data/shaders/hlsl/hdr/composition.vert diff --git a/data/hlsl/hdr/gbuffer.frag b/data/shaders/hlsl/hdr/gbuffer.frag similarity index 100% rename from data/hlsl/hdr/gbuffer.frag rename to data/shaders/hlsl/hdr/gbuffer.frag diff --git a/data/hlsl/hdr/gbuffer.vert b/data/shaders/hlsl/hdr/gbuffer.vert similarity index 100% rename from data/hlsl/hdr/gbuffer.vert rename to data/shaders/hlsl/hdr/gbuffer.vert diff --git a/data/hlsl/imgui/scene.frag b/data/shaders/hlsl/imgui/scene.frag similarity index 100% rename from data/hlsl/imgui/scene.frag rename to data/shaders/hlsl/imgui/scene.frag diff --git a/data/hlsl/imgui/scene.vert b/data/shaders/hlsl/imgui/scene.vert similarity index 100% rename from data/hlsl/imgui/scene.vert rename to data/shaders/hlsl/imgui/scene.vert diff --git a/data/hlsl/imgui/ui.frag b/data/shaders/hlsl/imgui/ui.frag similarity index 100% rename from data/hlsl/imgui/ui.frag rename to data/shaders/hlsl/imgui/ui.frag diff --git a/data/hlsl/imgui/ui.vert b/data/shaders/hlsl/imgui/ui.vert similarity index 100% rename from data/hlsl/imgui/ui.vert rename to data/shaders/hlsl/imgui/ui.vert diff --git a/data/hlsl/indirectdraw/ground.frag b/data/shaders/hlsl/indirectdraw/ground.frag similarity index 100% rename from data/hlsl/indirectdraw/ground.frag rename to data/shaders/hlsl/indirectdraw/ground.frag diff --git a/data/hlsl/indirectdraw/ground.vert b/data/shaders/hlsl/indirectdraw/ground.vert similarity index 100% rename from data/hlsl/indirectdraw/ground.vert rename to data/shaders/hlsl/indirectdraw/ground.vert diff --git a/data/hlsl/indirectdraw/indirectdraw.frag b/data/shaders/hlsl/indirectdraw/indirectdraw.frag similarity index 100% rename from data/hlsl/indirectdraw/indirectdraw.frag rename to data/shaders/hlsl/indirectdraw/indirectdraw.frag diff --git a/data/hlsl/indirectdraw/indirectdraw.vert b/data/shaders/hlsl/indirectdraw/indirectdraw.vert similarity index 100% rename from data/hlsl/indirectdraw/indirectdraw.vert rename to data/shaders/hlsl/indirectdraw/indirectdraw.vert diff --git a/data/hlsl/indirectdraw/skysphere.frag b/data/shaders/hlsl/indirectdraw/skysphere.frag similarity index 100% rename from data/hlsl/indirectdraw/skysphere.frag rename to data/shaders/hlsl/indirectdraw/skysphere.frag diff --git a/data/hlsl/indirectdraw/skysphere.vert b/data/shaders/hlsl/indirectdraw/skysphere.vert similarity index 100% rename from data/hlsl/indirectdraw/skysphere.vert rename to data/shaders/hlsl/indirectdraw/skysphere.vert diff --git a/data/hlsl/inlineuniformblocks/pbr.frag b/data/shaders/hlsl/inlineuniformblocks/pbr.frag similarity index 100% rename from data/hlsl/inlineuniformblocks/pbr.frag rename to data/shaders/hlsl/inlineuniformblocks/pbr.frag diff --git a/data/hlsl/inlineuniformblocks/pbr.vert b/data/shaders/hlsl/inlineuniformblocks/pbr.vert similarity index 100% rename from data/hlsl/inlineuniformblocks/pbr.vert rename to data/shaders/hlsl/inlineuniformblocks/pbr.vert diff --git a/data/hlsl/inputattachments/attachmentread.frag b/data/shaders/hlsl/inputattachments/attachmentread.frag similarity index 100% rename from data/hlsl/inputattachments/attachmentread.frag rename to data/shaders/hlsl/inputattachments/attachmentread.frag diff --git a/data/hlsl/inputattachments/attachmentread.vert b/data/shaders/hlsl/inputattachments/attachmentread.vert similarity index 100% rename from data/hlsl/inputattachments/attachmentread.vert rename to data/shaders/hlsl/inputattachments/attachmentread.vert diff --git a/data/hlsl/inputattachments/attachmentwrite.frag b/data/shaders/hlsl/inputattachments/attachmentwrite.frag similarity index 100% rename from data/hlsl/inputattachments/attachmentwrite.frag rename to data/shaders/hlsl/inputattachments/attachmentwrite.frag diff --git a/data/hlsl/inputattachments/attachmentwrite.vert b/data/shaders/hlsl/inputattachments/attachmentwrite.vert similarity index 100% rename from data/hlsl/inputattachments/attachmentwrite.vert rename to data/shaders/hlsl/inputattachments/attachmentwrite.vert diff --git a/data/hlsl/instancing/instancing.frag b/data/shaders/hlsl/instancing/instancing.frag similarity index 100% rename from data/hlsl/instancing/instancing.frag rename to data/shaders/hlsl/instancing/instancing.frag diff --git a/data/hlsl/instancing/instancing.vert b/data/shaders/hlsl/instancing/instancing.vert similarity index 100% rename from data/hlsl/instancing/instancing.vert rename to data/shaders/hlsl/instancing/instancing.vert diff --git a/data/hlsl/instancing/planet.frag b/data/shaders/hlsl/instancing/planet.frag similarity index 100% rename from data/hlsl/instancing/planet.frag rename to data/shaders/hlsl/instancing/planet.frag diff --git a/data/hlsl/instancing/planet.vert b/data/shaders/hlsl/instancing/planet.vert similarity index 100% rename from data/hlsl/instancing/planet.vert rename to data/shaders/hlsl/instancing/planet.vert diff --git a/data/hlsl/instancing/starfield.frag b/data/shaders/hlsl/instancing/starfield.frag similarity index 100% rename from data/hlsl/instancing/starfield.frag rename to data/shaders/hlsl/instancing/starfield.frag diff --git a/data/hlsl/instancing/starfield.vert b/data/shaders/hlsl/instancing/starfield.vert similarity index 100% rename from data/hlsl/instancing/starfield.vert rename to data/shaders/hlsl/instancing/starfield.vert diff --git a/data/hlsl/mesh/mesh.frag b/data/shaders/hlsl/mesh/mesh.frag similarity index 100% rename from data/hlsl/mesh/mesh.frag rename to data/shaders/hlsl/mesh/mesh.frag diff --git a/data/hlsl/mesh/mesh.vert b/data/shaders/hlsl/mesh/mesh.vert similarity index 100% rename from data/hlsl/mesh/mesh.vert rename to data/shaders/hlsl/mesh/mesh.vert diff --git a/data/hlsl/multisampling/scene.frag b/data/shaders/hlsl/multisampling/scene.frag similarity index 100% rename from data/hlsl/multisampling/scene.frag rename to data/shaders/hlsl/multisampling/scene.frag diff --git a/data/hlsl/multisampling/scene.vert b/data/shaders/hlsl/multisampling/scene.vert similarity index 100% rename from data/hlsl/multisampling/scene.vert rename to data/shaders/hlsl/multisampling/scene.vert diff --git a/data/hlsl/multithreading/phong.frag b/data/shaders/hlsl/multithreading/phong.frag similarity index 100% rename from data/hlsl/multithreading/phong.frag rename to data/shaders/hlsl/multithreading/phong.frag diff --git a/data/hlsl/multithreading/phong.vert b/data/shaders/hlsl/multithreading/phong.vert similarity index 100% rename from data/hlsl/multithreading/phong.vert rename to data/shaders/hlsl/multithreading/phong.vert diff --git a/data/hlsl/multithreading/starsphere.frag b/data/shaders/hlsl/multithreading/starsphere.frag similarity index 100% rename from data/hlsl/multithreading/starsphere.frag rename to data/shaders/hlsl/multithreading/starsphere.frag diff --git a/data/hlsl/multithreading/starsphere.vert b/data/shaders/hlsl/multithreading/starsphere.vert similarity index 100% rename from data/hlsl/multithreading/starsphere.vert rename to data/shaders/hlsl/multithreading/starsphere.vert diff --git a/data/hlsl/multiview/multiview.frag b/data/shaders/hlsl/multiview/multiview.frag similarity index 100% rename from data/hlsl/multiview/multiview.frag rename to data/shaders/hlsl/multiview/multiview.frag diff --git a/data/hlsl/multiview/multiview.vert b/data/shaders/hlsl/multiview/multiview.vert similarity index 100% rename from data/hlsl/multiview/multiview.vert rename to data/shaders/hlsl/multiview/multiview.vert diff --git a/data/hlsl/multiview/viewdisplay.frag b/data/shaders/hlsl/multiview/viewdisplay.frag similarity index 100% rename from data/hlsl/multiview/viewdisplay.frag rename to data/shaders/hlsl/multiview/viewdisplay.frag diff --git a/data/hlsl/multiview/viewdisplay.vert b/data/shaders/hlsl/multiview/viewdisplay.vert similarity index 100% rename from data/hlsl/multiview/viewdisplay.vert rename to data/shaders/hlsl/multiview/viewdisplay.vert diff --git a/data/hlsl/negativeviewportheight/quad.frag b/data/shaders/hlsl/negativeviewportheight/quad.frag similarity index 100% rename from data/hlsl/negativeviewportheight/quad.frag rename to data/shaders/hlsl/negativeviewportheight/quad.frag diff --git a/data/hlsl/negativeviewportheight/quad.vert b/data/shaders/hlsl/negativeviewportheight/quad.vert similarity index 100% rename from data/hlsl/negativeviewportheight/quad.vert rename to data/shaders/hlsl/negativeviewportheight/quad.vert diff --git a/data/hlsl/nv_ray_tracing_basic/closesthit.rchit b/data/shaders/hlsl/nv_ray_tracing_basic/closesthit.rchit similarity index 100% rename from data/hlsl/nv_ray_tracing_basic/closesthit.rchit rename to data/shaders/hlsl/nv_ray_tracing_basic/closesthit.rchit diff --git a/data/hlsl/nv_ray_tracing_basic/miss.rmiss b/data/shaders/hlsl/nv_ray_tracing_basic/miss.rmiss similarity index 100% rename from data/hlsl/nv_ray_tracing_basic/miss.rmiss rename to data/shaders/hlsl/nv_ray_tracing_basic/miss.rmiss diff --git a/data/hlsl/nv_ray_tracing_basic/raygen.rgen b/data/shaders/hlsl/nv_ray_tracing_basic/raygen.rgen similarity index 100% rename from data/hlsl/nv_ray_tracing_basic/raygen.rgen rename to data/shaders/hlsl/nv_ray_tracing_basic/raygen.rgen diff --git a/data/hlsl/nv_ray_tracing_reflections/closesthit.rchit b/data/shaders/hlsl/nv_ray_tracing_reflections/closesthit.rchit similarity index 100% rename from data/hlsl/nv_ray_tracing_reflections/closesthit.rchit rename to data/shaders/hlsl/nv_ray_tracing_reflections/closesthit.rchit diff --git a/data/hlsl/nv_ray_tracing_reflections/miss.rmiss b/data/shaders/hlsl/nv_ray_tracing_reflections/miss.rmiss similarity index 100% rename from data/hlsl/nv_ray_tracing_reflections/miss.rmiss rename to data/shaders/hlsl/nv_ray_tracing_reflections/miss.rmiss diff --git a/data/hlsl/nv_ray_tracing_reflections/raygen.rgen b/data/shaders/hlsl/nv_ray_tracing_reflections/raygen.rgen similarity index 100% rename from data/hlsl/nv_ray_tracing_reflections/raygen.rgen rename to data/shaders/hlsl/nv_ray_tracing_reflections/raygen.rgen diff --git a/data/hlsl/nv_ray_tracing_shadows/closesthit.rchit b/data/shaders/hlsl/nv_ray_tracing_shadows/closesthit.rchit similarity index 100% rename from data/hlsl/nv_ray_tracing_shadows/closesthit.rchit rename to data/shaders/hlsl/nv_ray_tracing_shadows/closesthit.rchit diff --git a/data/hlsl/nv_ray_tracing_shadows/miss.rmiss b/data/shaders/hlsl/nv_ray_tracing_shadows/miss.rmiss similarity index 100% rename from data/hlsl/nv_ray_tracing_shadows/miss.rmiss rename to data/shaders/hlsl/nv_ray_tracing_shadows/miss.rmiss diff --git a/data/hlsl/nv_ray_tracing_shadows/raygen.rgen b/data/shaders/hlsl/nv_ray_tracing_shadows/raygen.rgen similarity index 100% rename from data/hlsl/nv_ray_tracing_shadows/raygen.rgen rename to data/shaders/hlsl/nv_ray_tracing_shadows/raygen.rgen diff --git a/data/hlsl/nv_ray_tracing_shadows/shadow.rmiss b/data/shaders/hlsl/nv_ray_tracing_shadows/shadow.rmiss similarity index 100% rename from data/hlsl/nv_ray_tracing_shadows/shadow.rmiss rename to data/shaders/hlsl/nv_ray_tracing_shadows/shadow.rmiss diff --git a/data/hlsl/occlusionquery/mesh.frag b/data/shaders/hlsl/occlusionquery/mesh.frag similarity index 100% rename from data/hlsl/occlusionquery/mesh.frag rename to data/shaders/hlsl/occlusionquery/mesh.frag diff --git a/data/hlsl/occlusionquery/mesh.vert b/data/shaders/hlsl/occlusionquery/mesh.vert similarity index 100% rename from data/hlsl/occlusionquery/mesh.vert rename to data/shaders/hlsl/occlusionquery/mesh.vert diff --git a/data/hlsl/occlusionquery/occluder.frag b/data/shaders/hlsl/occlusionquery/occluder.frag similarity index 100% rename from data/hlsl/occlusionquery/occluder.frag rename to data/shaders/hlsl/occlusionquery/occluder.frag diff --git a/data/hlsl/occlusionquery/occluder.vert b/data/shaders/hlsl/occlusionquery/occluder.vert similarity index 100% rename from data/hlsl/occlusionquery/occluder.vert rename to data/shaders/hlsl/occlusionquery/occluder.vert diff --git a/data/hlsl/occlusionquery/simple.frag b/data/shaders/hlsl/occlusionquery/simple.frag similarity index 100% rename from data/hlsl/occlusionquery/simple.frag rename to data/shaders/hlsl/occlusionquery/simple.frag diff --git a/data/hlsl/occlusionquery/simple.vert b/data/shaders/hlsl/occlusionquery/simple.vert similarity index 100% rename from data/hlsl/occlusionquery/simple.vert rename to data/shaders/hlsl/occlusionquery/simple.vert diff --git a/data/hlsl/offscreen/mirror.frag b/data/shaders/hlsl/offscreen/mirror.frag similarity index 100% rename from data/hlsl/offscreen/mirror.frag rename to data/shaders/hlsl/offscreen/mirror.frag diff --git a/data/hlsl/offscreen/mirror.vert b/data/shaders/hlsl/offscreen/mirror.vert similarity index 100% rename from data/hlsl/offscreen/mirror.vert rename to data/shaders/hlsl/offscreen/mirror.vert diff --git a/data/hlsl/offscreen/phong.frag b/data/shaders/hlsl/offscreen/phong.frag similarity index 100% rename from data/hlsl/offscreen/phong.frag rename to data/shaders/hlsl/offscreen/phong.frag diff --git a/data/hlsl/offscreen/phong.vert b/data/shaders/hlsl/offscreen/phong.vert similarity index 100% rename from data/hlsl/offscreen/phong.vert rename to data/shaders/hlsl/offscreen/phong.vert diff --git a/data/hlsl/offscreen/quad.frag b/data/shaders/hlsl/offscreen/quad.frag similarity index 100% rename from data/hlsl/offscreen/quad.frag rename to data/shaders/hlsl/offscreen/quad.frag diff --git a/data/hlsl/offscreen/quad.vert b/data/shaders/hlsl/offscreen/quad.vert similarity index 100% rename from data/hlsl/offscreen/quad.vert rename to data/shaders/hlsl/offscreen/quad.vert diff --git a/data/hlsl/parallaxmapping/parallax.frag b/data/shaders/hlsl/parallaxmapping/parallax.frag similarity index 100% rename from data/hlsl/parallaxmapping/parallax.frag rename to data/shaders/hlsl/parallaxmapping/parallax.frag diff --git a/data/hlsl/parallaxmapping/parallax.vert b/data/shaders/hlsl/parallaxmapping/parallax.vert similarity index 100% rename from data/hlsl/parallaxmapping/parallax.vert rename to data/shaders/hlsl/parallaxmapping/parallax.vert diff --git a/data/hlsl/particlefire/normalmap.frag b/data/shaders/hlsl/particlefire/normalmap.frag similarity index 100% rename from data/hlsl/particlefire/normalmap.frag rename to data/shaders/hlsl/particlefire/normalmap.frag diff --git a/data/hlsl/particlefire/normalmap.vert b/data/shaders/hlsl/particlefire/normalmap.vert similarity index 100% rename from data/hlsl/particlefire/normalmap.vert rename to data/shaders/hlsl/particlefire/normalmap.vert diff --git a/data/hlsl/particlefire/particle.frag b/data/shaders/hlsl/particlefire/particle.frag similarity index 100% rename from data/hlsl/particlefire/particle.frag rename to data/shaders/hlsl/particlefire/particle.frag diff --git a/data/hlsl/particlefire/particle.vert b/data/shaders/hlsl/particlefire/particle.vert similarity index 100% rename from data/hlsl/particlefire/particle.vert rename to data/shaders/hlsl/particlefire/particle.vert diff --git a/data/hlsl/pbrbasic/pbr.frag b/data/shaders/hlsl/pbrbasic/pbr.frag similarity index 100% rename from data/hlsl/pbrbasic/pbr.frag rename to data/shaders/hlsl/pbrbasic/pbr.frag diff --git a/data/hlsl/pbrbasic/pbr.vert b/data/shaders/hlsl/pbrbasic/pbr.vert similarity index 100% rename from data/hlsl/pbrbasic/pbr.vert rename to data/shaders/hlsl/pbrbasic/pbr.vert diff --git a/data/hlsl/pbribl/filtercube.vert b/data/shaders/hlsl/pbribl/filtercube.vert similarity index 100% rename from data/hlsl/pbribl/filtercube.vert rename to data/shaders/hlsl/pbribl/filtercube.vert diff --git a/data/hlsl/pbribl/genbrdflut.frag b/data/shaders/hlsl/pbribl/genbrdflut.frag similarity index 100% rename from data/hlsl/pbribl/genbrdflut.frag rename to data/shaders/hlsl/pbribl/genbrdflut.frag diff --git a/data/hlsl/pbribl/genbrdflut.vert b/data/shaders/hlsl/pbribl/genbrdflut.vert similarity index 100% rename from data/hlsl/pbribl/genbrdflut.vert rename to data/shaders/hlsl/pbribl/genbrdflut.vert diff --git a/data/hlsl/pbribl/irradiancecube.frag b/data/shaders/hlsl/pbribl/irradiancecube.frag similarity index 100% rename from data/hlsl/pbribl/irradiancecube.frag rename to data/shaders/hlsl/pbribl/irradiancecube.frag diff --git a/data/hlsl/pbribl/pbribl.frag b/data/shaders/hlsl/pbribl/pbribl.frag similarity index 100% rename from data/hlsl/pbribl/pbribl.frag rename to data/shaders/hlsl/pbribl/pbribl.frag diff --git a/data/hlsl/pbribl/pbribl.vert b/data/shaders/hlsl/pbribl/pbribl.vert similarity index 100% rename from data/hlsl/pbribl/pbribl.vert rename to data/shaders/hlsl/pbribl/pbribl.vert diff --git a/data/hlsl/pbribl/prefilterenvmap.frag b/data/shaders/hlsl/pbribl/prefilterenvmap.frag similarity index 100% rename from data/hlsl/pbribl/prefilterenvmap.frag rename to data/shaders/hlsl/pbribl/prefilterenvmap.frag diff --git a/data/hlsl/pbribl/skybox.frag b/data/shaders/hlsl/pbribl/skybox.frag similarity index 100% rename from data/hlsl/pbribl/skybox.frag rename to data/shaders/hlsl/pbribl/skybox.frag diff --git a/data/hlsl/pbribl/skybox.vert b/data/shaders/hlsl/pbribl/skybox.vert similarity index 100% rename from data/hlsl/pbribl/skybox.vert rename to data/shaders/hlsl/pbribl/skybox.vert diff --git a/data/hlsl/pbrtexture/filtercube.vert b/data/shaders/hlsl/pbrtexture/filtercube.vert similarity index 100% rename from data/hlsl/pbrtexture/filtercube.vert rename to data/shaders/hlsl/pbrtexture/filtercube.vert diff --git a/data/hlsl/pbrtexture/genbrdflut.frag b/data/shaders/hlsl/pbrtexture/genbrdflut.frag similarity index 100% rename from data/hlsl/pbrtexture/genbrdflut.frag rename to data/shaders/hlsl/pbrtexture/genbrdflut.frag diff --git a/data/hlsl/pbrtexture/genbrdflut.vert b/data/shaders/hlsl/pbrtexture/genbrdflut.vert similarity index 100% rename from data/hlsl/pbrtexture/genbrdflut.vert rename to data/shaders/hlsl/pbrtexture/genbrdflut.vert diff --git a/data/hlsl/pbrtexture/irradiancecube.frag b/data/shaders/hlsl/pbrtexture/irradiancecube.frag similarity index 100% rename from data/hlsl/pbrtexture/irradiancecube.frag rename to data/shaders/hlsl/pbrtexture/irradiancecube.frag diff --git a/data/hlsl/pbrtexture/pbrtexture.frag b/data/shaders/hlsl/pbrtexture/pbrtexture.frag similarity index 100% rename from data/hlsl/pbrtexture/pbrtexture.frag rename to data/shaders/hlsl/pbrtexture/pbrtexture.frag diff --git a/data/hlsl/pbrtexture/pbrtexture.vert b/data/shaders/hlsl/pbrtexture/pbrtexture.vert similarity index 100% rename from data/hlsl/pbrtexture/pbrtexture.vert rename to data/shaders/hlsl/pbrtexture/pbrtexture.vert diff --git a/data/hlsl/pbrtexture/prefilterenvmap.frag b/data/shaders/hlsl/pbrtexture/prefilterenvmap.frag similarity index 100% rename from data/hlsl/pbrtexture/prefilterenvmap.frag rename to data/shaders/hlsl/pbrtexture/prefilterenvmap.frag diff --git a/data/hlsl/pbrtexture/skybox.frag b/data/shaders/hlsl/pbrtexture/skybox.frag similarity index 100% rename from data/hlsl/pbrtexture/skybox.frag rename to data/shaders/hlsl/pbrtexture/skybox.frag diff --git a/data/hlsl/pbrtexture/skybox.vert b/data/shaders/hlsl/pbrtexture/skybox.vert similarity index 100% rename from data/hlsl/pbrtexture/skybox.vert rename to data/shaders/hlsl/pbrtexture/skybox.vert diff --git a/data/hlsl/pipelines/phong.frag b/data/shaders/hlsl/pipelines/phong.frag similarity index 100% rename from data/hlsl/pipelines/phong.frag rename to data/shaders/hlsl/pipelines/phong.frag diff --git a/data/hlsl/pipelines/phong.vert b/data/shaders/hlsl/pipelines/phong.vert similarity index 100% rename from data/hlsl/pipelines/phong.vert rename to data/shaders/hlsl/pipelines/phong.vert diff --git a/data/hlsl/pipelines/toon.frag b/data/shaders/hlsl/pipelines/toon.frag similarity index 100% rename from data/hlsl/pipelines/toon.frag rename to data/shaders/hlsl/pipelines/toon.frag diff --git a/data/hlsl/pipelines/toon.vert b/data/shaders/hlsl/pipelines/toon.vert similarity index 100% rename from data/hlsl/pipelines/toon.vert rename to data/shaders/hlsl/pipelines/toon.vert diff --git a/data/hlsl/pipelines/wireframe.frag b/data/shaders/hlsl/pipelines/wireframe.frag similarity index 100% rename from data/hlsl/pipelines/wireframe.frag rename to data/shaders/hlsl/pipelines/wireframe.frag diff --git a/data/hlsl/pipelines/wireframe.vert b/data/shaders/hlsl/pipelines/wireframe.vert similarity index 100% rename from data/hlsl/pipelines/wireframe.vert rename to data/shaders/hlsl/pipelines/wireframe.vert diff --git a/data/hlsl/pipelinestatistics/scene.frag b/data/shaders/hlsl/pipelinestatistics/scene.frag similarity index 100% rename from data/hlsl/pipelinestatistics/scene.frag rename to data/shaders/hlsl/pipelinestatistics/scene.frag diff --git a/data/hlsl/pipelinestatistics/scene.tesc b/data/shaders/hlsl/pipelinestatistics/scene.tesc similarity index 100% rename from data/hlsl/pipelinestatistics/scene.tesc rename to data/shaders/hlsl/pipelinestatistics/scene.tesc diff --git a/data/hlsl/pipelinestatistics/scene.tese b/data/shaders/hlsl/pipelinestatistics/scene.tese similarity index 100% rename from data/hlsl/pipelinestatistics/scene.tese rename to data/shaders/hlsl/pipelinestatistics/scene.tese diff --git a/data/hlsl/pipelinestatistics/scene.vert b/data/shaders/hlsl/pipelinestatistics/scene.vert similarity index 100% rename from data/hlsl/pipelinestatistics/scene.vert rename to data/shaders/hlsl/pipelinestatistics/scene.vert diff --git a/data/hlsl/pushconstants/lights.frag b/data/shaders/hlsl/pushconstants/lights.frag similarity index 100% rename from data/hlsl/pushconstants/lights.frag rename to data/shaders/hlsl/pushconstants/lights.frag diff --git a/data/hlsl/pushconstants/lights.vert b/data/shaders/hlsl/pushconstants/lights.vert similarity index 100% rename from data/hlsl/pushconstants/lights.vert rename to data/shaders/hlsl/pushconstants/lights.vert diff --git a/data/hlsl/pushdescriptors/cube.frag b/data/shaders/hlsl/pushdescriptors/cube.frag similarity index 100% rename from data/hlsl/pushdescriptors/cube.frag rename to data/shaders/hlsl/pushdescriptors/cube.frag diff --git a/data/hlsl/pushdescriptors/cube.vert b/data/shaders/hlsl/pushdescriptors/cube.vert similarity index 100% rename from data/hlsl/pushdescriptors/cube.vert rename to data/shaders/hlsl/pushdescriptors/cube.vert diff --git a/data/hlsl/radialblur/colorpass.frag b/data/shaders/hlsl/radialblur/colorpass.frag similarity index 100% rename from data/hlsl/radialblur/colorpass.frag rename to data/shaders/hlsl/radialblur/colorpass.frag diff --git a/data/hlsl/radialblur/colorpass.vert b/data/shaders/hlsl/radialblur/colorpass.vert similarity index 100% rename from data/hlsl/radialblur/colorpass.vert rename to data/shaders/hlsl/radialblur/colorpass.vert diff --git a/data/hlsl/radialblur/phongpass.frag b/data/shaders/hlsl/radialblur/phongpass.frag similarity index 100% rename from data/hlsl/radialblur/phongpass.frag rename to data/shaders/hlsl/radialblur/phongpass.frag diff --git a/data/hlsl/radialblur/phongpass.vert b/data/shaders/hlsl/radialblur/phongpass.vert similarity index 100% rename from data/hlsl/radialblur/phongpass.vert rename to data/shaders/hlsl/radialblur/phongpass.vert diff --git a/data/hlsl/radialblur/radialblur.frag b/data/shaders/hlsl/radialblur/radialblur.frag similarity index 100% rename from data/hlsl/radialblur/radialblur.frag rename to data/shaders/hlsl/radialblur/radialblur.frag diff --git a/data/hlsl/radialblur/radialblur.vert b/data/shaders/hlsl/radialblur/radialblur.vert similarity index 100% rename from data/hlsl/radialblur/radialblur.vert rename to data/shaders/hlsl/radialblur/radialblur.vert diff --git a/data/hlsl/renderheadless/triangle.frag b/data/shaders/hlsl/renderheadless/triangle.frag similarity index 100% rename from data/hlsl/renderheadless/triangle.frag rename to data/shaders/hlsl/renderheadless/triangle.frag diff --git a/data/hlsl/renderheadless/triangle.vert b/data/shaders/hlsl/renderheadless/triangle.vert similarity index 100% rename from data/hlsl/renderheadless/triangle.vert rename to data/shaders/hlsl/renderheadless/triangle.vert diff --git a/data/hlsl/scenerendering/scene.frag b/data/shaders/hlsl/scenerendering/scene.frag similarity index 100% rename from data/hlsl/scenerendering/scene.frag rename to data/shaders/hlsl/scenerendering/scene.frag diff --git a/data/hlsl/scenerendering/scene.vert b/data/shaders/hlsl/scenerendering/scene.vert similarity index 100% rename from data/hlsl/scenerendering/scene.vert rename to data/shaders/hlsl/scenerendering/scene.vert diff --git a/data/hlsl/screenshot/mesh.frag b/data/shaders/hlsl/screenshot/mesh.frag similarity index 100% rename from data/hlsl/screenshot/mesh.frag rename to data/shaders/hlsl/screenshot/mesh.frag diff --git a/data/hlsl/screenshot/mesh.vert b/data/shaders/hlsl/screenshot/mesh.vert similarity index 100% rename from data/hlsl/screenshot/mesh.vert rename to data/shaders/hlsl/screenshot/mesh.vert diff --git a/data/hlsl/shadowmapomni/cubemapdisplay.frag b/data/shaders/hlsl/shadowmapomni/cubemapdisplay.frag similarity index 100% rename from data/hlsl/shadowmapomni/cubemapdisplay.frag rename to data/shaders/hlsl/shadowmapomni/cubemapdisplay.frag diff --git a/data/hlsl/shadowmapomni/cubemapdisplay.vert b/data/shaders/hlsl/shadowmapomni/cubemapdisplay.vert similarity index 100% rename from data/hlsl/shadowmapomni/cubemapdisplay.vert rename to data/shaders/hlsl/shadowmapomni/cubemapdisplay.vert diff --git a/data/hlsl/shadowmapomni/offscreen.frag b/data/shaders/hlsl/shadowmapomni/offscreen.frag similarity index 100% rename from data/hlsl/shadowmapomni/offscreen.frag rename to data/shaders/hlsl/shadowmapomni/offscreen.frag diff --git a/data/hlsl/shadowmapomni/offscreen.vert b/data/shaders/hlsl/shadowmapomni/offscreen.vert similarity index 100% rename from data/hlsl/shadowmapomni/offscreen.vert rename to data/shaders/hlsl/shadowmapomni/offscreen.vert diff --git a/data/hlsl/shadowmapomni/scene.frag b/data/shaders/hlsl/shadowmapomni/scene.frag similarity index 100% rename from data/hlsl/shadowmapomni/scene.frag rename to data/shaders/hlsl/shadowmapomni/scene.frag diff --git a/data/hlsl/shadowmapomni/scene.vert b/data/shaders/hlsl/shadowmapomni/scene.vert similarity index 100% rename from data/hlsl/shadowmapomni/scene.vert rename to data/shaders/hlsl/shadowmapomni/scene.vert diff --git a/data/hlsl/shadowmapping/offscreen.frag b/data/shaders/hlsl/shadowmapping/offscreen.frag similarity index 100% rename from data/hlsl/shadowmapping/offscreen.frag rename to data/shaders/hlsl/shadowmapping/offscreen.frag diff --git a/data/hlsl/shadowmapping/offscreen.vert b/data/shaders/hlsl/shadowmapping/offscreen.vert similarity index 100% rename from data/hlsl/shadowmapping/offscreen.vert rename to data/shaders/hlsl/shadowmapping/offscreen.vert diff --git a/data/hlsl/shadowmapping/quad.frag b/data/shaders/hlsl/shadowmapping/quad.frag similarity index 100% rename from data/hlsl/shadowmapping/quad.frag rename to data/shaders/hlsl/shadowmapping/quad.frag diff --git a/data/hlsl/shadowmapping/quad.vert b/data/shaders/hlsl/shadowmapping/quad.vert similarity index 100% rename from data/hlsl/shadowmapping/quad.vert rename to data/shaders/hlsl/shadowmapping/quad.vert diff --git a/data/hlsl/shadowmapping/scene.frag b/data/shaders/hlsl/shadowmapping/scene.frag similarity index 100% rename from data/hlsl/shadowmapping/scene.frag rename to data/shaders/hlsl/shadowmapping/scene.frag diff --git a/data/hlsl/shadowmapping/scene.vert b/data/shaders/hlsl/shadowmapping/scene.vert similarity index 100% rename from data/hlsl/shadowmapping/scene.vert rename to data/shaders/hlsl/shadowmapping/scene.vert diff --git a/data/hlsl/shadowmappingcascade/debugshadowmap.frag b/data/shaders/hlsl/shadowmappingcascade/debugshadowmap.frag similarity index 100% rename from data/hlsl/shadowmappingcascade/debugshadowmap.frag rename to data/shaders/hlsl/shadowmappingcascade/debugshadowmap.frag diff --git a/data/hlsl/shadowmappingcascade/debugshadowmap.vert b/data/shaders/hlsl/shadowmappingcascade/debugshadowmap.vert similarity index 100% rename from data/hlsl/shadowmappingcascade/debugshadowmap.vert rename to data/shaders/hlsl/shadowmappingcascade/debugshadowmap.vert diff --git a/data/hlsl/shadowmappingcascade/depthpass.frag b/data/shaders/hlsl/shadowmappingcascade/depthpass.frag similarity index 100% rename from data/hlsl/shadowmappingcascade/depthpass.frag rename to data/shaders/hlsl/shadowmappingcascade/depthpass.frag diff --git a/data/hlsl/shadowmappingcascade/depthpass.vert b/data/shaders/hlsl/shadowmappingcascade/depthpass.vert similarity index 100% rename from data/hlsl/shadowmappingcascade/depthpass.vert rename to data/shaders/hlsl/shadowmappingcascade/depthpass.vert diff --git a/data/hlsl/shadowmappingcascade/scene.frag b/data/shaders/hlsl/shadowmappingcascade/scene.frag similarity index 100% rename from data/hlsl/shadowmappingcascade/scene.frag rename to data/shaders/hlsl/shadowmappingcascade/scene.frag diff --git a/data/hlsl/shadowmappingcascade/scene.vert b/data/shaders/hlsl/shadowmappingcascade/scene.vert similarity index 100% rename from data/hlsl/shadowmappingcascade/scene.vert rename to data/shaders/hlsl/shadowmappingcascade/scene.vert diff --git a/data/hlsl/skeletalanimation/mesh.frag b/data/shaders/hlsl/skeletalanimation/mesh.frag similarity index 100% rename from data/hlsl/skeletalanimation/mesh.frag rename to data/shaders/hlsl/skeletalanimation/mesh.frag diff --git a/data/hlsl/skeletalanimation/mesh.vert b/data/shaders/hlsl/skeletalanimation/mesh.vert similarity index 100% rename from data/hlsl/skeletalanimation/mesh.vert rename to data/shaders/hlsl/skeletalanimation/mesh.vert diff --git a/data/hlsl/skeletalanimation/texture.frag b/data/shaders/hlsl/skeletalanimation/texture.frag similarity index 100% rename from data/hlsl/skeletalanimation/texture.frag rename to data/shaders/hlsl/skeletalanimation/texture.frag diff --git a/data/hlsl/skeletalanimation/texture.vert b/data/shaders/hlsl/skeletalanimation/texture.vert similarity index 100% rename from data/hlsl/skeletalanimation/texture.vert rename to data/shaders/hlsl/skeletalanimation/texture.vert diff --git a/data/hlsl/specializationconstants/uber.frag b/data/shaders/hlsl/specializationconstants/uber.frag similarity index 100% rename from data/hlsl/specializationconstants/uber.frag rename to data/shaders/hlsl/specializationconstants/uber.frag diff --git a/data/hlsl/specializationconstants/uber.vert b/data/shaders/hlsl/specializationconstants/uber.vert similarity index 100% rename from data/hlsl/specializationconstants/uber.vert rename to data/shaders/hlsl/specializationconstants/uber.vert diff --git a/data/hlsl/sphericalenvmapping/sem.frag b/data/shaders/hlsl/sphericalenvmapping/sem.frag similarity index 100% rename from data/hlsl/sphericalenvmapping/sem.frag rename to data/shaders/hlsl/sphericalenvmapping/sem.frag diff --git a/data/hlsl/sphericalenvmapping/sem.vert b/data/shaders/hlsl/sphericalenvmapping/sem.vert similarity index 100% rename from data/hlsl/sphericalenvmapping/sem.vert rename to data/shaders/hlsl/sphericalenvmapping/sem.vert diff --git a/data/hlsl/ssao/blur.frag b/data/shaders/hlsl/ssao/blur.frag similarity index 100% rename from data/hlsl/ssao/blur.frag rename to data/shaders/hlsl/ssao/blur.frag diff --git a/data/hlsl/ssao/composition.frag b/data/shaders/hlsl/ssao/composition.frag similarity index 100% rename from data/hlsl/ssao/composition.frag rename to data/shaders/hlsl/ssao/composition.frag diff --git a/data/hlsl/ssao/fullscreen.vert b/data/shaders/hlsl/ssao/fullscreen.vert similarity index 100% rename from data/hlsl/ssao/fullscreen.vert rename to data/shaders/hlsl/ssao/fullscreen.vert diff --git a/data/hlsl/ssao/gbuffer.frag b/data/shaders/hlsl/ssao/gbuffer.frag similarity index 100% rename from data/hlsl/ssao/gbuffer.frag rename to data/shaders/hlsl/ssao/gbuffer.frag diff --git a/data/hlsl/ssao/gbuffer.vert b/data/shaders/hlsl/ssao/gbuffer.vert similarity index 100% rename from data/hlsl/ssao/gbuffer.vert rename to data/shaders/hlsl/ssao/gbuffer.vert diff --git a/data/hlsl/ssao/ssao.frag b/data/shaders/hlsl/ssao/ssao.frag similarity index 100% rename from data/hlsl/ssao/ssao.frag rename to data/shaders/hlsl/ssao/ssao.frag diff --git a/data/hlsl/stencilbuffer/outline.frag b/data/shaders/hlsl/stencilbuffer/outline.frag similarity index 100% rename from data/hlsl/stencilbuffer/outline.frag rename to data/shaders/hlsl/stencilbuffer/outline.frag diff --git a/data/hlsl/stencilbuffer/outline.vert b/data/shaders/hlsl/stencilbuffer/outline.vert similarity index 100% rename from data/hlsl/stencilbuffer/outline.vert rename to data/shaders/hlsl/stencilbuffer/outline.vert diff --git a/data/hlsl/stencilbuffer/toon.frag b/data/shaders/hlsl/stencilbuffer/toon.frag similarity index 100% rename from data/hlsl/stencilbuffer/toon.frag rename to data/shaders/hlsl/stencilbuffer/toon.frag diff --git a/data/hlsl/stencilbuffer/toon.vert b/data/shaders/hlsl/stencilbuffer/toon.vert similarity index 100% rename from data/hlsl/stencilbuffer/toon.vert rename to data/shaders/hlsl/stencilbuffer/toon.vert diff --git a/data/hlsl/subpasses/composition.frag b/data/shaders/hlsl/subpasses/composition.frag similarity index 100% rename from data/hlsl/subpasses/composition.frag rename to data/shaders/hlsl/subpasses/composition.frag diff --git a/data/hlsl/subpasses/composition.vert b/data/shaders/hlsl/subpasses/composition.vert similarity index 100% rename from data/hlsl/subpasses/composition.vert rename to data/shaders/hlsl/subpasses/composition.vert diff --git a/data/hlsl/subpasses/gbuffer.frag b/data/shaders/hlsl/subpasses/gbuffer.frag similarity index 100% rename from data/hlsl/subpasses/gbuffer.frag rename to data/shaders/hlsl/subpasses/gbuffer.frag diff --git a/data/hlsl/subpasses/gbuffer.vert b/data/shaders/hlsl/subpasses/gbuffer.vert similarity index 100% rename from data/hlsl/subpasses/gbuffer.vert rename to data/shaders/hlsl/subpasses/gbuffer.vert diff --git a/data/hlsl/subpasses/transparent.frag b/data/shaders/hlsl/subpasses/transparent.frag similarity index 100% rename from data/hlsl/subpasses/transparent.frag rename to data/shaders/hlsl/subpasses/transparent.frag diff --git a/data/hlsl/subpasses/transparent.vert b/data/shaders/hlsl/subpasses/transparent.vert similarity index 100% rename from data/hlsl/subpasses/transparent.vert rename to data/shaders/hlsl/subpasses/transparent.vert diff --git a/data/hlsl/terraintessellation/skysphere.frag b/data/shaders/hlsl/terraintessellation/skysphere.frag similarity index 100% rename from data/hlsl/terraintessellation/skysphere.frag rename to data/shaders/hlsl/terraintessellation/skysphere.frag diff --git a/data/hlsl/terraintessellation/skysphere.vert b/data/shaders/hlsl/terraintessellation/skysphere.vert similarity index 100% rename from data/hlsl/terraintessellation/skysphere.vert rename to data/shaders/hlsl/terraintessellation/skysphere.vert diff --git a/data/hlsl/terraintessellation/terrain.frag b/data/shaders/hlsl/terraintessellation/terrain.frag similarity index 100% rename from data/hlsl/terraintessellation/terrain.frag rename to data/shaders/hlsl/terraintessellation/terrain.frag diff --git a/data/hlsl/terraintessellation/terrain.tesc b/data/shaders/hlsl/terraintessellation/terrain.tesc similarity index 100% rename from data/hlsl/terraintessellation/terrain.tesc rename to data/shaders/hlsl/terraintessellation/terrain.tesc diff --git a/data/hlsl/terraintessellation/terrain.tese b/data/shaders/hlsl/terraintessellation/terrain.tese similarity index 100% rename from data/hlsl/terraintessellation/terrain.tese rename to data/shaders/hlsl/terraintessellation/terrain.tese diff --git a/data/hlsl/terraintessellation/terrain.vert b/data/shaders/hlsl/terraintessellation/terrain.vert similarity index 100% rename from data/hlsl/terraintessellation/terrain.vert rename to data/shaders/hlsl/terraintessellation/terrain.vert diff --git a/data/hlsl/tessellation/base.frag b/data/shaders/hlsl/tessellation/base.frag similarity index 100% rename from data/hlsl/tessellation/base.frag rename to data/shaders/hlsl/tessellation/base.frag diff --git a/data/hlsl/tessellation/base.vert b/data/shaders/hlsl/tessellation/base.vert similarity index 100% rename from data/hlsl/tessellation/base.vert rename to data/shaders/hlsl/tessellation/base.vert diff --git a/data/hlsl/tessellation/passthrough.tesc b/data/shaders/hlsl/tessellation/passthrough.tesc similarity index 100% rename from data/hlsl/tessellation/passthrough.tesc rename to data/shaders/hlsl/tessellation/passthrough.tesc diff --git a/data/hlsl/tessellation/passthrough.tese b/data/shaders/hlsl/tessellation/passthrough.tese similarity index 100% rename from data/hlsl/tessellation/passthrough.tese rename to data/shaders/hlsl/tessellation/passthrough.tese diff --git a/data/hlsl/tessellation/pntriangles.tesc b/data/shaders/hlsl/tessellation/pntriangles.tesc similarity index 100% rename from data/hlsl/tessellation/pntriangles.tesc rename to data/shaders/hlsl/tessellation/pntriangles.tesc diff --git a/data/hlsl/tessellation/pntriangles.tese b/data/shaders/hlsl/tessellation/pntriangles.tese similarity index 100% rename from data/hlsl/tessellation/pntriangles.tese rename to data/shaders/hlsl/tessellation/pntriangles.tese diff --git a/data/hlsl/textoverlay/mesh.frag b/data/shaders/hlsl/textoverlay/mesh.frag similarity index 100% rename from data/hlsl/textoverlay/mesh.frag rename to data/shaders/hlsl/textoverlay/mesh.frag diff --git a/data/hlsl/textoverlay/mesh.vert b/data/shaders/hlsl/textoverlay/mesh.vert similarity index 100% rename from data/hlsl/textoverlay/mesh.vert rename to data/shaders/hlsl/textoverlay/mesh.vert diff --git a/data/hlsl/textoverlay/text.frag b/data/shaders/hlsl/textoverlay/text.frag similarity index 100% rename from data/hlsl/textoverlay/text.frag rename to data/shaders/hlsl/textoverlay/text.frag diff --git a/data/hlsl/textoverlay/text.vert b/data/shaders/hlsl/textoverlay/text.vert similarity index 100% rename from data/hlsl/textoverlay/text.vert rename to data/shaders/hlsl/textoverlay/text.vert diff --git a/data/hlsl/texture/texture.frag b/data/shaders/hlsl/texture/texture.frag similarity index 100% rename from data/hlsl/texture/texture.frag rename to data/shaders/hlsl/texture/texture.frag diff --git a/data/hlsl/texture/texture.vert b/data/shaders/hlsl/texture/texture.vert similarity index 100% rename from data/hlsl/texture/texture.vert rename to data/shaders/hlsl/texture/texture.vert diff --git a/data/hlsl/texture3d/texture3d.frag b/data/shaders/hlsl/texture3d/texture3d.frag similarity index 100% rename from data/hlsl/texture3d/texture3d.frag rename to data/shaders/hlsl/texture3d/texture3d.frag diff --git a/data/hlsl/texture3d/texture3d.vert b/data/shaders/hlsl/texture3d/texture3d.vert similarity index 100% rename from data/hlsl/texture3d/texture3d.vert rename to data/shaders/hlsl/texture3d/texture3d.vert diff --git a/data/hlsl/texturearray/instancing.frag b/data/shaders/hlsl/texturearray/instancing.frag similarity index 100% rename from data/hlsl/texturearray/instancing.frag rename to data/shaders/hlsl/texturearray/instancing.frag diff --git a/data/hlsl/texturearray/instancing.vert b/data/shaders/hlsl/texturearray/instancing.vert similarity index 100% rename from data/hlsl/texturearray/instancing.vert rename to data/shaders/hlsl/texturearray/instancing.vert diff --git a/data/hlsl/texturecubemap/reflect.frag b/data/shaders/hlsl/texturecubemap/reflect.frag similarity index 100% rename from data/hlsl/texturecubemap/reflect.frag rename to data/shaders/hlsl/texturecubemap/reflect.frag diff --git a/data/hlsl/texturecubemap/reflect.vert b/data/shaders/hlsl/texturecubemap/reflect.vert similarity index 100% rename from data/hlsl/texturecubemap/reflect.vert rename to data/shaders/hlsl/texturecubemap/reflect.vert diff --git a/data/hlsl/texturecubemap/skybox.frag b/data/shaders/hlsl/texturecubemap/skybox.frag similarity index 100% rename from data/hlsl/texturecubemap/skybox.frag rename to data/shaders/hlsl/texturecubemap/skybox.frag diff --git a/data/hlsl/texturecubemap/skybox.vert b/data/shaders/hlsl/texturecubemap/skybox.vert similarity index 100% rename from data/hlsl/texturecubemap/skybox.vert rename to data/shaders/hlsl/texturecubemap/skybox.vert diff --git a/data/hlsl/texturemipmapgen/texture.frag b/data/shaders/hlsl/texturemipmapgen/texture.frag similarity index 100% rename from data/hlsl/texturemipmapgen/texture.frag rename to data/shaders/hlsl/texturemipmapgen/texture.frag diff --git a/data/hlsl/texturemipmapgen/texture.vert b/data/shaders/hlsl/texturemipmapgen/texture.vert similarity index 100% rename from data/hlsl/texturemipmapgen/texture.vert rename to data/shaders/hlsl/texturemipmapgen/texture.vert diff --git a/data/hlsl/texturesparseresidency/sparseresidency.frag b/data/shaders/hlsl/texturesparseresidency/sparseresidency.frag similarity index 100% rename from data/hlsl/texturesparseresidency/sparseresidency.frag rename to data/shaders/hlsl/texturesparseresidency/sparseresidency.frag diff --git a/data/hlsl/texturesparseresidency/sparseresidency.vert b/data/shaders/hlsl/texturesparseresidency/sparseresidency.vert similarity index 100% rename from data/hlsl/texturesparseresidency/sparseresidency.vert rename to data/shaders/hlsl/texturesparseresidency/sparseresidency.vert diff --git a/data/hlsl/triangle/triangle.frag b/data/shaders/hlsl/triangle/triangle.frag similarity index 100% rename from data/hlsl/triangle/triangle.frag rename to data/shaders/hlsl/triangle/triangle.frag diff --git a/data/hlsl/triangle/triangle.vert b/data/shaders/hlsl/triangle/triangle.vert similarity index 100% rename from data/hlsl/triangle/triangle.vert rename to data/shaders/hlsl/triangle/triangle.vert diff --git a/data/hlsl/viewportarray/multiview.geom b/data/shaders/hlsl/viewportarray/multiview.geom similarity index 100% rename from data/hlsl/viewportarray/multiview.geom rename to data/shaders/hlsl/viewportarray/multiview.geom diff --git a/data/hlsl/viewportarray/scene.frag b/data/shaders/hlsl/viewportarray/scene.frag similarity index 100% rename from data/hlsl/viewportarray/scene.frag rename to data/shaders/hlsl/viewportarray/scene.frag diff --git a/data/hlsl/viewportarray/scene.vert b/data/shaders/hlsl/viewportarray/scene.vert similarity index 100% rename from data/hlsl/viewportarray/scene.vert rename to data/shaders/hlsl/viewportarray/scene.vert diff --git a/data/hlsl/vulkanscene/logo.frag b/data/shaders/hlsl/vulkanscene/logo.frag similarity index 100% rename from data/hlsl/vulkanscene/logo.frag rename to data/shaders/hlsl/vulkanscene/logo.frag diff --git a/data/hlsl/vulkanscene/logo.vert b/data/shaders/hlsl/vulkanscene/logo.vert similarity index 100% rename from data/hlsl/vulkanscene/logo.vert rename to data/shaders/hlsl/vulkanscene/logo.vert diff --git a/data/hlsl/vulkanscene/mesh.frag b/data/shaders/hlsl/vulkanscene/mesh.frag similarity index 100% rename from data/hlsl/vulkanscene/mesh.frag rename to data/shaders/hlsl/vulkanscene/mesh.frag diff --git a/data/hlsl/vulkanscene/mesh.vert b/data/shaders/hlsl/vulkanscene/mesh.vert similarity index 100% rename from data/hlsl/vulkanscene/mesh.vert rename to data/shaders/hlsl/vulkanscene/mesh.vert diff --git a/data/hlsl/vulkanscene/skybox.frag b/data/shaders/hlsl/vulkanscene/skybox.frag similarity index 100% rename from data/hlsl/vulkanscene/skybox.frag rename to data/shaders/hlsl/vulkanscene/skybox.frag diff --git a/data/hlsl/vulkanscene/skybox.vert b/data/shaders/hlsl/vulkanscene/skybox.vert similarity index 100% rename from data/hlsl/vulkanscene/skybox.vert rename to data/shaders/hlsl/vulkanscene/skybox.vert diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index a53c834c..b8a6faff 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -18,7 +18,7 @@ function(buildExample EXAMPLE_NAME) SET(SOURCE ${SOURCE} ${CMAKE_BINARY_DIR}/xdg-shell-client-protocol.h ${CMAKE_BINARY_DIR}/xdg-shell-protocol.c) ENDIF() # Add shaders - set(SHADER_DIR "../data/shaders/${EXAMPLE_NAME}") + set(SHADER_DIR "../data/shaders/glsl/${EXAMPLE_NAME}") file(GLOB SHADERS "${SHADER_DIR}/*.vert" "${SHADER_DIR}/*.frag" "${SHADER_DIR}/*.comp" "${SHADER_DIR}/*.geom" "${SHADER_DIR}/*.tesc" "${SHADER_DIR}/*.tese" "${SHADER_DIR}/*.mesh" "${SHADER_DIR}/*.task" "${SHADER_DIR}/*.rgen" "${SHADER_DIR}/*.rchit" "${SHADER_DIR}/*.rmiss") source_group("Shaders" FILES ${SHADERS}) if(WIN32) diff --git a/examples/bloom/bloom.cpp b/examples/bloom/bloom.cpp index 16d3ee9e..c0d1c0a1 100644 --- a/examples/bloom/bloom.cpp +++ b/examples/bloom/bloom.cpp @@ -85,7 +85,7 @@ public: struct { VkPipelineLayout blur; VkPipelineLayout scene; - } pipelineLayouts; + } pipelineLayouts; struct { VkDescriptorSet blurVert; @@ -130,7 +130,7 @@ public: ~VulkanExample() { - // Clean up used Vulkan resources + // Clean up used Vulkan resources // Note : Inherited destructor cleans up resources stored in base class vkDestroySampler(device, offscreenPass.sampler, nullptr); @@ -256,13 +256,13 @@ public: VK_CHECK_RESULT(vkCreateFramebuffer(device, &fbufCreateInfo, nullptr, &frameBuf->framebuffer)); - // Fill a descriptor for later use in a descriptor set + // Fill a descriptor for later use in a descriptor set frameBuf->descriptor.imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; frameBuf->descriptor.imageView = frameBuf->color.view; frameBuf->descriptor.sampler = offscreenPass.sampler; } - // Prepare the offscreen framebuffers used for the vertical- and horizontal blur + // Prepare the offscreen framebuffers used for the vertical- and horizontal blur void prepareOffscreen() { offscreenPass.width = FB_DIM; @@ -457,7 +457,7 @@ public: VkDeviceSize offsets[1] = { 0 }; - // Skybox + // Skybox vkCmdBindDescriptorSets(drawCmdBuffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, pipelineLayouts.scene, 0, 1, &descriptorSets.skyBox, 0, NULL); vkCmdBindPipeline(drawCmdBuffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, pipelines.skyBox); @@ -532,9 +532,9 @@ public: VK_CHECK_RESULT(vkCreatePipelineLayout(device, &pipelineLayoutCreateInfo, nullptr, &pipelineLayouts.blur)); // Scene rendering - setLayoutBindings = { - vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_VERTEX_BIT, 0), // Binding 0 : Vertex shader uniform buffer - vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_SHADER_STAGE_FRAGMENT_BIT, 1), // Binding 1 : Fragment shader image sampler + setLayoutBindings = { + vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_VERTEX_BIT, 0), // Binding 0 : Vertex shader uniform buffer + vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_SHADER_STAGE_FRAGMENT_BIT, 1), // Binding 1 : Fragment shader image sampler vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_FRAGMENT_BIT, 2), // Binding 2 : Framgnet shader image sampler }; @@ -553,8 +553,8 @@ public: // Vertical descriptorSetAllocInfo = vks::initializers::descriptorSetAllocateInfo(descriptorPool, &descriptorSetLayouts.blur, 1); VK_CHECK_RESULT(vkAllocateDescriptorSets(device, &descriptorSetAllocInfo, &descriptorSets.blurVert)); - writeDescriptorSets = { - vks::initializers::writeDescriptorSet(descriptorSets.blurVert, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 0, &uniformBuffers.blurParams.descriptor), // Binding 0: Fragment shader uniform buffer + writeDescriptorSets = { + vks::initializers::writeDescriptorSet(descriptorSets.blurVert, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 0, &uniformBuffers.blurParams.descriptor), // Binding 0: Fragment shader uniform buffer vks::initializers::writeDescriptorSet(descriptorSets.blurVert, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, &offscreenPass.framebuffers[0].descriptor), // Binding 1: Fragment shader texture sampler }; vkUpdateDescriptorSets(device, writeDescriptorSets.size(), writeDescriptorSets.data(), 0, NULL); @@ -562,7 +562,7 @@ public: descriptorSetAllocInfo = vks::initializers::descriptorSetAllocateInfo(descriptorPool, &descriptorSetLayouts.blur, 1); VK_CHECK_RESULT(vkAllocateDescriptorSets(device, &descriptorSetAllocInfo, &descriptorSets.blurHorz)); writeDescriptorSets = { - vks::initializers::writeDescriptorSet(descriptorSets.blurHorz, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 0, &uniformBuffers.blurParams.descriptor), // Binding 0: Fragment shader uniform buffer + vks::initializers::writeDescriptorSet(descriptorSets.blurHorz, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 0, &uniformBuffers.blurParams.descriptor), // Binding 0: Fragment shader uniform buffer vks::initializers::writeDescriptorSet(descriptorSets.blurHorz, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, &offscreenPass.framebuffers[1].descriptor), // Binding 1: Fragment shader texture sampler }; vkUpdateDescriptorSets(device, writeDescriptorSets.size(), writeDescriptorSets.data(), 0, NULL); @@ -570,15 +570,15 @@ public: // Scene rendering descriptorSetAllocInfo = vks::initializers::descriptorSetAllocateInfo(descriptorPool, &descriptorSetLayouts.scene, 1); VK_CHECK_RESULT(vkAllocateDescriptorSets(device, &descriptorSetAllocInfo, &descriptorSets.scene)); - writeDescriptorSets = { + writeDescriptorSets = { vks::initializers::writeDescriptorSet(descriptorSets.scene, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 0, &uniformBuffers.scene.descriptor) // Binding 0: Vertex shader uniform buffer }; vkUpdateDescriptorSets(device, writeDescriptorSets.size(), writeDescriptorSets.data(), 0, NULL); // Skybox VK_CHECK_RESULT(vkAllocateDescriptorSets(device, &descriptorSetAllocInfo, &descriptorSets.skyBox)); - writeDescriptorSets = { - vks::initializers::writeDescriptorSet(descriptorSets.skyBox, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 0, &uniformBuffers.skyBox.descriptor), // Binding 0: Vertex shader uniform buffer + writeDescriptorSets = { + vks::initializers::writeDescriptorSet(descriptorSets.skyBox, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 0, &uniformBuffers.skyBox.descriptor), // Binding 0: Vertex shader uniform buffer vks::initializers::writeDescriptorSet(descriptorSets.skyBox, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, &textures.cubemap.descriptor), // Binding 1: Fragment shader texture sampler }; vkUpdateDescriptorSets(device, writeDescriptorSets.size(), writeDescriptorSets.data(), 0, NULL); @@ -595,7 +595,7 @@ public: VkPipelineMultisampleStateCreateInfo multisampleStateCI = vks::initializers::pipelineMultisampleStateCreateInfo(VK_SAMPLE_COUNT_1_BIT, 0); std::vector dynamicStateEnables = { VK_DYNAMIC_STATE_VIEWPORT, VK_DYNAMIC_STATE_SCISSOR }; VkPipelineDynamicStateCreateInfo dynamicStateCI = vks::initializers::pipelineDynamicStateCreateInfo(dynamicStateEnables.data(), dynamicStateEnables.size(), 0); - + std::array shaderStages; VkGraphicsPipelineCreateInfo pipelineCI = vks::initializers::pipelineCreateInfo(pipelineLayouts.blur, renderPass, 0); @@ -610,8 +610,8 @@ public: pipelineCI.pStages = shaderStages.data(); // Blur pipelines - shaderStages[0] = loadShader(getAssetPath() + "shaders/bloom/gaussblur.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/bloom/gaussblur.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "bloom/gaussblur.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "bloom/gaussblur.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); // Empty vertex input state VkPipelineVertexInputStateCreateInfo emptyInputState = vks::initializers::pipelineVertexInputStateCreateInfo(); pipelineCI.pVertexInputState = &emptyInputState; @@ -645,7 +645,7 @@ public: vks::initializers::vertexInputBindingDescription(0, vertexLayout.stride(), VK_VERTEX_INPUT_RATE_VERTEX), }; std::vector vertexInputAttributes = { - vks::initializers::vertexInputAttributeDescription(0, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Position + vks::initializers::vertexInputAttributeDescription(0, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Position vks::initializers::vertexInputAttributeDescription(0, 1, VK_FORMAT_R32G32_SFLOAT, sizeof(float) * 3), // Texture coordinates vks::initializers::vertexInputAttributeDescription(0, 2, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 5), // Color vks::initializers::vertexInputAttributeDescription(0, 3, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 8), // Normal @@ -657,8 +657,8 @@ public: vertexInputState.pVertexAttributeDescriptions = vertexInputAttributes.data(); pipelineCI.pVertexInputState = &vertexInputState; pipelineCI.layout = pipelineLayouts.scene; - shaderStages[0] = loadShader(getAssetPath() + "shaders/bloom/phongpass.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/bloom/phongpass.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "bloom/phongpass.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "bloom/phongpass.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); blendAttachmentState.blendEnable = VK_FALSE; depthStencilStateCI.depthWriteEnable = VK_TRUE; rasterizationStateCI.cullMode = VK_CULL_MODE_BACK_BIT; @@ -666,14 +666,14 @@ public: VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCI, nullptr, &pipelines.phongPass)); // Color only pass (offscreen blur base) - shaderStages[0] = loadShader(getAssetPath() + "shaders/bloom/colorpass.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/bloom/colorpass.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "bloom/colorpass.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "bloom/colorpass.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); pipelineCI.renderPass = offscreenPass.renderPass; VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCI, nullptr, &pipelines.glowPass)); // Skybox (cubemap) - shaderStages[0] = loadShader(getAssetPath() + "shaders/bloom/skybox.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/bloom/skybox.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "bloom/skybox.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "bloom/skybox.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); depthStencilStateCI.depthWriteEnable = VK_FALSE; rasterizationStateCI.cullMode = VK_CULL_MODE_FRONT_BIT; pipelineCI.renderPass = renderPass; diff --git a/examples/commandbuffers/commandbuffers.cpp b/examples/commandbuffers/commandbuffers.cpp index 0e0f6052..bfa82617 100644 --- a/examples/commandbuffers/commandbuffers.cpp +++ b/examples/commandbuffers/commandbuffers.cpp @@ -31,7 +31,7 @@ class VulkanExample : public VulkanExampleBase { public: - enum RenderMode { + enum RenderMode { SINGLE_CB_RECREATE = 0, MULTIPLE_CB_STATIC = 1, }; @@ -128,7 +128,7 @@ public: renderMode = mode; vkDeviceWaitIdle(device); switch (renderMode) { - case SINGLE_CB_RECREATE: + case SINGLE_CB_RECREATE: std::cout << "Using single command buffer, recreating each frame" << std::endl; break; case MULTIPLE_CB_STATIC: @@ -193,9 +193,9 @@ public: std::vector vertexInputAttributes = { vks::initializers::vertexInputAttributeDescription(0, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Location 0 : Position - vks::initializers::vertexInputAttributeDescription(0, 1, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 3), // Location 1 : Normal + vks::initializers::vertexInputAttributeDescription(0, 1, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 3), // Location 1 : Normal vks::initializers::vertexInputAttributeDescription(0, 2, VK_FORMAT_R32G32_SFLOAT, sizeof(float) * 6), // Location 3 : UV - vks::initializers::vertexInputAttributeDescription(0, 3, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 8) // Location 3 : Cpöpr + vks::initializers::vertexInputAttributeDescription(0, 3, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 8) // Location 3 : Cp�pr }; VkPipelineVertexInputStateCreateInfo vertexInputState = vks::initializers::pipelineVertexInputStateCreateInfo(); @@ -206,8 +206,8 @@ public: // Load shaders std::array shaderStages = { - loadShader(getAssetPath() + "shaders/pushconstants/lights.vert.spv", VK_SHADER_STAGE_VERTEX_BIT), - loadShader(getAssetPath() + "shaders/pushconstants/lights.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT) + loadShader(getShadersPath() + "pushconstants/lights.vert.spv", VK_SHADER_STAGE_VERTEX_BIT), + loadShader(getShadersPath() + "pushconstants/lights.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT) }; VkGraphicsPipelineCreateInfo pipelineCI = vks::initializers::pipelineCreateInfo(pipelineLayout, renderPass, 0); @@ -228,11 +228,11 @@ public: void prepareUniformBuffers() { /* - Single command buffer + Single command buffer */ VK_CHECK_RESULT(vulkanDevice->createBuffer( - VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, - VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, + VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, + VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, &singleCB.uniformBuffer, sizeof(ShaderValues))); VK_CHECK_RESULT(singleCB.uniformBuffer.map()); @@ -242,7 +242,7 @@ public: */ for (auto i = 0; i < multiCB.uniformBuffers.size(); i++) { VK_CHECK_RESULT(vulkanDevice->createBuffer( - VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, + VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, &multiCB.uniformBuffers[i], sizeof(ShaderValues))); @@ -404,7 +404,7 @@ public: /* Multiple command buffers rendering to different framebuffers */ - void recordCommandBuffers() + void recordCommandBuffers() { VkClearValue clearValues[2]; clearValues[0].color = defaultClearColor; @@ -592,7 +592,7 @@ public: case 0x32: setRenderMode(MULTIPLE_CB_STATIC); break; - } + } } #endif }; diff --git a/examples/computecloth/computecloth.cpp b/examples/computecloth/computecloth.cpp index c73cf479..964d39e5 100644 --- a/examples/computecloth/computecloth.cpp +++ b/examples/computecloth/computecloth.cpp @@ -142,7 +142,7 @@ public: vkDestroyCommandPool(device, compute.commandPool, nullptr); } - // Enable physical device features required for this example + // Enable physical device features required for this example virtual void getEnabledFeatures() { if (deviceFeatures.samplerAnisotropy) { @@ -156,7 +156,7 @@ public: modelSphere.loadFromFile(getAssetPath() + "models/geosphere.obj", vertexLayout, compute.ubo.sphereRadius * 0.05f, vulkanDevice, queue); } - void addGraphicsToComputeBarriers(VkCommandBuffer commandBuffer) + void addGraphicsToComputeBarriers(VkCommandBuffer commandBuffer) { if (specializedComputeQueue) { VkBufferMemoryBarrier bufferBarrier = vks::initializers::bufferMemoryBarrier(); @@ -179,9 +179,9 @@ public: static_cast(bufferBarriers.size()), bufferBarriers.data(), 0, nullptr); } - } + } - void addComputeToComputeBarriers(VkCommandBuffer commandBuffer) + void addComputeToComputeBarriers(VkCommandBuffer commandBuffer) { VkBufferMemoryBarrier bufferBarrier = vks::initializers::bufferMemoryBarrier(); bufferBarrier.srcAccessMask = VK_ACCESS_SHADER_WRITE_BIT; @@ -202,7 +202,7 @@ public: 0, nullptr, static_cast(bufferBarriers.size()), bufferBarriers.data(), 0, nullptr); - } + } void addComputeToGraphicsBarriers(VkCommandBuffer commandBuffer) { @@ -227,7 +227,7 @@ public: static_cast(bufferBarriers.size()), bufferBarriers.data(), 0, nullptr); } - } + } void buildCommandBuffers() { @@ -386,7 +386,7 @@ public: VkDeviceSize storageBufferSize = particleBuffer.size() * sizeof(Particle); // Staging - // SSBO won't be changed on the host after upload so copy to device local memory + // SSBO won't be changed on the host after upload so copy to device local memory vks::Buffer stagingBuffer; @@ -415,7 +415,7 @@ public: copyRegion.size = storageBufferSize; vkCmdCopyBuffer(copyCmd, stagingBuffer.buffer, compute.storageBuffers.input.buffer, 1, ©Region); vkCmdCopyBuffer(copyCmd, stagingBuffer.buffer, compute.storageBuffers.output.buffer, 1, ©Region); - // Add an initial release barrier to the graphics queue, + // Add an initial release barrier to the graphics queue, // so that when the compute command buffer executes for the first time // it doesn't complain about a lack of a corresponding "release" to its "acquire" addGraphicsToComputeBarriers(copyCmd); @@ -489,7 +489,7 @@ public: VK_CHECK_RESULT(vkCreatePipelineLayout(device, &pipelineLayoutCreateInfo, nullptr, &graphics.pipelineLayout)); // Set - VkDescriptorSetAllocateInfo allocInfo = + VkDescriptorSetAllocateInfo allocInfo = vks::initializers::descriptorSetAllocateInfo(descriptorPool, &graphics.descriptorSetLayout, 1); VK_CHECK_RESULT(vkAllocateDescriptorSets(device, &allocInfo, &graphics.descriptorSet)); @@ -533,8 +533,8 @@ public: // Rendering pipeline std::array shaderStages; - shaderStages[0] = loadShader(getAssetPath() + "shaders/computecloth/cloth.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/computecloth/cloth.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "computecloth/cloth.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "computecloth/cloth.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VkGraphicsPipelineCreateInfo pipelineCreateInfo = vks::initializers::pipelineCreateInfo( @@ -542,7 +542,7 @@ public: renderPass, 0); - // Input attributes + // Input attributes // Binding description std::vector inputBindings = { @@ -590,8 +590,8 @@ public: inputAssemblyState.topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST; inputAssemblyState.primitiveRestartEnable = VK_FALSE; rasterizationState.polygonMode = VK_POLYGON_MODE_FILL; - shaderStages[0] = loadShader(getAssetPath() + "shaders/computecloth/sphere.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/computecloth/sphere.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "computecloth/sphere.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "computecloth/sphere.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &graphics.pipelines.sphere)); } @@ -626,7 +626,7 @@ public: VkDescriptorSetAllocateInfo allocInfo = vks::initializers::descriptorSetAllocateInfo(descriptorPool, &compute.descriptorSetLayout, 1); - // Create two descriptor sets with input and output buffers switched + // Create two descriptor sets with input and output buffers switched VK_CHECK_RESULT(vkAllocateDescriptorSets(device, &allocInfo, &compute.descriptorSets[0])); VK_CHECK_RESULT(vkAllocateDescriptorSets(device, &allocInfo, &compute.descriptorSets[1])); @@ -642,9 +642,9 @@ public: vkUpdateDescriptorSets(device, static_cast(computeWriteDescriptorSets.size()), computeWriteDescriptorSets.data(), 0, NULL); - // Create pipeline + // Create pipeline VkComputePipelineCreateInfo computePipelineCreateInfo = vks::initializers::computePipelineCreateInfo(compute.pipelineLayout, 0); - computePipelineCreateInfo.stage = loadShader(getAssetPath() + "shaders/computecloth/cloth.comp.spv", VK_SHADER_STAGE_COMPUTE_BIT); + computePipelineCreateInfo.stage = loadShader(getShadersPath() + "computecloth/cloth.comp.spv", VK_SHADER_STAGE_COMPUTE_BIT); VK_CHECK_RESULT(vkCreateComputePipelines(device, pipelineCache, 1, &computePipelineCreateInfo, nullptr, &compute.pipeline)); // Separate command pool as queue family for compute may be different than graphics @@ -656,7 +656,7 @@ public: // Create a command buffer for compute operations VkCommandBufferAllocateInfo cmdBufAllocateInfo = - vks::initializers::commandBufferAllocateInfo(compute.commandPool, VK_COMMAND_BUFFER_LEVEL_PRIMARY, 2); + vks::initializers::commandBufferAllocateInfo(compute.commandPool, VK_COMMAND_BUFFER_LEVEL_PRIMARY, 2); VK_CHECK_RESULT(vkAllocateCommandBuffers(device, &cmdBufAllocateInfo, &compute.commandBuffers[0])); @@ -679,7 +679,7 @@ public: &compute.uniformBuffer, sizeof(compute.ubo)); VK_CHECK_RESULT(compute.uniformBuffer.map()); - + // Initial values float dx = cloth.size.x / (cloth.gridsize.x - 1); float dy = cloth.size.y / (cloth.gridsize.y - 1); diff --git a/examples/computecullandlod/computecullandlod.cpp b/examples/computecullandlod/computecullandlod.cpp index ec9c0ec0..ca4ea04e 100644 --- a/examples/computecullandlod/computecullandlod.cpp +++ b/examples/computecullandlod/computecullandlod.cpp @@ -11,7 +11,7 @@ #include #include #include -#include +#include #include #include @@ -195,7 +195,7 @@ public: vkCmdBindPipeline(drawCmdBuffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, pipelines.plants); vkCmdBindVertexBuffers(drawCmdBuffers[i], VERTEX_BUFFER_BIND_ID, 1, &models.lodObject.vertices.buffer, offsets); vkCmdBindVertexBuffers(drawCmdBuffers[i], INSTANCE_BUFFER_BIND_ID, 1, &instanceBuffer.buffer, offsets); - + vkCmdBindIndexBuffer(drawCmdBuffers[i], models.lodObject.indices.buffer, 0, VK_INDEX_TYPE_UINT32); if (vulkanDevice->features.multiDrawIndirect) @@ -209,7 +209,7 @@ public: { vkCmdDrawIndexedIndirect(drawCmdBuffers[i], indirectCommandsBuffer.buffer, j * sizeof(VkDrawIndexedIndirectCommand), 1, sizeof(VkDrawIndexedIndirectCommand)); } - } + } drawUI(drawCmdBuffers[i]); @@ -233,7 +233,7 @@ public: vks::initializers::vertexInputBindingDescription(VERTEX_BUFFER_BIND_ID, vertexLayout.stride(), VK_VERTEX_INPUT_RATE_VERTEX); // Binding 1: Per instance - vertices.bindingDescriptions[1] = + vertices.bindingDescriptions[1] = vks::initializers::vertexInputBindingDescription(INSTANCE_BUFFER_BIND_ID, sizeof(InstanceData), VK_VERTEX_INPUT_RATE_INSTANCE); // Attribute descriptions @@ -295,10 +295,10 @@ public: VkBufferMemoryBarrier bufferBarrier = vks::initializers::bufferMemoryBarrier(); bufferBarrier.buffer = indirectCommandsBuffer.buffer; bufferBarrier.size = indirectCommandsBuffer.descriptor.range; - bufferBarrier.srcAccessMask = VK_ACCESS_INDIRECT_COMMAND_READ_BIT; - bufferBarrier.dstAccessMask = VK_ACCESS_SHADER_WRITE_BIT; - bufferBarrier.srcQueueFamilyIndex = vulkanDevice->queueFamilyIndices.graphics; - bufferBarrier.dstQueueFamilyIndex = vulkanDevice->queueFamilyIndices.compute; + bufferBarrier.srcAccessMask = VK_ACCESS_INDIRECT_COMMAND_READ_BIT; + bufferBarrier.dstAccessMask = VK_ACCESS_SHADER_WRITE_BIT; + bufferBarrier.srcQueueFamilyIndex = vulkanDevice->queueFamilyIndices.graphics; + bufferBarrier.dstQueueFamilyIndex = vulkanDevice->queueFamilyIndices.compute; vkCmdPipelineBarrier( compute.commandBuffer, @@ -313,7 +313,7 @@ public: vkCmdBindDescriptorSets(compute.commandBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, compute.pipelineLayout, 0, 1, &compute.descriptorSet, 0, 0); // Dispatch the compute job - // The compute shader will do the frustum culling and adjust the indirect draw calls depending on object visibility. + // The compute shader will do the frustum culling and adjust the indirect draw calls depending on object visibility. // It also determines the lod to use depending on distance to the viewer. vkCmdDispatch(compute.commandBuffer, objectCount / 16, 1, 1); @@ -341,7 +341,7 @@ public: void setupDescriptorPool() { - // Example uses one ubo + // Example uses one ubo std::vector poolSizes = { vks::initializers::descriptorPoolSize(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 2), @@ -475,8 +475,8 @@ public: pipelineCreateInfo.pStages = shaderStages.data(); // Indirect (and instanced) pipeline for the plants - shaderStages[0] = loadShader(getAssetPath() + "shaders/computecullandlod/indirectdraw.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/computecullandlod/indirectdraw.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "computecullandlod/indirectdraw.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "computecullandlod/indirectdraw.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.plants)); } @@ -706,9 +706,9 @@ public: vkUpdateDescriptorSets(device, static_cast(computeWriteDescriptorSets.size()), computeWriteDescriptorSets.data(), 0, NULL); - // Create pipeline + // Create pipeline VkComputePipelineCreateInfo computePipelineCreateInfo = vks::initializers::computePipelineCreateInfo(compute.pipelineLayout, 0); - computePipelineCreateInfo.stage = loadShader(getAssetPath() + "shaders/computecullandlod/cull.comp.spv", VK_SHADER_STAGE_COMPUTE_BIT); + computePipelineCreateInfo.stage = loadShader(getShadersPath() + "computecullandlod/cull.comp.spv", VK_SHADER_STAGE_COMPUTE_BIT); // Use specialization constants to pass max. level of detail (determined by no. of meshes) VkSpecializationMapEntry specializationEntry{}; @@ -750,7 +750,7 @@ public: VkSemaphoreCreateInfo semaphoreCreateInfo = vks::initializers::semaphoreCreateInfo(); VK_CHECK_RESULT(vkCreateSemaphore(device, &semaphoreCreateInfo, nullptr, &compute.semaphore)); - + // Build a single command buffer containing the compute dispatch commands buildComputeCommandBuffer(); } @@ -789,7 +789,7 @@ public: computeSubmitInfo.pSignalSemaphores = &compute.semaphore; VK_CHECK_RESULT(vkQueueSubmit(compute.queue, 1, &computeSubmitInfo, VK_NULL_HANDLE)); - + // Submit graphics command buffer submitInfo.commandBufferCount = 1; diff --git a/examples/computeheadless/computeheadless.cpp b/examples/computeheadless/computeheadless.cpp index cab4bfed..11ee8c2f 100644 --- a/examples/computeheadless/computeheadless.cpp +++ b/examples/computeheadless/computeheadless.cpp @@ -1,5 +1,5 @@ /* -* Vulkan Example - Minimal headless compute example +* Vulkan Example - Minimal headless compute example * * Copyright (C) 2017 by Sascha Willems - www.saschawillems.de * @@ -51,7 +51,7 @@ static VKAPI_ATTR VkBool32 VKAPI_CALL debugMessageCallback( int32_t messageCode, const char* pLayerPrefix, const char* pMessage, - void* pUserData) + void* pUserData) { LOG("[VALIDATION]: %s - %s\n", pLayerPrefix, pMessage); return VK_FALSE; @@ -62,7 +62,7 @@ class VulkanExample public: VkInstance instance; VkPhysicalDevice physicalDevice; - VkDevice device; + VkDevice device; uint32_t queueFamilyIndex; VkPipelineCache pipelineCache; VkQueue queue; @@ -133,8 +133,8 @@ public: appInfo.pEngineName = "VulkanExample"; appInfo.apiVersion = VK_API_VERSION_1_0; - /* - Vulkan instance creation (without surface extensions) + /* + Vulkan instance creation (without surface extensions) */ VkInstanceCreateInfo instanceCreateInfo = {}; instanceCreateInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; @@ -197,10 +197,10 @@ public: } #endif - /* - Vulkan device creation + /* + Vulkan device creation */ - // Physical device (always use first) + // Physical device (always use first) uint32_t deviceCount = 0; VK_CHECK_RESULT(vkEnumeratePhysicalDevices(instance, &deviceCount, nullptr)); std::vector physicalDevices(deviceCount); @@ -245,7 +245,7 @@ public: cmdPoolInfo.flags = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT; VK_CHECK_RESULT(vkCreateCommandPool(device, &cmdPoolInfo, nullptr, &commandPool)); - /* + /* Prepare storage buffers */ std::vector computeInput(BUFFER_ELEMENTS); @@ -314,7 +314,7 @@ public: vkFreeCommandBuffers(device, commandPool, 1, ©Cmd); } - /* + /* Prepare compute pipeline */ { @@ -351,7 +351,7 @@ public: pipelineCacheCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO; VK_CHECK_RESULT(vkCreatePipelineCache(device, &pipelineCacheCreateInfo, nullptr, &pipelineCache)); - // Create pipeline + // Create pipeline VkComputePipelineCreateInfo computePipelineCreateInfo = vks::initializers::computePipelineCreateInfo(pipelineLayout, 0); // Pass SSBO size via specialization constant @@ -365,9 +365,9 @@ public: shaderStage.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO; shaderStage.stage = VK_SHADER_STAGE_COMPUTE_BIT; #if defined(VK_USE_PLATFORM_ANDROID_KHR) - shaderStage.module = vks::tools::loadShader(androidapp->activity->assetManager, (getAssetPath() + "shaders/computeheadless/headless.comp.spv").c_str(), device); + shaderStage.module = vks::tools::loadShader(androidapp->activity->assetManager, (getShadersPath() + "computeheadless/headless.comp.spv").c_str(), device); #else - shaderStage.module = vks::tools::loadShader((getAssetPath() + "shaders/computeheadless/headless.comp.spv").c_str(), device); + shaderStage.module = vks::tools::loadShader((getShadersPath() + "computeheadless/headless.comp.spv").c_str(), device); #endif shaderStage.pName = "main"; shaderStage.pSpecializationInfo = &specializationInfo; @@ -387,7 +387,7 @@ public: VK_CHECK_RESULT(vkCreateFence(device, &fenceCreateInfo, nullptr, &fence)); } - /* + /* Command buffer creation (for compute work submission) */ { diff --git a/examples/computenbody/computenbody.cpp b/examples/computenbody/computenbody.cpp index 7e184c30..df17164d 100644 --- a/examples/computenbody/computenbody.cpp +++ b/examples/computenbody/computenbody.cpp @@ -170,7 +170,7 @@ public: graphics.queueFamilyIndex, compute.storageBuffer.buffer, 0, - compute.storageBuffer.size + compute.storageBuffer.size }; vkCmdPipelineBarrier( @@ -198,7 +198,7 @@ public: VkDeviceSize offsets[1] = { 0 }; vkCmdBindVertexBuffers(drawCmdBuffers[i], VERTEX_BUFFER_BIND_ID, 1, &compute.storageBuffer.buffer, offsets); vkCmdDraw(drawCmdBuffers[i], numParticles, 1, 0, 0); - + drawUI(drawCmdBuffers[i]); vkCmdEndRenderPass(drawCmdBuffers[i]); @@ -253,7 +253,7 @@ public: compute.queueFamilyIndex, compute.storageBuffer.buffer, 0, - compute.storageBuffer.size + compute.storageBuffer.size }; vkCmdPipelineBarrier( @@ -366,7 +366,7 @@ public: } else { - // Position + // Position glm::vec3 position(attractors[i] + glm::vec3(rndDist(rndEngine), rndDist(rndEngine), rndDist(rndEngine)) * 0.75f); float len = glm::length(glm::normalize(position - attractors[i])); position.y *= 2.0f - (len * len); @@ -390,7 +390,7 @@ public: VkDeviceSize storageBufferSize = particleBuffer.size() * sizeof(Particle); // Staging - // SSBO won't be changed on the host after upload so copy to device local memory + // SSBO won't be changed on the host after upload so copy to device local memory vks::Buffer stagingBuffer; @@ -426,7 +426,7 @@ public: compute.queueFamilyIndex, compute.storageBuffer.buffer, 0, - compute.storageBuffer.size + compute.storageBuffer.size }; vkCmdPipelineBarrier( @@ -590,8 +590,8 @@ public: // Load shaders std::array shaderStages; - shaderStages[0] = loadShader(getAssetPath() + "shaders/computenbody/particle.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/computenbody/particle.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "computenbody/particle.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "computenbody/particle.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VkGraphicsPipelineCreateInfo pipelineCreateInfo = vks::initializers::pipelineCreateInfo( @@ -705,7 +705,7 @@ public: VkComputePipelineCreateInfo computePipelineCreateInfo = vks::initializers::computePipelineCreateInfo(compute.pipelineLayout, 0); // 1st pass - computePipelineCreateInfo.stage = loadShader(getAssetPath() + "shaders/computenbody/particle_calculate.comp.spv", VK_SHADER_STAGE_COMPUTE_BIT); + computePipelineCreateInfo.stage = loadShader(getShadersPath() + "computenbody/particle_calculate.comp.spv", VK_SHADER_STAGE_COMPUTE_BIT); // Set shader parameters via specialization constants struct SpecializationData { @@ -727,14 +727,14 @@ public: specializationData.power = 0.75f; specializationData.soften = 0.05f; - VkSpecializationInfo specializationInfo = + VkSpecializationInfo specializationInfo = vks::initializers::specializationInfo(static_cast(specializationMapEntries.size()), specializationMapEntries.data(), sizeof(specializationData), &specializationData); computePipelineCreateInfo.stage.pSpecializationInfo = &specializationInfo; VK_CHECK_RESULT(vkCreateComputePipelines(device, pipelineCache, 1, &computePipelineCreateInfo, nullptr, &compute.pipelineCalculate)); // 2nd pass - computePipelineCreateInfo.stage = loadShader(getAssetPath() + "shaders/computenbody/particle_integrate.comp.spv", VK_SHADER_STAGE_COMPUTE_BIT); + computePipelineCreateInfo.stage = loadShader(getShadersPath() + "computenbody/particle_integrate.comp.spv", VK_SHADER_STAGE_COMPUTE_BIT); VK_CHECK_RESULT(vkCreateComputePipelines(device, pipelineCache, 1, &computePipelineCreateInfo, nullptr, &compute.pipelineIntegrate)); // Separate command pool as queue family for compute may be different than graphics @@ -763,7 +763,7 @@ public: // If graphics and compute queue family indices differ, acquire and immediately release the storage buffer, so that the initial acquire from the graphics command buffers are matched up properly if (graphics.queueFamilyIndex != compute.queueFamilyIndex) - { + { // Create a transient command buffer for setting up the initial buffer transfer state VkCommandBuffer transferCmd = vulkanDevice->createCommandBuffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, compute.commandPool, true); diff --git a/examples/computeparticles/computeparticles.cpp b/examples/computeparticles/computeparticles.cpp index 306a425e..7e4cd858 100644 --- a/examples/computeparticles/computeparticles.cpp +++ b/examples/computeparticles/computeparticles.cpp @@ -539,8 +539,8 @@ public: // Load shaders std::array shaderStages; - shaderStages[0] = loadShader(getAssetPath() + "shaders/computeparticles/particle.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/computeparticles/particle.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "computeparticles/particle.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "computeparticles/particle.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VkGraphicsPipelineCreateInfo pipelineCreateInfo = vks::initializers::pipelineCreateInfo( @@ -652,7 +652,7 @@ public: // Create pipeline VkComputePipelineCreateInfo computePipelineCreateInfo = vks::initializers::computePipelineCreateInfo(compute.pipelineLayout, 0); - computePipelineCreateInfo.stage = loadShader(getAssetPath() + "shaders/computeparticles/particle.comp.spv", VK_SHADER_STAGE_COMPUTE_BIT); + computePipelineCreateInfo.stage = loadShader(getShadersPath() + "computeparticles/particle.comp.spv", VK_SHADER_STAGE_COMPUTE_BIT); VK_CHECK_RESULT(vkCreateComputePipelines(device, pipelineCache, 1, &computePipelineCreateInfo, nullptr, &compute.pipeline)); // Separate command pool as queue family for compute may be different than graphics diff --git a/examples/computeraytracing/computeraytracing.cpp b/examples/computeraytracing/computeraytracing.cpp index cceaa587..76ca504c 100644 --- a/examples/computeraytracing/computeraytracing.cpp +++ b/examples/computeraytracing/computeraytracing.cpp @@ -71,9 +71,9 @@ public: } ubo; } compute; - // SSBO sphere declaration + // SSBO sphere declaration struct Sphere { // Shader uses std140 layout (so we only use vec4 instead of vec3) - glm::vec3 pos; + glm::vec3 pos; float radius; glm::vec3 diffuse; float specular; @@ -166,9 +166,9 @@ public: tex->imageLayout = VK_IMAGE_LAYOUT_GENERAL; vks::tools::setImageLayout( - layoutCmd, + layoutCmd, tex->image, - VK_IMAGE_ASPECT_COLOR_BIT, + VK_IMAGE_ASPECT_COLOR_BIT, VK_IMAGE_LAYOUT_UNDEFINED, tex->imageLayout); @@ -500,8 +500,8 @@ public: // Display pipeline std::array shaderStages; - shaderStages[0] = loadShader(getAssetPath() + "shaders/computeraytracing/texture.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/computeraytracing/texture.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "computeraytracing/texture.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "computeraytracing/texture.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VkGraphicsPipelineCreateInfo pipelineCreateInfo = vks::initializers::pipelineCreateInfo( @@ -626,7 +626,7 @@ public: compute.pipelineLayout, 0); - computePipelineCreateInfo.stage = loadShader(getAssetPath() + "shaders/computeraytracing/raytracing.comp.spv", VK_SHADER_STAGE_COMPUTE_BIT); + computePipelineCreateInfo.stage = loadShader(getShadersPath() + "computeraytracing/raytracing.comp.spv", VK_SHADER_STAGE_COMPUTE_BIT); VK_CHECK_RESULT(vkCreateComputePipelines(device, pipelineCache, 1, &computePipelineCreateInfo, nullptr, &compute.pipeline)); // Separate command pool as queue family for compute may be different than graphics @@ -711,7 +711,7 @@ public: setupDescriptorPool(); setupDescriptorSet(); prepareCompute(); - buildCommandBuffers(); + buildCommandBuffers(); prepared = true; } diff --git a/examples/computeshader/computeshader.cpp b/examples/computeshader/computeshader.cpp index 4a650424..f23c3269 100644 --- a/examples/computeshader/computeshader.cpp +++ b/examples/computeshader/computeshader.cpp @@ -159,9 +159,9 @@ public: tex->imageLayout = VK_IMAGE_LAYOUT_GENERAL; vks::tools::setImageLayout( - layoutCmd, tex->image, - VK_IMAGE_ASPECT_COLOR_BIT, - VK_IMAGE_LAYOUT_UNDEFINED, + layoutCmd, tex->image, + VK_IMAGE_ASPECT_COLOR_BIT, + VK_IMAGE_LAYOUT_UNDEFINED, tex->imageLayout); vulkanDevice->flushCommandBuffer(layoutCmd, queue, true); @@ -359,7 +359,7 @@ public: void setupDescriptorPool() { std::vector poolSizes = { - // Graphics pipelines uniform buffers + // Graphics pipelines uniform buffers vks::initializers::descriptorPoolSize(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 2), // Graphics pipelines image samplers for displaying compute output image vks::initializers::descriptorPoolSize(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 2), @@ -372,7 +372,7 @@ public: void setupDescriptorSetLayout() { - std::vector setLayoutBindings = { + std::vector setLayoutBindings = { // Binding 0: Vertex shader uniform buffer vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_VERTEX_BIT, 0), // Binding 1: Fragment shader input image @@ -381,7 +381,7 @@ public: VkDescriptorSetLayoutCreateInfo descriptorLayout = vks::initializers::descriptorSetLayoutCreateInfo(setLayoutBindings); VK_CHECK_RESULT(vkCreateDescriptorSetLayout(device, &descriptorLayout, nullptr, &graphics.descriptorSetLayout)); - + VkPipelineLayoutCreateInfo pPipelineLayoutCreateInfo = vks::initializers::pipelineLayoutCreateInfo(&graphics.descriptorSetLayout, 1); VK_CHECK_RESULT(vkCreatePipelineLayout(device, &pPipelineLayoutCreateInfo, nullptr, &graphics.pipelineLayout)); } @@ -401,7 +401,7 @@ public: // Final image (after compute shader processing) VK_CHECK_RESULT(vkAllocateDescriptorSets(device, &allocInfo, &graphics.descriptorSetPostCompute)); - std::vector writeDescriptorSets = { + std::vector writeDescriptorSets = { vks::initializers::writeDescriptorSet(graphics.descriptorSetPostCompute, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 0, &uniformBufferVS.descriptor), vks::initializers::writeDescriptorSet(graphics.descriptorSetPostCompute, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, &textureComputeTarget.descriptor) }; @@ -462,8 +462,8 @@ public: // Load shaders std::array shaderStages; - shaderStages[0] = loadShader(getAssetPath() + "shaders/computeshader/texture.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/computeshader/texture.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "computeshader/texture.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "computeshader/texture.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VkGraphicsPipelineCreateInfo pipelineCreateInfo = vks::initializers::pipelineCreateInfo( @@ -554,7 +554,7 @@ public: vks::initializers::descriptorSetAllocateInfo(descriptorPool, &compute.descriptorSetLayout, 1); VK_CHECK_RESULT(vkAllocateDescriptorSets(device, &allocInfo, &compute.descriptorSet)); - std::vector computeWriteDescriptorSets = { + std::vector computeWriteDescriptorSets = { vks::initializers::writeDescriptorSet(compute.descriptorSet, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, 0, &textureColorMap.descriptor), vks::initializers::writeDescriptorSet(compute.descriptorSet, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, 1, &textureComputeTarget.descriptor) }; @@ -567,7 +567,7 @@ public: // One pipeline for each effect shaderNames = { "emboss", "edgedetect", "sharpen" }; for (auto& shaderName : shaderNames) { - std::string fileName = getAssetPath() + "shaders/computeshader/" + shaderName + ".comp.spv"; + std::string fileName = getShadersPath() + "computeshader/" + shaderName + ".comp.spv"; computePipelineCreateInfo.stage = loadShader(fileName, VK_SHADER_STAGE_COMPUTE_BIT); VkPipeline pipeline; VK_CHECK_RESULT(vkCreateComputePipelines(device, pipelineCache, 1, &computePipelineCreateInfo, nullptr, &pipeline)); @@ -656,7 +656,7 @@ public: setupDescriptorPool(); setupDescriptorSet(); prepareCompute(); - buildCommandBuffers(); + buildCommandBuffers(); prepared = true; } diff --git a/examples/conditionalrender/conditionalrender.cpp b/examples/conditionalrender/conditionalrender.cpp index 20112e23..3424802b 100644 --- a/examples/conditionalrender/conditionalrender.cpp +++ b/examples/conditionalrender/conditionalrender.cpp @@ -85,7 +85,7 @@ public: node->mesh->uniformBuffer.descriptorSet }; vkCmdBindDescriptorSets(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipelineLayout, 0, static_cast(descriptorsets.size()), descriptorsets.data(), 0, NULL); - + struct PushBlock { glm::vec4 baseColorFactor; } pushBlock; @@ -152,7 +152,7 @@ public: vkCmdBindDescriptorSets(drawCmdBuffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, pipelineLayout, 0, 1, &descriptorSet, 0, NULL); vkCmdBindPipeline(drawCmdBuffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline); - + const VkDeviceSize offsets[1] = { 0 }; vkCmdBindVertexBuffers(drawCmdBuffers[i], 0, 1, &scene.vertices.buffer, offsets); vkCmdBindIndexBuffer(drawCmdBuffers[i], scene.indices.buffer, 0, VK_INDEX_TYPE_UINT32); @@ -244,8 +244,8 @@ public: pipelineCreateInfoCI.pDynamicState = &dynamicStateCI; const std::array shaderStages = { - loadShader(getAssetPath() + "shaders/conditionalrender/model.vert.spv", VK_SHADER_STAGE_VERTEX_BIT), - loadShader(getAssetPath() + "shaders/conditionalrender/model.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT) + loadShader(getShadersPath() + "conditionalrender/model.vert.spv", VK_SHADER_STAGE_VERTEX_BIT), + loadShader(getShadersPath() + "conditionalrender/model.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT) }; pipelineCreateInfoCI.stageCount = static_cast(shaderStages.size()); diff --git a/examples/conservativeraster/conservativeraster.cpp b/examples/conservativeraster/conservativeraster.cpp index 5571316a..f247f77d 100644 --- a/examples/conservativeraster/conservativeraster.cpp +++ b/examples/conservativeraster/conservativeraster.cpp @@ -109,7 +109,7 @@ public: // Enable extension required for conservative rasterization enabledDeviceExtensions.push_back(VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME); - + // Reading device properties of conservative rasterization requires VK_KHR_get_physical_device_properties2 to be enabled enabledInstanceExtensions.push_back(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME); } @@ -145,13 +145,13 @@ public: triangle.indices.destroy(); } - void getEnabledFeatures() + void getEnabledFeatures() { enabledFeatures.fillModeNonSolid = deviceFeatures.fillModeNonSolid; enabledFeatures.wideLines = deviceFeatures.wideLines; } - /* + /* Setup offscreen framebuffer, attachments and render passes for lower resolution rendering of the scene */ void prepareOffscreen() @@ -315,12 +315,12 @@ public: VK_CHECK_RESULT(vkCreateFramebuffer(device, &fbufCreateInfo, nullptr, &offscreenPass.frameBuffer)); - // Fill a descriptor for later use in a descriptor set + // Fill a descriptor for later use in a descriptor set offscreenPass.descriptor.imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; offscreenPass.descriptor.imageView = offscreenPass.color.view; offscreenPass.descriptor.sampler = offscreenPass.sampler; } - + void buildCommandBuffers() { VkCommandBufferBeginInfo cmdBufInfo = vks::initializers::commandBufferBeginInfo(); @@ -397,7 +397,7 @@ public: vkCmdBindDescriptorSets(drawCmdBuffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, pipelineLayouts.fullscreen, 0, 1, &descriptorSets.fullscreen, 0, nullptr); vkCmdDraw(drawCmdBuffers[i], 3, 1, 0, 0); - // Overlay actual triangle + // Overlay actual triangle VkDeviceSize offsets[1] = { 0 }; vkCmdBindVertexBuffers(drawCmdBuffers[i], 0, 1, &triangle.vertices.buffer, offsets); vkCmdBindIndexBuffer(drawCmdBuffers[i], triangle.indices.buffer, 0, VK_INDEX_TYPE_UINT32); @@ -490,9 +490,9 @@ public: VkPipelineLayoutCreateInfo pPipelineLayoutCreateInfo; // Scene rendering - setLayoutBindings = { - vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_VERTEX_BIT, 0), // Binding 0: Vertex shader uniform buffer - vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_SHADER_STAGE_FRAGMENT_BIT, 1), // Binding 1: Fragment shader image sampler + setLayoutBindings = { + vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_VERTEX_BIT, 0), // Binding 0: Vertex shader uniform buffer + vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_SHADER_STAGE_FRAGMENT_BIT, 1), // Binding 1: Fragment shader image sampler vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_FRAGMENT_BIT, 2) // Binding 2: Fragment shader uniform buffer }; descriptorLayout = vks::initializers::descriptorSetLayoutCreateInfo(setLayoutBindings.data(), static_cast(setLayoutBindings.size())); @@ -501,8 +501,8 @@ public: VK_CHECK_RESULT(vkCreatePipelineLayout(device, &pPipelineLayoutCreateInfo, nullptr, &pipelineLayouts.scene)); // Fullscreen pass - setLayoutBindings = { - vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_VERTEX_BIT, 0), // Binding 0: Vertex shader uniform buffer + setLayoutBindings = { + vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_VERTEX_BIT, 0), // Binding 0: Vertex shader uniform buffer vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_SHADER_STAGE_FRAGMENT_BIT, 1) // Binding 1: Fragment shader image sampler }; descriptorLayout = vks::initializers::descriptorSetLayoutCreateInfo(setLayoutBindings.data(), static_cast(setLayoutBindings.size())); @@ -588,7 +588,7 @@ public: vks::initializers::vertexInputBindingDescription(0, sizeof(Vertex), VK_VERTEX_INPUT_RATE_VERTEX), }; std::vector vertexInputAttributes = { - vks::initializers::vertexInputAttributeDescription(0, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Location 0: Position + vks::initializers::vertexInputAttributeDescription(0, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Location 0: Position vks::initializers::vertexInputAttributeDescription(0, 1, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 3), // Location 1: Color }; VkPipelineVertexInputStateCreateInfo vertexInputState = vks::initializers::pipelineVertexInputStateCreateInfo(); @@ -608,8 +608,8 @@ public: pipelineCreateInfo.pStages = shaderStages.data(); // Full screen pass - shaderStages[0] = loadShader(getAssetPath() + "shaders/conservativeraster/fullscreen.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/conservativeraster/fullscreen.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "conservativeraster/fullscreen.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "conservativeraster/fullscreen.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); // Empty vertex input state (full screen triangle generated in vertex shader) VkPipelineVertexInputStateCreateInfo emptyInputState = vks::initializers::pipelineVertexInputStateCreateInfo(); pipelineCreateInfo.pVertexInputState = &emptyInputState; @@ -623,8 +623,8 @@ public: // TODO: Check support for lines rasterizationStateCI.lineWidth = 2.0f; rasterizationStateCI.polygonMode = VK_POLYGON_MODE_LINE; - shaderStages[0] = loadShader(getAssetPath() + "shaders/conservativeraster/triangle.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/conservativeraster/triangleoverlay.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "conservativeraster/triangle.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "conservativeraster/triangleoverlay.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.triangleOverlay)); pipelineCreateInfo.renderPass = offscreenPass.renderPass; @@ -633,8 +633,8 @@ public: Triangle rendering */ rasterizationStateCI.polygonMode = VK_POLYGON_MODE_FILL; - shaderStages[0] = loadShader(getAssetPath() + "shaders/conservativeraster/triangle.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/conservativeraster/triangle.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "conservativeraster/triangle.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "conservativeraster/triangle.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); /* Basic pipeline diff --git a/examples/debugmarker/debugmarker.cpp b/examples/debugmarker/debugmarker.cpp index 52fd55e9..768e1d58 100644 --- a/examples/debugmarker/debugmarker.cpp +++ b/examples/debugmarker/debugmarker.cpp @@ -8,7 +8,7 @@ /* * Note: This sample is deprecated! - * An updated version using VK_EXT_debug_utils along with an in-depth tutorial is available in the pfficial Khronos Vulkan Samples repository at + * An updated version using VK_EXT_debug_utils along with an in-depth tutorial is available in the pfficial Khronos Vulkan Samples repository at * https://github.com/KhronosGroup/Vulkan-Samples/blob/master/samples/extensions/debug_utils. */ @@ -246,7 +246,7 @@ public: camera.setPerspective(60.0f, (float)width / (float)height, 0.1f, 256.0f); } - // Enable physical device features required for this example + // Enable physical device features required for this example virtual void getEnabledFeatures() { // Fill mode non solid is required for wireframe display @@ -258,7 +258,7 @@ public: ~VulkanExample() { - // Clean up used Vulkan resources + // Clean up used Vulkan resources // Note : Inherited destructor cleans up resources stored in base class vkDestroyPipeline(device, pipelines.toonshading, nullptr); vkDestroyPipeline(device, pipelines.color, nullptr); @@ -270,7 +270,7 @@ public: vkDestroyPipelineLayout(device, pipelineLayout, nullptr); vkDestroyDescriptorSetLayout(device, descriptorSetLayout, nullptr); - // Destroy and free mesh resources + // Destroy and free mesh resources scene.model.destroy(); sceneGlow.model.destroy(); @@ -454,7 +454,7 @@ public: VK_CHECK_RESULT(vkCreateFramebuffer(device, &fbufCreateInfo, nullptr, &offscreenPass.frameBuffer)); - // Fill a descriptor for later use in a descriptor set + // Fill a descriptor for later use in a descriptor set offscreenPass.descriptor.imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; offscreenPass.descriptor.imageView = offscreenPass.color.view; offscreenPass.descriptor.sampler = offscreenPass.sampler; @@ -503,7 +503,7 @@ public: /* First render pass: Offscreen rendering */ - if (glow) + if (glow) { VkClearValue clearValues[2]; clearValues[0].color = { { 0.0f, 0.0f, 0.0f, 0.0f } }; @@ -519,7 +519,7 @@ public: // Start a new debug marker region DebugMarker::beginRegion(drawCmdBuffers[i], "Off-screen scene rendering", glm::vec4(1.0f, 0.78f, 0.05f, 1.0f)); - + vkCmdBeginRenderPass(drawCmdBuffers[i], &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE); VkViewport viewport = vks::initializers::viewport((float)offscreenPass.width, (float)offscreenPass.height, 0.0f, 1.0f); @@ -616,7 +616,7 @@ public: vkCmdEndRenderPass(drawCmdBuffers[i]); // End current debug marker region - DebugMarker::endRegion(drawCmdBuffers[i]); + DebugMarker::endRegion(drawCmdBuffers[i]); } @@ -663,7 +663,7 @@ public: std::vector writeDescriptorSets = { // Binding 0 : Vertex shader uniform buffer vks::initializers::writeDescriptorSet(descriptorSets.scene, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 0, &uniformBuffer.descriptor), - // Binding 1 : Color map + // Binding 1 : Color map vks::initializers::writeDescriptorSet(descriptorSets.scene, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, &offscreenPass.descriptor) }; vkUpdateDescriptorSets(device, writeDescriptorSets.size(), writeDescriptorSets.data(), 0, NULL); @@ -701,10 +701,10 @@ public: // Attribute descriptions // Describes memory layout and shader positions std::vector vertexInputAttributes = { - { 0, 0, VK_FORMAT_R32G32B32_SFLOAT, 0 }, // Location 0: Position - { 1, 0, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 3 }, // Location 1: Normal - { 2, 0, VK_FORMAT_R32G32_SFLOAT, sizeof(float) * 6 }, // Location 2: Texture coordinates - { 3, 0, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 8 }, // Location 3: Color + { 0, 0, VK_FORMAT_R32G32B32_SFLOAT, 0 }, // Location 0: Position + { 1, 0, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 3 }, // Location 1: Normal + { 2, 0, VK_FORMAT_R32G32_SFLOAT, sizeof(float) * 6 }, // Location 2: Texture coordinates + { 3, 0, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 8 }, // Location 3: Color }; VkPipelineVertexInputStateCreateInfo vertexInputState = vks::initializers::pipelineVertexInputStateCreateInfo(); @@ -716,13 +716,13 @@ public: pipelineCI.pVertexInputState = &vertexInputState; // Toon shading pipeline - shaderStages[0] = loadShader(getAssetPath() + "shaders/debugmarker/toon.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/debugmarker/toon.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "debugmarker/toon.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "debugmarker/toon.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCI, nullptr, &pipelines.toonshading)); // Color only pipeline - shaderStages[0] = loadShader(getAssetPath() + "shaders/debugmarker/colorpass.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/debugmarker/colorpass.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "debugmarker/colorpass.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "debugmarker/colorpass.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); pipelineCI.renderPass = offscreenPass.renderPass; VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCI, nullptr, &pipelines.color)); @@ -735,8 +735,8 @@ public: } // Post processing effect - shaderStages[0] = loadShader(getAssetPath() + "shaders/debugmarker/postprocess.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/debugmarker/postprocess.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "debugmarker/postprocess.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "debugmarker/postprocess.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); depthStencilStateCI.depthTestEnable = VK_FALSE; depthStencilStateCI.depthWriteEnable = VK_FALSE; rasterizationStateCI.polygonMode = VK_POLYGON_MODE_FILL; diff --git a/examples/deferred/deferred.cpp b/examples/deferred/deferred.cpp index f004067c..715ba7d3 100644 --- a/examples/deferred/deferred.cpp +++ b/examples/deferred/deferred.cpp @@ -101,7 +101,7 @@ public: } pipelines; struct { - VkPipelineLayout deferred; + VkPipelineLayout deferred; VkPipelineLayout offscreen; } pipelineLayouts; @@ -122,12 +122,12 @@ public: }; struct FrameBuffer { int32_t width, height; - VkFramebuffer frameBuffer; + VkFramebuffer frameBuffer; FrameBufferAttachment position, normal, albedo; FrameBufferAttachment depth; VkRenderPass renderPass; } offScreenFrameBuf; - + // One sampler for the frame buffer color attachments VkSampler colorSampler; @@ -152,7 +152,7 @@ public: ~VulkanExample() { - // Clean up used Vulkan resources + // Clean up used Vulkan resources // Note : Inherited destructor cleans up resources stored in base class vkDestroySampler(device, colorSampler, nullptr); @@ -210,14 +210,14 @@ public: vkDestroySemaphore(device, offscreenSemaphore, nullptr); } - // Enable physical device features required for this example + // Enable physical device features required for this example virtual void getEnabledFeatures() { // Enable anisotropic filtering if supported if (deviceFeatures.samplerAnisotropy) { enabledFeatures.samplerAnisotropy = VK_TRUE; } - // Enable texture compression + // Enable texture compression if (deviceFeatures.textureCompressionBC) { enabledFeatures.textureCompressionBC = VK_TRUE; } @@ -231,7 +231,7 @@ public: // Create a frame buffer attachment void createAttachment( - VkFormat format, + VkFormat format, VkImageUsageFlagBits usage, FrameBufferAttachment *attachment) { @@ -274,7 +274,7 @@ public: memAlloc.memoryTypeIndex = vulkanDevice->getMemoryType(memReqs.memoryTypeBits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); VK_CHECK_RESULT(vkAllocateMemory(device, &memAlloc, nullptr, &attachment->mem)); VK_CHECK_RESULT(vkBindImageMemory(device, attachment->image, attachment->mem, 0)); - + VkImageViewCreateInfo imageView = vks::initializers::imageViewCreateInfo(); imageView.viewType = VK_IMAGE_VIEW_TYPE_2D; imageView.format = format; @@ -381,8 +381,8 @@ public: dependencies[0].dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; dependencies[0].dependencyFlags = VK_DEPENDENCY_BY_REGION_BIT; - dependencies[1].srcSubpass = 0; - dependencies[1].dstSubpass = VK_SUBPASS_EXTERNAL; + dependencies[1].srcSubpass = 0; + dependencies[1].dstSubpass = VK_SUBPASS_EXTERNAL; dependencies[1].srcStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; dependencies[1].dstStageMask = VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT; dependencies[1].srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; @@ -397,9 +397,9 @@ public: renderPassInfo.pSubpasses = &subpass; renderPassInfo.dependencyCount = 2; renderPassInfo.pDependencies = dependencies.data(); - + VK_CHECK_RESULT(vkCreateRenderPass(device, &renderPassInfo, nullptr, &offScreenFrameBuf.renderPass)); - + std::array attachments; attachments[0] = offScreenFrameBuf.position.view; attachments[1] = offScreenFrameBuf.normal.view; @@ -595,7 +595,7 @@ public: void generateQuads() { // Setup vertices for multiple screen aligned quads - // Used for displaying final result and debug + // Used for displaying final result and debug struct Vertex { float pos[3]; float uv[2]; @@ -847,7 +847,7 @@ public: // Model VK_CHECK_RESULT(vkAllocateDescriptorSets(device, &allocInfo, &descriptorSets.model)); - writeDescriptorSets = + writeDescriptorSets = { // Binding 0: Vertex shader uniform buffer vks::initializers::writeDescriptorSet( @@ -923,7 +923,7 @@ public: VkPipelineDepthStencilStateCreateInfo depthStencilState = vks::initializers::pipelineDepthStencilStateCreateInfo( - VK_TRUE, + VK_TRUE, VK_TRUE, VK_COMPARE_OP_LESS_OR_EQUAL); @@ -964,8 +964,8 @@ public: pipelineCreateInfo.pStages = shaderStages.data(); // Final fullscreen composition pass pipeline - shaderStages[0] = loadShader(getAssetPath() + "shaders/deferred/deferred.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/deferred/deferred.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "deferred/deferred.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "deferred/deferred.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); // Empty vertex input state, quads are generated by the vertex shader VkPipelineVertexInputStateCreateInfo emptyInputState = vks::initializers::pipelineVertexInputStateCreateInfo(); pipelineCreateInfo.pVertexInputState = &emptyInputState; @@ -974,13 +974,13 @@ public: // Debug display pipeline pipelineCreateInfo.pVertexInputState = &vertices.inputState; - shaderStages[0] = loadShader(getAssetPath() + "shaders/deferred/debug.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/deferred/debug.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "deferred/debug.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "deferred/debug.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.debug)); - + // Offscreen pipeline - shaderStages[0] = loadShader(getAssetPath() + "shaders/deferred/mrt.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/deferred/mrt.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "deferred/mrt.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "deferred/mrt.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); // Separate render pass pipelineCreateInfo.renderPass = offScreenFrameBuf.renderPass; @@ -1048,7 +1048,7 @@ public: if (debugDisplay) { uboVS.projection = glm::ortho(0.0f, 2.0f, 0.0f, 2.0f, -1.0f, 1.0f); - } + } else { uboVS.projection = glm::ortho(0.0f, 1.0f, 0.0f, 1.0f, -1.0f, 1.0f); @@ -1121,7 +1121,7 @@ public: VulkanExampleBase::prepareFrame(); // The scene render command buffer has to wait for the offscreen - // rendering to be finished before we can use the framebuffer + // rendering to be finished before we can use the framebuffer // color image for sampling during final rendering // To ensure this we use a dedicated offscreen synchronization // semaphore that will be signaled when offscreen renderin @@ -1170,7 +1170,7 @@ public: setupDescriptorPool(); setupDescriptorSet(); buildCommandBuffers(); - buildDeferredCommandBuffer(); + buildDeferredCommandBuffer(); prepared = true; } diff --git a/examples/deferredmultisampling/deferredmultisampling.cpp b/examples/deferredmultisampling/deferredmultisampling.cpp index 17efd146..97bb3940 100644 --- a/examples/deferredmultisampling/deferredmultisampling.cpp +++ b/examples/deferredmultisampling/deferredmultisampling.cpp @@ -100,7 +100,7 @@ public: } pipelines; struct { - VkPipelineLayout deferred; + VkPipelineLayout deferred; VkPipelineLayout offscreen; } pipelineLayouts; @@ -121,12 +121,12 @@ public: }; struct FrameBuffer { int32_t width, height; - VkFramebuffer frameBuffer; + VkFramebuffer frameBuffer; FrameBufferAttachment position, normal, albedo; FrameBufferAttachment depth; VkRenderPass renderPass; } offScreenFrameBuf; - + // One sampler for the frame buffer color attachments VkSampler colorSampler; @@ -152,7 +152,7 @@ public: ~VulkanExample() { - // Clean up used Vulkan resources + // Clean up used Vulkan resources // Note : Inherited destructor cleans up resources stored in base class vkDestroySampler(device, colorSampler, nullptr); @@ -211,7 +211,7 @@ public: vkDestroySemaphore(device, offscreenSemaphore, nullptr); } - // Enable physical device features required for this example + // Enable physical device features required for this example virtual void getEnabledFeatures() { // Enable sample rate shading filtering if supported @@ -222,7 +222,7 @@ public: if (deviceFeatures.samplerAnisotropy) { enabledFeatures.samplerAnisotropy = VK_TRUE; } - // Enable texture compression + // Enable texture compression if (deviceFeatures.textureCompressionBC) { enabledFeatures.textureCompressionBC = VK_TRUE; } @@ -236,7 +236,7 @@ public: // Create a frame buffer attachment void createAttachment( - VkFormat format, + VkFormat format, VkImageUsageFlagBits usage, FrameBufferAttachment *attachment) { @@ -279,7 +279,7 @@ public: memAlloc.memoryTypeIndex = vulkanDevice->getMemoryType(memReqs.memoryTypeBits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); VK_CHECK_RESULT(vkAllocateMemory(device, &memAlloc, nullptr, &attachment->mem)); VK_CHECK_RESULT(vkBindImageMemory(device, attachment->image, attachment->mem, 0)); - + VkImageViewCreateInfo imageView = vks::initializers::imageViewCreateInfo(); imageView.viewType = VK_IMAGE_VIEW_TYPE_2D; imageView.format = format; @@ -393,8 +393,8 @@ public: dependencies[0].dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; dependencies[0].dependencyFlags = VK_DEPENDENCY_BY_REGION_BIT; - dependencies[1].srcSubpass = 0; - dependencies[1].dstSubpass = VK_SUBPASS_EXTERNAL; + dependencies[1].srcSubpass = 0; + dependencies[1].dstSubpass = VK_SUBPASS_EXTERNAL; dependencies[1].srcStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; dependencies[1].dstStageMask = VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT; dependencies[1].srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; @@ -409,9 +409,9 @@ public: renderPassInfo.pSubpasses = &subpass; renderPassInfo.dependencyCount = 2; renderPassInfo.pDependencies = dependencies.data(); - + VK_CHECK_RESULT(vkCreateRenderPass(device, &renderPassInfo, nullptr, &offScreenFrameBuf.renderPass)); - + std::array attachments; attachments[0] = offScreenFrameBuf.position.view; attachments[1] = offScreenFrameBuf.normal.view; @@ -795,7 +795,7 @@ public: // Model VK_CHECK_RESULT(vkAllocateDescriptorSets(device, &allocInfo, &descriptorSets.model)); - writeDescriptorSets = + writeDescriptorSets = { // Binding 0: Vertex shader uniform buffer vks::initializers::writeDescriptorSet( @@ -871,7 +871,7 @@ public: VkPipelineDepthStencilStateCreateInfo depthStencilState = vks::initializers::pipelineDepthStencilStateCreateInfo( - VK_TRUE, + VK_TRUE, VK_TRUE, VK_COMPARE_OP_LESS_OR_EQUAL); @@ -924,7 +924,7 @@ public: specializationEntry.constantID = 0; specializationEntry.offset = 0; specializationEntry.size = sizeof(uint32_t); - + uint32_t specializationData = sampleCount; VkSpecializationInfo specializationInfo; @@ -934,8 +934,8 @@ public: specializationInfo.pData = &specializationData; // With MSAA - shaderStages[0] = loadShader(getAssetPath() + "shaders/deferredmultisampling/deferred.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/deferredmultisampling/deferred.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "deferredmultisampling/deferred.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "deferredmultisampling/deferred.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); shaderStages[1].pSpecializationInfo = &specializationInfo; VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.deferred)); @@ -945,16 +945,16 @@ public: // Debug display pipeline specializationData = sampleCount; - shaderStages[0] = loadShader(getAssetPath() + "shaders/deferredmultisampling/debug.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/deferredmultisampling/debug.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "deferredmultisampling/debug.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "deferredmultisampling/debug.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); shaderStages[1].pSpecializationInfo = &specializationInfo; VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.debug)); - + // Offscreen scene rendering pipeline pipelineCreateInfo.pVertexInputState = &vertices.inputState; - shaderStages[0] = loadShader(getAssetPath() + "shaders/deferredmultisampling/mrt.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/deferredmultisampling/mrt.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "deferredmultisampling/mrt.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "deferredmultisampling/mrt.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); //rasterizationState.polygonMode = VK_POLYGON_MODE_LINE; //rasterizationState.lineWidth = 2.0f; @@ -1031,7 +1031,7 @@ public: if (debugDisplay) { uboVS.projection = glm::ortho(0.0f, 2.0f, 0.0f, 2.0f, -1.0f, 1.0f); - } + } else { uboVS.projection = glm::ortho(0.0f, 1.0f, 0.0f, 1.0f, -1.0f, 1.0f); @@ -1141,7 +1141,7 @@ public: setupDescriptorPool(); setupDescriptorSet(); buildCommandBuffers(); - buildDeferredCommandBuffer(); + buildDeferredCommandBuffer(); prepared = true; } diff --git a/examples/deferredshadows/deferredshadows.cpp b/examples/deferredshadows/deferredshadows.cpp index ca330bac..0be15577 100644 --- a/examples/deferredshadows/deferredshadows.cpp +++ b/examples/deferredshadows/deferredshadows.cpp @@ -39,7 +39,7 @@ #if defined(__ANDROID__) // Use max. screen dimension as deferred framebuffer size -#define FB_DIM std::max(width,height) +#define FB_DIM std::max(width,height) #else #define FB_DIM 2048 #endif @@ -73,7 +73,7 @@ public: vks::Texture2D normalMap; } background; } textures; - + // Vertex layout for the models vks::VertexLayout vertexLayout = vks::VertexLayout({ vks::VERTEX_COMPONENT_POSITION, @@ -230,7 +230,7 @@ public: vkDestroySemaphore(device, offscreenSemaphore, nullptr); } - // Enable physical device features required for this example + // Enable physical device features required for this example virtual void getEnabledFeatures() { // Geometry shader support is required for writing to multiple shadow map layers in one single pass @@ -244,7 +244,7 @@ public: if (deviceFeatures.samplerAnisotropy) { enabledFeatures.samplerAnisotropy = VK_TRUE; } - // Enable texture compression + // Enable texture compression if (deviceFeatures.textureCompressionBC) { enabledFeatures.textureCompressionBC = VK_TRUE; } @@ -258,7 +258,7 @@ public: // Prepare a layered shadow map with each layer containing depth from a light's point of view // The shadow mapping pass uses geometry shader instancing to output the scene from the different - // light sources' point of view to the layers of the depth attachment in one single pass + // light sources' point of view to the layers of the depth attachment in one single pass void shadowSetup() { frameBuffers.shadow = new vks::Framebuffer(vulkanDevice); @@ -278,7 +278,7 @@ public: attachmentInfo.usage = VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_IMAGE_USAGE_SAMPLED_BIT; frameBuffers.shadow->addAttachment(attachmentInfo); - // Create sampler to sample from to depth attachment + // Create sampler to sample from to depth attachment // Used to sample in the fragment shader for shadowed rendering VK_CHECK_RESULT(frameBuffers.shadow->createSampler(VK_FILTER_LINEAR, VK_FILTER_LINEAR, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE)); @@ -370,7 +370,7 @@ public: // First pass: Shadow map generation // ------------------------------------------------------------------------------------------------------- - + clearValues[0].depthStencil = { 1.0f, 0 }; renderPassBeginInfo.renderPass = frameBuffers.shadow->renderPass; @@ -897,8 +897,8 @@ public: // Final fullscreen pass pipeline std::array shaderStages; - shaderStages[0] = loadShader(getAssetPath() + "shaders/deferredshadows/deferred.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/deferredshadows/deferred.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "deferredshadows/deferred.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "deferredshadows/deferred.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VkGraphicsPipelineCreateInfo pipelineCreateInfo = vks::initializers::pipelineCreateInfo( @@ -920,13 +920,13 @@ public: VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.deferred)); // Debug display pipeline - shaderStages[0] = loadShader(getAssetPath() + "shaders/deferredshadows/debug.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/deferredshadows/debug.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "deferredshadows/debug.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "deferredshadows/debug.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.debug)); // Offscreen pipeline - shaderStages[0] = loadShader(getAssetPath() + "shaders/deferredshadows/mrt.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/deferredshadows/mrt.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "deferredshadows/mrt.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "deferredshadows/mrt.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); // Separate render pass pipelineCreateInfo.renderPass = frameBuffers.deferred->renderPass; @@ -950,15 +950,15 @@ public: VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.offscreen)); // Shadow mapping pipeline - // The shadow mapping pipeline uses geometry shader instancing (invocations layout modifier) to output + // The shadow mapping pipeline uses geometry shader instancing (invocations layout modifier) to output // shadow maps for multiple lights sources into the different shadow map layers in one single render pass std::array shadowStages; - shadowStages[0] = loadShader(getAssetPath() + "shaders/deferredshadows/shadow.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shadowStages[1] = loadShader(getAssetPath() + "shaders/deferredshadows/shadow.geom.spv", VK_SHADER_STAGE_GEOMETRY_BIT); + shadowStages[0] = loadShader(getShadersPath() + "deferredshadows/shadow.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shadowStages[1] = loadShader(getShadersPath() + "deferredshadows/shadow.geom.spv", VK_SHADER_STAGE_GEOMETRY_BIT); pipelineCreateInfo.pStages = shadowStages.data(); pipelineCreateInfo.stageCount = static_cast(shadowStages.size()); - + // Shadow pass doesn't use any color attachments colorBlendState.attachmentCount = 0; colorBlendState.pAttachments = nullptr; @@ -1093,7 +1093,7 @@ public: memcpy(uniformBuffers.uboShadowGS.mapped, &uboShadowGS, sizeof(uboShadowGS)); uboFragmentLights.viewPos = glm::vec4(camera.position, 0.0f) * glm::vec4(-1.0f, 1.0f, -1.0f, 1.0f);; - + memcpy(uniformBuffers.fsLights.mapped, &uboFragmentLights, sizeof(uboFragmentLights)); } diff --git a/examples/descriptorindexing/descriptorindexing.cpp b/examples/descriptorindexing/descriptorindexing.cpp index ced9f15a..8cc5a916 100644 --- a/examples/descriptorindexing/descriptorindexing.cpp +++ b/examples/descriptorindexing/descriptorindexing.cpp @@ -12,7 +12,7 @@ #include #include #include -#include +#include #include #include @@ -69,7 +69,7 @@ public: camera.setPosition(glm::vec3(0.0f, 0.0f, -7.5f)); camera.setRotation(glm::vec3(-35.0f, 0.0f, 0.0f)); camera.setPerspective(45.0f, (float)width / (float)height, 0.1f, 256.0f); - + /* [POI] Enable required extensions */ @@ -182,7 +182,7 @@ public: { { scale, scale, -scale }, { 1.0f, 0.0f }, faceTextureIndex[1] }, { { scale, -scale, -scale }, { 1.0f, 1.0f }, faceTextureIndex[1] }, { { scale, -scale, scale }, { 0.0f, 1.0f }, faceTextureIndex[1] }, - + { { -scale, -scale, -scale }, { 0.0f, 0.0f }, faceTextureIndex[2] }, { { scale, -scale, -scale }, { 1.0f, 0.0f }, faceTextureIndex[2] }, { { scale, scale, -scale }, { 1.0f, 1.0f }, faceTextureIndex[2] }, @@ -192,7 +192,7 @@ public: { { -scale, -scale, scale }, { 1.0f, 0.0f }, faceTextureIndex[3] }, { { -scale, scale, scale }, { 1.0f, 1.0f }, faceTextureIndex[3] }, { { -scale, scale, -scale }, { 0.0f, 1.0f }, faceTextureIndex[3] }, - + { { scale, scale, scale }, { 0.0f, 0.0f }, faceTextureIndex[4] }, { { -scale, scale, scale }, { 1.0f, 0.0f }, faceTextureIndex[4] }, { { -scale, scale, -scale }, { 1.0f, 1.0f }, faceTextureIndex[4] }, @@ -262,8 +262,8 @@ public: // Binding 0 : Vertex shader uniform buffer vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_VERTEX_BIT, 0), /* - [POI] - + [POI] + Binding 1 contains a texture array that is dynamically non-uniform sampled from FS: @@ -273,8 +273,8 @@ public: }; /* - [POI] - + [POI] + The fragment shader will be using an unsized array, which has to be marked with a certain flag FS: @@ -284,7 +284,7 @@ public: setLayoutBindingFlags.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT; setLayoutBindingFlags.bindingCount = 2; std::vector descriptorBindingFlags = { - 0, + 0, VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT }; setLayoutBindingFlags.pBindingFlags = descriptorBindingFlags.data(); @@ -351,7 +351,7 @@ public: VkPipelineInputAssemblyStateCreateInfo inputAssemblyStateCI = vks::initializers::pipelineInputAssemblyStateCreateInfo(VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, 0, VK_FALSE); VkPipelineRasterizationStateCreateInfo rasterizationStateCI = vks::initializers::pipelineRasterizationStateCreateInfo(VK_POLYGON_MODE_FILL, VK_CULL_MODE_NONE, VK_FRONT_FACE_COUNTER_CLOCKWISE, 0); - VkPipelineColorBlendAttachmentState blendAttachmentState = vks::initializers::pipelineColorBlendAttachmentState(0xf, VK_FALSE); + VkPipelineColorBlendAttachmentState blendAttachmentState = vks::initializers::pipelineColorBlendAttachmentState(0xf, VK_FALSE); VkPipelineColorBlendStateCreateInfo colorBlendStateCI = vks::initializers::pipelineColorBlendStateCreateInfo(1, &blendAttachmentState); VkPipelineDepthStencilStateCreateInfo depthStencilStateCI = vks::initializers::pipelineDepthStencilStateCreateInfo(VK_TRUE, VK_TRUE, VK_COMPARE_OP_LESS_OR_EQUAL); VkPipelineViewportStateCreateInfo viewportStateCI = vks::initializers::pipelineViewportStateCreateInfo(1, 1, 0); @@ -375,8 +375,8 @@ public: // Instacing pipeline std::array shaderStages; - shaderStages[0] = loadShader(getAssetPath() + "shaders/descriptorindexing/descriptorindexing.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/descriptorindexing/descriptorindexing.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "descriptorindexing/descriptorindexing.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "descriptorindexing/descriptorindexing.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VkGraphicsPipelineCreateInfo pipelineCI = vks::initializers::pipelineCreateInfo(pipelineLayout, renderPass, 0); pipelineCI.pVertexInputState = &vertexInputStateCI; diff --git a/examples/descriptorsets/descriptorsets.cpp b/examples/descriptorsets/descriptorsets.cpp index 12ce4985..e6f4d6a9 100644 --- a/examples/descriptorsets/descriptorsets.cpp +++ b/examples/descriptorsets/descriptorsets.cpp @@ -55,7 +55,7 @@ public: struct Models { vks::Model cube; } models; - + VkPipeline pipeline; VkPipelineLayout pipelineLayout; @@ -126,7 +126,7 @@ public: vkCmdBindVertexBuffers(drawCmdBuffers[i], 0, 1, &models.cube.vertices.buffer, offsets); vkCmdBindIndexBuffer(drawCmdBuffers[i], models.cube.indices.buffer, 0, VK_INDEX_TYPE_UINT32); - /* + /* [POI] Render cubes with separate descriptor sets */ for (auto cube : cubes) { @@ -158,7 +158,7 @@ public: /* Descriptor set layout - + The layout describes the shader bindings and types used for a certain descriptor layout and as such must match the shader bindings Shader bindings used in this example: @@ -185,7 +185,7 @@ public: setLayoutBindings[0].descriptorCount = 1; /* - Binding 1: Combined image sampler (used to pass per object texture information) + Binding 1: Combined image sampler (used to pass per object texture information) */ setLayoutBindings[1].descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER; setLayoutBindings[1].binding = 1; @@ -198,7 +198,7 @@ public: descriptorLayoutCI.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO; descriptorLayoutCI.bindingCount = static_cast(setLayoutBindings.size()); descriptorLayoutCI.pBindings = setLayoutBindings.data(); - + VK_CHECK_RESULT(vkCreateDescriptorSetLayout(device, &descriptorLayoutCI, nullptr, &descriptorSetLayout)); /* @@ -232,7 +232,7 @@ public: descriptorPoolCI.pPoolSizes = descriptorPoolSizes.data(); // Max. number of descriptor sets that can be allocted from this pool (one per object) descriptorPoolCI.maxSets = static_cast(cubes.size()); - + VK_CHECK_RESULT(vkCreateDescriptorPool(device, &descriptorPoolCI, nullptr, &descriptorPool)); /* @@ -293,7 +293,7 @@ public: void preparePipelines() { /* - [POI] Create a pipeline layout used for our graphics pipeline + [POI] Create a pipeline layout used for our graphics pipeline */ VkPipelineLayoutCreateInfo pipelineLayoutCI{}; pipelineLayoutCI.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO; @@ -318,7 +318,7 @@ public: vks::initializers::vertexInputBindingDescription(0, vertexLayout.stride(), VK_VERTEX_INPUT_RATE_VERTEX), }; const std::vector vertexInputAttributes = { - vks::initializers::vertexInputAttributeDescription(0, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Location 0: Position + vks::initializers::vertexInputAttributeDescription(0, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Location 0: Position vks::initializers::vertexInputAttributeDescription(0, 1, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 3), // Location 1: Normal vks::initializers::vertexInputAttributeDescription(0, 2, VK_FORMAT_R32G32_SFLOAT, sizeof(float) * 6), // Location 2: UV vks::initializers::vertexInputAttributeDescription(0, 3, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 8), // Location 3: Color @@ -340,8 +340,8 @@ public: pipelineCreateInfoCI.pDynamicState = &dynamicStateCI; const std::array shaderStages = { - loadShader(getAssetPath() + "shaders/descriptorsets/cube.vert.spv", VK_SHADER_STAGE_VERTEX_BIT), - loadShader(getAssetPath() + "shaders/descriptorsets/cube.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT) + loadShader(getShadersPath() + "descriptorsets/cube.vert.spv", VK_SHADER_STAGE_VERTEX_BIT), + loadShader(getShadersPath() + "descriptorsets/cube.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT) }; pipelineCreateInfoCI.stageCount = static_cast(shaderStages.size()); diff --git a/examples/displacement/displacement.cpp b/examples/displacement/displacement.cpp index d042a9c5..5280baaa 100644 --- a/examples/displacement/displacement.cpp +++ b/examples/displacement/displacement.cpp @@ -90,7 +90,7 @@ public: ~VulkanExample() { - // Clean up used Vulkan resources + // Clean up used Vulkan resources // Note : Inherited destructor cleans up resources stored in base class vkDestroyPipeline(device, pipelines.solid, nullptr); if (pipelines.wireframe != VK_NULL_HANDLE) { @@ -106,7 +106,7 @@ public: textures.colorHeightMap.destroy(); } - // Enable physical device features required for this example + // Enable physical device features required for this example virtual void getEnabledFeatures() { // Tessellation shader support is required for this example @@ -284,13 +284,13 @@ public: { // Binding 0 : Tessellation control shader ubo vks::initializers::descriptorSetLayoutBinding( - VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, - VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, + VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, + VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, 0), // Binding 1 : Tessellation evaluation shader ubo vks::initializers::descriptorSetLayoutBinding( VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, - VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, + VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, 1), // Binding 2 : Combined color (rgb) and height (alpha) map vks::initializers::descriptorSetLayoutBinding( @@ -386,10 +386,10 @@ public: // Tessellation pipeline // Load shaders std::array shaderStages; - shaderStages[0] = loadShader(getAssetPath() + "shaders/displacement/base.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/displacement/base.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); - shaderStages[2] = loadShader(getAssetPath() + "shaders/displacement/displacement.tesc.spv", VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT); - shaderStages[3] = loadShader(getAssetPath() + "shaders/displacement/displacement.tese.spv", VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT); + shaderStages[0] = loadShader(getShadersPath() + "displacement/base.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "displacement/base.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[2] = loadShader(getShadersPath() + "displacement/displacement.tesc.spv", VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT); + shaderStages[3] = loadShader(getShadersPath() + "displacement/displacement.tese.spv", VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT); VkGraphicsPipelineCreateInfo pipelineCreateInfo = vks::initializers::pipelineCreateInfo( diff --git a/examples/distancefieldfonts/distancefieldfonts.cpp b/examples/distancefieldfonts/distancefieldfonts.cpp index 0896ef8f..ffe9bdbf 100644 --- a/examples/distancefieldfonts/distancefieldfonts.cpp +++ b/examples/distancefieldfonts/distancefieldfonts.cpp @@ -121,7 +121,7 @@ public: ~VulkanExample() { - // Clean up used Vulkan resources + // Clean up used Vulkan resources // Note : Inherited destructor cleans up resources stored in base class // Clean up texture resources @@ -342,8 +342,8 @@ public: vertices.bindingDescriptions.resize(1); vertices.bindingDescriptions[0] = vks::initializers::vertexInputBindingDescription( - VERTEX_BUFFER_BIND_ID, - sizeof(Vertex), + VERTEX_BUFFER_BIND_ID, + sizeof(Vertex), VK_VERTEX_INPUT_RATE_VERTEX); // Attribute descriptions @@ -355,7 +355,7 @@ public: VERTEX_BUFFER_BIND_ID, 0, VK_FORMAT_R32G32B32_SFLOAT, - 0); + 0); // Location 1 : Texture coordinates vertices.attributeDescriptions[1] = vks::initializers::vertexInputAttributeDescription( @@ -379,7 +379,7 @@ public: vks::initializers::descriptorPoolSize(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 2) }; - VkDescriptorPoolCreateInfo descriptorPoolInfo = + VkDescriptorPoolCreateInfo descriptorPoolInfo = vks::initializers::descriptorPoolCreateInfo( poolSizes.size(), poolSizes.data(), @@ -391,17 +391,17 @@ public: void setupDescriptorSetLayout() { - std::vector setLayoutBindings = + std::vector setLayoutBindings = { // Binding 0 : Vertex shader uniform buffer vks::initializers::descriptorSetLayoutBinding( - VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, - VK_SHADER_STAGE_VERTEX_BIT, + VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, + VK_SHADER_STAGE_VERTEX_BIT, 0), // Binding 1 : Fragment shader image sampler vks::initializers::descriptorSetLayoutBinding( - VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, - VK_SHADER_STAGE_FRAGMENT_BIT, + VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, + VK_SHADER_STAGE_FRAGMENT_BIT, 1), // Binding 2 : Fragment shader uniform buffer vks::initializers::descriptorSetLayoutBinding( @@ -410,7 +410,7 @@ public: 2) }; - VkDescriptorSetLayoutCreateInfo descriptorLayout = + VkDescriptorSetLayoutCreateInfo descriptorLayout = vks::initializers::descriptorSetLayoutCreateInfo( setLayoutBindings.data(), setLayoutBindings.size()); @@ -427,7 +427,7 @@ public: void setupDescriptorSet() { - VkDescriptorSetAllocateInfo allocInfo = + VkDescriptorSetAllocateInfo allocInfo = vks::initializers::descriptorSetAllocateInfo( descriptorPool, &descriptorSetLayout, @@ -448,14 +448,14 @@ public: // Binding 0 : Vertex shader uniform buffer vks::initializers::writeDescriptorSet( descriptorSets.sdf, - VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, - 0, + VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, + 0, &uniformBuffers.vs.descriptor), // Binding 1 : Fragment shader texture sampler vks::initializers::writeDescriptorSet( descriptorSets.sdf, - VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, - 1, + VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, + 1, &texDescriptor), // Binding 2 : Fragment shader uniform buffer vks::initializers::writeDescriptorSet( @@ -524,7 +524,7 @@ public: VkPipelineColorBlendStateCreateInfo colorBlendState = vks::initializers::pipelineColorBlendStateCreateInfo( - 1, + 1, &blendAttachmentState); VkPipelineDepthStencilStateCreateInfo depthStencilState = @@ -554,8 +554,8 @@ public: // Load shaders std::array shaderStages; - shaderStages[0] = loadShader(getAssetPath() + "shaders/distancefieldfonts/sdf.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/distancefieldfonts/sdf.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "distancefieldfonts/sdf.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "distancefieldfonts/sdf.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VkGraphicsPipelineCreateInfo pipelineCreateInfo = vks::initializers::pipelineCreateInfo( @@ -577,8 +577,8 @@ public: VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.sdf)); // Default bitmap font rendering pipeline - shaderStages[0] = loadShader(getAssetPath() + "shaders/distancefieldfonts/bitmap.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/distancefieldfonts/bitmap.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "distancefieldfonts/bitmap.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "distancefieldfonts/bitmap.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.bitmap)); } diff --git a/examples/dynamicuniformbuffer/dynamicuniformbuffer.cpp b/examples/dynamicuniformbuffer/dynamicuniformbuffer.cpp index d0457e49..31e835d4 100644 --- a/examples/dynamicuniformbuffer/dynamicuniformbuffer.cpp +++ b/examples/dynamicuniformbuffer/dynamicuniformbuffer.cpp @@ -51,7 +51,7 @@ void* alignedAlloc(size_t size, size_t alignment) void *data = nullptr; #if defined(_MSC_VER) || defined(__MINGW32__) data = _aligned_malloc(size, alignment); -#else +#else int res = posix_memalign(&data, alignment, size); if (res != 0) data = nullptr; @@ -63,7 +63,7 @@ void alignedFree(void* data) { #if defined(_MSC_VER) || defined(__MINGW32__) _aligned_free(data); -#else +#else free(data); #endif } @@ -126,7 +126,7 @@ public: alignedFree(uboDataDynamic.model); } - // Clean up used Vulkan resources + // Clean up used Vulkan resources // Note : Inherited destructor cleans up resources stored in base class vkDestroyPipeline(device, pipeline, nullptr); @@ -224,8 +224,8 @@ public: { { -1.0f, 1.0f, -1.0f },{ 0.0f, 0.0f, 0.0f } }, }; - std::vector indices = { - 0,1,2, 2,3,0, 1,5,6, 6,2,1, 7,6,5, 5,4,7, 4,0,3, 3,7,4, 4,5,1, 1,0,4, 3,2,6, 6,7,3, + std::vector indices = { + 0,1,2, 2,3,0, 1,5,6, 6,2,1, 7,6,5, 5,4,7, 4,0,3, 3,7,4, 4,5,1, 1,0,4, 3,2,6, 6,7,3, }; indexCount = static_cast(indices.size()); @@ -322,7 +322,7 @@ public: VK_CHECK_RESULT(vkAllocateDescriptorSets(device, &allocInfo, &descriptorSet)); std::vector writeDescriptorSets = { - // Binding 0 : Projection/View matrix uniform buffer + // Binding 0 : Projection/View matrix uniform buffer vks::initializers::writeDescriptorSet(descriptorSet, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 0, &uniformBuffers.view.descriptor), // Binding 1 : Instance matrix as dynamic uniform buffer vks::initializers::writeDescriptorSet(descriptorSet, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, 1, &uniformBuffers.dynamic.descriptor), @@ -383,8 +383,8 @@ public: // Load shaders std::array shaderStages; - shaderStages[0] = loadShader(getAssetPath() + "shaders/dynamicuniformbuffer/base.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/dynamicuniformbuffer/base.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "dynamicuniformbuffer/base.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "dynamicuniformbuffer/base.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VkGraphicsPipelineCreateInfo pipelineCreateInfo = vks::initializers::pipelineCreateInfo( @@ -507,7 +507,7 @@ public: animationTimer = 0.0f; memcpy(uniformBuffers.dynamic.mapped, uboDataDynamic.model, uniformBuffers.dynamic.size); - // Flush to make changes visible to the host + // Flush to make changes visible to the host VkMappedMemoryRange memoryRange = vks::initializers::mappedMemoryRange(); memoryRange.memory = uniformBuffers.dynamic.memory; memoryRange.size = uniformBuffers.dynamic.size; diff --git a/examples/gears/gears.cpp b/examples/gears/gears.cpp index 77d369d9..b9582e27 100644 --- a/examples/gears/gears.cpp +++ b/examples/gears/gears.cpp @@ -55,7 +55,7 @@ public: ~VulkanExample() { - // Clean up used Vulkan resources + // Clean up used Vulkan resources // Note : Inherited destructor cleans up resources stored in base class vkDestroyPipeline(device, pipelines.solid, nullptr); @@ -298,8 +298,8 @@ public: // Load shaders std::array shaderStages; - shaderStages[0] = loadShader(getAssetPath() + "shaders/gears/gears.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/gears/gears.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "gears/gears.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "gears/gears.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VkGraphicsPipelineCreateInfo pipelineCreateInfo = vks::initializers::pipelineCreateInfo( diff --git a/examples/geometryshader/geometryshader.cpp b/examples/geometryshader/geometryshader.cpp index 229e5792..40f39870 100644 --- a/examples/geometryshader/geometryshader.cpp +++ b/examples/geometryshader/geometryshader.cpp @@ -83,7 +83,7 @@ public: ~VulkanExample() { - // Clean up used Vulkan resources + // Clean up used Vulkan resources // Note : Inherited destructor cleans up resources stored in base class vkDestroyPipeline(device, pipelines.solid, nullptr); vkDestroyPipeline(device, pipelines.normals, nullptr); @@ -97,7 +97,7 @@ public: uniformBuffers.VS.destroy(); } - // Enable physical device features required for this example + // Enable physical device features required for this example virtual void getEnabledFeatures() { // Geometry shader support is required for this example @@ -352,9 +352,9 @@ public: // Load shaders std::array shaderStages; - shaderStages[0] = loadShader(getAssetPath() + "shaders/geometryshader/base.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/geometryshader/base.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); - shaderStages[2] = loadShader(getAssetPath() + "shaders/geometryshader/normaldebug.geom.spv", VK_SHADER_STAGE_GEOMETRY_BIT); + shaderStages[0] = loadShader(getShadersPath() + "geometryshader/base.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "geometryshader/base.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[2] = loadShader(getShadersPath() + "geometryshader/normaldebug.geom.spv", VK_SHADER_STAGE_GEOMETRY_BIT); VkGraphicsPipelineCreateInfo pipelineCreateInfo = vks::initializers::pipelineCreateInfo( @@ -378,8 +378,8 @@ public: VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.normals)); // Solid rendering pipeline - shaderStages[0] = loadShader(getAssetPath() + "shaders/geometryshader/mesh.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/geometryshader/mesh.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "geometryshader/mesh.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "geometryshader/mesh.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); pipelineCreateInfo.stageCount = 2; VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.solid)); } diff --git a/examples/gltfscene/gltfscene.cpp b/examples/gltfscene/gltfscene.cpp index 74405946..9614dd89 100644 --- a/examples/gltfscene/gltfscene.cpp +++ b/examples/gltfscene/gltfscene.cpp @@ -13,7 +13,7 @@ * For details on how glTF 2.0 works, see the official spec at https://github.com/KhronosGroup/glTF/tree/master/specification/2.0 * * Other samples will load models using a dedicated model loader with more features (see base/VulkanglTFModel.hpp) - * + * * If you are looking for a complete glTF implementation, check out https://github.com/SaschaWillems/Vulkan-glTF-PBR/ */ @@ -45,12 +45,12 @@ // Contains everything required to render a glTF model in Vulkan // This class is heavily simplified (compared to glTF's feature set) but retains the basic glTF structure -class VulkanglTFModel +class VulkanglTFModel { public: // The class requires some Vulkan objects so it can create it's own resources vks::VulkanDevice* vulkanDevice; - VkQueue copyQueue; + VkQueue copyQueue; // The vertex layout for the samples' model struct Vertex { @@ -65,7 +65,7 @@ public: VkBuffer buffer; VkDeviceMemory memory; } vertices; - + // Single index buffer for all primitives struct { int count; @@ -73,7 +73,7 @@ public: VkDeviceMemory memory; } indices; - // The following structures roughly represent the glTF scene structure + // The following structures roughly represent the glTF scene structure // To keep things simple, they only contain those properties that are required for this sample struct Node; @@ -227,7 +227,7 @@ public: node.matrix = glm::make_mat4x4(inputNode.matrix.data()); }; - // Load node's children + // Load node's children if (inputNode.children.size() > 0) { for (size_t i = 0; i < inputNode.children.size(); i++) { loadNode(input.nodes[inputNode.children[i]], input , &node, indexBuffer, vertexBuffer); @@ -340,7 +340,7 @@ public: /* glTF rendering functions */ - + // Draw a single node including child nodes (if present) void drawNode(VkCommandBuffer commandBuffer, VkPipelineLayout pipelineLayout, VulkanglTFModel::Node node) { @@ -373,7 +373,7 @@ public: // Draw the glTF scene starting at the top-level-nodes void draw(VkCommandBuffer commandBuffer, VkPipelineLayout pipelineLayout) { - // All vertices and indices are stored in single buffers, so we only need to bind once + // All vertices and indices are stored in single buffers, so we only need to bind once VkDeviceSize offsets[1] = { 0 }; vkCmdBindVertexBuffers(commandBuffer, 0, 1, &vertices.buffer, offsets); vkCmdBindIndexBuffer(commandBuffer, indices.buffer, 0, VK_INDEX_TYPE_UINT32); @@ -427,7 +427,7 @@ public: ~VulkanExample() { - // Clean up used Vulkan resources + // Clean up used Vulkan resources // Note : Inherited destructor cleans up resources stored in base class vkDestroyPipeline(device, pipelines.solid, nullptr); if (pipelines.wireframe != VK_NULL_HANDLE) { @@ -665,7 +665,7 @@ public: vks::initializers::vertexInputBindingDescription(0, sizeof(VulkanglTFModel::Vertex), VK_VERTEX_INPUT_RATE_VERTEX), }; const std::vector vertexInputAttributes = { - vks::initializers::vertexInputAttributeDescription(0, 0, VK_FORMAT_R32G32B32_SFLOAT, offsetof(VulkanglTFModel::Vertex, pos)), // Location 0: Position + vks::initializers::vertexInputAttributeDescription(0, 0, VK_FORMAT_R32G32B32_SFLOAT, offsetof(VulkanglTFModel::Vertex, pos)), // Location 0: Position vks::initializers::vertexInputAttributeDescription(0, 1, VK_FORMAT_R32G32B32_SFLOAT, offsetof(VulkanglTFModel::Vertex, normal)),// Location 1: Normal vks::initializers::vertexInputAttributeDescription(0, 2, VK_FORMAT_R32G32B32_SFLOAT, offsetof(VulkanglTFModel::Vertex, uv)), // Location 2: Texture coordinates vks::initializers::vertexInputAttributeDescription(0, 3, VK_FORMAT_R32G32B32_SFLOAT, offsetof(VulkanglTFModel::Vertex, color)), // Location 3: Color @@ -677,8 +677,8 @@ public: vertexInputStateCI.pVertexAttributeDescriptions = vertexInputAttributes.data(); const std::array shaderStages = { - loadShader(getAssetPath() + "shaders/gltfscene/mesh.vert.spv", VK_SHADER_STAGE_VERTEX_BIT), - loadShader(getAssetPath() + "shaders/gltfscene/mesh.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT) + loadShader(getShadersPath() + "gltfscene/mesh.vert.spv", VK_SHADER_STAGE_VERTEX_BIT), + loadShader(getShadersPath() + "gltfscene/mesh.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT) }; VkGraphicsPipelineCreateInfo pipelineCI = vks::initializers::pipelineCreateInfo(pipelineLayout, renderPass, 0); @@ -713,7 +713,7 @@ public: VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, &shaderData.buffer, sizeof(shaderData.values))); - + // Map persistent VK_CHECK_RESULT(shaderData.buffer.map()); diff --git a/examples/hdr/hdr.cpp b/examples/hdr/hdr.cpp index cedec593..e37f030c 100644 --- a/examples/hdr/hdr.cpp +++ b/examples/hdr/hdr.cpp @@ -805,8 +805,8 @@ public: pipelineCreateInfo.pVertexInputState = &emptyInputState; // Final fullscreen composition pass pipeline - shaderStages[0] = loadShader(getAssetPath() + "shaders/hdr/composition.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/hdr/composition.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "hdr/composition.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "hdr/composition.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); pipelineCreateInfo.layout = pipelineLayouts.composition; pipelineCreateInfo.renderPass = renderPass; rasterizationState.cullMode = VK_CULL_MODE_FRONT_BIT; @@ -815,8 +815,8 @@ public: VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.composition)); // Bloom pass - shaderStages[0] = loadShader(getAssetPath() + "shaders/hdr/bloom.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/hdr/bloom.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "hdr/bloom.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "hdr/bloom.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); colorBlendState.pAttachments = &blendAttachmentState; blendAttachmentState.colorWriteMask = 0xF; blendAttachmentState.blendEnable = VK_TRUE; @@ -871,8 +871,8 @@ public: colorBlendState.attachmentCount = 2; colorBlendState.pAttachments = blendAttachmentStates.data(); - shaderStages[0] = loadShader(getAssetPath() + "shaders/hdr/gbuffer.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/hdr/gbuffer.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "hdr/gbuffer.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "hdr/gbuffer.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); // Set constant parameters via specialization constants specializationMapEntries[0] = vks::initializers::specializationMapEntry(0, 0, sizeof(uint32_t)); diff --git a/examples/imgui/main.cpp b/examples/imgui/main.cpp index 2753ecde..8a2f72f3 100644 --- a/examples/imgui/main.cpp +++ b/examples/imgui/main.cpp @@ -70,12 +70,12 @@ public: glm::vec2 translate; } pushConstBlock; - ImGUI(VulkanExampleBase *example) : example(example) + ImGUI(VulkanExampleBase *example) : example(example) { device = example->vulkanDevice; ImGui::CreateContext(); }; - + ~ImGUI() { ImGui::DestroyContext(); @@ -329,8 +329,8 @@ public: pipelineCreateInfo.pVertexInputState = &vertexInputState; - shaderStages[0] = example->loadShader(getAssetPath() + "shaders/imgui/ui.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = example->loadShader(getAssetPath() + "shaders/imgui/ui.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = example->loadShader(getShadersPath() + "imgui/ui.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = example->loadShader(getShadersPath() + "imgui/ui.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VK_CHECK_RESULT(vkCreateGraphicsPipelines(device->logicalDevice, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipeline)); } @@ -539,7 +539,7 @@ public: delete imGui; } - + void buildCommandBuffers() { VkCommandBufferBeginInfo cmdBufInfo = vks::initializers::commandBufferBeginInfo(); @@ -689,9 +689,9 @@ public: vks::initializers::vertexInputBindingDescription(0, vertexLayout.stride(), VK_VERTEX_INPUT_RATE_VERTEX), }; std::vector vertexInputAttributes = { - vks::initializers::vertexInputAttributeDescription(0, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Location 0: Position - vks::initializers::vertexInputAttributeDescription(0, 1, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 3), // Location 1: Normal - vks::initializers::vertexInputAttributeDescription(0, 2, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 6), // Location 2: Color + vks::initializers::vertexInputAttributeDescription(0, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Location 0: Position + vks::initializers::vertexInputAttributeDescription(0, 1, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 3), // Location 1: Normal + vks::initializers::vertexInputAttributeDescription(0, 2, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 6), // Location 2: Color }; VkPipelineVertexInputStateCreateInfo vertexInputState = vks::initializers::pipelineVertexInputStateCreateInfo(); vertexInputState.vertexBindingDescriptionCount = static_cast(vertexInputBindings.size()); @@ -701,8 +701,8 @@ public: pipelineCreateInfo.pVertexInputState = &vertexInputState; - shaderStages[0] = loadShader(getAssetPath() + "shaders/imgui/scene.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/imgui/scene.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "imgui/scene.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "imgui/scene.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipeline)); } @@ -722,7 +722,7 @@ public: void updateUniformBuffers() { - // Vertex shader + // Vertex shader uboVS.projection = camera.matrices.perspective; uboVS.modelview = camera.matrices.view * glm::mat4(1.0f); @@ -802,7 +802,7 @@ public: virtual void mouseMoved(double x, double y, bool &handled) { - ImGuiIO& io = ImGui::GetIO(); + ImGuiIO& io = ImGui::GetIO(); handled = io.WantCaptureMouse; } diff --git a/examples/indirectdraw/indirectdraw.cpp b/examples/indirectdraw/indirectdraw.cpp index 472d69db..f1635c50 100644 --- a/examples/indirectdraw/indirectdraw.cpp +++ b/examples/indirectdraw/indirectdraw.cpp @@ -1,5 +1,5 @@ /* -* Vulkan Example - Indirect drawing +* Vulkan Example - Indirect drawing * * Copyright (C) 2016 by Sascha Willems - www.saschawillems.de * @@ -9,7 +9,7 @@ * Use a device local buffer that stores draw commands for instanced rendering of different meshes stored * in the same buffer. * -* Indirect drawing offloads draw command generation and offers the ability to update them on the GPU +* Indirect drawing offloads draw command generation and offers the ability to update them on the GPU * without the CPU having to touch the buffer again, also reducing the number of drawcalls. * * The example shows how to setup and fill such a buffer on the CPU side, stages it to the device and @@ -23,7 +23,7 @@ #include #include #include -#include +#include #include #include @@ -149,7 +149,7 @@ public: uniformData.scene.destroy(); } - // Enable physical device features required for this example + // Enable physical device features required for this example virtual void getEnabledFeatures() { // Example uses multi draw indirect if available @@ -160,7 +160,7 @@ public: if (deviceFeatures.samplerAnisotropy) { enabledFeatures.samplerAnisotropy = VK_TRUE; } - // Enable texture compression + // Enable texture compression if (deviceFeatures.textureCompressionBC) { enabledFeatures.textureCompressionBC = VK_TRUE; } @@ -211,7 +211,7 @@ public: vkCmdBindVertexBuffers(drawCmdBuffers[i], VERTEX_BUFFER_BIND_ID, 1, &models.plants.vertices.buffer, offsets); // Binding point 1 : Instance data buffer vkCmdBindVertexBuffers(drawCmdBuffers[i], INSTANCE_BUFFER_BIND_ID, 1, &instanceBuffer.buffer, offsets); - + vkCmdBindIndexBuffer(drawCmdBuffers[i], models.plants.indices.buffer, 0, VK_INDEX_TYPE_UINT32); // If the multi draw feature is supported: @@ -296,7 +296,7 @@ public: vertices.bindingDescriptions[1] = vks::initializers::vertexInputBindingDescription( INSTANCE_BUFFER_BIND_ID, - sizeof(InstanceData), + sizeof(InstanceData), // Input rate for the data passed to shader // Step for each instance rendered VK_VERTEX_INPUT_RATE_INSTANCE); @@ -370,7 +370,7 @@ public: void setupDescriptorPool() { - // Example uses one ubo + // Example uses one ubo std::vector poolSizes = { vks::initializers::descriptorPoolSize(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 1), @@ -440,13 +440,13 @@ public: VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 0, &uniformData.scene.descriptor), - // Binding 1: Plants texture array combined + // Binding 1: Plants texture array combined vks::initializers::writeDescriptorSet( descriptorSet, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, &textures.plants.descriptor), - // Binding 2: Ground texture combined + // Binding 2: Ground texture combined vks::initializers::writeDescriptorSet( descriptorSet, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, @@ -526,19 +526,19 @@ public: pipelineCreateInfo.pStages = shaderStages.data(); // Indirect (and instanced) pipeline for the plants - shaderStages[0] = loadShader(getAssetPath() + "shaders/indirectdraw/indirectdraw.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/indirectdraw/indirectdraw.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "indirectdraw/indirectdraw.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "indirectdraw/indirectdraw.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.plants)); // Ground - shaderStages[0] = loadShader(getAssetPath() + "shaders/indirectdraw/ground.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/indirectdraw/ground.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "indirectdraw/ground.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "indirectdraw/ground.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); //rasterizationState.cullMode = VK_CULL_MODE_BACK_BIT; VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.ground)); // Skysphere - shaderStages[0] = loadShader(getAssetPath() + "shaders/indirectdraw/skysphere.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/indirectdraw/skysphere.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "indirectdraw/skysphere.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "indirectdraw/skysphere.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); //rasterizationState.cullMode = VK_CULL_MODE_FRONT_BIT; VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.skysphere)); } @@ -557,7 +557,7 @@ public: indirectCmd.firstInstance = m * OBJECT_INSTANCE_COUNT; indirectCmd.firstIndex = modelPart.indexBase; indirectCmd.indexCount = modelPart.indexCount; - + indirectCommands.push_back(indirectCmd); m++; diff --git a/examples/inlineuniformblocks/inlineuniformblocks.cpp b/examples/inlineuniformblocks/inlineuniformblocks.cpp index a9e2a9eb..1fd68dfa 100644 --- a/examples/inlineuniformblocks/inlineuniformblocks.cpp +++ b/examples/inlineuniformblocks/inlineuniformblocks.cpp @@ -98,7 +98,7 @@ public: /* [POI] Enable extensions required for inline uniform blocks - */ + */ enabledDeviceExtensions.push_back(VK_EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME); enabledDeviceExtensions.push_back(VK_KHR_MAINTENANCE1_EXTENSION_NAME); enabledInstanceExtensions.push_back(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME); @@ -159,7 +159,7 @@ public: for (uint32_t x = 0; x < objcount; x++) { /* [POI] Bind descriptor sets - Set 0 = Scene matrices: + Set 0 = Scene matrices: Set 1 = Object inline uniform block (In shader pbr.frag: layout (set = 1, binding = 0) uniform UniformInline ... ) */ std::vector descriptorSets = { @@ -335,8 +335,8 @@ public: pipelineCreateInfoCI.pStages = shaderStages.data(); pipelineCreateInfoCI.pVertexInputState = &vertexInputState; - shaderStages[0] = loadShader(getAssetPath() + "shaders/inlineuniformblocks/pbr.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/inlineuniformblocks/pbr.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "inlineuniformblocks/pbr.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "inlineuniformblocks/pbr.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfoCI, nullptr, &pipeline)); } diff --git a/examples/inputattachments/inputattachments.cpp b/examples/inputattachments/inputattachments.cpp index 912841a6..8393b4af 100644 --- a/examples/inputattachments/inputattachments.cpp +++ b/examples/inputattachments/inputattachments.cpp @@ -102,7 +102,7 @@ public: ~VulkanExample() { - // Clean up used Vulkan resources + // Clean up used Vulkan resources // Note : Inherited destructor cleans up resources stored in base class for (uint32_t i = 0; i < attachments.size(); i++) { @@ -230,7 +230,7 @@ public: attachments[0].finalLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR; // Input attachments - // These will be written in the first subpass, transitioned to input attachments + // These will be written in the first subpass, transitioned to input attachments // and then read in the secod subpass // Color @@ -282,7 +282,7 @@ public: VkAttachmentReference inputReferences[2]; inputReferences[0] = { 1, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL }; inputReferences[1] = { 2, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL }; - + // Use the attachments filled in the first pass as input attachments subpassDescriptions[1].inputAttachmentCount = 2; subpassDescriptions[1].pInputAttachments = inputReferences; @@ -444,9 +444,9 @@ public: */ { std::vector setLayoutBindings = { - // Binding 0: Color input attachment + // Binding 0: Color input attachment vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, VK_SHADER_STAGE_FRAGMENT_BIT, 0), - // Binding 1: Depth input attachment + // Binding 1: Depth input attachment vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, VK_SHADER_STAGE_FRAGMENT_BIT, 1), // Binding 2: Display parameters uniform buffer vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_FRAGMENT_BIT, 2), @@ -522,7 +522,7 @@ public: // Attribute descriptions std::vector vertexInputAttributes = { - vks::initializers::vertexInputAttributeDescription(0, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Location 0: Position + vks::initializers::vertexInputAttributeDescription(0, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Location 0: Position vks::initializers::vertexInputAttributeDescription(0, 1, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 3), // Location 1: Color vks::initializers::vertexInputAttributeDescription(0, 2, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 6), // Location 2: Normal }; @@ -535,9 +535,9 @@ public: pipelineCI.pVertexInputState = &vertexInputStateCI; - shaderStages[0] = loadShader(getAssetPath() + "shaders/inputattachments/attachmentwrite.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/inputattachments/attachmentwrite.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); - + shaderStages[0] = loadShader(getShadersPath() + "inputattachments/attachmentwrite.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "inputattachments/attachmentwrite.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCI, nullptr, &pipelines.attachmentWrite)); /* @@ -556,8 +556,8 @@ public: rasterizationStateCI.cullMode = VK_CULL_MODE_NONE; depthStencilStateCI.depthWriteEnable = VK_FALSE; - shaderStages[0] = loadShader(getAssetPath() + "shaders/inputattachments/attachmentread.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/inputattachments/attachmentread.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "inputattachments/attachmentread.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "inputattachments/attachmentread.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCI, nullptr, &pipelines.attachmentRead)); } diff --git a/examples/instancing/instancing.cpp b/examples/instancing/instancing.cpp index fd41cae5..aa68962f 100644 --- a/examples/instancing/instancing.cpp +++ b/examples/instancing/instancing.cpp @@ -10,7 +10,7 @@ #include #include #include -#include +#include #include #include @@ -121,14 +121,14 @@ public: uniformBuffers.scene.destroy(); } - // Enable physical device features required for this example + // Enable physical device features required for this example virtual void getEnabledFeatures() { // Enable anisotropic filtering if supported if (deviceFeatures.samplerAnisotropy) { enabledFeatures.samplerAnisotropy = VK_TRUE; } - // Enable texture compression + // Enable texture compression if (deviceFeatures.textureCompressionBC) { enabledFeatures.textureCompressionBC = VK_TRUE; } @@ -138,7 +138,7 @@ public: else if (deviceFeatures.textureCompressionETC2) { enabledFeatures.textureCompressionETC2 = VK_TRUE; } - }; + }; void buildCommandBuffers() { @@ -236,7 +236,7 @@ public: void setupDescriptorPool() { - // Example uses one ubo + // Example uses one ubo std::vector poolSizes = { vks::initializers::descriptorPoolSize(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 2), @@ -286,23 +286,23 @@ public: void setupDescriptorSet() { VkDescriptorSetAllocateInfo descripotrSetAllocInfo; - std::vector writeDescriptorSets; + std::vector writeDescriptorSets; descripotrSetAllocInfo = vks::initializers::descriptorSetAllocateInfo(descriptorPool, &descriptorSetLayout, 1);; // Instanced rocks VK_CHECK_RESULT(vkAllocateDescriptorSets(device, &descripotrSetAllocInfo, &descriptorSets.instancedRocks)); - writeDescriptorSets = { - vks::initializers::writeDescriptorSet(descriptorSets.instancedRocks, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 0, &uniformBuffers.scene.descriptor), // Binding 0 : Vertex shader uniform buffer - vks::initializers::writeDescriptorSet(descriptorSets.instancedRocks, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, &textures.rocks.descriptor) // Binding 1 : Color map + writeDescriptorSets = { + vks::initializers::writeDescriptorSet(descriptorSets.instancedRocks, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 0, &uniformBuffers.scene.descriptor), // Binding 0 : Vertex shader uniform buffer + vks::initializers::writeDescriptorSet(descriptorSets.instancedRocks, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, &textures.rocks.descriptor) // Binding 1 : Color map }; vkUpdateDescriptorSets(device, writeDescriptorSets.size(), writeDescriptorSets.data(), 0, NULL); // Planet VK_CHECK_RESULT(vkAllocateDescriptorSets(device, &descripotrSetAllocInfo, &descriptorSets.planet)); writeDescriptorSets = { - vks::initializers::writeDescriptorSet(descriptorSets.planet, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 0, &uniformBuffers.scene.descriptor), // Binding 0 : Vertex shader uniform buffer - vks::initializers::writeDescriptorSet(descriptorSets.planet, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, &textures.planet.descriptor) // Binding 1 : Color map + vks::initializers::writeDescriptorSet(descriptorSets.planet, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 0, &uniformBuffers.scene.descriptor), // Binding 0 : Vertex shader uniform buffer + vks::initializers::writeDescriptorSet(descriptorSets.planet, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, &textures.planet.descriptor) // Binding 1 : Color map }; vkUpdateDescriptorSets(device, writeDescriptorSets.size(), writeDescriptorSets.data(), 0, NULL); @@ -399,9 +399,9 @@ public: attributeDescriptions = { // Per-vertex attributees // These are advanced for each vertex fetched by the vertex shader - vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Location 0: Position - vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 1, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 3), // Location 1: Normal - vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 2, VK_FORMAT_R32G32_SFLOAT, sizeof(float) * 6), // Location 2: Texture coordinates + vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Location 0: Position + vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 1, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 3), // Location 1: Normal + vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 2, VK_FORMAT_R32G32_SFLOAT, sizeof(float) * 6), // Location 2: Texture coordinates vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 3, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 8), // Location 3: Color // Per-Instance attributes // These are fetched for each instance rendered @@ -416,16 +416,16 @@ public: pipelineCreateInfo.pVertexInputState = &inputState; // Instancing pipeline - shaderStages[0] = loadShader(getAssetPath() + "shaders/instancing/instancing.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/instancing/instancing.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "instancing/instancing.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "instancing/instancing.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); // Use all input bindings and attribute descriptions inputState.vertexBindingDescriptionCount = static_cast(bindingDescriptions.size()); inputState.vertexAttributeDescriptionCount = static_cast(attributeDescriptions.size()); VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.instancedRocks)); // Planet rendering pipeline - shaderStages[0] = loadShader(getAssetPath() + "shaders/instancing/planet.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/instancing/planet.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "instancing/planet.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "instancing/planet.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); // Only use the non-instanced input bindings and attribute descriptions inputState.vertexBindingDescriptionCount = 1; inputState.vertexAttributeDescriptionCount = 4; @@ -434,8 +434,8 @@ public: // Star field pipeline rasterizationState.cullMode = VK_CULL_MODE_NONE; depthStencilState.depthWriteEnable = VK_FALSE; - shaderStages[0] = loadShader(getAssetPath() + "shaders/instancing/starfield.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/instancing/starfield.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "instancing/starfield.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "instancing/starfield.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); // Vertices are generated in the vertex shader inputState.vertexBindingDescriptionCount = 0; inputState.vertexAttributeDescriptionCount = 0; @@ -452,7 +452,7 @@ public: std::uniform_int_distribution rndTextureIndex(0, textures.rocks.layerCount); // Distribute rocks randomly on two different rings - for (auto i = 0; i < INSTANCE_COUNT / 2; i++) { + for (auto i = 0; i < INSTANCE_COUNT / 2; i++) { glm::vec2 ring0 { 7.0f, 11.0f }; glm::vec2 ring1 { 14.0f, 18.0f }; @@ -480,7 +480,7 @@ public: instanceBuffer.size = instanceData.size() * sizeof(InstanceData); // Staging - // Instanced data is static, copy to device local memory + // Instanced data is static, copy to device local memory // This results in better performance struct { diff --git a/examples/multisampling/multisampling.cpp b/examples/multisampling/multisampling.cpp index 9c568f32..8d0d84f4 100644 --- a/examples/multisampling/multisampling.cpp +++ b/examples/multisampling/multisampling.cpp @@ -90,7 +90,7 @@ public: ~VulkanExample() { - // Clean up used Vulkan resources + // Clean up used Vulkan resources // Note : Inherited destructor cleans up resources stored in base class vkDestroyPipeline(device, pipelines.MSAA, nullptr); vkDestroyPipeline(device, pipelines.MSAASampleShading, nullptr); @@ -113,7 +113,7 @@ public: uniformBuffer.destroy(); } - // Enable physical device features required for this example + // Enable physical device features required for this example virtual void getEnabledFeatures() { // Enable sample rate shading filtering if supported @@ -122,7 +122,7 @@ public: } } - // Creates a multi sample render target (image and view) that is used to resolve + // Creates a multi sample render target (image and view) that is used to resolve // into the visible frame buffer target in the render pass void setupMultisampleTarget() { @@ -204,7 +204,7 @@ public: { memAlloc.memoryTypeIndex = vulkanDevice->getMemoryType(memReqs.memoryTypeBits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); } - + VK_CHECK_RESULT(vkAllocateMemory(device, &memAlloc, nullptr, &multisampleTarget.depth.memory)); vkBindImageMemory(device, multisampleTarget.depth.image, multisampleTarget.depth.memory, 0); @@ -223,8 +223,8 @@ public: VK_CHECK_RESULT(vkCreateImageView(device, &viewInfo, nullptr, &multisampleTarget.depth.view)); } - // Setup a render pass for using a multi sampled attachment - // and a resolve attachment that the msaa image is resolved + // Setup a render pass for using a multi sampled attachment + // and a resolve attachment that the msaa image is resolved // to at the end of the render pass void setupRenderPass() { @@ -323,8 +323,8 @@ public: VK_CHECK_RESULT(vkCreateRenderPass(device, &renderPassInfo, nullptr, &renderPass)); } - // Frame buffer attachments must match with render pass setup, - // so we need to adjust frame buffer creation to cover our + // Frame buffer attachments must match with render pass setup, + // so we need to adjust frame buffer creation to cover our // multisample target void setupFrameBuffer() { @@ -470,7 +470,7 @@ public: 1); VK_CHECK_RESULT(vkAllocateDescriptorSets(device, &allocInfo, &descriptorSet)); - + std::vector writeDescriptorSets = { // Binding 0 : Vertex shader uniform buffer @@ -479,7 +479,7 @@ public: VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 0, &uniformBuffer.descriptor), - // Binding 1 : Color map + // Binding 1 : Color map vks::initializers::writeDescriptorSet( descriptorSet, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, @@ -555,7 +555,7 @@ public: vks::initializers::vertexInputBindingDescription(VERTEX_BUFFER_BIND_ID, vertexLayout.stride(), VK_VERTEX_INPUT_RATE_VERTEX), }; std::vector vertexInputAttributes = { - vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Location 0: Position + vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Location 0: Position vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 1, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 3), // Location 1: Normal vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 2, VK_FORMAT_R32G32_SFLOAT, sizeof(float) * 6), // Location 2: Texture coordinates vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 3, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 8), // Location 3: Color @@ -570,11 +570,11 @@ public: pipelineCI.pVertexInputState = &vertexInputState; // MSAA rendering pipeline - shaderStages[0] = loadShader(getAssetPath() + "shaders/multisampling/mesh.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/multisampling/mesh.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "multisampling/mesh.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "multisampling/mesh.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); // Setup multi sampling multisampleState.rasterizationSamples = sampleCount; // Number of samples to use for rasterization - + VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCI, nullptr, &pipelines.MSAA)); diff --git a/examples/multithreading/multithreading.cpp b/examples/multithreading/multithreading.cpp index 06711bc3..caf817a3 100644 --- a/examples/multithreading/multithreading.cpp +++ b/examples/multithreading/multithreading.cpp @@ -60,7 +60,7 @@ public: VkPipelineLayout pipelineLayout; VkCommandBuffer primaryCommandBuffer; - + // Secondary scene command buffers used to store backgdrop and user interface struct SecondaryCommandBuffers { VkCommandBuffer background; @@ -81,7 +81,7 @@ public: glm::mat4 mvp; glm::vec3 color; }; - + struct ObjectData { glm::mat4 model; glm::vec3 pos; @@ -144,7 +144,7 @@ public: ~VulkanExample() { - // Clean up used Vulkan resources + // Clean up used Vulkan resources // Note : Inherited destructor cleans up resources stored in base class vkDestroyPipeline(device, pipelines.phong, nullptr); vkDestroyPipeline(device, pipelines.starsphere, nullptr); @@ -194,7 +194,7 @@ public: for (uint32_t i = 0; i < numThreads; i++) { ThreadData *thread = &threadData[i]; - + // Create one command pool for each thread VkCommandPoolCreateInfo cmdPoolInfo = vks::initializers::commandPoolCreateInfo(); cmdPoolInfo.queueFamilyIndex = swapChain.queueNodeIndex; @@ -228,7 +228,7 @@ public: thread->pushConstBlock[j].color = glm::vec3(rnd(1.0f), rnd(1.0f), rnd(1.0f)); } } - + } // Builds the secondary command buffer for each thread @@ -238,7 +238,7 @@ public: ObjectData *objectData = &thread->objectData[cmdBufferIndex]; // Check visibility against view frustum - objectData->visible = frustum.checkSphere(objectData->pos, objectSphereDim * 0.5f); + objectData->visible = frustum.checkSphere(objectData->pos, objectSphereDim * 0.5f); if (!objectData->visible) { @@ -359,8 +359,8 @@ public: VK_CHECK_RESULT(vkEndCommandBuffer(secondaryCommandBuffers.ui)); } - // Updates the secondary command buffers using a thread pool - // and puts them into the primary command buffer that's + // Updates the secondary command buffers using a thread pool + // and puts them into the primary command buffer that's // lat submitted to the queue for rendering void updateCommandBuffers(VkFramebuffer frameBuffer) { @@ -412,7 +412,7 @@ public: threadPool.threads[t]->addJob([=] { threadRenderCode(t, i, inheritanceInfo); }); } } - + threadPool.wait(); // Only submit if object is within the current view frustum @@ -534,7 +534,7 @@ public: }; const std::vector vertexInputAttributes = { - vks::initializers::vertexInputAttributeDescription(0, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Location 0: Position + vks::initializers::vertexInputAttributeDescription(0, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Location 0: Position vks::initializers::vertexInputAttributeDescription(0, 1, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 3), // Location 1: Normal vks::initializers::vertexInputAttributeDescription(0, 2, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 6), // Location 2: Color }; @@ -547,15 +547,15 @@ public: pipelineCI.pVertexInputState = &vertexInputStateCI; // Object rendering pipeline - shaderStages[0] = loadShader(getAssetPath() + "shaders/multithreading/phong.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/multithreading/phong.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "multithreading/phong.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "multithreading/phong.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCI, nullptr, &pipelines.phong)); // Star sphere rendering pipeline rasterizationState.cullMode = VK_CULL_MODE_FRONT_BIT; depthStencilState.depthWriteEnable = VK_FALSE; - shaderStages[0] = loadShader(getAssetPath() + "shaders/multithreading/starsphere.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/multithreading/starsphere.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "multithreading/starsphere.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "multithreading/starsphere.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCI, nullptr, &pipelines.starsphere)); } diff --git a/examples/multiview/multiview.cpp b/examples/multiview/multiview.cpp index 3600e6c8..15c825b5 100644 --- a/examples/multiview/multiview.cpp +++ b/examples/multiview/multiview.cpp @@ -1,7 +1,7 @@ /* * Vulkan Example - Multiview (VK_KHR_multiview) * -* Uses VK_KHR_multiview for simultaneously rendering to multiple views and displays these with barrel distortion using a fragment shader +* Uses VK_KHR_multiview for simultaneously rendering to multiple views and displays these with barrel distortion using a fragment shader * * Copyright (C) 2018 by Sascha Willems - www.saschawillems.de * @@ -86,7 +86,7 @@ public: // Enable extension required for multiview enabledDeviceExtensions.push_back(VK_KHR_MULTIVIEW_EXTENSION_NAME); - + // Reading device properties and features for multiview requires VK_KHR_get_physical_device_properties2 to be enabled enabledInstanceExtensions.push_back(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME); } @@ -231,7 +231,7 @@ public: samplerCI.borderColor = VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE; VK_CHECK_RESULT(vkCreateSampler(device, &samplerCI, nullptr, &multiviewPass.sampler)); - // Fill a descriptor for later use in a descriptor set + // Fill a descriptor for later use in a descriptor set multiviewPass.descriptor.imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; multiviewPass.descriptor.imageView = multiviewPass.color.view; multiviewPass.descriptor.sampler = multiviewPass.sampler; @@ -302,7 +302,7 @@ public: renderPassCI.pSubpasses = &subpassDescription; renderPassCI.dependencyCount = static_cast(dependencies.size()); renderPassCI.pDependencies = dependencies.data(); - + /* Setup multiview info for the renderpass */ @@ -454,7 +454,7 @@ public: void loadAssets() { - scene.loadFromFile(getAssetPath() + "models/sampleroom.dae", vertexLayout, 0.25f, vulkanDevice, queue); + scene.loadFromFile(getAssetPath() + "models/sampleroom.dae", vertexLayout, 0.25f, vulkanDevice, queue); } void prepareDescriptors() @@ -468,7 +468,7 @@ public: }; VkDescriptorPoolCreateInfo descriptorPoolInfo = vks::initializers::descriptorPoolCreateInfo(static_cast(poolSizes.size()), poolSizes.data(), 1); VK_CHECK_RESULT(vkCreateDescriptorPool(device, &descriptorPoolInfo, nullptr, &descriptorPool)); - + /* Layouts */ @@ -545,8 +545,8 @@ public: vks::initializers::vertexInputBindingDescription(0, vertexLayout.stride(), VK_VERTEX_INPUT_RATE_VERTEX), }; std::vector vertexInputAttributes = { - vks::initializers::vertexInputAttributeDescription(0, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Location 0: Position - vks::initializers::vertexInputAttributeDescription(0, 1, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 3), // Location 1: Normals + vks::initializers::vertexInputAttributeDescription(0, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Location 0: Position + vks::initializers::vertexInputAttributeDescription(0, 1, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 3), // Location 1: Normals vks::initializers::vertexInputAttributeDescription(0, 2, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 6), // Location 2: Color }; @@ -571,8 +571,8 @@ public: Contrary to the viewport array example we don't need a geometry shader for broadcasting */ std::array shaderStages; - shaderStages[0] = loadShader(getAssetPath() + "shaders/multiview/multiview.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/multiview/multiview.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "multiview/multiview.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "multiview/multiview.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); pipelineCI.stageCount = 2; pipelineCI.pStages = shaderStages.data(); VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCI, nullptr, &pipeline)); @@ -595,8 +595,8 @@ public: Separate pipelines per eye (view) using specialization constants to set view array layer to sample from */ for (uint32_t i = 0; i < 2; i++) { - shaderStages[0] = loadShader(getAssetPath() + "shaders/multiview/viewdisplay.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/multiview/viewdisplay.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "multiview/viewdisplay.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "multiview/viewdisplay.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); shaderStages[1].pSpecializationInfo = &specializationInfo; multiviewArrayLayer = (float)i; VkPipelineVertexInputStateCreateInfo emptyInputState = vks::initializers::pipelineVertexInputStateCreateInfo(); @@ -646,7 +646,7 @@ public: rotM = glm::rotate(rotM, glm::radians(camera.rotation.x), glm::vec3(1.0f, 0.0f, 0.0f)); rotM = glm::rotate(rotM, glm::radians(camera.rotation.y), glm::vec3(0.0f, 1.0f, 0.0f)); rotM = glm::rotate(rotM, glm::radians(camera.rotation.z), glm::vec3(0.0f, 0.0f, 1.0f)); - + // Left eye left = -aspectRatio * wd2 + 0.5f * eyeSeparation * ndfl; right = aspectRatio * wd2 + 0.5f * eyeSeparation * ndfl; diff --git a/examples/negativeviewportheight/negativeviewportheight.cpp b/examples/negativeviewportheight/negativeviewportheight.cpp index 1ebc2a3b..4d277818 100644 --- a/examples/negativeviewportheight/negativeviewportheight.cpp +++ b/examples/negativeviewportheight/negativeviewportheight.cpp @@ -54,7 +54,7 @@ public: vks::Buffer verticesYDown; vks::Buffer indicesCCW; vks::Buffer indicesCW; - void destroy() + void destroy() { verticesYUp.destroy(); verticesYDown.destroy(); @@ -157,7 +157,7 @@ public: textures.CW.loadFromFile(getAssetPath() + "textures/texture_orientation_cw_rgba.ktx", VK_FORMAT_R8G8B8A8_UNORM, vulkanDevice, queue); textures.CCW.loadFromFile(getAssetPath() + "textures/texture_orientation_ccw_rgba.ktx", VK_FORMAT_R8G8B8A8_UNORM, vulkanDevice, queue); - // [POI] Create two quads with different Y orientations + // [POI] Create two quads with different Y orientations struct Vertex { float pos[3]; @@ -166,7 +166,7 @@ public: const float ar = (float)height / (float)width; - // OpenGL style (y points upwards) + // OpenGL style (y points upwards) std::vector verticesYPos = { { -1.0f * ar, 1.0f, 1.0f, 0.0f, 1.0f }, { -1.0f * ar, -1.0f, 1.0f, 0.0f, 0.0f }, @@ -209,10 +209,10 @@ public: VK_CHECK_RESULT(vkCreateDescriptorPool(device, &descriptorPoolCI, nullptr, &descriptorPool)); VkDescriptorSetAllocateInfo descriptorSetAI = vks::initializers::descriptorSetAllocateInfo(descriptorPool, &descriptorSetLayout, 1); - + VK_CHECK_RESULT(vkAllocateDescriptorSets(device, &descriptorSetAI, &descriptorSets.CW)); VK_CHECK_RESULT(vkAllocateDescriptorSets(device, &descriptorSetAI, &descriptorSets.CCW)); - + std::vector writeDescriptorSets = { vks::initializers::writeDescriptorSet(descriptorSets.CW, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 0, &textures.CW.descriptor), vks::initializers::writeDescriptorSet(descriptorSets.CCW, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 0, &textures.CCW.descriptor) @@ -248,7 +248,7 @@ public: vks::initializers::vertexInputBindingDescription(0, sizeof(float) * 5, VK_VERTEX_INPUT_RATE_VERTEX), }; std::vector vertexInputAttributes = { - vks::initializers::vertexInputAttributeDescription(0, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Position + vks::initializers::vertexInputAttributeDescription(0, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Position vks::initializers::vertexInputAttributeDescription(0, 1, VK_FORMAT_R32G32_SFLOAT, sizeof(float) * 3), // uv }; VkPipelineVertexInputStateCreateInfo vertexInputState = vks::initializers::pipelineVertexInputStateCreateInfo(); @@ -269,8 +269,8 @@ public: pipelineCreateInfoCI.pDynamicState = &dynamicStateCI; const std::array shaderStages = { - loadShader(getAssetPath() + "shaders/negativeviewportheight/quad.vert.spv", VK_SHADER_STAGE_VERTEX_BIT), - loadShader(getAssetPath() + "shaders/negativeviewportheight/quad.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT) + loadShader(getShadersPath() + "negativeviewportheight/quad.vert.spv", VK_SHADER_STAGE_VERTEX_BIT), + loadShader(getShadersPath() + "negativeviewportheight/quad.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT) }; pipelineCreateInfoCI.stageCount = static_cast(shaderStages.size()); diff --git a/examples/nv_ray_tracing_basic/nv_ray_tracing_basic.cpp b/examples/nv_ray_tracing_basic/nv_ray_tracing_basic.cpp index e2e67af9..74549e1f 100644 --- a/examples/nv_ray_tracing_basic/nv_ray_tracing_basic.cpp +++ b/examples/nv_ray_tracing_basic/nv_ray_tracing_basic.cpp @@ -535,9 +535,9 @@ public: const uint32_t shaderIndexClosestHit = 2; std::array shaderStages; - shaderStages[shaderIndexRaygen] = loadShader(getAssetPath() + "shaders/nv_ray_tracing_basic/raygen.rgen.spv", VK_SHADER_STAGE_RAYGEN_BIT_NV); - shaderStages[shaderIndexMiss] = loadShader(getAssetPath() + "shaders/nv_ray_tracing_basic/miss.rmiss.spv", VK_SHADER_STAGE_MISS_BIT_NV); - shaderStages[shaderIndexClosestHit] = loadShader(getAssetPath() + "shaders/nv_ray_tracing_basic/closesthit.rchit.spv", VK_SHADER_STAGE_CLOSEST_HIT_BIT_NV); + shaderStages[shaderIndexRaygen] = loadShader(getShadersPath() + "nv_ray_tracing_basic/raygen.rgen.spv", VK_SHADER_STAGE_RAYGEN_BIT_NV); + shaderStages[shaderIndexMiss] = loadShader(getShadersPath() + "nv_ray_tracing_basic/miss.rmiss.spv", VK_SHADER_STAGE_MISS_BIT_NV); + shaderStages[shaderIndexClosestHit] = loadShader(getShadersPath() + "nv_ray_tracing_basic/closesthit.rchit.spv", VK_SHADER_STAGE_CLOSEST_HIT_BIT_NV); /* Setup ray tracing shader groups @@ -607,7 +607,7 @@ public: vkCmdBindPipeline(drawCmdBuffers[i], VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, pipeline); vkCmdBindDescriptorSets(drawCmdBuffers[i], VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, pipelineLayout, 0, 1, &descriptorSet, 0, 0); - // Calculate shader binding offsets, which is pretty straight forward in our example + // Calculate shader binding offsets, which is pretty straight forward in our example VkDeviceSize bindingOffsetRayGenShader = rayTracingProperties.shaderGroupHandleSize * INDEX_RAYGEN; VkDeviceSize bindingOffsetMissShader = rayTracingProperties.shaderGroupHandleSize * INDEX_MISS; VkDeviceSize bindingOffsetHitShader = rayTracingProperties.shaderGroupHandleSize * INDEX_CLOSEST_HIT; diff --git a/examples/nv_ray_tracing_reflections/nv_ray_tracing_reflections.cpp b/examples/nv_ray_tracing_reflections/nv_ray_tracing_reflections.cpp index 35407d9a..b79ce13c 100644 --- a/examples/nv_ray_tracing_reflections/nv_ray_tracing_reflections.cpp +++ b/examples/nv_ray_tracing_reflections/nv_ray_tracing_reflections.cpp @@ -549,9 +549,9 @@ public: const uint32_t shaderIndexClosestHit = 2; std::array shaderStages; - shaderStages[shaderIndexRaygen] = loadShader(getAssetPath() + "shaders/nv_ray_tracing_reflections/raygen.rgen.spv", VK_SHADER_STAGE_RAYGEN_BIT_NV); - shaderStages[shaderIndexMiss] = loadShader(getAssetPath() + "shaders/nv_ray_tracing_reflections/miss.rmiss.spv", VK_SHADER_STAGE_MISS_BIT_NV); - shaderStages[shaderIndexClosestHit] = loadShader(getAssetPath() + "shaders/nv_ray_tracing_reflections/closesthit.rchit.spv", VK_SHADER_STAGE_CLOSEST_HIT_BIT_NV); + shaderStages[shaderIndexRaygen] = loadShader(getShadersPath() + "nv_ray_tracing_reflections/raygen.rgen.spv", VK_SHADER_STAGE_RAYGEN_BIT_NV); + shaderStages[shaderIndexMiss] = loadShader(getShadersPath() + "nv_ray_tracing_reflections/miss.rmiss.spv", VK_SHADER_STAGE_MISS_BIT_NV); + shaderStages[shaderIndexClosestHit] = loadShader(getShadersPath() + "nv_ray_tracing_reflections/closesthit.rchit.spv", VK_SHADER_STAGE_CLOSEST_HIT_BIT_NV); // Pass recursion depth for reflections to ray generation shader via specialization constant VkSpecializationMapEntry specializationMapEntry = vks::initializers::specializationMapEntry(0, 0, sizeof(uint32_t)); @@ -630,7 +630,7 @@ public: vkCmdBindPipeline(drawCmdBuffers[i], VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, pipeline); vkCmdBindDescriptorSets(drawCmdBuffers[i], VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, pipelineLayout, 0, 1, &descriptorSet, 0, 0); - // Calculate shader binding offsets, which is pretty straight forward in our example + // Calculate shader binding offsets, which is pretty straight forward in our example VkDeviceSize bindingOffsetRayGenShader = rayTracingProperties.shaderGroupHandleSize * INDEX_RAYGEN; VkDeviceSize bindingOffsetMissShader = rayTracingProperties.shaderGroupHandleSize * INDEX_MISS; VkDeviceSize bindingOffsetHitShader = rayTracingProperties.shaderGroupHandleSize * INDEX_CLOSEST_HIT; diff --git a/examples/nv_ray_tracing_shadows/nv_ray_tracing_shadows.cpp b/examples/nv_ray_tracing_shadows/nv_ray_tracing_shadows.cpp index c3f4731d..d5d739a7 100644 --- a/examples/nv_ray_tracing_shadows/nv_ray_tracing_shadows.cpp +++ b/examples/nv_ray_tracing_shadows/nv_ray_tracing_shadows.cpp @@ -561,10 +561,10 @@ public: const uint32_t shaderIndexClosestHit = 3; std::array shaderStages; - shaderStages[shaderIndexRaygen] = loadShader(getAssetPath() + "shaders/nv_ray_tracing_shadows/raygen.rgen.spv", VK_SHADER_STAGE_RAYGEN_BIT_NV); - shaderStages[shaderIndexMiss] = loadShader(getAssetPath() + "shaders/nv_ray_tracing_shadows/miss.rmiss.spv", VK_SHADER_STAGE_MISS_BIT_NV); - shaderStages[shaderIndexShadowMiss] = loadShader(getAssetPath() + "shaders/nv_ray_tracing_shadows/shadow.rmiss.spv", VK_SHADER_STAGE_MISS_BIT_NV); - shaderStages[shaderIndexClosestHit] = loadShader(getAssetPath() + "shaders/nv_ray_tracing_shadows/closesthit.rchit.spv", VK_SHADER_STAGE_CLOSEST_HIT_BIT_NV); + shaderStages[shaderIndexRaygen] = loadShader(getShadersPath() + "nv_ray_tracing_shadows/raygen.rgen.spv", VK_SHADER_STAGE_RAYGEN_BIT_NV); + shaderStages[shaderIndexMiss] = loadShader(getShadersPath() + "nv_ray_tracing_shadows/miss.rmiss.spv", VK_SHADER_STAGE_MISS_BIT_NV); + shaderStages[shaderIndexShadowMiss] = loadShader(getShadersPath() + "nv_ray_tracing_shadows/shadow.rmiss.spv", VK_SHADER_STAGE_MISS_BIT_NV); + shaderStages[shaderIndexClosestHit] = loadShader(getShadersPath() + "nv_ray_tracing_shadows/closesthit.rchit.spv", VK_SHADER_STAGE_CLOSEST_HIT_BIT_NV); /* Setup ray tracing shader groups @@ -586,7 +586,7 @@ public: // Scene miss shader group groups[INDEX_MISS].type = VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_NV; groups[INDEX_MISS].generalShader = shaderIndexMiss; - // Shadow miss shader group + // Shadow miss shader group groups[INDEX_SHADOW_MISS].type = VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_NV; groups[INDEX_SHADOW_MISS].generalShader = shaderIndexShadowMiss; // Scene closest hit shader group @@ -645,7 +645,7 @@ public: vkCmdBindPipeline(drawCmdBuffers[i], VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, pipeline); vkCmdBindDescriptorSets(drawCmdBuffers[i], VK_PIPELINE_BIND_POINT_RAY_TRACING_NV, pipelineLayout, 0, 1, &descriptorSet, 0, 0); - // Calculate shader binding offsets, which is pretty straight forward in our example + // Calculate shader binding offsets, which is pretty straight forward in our example VkDeviceSize bindingOffsetRayGenShader = rayTracingProperties.shaderGroupHandleSize * INDEX_RAYGEN; VkDeviceSize bindingOffsetMissShader = rayTracingProperties.shaderGroupHandleSize * INDEX_MISS; VkDeviceSize bindingOffsetHitShader = rayTracingProperties.shaderGroupHandleSize * INDEX_CLOSEST_HIT; diff --git a/examples/occlusionquery/occlusionquery.cpp b/examples/occlusionquery/occlusionquery.cpp index 089ad0ac..766d9fe4 100644 --- a/examples/occlusionquery/occlusionquery.cpp +++ b/examples/occlusionquery/occlusionquery.cpp @@ -95,7 +95,7 @@ public: ~VulkanExample() { - // Clean up used Vulkan resources + // Clean up used Vulkan resources // Note : Inherited destructor cleans up resources stored in base class vkDestroyPipeline(device, pipelines.solid, nullptr); vkDestroyPipeline(device, pipelines.occluder, nullptr); @@ -130,7 +130,7 @@ public: { // We use vkGetQueryResults to copy the results into a host visible buffer vkGetQueryPoolResults( - device, + device, queryPool, 0, 2, @@ -468,8 +468,8 @@ public: // Load shaders std::array shaderStages; - shaderStages[0] = loadShader(getAssetPath() + "shaders/occlusionquery/mesh.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/occlusionquery/mesh.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "occlusionquery/mesh.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "occlusionquery/mesh.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VkGraphicsPipelineCreateInfo pipelineCreateInfo = vks::initializers::pipelineCreateInfo( @@ -491,15 +491,15 @@ public: VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.solid)); // Basic pipeline for coloring occluded objects - shaderStages[0] = loadShader(getAssetPath() + "shaders/occlusionquery/simple.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/occlusionquery/simple.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "occlusionquery/simple.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "occlusionquery/simple.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); rasterizationState.cullMode = VK_CULL_MODE_NONE; VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.simple)); // Visual pipeline for the occluder - shaderStages[0] = loadShader(getAssetPath() + "shaders/occlusionquery/occluder.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/occlusionquery/occluder.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "occlusionquery/occluder.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "occlusionquery/occluder.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); // Enable blending blendAttachmentState.blendEnable = VK_TRUE; diff --git a/examples/offscreen/offscreen.cpp b/examples/offscreen/offscreen.cpp index 73903237..da1451c5 100644 --- a/examples/offscreen/offscreen.cpp +++ b/examples/offscreen/offscreen.cpp @@ -93,7 +93,7 @@ public: }; struct OffscreenPass { int32_t width, height; - VkFramebuffer frameBuffer; + VkFramebuffer frameBuffer; FrameBufferAttachment color, depth; VkRenderPass renderPass; VkSampler sampler; @@ -119,7 +119,7 @@ public: ~VulkanExample() { - // Clean up used Vulkan resources + // Clean up used Vulkan resources // Note : Inherited destructor cleans up resources stored in base class // Frame buffer @@ -324,7 +324,7 @@ public: VK_CHECK_RESULT(vkCreateFramebuffer(device, &fbufCreateInfo, nullptr, &offscreenPass.frameBuffer)); - // Fill a descriptor for later use in a descriptor set + // Fill a descriptor for later use in a descriptor set offscreenPass.descriptor.imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; offscreenPass.descriptor.imageView = offscreenPass.color.view; offscreenPass.descriptor.sampler = offscreenPass.sampler; @@ -681,15 +681,15 @@ public: // Load shaders std::array shaderStages; - shaderStages[0] = loadShader(getAssetPath() + "shaders/offscreen/quad.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/offscreen/quad.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "offscreen/quad.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "offscreen/quad.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); // Vertex bindings and attributes const std::vector vertexInputBindings = { vks::initializers::vertexInputBindingDescription(0, vertexLayout.stride(), VK_VERTEX_INPUT_RATE_VERTEX), }; const std::vector vertexInputAttributes = { - vks::initializers::vertexInputAttributeDescription(0, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Location 0: Position + vks::initializers::vertexInputAttributeDescription(0, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Location 0: Position vks::initializers::vertexInputAttributeDescription(0, 1, VK_FORMAT_R32G32_SFLOAT, sizeof(float) * 3), // Location 1: UV vks::initializers::vertexInputAttributeDescription(0, 2, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 5), // Location 2: Color vks::initializers::vertexInputAttributeDescription(0, 3, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 8), // Location 3: Normal @@ -715,8 +715,8 @@ public: VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCI, nullptr, &pipelines.debug)); // Mirror - shaderStages[0] = loadShader(getAssetPath() + "shaders/offscreen/mirror.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/offscreen/mirror.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "offscreen/mirror.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "offscreen/mirror.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); rasterizationState.cullMode = VK_CULL_MODE_NONE; VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCI, nullptr, &pipelines.mirror)); @@ -726,8 +726,8 @@ public: // Phong shading pipelines pipelineCI.layout = pipelineLayouts.shaded; // Scene - shaderStages[0] = loadShader(getAssetPath() + "shaders/offscreen/phong.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/offscreen/phong.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "offscreen/phong.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "offscreen/phong.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCI, nullptr, &pipelines.shaded)); // Offscreen // Flip culling @@ -754,14 +754,14 @@ public: &uniformBuffers.vsMirror, sizeof(uboShared))); - // Offscreen vertex shader uniform buffer block + // Offscreen vertex shader uniform buffer block VK_CHECK_RESULT(vulkanDevice->createBuffer( VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, &uniformBuffers.vsOffScreen, sizeof(uboShared))); - // Debug quad vertex shader uniform buffer block + // Debug quad vertex shader uniform buffer block VK_CHECK_RESULT(vulkanDevice->createBuffer( VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, diff --git a/examples/parallaxmapping/parallaxmapping.cpp b/examples/parallaxmapping/parallaxmapping.cpp index 7aaaac0c..7d8ca5da 100644 --- a/examples/parallaxmapping/parallaxmapping.cpp +++ b/examples/parallaxmapping/parallaxmapping.cpp @@ -82,10 +82,10 @@ public: VkDescriptorSet descriptorSet; const std::vector mappingModes = { - "Color only", - "Normal mapping", - "Parallax mapping", - "Steep parallax mapping", + "Color only", + "Normal mapping", + "Parallax mapping", + "Steep parallax mapping", "Parallax occlusion mapping", }; @@ -103,12 +103,12 @@ public: ~VulkanExample() { vkDestroyPipeline(device, pipeline, nullptr); - + vkDestroyPipelineLayout(device, pipelineLayout, nullptr); vkDestroyDescriptorSetLayout(device, descriptorSetLayout, nullptr); models.quad.destroy(); - + uniformBuffers.vertexShader.destroy(); uniformBuffers.fragmentShader.destroy(); @@ -203,11 +203,11 @@ public: void setupDescriptorSetLayout() { - std::vector setLayoutBindings = { - vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_VERTEX_BIT, 0), // Binding 0: Vertex shader uniform buffer + std::vector setLayoutBindings = { + vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_VERTEX_BIT, 0), // Binding 0: Vertex shader uniform buffer vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_SHADER_STAGE_FRAGMENT_BIT, 1), // Binding 1: Fragment shader color map image sampler - vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_SHADER_STAGE_FRAGMENT_BIT, 2), // Binding 2: Fragment combined normal and heightmap - vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_FRAGMENT_BIT, 3), // Binding 3: Fragment shader uniform buffer + vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_SHADER_STAGE_FRAGMENT_BIT, 2), // Binding 2: Fragment combined normal and heightmap + vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_FRAGMENT_BIT, 3), // Binding 3: Fragment shader uniform buffer }; VkDescriptorSetLayoutCreateInfo descriptorLayout = @@ -233,7 +233,7 @@ public: VK_CHECK_RESULT(vkAllocateDescriptorSets(device, &allocInfo, &descriptorSet)); - std::vector writeDescriptorSets = { + std::vector writeDescriptorSets = { vks::initializers::writeDescriptorSet(descriptorSet, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 0, &uniformBuffers.vertexShader.descriptor), // Binding 0: Vertex shader uniform buffer vks::initializers::writeDescriptorSet(descriptorSet, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, &textures.colorMap.descriptor), // Binding 1: Fragment shader image sampler vks::initializers::writeDescriptorSet(descriptorSet, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 2, &textures.normalHeightMap.descriptor), // Binding 2: Combined normal and heightmap @@ -293,11 +293,11 @@ public: std::vector vertexInputBindings = { vks::initializers::vertexInputBindingDescription(0, vertexLayout.stride(), VK_VERTEX_INPUT_RATE_VERTEX), }; - std::vector vertexInputAttributes = { - vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Location 0: Position - vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 1, VK_FORMAT_R32G32_SFLOAT, sizeof(float) * 3), // Location 1: Texture coordinates - vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 2, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 5), // Location 2: Normal - vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 3, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 8), // Location 3: Tangent + std::vector vertexInputAttributes = { + vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Location 0: Position + vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 1, VK_FORMAT_R32G32_SFLOAT, sizeof(float) * 3), // Location 1: Texture coordinates + vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 2, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 5), // Location 2: Normal + vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 3, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 8), // Location 3: Tangent vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 4, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 11), // Location 4: Bitangent }; VkPipelineVertexInputStateCreateInfo vertexInputState = vks::initializers::pipelineVertexInputStateCreateInfo(); @@ -309,8 +309,8 @@ public: pipelineCreateInfo.pVertexInputState = &vertexInputState; // Parallax mapping modes pipeline - shaderStages[0] = loadShader(getAssetPath() + "shaders/parallaxmapping/parallax.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/parallaxmapping/parallax.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "parallaxmapping/parallax.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "parallaxmapping/parallax.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipeline)); } diff --git a/examples/particlefire/particlefire.cpp b/examples/particlefire/particlefire.cpp index 9eecdccd..4c4a3451 100644 --- a/examples/particlefire/particlefire.cpp +++ b/examples/particlefire/particlefire.cpp @@ -1,5 +1,5 @@ /* -* Vulkan Example - CPU based fire particle system +* Vulkan Example - CPU based fire particle system * * Copyright (C) 2016 by Sascha Willems - www.saschawillems.de * @@ -139,7 +139,7 @@ public: ~VulkanExample() { - // Clean up used Vulkan resources + // Clean up used Vulkan resources // Note : Inherited destructor cleans up resources stored in base class textures.particles.smoke.destroy(); @@ -597,8 +597,8 @@ public: // Particle rendering pipeline { // Shaders - shaderStages[0] = loadShader(getAssetPath() + "shaders/particlefire/particle.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/particlefire/particle.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "particlefire/particle.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "particlefire/particle.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); // Vertex input state VkVertexInputBindingDescription vertexInputBinding = @@ -607,7 +607,7 @@ public: std::vector vertexInputAttributes = { vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 0, VK_FORMAT_R32G32B32A32_SFLOAT, offsetof(Particle, pos)), // Location 0: Position vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 1, VK_FORMAT_R32G32B32A32_SFLOAT, offsetof(Particle, color)), // Location 1: Color - vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 2, VK_FORMAT_R32_SFLOAT, offsetof(Particle, alpha)), // Location 2: Alpha + vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 2, VK_FORMAT_R32_SFLOAT, offsetof(Particle, alpha)), // Location 2: Alpha vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 3, VK_FORMAT_R32_SFLOAT, offsetof(Particle, size)), // Location 3: Size vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 4, VK_FORMAT_R32_SFLOAT, offsetof(Particle, rotation)), // Location 4: Rotation vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 5, VK_FORMAT_R32_SINT, offsetof(Particle, type)), // Location 5: Particle type @@ -640,8 +640,8 @@ public: // Environment rendering pipeline (normal mapped) { // Shaders - shaderStages[0] = loadShader(getAssetPath() + "shaders/particlefire/normalmap.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/particlefire/normalmap.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "particlefire/normalmap.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "particlefire/normalmap.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); // Vertex input state VkVertexInputBindingDescription vertexInputBinding = @@ -650,7 +650,7 @@ public: std::vector vertexInputAttributes = { vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Location 0: Position vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 1, VK_FORMAT_R32G32_SFLOAT, sizeof(float) * 3), // Location 1: UV - vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 2, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 5), // Location 2: Normal + vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 2, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 5), // Location 2: Normal vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 3, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 8), // Location 3: Tangent vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 4, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 11), // Location 4: Bitangen }; diff --git a/examples/pbrbasic/pbrbasic.cpp b/examples/pbrbasic/pbrbasic.cpp index a2f28184..01bb7a04 100644 --- a/examples/pbrbasic/pbrbasic.cpp +++ b/examples/pbrbasic/pbrbasic.cpp @@ -126,7 +126,7 @@ public: } ~VulkanExample() - { + { vkDestroyPipeline(device, pipeline, nullptr); vkDestroyPipelineLayout(device, pipelineLayout, nullptr); @@ -182,7 +182,7 @@ public: Material mat = materials[materialIndex]; -//#define SINGLE_ROW 1 +//#define SINGLE_ROW 1 #ifdef SINGLE_ROW mat.params.metallic = 1.0; @@ -343,8 +343,8 @@ public: pipelineCreateInfo.pVertexInputState = &vertexInputState; // PBR pipeline - shaderStages[0] = loadShader(getAssetPath() + "shaders/pbrbasic/pbr.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/pbrbasic/pbr.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "pbrbasic/pbr.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "pbrbasic/pbr.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); // Enable depth test and write depthStencilState.depthWriteEnable = VK_TRUE; depthStencilState.depthTestEnable = VK_TRUE; diff --git a/examples/pbribl/pbribl.cpp b/examples/pbribl/pbribl.cpp index ac0cad83..11fb0147 100644 --- a/examples/pbribl/pbribl.cpp +++ b/examples/pbribl/pbribl.cpp @@ -166,7 +166,7 @@ public: uniformBuffers.object.destroy(); uniformBuffers.skybox.destroy(); uniformBuffers.params.destroy(); - + textures.environmentCube.destroy(); textures.irradianceCube.destroy(); textures.prefilteredCube.destroy(); @@ -232,7 +232,7 @@ public: Material mat = materials[materialIndex]; -#define SINGLE_ROW 1 +#define SINGLE_ROW 1 #ifdef SINGLE_ROW uint32_t objcount = 10; for (uint32_t x = 0; x < objcount; x++) { @@ -400,13 +400,13 @@ public: pipelineCreateInfo.pVertexInputState = &vertexInputState; // Skybox pipeline (background cube) - shaderStages[0] = loadShader(getAssetPath() + "shaders/pbribl/skybox.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/pbribl/skybox.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "pbribl/skybox.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "pbribl/skybox.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.skybox)); // PBR pipeline - shaderStages[0] = loadShader(getAssetPath() + "shaders/pbribl/pbribl.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/pbribl/pbribl.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "pbribl/pbribl.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "pbribl/pbribl.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); // Enable depth test and write depthStencilState.depthWriteEnable = VK_TRUE; depthStencilState.depthTestEnable = VK_TRUE; @@ -523,7 +523,7 @@ public: framebufferCI.width = dim; framebufferCI.height = dim; framebufferCI.layers = 1; - + VkFramebuffer framebuffer; VK_CHECK_RESULT(vkCreateFramebuffer(device, &framebufferCI, nullptr, &framebuffer)); @@ -575,8 +575,8 @@ public: pipelineCI.pVertexInputState = &emptyInputState; // Look-up-table (from BRDF) pipeline - shaderStages[0] = loadShader(getAssetPath() + "shaders/pbribl/genbrdflut.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/pbribl/genbrdflut.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "pbribl/genbrdflut.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "pbribl/genbrdflut.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VkPipeline pipeline; VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCI, nullptr, &pipeline)); @@ -604,7 +604,7 @@ public: vulkanDevice->flushCommandBuffer(cmdBuf, queue); vkQueueWaitIdle(queue); - + // todo: cleanup vkDestroyPipeline(device, pipeline, nullptr); vkDestroyPipelineLayout(device, pipelinelayout, nullptr); @@ -861,8 +861,8 @@ public: pipelineCI.pVertexInputState = &vertexInputState; pipelineCI.renderPass = renderpass; - shaderStages[0] = loadShader(getAssetPath() + "shaders/pbribl/filtercube.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/pbribl/irradiancecube.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "pbribl/filtercube.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "pbribl/irradiancecube.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VkPipeline pipeline; VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCI, nullptr, &pipeline)); @@ -977,7 +977,7 @@ public: 1, ©Region); - // Transform framebuffer color attachment back + // Transform framebuffer color attachment back vks::tools::setImageLayout( cmdBuf, offscreen.image, @@ -1255,8 +1255,8 @@ public: pipelineCI.pVertexInputState = &vertexInputState; pipelineCI.renderPass = renderpass; - shaderStages[0] = loadShader(getAssetPath() + "shaders/pbribl/filtercube.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/pbribl/prefilterenvmap.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "pbribl/filtercube.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "pbribl/prefilterenvmap.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VkPipeline pipeline; VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCI, nullptr, &pipeline)); @@ -1293,7 +1293,7 @@ public: VkViewport viewport = vks::initializers::viewport((float)dim, (float)dim, 0.0f, 1.0f); VkRect2D scissor = vks::initializers::rect2D(dim, dim, 0, 0); - + vkCmdSetViewport(cmdBuf, 0, 1, &viewport); vkCmdSetScissor(cmdBuf, 0, 1, &scissor); @@ -1338,10 +1338,10 @@ public: vkCmdEndRenderPass(cmdBuf); vks::tools::setImageLayout( - cmdBuf, - offscreen.image, - VK_IMAGE_ASPECT_COLOR_BIT, - VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, + cmdBuf, + offscreen.image, + VK_IMAGE_ASPECT_COLOR_BIT, + VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL); // Copy region for transfer from framebuffer to cube face @@ -1372,7 +1372,7 @@ public: 1, ©Region); - // Transform framebuffer color attachment back + // Transform framebuffer color attachment back vks::tools::setImageLayout( cmdBuf, offscreen.image, diff --git a/examples/pbrtexture/main.cpp b/examples/pbrtexture/main.cpp index bb6b238c..cb7a7485 100644 --- a/examples/pbrtexture/main.cpp +++ b/examples/pbrtexture/main.cpp @@ -122,7 +122,7 @@ public: uniformBuffers.object.destroy(); uniformBuffers.skybox.destroy(); uniformBuffers.params.destroy(); - + textures.environmentCube.destroy(); textures.irradianceCube.destroy(); textures.prefilteredCube.destroy(); @@ -340,14 +340,14 @@ public: pipelineCreateInfo.pVertexInputState = &vertexInputState; // Skybox pipeline (background cube) - shaderStages[0] = loadShader(getAssetPath() + "shaders/pbrtexture/skybox.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/pbrtexture/skybox.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "pbrtexture/skybox.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "pbrtexture/skybox.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.skybox)); // PBR pipeline rasterizationState.cullMode = VK_CULL_MODE_FRONT_BIT; - shaderStages[0] = loadShader(getAssetPath() + "shaders/pbrtexture/pbrtexture.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/pbrtexture/pbrtexture.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "pbrtexture/pbrtexture.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "pbrtexture/pbrtexture.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); // Enable depth test and write depthStencilState.depthWriteEnable = VK_TRUE; depthStencilState.depthTestEnable = VK_TRUE; @@ -464,7 +464,7 @@ public: framebufferCI.width = dim; framebufferCI.height = dim; framebufferCI.layers = 1; - + VkFramebuffer framebuffer; VK_CHECK_RESULT(vkCreateFramebuffer(device, &framebufferCI, nullptr, &framebuffer)); @@ -516,8 +516,8 @@ public: pipelineCI.pVertexInputState = &emptyInputState; // Look-up-table (from BRDF) pipeline - shaderStages[0] = loadShader(getAssetPath() + "shaders/pbrtexture/genbrdflut.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/pbrtexture/genbrdflut.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "pbrtexture/genbrdflut.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "pbrtexture/genbrdflut.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VkPipeline pipeline; VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCI, nullptr, &pipeline)); @@ -545,7 +545,7 @@ public: vulkanDevice->flushCommandBuffer(cmdBuf, queue); vkQueueWaitIdle(queue); - + // todo: cleanup vkDestroyPipeline(device, pipeline, nullptr); vkDestroyPipelineLayout(device, pipelinelayout, nullptr); @@ -802,8 +802,8 @@ public: pipelineCI.pVertexInputState = &vertexInputState; pipelineCI.renderPass = renderpass; - shaderStages[0] = loadShader(getAssetPath() + "shaders/pbrtexture/filtercube.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/pbrtexture/irradiancecube.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "pbrtexture/filtercube.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "pbrtexture/irradiancecube.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VkPipeline pipeline; VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCI, nullptr, &pipeline)); @@ -918,7 +918,7 @@ public: 1, ©Region); - // Transform framebuffer color attachment back + // Transform framebuffer color attachment back vks::tools::setImageLayout( cmdBuf, offscreen.image, @@ -1196,8 +1196,8 @@ public: pipelineCI.pVertexInputState = &vertexInputState; pipelineCI.renderPass = renderpass; - shaderStages[0] = loadShader(getAssetPath() + "shaders/pbrtexture/filtercube.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/pbrtexture/prefilterenvmap.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "pbrtexture/filtercube.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "pbrtexture/prefilterenvmap.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VkPipeline pipeline; VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCI, nullptr, &pipeline)); @@ -1234,7 +1234,7 @@ public: VkViewport viewport = vks::initializers::viewport((float)dim, (float)dim, 0.0f, 1.0f); VkRect2D scissor = vks::initializers::rect2D(dim, dim, 0, 0); - + vkCmdSetViewport(cmdBuf, 0, 1, &viewport); vkCmdSetScissor(cmdBuf, 0, 1, &scissor); @@ -1279,10 +1279,10 @@ public: vkCmdEndRenderPass(cmdBuf); vks::tools::setImageLayout( - cmdBuf, - offscreen.image, - VK_IMAGE_ASPECT_COLOR_BIT, - VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, + cmdBuf, + offscreen.image, + VK_IMAGE_ASPECT_COLOR_BIT, + VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL); // Copy region for transfer from framebuffer to cube face @@ -1313,7 +1313,7 @@ public: 1, ©Region); - // Transform framebuffer color attachment back + // Transform framebuffer color attachment back vks::tools::setImageLayout( cmdBuf, offscreen.image, diff --git a/examples/pipelines/pipelines.cpp b/examples/pipelines/pipelines.cpp index 8e3c2d43..73e8076f 100644 --- a/examples/pipelines/pipelines.cpp +++ b/examples/pipelines/pipelines.cpp @@ -25,7 +25,7 @@ #define VERTEX_BUFFER_BIND_ID 0 #define ENABLE_VALIDATION false -class VulkanExample: public VulkanExampleBase +class VulkanExample: public VulkanExampleBase { public: // Vertex layout for the models @@ -72,7 +72,7 @@ public: ~VulkanExample() { - // Clean up used Vulkan resources + // Clean up used Vulkan resources // Note : Inherited destructor cleans up resources stored in base class vkDestroyPipeline(device, pipelines.phong, nullptr); if (deviceFeatures.fillModeNonSolid) @@ -80,7 +80,7 @@ public: vkDestroyPipeline(device, pipelines.wireframe, nullptr); } vkDestroyPipeline(device, pipelines.toon, nullptr); - + vkDestroyPipelineLayout(device, pipelineLayout, nullptr); vkDestroyDescriptorSetLayout(device, descriptorSetLayout, nullptr); @@ -88,7 +88,7 @@ public: uniformBuffer.destroy(); } - // Enable physical device features required for this example + // Enable physical device features required for this example virtual void getEnabledFeatures() { // Fill mode non solid is required for wireframe display @@ -102,7 +102,7 @@ public: } void buildCommandBuffers() - { + { VkCommandBufferBeginInfo cmdBufInfo = vks::initializers::commandBufferBeginInfo(); VkClearValue clearValues[2]; @@ -139,11 +139,11 @@ public: vkCmdBindVertexBuffers(drawCmdBuffers[i], VERTEX_BUFFER_BIND_ID, 1, &models.cube.vertices.buffer, offsets); vkCmdBindIndexBuffer(drawCmdBuffers[i], models.cube.indices.buffer, 0, VK_INDEX_TYPE_UINT32); - // Left : Solid colored + // Left : Solid colored viewport.width = (float)width / 3.0; vkCmdSetViewport(drawCmdBuffers[i], 0, 1, &viewport); vkCmdBindPipeline(drawCmdBuffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, pipelines.phong); - + vkCmdDrawIndexed(drawCmdBuffers[i], models.cube.indexCount, 1, 0, 0, 0); // Center : Toon @@ -158,7 +158,7 @@ public: if (deviceFeatures.fillModeNonSolid) { - // Right : Wireframe + // Right : Wireframe viewport.x = (float)width / 3.0 + (float)width / 3.0; vkCmdSetViewport(drawCmdBuffers[i], 0, 1, &viewport); vkCmdBindPipeline(drawCmdBuffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, pipelines.wireframe); @@ -312,9 +312,9 @@ public: // Attribute descriptions std::vector vertexInputAttributes = { - vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Location 0: Position - vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 1, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 3), // Location 1: Color - vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 2, VK_FORMAT_R32G32_SFLOAT, sizeof(float) * 6), // Location 2 : Texture coordinates + vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Location 0: Position + vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 1, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 3), // Location 1: Color + vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 2, VK_FORMAT_R32G32_SFLOAT, sizeof(float) * 6), // Location 2 : Texture coordinates vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 3, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 8), // Location 3 : Normal }; @@ -330,14 +330,14 @@ public: // We are using this pipeline as the base for the other pipelines (derivatives) // Pipeline derivatives can be used for pipelines that share most of their state - // Depending on the implementation this may result in better performance for pipeline + // Depending on the implementation this may result in better performance for pipeline // switchting and faster creation time pipelineCreateInfo.flags = VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT; // Textured pipeline // Phong shading pipeline - shaderStages[0] = loadShader(getAssetPath() + "shaders/pipelines/phong.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/pipelines/phong.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "pipelines/phong.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "pipelines/phong.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.phong)); // All pipelines created after the base pipeline will be derivatives @@ -349,8 +349,8 @@ public: pipelineCreateInfo.basePipelineIndex = -1; // Toon shading pipeline - shaderStages[0] = loadShader(getAssetPath() + "shaders/pipelines/toon.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/pipelines/toon.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "pipelines/toon.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "pipelines/toon.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.toon)); // Pipeline for wire frame rendering @@ -358,8 +358,8 @@ public: if (deviceFeatures.fillModeNonSolid) { rasterizationState.polygonMode = VK_POLYGON_MODE_LINE; - shaderStages[0] = loadShader(getAssetPath() + "shaders/pipelines/wireframe.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/pipelines/wireframe.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "pipelines/wireframe.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "pipelines/wireframe.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.wireframe)); } } diff --git a/examples/pipelinestatistics/pipelinestatistics.cpp b/examples/pipelinestatistics/pipelinestatistics.cpp index a46c7688..9a9c183e 100644 --- a/examples/pipelinestatistics/pipelinestatistics.cpp +++ b/examples/pipelinestatistics/pipelinestatistics.cpp @@ -112,7 +112,7 @@ public: } } - // Setup a query pool for storing pipeline statistics + // Setup a query pool for storing pipeline statistics void setupQueryPool() { pipelineStatNames = { @@ -305,7 +305,7 @@ public: VkPipelineColorBlendAttachmentState blendAttachmentState = vks::initializers::pipelineColorBlendAttachmentState(0xf, VK_FALSE); - + VkPipelineColorBlendStateCreateInfo colorBlendState = vks::initializers::pipelineColorBlendStateCreateInfo(1, &blendAttachmentState); @@ -346,7 +346,7 @@ public: std::vector vertexInputAttributes = { vks::initializers::vertexInputAttributeDescription(0, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Location 0 : Position - vks::initializers::vertexInputAttributeDescription(0, 1, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 3), // Location 1 : Normal + vks::initializers::vertexInputAttributeDescription(0, 1, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 3), // Location 1 : Normal vks::initializers::vertexInputAttributeDescription(0, 2, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 6) // Location 3 : Color }; @@ -380,14 +380,14 @@ public: std::vector shaderStages; shaderStages.resize(tessellation ? 4 : 2); - shaderStages[0] = loadShader(getAssetPath() + "shaders/pipelinestatistics/scene.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/pipelinestatistics/scene.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "pipelinestatistics/scene.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "pipelinestatistics/scene.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); if (tessellation) { inputAssemblyState.topology = VK_PRIMITIVE_TOPOLOGY_PATCH_LIST; pipelineCreateInfo.pTessellationState = &tessellationState; - shaderStages[2] = loadShader(getAssetPath() + "shaders/pipelinestatistics/scene.tesc.spv", VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT); - shaderStages[3] = loadShader(getAssetPath() + "shaders/pipelinestatistics/scene.tese.spv", VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT); + shaderStages[2] = loadShader(getShadersPath() + "pipelinestatistics/scene.tesc.spv", VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT); + shaderStages[3] = loadShader(getShadersPath() + "pipelinestatistics/scene.tese.spv", VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT); } pipelineCreateInfo.stageCount = static_cast(shaderStages.size()); diff --git a/examples/pushconstants/pushconstants.cpp b/examples/pushconstants/pushconstants.cpp index 6b59bbeb..941fed01 100644 --- a/examples/pushconstants/pushconstants.cpp +++ b/examples/pushconstants/pushconstants.cpp @@ -47,7 +47,7 @@ public: } models; vks::Buffer uniformBuffer; - + struct UBOVS { glm::mat4 projection; glm::mat4 modelView; @@ -80,7 +80,7 @@ public: ~VulkanExample() { - // Clean up used Vulkan resources + // Clean up used Vulkan resources // Note : Inherited destructor cleans up resources stored in base class vkDestroyPipeline(device, pipelines.solid, nullptr); @@ -223,7 +223,7 @@ public: void setupDescriptorPool() { - // Example uses one ubo + // Example uses one ubo std::vector poolSizes = { vks::initializers::descriptorPoolSize(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 1), @@ -266,7 +266,7 @@ public: // 6 * 4 * 4 = 96 bytes // Spec requires a minimum of 128 bytes, bigger values // need to be checked against maxPushConstantsSize - // But even at only 128 bytes, lots of stuff can fit + // But even at only 128 bytes, lots of stuff can fit // inside push constants VkPushConstantRange pushConstantRange = vks::initializers::pushConstantRange( @@ -355,8 +355,8 @@ public: // Load shaders std::array shaderStages; - shaderStages[0] = loadShader(getAssetPath() + "shaders/pushconstants/lights.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/pushconstants/lights.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "pushconstants/lights.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "pushconstants/lights.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VkGraphicsPipelineCreateInfo pipelineCreateInfo = vks::initializers::pipelineCreateInfo( @@ -419,7 +419,7 @@ public: VulkanExampleBase::prepare(); // Check requested push constant size against hardware limit - // Specs require 128 bytes, so if the device complies our push constant buffer should always fit into memory + // Specs require 128 bytes, so if the device complies our push constant buffer should always fit into memory assert(sizeof(pushConstants) <= vulkanDevice->properties.limits.maxPushConstantsSize); loadAssets(); diff --git a/examples/pushdescriptors/pushdescriptors.cpp b/examples/pushdescriptors/pushdescriptors.cpp index 6c55a7c0..79ae7696 100644 --- a/examples/pushdescriptors/pushdescriptors.cpp +++ b/examples/pushdescriptors/pushdescriptors.cpp @@ -3,9 +3,9 @@ * * Note: Requires a device that supports the VK_KHR_push_descriptor extension * -* Push descriptors apply the push constants concept to descriptor sets. So instead of creating -* per-model descriptor sets (along with a pool for each descriptor type) for rendering multiple objects, -* this example uses push descriptors to pass descriptor sets for per-model textures and matrices +* Push descriptors apply the push constants concept to descriptor sets. So instead of creating +* per-model descriptor sets (along with a pool for each descriptor type) for rendering multiple objects, +* this example uses push descriptors to pass descriptor sets for per-model textures and matrices * at command buffer creation time. * * Copyright (C) 2018 by Sascha Willems - www.saschawillems.de @@ -202,7 +202,7 @@ public: vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_SHADER_STAGE_FRAGMENT_BIT, 2), }; - VkDescriptorSetLayoutCreateInfo descriptorLayoutCI{}; + VkDescriptorSetLayoutCreateInfo descriptorLayoutCI{}; descriptorLayoutCI.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO; // Setting this flag tells the descriptor set layouts that no actual descriptor sets are allocated but instead pushed at command buffer creation time descriptorLayoutCI.flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR; @@ -232,7 +232,7 @@ public: vks::initializers::vertexInputBindingDescription(0, vertexLayout.stride(), VK_VERTEX_INPUT_RATE_VERTEX), }; const std::vector vertexInputAttributes = { - vks::initializers::vertexInputAttributeDescription(0, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Location 0: Position + vks::initializers::vertexInputAttributeDescription(0, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Location 0: Position vks::initializers::vertexInputAttributeDescription(0, 1, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 3), // Location 1: Normal vks::initializers::vertexInputAttributeDescription(0, 2, VK_FORMAT_R32G32_SFLOAT, sizeof(float) * 6), // Location 2: UV vks::initializers::vertexInputAttributeDescription(0, 3, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 8), // Location 3: Color @@ -254,8 +254,8 @@ public: pipelineCreateInfoCI.pDynamicState = &dynamicStateCI; const std::array shaderStages = { - loadShader(getAssetPath() + "shaders/pushdescriptors/cube.vert.spv", VK_SHADER_STAGE_VERTEX_BIT), - loadShader(getAssetPath() + "shaders/pushdescriptors/cube.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT) + loadShader(getShadersPath() + "pushdescriptors/cube.vert.spv", VK_SHADER_STAGE_VERTEX_BIT), + loadShader(getShadersPath() + "pushdescriptors/cube.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT) }; pipelineCreateInfoCI.stageCount = static_cast(shaderStages.size()); @@ -334,7 +334,7 @@ public: Extension specific functions */ - // The push descriptor update function is part of an extension so it has to be manually loaded + // The push descriptor update function is part of an extension so it has to be manually loaded vkCmdPushDescriptorSetKHR = (PFN_vkCmdPushDescriptorSetKHR)vkGetDeviceProcAddr(device, "vkCmdPushDescriptorSetKHR"); if (!vkCmdPushDescriptorSetKHR) { vks::tools::exitFatal("Could not get a valid function pointer for vkCmdPushDescriptorSetKHR", -1); diff --git a/examples/radialblur/radialblur.cpp b/examples/radialblur/radialblur.cpp index a15462ec..e901080b 100644 --- a/examples/radialblur/radialblur.cpp +++ b/examples/radialblur/radialblur.cpp @@ -118,7 +118,7 @@ public: ~VulkanExample() { - // Clean up used Vulkan resources + // Clean up used Vulkan resources // Note : Inherited destructor cleans up resources stored in base class // Frame buffer @@ -319,7 +319,7 @@ public: VK_CHECK_RESULT(vkCreateFramebuffer(device, &fbufCreateInfo, nullptr, &offscreenPass.frameBuffer)); - // Fill a descriptor for later use in a descriptor set + // Fill a descriptor for later use in a descriptor set offscreenPass.descriptor.imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; offscreenPass.descriptor.imageView = offscreenPass.color.view; offscreenPass.descriptor.sampler = offscreenPass.sampler; @@ -397,7 +397,7 @@ public: scissor = vks::initializers::rect2D(width, height, 0, 0); vkCmdSetScissor(drawCmdBuffers[i], 0, 1, &scissor); - + // 3D scene vkCmdBindDescriptorSets(drawCmdBuffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, pipelineLayouts.scene, 0, 1, &descriptorSets.scene, 0, NULL); vkCmdBindPipeline(drawCmdBuffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, pipelines.phongPass); @@ -536,8 +536,8 @@ public: pipelineCI.pStages = shaderStages.data(); // Radial blur pipeline - shaderStages[0] = loadShader(getAssetPath() + "shaders/radialblur/radialblur.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/radialblur/radialblur.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "radialblur/radialblur.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "radialblur/radialblur.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); // Empty vertex input state VkPipelineVertexInputStateCreateInfo emptyInputState = vks::initializers::pipelineVertexInputStateCreateInfo(); pipelineCI.pVertexInputState = &emptyInputState; @@ -559,8 +559,8 @@ public: // Phong pass pipelineCI.layout = pipelineLayouts.scene; - shaderStages[0] = loadShader(getAssetPath() + "shaders/radialblur/phongpass.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/radialblur/phongpass.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "radialblur/phongpass.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "radialblur/phongpass.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); blendAttachmentState.blendEnable = VK_FALSE; depthStencilStateCI.depthWriteEnable = VK_TRUE; // Vertex bindings and attributes @@ -568,7 +568,7 @@ public: vks::initializers::vertexInputBindingDescription(0, vertexLayout.stride(), VK_VERTEX_INPUT_RATE_VERTEX), }; std::vector vertexInputAttributes = { - vks::initializers::vertexInputAttributeDescription(0, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Position + vks::initializers::vertexInputAttributeDescription(0, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Position vks::initializers::vertexInputAttributeDescription(0, 1, VK_FORMAT_R32G32_SFLOAT, sizeof(float) * 3), // Texture coordinates vks::initializers::vertexInputAttributeDescription(0, 2, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 5), // Color vks::initializers::vertexInputAttributeDescription(0, 3, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 8), // Normal @@ -582,8 +582,8 @@ public: VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCI, nullptr, &pipelines.phongPass)); // Color only pass (offscreen blur base) - shaderStages[0] = loadShader(getAssetPath() + "shaders/radialblur/colorpass.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/radialblur/colorpass.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "radialblur/colorpass.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "radialblur/colorpass.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); pipelineCI.renderPass = offscreenPass.renderPass; VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCI, nullptr, &pipelines.colorPass)); } diff --git a/examples/renderheadless/renderheadless.cpp b/examples/renderheadless/renderheadless.cpp index ee279e29..24003fa7 100644 --- a/examples/renderheadless/renderheadless.cpp +++ b/examples/renderheadless/renderheadless.cpp @@ -55,7 +55,7 @@ static VKAPI_ATTR VkBool32 VKAPI_CALL debugMessageCallback( int32_t messageCode, const char* pLayerPrefix, const char* pMessage, - void* pUserData) + void* pUserData) { LOG("[VALIDATION]: %s - %s\n", pLayerPrefix, pMessage); return VK_FALSE; @@ -66,7 +66,7 @@ class VulkanExample public: VkInstance instance; VkPhysicalDevice physicalDevice; - VkDevice device; + VkDevice device; uint32_t queueFamilyIndex; VkPipelineCache pipelineCache; VkQueue queue; @@ -135,7 +135,7 @@ public: /* Submit command buffer to a queue and wait for fence until queue operations have been finished */ - void submitWork(VkCommandBuffer cmdBuffer, VkQueue queue) + void submitWork(VkCommandBuffer cmdBuffer, VkQueue queue) { VkSubmitInfo submitInfo = vks::initializers::submitInfo(); submitInfo.commandBufferCount = 1; @@ -504,7 +504,7 @@ public: VK_CHECK_RESULT(vkCreateFramebuffer(device, &framebufferCreateInfo, nullptr, &framebuffer)); } - /* + /* Prepare graphics pipeline */ { @@ -527,7 +527,7 @@ public: pipelineCacheCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO; VK_CHECK_RESULT(vkCreatePipelineCache(device, &pipelineCacheCreateInfo, nullptr, &pipelineCache)); - // Create pipeline + // Create pipeline VkPipelineInputAssemblyStateCreateInfo inputAssemblyState = vks::initializers::pipelineInputAssemblyStateCreateInfo(VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, 0, VK_FALSE); @@ -598,17 +598,17 @@ public: shaderStages[1].stage = VK_SHADER_STAGE_FRAGMENT_BIT; shaderStages[1].pName = "main"; #if defined(VK_USE_PLATFORM_ANDROID_KHR) - shaderStages[0].module = vks::tools::loadShader(androidapp->activity->assetManager, (getAssetPath() + "shaders/renderheadless/triangle.vert.spv").c_str(), device); - shaderStages[1].module = vks::tools::loadShader(androidapp->activity->assetManager, (getAssetPath() + "shaders/renderheadless/triangle.frag.spv").c_str(), device); + shaderStages[0].module = vks::tools::loadShader(androidapp->activity->assetManager, (getShadersPath() + "renderheadless/triangle.vert.spv").c_str(), device); + shaderStages[1].module = vks::tools::loadShader(androidapp->activity->assetManager, (getShadersPath() + "renderheadless/triangle.frag.spv").c_str(), device); #else - shaderStages[0].module = vks::tools::loadShader((getAssetPath() + "shaders/renderheadless/triangle.vert.spv").c_str(), device); - shaderStages[1].module = vks::tools::loadShader((getAssetPath() + "shaders/renderheadless/triangle.frag.spv").c_str(), device); + shaderStages[0].module = vks::tools::loadShader((getShadersPath() + "renderheadless/triangle.vert.spv").c_str(), device); + shaderStages[1].module = vks::tools::loadShader((getShadersPath() + "renderheadless/triangle.frag.spv").c_str(), device); #endif shaderModules = { shaderStages[0].module, shaderStages[1].module }; VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipeline)); } - /* + /* Command buffer creation */ { @@ -617,7 +617,7 @@ public: vks::initializers::commandBufferAllocateInfo(commandPool, VK_COMMAND_BUFFER_LEVEL_PRIMARY, 1); VK_CHECK_RESULT(vkAllocateCommandBuffers(device, &cmdBufAllocateInfo, &commandBuffer)); - VkCommandBufferBeginInfo cmdBufInfo = + VkCommandBufferBeginInfo cmdBufInfo = vks::initializers::commandBufferBeginInfo(); VK_CHECK_RESULT(vkBeginCommandBuffer(commandBuffer, &cmdBufInfo)); diff --git a/examples/scenerendering/scenerendering.cpp b/examples/scenerendering/scenerendering.cpp index 53648655..ebc1c2ce 100644 --- a/examples/scenerendering/scenerendering.cpp +++ b/examples/scenerendering/scenerendering.cpp @@ -33,8 +33,8 @@ #include #include -#include -#include +#include +#include #include #include @@ -235,8 +235,8 @@ private: // We will be using a push constant block to pass material properties to the fragment shaders VkPushConstantRange pushConstantRange = vks::initializers::pushConstantRange( - VK_SHADER_STAGE_FRAGMENT_BIT, - sizeof(SceneMaterialProperties), + VK_SHADER_STAGE_FRAGMENT_BIT, + sizeof(SceneMaterialProperties), 0); pipelineLayoutCreateInfo.pushConstantRangeCount = 1; pipelineLayoutCreateInfo.pPushConstantRanges = &pushConstantRange; @@ -343,7 +343,7 @@ private: // For better performance we only create one index and vertex buffer to keep number of memory allocations down size_t vertexDataSize = vertices.size() * sizeof(Vertex); size_t indexDataSize = indices.size() * sizeof(uint32_t); - + vks::Buffer vertexStaging, indexStaging; // Vertex buffer @@ -600,7 +600,7 @@ public: delete(scene); } - // Enable physical device features required for this example + // Enable physical device features required for this example virtual void getEnabledFeatures() { // Fill mode non solid is required for wireframe display @@ -751,8 +751,8 @@ public: std::array shaderStages; // Solid rendering pipeline - shaderStages[0] = loadShader(getAssetPath() + "shaders/scenerendering/scene.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/scenerendering/scene.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "scenerendering/scene.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "scenerendering/scene.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VkGraphicsPipelineCreateInfo pipelineCreateInfo = vks::initializers::pipelineCreateInfo( diff --git a/examples/screenshot/screenshot.cpp b/examples/screenshot/screenshot.cpp index 7f33cd3a..4c9d2171 100644 --- a/examples/screenshot/screenshot.cpp +++ b/examples/screenshot/screenshot.cpp @@ -135,7 +135,7 @@ public: void setupDescriptorSetLayout() { - std::vector setLayoutBindings = { + std::vector setLayoutBindings = { vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_VERTEX_BIT, 0), // Binding 0: Vertex shader uniform buffer }; VkDescriptorSetLayoutCreateInfo descriptorLayout = vks::initializers::descriptorSetLayoutCreateInfo(setLayoutBindings); @@ -149,7 +149,7 @@ public: { VkDescriptorSetAllocateInfo allocInfo = vks::initializers::descriptorSetAllocateInfo(descriptorPool, &descriptorSetLayout, 1); VK_CHECK_RESULT(vkAllocateDescriptorSets(device, &allocInfo, &descriptorSet)); - std::vector writeDescriptorSets = { + std::vector writeDescriptorSets = { vks::initializers::writeDescriptorSet(descriptorSet, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 0, &uniformBuffer.descriptor), // Binding 0: Vertex shader uniform buffer }; vkUpdateDescriptorSets(device, writeDescriptorSets.size(), writeDescriptorSets.data(), 0, nullptr); @@ -165,7 +165,7 @@ public: VkPipelineViewportStateCreateInfo viewportState = vks::initializers::pipelineViewportStateCreateInfo(1, 1, 0); VkPipelineMultisampleStateCreateInfo multisampleState = vks::initializers::pipelineMultisampleStateCreateInfo(VK_SAMPLE_COUNT_1_BIT, 0); std::vector dynamicStateEnables = { VK_DYNAMIC_STATE_VIEWPORT, VK_DYNAMIC_STATE_SCISSOR }; - VkPipelineDynamicStateCreateInfo dynamicState = vks::initializers::pipelineDynamicStateCreateInfo(dynamicStateEnables); + VkPipelineDynamicStateCreateInfo dynamicState = vks::initializers::pipelineDynamicStateCreateInfo(dynamicStateEnables); // Vertex bindings and attributes // Binding description @@ -185,8 +185,8 @@ public: vertexInputState.pVertexAttributeDescriptions = vertexInputAttributes.data(); std::array shaderStages = { - loadShader(getAssetPath() + "shaders/screenshot/mesh.vert.spv", VK_SHADER_STAGE_VERTEX_BIT), - loadShader(getAssetPath() + "shaders/screenshot/mesh.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT), + loadShader(getShadersPath() + "screenshot/mesh.vert.spv", VK_SHADER_STAGE_VERTEX_BIT), + loadShader(getShadersPath() + "screenshot/mesh.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT), }; VkGraphicsPipelineCreateInfo pipelineCreateInfo = vks::initializers::pipelineCreateInfo(pipelineLayout, renderPass, 0); @@ -242,7 +242,7 @@ public: supportsBlit = false; } - // Check if the device supports blitting to linear images + // Check if the device supports blitting to linear images vkGetPhysicalDeviceFormatProperties(physicalDevice, VK_FORMAT_R8G8B8A8_UNORM, &formatProps); if (!(formatProps.linearTilingFeatures & VK_FORMAT_FEATURE_BLIT_DST_BIT)) { std::cerr << "Device does not support blitting to linear tiled images, using copy instead of blit!" << std::endl; @@ -251,7 +251,7 @@ public: // Source for the copy is the last rendered swapchain image VkImage srcImage = swapChain.images[currentBuffer]; - + // Create the linear tiled destination image to copy to and to read the memory from VkImageCreateInfo imageCreateCI(vks::initializers::imageCreateInfo()); imageCreateCI.imageType = VK_IMAGE_TYPE_2D; @@ -396,7 +396,7 @@ public: // If source is BGR (destination is always RGB) and we can't use blit (which does automatic conversion), we'll have to manually swizzle color components bool colorSwizzle = false; - // Check if source is BGR + // Check if source is BGR // Note: Not complete, only contains most common and basic BGR surface formats for demonstation purposes if (!supportsBlit) { @@ -405,13 +405,13 @@ public: } // ppm binary pixel data - for (uint32_t y = 0; y < height; y++) + for (uint32_t y = 0; y < height; y++) { unsigned int *row = (unsigned int*)data; - for (uint32_t x = 0; x < width; x++) + for (uint32_t x = 0; x < width; x++) { - if (colorSwizzle) - { + if (colorSwizzle) + { file.write((char*)row+2, 1); file.write((char*)row+1, 1); file.write((char*)row, 1); diff --git a/examples/shadowmapping/shadowmapping.cpp b/examples/shadowmapping/shadowmapping.cpp index bc35e202..ce15be5d 100644 --- a/examples/shadowmapping/shadowmapping.cpp +++ b/examples/shadowmapping/shadowmapping.cpp @@ -142,7 +142,7 @@ public: ~VulkanExample() { - // Clean up used Vulkan resources + // Clean up used Vulkan resources // Note : Inherited destructor cleans up resources stored in base class // Frame buffer @@ -273,7 +273,7 @@ public: depthStencilView.image = offscreenPass.depth.image; VK_CHECK_RESULT(vkCreateImageView(device, &depthStencilView, nullptr, &offscreenPass.depth.view)); - // Create sampler to sample from to depth attachment + // Create sampler to sample from to depth attachment // Used to sample in the fragment shader for shadowed rendering VkSamplerCreateInfo sampler = vks::initializers::samplerCreateInfo(); sampler.magFilter = SHADOWMAP_FILTER; @@ -293,7 +293,7 @@ public: // Create frame buffer VkFramebufferCreateInfo fbufCreateInfo = vks::initializers::framebufferCreateInfo(); - fbufCreateInfo.renderPass = offscreenPass.renderPass; + fbufCreateInfo.renderPass = offscreenPass.renderPass; fbufCreateInfo.attachmentCount = 1; fbufCreateInfo.pAttachments = &offscreenPass.depth.view; fbufCreateInfo.width = offscreenPass.width; @@ -321,7 +321,7 @@ public: */ { clearValues[0].depthStencil = { 1.0f, 0 }; - + VkRenderPassBeginInfo renderPassBeginInfo = vks::initializers::renderPassBeginInfo(); renderPassBeginInfo.renderPass = offscreenPass.renderPass; renderPassBeginInfo.framebuffer = offscreenPass.frameBuffer; @@ -331,7 +331,7 @@ public: renderPassBeginInfo.pClearValues = clearValues; vkCmdBeginRenderPass(drawCmdBuffers[i], &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE); - + viewport = vks::initializers::viewport((float)offscreenPass.width, (float)offscreenPass.height, 0.0f, 1.0f); vkCmdSetViewport(drawCmdBuffers[i], 0, 1, &viewport); @@ -584,8 +584,8 @@ public: // Shadow mapping debug quad display rasterizationStateCI.cullMode = VK_CULL_MODE_NONE; - shaderStages[0] = loadShader(getAssetPath() + "shaders/shadowmapping/quad.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/shadowmapping/quad.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "shadowmapping/quad.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "shadowmapping/quad.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); // Empty vertex input state VkPipelineVertexInputStateCreateInfo emptyInputState = vks::initializers::pipelineVertexInputStateCreateInfo(); pipelineCI.pVertexInputState = &emptyInputState; @@ -596,7 +596,7 @@ public: vks::initializers::vertexInputBindingDescription(0, vertexLayout.stride(), VK_VERTEX_INPUT_RATE_VERTEX), }; std::vector vertexInputAttributes = { - vks::initializers::vertexInputAttributeDescription(0, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Position + vks::initializers::vertexInputAttributeDescription(0, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Position vks::initializers::vertexInputAttributeDescription(0, 1, VK_FORMAT_R32G32_SFLOAT, sizeof(float) * 3), // Texture coordinates vks::initializers::vertexInputAttributeDescription(0, 2, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 5), // Color vks::initializers::vertexInputAttributeDescription(0, 3, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 8), // Normal @@ -610,8 +610,8 @@ public: // Scene rendering with shadows applied rasterizationStateCI.cullMode = VK_CULL_MODE_BACK_BIT; - shaderStages[0] = loadShader(getAssetPath() + "shaders/shadowmapping/scene.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/shadowmapping/scene.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "shadowmapping/scene.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "shadowmapping/scene.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); // Use specialization constants to select between horizontal and vertical blur uint32_t enablePCF = 0; VkSpecializationMapEntry specializationMapEntry = vks::initializers::specializationMapEntry(0, 0, sizeof(uint32_t)); @@ -624,7 +624,7 @@ public: VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCI, nullptr, &pipelines.sceneShadowPCF)); // Offscreen pipeline (vertex shader only) - shaderStages[0] = loadShader(getAssetPath() + "shaders/shadowmapping/offscreen.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[0] = loadShader(getShadersPath() + "shadowmapping/offscreen.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); pipelineCI.stageCount = 1; // No blend attachment states (no color attachments used) colorBlendStateCI.attachmentCount = 0; @@ -662,7 +662,7 @@ public: &uniformBuffers.offscreen, sizeof(uboOffscreenVS))); - // Scene vertex shader uniform buffer block + // Scene vertex shader uniform buffer block VK_CHECK_RESULT(vulkanDevice->createBuffer( VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, diff --git a/examples/shadowmappingcascade/shadowmappingcascade.cpp b/examples/shadowmappingcascade/shadowmappingcascade.cpp index 61970def..3255be78 100644 --- a/examples/shadowmappingcascade/shadowmappingcascade.cpp +++ b/examples/shadowmappingcascade/shadowmappingcascade.cpp @@ -207,7 +207,7 @@ public: { enabledFeatures.samplerAnisotropy = deviceFeatures.samplerAnisotropy; // Depth clamp to avoid near plane clipping - enabledFeatures.depthClamp = deviceFeatures.depthClamp; + enabledFeatures.depthClamp = deviceFeatures.depthClamp; } /* @@ -400,7 +400,7 @@ public: VkDeviceSize offsets[1] = { 0 }; for (int32_t i = 0; i < drawCmdBuffers.size(); i++) { - + VK_CHECK_RESULT(vkBeginCommandBuffer(drawCmdBuffers[i], &cmdBufInfo)); /* @@ -506,7 +506,7 @@ public: models[2].loadFromFile(getAssetPath() + "models/oak_leafs.dae", vertexLayout, 2.0f, vulkanDevice, queue); } - void setupLayoutsAndDescriptors() + void setupLayoutsAndDescriptors() { /* Descriptor pool @@ -618,7 +618,7 @@ public: std::vector dynamicStateEnables = { VK_DYNAMIC_STATE_VIEWPORT, VK_DYNAMIC_STATE_SCISSOR }; VkPipelineDynamicStateCreateInfo dynamicState = vks::initializers::pipelineDynamicStateCreateInfo(dynamicStateEnables); std::array shaderStages; - + VkGraphicsPipelineCreateInfo pipelineCreateInfo = vks::initializers::pipelineCreateInfo(pipelineLayout, renderPass, 0); pipelineCreateInfo.pInputAssemblyState = &inputAssemblyState; pipelineCreateInfo.pRasterizationState = &rasterizationState; @@ -632,8 +632,8 @@ public: // Shadow map cascade debug quad display rasterizationState.cullMode = VK_CULL_MODE_BACK_BIT; - shaderStages[0] = loadShader(getAssetPath() + "shaders/shadowmappingcascade/debugshadowmap.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/shadowmappingcascade/debugshadowmap.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "shadowmappingcascade/debugshadowmap.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "shadowmappingcascade/debugshadowmap.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); // Empty vertex input state VkPipelineVertexInputStateCreateInfo emptyInputState = vks::initializers::pipelineVertexInputStateCreateInfo(); pipelineCreateInfo.pVertexInputState = &emptyInputState; @@ -663,8 +663,8 @@ public: Shadow mapped scene rendering */ rasterizationState.cullMode = VK_CULL_MODE_NONE; - shaderStages[0] = loadShader(getAssetPath() + "shaders/shadowmappingcascade/scene.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/shadowmappingcascade/scene.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "shadowmappingcascade/scene.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "shadowmappingcascade/scene.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); // Use specialization constants to select between horizontal and vertical blur uint32_t enablePCF = 0; VkSpecializationMapEntry specializationMapEntry = vks::initializers::specializationMapEntry(0, 0, sizeof(uint32_t)); @@ -677,8 +677,8 @@ public: /* Depth map generation */ - shaderStages[0] = loadShader(getAssetPath() + "shaders/shadowmappingcascade/depthpass.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/shadowmappingcascade/depthpass.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "shadowmappingcascade/depthpass.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "shadowmappingcascade/depthpass.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); // No blend attachment states (no color attachments used) colorBlendState.attachmentCount = 0; depthStencilState.depthCompareOp = VK_COMPARE_OP_LESS_OR_EQUAL; @@ -726,7 +726,7 @@ public: void updateCascades() { float cascadeSplits[SHADOW_MAP_CASCADE_COUNT]; - + float nearClip = camera.getNearClip(); float farClip = camera.getFarClip(); float clipRange = farClip - nearClip; diff --git a/examples/shadowmappingomni/shadowmappingomni.cpp b/examples/shadowmappingomni/shadowmappingomni.cpp index bd5cf1f9..35c5c0b2 100644 --- a/examples/shadowmappingomni/shadowmappingomni.cpp +++ b/examples/shadowmappingomni/shadowmappingomni.cpp @@ -31,7 +31,7 @@ // Offscreen frame buffer properties #define FB_DIM TEX_DIM -#define FB_COLOR_FORMAT VK_FORMAT_R32_SFLOAT +#define FB_COLOR_FORMAT VK_FORMAT_R32_SFLOAT class VulkanExample : public VulkanExampleBase { @@ -64,7 +64,7 @@ public: glm::mat4 model; } uboVSquad; - glm::vec4 lightPos = glm::vec4(0.0f, -25.0f, 0.0f, 1.0); + glm::vec4 lightPos = glm::vec4(0.0f, -25.0f, 0.0f, 1.0); struct UBO { glm::mat4 projection; @@ -82,7 +82,7 @@ public: } pipelines; struct { - VkPipelineLayout scene; + VkPipelineLayout scene; VkPipelineLayout offscreen; } pipelineLayouts; @@ -125,7 +125,7 @@ public: ~VulkanExample() { - // Clean up used Vulkan resources + // Clean up used Vulkan resources // Note : Inherited destructor cleans up resources stored in base class // Cube map @@ -173,7 +173,7 @@ public: { shadowCubeMap.width = TEX_DIM; shadowCubeMap.height = TEX_DIM; - + // 32 bit float format for higher precision VkFormat format = VK_FORMAT_R32_SFLOAT; @@ -301,9 +301,9 @@ public: vks::tools::setImageLayout( layoutCmd, - offscreenPass.color.image, - VK_IMAGE_ASPECT_COLOR_BIT, - VK_IMAGE_LAYOUT_UNDEFINED, + offscreenPass.color.image, + VK_IMAGE_ASPECT_COLOR_BIT, + VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL); colorImageView.image = offscreenPass.color.image; @@ -333,7 +333,7 @@ public: vks::tools::setImageLayout( layoutCmd, - offscreenPass.depth.image, + offscreenPass.depth.image, VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL); @@ -477,7 +477,7 @@ public: 1, ©Region); - // Transform framebuffer color attachment back + // Transform framebuffer color attachment back vks::tools::setImageLayout( commandBuffer, offscreenPass.color.image, @@ -573,7 +573,7 @@ public: VK_CHECK_RESULT(vkEndCommandBuffer(drawCmdBuffers[i])); } - } + } void loadAssets() { @@ -624,7 +624,7 @@ public: // 3D scene VK_CHECK_RESULT(vkAllocateDescriptorSets(device, &allocInfo, &descriptorSets.scene)); - // Image descriptor for the cube map + // Image descriptor for the cube map VkDescriptorImageInfo texDescriptor = vks::initializers::descriptorImageInfo( shadowCubeMap.sampler, @@ -718,8 +718,8 @@ public: // Load shaders std::array shaderStages; - shaderStages[0] = loadShader(getAssetPath() + "shaders/shadowmapomni/scene.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/shadowmapomni/scene.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "shadowmapomni/scene.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "shadowmapomni/scene.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VkGraphicsPipelineCreateInfo pipelineCreateInfo = vks::initializers::pipelineCreateInfo(pipelineLayouts.scene, renderPass, 0); pipelineCreateInfo.pInputAssemblyState = &inputAssemblyState; @@ -737,7 +737,7 @@ public: vks::initializers::vertexInputBindingDescription(0, vertexLayout.stride(), VK_VERTEX_INPUT_RATE_VERTEX), }; std::vector vertexInputAttributes = { - vks::initializers::vertexInputAttributeDescription(0, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Position + vks::initializers::vertexInputAttributeDescription(0, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Position vks::initializers::vertexInputAttributeDescription(0, 1, VK_FORMAT_R32G32_SFLOAT, sizeof(float) * 3), // Texture coordinates vks::initializers::vertexInputAttributeDescription(0, 2, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 5), // Color vks::initializers::vertexInputAttributeDescription(0, 3, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 8), // Normal @@ -751,15 +751,15 @@ public: VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.scene)); // Cube map display pipeline - shaderStages[0] = loadShader(getAssetPath() + "shaders/shadowmapomni/cubemapdisplay.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/shadowmapomni/cubemapdisplay.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "shadowmapomni/cubemapdisplay.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "shadowmapomni/cubemapdisplay.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VkPipelineVertexInputStateCreateInfo emptyInputState = vks::initializers::pipelineVertexInputStateCreateInfo(); pipelineCreateInfo.pVertexInputState = &emptyInputState; VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.cubemapDisplay)); // Offscreen pipeline - shaderStages[0] = loadShader(getAssetPath() + "shaders/shadowmapomni/offscreen.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/shadowmapomni/offscreen.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "shadowmapomni/offscreen.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "shadowmapomni/offscreen.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); pipelineCreateInfo.layout = pipelineLayouts.offscreen; pipelineCreateInfo.renderPass = offscreenPass.renderPass; pipelineCreateInfo.pVertexInputState = &vertexInputState; @@ -769,7 +769,7 @@ public: // Prepare and initialize uniform buffer containing shader uniforms void prepareUniformBuffers() { - // Offscreen vertex shader uniform buffer + // Offscreen vertex shader uniform buffer VK_CHECK_RESULT(vulkanDevice->createBuffer( VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, diff --git a/examples/skeletalanimation/skeletalanimation.cpp b/examples/skeletalanimation/skeletalanimation.cpp index 58afe7fb..708cc14d 100644 --- a/examples/skeletalanimation/skeletalanimation.cpp +++ b/examples/skeletalanimation/skeletalanimation.cpp @@ -19,8 +19,8 @@ #include #include -#include -#include +#include +#include #include #include @@ -96,7 +96,7 @@ struct BoneInfo }; }; -class SkinnedMesh +class SkinnedMesh { public: // Bone related stuff @@ -113,7 +113,7 @@ public: // Bone transformations std::vector boneTransforms; - // Modifier for the animation + // Modifier for the animation float animationSpeed = 0.75f; // Currently active animation aiAnimation* pAnimation; @@ -416,7 +416,7 @@ public: ~VulkanExample() { - // Clean up used Vulkan resources + // Clean up used Vulkan resources // Note : Inherited destructor cleans up resources stored in base class vkDestroyPipeline(device, pipelines.skinning, nullptr); vkDestroyPipeline(device, pipelines.texture, nullptr); @@ -434,14 +434,14 @@ public: delete(skinnedMesh); } - // Enable physical device features required for this example + // Enable physical device features required for this example virtual void getEnabledFeatures() { // Enable anisotropic filtering if supported if (deviceFeatures.samplerAnisotropy) { enabledFeatures.samplerAnisotropy = VK_TRUE; } - // Enable texture compression + // Enable texture compression if (deviceFeatures.textureCompressionBC) { enabledFeatures.textureCompressionBC = VK_TRUE; } @@ -510,7 +510,7 @@ public: } } - // Load a mesh based on data read via assimp + // Load a mesh based on data read via assimp void loadMesh() { skinnedMesh = new SkinnedMesh(); @@ -541,12 +541,12 @@ public: // Setup bones // One vertex bone info structure per vertex - uint32_t vertexCount(0); + uint32_t vertexCount(0); for (uint32_t m = 0; m < skinnedMesh->scene->mNumMeshes; m++) { vertexCount += skinnedMesh->scene->mMeshes[m]->mNumVertices; }; skinnedMesh->bones.resize(vertexCount); - // Store global inverse transform matrix of root node + // Store global inverse transform matrix of root node skinnedMesh->globalInverseTransform = skinnedMesh->scene->mRootNode->mTransformation; skinnedMesh->globalInverseTransform.Inverse(); // Load bones (weights and IDs) @@ -750,7 +750,7 @@ public: 1); VK_CHECK_RESULT(vkAllocateDescriptorSets(device, &allocInfo, &descriptorSet)); - + VkDescriptorImageInfo texDescriptor = vks::initializers::descriptorImageInfo( textures.colorMap.sampler, @@ -765,7 +765,7 @@ public: VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 0, &uniformBuffers.mesh.descriptor), - // Binding 1 : Color map + // Binding 1 : Color map vks::initializers::writeDescriptorSet( descriptorSet, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, @@ -790,7 +790,7 @@ public: VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 0, &uniformBuffers.floor.descriptor)); - // Binding 1 : Color map + // Binding 1 : Color map writeDescriptorSets.push_back( vks::initializers::writeDescriptorSet( descriptorSets.floor, @@ -878,11 +878,11 @@ public: // Attribute descriptions // Describes memory layout and shader positions std::vector vertexInputAttributes = { - vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Location 0: Position - vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 1, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 3), // Location 1: Normal - vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 2, VK_FORMAT_R32G32_SFLOAT, sizeof(float) * 6), // Location 2: Texture coordinates - vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 3, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 8), // Location 3: Color - vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 4, VK_FORMAT_R32G32B32A32_SFLOAT, sizeof(float) * 11), // Location 4: Bone weights + vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Location 0: Position + vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 1, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 3), // Location 1: Normal + vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 2, VK_FORMAT_R32G32_SFLOAT, sizeof(float) * 6), // Location 2: Texture coordinates + vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 3, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 8), // Location 3: Color + vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 4, VK_FORMAT_R32G32B32A32_SFLOAT, sizeof(float) * 11), // Location 4: Bone weights vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 5, VK_FORMAT_R32G32B32A32_SINT, sizeof(float) * 15), // Location 5: Bone IDs }; @@ -895,13 +895,13 @@ public: pipelineCreateInfo.pVertexInputState = &vertexInputState; // Skinned mesh rendering pipeline - shaderStages[0] = loadShader(getAssetPath() + "shaders/skeletalanimation/mesh.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/skeletalanimation/mesh.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "skeletalanimation/mesh.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "skeletalanimation/mesh.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.skinning)); // Environment rendering pipeline - shaderStages[0] = loadShader(getAssetPath() + "shaders/skeletalanimation/texture.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/skeletalanimation/texture.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "skeletalanimation/texture.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "skeletalanimation/texture.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.texture)); } diff --git a/examples/specializationconstants/specializationconstants.cpp b/examples/specializationconstants/specializationconstants.cpp index 23924f12..6fd93b4e 100644 --- a/examples/specializationconstants/specializationconstants.cpp +++ b/examples/specializationconstants/specializationconstants.cpp @@ -28,7 +28,7 @@ #define VERTEX_BUFFER_BIND_ID 0 #define ENABLE_VALIDATION false -class VulkanExample: public VulkanExampleBase +class VulkanExample: public VulkanExampleBase { public: struct { @@ -87,7 +87,7 @@ public: vkDestroyPipeline(device, pipelines.phong, nullptr); vkDestroyPipeline(device, pipelines.textured, nullptr); vkDestroyPipeline(device, pipelines.toon, nullptr); - + vkDestroyPipelineLayout(device, pipelineLayout, nullptr); vkDestroyDescriptorSetLayout(device, descriptorSetLayout, nullptr); @@ -97,7 +97,7 @@ public: } void buildCommandBuffers() - { + { VkCommandBufferBeginInfo cmdBufInfo = vks::initializers::commandBufferBeginInfo(); VkClearValue clearValues[2]; @@ -138,7 +138,7 @@ public: viewport.width = (float)width / 3.0f; vkCmdSetViewport(drawCmdBuffers[i], 0, 1, &viewport); vkCmdBindPipeline(drawCmdBuffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, pipelines.phong); - + vkCmdDrawIndexed(drawCmdBuffers[i], models.cube.indexCount, 1, 0, 0, 0); // Center @@ -229,7 +229,7 @@ public: void setupDescriptorSetLayout() { - std::vector setLayoutBindings ={ + std::vector setLayoutBindings ={ vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_VERTEX_BIT, 0), vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_SHADER_STAGE_FRAGMENT_BIT, 1), }; @@ -259,7 +259,7 @@ public: VK_CHECK_RESULT(vkAllocateDescriptorSets(device, &allocInfo, &descriptorSet)); - std::vector writeDescriptorSets = { + std::vector writeDescriptorSets = { vks::initializers::writeDescriptorSet(descriptorSet, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 0, &uniformBuffer.descriptor), vks::initializers::writeDescriptorSet(descriptorSet, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, &textures.colormap.descriptor), }; @@ -371,8 +371,8 @@ public: // Create pipelines // All pipelines will use the same "uber" shader and specialization constants to change branching and parameters of that shader - shaderStages[0] = loadShader(getAssetPath() + "shaders/specializationconstants/uber.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/specializationconstants/uber.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "specializationconstants/uber.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "specializationconstants/uber.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); // Specialization info is assigned is part of the shader stage (modul) and must be set after creating the module and before creating the pipeline shaderStages[1].pSpecializationInfo = &specializationInfo; @@ -451,7 +451,7 @@ public: } } - virtual void windowResized() + virtual void windowResized() { updateUniformBuffers(); } diff --git a/examples/sphericalenvmapping/sphericalenvmapping.cpp b/examples/sphericalenvmapping/sphericalenvmapping.cpp index 8b239ff3..d0a6a154 100644 --- a/examples/sphericalenvmapping/sphericalenvmapping.cpp +++ b/examples/sphericalenvmapping/sphericalenvmapping.cpp @@ -84,7 +84,7 @@ public: ~VulkanExample() { - // Clean up used Vulkan resources + // Clean up used Vulkan resources // Note : Inherited destructor cleans up resources stored in base class vkDestroyPipeline(device, pipeline, nullptr); @@ -332,8 +332,8 @@ public: // Spherical environment rendering pipeline // Load shaders std::array shaderStages; - shaderStages[0] = loadShader(getAssetPath() + "shaders/sphericalenvmapping/sem.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/sphericalenvmapping/sem.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "sphericalenvmapping/sem.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "sphericalenvmapping/sem.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VkGraphicsPipelineCreateInfo pipelineCreateInfo = vks::initializers::pipelineCreateInfo( diff --git a/examples/ssao/ssao.cpp b/examples/ssao/ssao.cpp index dc7c468a..48c18b93 100644 --- a/examples/ssao/ssao.cpp +++ b/examples/ssao/ssao.cpp @@ -117,7 +117,7 @@ public: }; struct FrameBuffer { int32_t width, height; - VkFramebuffer frameBuffer; + VkFramebuffer frameBuffer; VkRenderPass renderPass; void setSize(int32_t w, int32_t h) { @@ -202,7 +202,7 @@ public: // Create a frame buffer attachment void createAttachment( - VkFormat format, + VkFormat format, VkImageUsageFlagBits usage, FrameBufferAttachment *attachment, uint32_t width, @@ -247,7 +247,7 @@ public: memAlloc.memoryTypeIndex = vulkanDevice->getMemoryType(memReqs.memoryTypeBits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); VK_CHECK_RESULT(vkAllocateMemory(device, &memAlloc, nullptr, &attachment->mem)); VK_CHECK_RESULT(vkBindImageMemory(device, attachment->image, attachment->mem, 0)); - + VkImageViewCreateInfo imageView = vks::initializers::imageViewCreateInfo(); imageView.viewType = VK_IMAGE_VIEW_TYPE_2D; imageView.format = format; @@ -281,7 +281,7 @@ public: VkBool32 validDepthFormat = vks::tools::getSupportedDepthFormat(physicalDevice, &attDepthFormat); assert(validDepthFormat); - // G-Buffer + // G-Buffer createAttachment(VK_FORMAT_R32G32B32A32_SFLOAT, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, &frameBuffers.offscreen.position, width, height); // Position + Depth createAttachment(VK_FORMAT_R8G8B8A8_UNORM, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, &frameBuffers.offscreen.normal, width, height); // Normals createAttachment(VK_FORMAT_R8G8B8A8_UNORM, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, &frameBuffers.offscreen.albedo, width, height); // Albedo (color) @@ -376,7 +376,7 @@ public: VK_CHECK_RESULT(vkCreateFramebuffer(device, &fbufCreateInfo, nullptr, &frameBuffers.offscreen.frameBuffer)); } - // SSAO + // SSAO { VkAttachmentDescription attachmentDescription{}; attachmentDescription.format = frameBuffers.ssao.color.format; @@ -433,7 +433,7 @@ public: VK_CHECK_RESULT(vkCreateFramebuffer(device, &fbufCreateInfo, nullptr, &frameBuffers.ssao.frameBuffer)); } - // SSAO Blur + // SSAO Blur { VkAttachmentDescription attachmentDescription{}; attachmentDescription.format = frameBuffers.ssaoBlur.color.format; @@ -699,7 +699,7 @@ public: vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_SHADER_STAGE_FRAGMENT_BIT, 1), // FS Normals vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_SHADER_STAGE_FRAGMENT_BIT, 2), // FS SSAO Noise vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_FRAGMENT_BIT, 3), // FS SSAO Kernel UBO - vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_FRAGMENT_BIT, 4), // FS Params UBO + vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_FRAGMENT_BIT, 4), // FS Params UBO }; setLayoutCreateInfo = vks::initializers::descriptorSetLayoutCreateInfo(setLayoutBindings.data(), static_cast(setLayoutBindings.size())); VK_CHECK_RESULT(vkCreateDescriptorSetLayout(device, &setLayoutCreateInfo, nullptr, &descriptorSetLayouts.ssao)); @@ -745,7 +745,7 @@ public: vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_SHADER_STAGE_FRAGMENT_BIT, 2), // FS Albedo vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_SHADER_STAGE_FRAGMENT_BIT, 3), // FS SSAO vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_SHADER_STAGE_FRAGMENT_BIT, 4), // FS SSAO blurred - vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_FRAGMENT_BIT, 5), // FS Lights UBO + vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_FRAGMENT_BIT, 5), // FS Lights UBO }; setLayoutCreateInfo = vks::initializers::descriptorSetLayoutCreateInfo(setLayoutBindings.data(), static_cast(setLayoutBindings.size())); VK_CHECK_RESULT(vkCreateDescriptorSetLayout(device, &setLayoutCreateInfo, nullptr, &descriptorSetLayouts.composition)); @@ -757,14 +757,14 @@ public: vks::initializers::descriptorImageInfo(colorSampler, frameBuffers.offscreen.position.view, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL), vks::initializers::descriptorImageInfo(colorSampler, frameBuffers.offscreen.normal.view, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL), vks::initializers::descriptorImageInfo(colorSampler, frameBuffers.offscreen.albedo.view, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL), - vks::initializers::descriptorImageInfo(colorSampler, frameBuffers.ssao.color.view, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL), - vks::initializers::descriptorImageInfo(colorSampler, frameBuffers.ssaoBlur.color.view, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL), + vks::initializers::descriptorImageInfo(colorSampler, frameBuffers.ssao.color.view, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL), + vks::initializers::descriptorImageInfo(colorSampler, frameBuffers.ssaoBlur.color.view, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL), }; writeDescriptorSets = { vks::initializers::writeDescriptorSet(descriptorSets.composition, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 0, &imageDescriptors[0]), // FS Sampler Position+Depth vks::initializers::writeDescriptorSet(descriptorSets.composition, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, &imageDescriptors[1]), // FS Sampler Normals vks::initializers::writeDescriptorSet(descriptorSets.composition, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 2, &imageDescriptors[2]), // FS Sampler Albedo - vks::initializers::writeDescriptorSet(descriptorSets.composition, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 3, &imageDescriptors[3]), // FS Sampler SSAO + vks::initializers::writeDescriptorSet(descriptorSets.composition, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 3, &imageDescriptors[3]), // FS Sampler SSAO vks::initializers::writeDescriptorSet(descriptorSets.composition, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 4, &imageDescriptors[4]), // FS Sampler SSAO blurred vks::initializers::writeDescriptorSet(descriptorSets.composition, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 5, &uniformBuffers.ssaoParams.descriptor), // FS SSAO Params UBO }; @@ -789,7 +789,7 @@ public: vks::initializers::vertexInputBindingDescription(0, vertexLayout.stride(), VK_VERTEX_INPUT_RATE_VERTEX), }; const std::vector vertexInputAttributes = { - vks::initializers::vertexInputAttributeDescription(0, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Location 0: Position + vks::initializers::vertexInputAttributeDescription(0, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Location 0: Position vks::initializers::vertexInputAttributeDescription(0, 1, VK_FORMAT_R32G32_SFLOAT, sizeof(float) * 3), // Location 1: UV vks::initializers::vertexInputAttributeDescription(0, 2, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 5), // Location 2: Color vks::initializers::vertexInputAttributeDescription(0, 3, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 8), // Location 3: Normal @@ -815,13 +815,13 @@ public: pipelineCreateInfo.stageCount = static_cast(shaderStages.size()); pipelineCreateInfo.pStages = shaderStages.data(); - shaderStages[0] = loadShader(getAssetPath() + "shaders/ssao/fullscreen.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/ssao/composition.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "ssao/fullscreen.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "ssao/composition.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.composition)); // SSAO Pass { - shaderStages[1] = loadShader(getAssetPath() + "shaders/ssao/ssao.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[1] = loadShader(getShadersPath() + "ssao/ssao.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); // Set constant parameters via specialization constants std::array specializationMapEntries; specializationMapEntries[0] = vks::initializers::specializationMapEntry(0, 0, sizeof(uint32_t)); // SSAO Kernel size @@ -839,7 +839,7 @@ public: // SSAO blur pass { - shaderStages[1] = loadShader(getAssetPath() + "shaders/ssao/blur.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[1] = loadShader(getShadersPath() + "ssao/blur.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); pipelineCreateInfo.renderPass = frameBuffers.ssaoBlur.renderPass; pipelineCreateInfo.layout = pipelineLayouts.ssaoBlur; VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.ssaoBlur)); @@ -847,8 +847,8 @@ public: // Fill G-Buffer { - shaderStages[0] = loadShader(getAssetPath() + "shaders/ssao/gbuffer.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/ssao/gbuffer.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "ssao/gbuffer.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "ssao/gbuffer.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); pipelineCreateInfo.pVertexInputState = &vertexInputState; pipelineCreateInfo.renderPass = frameBuffers.offscreen.renderPass; pipelineCreateInfo.layout = pipelineLayouts.gBuffer; @@ -881,7 +881,7 @@ public: &uniformBuffers.sceneMatrices, sizeof(uboSceneMatrices)); - // SSAO parameters + // SSAO parameters vulkanDevice->createBuffer( VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, diff --git a/examples/stencilbuffer/stencilbuffer.cpp b/examples/stencilbuffer/stencilbuffer.cpp index e46f9579..1a7990c5 100644 --- a/examples/stencilbuffer/stencilbuffer.cpp +++ b/examples/stencilbuffer/stencilbuffer.cpp @@ -149,16 +149,16 @@ public: } void setupDescriptorSetLayout() - { + { std::vector setLayoutBindings = { vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_VERTEX_BIT, 0) }; - VkDescriptorSetLayoutCreateInfo descriptorLayoutInfo = + VkDescriptorSetLayoutCreateInfo descriptorLayoutInfo = vks::initializers::descriptorSetLayoutCreateInfo(setLayoutBindings.data(), 1); VK_CHECK_RESULT(vkCreateDescriptorSetLayout(device, &descriptorLayoutInfo, nullptr, &descriptorSetLayout)); - VkPipelineLayoutCreateInfo pipelineLayoutInfo = + VkPipelineLayoutCreateInfo pipelineLayoutInfo = vks::initializers::pipelineLayoutCreateInfo(&descriptorSetLayout, 1); VK_CHECK_RESULT(vkCreatePipelineLayout(device, &pipelineLayoutInfo, nullptr, &pipelineLayout)); } @@ -215,7 +215,7 @@ public: }; std::vector vertexInputAttributes = { vks::initializers::vertexInputAttributeDescription(0, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Location 0: Position - vks::initializers::vertexInputAttributeDescription(0, 1, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 3), // Location 1: Color + vks::initializers::vertexInputAttributeDescription(0, 1, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 3), // Location 1: Color vks::initializers::vertexInputAttributeDescription(0, 2, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 6) // Location 2: Normal }; @@ -237,8 +237,8 @@ public: pipelineCreateInfo.pStages = shaderStages.data(); // Toon render and stencil fill pass - shaderStages[0] = loadShader(getAssetPath() + "shaders/stencilbuffer/toon.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/stencilbuffer/toon.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "stencilbuffer/toon.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "stencilbuffer/toon.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); rasterizationState.cullMode = VK_CULL_MODE_NONE; @@ -263,8 +263,8 @@ public: depthStencilState.front = depthStencilState.back; depthStencilState.depthTestEnable = VK_FALSE; - shaderStages[0] = loadShader(getAssetPath() + "shaders/stencilbuffer/outline.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/stencilbuffer/outline.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "stencilbuffer/outline.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "stencilbuffer/outline.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.outline)); } diff --git a/examples/subpasses/subpasses.cpp b/examples/subpasses/subpasses.cpp index da1efd76..0b2908af 100644 --- a/examples/subpasses/subpasses.cpp +++ b/examples/subpasses/subpasses.cpp @@ -8,10 +8,10 @@ * Summary: * Implements a deferred rendering setup with a forward transparency pass using sub passes * -* Sub passes allow reading from the previous framebuffer (in the same render pass) at +* Sub passes allow reading from the previous framebuffer (in the same render pass) at * the same pixel position. -* -* This is a feature that was especially designed for tile-based-renderers +* +* This is a feature that was especially designed for tile-based-renderers * (mostly mobile GPUs) and is a new optomization feature in Vulkan for those GPU types. * */ @@ -129,7 +129,7 @@ public: camera.movementSpeed = 5.0f; #ifndef __ANDROID__ camera.rotationSpeed = 0.25f; -#endif +#endif camera.setPosition(glm::vec3(-3.2f, 1.0f, 5.9f)); camera.setRotation(glm::vec3(0.5f, 210.05f, 0.0f)); camera.setPerspective(60.0f, (float)width / (float)height, 0.1f, 256.0f); @@ -139,7 +139,7 @@ public: ~VulkanExample() { - // Clean up used Vulkan resources + // Clean up used Vulkan resources // Note : Inherited destructor cleans up resources stored in base class vkDestroyPipeline(device, pipelines.offscreen, nullptr); vkDestroyPipeline(device, pipelines.composition, nullptr); @@ -164,14 +164,14 @@ public: uniformBuffers.lights.destroy(); } - // Enable physical device features required for this example + // Enable physical device features required for this example virtual void getEnabledFeatures() { // Enable anisotropic filtering if supported if (deviceFeatures.samplerAnisotropy) { enabledFeatures.samplerAnisotropy = VK_TRUE; } - // Enable texture compression + // Enable texture compression if (deviceFeatures.textureCompressionBC) { enabledFeatures.textureCompressionBC = VK_TRUE; } @@ -226,7 +226,7 @@ public: image.samples = VK_SAMPLE_COUNT_1_BIT; image.tiling = VK_IMAGE_TILING_OPTIMAL; // VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT flag is required for input attachments - image.usage = usage | VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT; + image.usage = usage | VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT; image.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; VkMemoryAllocateInfo memAlloc = vks::initializers::memoryAllocateInfo(); @@ -255,8 +255,8 @@ public: // Create color attachments for the G-Buffer components void createGBufferAttachments() { - createAttachment(VK_FORMAT_R16G16B16A16_SFLOAT, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, &attachments.position); // (World space) Positions - createAttachment(VK_FORMAT_R16G16B16A16_SFLOAT, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, &attachments.normal); // (World space) Normals + createAttachment(VK_FORMAT_R16G16B16A16_SFLOAT, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, &attachments.position); // (World space) Positions + createAttachment(VK_FORMAT_R16G16B16A16_SFLOAT, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, &attachments.normal); // (World space) Normals createAttachment(VK_FORMAT_R8G8B8A8_UNORM, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, &attachments.albedo); // Albedo (color) } @@ -317,7 +317,7 @@ public: attachments.width = width; attachments.height = height; - createGBufferAttachments(); + createGBufferAttachments(); std::array attachments{}; // Color attachment @@ -701,7 +701,7 @@ public: VkPipelineDepthStencilStateCreateInfo depthStencilState = vks::initializers::pipelineDepthStencilStateCreateInfo( - VK_TRUE, + VK_TRUE, VK_TRUE, VK_COMPARE_OP_LESS_OR_EQUAL); @@ -755,9 +755,9 @@ public: colorBlendState.pAttachments = blendAttachmentStates.data(); // Offscreen scene rendering pipeline - shaderStages[0] = loadShader(getAssetPath() + "shaders/subpasses/gbuffer.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/subpasses/gbuffer.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); - + shaderStages[0] = loadShader(getShadersPath() + "subpasses/gbuffer.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "subpasses/gbuffer.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.offscreen)); } @@ -767,17 +767,17 @@ public: // Descriptor set layout std::vector setLayoutBindings = { - // Binding 0: Position input attachment + // Binding 0: Position input attachment vks::initializers::descriptorSetLayoutBinding( VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, VK_SHADER_STAGE_FRAGMENT_BIT, 0), - // Binding 1: Normal input attachment + // Binding 1: Normal input attachment vks::initializers::descriptorSetLayoutBinding( VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, VK_SHADER_STAGE_FRAGMENT_BIT, 1), - // Binding 2: Albedo input attachment + // Binding 2: Albedo input attachment vks::initializers::descriptorSetLayoutBinding( VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, VK_SHADER_STAGE_FRAGMENT_BIT, @@ -797,7 +797,7 @@ public: VK_CHECK_RESULT(vkCreateDescriptorSetLayout(device, &descriptorLayout, nullptr, &descriptorSetLayouts.composition)); // Pipeline layout - VkPipelineLayoutCreateInfo pPipelineLayoutCreateInfo = + VkPipelineLayoutCreateInfo pPipelineLayoutCreateInfo = vks::initializers::pipelineLayoutCreateInfo(&descriptorSetLayouts.composition, 1); VK_CHECK_RESULT(vkCreatePipelineLayout(device, &pPipelineLayoutCreateInfo, nullptr, &pipelineLayouts.composition)); @@ -853,9 +853,9 @@ public: vks::initializers::pipelineDynamicStateCreateInfo(dynamicStateEnables.data(), static_cast(dynamicStateEnables.size()), 0); std::array shaderStages; - - shaderStages[0] = loadShader(getAssetPath() + "shaders/subpasses/composition.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/subpasses/composition.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + + shaderStages[0] = loadShader(getShadersPath() + "subpasses/composition.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "subpasses/composition.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); // Use specialization constants to pass number of lights to the shader VkSpecializationMapEntry specializationEntry{}; @@ -937,8 +937,8 @@ public: pipelineCreateInfo.layout = pipelineLayouts.transparent; pipelineCreateInfo.subpass = 2; - shaderStages[0] = loadShader(getAssetPath() + "shaders/subpasses/transparent.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/subpasses/transparent.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "subpasses/transparent.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "subpasses/transparent.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.transparent)); } @@ -995,7 +995,7 @@ public: { light.position = glm::vec4(rndDist(rndGen) * 6.0f, 0.25f + std::abs(rndDist(rndGen)) * 4.0f, rndDist(rndGen) * 6.0f, 1.0f); light.color = colors[rndCol(rndGen)]; - light.radius = 1.0f + std::abs(rndDist(rndGen)); + light.radius = 1.0f + std::abs(rndDist(rndGen)); } } diff --git a/examples/terraintessellation/terraintessellation.cpp b/examples/terraintessellation/terraintessellation.cpp index cc72b704..03e266dd 100644 --- a/examples/terraintessellation/terraintessellation.cpp +++ b/examples/terraintessellation/terraintessellation.cpp @@ -122,7 +122,7 @@ public: ~VulkanExample() { - // Clean up used Vulkan resources + // Clean up used Vulkan resources // Note : Inherited destructor cleans up resources stored in base class vkDestroyPipeline(device, pipelines.terrain, nullptr); if (pipelines.wireframe != VK_NULL_HANDLE) { @@ -153,7 +153,7 @@ public: } } - // Enable physical device features required for this example + // Enable physical device features required for this example virtual void getEnabledFeatures() { // Tessellation shader support is required for this example @@ -175,7 +175,7 @@ public: if (deviceFeatures.samplerAnisotropy) { enabledFeatures.samplerAnisotropy = VK_TRUE; } - // Enable texture compression + // Enable texture compression if (deviceFeatures.textureCompressionBC) { enabledFeatures.textureCompressionBC = VK_TRUE; } @@ -353,7 +353,7 @@ public: // Terrain if (deviceFeatures.pipelineStatisticsQuery) { - // Begin pipeline statistics query + // Begin pipeline statistics query vkCmdBeginQuery(drawCmdBuffers[i], queryPool, 0, 0); } // Render @@ -387,7 +387,7 @@ public: HeightMap(std::string filename, uint32_t patchsize, AAssetManager* assetManager) #else HeightMap(std::string filename, uint32_t patchsize) -#endif +#endif { ktxResult result; ktxTexture* ktxTexture; @@ -416,7 +416,7 @@ public: }; ~HeightMap() - { + { delete[] heightdata; } @@ -431,7 +431,7 @@ public: }; // Generate a terrain quad patch for feeding to the tessellation control shader - void generateTerrain() + void generateTerrain() { struct Vertex { glm::vec3 pos; @@ -444,7 +444,7 @@ public: const uint32_t vertexCount = PATCH_SIZE * PATCH_SIZE; Vertex *vertices = new Vertex[vertexCount]; - + const float wx = 2.0f; const float wy = 2.0f; @@ -469,7 +469,7 @@ public: for (auto x = 0; x < PATCH_SIZE; x++) { for (auto y = 0; y < PATCH_SIZE; y++) - { + { // Get height samples centered around current position float heights[3][3]; for (auto hx = -1; hx <= 1; hx++) @@ -613,7 +613,7 @@ public: { // Binding 0 : Shared Tessellation shader ubo vks::initializers::descriptorSetLayoutBinding( - VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, + VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT | VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, 0), // Binding 1 : Height map @@ -667,9 +667,9 @@ public: { // Binding 0 : Shared tessellation shader ubo vks::initializers::writeDescriptorSet( - descriptorSets.terrain, - VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, - 0, + descriptorSets.terrain, + VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, + 0, &uniformBuffers.terrainTessellation.descriptor), // Binding 1 : Displacement map vks::initializers::writeDescriptorSet( @@ -785,10 +785,10 @@ public: std::array shaderStages; // Terrain tessellation pipeline - shaderStages[0] = loadShader(getAssetPath() + "shaders/terraintessellation/terrain.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/terraintessellation/terrain.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); - shaderStages[2] = loadShader(getAssetPath() + "shaders/terraintessellation/terrain.tesc.spv", VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT); - shaderStages[3] = loadShader(getAssetPath() + "shaders/terraintessellation/terrain.tese.spv", VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT); + shaderStages[0] = loadShader(getShadersPath() + "terraintessellation/terrain.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "terraintessellation/terrain.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[2] = loadShader(getShadersPath() + "terraintessellation/terrain.tesc.spv", VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT); + shaderStages[3] = loadShader(getShadersPath() + "terraintessellation/terrain.tese.spv", VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT); VkGraphicsPipelineCreateInfo pipelineCreateInfo = vks::initializers::pipelineCreateInfo(pipelineLayouts.terrain, renderPass, 0); @@ -824,8 +824,8 @@ public: depthStencilState.depthWriteEnable = VK_FALSE; pipelineCreateInfo.stageCount = 2; pipelineCreateInfo.layout = pipelineLayouts.skysphere; - shaderStages[0] = loadShader(getAssetPath() + "shaders/terraintessellation/skysphere.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/terraintessellation/skysphere.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "terraintessellation/skysphere.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "terraintessellation/skysphere.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.skysphere)); } diff --git a/examples/tessellation/tessellation.cpp b/examples/tessellation/tessellation.cpp index 6da021c8..45346d6c 100644 --- a/examples/tessellation/tessellation.cpp +++ b/examples/tessellation/tessellation.cpp @@ -59,7 +59,7 @@ public: struct { vks::Buffer tessControl, tessEval; } uniformBuffers; - + struct UBOTessControl { float tessLevel = 3.0f; } uboTessControl; @@ -76,7 +76,7 @@ public: VkPipeline solidPassThrough; VkPipeline wirePassThrough = VK_NULL_HANDLE; } pipelines; - + VkPipelineLayout pipelineLayout; VkDescriptorSet descriptorSet; VkDescriptorSetLayout descriptorSetLayout; @@ -93,7 +93,7 @@ public: ~VulkanExample() { - // Clean up used Vulkan resources + // Clean up used Vulkan resources // Note : Inherited destructor cleans up resources stored in base class vkDestroyPipeline(device, pipelines.solid, nullptr); if (pipelines.wire != VK_NULL_HANDLE) { @@ -113,7 +113,7 @@ public: textures.colorMap.destroy(); } - // Enable physical device features required for this example + // Enable physical device features required for this example virtual void getEnabledFeatures() { // Example uses tessellation shaders @@ -317,7 +317,7 @@ public: vks::initializers::writeDescriptorSet(descriptorSet, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 0, &uniformBuffers.tessControl.descriptor), // Binding 1 : Tessellation evaluation shader ubo vks::initializers::writeDescriptorSet(descriptorSet, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 1, &uniformBuffers.tessEval.descriptor), - // Binding 2 : Color map + // Binding 2 : Color map vks::initializers::writeDescriptorSet(descriptorSet, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 2, &textures.colorMap.descriptor) }; vkUpdateDescriptorSets(device, writeDescriptorSets.size(), writeDescriptorSets.data(), 0, NULL); @@ -380,10 +380,10 @@ public: // Load shaders std::array shaderStages; - shaderStages[0] = loadShader(getAssetPath() + "shaders/tessellation/base.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/tessellation/base.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); - shaderStages[2] = loadShader(getAssetPath() + "shaders/tessellation/pntriangles.tesc.spv", VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT); - shaderStages[3] = loadShader(getAssetPath() + "shaders/tessellation/pntriangles.tese.spv", VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT); + shaderStages[0] = loadShader(getShadersPath() + "tessellation/base.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "tessellation/base.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[2] = loadShader(getShadersPath() + "tessellation/pntriangles.tesc.spv", VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT); + shaderStages[3] = loadShader(getShadersPath() + "tessellation/pntriangles.tese.spv", VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT); VkGraphicsPipelineCreateInfo pipelineCreateInfo = vks::initializers::pipelineCreateInfo( @@ -415,8 +415,8 @@ public: // Pass through pipelines // Load pass through tessellation shaders (Vert and frag are reused) - shaderStages[2] = loadShader(getAssetPath() + "shaders/tessellation/passthrough.tesc.spv", VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT); - shaderStages[3] = loadShader(getAssetPath() + "shaders/tessellation/passthrough.tese.spv", VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT); + shaderStages[2] = loadShader(getShadersPath() + "tessellation/passthrough.tesc.spv", VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT); + shaderStages[3] = loadShader(getShadersPath() + "tessellation/passthrough.tese.spv", VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT); // Solid rasterizationState.polygonMode = VK_POLYGON_MODE_FILL; @@ -483,7 +483,7 @@ public: preparePipelines(); setupDescriptorPool(); setupDescriptorSet(); - buildCommandBuffers(); + buildCommandBuffers(); prepared = true; } diff --git a/examples/textoverlay/textoverlay.cpp b/examples/textoverlay/textoverlay.cpp index b716daec..e8a386fc 100644 --- a/examples/textoverlay/textoverlay.cpp +++ b/examples/textoverlay/textoverlay.cpp @@ -232,7 +232,7 @@ public: VkCommandBuffer copyCmd; cmdBufAllocateInfo.commandBufferCount = 1; VK_CHECK_RESULT(vkAllocateCommandBuffers(vulkanDevice->logicalDevice, &cmdBufAllocateInfo, ©Cmd)); - + VkCommandBufferBeginInfo cmdBufInfo = vks::initializers::commandBufferBeginInfo(); VK_CHECK_RESULT(vkBeginCommandBuffer(copyCmd, &cmdBufInfo)); @@ -391,7 +391,7 @@ public: vks::initializers::vertexInputAttributeDescription(0, 0, VK_FORMAT_R32G32_SFLOAT, 0), // Location 0: Position vks::initializers::vertexInputAttributeDescription(1, 1, VK_FORMAT_R32G32_SFLOAT, sizeof(glm::vec2)), // Location 1: UV }; - + VkPipelineVertexInputStateCreateInfo vertexInputState = vks::initializers::pipelineVertexInputStateCreateInfo(); vertexInputState.vertexBindingDescriptionCount = static_cast(vertexInputBindings.size()); vertexInputState.pVertexBindingDescriptions = vertexInputBindings.data(); @@ -493,7 +493,7 @@ public: VK_CHECK_RESULT(vkCreateRenderPass(vulkanDevice->logicalDevice, &renderPassInfo, nullptr, &renderPass)); } - // Map buffer + // Map buffer void beginTextUpdate() { VK_CHECK_RESULT(vkMapMemory(vulkanDevice->logicalDevice, memory, 0, VK_WHOLE_SIZE, 0, (void **)&mapped)); @@ -655,7 +655,7 @@ public: VkPipelineLayout pipelineLayout; VkPipeline pipeline; - + VkDescriptorSetLayout descriptorSetLayout; VkDescriptorSet descriptorSet; @@ -739,7 +739,7 @@ public: textOverlay->addText(ss.str(), 5.0f, 25.0f, TextOverlay::alignLeft); textOverlay->addText(deviceProperties.deviceName, 5.0f, 45.0f, TextOverlay::alignLeft); - + // Display projected cube vertices for (int32_t x = -1; x <= 1; x += 2) { @@ -838,7 +838,7 @@ public: vks::initializers::vertexInputBindingDescription(0, vertexLayout.stride(), VK_VERTEX_INPUT_RATE_VERTEX), }; std::vector vertexInputAttributes = { - vks::initializers::vertexInputAttributeDescription(0, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Location 0: Position + vks::initializers::vertexInputAttributeDescription(0, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Location 0: Position vks::initializers::vertexInputAttributeDescription(0, 1, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 3), // Location 1: Normal vks::initializers::vertexInputAttributeDescription(0, 2, VK_FORMAT_R32G32_SFLOAT, sizeof(float) * 6), // Location 2: Texture coordinates vks::initializers::vertexInputAttributeDescription(0, 3, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 8), // Location 3: Color @@ -851,8 +851,8 @@ public: // Shaders std::array shaderStages; - shaderStages[0] = loadShader(getAssetPath() + "shaders/textoverlay/mesh.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/textoverlay/mesh.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "textoverlay/mesh.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "textoverlay/mesh.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VkGraphicsPipelineCreateInfo pipelineCreateInfo = vks::initializers::pipelineCreateInfo(pipelineLayout, renderPass, 0); pipelineCreateInfo.pVertexInputState = &vertexInputState; @@ -896,8 +896,8 @@ public: { // Load the text rendering shaders std::vector shaderStages; - shaderStages.push_back(loadShader(getAssetPath() + "shaders/textoverlay/text.vert.spv", VK_SHADER_STAGE_VERTEX_BIT)); - shaderStages.push_back(loadShader(getAssetPath() + "shaders/textoverlay/text.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT)); + shaderStages.push_back(loadShader(getShadersPath() + "textoverlay/text.vert.spv", VK_SHADER_STAGE_VERTEX_BIT)); + shaderStages.push_back(loadShader(getShadersPath() + "textoverlay/text.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT)); textOverlay = new TextOverlay( vulkanDevice, diff --git a/examples/texture/texture.cpp b/examples/texture/texture.cpp index d99f4f69..75c76a03 100644 --- a/examples/texture/texture.cpp +++ b/examples/texture/texture.cpp @@ -741,8 +741,8 @@ public: // Load shaders std::array shaderStages; - shaderStages[0] = loadShader(getAssetPath() + "shaders/texture/texture.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/texture/texture.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "texture/texture.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "texture/texture.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VkGraphicsPipelineCreateInfo pipelineCreateInfo = vks::initializers::pipelineCreateInfo( diff --git a/examples/texture3d/texture3d.cpp b/examples/texture3d/texture3d.cpp index 374bbf23..ceff37e3 100644 --- a/examples/texture3d/texture3d.cpp +++ b/examples/texture3d/texture3d.cpp @@ -42,18 +42,18 @@ class PerlinNoise { private: uint32_t permutations[512]; - T fade(T t) - { - return t * t * t * (t * (t * (T)6 - (T)15) + (T)10); + T fade(T t) + { + return t * t * t * (t * (t * (T)6 - (T)15) + (T)10); } - T lerp(T t, T a, T b) - { - return a + t * (b - a); + T lerp(T t, T a, T b) + { + return a + t * (b - a); } - T grad(int hash, T x, T y, T z) + T grad(int hash, T x, T y, T z) { // Convert LO 4 bits of hash code into 12 gradient directions - int h = hash & 15; + int h = hash & 15; T u = h < 8 ? x : y; T v = h < 4 ? y : h == 12 || h == 14 ? x : z; return ((h & 1) == 0 ? u : -u) + ((h & 2) == 0 ? v : -v); @@ -71,7 +71,7 @@ public: for (uint32_t i = 0; i < 256; i++) { permutations[i] = permutations[256 + i] = plookup[i]; - } + } } T noise(T x, T y, T z) { @@ -98,7 +98,7 @@ public: uint32_t BB = permutations[B + 1] + Z; // And add blended results for 8 corners of the cube; - T res = lerp(w, lerp(v, + T res = lerp(w, lerp(v, lerp(u, grad(permutations[AA], x, y, z), grad(permutations[BA], x - 1, y, z)), lerp(u, grad(permutations[AB], x, y - 1, z), grad(permutations[BB], x - 1, y - 1, z))), lerp(v, lerp(u, grad(permutations[AA + 1], x, y, z - 1), grad(permutations[BA + 1], x - 1, y, z - 1)), lerp(u, grad(permutations[AB + 1], x, y - 1, z - 1), grad(permutations[BB + 1], x - 1, y - 1, z - 1)))); return res; @@ -111,13 +111,13 @@ class FractalNoise { private: PerlinNoise perlinNoise; - uint32_t octaves; + uint32_t octaves; T frequency; T amplitude; T persistence; public: - FractalNoise(const PerlinNoise &perlinNoise) + FractalNoise(const PerlinNoise &perlinNoise) { this->perlinNoise = perlinNoise; octaves = 6; @@ -129,7 +129,7 @@ public: T sum = 0; T frequency = (T)1; T amplitude = (T)1; - T max = (T)0; + T max = (T)0; for (uint32_t i = 0; i < octaves; i++) { sum += perlinNoise.noise(x * frequency, y * frequency, z * frequency) * amplitude; @@ -203,7 +203,7 @@ public: ~VulkanExample() { - // Clean up used Vulkan resources + // Clean up used Vulkan resources // Note : Inherited destructor cleans up resources stored in base class destroyTextureImage(texture); @@ -365,7 +365,7 @@ public: VkBufferCreateInfo bufferCreateInfo = vks::initializers::bufferCreateInfo(); bufferCreateInfo.size = texMemSize; bufferCreateInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT; - bufferCreateInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE; + bufferCreateInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE; VK_CHECK_RESULT(vkCreateBuffer(device, &bufferCreateInfo, nullptr, &stagingBuffer)); // Allocate host visible memory for data upload @@ -418,7 +418,7 @@ public: stagingBuffer, texture.image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, - 1, + 1, &bufferCopyRegion); // Change texture image layout to shader read after all mip levels have been copied @@ -552,8 +552,8 @@ public: vertices.inputBinding.resize(1); vertices.inputBinding[0] = vks::initializers::vertexInputBindingDescription( - VERTEX_BUFFER_BIND_ID, - sizeof(Vertex), + VERTEX_BUFFER_BIND_ID, + sizeof(Vertex), VK_VERTEX_INPUT_RATE_VERTEX); // Attribute descriptions @@ -565,7 +565,7 @@ public: VERTEX_BUFFER_BIND_ID, 0, VK_FORMAT_R32G32B32_SFLOAT, - offsetof(Vertex, pos)); + offsetof(Vertex, pos)); // Location 1 : Texture coordinates vertices.inputAttributes[1] = vks::initializers::vertexInputAttributeDescription( @@ -597,7 +597,7 @@ public: vks::initializers::descriptorPoolSize(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1) }; - VkDescriptorPoolCreateInfo descriptorPoolInfo = + VkDescriptorPoolCreateInfo descriptorPoolInfo = vks::initializers::descriptorPoolCreateInfo( static_cast(poolSizes.size()), poolSizes.data(), @@ -608,21 +608,21 @@ public: void setupDescriptorSetLayout() { - std::vector setLayoutBindings = + std::vector setLayoutBindings = { // Binding 0 : Vertex shader uniform buffer vks::initializers::descriptorSetLayoutBinding( - VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, - VK_SHADER_STAGE_VERTEX_BIT, + VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, + VK_SHADER_STAGE_VERTEX_BIT, 0), // Binding 1 : Fragment shader image sampler vks::initializers::descriptorSetLayoutBinding( - VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, - VK_SHADER_STAGE_FRAGMENT_BIT, + VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, + VK_SHADER_STAGE_FRAGMENT_BIT, 1) }; - VkDescriptorSetLayoutCreateInfo descriptorLayout = + VkDescriptorSetLayoutCreateInfo descriptorLayout = vks::initializers::descriptorSetLayoutCreateInfo( setLayoutBindings.data(), static_cast(setLayoutBindings.size())); @@ -639,7 +639,7 @@ public: void setupDescriptorSet() { - VkDescriptorSetAllocateInfo allocInfo = + VkDescriptorSetAllocateInfo allocInfo = vks::initializers::descriptorSetAllocateInfo( descriptorPool, &descriptorSetLayout, @@ -651,15 +651,15 @@ public: { // Binding 0 : Vertex shader uniform buffer vks::initializers::writeDescriptorSet( - descriptorSet, - VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, - 0, + descriptorSet, + VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, + 0, &uniformBufferVS.descriptor), // Binding 1 : Fragment shader texture sampler vks::initializers::writeDescriptorSet( - descriptorSet, - VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, - 1, + descriptorSet, + VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, + 1, &texture.descriptor) }; @@ -688,7 +688,7 @@ public: VkPipelineColorBlendStateCreateInfo colorBlendState = vks::initializers::pipelineColorBlendStateCreateInfo( - 1, + 1, &blendAttachmentState); VkPipelineDepthStencilStateCreateInfo depthStencilState = @@ -718,8 +718,8 @@ public: // Load shaders std::array shaderStages; - shaderStages[0] = loadShader(getAssetPath() + "shaders/texture3d/texture3d.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/texture3d/texture3d.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "texture3d/texture3d.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "texture3d/texture3d.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VkGraphicsPipelineCreateInfo pipelineCreateInfo = vks::initializers::pipelineCreateInfo( diff --git a/examples/texturearray/texturearray.cpp b/examples/texturearray/texturearray.cpp index c672d2d8..c77f56f4 100644 --- a/examples/texturearray/texturearray.cpp +++ b/examples/texturearray/texturearray.cpp @@ -488,8 +488,8 @@ public: // Instacing pipeline std::array shaderStages; - shaderStages[0] = loadShader(getAssetPath() + "shaders/texturearray/instancing.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/texturearray/instancing.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "texturearray/instancing.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "texturearray/instancing.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VkGraphicsPipelineCreateInfo pipelineCI = vks::initializers::pipelineCreateInfo(pipelineLayout, renderPass, 0); pipelineCI.pVertexInputState = &vertexInputStateCI; diff --git a/examples/texturecubemap/texturecubemap.cpp b/examples/texturecubemap/texturecubemap.cpp index 6ae3eb24..e32cc283 100644 --- a/examples/texturecubemap/texturecubemap.cpp +++ b/examples/texturecubemap/texturecubemap.cpp @@ -603,13 +603,13 @@ public: pipelineCreateInfo.pVertexInputState = &vertexInputState; // Skybox pipeline (background cube) - shaderStages[0] = loadShader(getAssetPath() + "shaders/texturecubemap/skybox.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/texturecubemap/skybox.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "texturecubemap/skybox.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "texturecubemap/skybox.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.skybox)); // Cube map reflect pipeline - shaderStages[0] = loadShader(getAssetPath() + "shaders/texturecubemap/reflect.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/texturecubemap/reflect.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "texturecubemap/reflect.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "texturecubemap/reflect.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); // Enable depth test and write depthStencilState.depthWriteEnable = VK_TRUE; depthStencilState.depthTestEnable = VK_TRUE; diff --git a/examples/texturemipmapgen/texturemipmapgen.cpp b/examples/texturemipmapgen/texturemipmapgen.cpp index e0e12140..bac70fc2 100644 --- a/examples/texturemipmapgen/texturemipmapgen.cpp +++ b/examples/texturemipmapgen/texturemipmapgen.cpp @@ -140,7 +140,7 @@ public: vks::tools::exitFatal("Could not load texture from " + filename + "\n\nThe file may be part of the additional asset pack.\n\nRun \"download_assets.py\" in the repository root to download the latest version.", -1); } result = ktxTexture_CreateFromNamedFile(filename.c_str(), KTX_TEXTURE_CREATE_LOAD_IMAGE_DATA_BIT, &ktxTexture); -#endif +#endif assert(result == KTX_SUCCESS); texture.width = ktxTexture->baseWidth; @@ -171,7 +171,7 @@ public: bufferCreateInfo.size = ktxTextureSize; // This buffer is used as a transfer source for the buffer copy bufferCreateInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT; - bufferCreateInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE; + bufferCreateInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE; VK_CHECK_RESULT(vkCreateBuffer(device, &bufferCreateInfo, nullptr, &stagingBuffer)); vkGetBufferMemoryRequirements(device, stagingBuffer, &memReqs); memAllocInfo.allocationSize = memReqs.size; @@ -263,7 +263,7 @@ public: // Copy down mips from n-1 to n for (int32_t i = 1; i < texture.mipLevels; i++) { - VkImageBlit imageBlit{}; + VkImageBlit imageBlit{}; // Source imageBlit.srcSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; @@ -468,7 +468,7 @@ public: vertices.bindingDescriptions.resize(1); vertices.bindingDescriptions[0] = vks::initializers::vertexInputBindingDescription( - VERTEX_BUFFER_BIND_ID, + VERTEX_BUFFER_BIND_ID, vertexLayout.stride(), VK_VERTEX_INPUT_RATE_VERTEX); @@ -481,7 +481,7 @@ public: VERTEX_BUFFER_BIND_ID, 0, VK_FORMAT_R32G32B32_SFLOAT, - 0); + 0); // Location 1 : Texture coordinates vertices.attributeDescriptions[1] = vks::initializers::vertexInputAttributeDescription( @@ -513,7 +513,7 @@ public: vks::initializers::descriptorPoolSize(VK_DESCRIPTOR_TYPE_SAMPLER, 3), // 3 samplers (array) }; - VkDescriptorPoolCreateInfo descriptorPoolInfo = + VkDescriptorPoolCreateInfo descriptorPoolInfo = vks::initializers::descriptorPoolCreateInfo( static_cast(poolSizes.size()), poolSizes.data(), @@ -545,7 +545,7 @@ public: 2, 3)); - VkDescriptorSetLayoutCreateInfo descriptorLayout = + VkDescriptorSetLayoutCreateInfo descriptorLayout = vks::initializers::descriptorSetLayoutCreateInfo( setLayoutBindings.data(), static_cast(setLayoutBindings.size())); @@ -614,7 +614,7 @@ public: VkPipelineColorBlendStateCreateInfo colorBlendState = vks::initializers::pipelineColorBlendStateCreateInfo( - 1, + 1, &blendAttachmentState); VkPipelineDepthStencilStateCreateInfo depthStencilState = @@ -644,8 +644,8 @@ public: // Load shaders std::array shaderStages; - shaderStages[0] = loadShader(getAssetPath() + "shaders/texturemipmapgen/texture.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/texturemipmapgen/texture.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "texturemipmapgen/texture.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "texturemipmapgen/texture.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VkGraphicsPipelineCreateInfo pipelineCreateInfo = vks::initializers::pipelineCreateInfo( diff --git a/examples/texturesparseresidency/texturesparseresidency.cpp b/examples/texturesparseresidency/texturesparseresidency.cpp index a1bcb26c..7958176a 100644 --- a/examples/texturesparseresidency/texturesparseresidency.cpp +++ b/examples/texturesparseresidency/texturesparseresidency.cpp @@ -7,7 +7,7 @@ */ /* -todos: +todos: - check sparse binding support on queue - residencyNonResidentStrict - meta data @@ -48,14 +48,14 @@ struct Vertex { // Virtual texture page as a part of the partially resident texture // Contains memory bindings, offsets and status information struct VirtualTexturePage -{ +{ VkOffset3D offset; VkExtent3D extent; VkSparseImageMemoryBind imageMemoryBind; // Sparse image memory bind for this page VkDeviceSize size; // Page (memory) size in bytes uint32_t mipLevel; // Mip level that this page belongs to uint32_t layer; // Array layer that this page belongs to - uint32_t index; + uint32_t index; VirtualTexturePage() { @@ -101,7 +101,7 @@ struct VirtualTexturePage } }; -// Virtual texture object containing all pages +// Virtual texture object containing all pages struct VirtualTexture { VkDevice device; @@ -110,10 +110,10 @@ struct VirtualTexture std::vector pages; // Contains all virtual pages of the texture std::vector sparseImageMemoryBinds; // Sparse image memory bindings of all memory-backed virtual tables std::vector opaqueMemoryBinds; // Sparse ópaque memory bindings for the mip tail (if present) - VkSparseImageMemoryBindInfo imageMemoryBindInfo; // Sparse image memory bind info + VkSparseImageMemoryBindInfo imageMemoryBindInfo; // Sparse image memory bind info VkSparseImageOpaqueMemoryBindInfo opaqueMemoryBindInfo; // Sparse image opaque memory bind info (mip tail) uint32_t mipTailStart; // First mip level in mip tail - + VirtualTexturePage* addPage(VkOffset3D offset, VkExtent3D extent, const VkDeviceSize size, const uint32_t mipLevel, uint32_t layer) { VirtualTexturePage newPage; @@ -240,14 +240,14 @@ public: camera.setRotation(glm::vec3(-8.5f, -200.0f, 0.0f)); camera.setPerspective(60.0f, (float)width / (float)height, 0.1f, 1024.0f); settings.overlay = true; - // Device features to be enabled for this example + // Device features to be enabled for this example enabledFeatures.shaderResourceResidency = VK_TRUE; enabledFeatures.shaderResourceMinLod = VK_TRUE; } ~VulkanExample() { - // Clean up used Vulkan resources + // Clean up used Vulkan resources // Note : Inherited destructor cleans up resources stored in base class if (heightMap) @@ -290,7 +290,7 @@ public: texture.device = vulkanDevice->logicalDevice; texture.width = width; texture.height = height; - texture.mipLevels = floor(log2(std::max(width, height))) + 1; + texture.mipLevels = floor(log2(std::max(width, height))) + 1; texture.layerCount = layerCount; texture.format = format; @@ -394,7 +394,7 @@ public: //todo:multiple reqs texture.mipTailStart = reqs.imageMipTailFirstLod; } - + lastFilledMip = texture.mipTailStart - 1; // Get sparse image requirements for the color aspect @@ -421,7 +421,7 @@ public: memoryTypeIndex = vulkanDevice->getMemoryType(sparseImageMemoryReqs.memoryTypeBits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); // Get sparse bindings - uint32_t sparseBindsCount = static_cast(sparseImageMemoryReqs.size / sparseImageMemoryReqs.alignment); + uint32_t sparseBindsCount = static_cast(sparseImageMemoryReqs.size / sparseImageMemoryReqs.alignment); std::vector sparseMemoryBinds(sparseBindsCount); // Check if the format has a single mip tail for all layers or one mip tail for each layer @@ -460,7 +460,7 @@ public: { for (uint32_t x = 0; x < sparseBindCounts.x; x++) { - // Offset + // Offset VkOffset3D offset; offset.x = x * imageGranularity.width; offset.y = y * imageGranularity.height; @@ -683,8 +683,8 @@ public: vertices.bindingDescriptions.resize(1); vertices.bindingDescriptions[0] = vks::initializers::vertexInputBindingDescription( - VERTEX_BUFFER_BIND_ID, - sizeof(Vertex), + VERTEX_BUFFER_BIND_ID, + sizeof(Vertex), VK_VERTEX_INPUT_RATE_VERTEX); // Attribute descriptions @@ -696,7 +696,7 @@ public: VERTEX_BUFFER_BIND_ID, 0, VK_FORMAT_R32G32B32_SFLOAT, - offsetof(Vertex, pos)); + offsetof(Vertex, pos)); // Location 1 : Vertex normal vertices.attributeDescriptions[1] = vks::initializers::vertexInputAttributeDescription( @@ -728,7 +728,7 @@ public: vks::initializers::descriptorPoolSize(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1) }; - VkDescriptorPoolCreateInfo descriptorPoolInfo = + VkDescriptorPoolCreateInfo descriptorPoolInfo = vks::initializers::descriptorPoolCreateInfo( static_cast(poolSizes.size()), poolSizes.data(), @@ -739,21 +739,21 @@ public: void setupDescriptorSetLayout() { - std::vector setLayoutBindings = + std::vector setLayoutBindings = { // Binding 0 : Vertex shader uniform buffer vks::initializers::descriptorSetLayoutBinding( - VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, - VK_SHADER_STAGE_VERTEX_BIT, + VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, + VK_SHADER_STAGE_VERTEX_BIT, 0), // Binding 1 : Fragment shader image sampler vks::initializers::descriptorSetLayoutBinding( - VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, - VK_SHADER_STAGE_FRAGMENT_BIT, + VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, + VK_SHADER_STAGE_FRAGMENT_BIT, 1) }; - VkDescriptorSetLayoutCreateInfo descriptorLayout = + VkDescriptorSetLayoutCreateInfo descriptorLayout = vks::initializers::descriptorSetLayoutCreateInfo( setLayoutBindings.data(), static_cast(setLayoutBindings.size())); @@ -770,7 +770,7 @@ public: void setupDescriptorSet() { - VkDescriptorSetAllocateInfo allocInfo = + VkDescriptorSetAllocateInfo allocInfo = vks::initializers::descriptorSetAllocateInfo( descriptorPool, &descriptorSetLayout, @@ -782,15 +782,15 @@ public: { // Binding 0 : Vertex shader uniform buffer vks::initializers::writeDescriptorSet( - descriptorSet, - VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, - 0, + descriptorSet, + VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, + 0, &uniformBufferVS.descriptor), // Binding 1 : Fragment shader texture sampler vks::initializers::writeDescriptorSet( - descriptorSet, - VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, - 1, + descriptorSet, + VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, + 1, &texture.descriptor) }; @@ -819,7 +819,7 @@ public: VkPipelineColorBlendStateCreateInfo colorBlendState = vks::initializers::pipelineColorBlendStateCreateInfo( - 1, + 1, &blendAttachmentState); VkPipelineDepthStencilStateCreateInfo depthStencilState = @@ -849,8 +849,8 @@ public: // Load shaders std::array shaderStages; - shaderStages[0] = loadShader(getAssetPath() + "shaders/texturesparseresidency/sparseresidency.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/texturesparseresidency/sparseresidency.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "texturesparseresidency/sparseresidency.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "texturesparseresidency/sparseresidency.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VkGraphicsPipelineCreateInfo pipelineCreateInfo = vks::initializers::pipelineCreateInfo( diff --git a/examples/triangle/triangle.cpp b/examples/triangle/triangle.cpp index 924eba74..2c42cb70 100644 --- a/examples/triangle/triangle.cpp +++ b/examples/triangle/triangle.cpp @@ -79,7 +79,7 @@ public: glm::mat4 viewMatrix; } uboVS; - // The pipeline layout is used by a pipline to access the descriptor sets + // The pipeline layout is used by a pipline to access the descriptor sets // It defines interface (without binding any actual data) between the shader stages used by the pipeline and the shader resources // A pipeline layout can be shared among multiple pipelines as long as their interfaces match VkPipelineLayout pipelineLayout; @@ -124,7 +124,7 @@ public: ~VulkanExample() { - // Clean up used Vulkan resources + // Clean up used Vulkan resources // Note: Inherited destructor cleans up resources stored in base class vkDestroyPipeline(device, pipeline, nullptr); @@ -152,7 +152,7 @@ public: // This function is used to request a device memory type that supports all the property flags we request (e.g. device local, host visibile) // Upon success it will return the index of the memory type that fits our requestes memory properties // This is necessary as implementations can offer an arbitrary number of memory types with different - // memory properties. + // memory properties. // You can check http://vulkan.gpuinfo.org/ for details on different memory configurations uint32_t getMemoryTypeIndex(uint32_t typeBits, VkMemoryPropertyFlags properties) { @@ -209,7 +209,7 @@ public: cmdBufAllocateInfo.commandPool = cmdPool; cmdBufAllocateInfo.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY; cmdBufAllocateInfo.commandBufferCount = 1; - + VK_CHECK_RESULT(vkAllocateCommandBuffers(device, &cmdBufAllocateInfo, &cmdBuffer)); // If requested, also start the new command buffer @@ -276,7 +276,7 @@ public: renderPassBeginInfo.renderArea.extent.height = height; renderPassBeginInfo.clearValueCount = 2; renderPassBeginInfo.pClearValues = clearValues; - + for (int32_t i = 0; i < drawCmdBuffers.size(); ++i) { // Set target frame buffer @@ -323,7 +323,7 @@ public: vkCmdEndRenderPass(drawCmdBuffers[i]); - // Ending the render pass will add an implicit barrier transitioning the frame buffer color attachment to + // Ending the render pass will add an implicit barrier transitioning the frame buffer color attachment to // VK_IMAGE_LAYOUT_PRESENT_SRC_KHR for presenting it to the windowing system VK_CHECK_RESULT(vkEndCommandBuffer(drawCmdBuffers[i])); @@ -374,7 +374,7 @@ public: // what should be done a real-world application, where you should allocate large chunkgs of memory at once isntead. // Setup vertices - std::vector vertexBuffer = + std::vector vertexBuffer = { { { 1.0f, 1.0f, 0.0f }, { 1.0f, 0.0f, 0.0f } }, { { -1.0f, 1.0f, 0.0f }, { 0.0f, 1.0f, 0.0f } }, @@ -395,7 +395,7 @@ public: if (useStagingBuffers) { - // Static data like vertex and index buffer should be stored on the device memory + // Static data like vertex and index buffer should be stored on the device memory // for optimal (and fastest) access by the GPU // // To achieve this we use so-called "staging buffers" : @@ -695,7 +695,7 @@ public: } // Render pass setup - // Render passes are a new concept in Vulkan. They describe the attachments used during rendering and may contain multiple subpasses with attachment dependencies + // Render passes are a new concept in Vulkan. They describe the attachments used during rendering and may contain multiple subpasses with attachment dependencies // This allows the driver to know up-front what the rendering will look like and is a good opportunity to optimize especially on tile-based renderers (with multiple subpasses) // Using sub pass dependencies also adds implicit layout transitions for the attachment used, so we don't need to add explicit image memory barriers to transform them // Note: Override of virtual function in the base class and called from within VulkanExampleBase::prepare @@ -715,7 +715,7 @@ public: attachments[0].stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE; // Same for store attachments[0].initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; // Layout at render pass start. Initial doesn't matter, so we use undefined attachments[0].finalLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR; // Layout to which the attachment is transitioned when the render pass is finished - // As we want to present the color buffer to the swapchain, we transition to PRESENT_KHR + // As we want to present the color buffer to the swapchain, we transition to PRESENT_KHR // Depth attachment attachments[1].format = depthFormat; // A proper depth format is selected in the example base attachments[1].samples = VK_SAMPLE_COUNT_1_BIT; @@ -926,7 +926,7 @@ public: multisampleState.rasterizationSamples = VK_SAMPLE_COUNT_1_BIT; multisampleState.pSampleMask = nullptr; - // Vertex input descriptions + // Vertex input descriptions // Specifies the vertex input parameters for a pipeline // Vertex input binding @@ -970,7 +970,7 @@ public: // Set pipeline stage for this shader shaderStages[0].stage = VK_SHADER_STAGE_VERTEX_BIT; // Load binary SPIR-V shader - shaderStages[0].module = loadSPIRVShader(getAssetPath() + "shaders/triangle/triangle.vert.spv"); + shaderStages[0].module = loadSPIRVShader(getShadersPath() + "triangle/triangle.vert.spv"); // Main entry point for the shader shaderStages[0].pName = "main"; assert(shaderStages[0].module != VK_NULL_HANDLE); @@ -980,7 +980,7 @@ public: // Set pipeline stage for this shader shaderStages[1].stage = VK_SHADER_STAGE_FRAGMENT_BIT; // Load binary SPIR-V shader - shaderStages[1].module = loadSPIRVShader(getAssetPath() + "shaders/triangle/triangle.frag.spv"); + shaderStages[1].module = loadSPIRVShader(getShadersPath() + "triangle/triangle.frag.spv"); // Main entry point for the shader shaderStages[1].pName = "main"; assert(shaderStages[1].module != VK_NULL_HANDLE); @@ -1029,7 +1029,7 @@ public: // Create a new buffer VK_CHECK_RESULT(vkCreateBuffer(device, &bufferInfo, nullptr, &uniformBufferVS.buffer)); - // Get memory requirements including size, alignment and memory type + // Get memory requirements including size, alignment and memory type vkGetBufferMemoryRequirements(device, uniformBufferVS.buffer, &memReqs); allocInfo.allocationSize = memReqs.size; // Get the memory type index that supports host visibile memory access @@ -1041,7 +1041,7 @@ public: VK_CHECK_RESULT(vkAllocateMemory(device, &allocInfo, nullptr, &(uniformBufferVS.memory))); // Bind memory to buffer VK_CHECK_RESULT(vkBindBufferMemory(device, uniformBufferVS.buffer, uniformBufferVS.memory, 0)); - + // Store information in the uniform's descriptor that is used by the descriptor set uniformBufferVS.descriptor.buffer = uniformBufferVS.buffer; uniformBufferVS.descriptor.offset = 0; @@ -1052,7 +1052,7 @@ public: void updateUniformBuffers() { - // Pass matrices to the shaders + // Pass matrices to the shaders uboVS.projectionMatrix = camera.matrices.perspective; uboVS.viewMatrix = camera.matrices.view; uboVS.modelMatrix = glm::mat4(1.0f); diff --git a/examples/viewportarray/viewportarray.cpp b/examples/viewportarray/viewportarray.cpp index 5435e8c4..378d5427 100644 --- a/examples/viewportarray/viewportarray.cpp +++ b/examples/viewportarray/viewportarray.cpp @@ -77,7 +77,7 @@ public: uniformBufferGS.destroy(); } - // Enable physical device features required for this example + // Enable physical device features required for this example virtual void getEnabledFeatures() { // Geometry shader support is required for this example @@ -156,7 +156,7 @@ public: void loadAssets() { - scene.loadFromFile(getAssetPath() + "models/sampleroom.dae", vertexLayout, 0.25f, vulkanDevice, queue); + scene.loadFromFile(getAssetPath() + "models/sampleroom.dae", vertexLayout, 0.25f, vulkanDevice, queue); } void setupDescriptorPool() @@ -174,7 +174,7 @@ public: void setupDescriptorSetLayout() { - std::vector setLayoutBindings = { + std::vector setLayoutBindings = { vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_GEOMETRY_BIT, 0) // Binding 1: Geometry shader ubo }; @@ -199,7 +199,7 @@ public: VK_CHECK_RESULT(vkAllocateDescriptorSets(device, &allocInfo, &descriptorSet)); - std::vector writeDescriptorSets = { + std::vector writeDescriptorSets = { vks::initializers::writeDescriptorSet(descriptorSet, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 0, &uniformBufferGS.descriptor), // Binding 0 :Geometry shader ubo }; @@ -251,8 +251,8 @@ public: vks::initializers::vertexInputBindingDescription(0, vertexLayout.stride(), VK_VERTEX_INPUT_RATE_VERTEX), }; std::vector vertexInputAttributes = { - vks::initializers::vertexInputAttributeDescription(0, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Location 0: Position - vks::initializers::vertexInputAttributeDescription(0, 1, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 3), // Location 1: Normals + vks::initializers::vertexInputAttributeDescription(0, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Location 0: Position + vks::initializers::vertexInputAttributeDescription(0, 1, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 3), // Location 1: Normals vks::initializers::vertexInputAttributeDescription(0, 2, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 6), // Location 2: Color }; @@ -274,11 +274,11 @@ public: pipelineCreateInfo.pStages = shaderStages.data(); pipelineCreateInfo.renderPass = renderPass; - shaderStages[0] = loadShader(getAssetPath() + "shaders/viewportarray/scene.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/viewportarray/scene.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "viewportarray/scene.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "viewportarray/scene.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); // A geometry shader is used to output geometry to multiple viewports in one single pass // See the "invoctations" decorator of the layout input in the shader - shaderStages[2] = loadShader(getAssetPath() + "shaders/viewportarray/multiview.geom.spv", VK_SHADER_STAGE_GEOMETRY_BIT); + shaderStages[2] = loadShader(getShadersPath() + "viewportarray/multiview.geom.spv", VK_SHADER_STAGE_GEOMETRY_BIT); VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipeline)); } @@ -324,7 +324,7 @@ public: rotM = glm::rotate(rotM, glm::radians(camera.rotation.x), glm::vec3(1.0f, 0.0f, 0.0f)); rotM = glm::rotate(rotM, glm::radians(camera.rotation.y), glm::vec3(0.0f, 1.0f, 0.0f)); rotM = glm::rotate(rotM, glm::radians(camera.rotation.z), glm::vec3(0.0f, 0.0f, 1.0f)); - + // Left eye left = -aspectRatio * wd2 + 0.5f * eyeSeparation * ndfl; right = aspectRatio * wd2 + 0.5f * eyeSeparation * ndfl; diff --git a/examples/vulkanscene/vulkanscene.cpp b/examples/vulkanscene/vulkanscene.cpp index 33013bd2..540b2e84 100644 --- a/examples/vulkanscene/vulkanscene.cpp +++ b/examples/vulkanscene/vulkanscene.cpp @@ -1,5 +1,5 @@ /* -* Vulkan Demo Scene +* Vulkan Demo Scene * * Don't take this a an example, it's more of a personal playground * @@ -101,7 +101,7 @@ public: ~VulkanExample() { - // Clean up used Vulkan resources + // Clean up used Vulkan resources // Note : Inherited destructor cleans up resources stored in base class vkDestroyPipeline(device, pipelines.logos, nullptr); vkDestroyPipeline(device, pipelines.models, nullptr); @@ -343,10 +343,10 @@ public: // Attribute descriptions // Describes memory layout and shader positions std::vector vertexInputAttributes = { - vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Location 0: Position - vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 1, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 3), // Location 1: Normal - vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 2, VK_FORMAT_R32G32_SFLOAT, sizeof(float) * 5), // Location 2: Texture coordinates - vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 3, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 8), // Location 3: Color + vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 0, VK_FORMAT_R32G32B32_SFLOAT, 0), // Location 0: Position + vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 1, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 3), // Location 1: Normal + vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 2, VK_FORMAT_R32G32_SFLOAT, sizeof(float) * 5), // Location 2: Texture coordinates + vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 3, VK_FORMAT_R32G32B32_SFLOAT, sizeof(float) * 8), // Location 3: Color }; VkPipelineVertexInputStateCreateInfo vertexInputState = vks::initializers::pipelineVertexInputStateCreateInfo(); @@ -358,20 +358,20 @@ public: pipelineCreateInfo.pVertexInputState = &vertexInputState; // Default mesh rendering pipeline - shaderStages[0] = loadShader(getAssetPath() + "shaders/vulkanscene/mesh.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/vulkanscene/mesh.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "vulkanscene/mesh.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "vulkanscene/mesh.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.models)); // Pipeline for the logos - shaderStages[0] = loadShader(getAssetPath() + "shaders/vulkanscene/logo.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/vulkanscene/logo.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "vulkanscene/logo.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "vulkanscene/logo.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.logos)); // Pipeline for the sky sphere rasterizationState.cullMode = VK_CULL_MODE_FRONT_BIT; // Inverted culling depthStencilState.depthWriteEnable = VK_FALSE; // No depth writes - shaderStages[0] = loadShader(getAssetPath() + "shaders/vulkanscene/skybox.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/vulkanscene/skybox.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getShadersPath() + "vulkanscene/skybox.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getShadersPath() + "vulkanscene/skybox.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.skybox)); } From a4bbe1839908a19fe380ef32b9ca079b17a7b6ac Mon Sep 17 00:00:00 2001 From: Ben Clayton Date: Fri, 29 May 2020 16:12:10 +0100 Subject: [PATCH 3/7] Have dxc generate hlsl shaders into hlsl directory Instead of overwriting the glsl binaries. Issue: #723 --- data/shaders/hlsl/compile.py | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/data/shaders/hlsl/compile.py b/data/shaders/hlsl/compile.py index 2538b0d9..84ecad31 100644 --- a/data/shaders/hlsl/compile.py +++ b/data/shaders/hlsl/compile.py @@ -35,13 +35,7 @@ for root, dirs, files in os.walk(dir_path): for file in files: if file.endswith(".vert") or file.endswith(".frag") or file.endswith(".comp") or file.endswith(".geom") or file.endswith(".tesc") or file.endswith(".tese") or file.endswith(".rgen") or file.endswith(".rchit") or file.endswith(".rmiss"): hlsl_file = os.path.join(root, file) - - spv_out = os.path.abspath(os.path.join(dir_path, "..", "glsl", os.path.relpath(hlsl_file, dir_path) + ".spv")) - - # Make the spv directory if it does not already exist - spv_dir = os.path.dirname(spv_out) - if not os.path.exists(spv_dir): - os.makedirs(spv_dir) + spv_out = hlsl_file + ".spv" profile = '' if(hlsl_file.find('.vert') != -1): From 8c35694de9670f21afa054e494c732312e047320 Mon Sep 17 00:00:00 2001 From: Ben Clayton Date: Fri, 29 May 2020 16:12:55 +0100 Subject: [PATCH 4/7] Add pre-built HLSL shaders Mirrors those found in `data/shaders/glsl/` Issue: #723 --- data/shaders/hlsl/base/textoverlay.frag.spv | Bin 0 -> 1148 bytes data/shaders/hlsl/base/textoverlay.vert.spv | Bin 0 -> 1228 bytes data/shaders/hlsl/base/uioverlay.frag.spv | Bin 0 -> 1248 bytes data/shaders/hlsl/base/uioverlay.vert.spv | Bin 0 -> 1884 bytes data/shaders/hlsl/bloom/colorpass.frag.spv | Bin 0 -> 1188 bytes data/shaders/hlsl/bloom/colorpass.vert.spv | Bin 0 -> 2072 bytes data/shaders/hlsl/bloom/gaussblur.frag.spv | Bin 0 -> 4332 bytes data/shaders/hlsl/bloom/gaussblur.vert.spv | Bin 0 -> 1312 bytes data/shaders/hlsl/bloom/phongpass.frag.spv | Bin 0 -> 2908 bytes data/shaders/hlsl/bloom/phongpass.vert.spv | Bin 0 -> 3588 bytes data/shaders/hlsl/bloom/skybox.frag.spv | Bin 0 -> 928 bytes data/shaders/hlsl/bloom/skybox.vert.spv | Bin 0 -> 1584 bytes data/shaders/hlsl/computecloth/cloth.comp.spv | Bin 0 -> 19800 bytes data/shaders/hlsl/computecloth/cloth.frag.spv | Bin 0 -> 2524 bytes data/shaders/hlsl/computecloth/cloth.vert.spv | Bin 0 -> 3096 bytes data/shaders/hlsl/computecloth/sphere.frag.spv | Bin 0 -> 1888 bytes data/shaders/hlsl/computecloth/sphere.vert.spv | Bin 0 -> 2728 bytes .../hlsl/computecullandlod/cull.comp.spv | Bin 0 -> 5912 bytes .../computecullandlod/indirectdraw.frag.spv | Bin 0 -> 1628 bytes .../computecullandlod/indirectdraw.vert.spv | Bin 0 -> 3408 bytes .../hlsl/computeheadless/headless.comp.spv | Bin 0 -> 2248 bytes .../shaders/hlsl/computenbody/particle.frag.spv | Bin 0 -> 2292 bytes .../shaders/hlsl/computenbody/particle.vert.spv | Bin 0 -> 3484 bytes .../computenbody/particle_calculate.comp.spv | Bin 0 -> 5412 bytes .../computenbody/particle_integrate.comp.spv | Bin 0 -> 1828 bytes .../hlsl/computeparticles/particle.comp.spv | Bin 0 -> 5332 bytes .../hlsl/computeparticles/particle.frag.spv | Bin 0 -> 2396 bytes .../hlsl/computeparticles/particle.vert.spv | Bin 0 -> 2476 bytes .../hlsl/computeraytracing/raytracing.comp.spv | Bin 0 -> 16740 bytes .../hlsl/computeraytracing/texture.frag.spv | Bin 0 -> 1108 bytes .../hlsl/computeraytracing/texture.vert.spv | Bin 0 -> 1328 bytes .../hlsl/computeshader/edgedetect.comp.spv | Bin 0 -> 3496 bytes data/shaders/hlsl/computeshader/emboss.comp.spv | Bin 0 -> 3512 bytes .../shaders/hlsl/computeshader/sharpen.comp.spv | Bin 0 -> 4880 bytes .../shaders/hlsl/computeshader/texture.frag.spv | Bin 0 -> 932 bytes .../shaders/hlsl/computeshader/texture.vert.spv | Bin 0 -> 1820 bytes .../hlsl/conditionalrender/model.frag.spv | Bin 0 -> 2104 bytes .../hlsl/conditionalrender/model.vert.spv | Bin 0 -> 4280 bytes .../hlsl/conservativeraster/fullscreen.frag.spv | Bin 0 -> 932 bytes .../hlsl/conservativeraster/fullscreen.vert.spv | Bin 0 -> 1312 bytes .../hlsl/conservativeraster/triangle.frag.spv | Bin 0 -> 648 bytes .../hlsl/conservativeraster/triangle.vert.spv | Bin 0 -> 1772 bytes .../conservativeraster/triangleoverlay.frag.spv | Bin 0 -> 392 bytes .../shaders/hlsl/debugmarker/colorpass.frag.spv | Bin 0 -> 648 bytes .../shaders/hlsl/debugmarker/colorpass.vert.spv | Bin 0 -> 1684 bytes .../hlsl/debugmarker/postprocess.frag.spv | Bin 0 -> 4124 bytes .../hlsl/debugmarker/postprocess.vert.spv | Bin 0 -> 1348 bytes data/shaders/hlsl/debugmarker/toon.frag.spv | Bin 0 -> 3336 bytes data/shaders/hlsl/debugmarker/toon.vert.spv | Bin 0 -> 4112 bytes data/shaders/hlsl/deferred/debug.frag.spv | Bin 0 -> 2108 bytes data/shaders/hlsl/deferred/debug.vert.spv | Bin 0 -> 2076 bytes data/shaders/hlsl/deferred/deferred.frag.spv | Bin 0 -> 4452 bytes data/shaders/hlsl/deferred/deferred.vert.spv | Bin 0 -> 1312 bytes data/shaders/hlsl/deferred/mrt.frag.spv | Bin 0 -> 3348 bytes data/shaders/hlsl/deferred/mrt.vert.spv | Bin 0 -> 3908 bytes .../hlsl/deferredmultisampling/debug.frag.spv | Bin 0 -> 5216 bytes .../hlsl/deferredmultisampling/debug.vert.spv | Bin 0 -> 1716 bytes .../deferredmultisampling/deferred.frag.spv | Bin 0 -> 6656 bytes .../deferredmultisampling/deferred.vert.spv | Bin 0 -> 1668 bytes .../hlsl/deferredmultisampling/mrt.frag.spv | Bin 0 -> 3348 bytes .../hlsl/deferredmultisampling/mrt.vert.spv | Bin 0 -> 3908 bytes .../shaders/hlsl/deferredshadows/debug.frag.spv | Bin 0 -> 2140 bytes .../shaders/hlsl/deferredshadows/debug.vert.spv | Bin 0 -> 2440 bytes .../hlsl/deferredshadows/deferred.frag.spv | Bin 0 -> 9184 bytes .../hlsl/deferredshadows/deferred.vert.spv | Bin 0 -> 1824 bytes data/shaders/hlsl/deferredshadows/mrt.frag.spv | Bin 0 -> 3216 bytes data/shaders/hlsl/deferredshadows/mrt.vert.spv | Bin 0 -> 3784 bytes .../hlsl/deferredshadows/shadow.geom.spv | Bin 0 -> 2544 bytes .../hlsl/deferredshadows/shadow.vert.spv | Bin 0 -> 1096 bytes data/shaders/hlsl/descriptorsets/cube.frag.spv | Bin 0 -> 1496 bytes data/shaders/hlsl/descriptorsets/cube.vert.spv | Bin 0 -> 2632 bytes data/shaders/hlsl/displacement/base.frag.spv | Bin 0 -> 2420 bytes data/shaders/hlsl/displacement/base.vert.spv | Bin 0 -> 1664 bytes .../hlsl/displacement/displacement.tesc.spv | Bin 0 -> 3856 bytes .../hlsl/displacement/displacement.tese.spv | Bin 0 -> 5680 bytes .../hlsl/distancefieldfonts/bitmap.frag.spv | Bin 0 -> 968 bytes .../hlsl/distancefieldfonts/bitmap.vert.spv | Bin 0 -> 1820 bytes .../hlsl/distancefieldfonts/sdf.frag.spv | Bin 0 -> 2584 bytes .../hlsl/distancefieldfonts/sdf.vert.spv | Bin 0 -> 1820 bytes .../hlsl/dynamicuniformbuffer/base.frag.spv | Bin 0 -> 648 bytes .../hlsl/dynamicuniformbuffer/base.vert.spv | Bin 0 -> 2448 bytes data/shaders/hlsl/gears/gears.frag.spv | Bin 0 -> 2156 bytes data/shaders/hlsl/gears/gears.vert.spv | Bin 0 -> 3576 bytes data/shaders/hlsl/geometryshader/base.frag.spv | Bin 0 -> 648 bytes data/shaders/hlsl/geometryshader/base.vert.spv | Bin 0 -> 1260 bytes data/shaders/hlsl/geometryshader/mesh.frag.spv | Bin 0 -> 2104 bytes data/shaders/hlsl/geometryshader/mesh.vert.spv | Bin 0 -> 3248 bytes .../hlsl/geometryshader/normaldebug.geom.spv | Bin 0 -> 3108 bytes data/shaders/hlsl/gltfscene/mesh.frag.spv | Bin 0 -> 2784 bytes data/shaders/hlsl/gltfscene/mesh.vert.spv | Bin 0 -> 4200 bytes data/shaders/hlsl/hdr/bloom.frag.spv | Bin 0 -> 2976 bytes data/shaders/hlsl/hdr/bloom.vert.spv | Bin 0 -> 1312 bytes data/shaders/hlsl/hdr/composition.frag.spv | Bin 0 -> 1076 bytes data/shaders/hlsl/hdr/composition.vert.spv | Bin 0 -> 1312 bytes data/shaders/hlsl/hdr/gbuffer.frag.spv | Bin 0 -> 7768 bytes data/shaders/hlsl/hdr/gbuffer.vert.spv | Bin 0 -> 4432 bytes data/shaders/hlsl/imgui/scene.frag.spv | Bin 0 -> 1972 bytes data/shaders/hlsl/imgui/scene.vert.spv | Bin 0 -> 3744 bytes data/shaders/hlsl/imgui/ui.frag.spv | Bin 0 -> 1248 bytes data/shaders/hlsl/imgui/ui.vert.spv | Bin 0 -> 1884 bytes data/shaders/hlsl/indirectdraw/ground.frag.spv | Bin 0 -> 2744 bytes data/shaders/hlsl/indirectdraw/ground.vert.spv | Bin 0 -> 3424 bytes .../hlsl/indirectdraw/indirectdraw.frag.spv | Bin 0 -> 2508 bytes .../hlsl/indirectdraw/indirectdraw.vert.spv | Bin 0 -> 6412 bytes .../hlsl/indirectdraw/skysphere.frag.spv | Bin 0 -> 1312 bytes .../hlsl/indirectdraw/skysphere.vert.spv | Bin 0 -> 2168 bytes .../hlsl/inlineuniformblocks/pbr.frag.spv | Bin 0 -> 6912 bytes .../hlsl/inlineuniformblocks/pbr.vert.spv | Bin 0 -> 2932 bytes .../inputattachments/attachmentread.frag.spv | Bin 0 -> 2908 bytes .../inputattachments/attachmentread.vert.spv | Bin 0 -> 876 bytes .../inputattachments/attachmentwrite.frag.spv | Bin 0 -> 1904 bytes .../inputattachments/attachmentwrite.vert.spv | Bin 0 -> 2752 bytes .../shaders/hlsl/instancing/instancing.frag.spv | Bin 0 -> 2996 bytes .../shaders/hlsl/instancing/instancing.vert.spv | Bin 0 -> 7736 bytes data/shaders/hlsl/instancing/planet.frag.spv | Bin 0 -> 2892 bytes data/shaders/hlsl/instancing/planet.vert.spv | Bin 0 -> 3944 bytes data/shaders/hlsl/instancing/starfield.frag.spv | Bin 0 -> 2352 bytes data/shaders/hlsl/instancing/starfield.vert.spv | Bin 0 -> 1412 bytes data/shaders/hlsl/mesh/mesh.frag.spv | Bin 0 -> 2784 bytes data/shaders/hlsl/mesh/mesh.vert.spv | Bin 0 -> 3936 bytes data/shaders/hlsl/multisampling/scene.frag.spv | Bin 0 -> 2784 bytes data/shaders/hlsl/multisampling/scene.vert.spv | Bin 0 -> 3928 bytes data/shaders/hlsl/multithreading/phong.frag.spv | Bin 0 -> 1956 bytes data/shaders/hlsl/multithreading/phong.vert.spv | Bin 0 -> 3384 bytes .../hlsl/multithreading/starsphere.frag.spv | Bin 0 -> 2680 bytes .../hlsl/multithreading/starsphere.vert.spv | Bin 0 -> 1288 bytes data/shaders/hlsl/multiview/multiview.frag.spv | Bin 0 -> 2104 bytes data/shaders/hlsl/multiview/multiview.vert.spv | Bin 0 -> 3504 bytes .../shaders/hlsl/multiview/viewdisplay.frag.spv | Bin 0 -> 2356 bytes .../shaders/hlsl/multiview/viewdisplay.vert.spv | Bin 0 -> 1312 bytes .../hlsl/negativeviewportheight/quad.frag.spv | Bin 0 -> 932 bytes .../hlsl/negativeviewportheight/quad.vert.spv | Bin 0 -> 1280 bytes .../nv_ray_tracing_basic/closesthit.rchit.spv | Bin 0 -> 1144 bytes .../hlsl/nv_ray_tracing_basic/miss.rmiss.spv | Bin 0 -> 776 bytes .../hlsl/nv_ray_tracing_basic/raygen.rgen.spv | Bin 0 -> 3468 bytes .../closesthit.rchit.spv | Bin 0 -> 7148 bytes .../nv_ray_tracing_reflections/miss.rmiss.spv | Bin 0 -> 1624 bytes .../nv_ray_tracing_reflections/raygen.rgen.spv | Bin 0 -> 4784 bytes .../nv_ray_tracing_shadows/closesthit.rchit.spv | Bin 0 -> 7912 bytes .../hlsl/nv_ray_tracing_shadows/miss.rmiss.spv | Bin 0 -> 672 bytes .../hlsl/nv_ray_tracing_shadows/raygen.rgen.spv | Bin 0 -> 3516 bytes .../nv_ray_tracing_shadows/shadow.rmiss.spv | Bin 0 -> 608 bytes data/shaders/hlsl/occlusionquery/mesh.frag.spv | Bin 0 -> 2508 bytes data/shaders/hlsl/occlusionquery/mesh.vert.spv | Bin 0 -> 3588 bytes .../hlsl/occlusionquery/occluder.frag.spv | Bin 0 -> 648 bytes .../hlsl/occlusionquery/occluder.vert.spv | Bin 0 -> 1944 bytes .../shaders/hlsl/occlusionquery/simple.frag.spv | Bin 0 -> 560 bytes .../shaders/hlsl/occlusionquery/simple.vert.spv | Bin 0 -> 1556 bytes data/shaders/hlsl/offscreen/mirror.frag.spv | Bin 0 -> 2904 bytes data/shaders/hlsl/offscreen/mirror.vert.spv | Bin 0 -> 2184 bytes data/shaders/hlsl/offscreen/phong.frag.spv | Bin 0 -> 2348 bytes data/shaders/hlsl/offscreen/phong.vert.spv | Bin 0 -> 3424 bytes data/shaders/hlsl/offscreen/quad.frag.spv | Bin 0 -> 932 bytes data/shaders/hlsl/offscreen/quad.vert.spv | Bin 0 -> 1820 bytes .../hlsl/parallaxmapping/parallax.frag.spv | Bin 0 -> 9348 bytes .../hlsl/parallaxmapping/parallax.vert.spv | Bin 0 -> 4744 bytes .../hlsl/particlefire/normalmap.frag.spv | Bin 0 -> 3688 bytes .../hlsl/particlefire/normalmap.vert.spv | Bin 0 -> 5592 bytes .../shaders/hlsl/particlefire/particle.frag.spv | Bin 0 -> 4060 bytes .../shaders/hlsl/particlefire/particle.vert.spv | Bin 0 -> 4732 bytes data/shaders/hlsl/pbrbasic/pbr.frag.spv | Bin 0 -> 7196 bytes data/shaders/hlsl/pbrbasic/pbr.vert.spv | Bin 0 -> 2844 bytes data/shaders/hlsl/pbribl/filtercube.vert.spv | Bin 0 -> 1404 bytes data/shaders/hlsl/pbribl/genbrdflut.frag.spv | Bin 0 -> 7368 bytes data/shaders/hlsl/pbribl/genbrdflut.vert.spv | Bin 0 -> 1312 bytes .../shaders/hlsl/pbribl/irradiancecube.frag.spv | Bin 0 -> 3176 bytes data/shaders/hlsl/pbribl/pbribl.frag.spv | Bin 0 -> 12932 bytes data/shaders/hlsl/pbribl/pbribl.vert.spv | Bin 0 -> 3388 bytes .../hlsl/pbribl/prefilterenvmap.frag.spv | Bin 0 -> 8564 bytes data/shaders/hlsl/pbribl/skybox.frag.spv | Bin 0 -> 3964 bytes data/shaders/hlsl/pbribl/skybox.vert.spv | Bin 0 -> 1908 bytes .../shaders/hlsl/pbrtexture/filtercube.vert.spv | Bin 0 -> 1404 bytes .../shaders/hlsl/pbrtexture/genbrdflut.frag.spv | Bin 0 -> 7368 bytes .../shaders/hlsl/pbrtexture/genbrdflut.vert.spv | Bin 0 -> 1312 bytes .../hlsl/pbrtexture/irradiancecube.frag.spv | Bin 0 -> 3176 bytes .../shaders/hlsl/pbrtexture/pbrtexture.frag.spv | Bin 0 -> 15124 bytes .../shaders/hlsl/pbrtexture/pbrtexture.vert.spv | Bin 0 -> 3160 bytes .../hlsl/pbrtexture/prefilterenvmap.frag.spv | Bin 0 -> 8564 bytes data/shaders/hlsl/pbrtexture/skybox.frag.spv | Bin 0 -> 3964 bytes data/shaders/hlsl/pbrtexture/skybox.vert.spv | Bin 0 -> 1908 bytes data/shaders/hlsl/pipelines/phong.frag.spv | Bin 0 -> 2788 bytes data/shaders/hlsl/pipelines/phong.vert.spv | Bin 0 -> 3936 bytes data/shaders/hlsl/pipelines/toon.frag.spv | Bin 0 -> 3336 bytes data/shaders/hlsl/pipelines/toon.vert.spv | Bin 0 -> 3936 bytes data/shaders/hlsl/pipelines/wireframe.frag.spv | Bin 0 -> 684 bytes data/shaders/hlsl/pipelines/wireframe.vert.spv | Bin 0 -> 1684 bytes .../hlsl/pipelinestatistics/scene.frag.spv | Bin 0 -> 1956 bytes .../hlsl/pipelinestatistics/scene.tesc.spv | Bin 0 -> 4108 bytes .../hlsl/pipelinestatistics/scene.tese.spv | Bin 0 -> 4420 bytes .../hlsl/pipelinestatistics/scene.vert.spv | Bin 0 -> 3904 bytes data/shaders/hlsl/pushconstants/lights.frag.spv | Bin 0 -> 2436 bytes data/shaders/hlsl/pushconstants/lights.vert.spv | Bin 0 -> 3448 bytes data/shaders/hlsl/pushdescriptors/cube.frag.spv | Bin 0 -> 1496 bytes data/shaders/hlsl/pushdescriptors/cube.vert.spv | Bin 0 -> 2848 bytes data/shaders/hlsl/radialblur/colorpass.frag.spv | Bin 0 -> 2028 bytes data/shaders/hlsl/radialblur/colorpass.vert.spv | Bin 0 -> 2140 bytes data/shaders/hlsl/radialblur/phongpass.frag.spv | Bin 0 -> 3496 bytes data/shaders/hlsl/radialblur/phongpass.vert.spv | Bin 0 -> 3112 bytes .../shaders/hlsl/radialblur/radialblur.frag.spv | Bin 0 -> 2904 bytes .../shaders/hlsl/radialblur/radialblur.vert.spv | Bin 0 -> 1312 bytes .../hlsl/renderheadless/triangle.frag.spv | Bin 0 -> 648 bytes .../hlsl/renderheadless/triangle.vert.spv | Bin 0 -> 1508 bytes data/shaders/hlsl/scenerendering/scene.frag.spv | Bin 0 -> 3308 bytes data/shaders/hlsl/scenerendering/scene.vert.spv | Bin 0 -> 4496 bytes data/shaders/hlsl/screenshot/mesh.frag.spv | Bin 0 -> 2104 bytes data/shaders/hlsl/screenshot/mesh.vert.spv | Bin 0 -> 3392 bytes .../hlsl/shadowmapomni/cubemapdisplay.frag.spv | Bin 0 -> 4036 bytes .../hlsl/shadowmapomni/cubemapdisplay.vert.spv | Bin 0 -> 1748 bytes .../hlsl/shadowmapomni/offscreen.frag.spv | Bin 0 -> 1020 bytes .../hlsl/shadowmapomni/offscreen.vert.spv | Bin 0 -> 2332 bytes data/shaders/hlsl/shadowmapomni/scene.frag.spv | Bin 0 -> 3252 bytes data/shaders/hlsl/shadowmapomni/scene.vert.spv | Bin 0 -> 3528 bytes .../hlsl/shadowmapping/offscreen.frag.spv | Bin 0 -> 408 bytes .../hlsl/shadowmapping/offscreen.vert.spv | Bin 0 -> 1028 bytes data/shaders/hlsl/shadowmapping/quad.frag.spv | Bin 0 -> 1612 bytes data/shaders/hlsl/shadowmapping/quad.vert.spv | Bin 0 -> 1236 bytes data/shaders/hlsl/shadowmapping/scene.frag.spv | Bin 0 -> 5848 bytes data/shaders/hlsl/shadowmapping/scene.vert.spv | Bin 0 -> 4364 bytes .../debugshadowmap.frag.spv | Bin 0 -> 1608 bytes .../debugshadowmap.vert.spv | Bin 0 -> 1780 bytes .../shadowmappingcascade/depthpass.frag.spv | Bin 0 -> 1072 bytes .../shadowmappingcascade/depthpass.vert.spv | Bin 0 -> 2152 bytes .../hlsl/shadowmappingcascade/scene.frag.spv | Bin 0 -> 9912 bytes .../hlsl/shadowmappingcascade/scene.vert.spv | Bin 0 -> 3544 bytes .../hlsl/skeletalanimation/mesh.frag.spv | Bin 0 -> 2844 bytes .../hlsl/skeletalanimation/mesh.vert.spv | Bin 0 -> 5936 bytes .../hlsl/skeletalanimation/texture.frag.spv | Bin 0 -> 2516 bytes .../hlsl/skeletalanimation/texture.vert.spv | Bin 0 -> 3256 bytes .../hlsl/specializationconstants/uber.frag.spv | Bin 0 -> 6456 bytes .../hlsl/specializationconstants/uber.vert.spv | Bin 0 -> 3936 bytes .../hlsl/sphericalenvmapping/sem.frag.spv | Bin 0 -> 2528 bytes .../hlsl/sphericalenvmapping/sem.vert.spv | Bin 0 -> 3736 bytes data/shaders/hlsl/ssao/blur.frag.spv | Bin 0 -> 2348 bytes data/shaders/hlsl/ssao/composition.frag.spv | Bin 0 -> 4220 bytes data/shaders/hlsl/ssao/fullscreen.vert.spv | Bin 0 -> 1312 bytes data/shaders/hlsl/ssao/gbuffer.frag.spv | Bin 0 -> 2828 bytes data/shaders/hlsl/ssao/gbuffer.vert.spv | Bin 0 -> 3312 bytes data/shaders/hlsl/ssao/ssao.frag.spv | Bin 0 -> 5660 bytes .../shaders/hlsl/stencilbuffer/outline.frag.spv | Bin 0 -> 392 bytes .../shaders/hlsl/stencilbuffer/outline.vert.spv | Bin 0 -> 1812 bytes data/shaders/hlsl/stencilbuffer/toon.frag.spv | Bin 0 -> 2716 bytes data/shaders/hlsl/stencilbuffer/toon.vert.spv | Bin 0 -> 3272 bytes .../shaders/hlsl/subpasses/composition.frag.spv | Bin 0 -> 3792 bytes .../shaders/hlsl/subpasses/composition.vert.spv | Bin 0 -> 1312 bytes data/shaders/hlsl/subpasses/gbuffer.frag.spv | Bin 0 -> 2828 bytes data/shaders/hlsl/subpasses/gbuffer.vert.spv | Bin 0 -> 3072 bytes .../shaders/hlsl/subpasses/transparent.frag.spv | Bin 0 -> 2420 bytes .../shaders/hlsl/subpasses/transparent.vert.spv | Bin 0 -> 2464 bytes .../hlsl/terraintessellation/skysphere.frag.spv | Bin 0 -> 1128 bytes .../hlsl/terraintessellation/skysphere.vert.spv | Bin 0 -> 1952 bytes .../hlsl/terraintessellation/terrain.frag.spv | Bin 0 -> 5416 bytes .../hlsl/terraintessellation/terrain.tesc.spv | Bin 0 -> 13508 bytes .../hlsl/terraintessellation/terrain.tese.spv | Bin 0 -> 6732 bytes .../hlsl/terraintessellation/terrain.vert.spv | Bin 0 -> 1600 bytes data/shaders/hlsl/tessellation/base.frag.spv | Bin 0 -> 1832 bytes data/shaders/hlsl/tessellation/base.vert.spv | Bin 0 -> 1600 bytes .../hlsl/tessellation/passthrough.tesc.spv | Bin 0 -> 3340 bytes .../hlsl/tessellation/passthrough.tese.spv | Bin 0 -> 4092 bytes .../hlsl/tessellation/pntriangles.tesc.spv | Bin 0 -> 12556 bytes .../hlsl/tessellation/pntriangles.tese.spv | Bin 0 -> 12488 bytes data/shaders/hlsl/textoverlay/mesh.frag.spv | Bin 0 -> 1916 bytes data/shaders/hlsl/textoverlay/mesh.vert.spv | Bin 0 -> 3680 bytes data/shaders/hlsl/textoverlay/text.frag.spv | Bin 0 -> 1032 bytes data/shaders/hlsl/textoverlay/text.vert.spv | Bin 0 -> 1228 bytes data/shaders/hlsl/texture/texture.frag.spv | Bin 0 -> 2724 bytes data/shaders/hlsl/texture/texture.vert.spv | Bin 0 -> 4224 bytes data/shaders/hlsl/texture3d/texture3d.frag.spv | Bin 0 -> 2608 bytes data/shaders/hlsl/texture3d/texture3d.vert.spv | Bin 0 -> 4224 bytes .../hlsl/texturearray/instancing.frag.spv | Bin 0 -> 936 bytes .../hlsl/texturearray/instancing.vert.spv | Bin 0 -> 2608 bytes .../hlsl/texturecubemap/reflect.frag.spv | Bin 0 -> 3844 bytes .../hlsl/texturecubemap/reflect.vert.spv | Bin 0 -> 3412 bytes .../shaders/hlsl/texturecubemap/skybox.frag.spv | Bin 0 -> 932 bytes .../shaders/hlsl/texturecubemap/skybox.vert.spv | Bin 0 -> 1704 bytes .../hlsl/texturemipmapgen/texture.frag.spv | Bin 0 -> 3064 bytes .../hlsl/texturemipmapgen/texture.vert.spv | Bin 0 -> 4204 bytes .../sparseresidency.frag.spv | Bin 0 -> 3024 bytes .../sparseresidency.vert.spv | Bin 0 -> 3396 bytes data/shaders/hlsl/triangle/triangle.frag.spv | Bin 0 -> 648 bytes data/shaders/hlsl/triangle/triangle.vert.spv | Bin 0 -> 1960 bytes .../hlsl/viewportarray/multiview.geom.spv | Bin 0 -> 4496 bytes data/shaders/hlsl/viewportarray/scene.frag.spv | Bin 0 -> 2104 bytes data/shaders/hlsl/viewportarray/scene.vert.spv | Bin 0 -> 1536 bytes data/shaders/hlsl/vulkanscene/logo.frag.spv | Bin 0 -> 2224 bytes data/shaders/hlsl/vulkanscene/logo.vert.spv | Bin 0 -> 3764 bytes data/shaders/hlsl/vulkanscene/mesh.frag.spv | Bin 0 -> 4008 bytes data/shaders/hlsl/vulkanscene/mesh.vert.spv | Bin 0 -> 3864 bytes data/shaders/hlsl/vulkanscene/skybox.frag.spv | Bin 0 -> 932 bytes data/shaders/hlsl/vulkanscene/skybox.vert.spv | Bin 0 -> 1552 bytes 289 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 data/shaders/hlsl/base/textoverlay.frag.spv create mode 100644 data/shaders/hlsl/base/textoverlay.vert.spv create mode 100644 data/shaders/hlsl/base/uioverlay.frag.spv create mode 100644 data/shaders/hlsl/base/uioverlay.vert.spv create mode 100644 data/shaders/hlsl/bloom/colorpass.frag.spv create mode 100644 data/shaders/hlsl/bloom/colorpass.vert.spv create mode 100644 data/shaders/hlsl/bloom/gaussblur.frag.spv create mode 100644 data/shaders/hlsl/bloom/gaussblur.vert.spv create mode 100644 data/shaders/hlsl/bloom/phongpass.frag.spv create mode 100644 data/shaders/hlsl/bloom/phongpass.vert.spv create mode 100644 data/shaders/hlsl/bloom/skybox.frag.spv create mode 100644 data/shaders/hlsl/bloom/skybox.vert.spv create mode 100644 data/shaders/hlsl/computecloth/cloth.comp.spv create mode 100644 data/shaders/hlsl/computecloth/cloth.frag.spv create mode 100644 data/shaders/hlsl/computecloth/cloth.vert.spv create mode 100644 data/shaders/hlsl/computecloth/sphere.frag.spv create mode 100644 data/shaders/hlsl/computecloth/sphere.vert.spv create mode 100644 data/shaders/hlsl/computecullandlod/cull.comp.spv create mode 100644 data/shaders/hlsl/computecullandlod/indirectdraw.frag.spv create mode 100644 data/shaders/hlsl/computecullandlod/indirectdraw.vert.spv create mode 100644 data/shaders/hlsl/computeheadless/headless.comp.spv create mode 100644 data/shaders/hlsl/computenbody/particle.frag.spv create mode 100644 data/shaders/hlsl/computenbody/particle.vert.spv create mode 100644 data/shaders/hlsl/computenbody/particle_calculate.comp.spv create mode 100644 data/shaders/hlsl/computenbody/particle_integrate.comp.spv create mode 100644 data/shaders/hlsl/computeparticles/particle.comp.spv create mode 100644 data/shaders/hlsl/computeparticles/particle.frag.spv create mode 100644 data/shaders/hlsl/computeparticles/particle.vert.spv create mode 100644 data/shaders/hlsl/computeraytracing/raytracing.comp.spv create mode 100644 data/shaders/hlsl/computeraytracing/texture.frag.spv create mode 100644 data/shaders/hlsl/computeraytracing/texture.vert.spv create mode 100644 data/shaders/hlsl/computeshader/edgedetect.comp.spv create mode 100644 data/shaders/hlsl/computeshader/emboss.comp.spv create mode 100644 data/shaders/hlsl/computeshader/sharpen.comp.spv create mode 100644 data/shaders/hlsl/computeshader/texture.frag.spv create mode 100644 data/shaders/hlsl/computeshader/texture.vert.spv create mode 100644 data/shaders/hlsl/conditionalrender/model.frag.spv create mode 100644 data/shaders/hlsl/conditionalrender/model.vert.spv create mode 100644 data/shaders/hlsl/conservativeraster/fullscreen.frag.spv create mode 100644 data/shaders/hlsl/conservativeraster/fullscreen.vert.spv create mode 100644 data/shaders/hlsl/conservativeraster/triangle.frag.spv create mode 100644 data/shaders/hlsl/conservativeraster/triangle.vert.spv create mode 100644 data/shaders/hlsl/conservativeraster/triangleoverlay.frag.spv create mode 100644 data/shaders/hlsl/debugmarker/colorpass.frag.spv create mode 100644 data/shaders/hlsl/debugmarker/colorpass.vert.spv create mode 100644 data/shaders/hlsl/debugmarker/postprocess.frag.spv create mode 100644 data/shaders/hlsl/debugmarker/postprocess.vert.spv create mode 100644 data/shaders/hlsl/debugmarker/toon.frag.spv create mode 100644 data/shaders/hlsl/debugmarker/toon.vert.spv create mode 100644 data/shaders/hlsl/deferred/debug.frag.spv create mode 100644 data/shaders/hlsl/deferred/debug.vert.spv create mode 100644 data/shaders/hlsl/deferred/deferred.frag.spv create mode 100644 data/shaders/hlsl/deferred/deferred.vert.spv create mode 100644 data/shaders/hlsl/deferred/mrt.frag.spv create mode 100644 data/shaders/hlsl/deferred/mrt.vert.spv create mode 100644 data/shaders/hlsl/deferredmultisampling/debug.frag.spv create mode 100644 data/shaders/hlsl/deferredmultisampling/debug.vert.spv create mode 100644 data/shaders/hlsl/deferredmultisampling/deferred.frag.spv create mode 100644 data/shaders/hlsl/deferredmultisampling/deferred.vert.spv create mode 100644 data/shaders/hlsl/deferredmultisampling/mrt.frag.spv create mode 100644 data/shaders/hlsl/deferredmultisampling/mrt.vert.spv create mode 100644 data/shaders/hlsl/deferredshadows/debug.frag.spv create mode 100644 data/shaders/hlsl/deferredshadows/debug.vert.spv create mode 100644 data/shaders/hlsl/deferredshadows/deferred.frag.spv create mode 100644 data/shaders/hlsl/deferredshadows/deferred.vert.spv create mode 100644 data/shaders/hlsl/deferredshadows/mrt.frag.spv create mode 100644 data/shaders/hlsl/deferredshadows/mrt.vert.spv create mode 100644 data/shaders/hlsl/deferredshadows/shadow.geom.spv create mode 100644 data/shaders/hlsl/deferredshadows/shadow.vert.spv create mode 100644 data/shaders/hlsl/descriptorsets/cube.frag.spv create mode 100644 data/shaders/hlsl/descriptorsets/cube.vert.spv create mode 100644 data/shaders/hlsl/displacement/base.frag.spv create mode 100644 data/shaders/hlsl/displacement/base.vert.spv create mode 100644 data/shaders/hlsl/displacement/displacement.tesc.spv create mode 100644 data/shaders/hlsl/displacement/displacement.tese.spv create mode 100644 data/shaders/hlsl/distancefieldfonts/bitmap.frag.spv create mode 100644 data/shaders/hlsl/distancefieldfonts/bitmap.vert.spv create mode 100644 data/shaders/hlsl/distancefieldfonts/sdf.frag.spv create mode 100644 data/shaders/hlsl/distancefieldfonts/sdf.vert.spv create mode 100644 data/shaders/hlsl/dynamicuniformbuffer/base.frag.spv create mode 100644 data/shaders/hlsl/dynamicuniformbuffer/base.vert.spv create mode 100644 data/shaders/hlsl/gears/gears.frag.spv create mode 100644 data/shaders/hlsl/gears/gears.vert.spv create mode 100644 data/shaders/hlsl/geometryshader/base.frag.spv create mode 100644 data/shaders/hlsl/geometryshader/base.vert.spv create mode 100644 data/shaders/hlsl/geometryshader/mesh.frag.spv create mode 100644 data/shaders/hlsl/geometryshader/mesh.vert.spv create mode 100644 data/shaders/hlsl/geometryshader/normaldebug.geom.spv create mode 100644 data/shaders/hlsl/gltfscene/mesh.frag.spv create mode 100644 data/shaders/hlsl/gltfscene/mesh.vert.spv create mode 100644 data/shaders/hlsl/hdr/bloom.frag.spv create mode 100644 data/shaders/hlsl/hdr/bloom.vert.spv create mode 100644 data/shaders/hlsl/hdr/composition.frag.spv create mode 100644 data/shaders/hlsl/hdr/composition.vert.spv create mode 100644 data/shaders/hlsl/hdr/gbuffer.frag.spv create mode 100644 data/shaders/hlsl/hdr/gbuffer.vert.spv create mode 100644 data/shaders/hlsl/imgui/scene.frag.spv create mode 100644 data/shaders/hlsl/imgui/scene.vert.spv create mode 100644 data/shaders/hlsl/imgui/ui.frag.spv create mode 100644 data/shaders/hlsl/imgui/ui.vert.spv create mode 100644 data/shaders/hlsl/indirectdraw/ground.frag.spv create mode 100644 data/shaders/hlsl/indirectdraw/ground.vert.spv create mode 100644 data/shaders/hlsl/indirectdraw/indirectdraw.frag.spv create mode 100644 data/shaders/hlsl/indirectdraw/indirectdraw.vert.spv create mode 100644 data/shaders/hlsl/indirectdraw/skysphere.frag.spv create mode 100644 data/shaders/hlsl/indirectdraw/skysphere.vert.spv create mode 100644 data/shaders/hlsl/inlineuniformblocks/pbr.frag.spv create mode 100644 data/shaders/hlsl/inlineuniformblocks/pbr.vert.spv create mode 100644 data/shaders/hlsl/inputattachments/attachmentread.frag.spv create mode 100644 data/shaders/hlsl/inputattachments/attachmentread.vert.spv create mode 100644 data/shaders/hlsl/inputattachments/attachmentwrite.frag.spv create mode 100644 data/shaders/hlsl/inputattachments/attachmentwrite.vert.spv create mode 100644 data/shaders/hlsl/instancing/instancing.frag.spv create mode 100644 data/shaders/hlsl/instancing/instancing.vert.spv create mode 100644 data/shaders/hlsl/instancing/planet.frag.spv create mode 100644 data/shaders/hlsl/instancing/planet.vert.spv create mode 100644 data/shaders/hlsl/instancing/starfield.frag.spv create mode 100644 data/shaders/hlsl/instancing/starfield.vert.spv create mode 100644 data/shaders/hlsl/mesh/mesh.frag.spv create mode 100644 data/shaders/hlsl/mesh/mesh.vert.spv create mode 100644 data/shaders/hlsl/multisampling/scene.frag.spv create mode 100644 data/shaders/hlsl/multisampling/scene.vert.spv create mode 100644 data/shaders/hlsl/multithreading/phong.frag.spv create mode 100644 data/shaders/hlsl/multithreading/phong.vert.spv create mode 100644 data/shaders/hlsl/multithreading/starsphere.frag.spv create mode 100644 data/shaders/hlsl/multithreading/starsphere.vert.spv create mode 100644 data/shaders/hlsl/multiview/multiview.frag.spv create mode 100644 data/shaders/hlsl/multiview/multiview.vert.spv create mode 100644 data/shaders/hlsl/multiview/viewdisplay.frag.spv create mode 100644 data/shaders/hlsl/multiview/viewdisplay.vert.spv create mode 100644 data/shaders/hlsl/negativeviewportheight/quad.frag.spv create mode 100644 data/shaders/hlsl/negativeviewportheight/quad.vert.spv create mode 100644 data/shaders/hlsl/nv_ray_tracing_basic/closesthit.rchit.spv create mode 100644 data/shaders/hlsl/nv_ray_tracing_basic/miss.rmiss.spv create mode 100644 data/shaders/hlsl/nv_ray_tracing_basic/raygen.rgen.spv create mode 100644 data/shaders/hlsl/nv_ray_tracing_reflections/closesthit.rchit.spv create mode 100644 data/shaders/hlsl/nv_ray_tracing_reflections/miss.rmiss.spv create mode 100644 data/shaders/hlsl/nv_ray_tracing_reflections/raygen.rgen.spv create mode 100644 data/shaders/hlsl/nv_ray_tracing_shadows/closesthit.rchit.spv create mode 100644 data/shaders/hlsl/nv_ray_tracing_shadows/miss.rmiss.spv create mode 100644 data/shaders/hlsl/nv_ray_tracing_shadows/raygen.rgen.spv create mode 100644 data/shaders/hlsl/nv_ray_tracing_shadows/shadow.rmiss.spv create mode 100644 data/shaders/hlsl/occlusionquery/mesh.frag.spv create mode 100644 data/shaders/hlsl/occlusionquery/mesh.vert.spv create mode 100644 data/shaders/hlsl/occlusionquery/occluder.frag.spv create mode 100644 data/shaders/hlsl/occlusionquery/occluder.vert.spv create mode 100644 data/shaders/hlsl/occlusionquery/simple.frag.spv create mode 100644 data/shaders/hlsl/occlusionquery/simple.vert.spv create mode 100644 data/shaders/hlsl/offscreen/mirror.frag.spv create mode 100644 data/shaders/hlsl/offscreen/mirror.vert.spv create mode 100644 data/shaders/hlsl/offscreen/phong.frag.spv create mode 100644 data/shaders/hlsl/offscreen/phong.vert.spv create mode 100644 data/shaders/hlsl/offscreen/quad.frag.spv create mode 100644 data/shaders/hlsl/offscreen/quad.vert.spv create mode 100644 data/shaders/hlsl/parallaxmapping/parallax.frag.spv create mode 100644 data/shaders/hlsl/parallaxmapping/parallax.vert.spv create mode 100644 data/shaders/hlsl/particlefire/normalmap.frag.spv create mode 100644 data/shaders/hlsl/particlefire/normalmap.vert.spv create mode 100644 data/shaders/hlsl/particlefire/particle.frag.spv create mode 100644 data/shaders/hlsl/particlefire/particle.vert.spv create mode 100644 data/shaders/hlsl/pbrbasic/pbr.frag.spv create mode 100644 data/shaders/hlsl/pbrbasic/pbr.vert.spv create mode 100644 data/shaders/hlsl/pbribl/filtercube.vert.spv create mode 100644 data/shaders/hlsl/pbribl/genbrdflut.frag.spv create mode 100644 data/shaders/hlsl/pbribl/genbrdflut.vert.spv create mode 100644 data/shaders/hlsl/pbribl/irradiancecube.frag.spv create mode 100644 data/shaders/hlsl/pbribl/pbribl.frag.spv create mode 100644 data/shaders/hlsl/pbribl/pbribl.vert.spv create mode 100644 data/shaders/hlsl/pbribl/prefilterenvmap.frag.spv create mode 100644 data/shaders/hlsl/pbribl/skybox.frag.spv create mode 100644 data/shaders/hlsl/pbribl/skybox.vert.spv create mode 100644 data/shaders/hlsl/pbrtexture/filtercube.vert.spv create mode 100644 data/shaders/hlsl/pbrtexture/genbrdflut.frag.spv create mode 100644 data/shaders/hlsl/pbrtexture/genbrdflut.vert.spv create mode 100644 data/shaders/hlsl/pbrtexture/irradiancecube.frag.spv create mode 100644 data/shaders/hlsl/pbrtexture/pbrtexture.frag.spv create mode 100644 data/shaders/hlsl/pbrtexture/pbrtexture.vert.spv create mode 100644 data/shaders/hlsl/pbrtexture/prefilterenvmap.frag.spv create mode 100644 data/shaders/hlsl/pbrtexture/skybox.frag.spv create mode 100644 data/shaders/hlsl/pbrtexture/skybox.vert.spv create mode 100644 data/shaders/hlsl/pipelines/phong.frag.spv create mode 100644 data/shaders/hlsl/pipelines/phong.vert.spv create mode 100644 data/shaders/hlsl/pipelines/toon.frag.spv create mode 100644 data/shaders/hlsl/pipelines/toon.vert.spv create mode 100644 data/shaders/hlsl/pipelines/wireframe.frag.spv create mode 100644 data/shaders/hlsl/pipelines/wireframe.vert.spv create mode 100644 data/shaders/hlsl/pipelinestatistics/scene.frag.spv create mode 100644 data/shaders/hlsl/pipelinestatistics/scene.tesc.spv create mode 100644 data/shaders/hlsl/pipelinestatistics/scene.tese.spv create mode 100644 data/shaders/hlsl/pipelinestatistics/scene.vert.spv create mode 100644 data/shaders/hlsl/pushconstants/lights.frag.spv create mode 100644 data/shaders/hlsl/pushconstants/lights.vert.spv create mode 100644 data/shaders/hlsl/pushdescriptors/cube.frag.spv create mode 100644 data/shaders/hlsl/pushdescriptors/cube.vert.spv create mode 100644 data/shaders/hlsl/radialblur/colorpass.frag.spv create mode 100644 data/shaders/hlsl/radialblur/colorpass.vert.spv create mode 100644 data/shaders/hlsl/radialblur/phongpass.frag.spv create mode 100644 data/shaders/hlsl/radialblur/phongpass.vert.spv create mode 100644 data/shaders/hlsl/radialblur/radialblur.frag.spv create mode 100644 data/shaders/hlsl/radialblur/radialblur.vert.spv create mode 100644 data/shaders/hlsl/renderheadless/triangle.frag.spv create mode 100644 data/shaders/hlsl/renderheadless/triangle.vert.spv create mode 100644 data/shaders/hlsl/scenerendering/scene.frag.spv create mode 100644 data/shaders/hlsl/scenerendering/scene.vert.spv create mode 100644 data/shaders/hlsl/screenshot/mesh.frag.spv create mode 100644 data/shaders/hlsl/screenshot/mesh.vert.spv create mode 100644 data/shaders/hlsl/shadowmapomni/cubemapdisplay.frag.spv create mode 100644 data/shaders/hlsl/shadowmapomni/cubemapdisplay.vert.spv create mode 100644 data/shaders/hlsl/shadowmapomni/offscreen.frag.spv create mode 100644 data/shaders/hlsl/shadowmapomni/offscreen.vert.spv create mode 100644 data/shaders/hlsl/shadowmapomni/scene.frag.spv create mode 100644 data/shaders/hlsl/shadowmapomni/scene.vert.spv create mode 100644 data/shaders/hlsl/shadowmapping/offscreen.frag.spv create mode 100644 data/shaders/hlsl/shadowmapping/offscreen.vert.spv create mode 100644 data/shaders/hlsl/shadowmapping/quad.frag.spv create mode 100644 data/shaders/hlsl/shadowmapping/quad.vert.spv create mode 100644 data/shaders/hlsl/shadowmapping/scene.frag.spv create mode 100644 data/shaders/hlsl/shadowmapping/scene.vert.spv create mode 100644 data/shaders/hlsl/shadowmappingcascade/debugshadowmap.frag.spv create mode 100644 data/shaders/hlsl/shadowmappingcascade/debugshadowmap.vert.spv create mode 100644 data/shaders/hlsl/shadowmappingcascade/depthpass.frag.spv create mode 100644 data/shaders/hlsl/shadowmappingcascade/depthpass.vert.spv create mode 100644 data/shaders/hlsl/shadowmappingcascade/scene.frag.spv create mode 100644 data/shaders/hlsl/shadowmappingcascade/scene.vert.spv create mode 100644 data/shaders/hlsl/skeletalanimation/mesh.frag.spv create mode 100644 data/shaders/hlsl/skeletalanimation/mesh.vert.spv create mode 100644 data/shaders/hlsl/skeletalanimation/texture.frag.spv create mode 100644 data/shaders/hlsl/skeletalanimation/texture.vert.spv create mode 100644 data/shaders/hlsl/specializationconstants/uber.frag.spv create mode 100644 data/shaders/hlsl/specializationconstants/uber.vert.spv create mode 100644 data/shaders/hlsl/sphericalenvmapping/sem.frag.spv create mode 100644 data/shaders/hlsl/sphericalenvmapping/sem.vert.spv create mode 100644 data/shaders/hlsl/ssao/blur.frag.spv create mode 100644 data/shaders/hlsl/ssao/composition.frag.spv create mode 100644 data/shaders/hlsl/ssao/fullscreen.vert.spv create mode 100644 data/shaders/hlsl/ssao/gbuffer.frag.spv create mode 100644 data/shaders/hlsl/ssao/gbuffer.vert.spv create mode 100644 data/shaders/hlsl/ssao/ssao.frag.spv create mode 100644 data/shaders/hlsl/stencilbuffer/outline.frag.spv create mode 100644 data/shaders/hlsl/stencilbuffer/outline.vert.spv create mode 100644 data/shaders/hlsl/stencilbuffer/toon.frag.spv create mode 100644 data/shaders/hlsl/stencilbuffer/toon.vert.spv create mode 100644 data/shaders/hlsl/subpasses/composition.frag.spv create mode 100644 data/shaders/hlsl/subpasses/composition.vert.spv create mode 100644 data/shaders/hlsl/subpasses/gbuffer.frag.spv create mode 100644 data/shaders/hlsl/subpasses/gbuffer.vert.spv create mode 100644 data/shaders/hlsl/subpasses/transparent.frag.spv create mode 100644 data/shaders/hlsl/subpasses/transparent.vert.spv create mode 100644 data/shaders/hlsl/terraintessellation/skysphere.frag.spv create mode 100644 data/shaders/hlsl/terraintessellation/skysphere.vert.spv create mode 100644 data/shaders/hlsl/terraintessellation/terrain.frag.spv create mode 100644 data/shaders/hlsl/terraintessellation/terrain.tesc.spv create mode 100644 data/shaders/hlsl/terraintessellation/terrain.tese.spv create mode 100644 data/shaders/hlsl/terraintessellation/terrain.vert.spv create mode 100644 data/shaders/hlsl/tessellation/base.frag.spv create mode 100644 data/shaders/hlsl/tessellation/base.vert.spv create mode 100644 data/shaders/hlsl/tessellation/passthrough.tesc.spv create mode 100644 data/shaders/hlsl/tessellation/passthrough.tese.spv create mode 100644 data/shaders/hlsl/tessellation/pntriangles.tesc.spv create mode 100644 data/shaders/hlsl/tessellation/pntriangles.tese.spv create mode 100644 data/shaders/hlsl/textoverlay/mesh.frag.spv create mode 100644 data/shaders/hlsl/textoverlay/mesh.vert.spv create mode 100644 data/shaders/hlsl/textoverlay/text.frag.spv create mode 100644 data/shaders/hlsl/textoverlay/text.vert.spv create mode 100644 data/shaders/hlsl/texture/texture.frag.spv create mode 100644 data/shaders/hlsl/texture/texture.vert.spv create mode 100644 data/shaders/hlsl/texture3d/texture3d.frag.spv create mode 100644 data/shaders/hlsl/texture3d/texture3d.vert.spv create mode 100644 data/shaders/hlsl/texturearray/instancing.frag.spv create mode 100644 data/shaders/hlsl/texturearray/instancing.vert.spv create mode 100644 data/shaders/hlsl/texturecubemap/reflect.frag.spv create mode 100644 data/shaders/hlsl/texturecubemap/reflect.vert.spv create mode 100644 data/shaders/hlsl/texturecubemap/skybox.frag.spv create mode 100644 data/shaders/hlsl/texturecubemap/skybox.vert.spv create mode 100644 data/shaders/hlsl/texturemipmapgen/texture.frag.spv create mode 100644 data/shaders/hlsl/texturemipmapgen/texture.vert.spv create mode 100644 data/shaders/hlsl/texturesparseresidency/sparseresidency.frag.spv create mode 100644 data/shaders/hlsl/texturesparseresidency/sparseresidency.vert.spv create mode 100644 data/shaders/hlsl/triangle/triangle.frag.spv create mode 100644 data/shaders/hlsl/triangle/triangle.vert.spv create mode 100644 data/shaders/hlsl/viewportarray/multiview.geom.spv create mode 100644 data/shaders/hlsl/viewportarray/scene.frag.spv create mode 100644 data/shaders/hlsl/viewportarray/scene.vert.spv create mode 100644 data/shaders/hlsl/vulkanscene/logo.frag.spv create mode 100644 data/shaders/hlsl/vulkanscene/logo.vert.spv create mode 100644 data/shaders/hlsl/vulkanscene/mesh.frag.spv create mode 100644 data/shaders/hlsl/vulkanscene/mesh.vert.spv create mode 100644 data/shaders/hlsl/vulkanscene/skybox.frag.spv create mode 100644 data/shaders/hlsl/vulkanscene/skybox.vert.spv diff --git a/data/shaders/hlsl/base/textoverlay.frag.spv b/data/shaders/hlsl/base/textoverlay.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..46f47ac7e46df3bec467bc04581507ac04a6c11e GIT binary patch literal 1148 zcmY+C%We}v5Jfw7oZ*=Vf$)fg#voP!0|7!H0)!xBnGlR&hXyf1mat=)34$G;%?62c zdU_&LR=N7tt*X9VcDr>m3t=vVuo!mu)>c9*W!e$TE`==26FrZL;aH-DTd~Zyc?NN6 zhYs;GWG5_y)10ecld`w@r8gWEUrTU@kF%=sXLUR+-yDsrSbMgq{a%bF-^wX4);cex zQf(IR9*%oIifOOE`|;KO{^9F;b$u2!9UWJZd^h;ie|fmK+mEy6|I@F&i{vN8v>3(e z;rRW)JF}3JkGkuNPsHz`+;?BcHL*LG#lG!^BqlHJMpR?pGs}w`evN4h;2hte)3bXG z;rENHY}0+3o5R)7m{`l{IaMEH?KP_0tNAl2FTM;uPjr@ZPSJ=k? E0U^0blmGw# literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/base/textoverlay.vert.spv b/data/shaders/hlsl/base/textoverlay.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..4870eb420dd28d374237042f33359751c4d51ca0 GIT binary patch literal 1228 zcmYk5NlyYn5QUpf+!YaUi(-f;5~4;CMKnf@;o^*f#OrwDz!C({{%kKMzOQE*X;XH+ zdev30tA|9qlr|=2j9E1|`p?Rkcoa!k47+9)rhYHz_5pDj8A(~n`U$&#h)C&gPO(nQ zn~aB(v0UM#jp6%)&nc$#!&2Vny5U=Pgvt5+sl#7OJ33I-v{PoDE7dWGxyU-uJ5n=eO6lS#_Dr3`P?ikJ#-qpy<=RC7L6kpWN z9f(u2q#d3Z_$b2ed^y78)WxHb*~Dfr8XZP6vm{17n!|6@n5sN9lgmQ)kE-RglZ%!U znd=2Uoxy14n}Ba9AC22G^fYYdN z7v=DtRT(jsi(SYk#=U&0LtjlsE*#$g?@k})c`2heeb50W-|4uLj}E>Kr=u>PxXZbg zPYrUY0Vaoh-m)Qshhv6d$L+}{hJLj2+aSgwpZ6mM&x{Xb@Z1lc_ayeKNKN(!xH&=I literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/base/uioverlay.frag.spv b/data/shaders/hlsl/base/uioverlay.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..282a17fd38c9dac950a8a07a997bf7d9c7b10d79 GIT binary patch literal 1248 zcmZ9KTWeEM5QVq7we`}AwXJQnCiOv32(@ahh(d{_FT#-|M&IO!Q3B0{cp~}({Lj7! ze&5bHQr%%Pd#yEl_RQ>4F5O)S;Zg`;IXvUvwH8V_Q;t}5B`k&t-u*Bgj1)?k5%R0- z)JVpz9IE(_1XM#UTw$O6nDm>6pPGYV`lS!9#$O1Z$D^#<|DMgJ{TRDk#C}bOlk@%* z7$a+VV>>xrTC6MATFL9At>77J9nZ3OsMGt>f%O3bL_k>>f%D*Al`SXW9EO5}8mxBcG2jFEqd;(56fbn_oza()X%j)yrfw(mpCp2fc7Bg~%7;jA8G=J5M5 z#=4$h@;zdl-w|dW&%WcdwLZnITWG21+iFN`QnpRIHStX!{GWX> z@%x=ULzY8^Ip54TGiPQ8iiJkixeLy@MfXL&Im@mPEJcs;F1gER_tSWo016TqB}rLQ zktmsLMUTIVP}a{y*#^C6o=)beuHu!vjeB=IJHymD8sN`j$ln@|##8CCTW~j|)1Q-* zW_LdO-Wn&fG)~fUfLvwI6V=VW#iJAHihhVCe>#nm*(gr2mt|j-p5)TayuIps8z#*k z@wC~EdYyhJ+J7#WVyeF9;Op-kx1#89JNW3#x!`L>d(j~dVwlZ%p8ACOAl|^t%x6Jm zW#YXyYw(8fpw~$lBbC4$n;|$qL-6?-R@|m+lXx1R`j-rSuC{XV{jx9Y9GE!E59T{t zelUGnelY#z`SfJ`U1ewfoJOXc*?2EDcBHK;@Tk3}`+{^$vabA>q`}k$^Hy;7&TL=c zU`ICjA^Te^Z(n8@?4V{1sKXEnOGmjx_fT&6N3CO^drHo6WwiyibIg19s{> z3w~_iX2ABY7sBK+ycPV|w#26|{$>o*7c-zY{9yVpOrLx+!}Q6n!GTYo?2cjl+5Zsd zUW!St#B%8Uud3aZCYD~dCGZXJptKG^?=!#h7nh{JAid%6?Ho?7mY zx?}$x;`VhX7W;v0>}@2$&M{k8cWlhIs|nHjfdno-cAtHxHal=Ap;z8a-(dLoo6Y9Q<9`_xPkccHsB;KRzZFN-=eN%S4fe50DMDfLCG>O4C8FvQ>m}D3yqHq3eUj)zB zc0+8asXFIWRaf_PKDSXaX2=*bW%l)D&6u2H@)o0(&4?M6C+AGABsLo5tW&cEJcFZ~-O&G;qjr?KUyeEw6^Ngm@=(DKEB z{Dzb0!yN5y@EoN{I(W`^)n>(D%qKP{md3MT6fLU`o($EYQx{o zSWxzo_*NtAXGuS!p2^`@HRhKusv{hCaMSvlcUf@~rBTQ3((Y1zp*-eYld-_uA(&b) z_c^F@PwO%kI=CwH`P|E(4)*%I^7$tf8Tnfdk0@p>X!lY1iVTf-OlHj6pCuvw9UQgH z?H8C;QO)>QXmgj9#s7n!bUb)bcv_xboEN<;Pak;nAM)tzgFYjV4v#)3kIwy|&&tya zepXfU@>MYl^2BS(;h)f-9@PAl=RV-8!WDVy;n6qb(WyBS=4{+I3(T3gUly1%Fz=AV z%*;$4Gb8i*GjA%UKYJdiGjo#5V(xc!Ta>3axmz;w!OX~;0v`)A<1ZQegE`}hjJ>Yh z8(mdQ4*ZD}>fuhMbJpK7INpQr894r0Io$WQ436cw9mR0W?zvsZG0&Bzd8mv XZ7~PuLSs+zc<*p%{{4Tb`=RU;#l%hJ literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/bloom/colorpass.vert.spv b/data/shaders/hlsl/bloom/colorpass.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..2ab6cf7c238f153ce5c491522fc95044ee9543f2 GIT binary patch literal 2072 zcmZ9MNpBND5QW=Y!kQ357Pc^s0RfRL4hTg;tOhxTB;(kz3ERPd4@R-aGIkI*egZ$2 z3li^}>9PiQROxzEua>UvaV}e$cP`_cTX3KBpS9$&-ja(k-bHtIs`op+0U#@Zk(U%C za}p(!Ef?d@A{6v@TDEpGoQ#K)u~hN$u?@W*eHTtR)Tur3bJ#7n zUW8H=H|MaihNI|P_sh5!sWb9nC*Mi0`vbq($k&g)c8|3e)aNPfq${X%e7!;Wq%$hl z!)EQU7Vh7dDfV$r?>l^TR0+ezOYh?}Q(qG zI*#6n`z5hl*kU(rr}`k@|uV>1clSr#T9A9z(e`H2Isc}#!c zb&u&8d|5l^GyWBi&41Nn;+IwFn)ae1u4_l9uRuHTa4hbIbnYOK6jf(SJF~$~-LiK4 z*uZ>aVC(aN$Chtfm~(P=_)oo`x{rjJ1Md+Im^q+lJZ27@(=c;ju7;Td-wzz(nFHU0 zVdg-8;D=&zc4Aq~;*YBFtq{xEsuK8ycT$)c6g_?{K4;jJ&@Y%7lqA#wGlQEF`mL+0 zK>IBTG4Sv`5u2RY(W%cne6C)Z?Q02s-k;TY5E7OUF*Hmj8ov&PsmH3WmqIc-J2#`0;W7VDsIUj_ttr paYs5f7JS|!HvHWGT?zh-1V3*R8-Cu)Jqdo^5dL{@`>Tj;$v@7QclQ7Q literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/bloom/gaussblur.frag.spv b/data/shaders/hlsl/bloom/gaussblur.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..c3cc4cfb3dd0e383dd23fb613bcd8f4d0374a10d GIT binary patch literal 4332 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 bzH!fG?fy<0vkvoiV{*neWcXjy@5cTEU=->U literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/bloom/phongpass.vert.spv b/data/shaders/hlsl/bloom/phongpass.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..ac64d27b51676396f1eab7fe643c3d9dfa2cf48d GIT binary patch literal 3588 zcmZvd>2H)(6o=ooGX)A%Dzd0pT5tzPa6ybpiq+UAwNqPY{919MV`!(TQ;eS|xbKMj zUiW?9*Z61o#l+`%=brjH@siVfe!sKcbKg63b?#i1WgS_T^=5zY*VUJGCZ;RLTF>C0 zOMP~xKBwM^=utw-NH;>VY&Eh5=|R>aUHsF22LWaNtw*1psxCI?7n`WWm2ysfqH!;{ z?_J>enT46z{IvBv|1ISA+p|BH*j#a!V)Miuik-1oKe6A3 zSU<5dEyg>`V!ZP!#`h!~@%EzKI_C4c*nzkL54K=7LiMP%^M5#d*?^3YC;ZGCan8}W zp*F5PPQPNDXE$yMiCl8+adNG5bgi6uGn4WcVF1~JwU=G2pV)rI&O_Xnu(|sAGW`uO zMn7%tAr+#upNVWDb|d=$V*k4mJ`3I4fj70;H-oJe_ATfxv3+gL(ej^x&(3j{?dD6e zk8_fbe%d0>x#)f?fw!T1=B@nQ&hDAS{pn8SLI$v$2X4*4GnH1(Wt@1By#sM3;vEUw zli2(6+~I$I!ePH4VdFPa=|c8FA}(TA@8^8JE8~lEH}@rQ-o5rg@U`sTgS__Z*|p1w z4-g(zd?)&d2a?{A@F2Tq5A1A=En@E`u(R@a z!5H&7EBg=ZtbEsjwfnA%*mqsTzH9M5?$>!*%jJCkqVtQ{t>vtaBi0i;tEB=SLO)T! z`kyRdXYOyE@i!3fOm`#BM(j*4L+nND94mgQx`S5uR-5l02hgcu&BkYeO z=CFo2JpU7jeE2+xZVv01L#&VXG4`jBb%?(O=Ge~uG$J29&!FoQb@Vxf$cN9f==#KY z^f`^l>odgu9Advw%lmsi@u%<+zmPa%gL^UY)(q|?ba{J?{4b+>R`YvSv3}}H?EZd5 zzptRTpXpUN`S5uy`4rFeI-Gped;`7xOmD);N3U<8%NZNoGP=Aq?a%Li8Hw6&qqq0> z4xD`WyqkQA{k;b#f0}uE2k#?t#@?1@{6XT`vMR5A1N(=FyyEIWd{+_k5xTkLBj#gt zdBxQp^9h_W=82e3(d89ad(3BW#`uOK=5us;#T7BW;W_XZi2d7-`So{3zSS=g@2B`y zze;@E#n)gt^F+;W(B&0Z)Qr5}!uhSm`xYA$Z}~g)rG$Igzei3Wk^hIp$-5%|1N7~E z{D_!Czo_{Wx;6d()^A3vpEa%VGg7SaOXB2RQR6uN*7z0CC-VP>ZvJhE`NjH}e?9x} zh<0r!6As&6uv~mESE9?g^zUYu({Amn5bgG)eO2PL_n}{nX!qOEzB+Lczc1PSPPDIK emkawf$zDqK9(K8~?@#t}vae;A`(?Ur$R<5k!GR_>u)?`WS01vCx{>8ug#|5_EpoUC@Eq zxo6JYnKO5@nMTo=1!K&bIn@`dnoN?(S`1q@MUzwH9Qol8A|t1wqAz(h(kW~5iUW~( zQ?R-CXB2oZlR@Bxk^dIhJiX%JJD!Y#8!>HvG_7AEPyMGKjoyQ?pslB8lA5bWLpb!l z{IPfc&}ldC&ZsY1T_2O!5|6#-ZnM+6?b=?sxgF40Q-0)+{m52_!>3-~_SjQ?M$2m= z-?a1+%-xq`VBTRCv)=)v3?A&tc_%RY%<|xr-%__lVMo4gO7;!G%wTS6^uiqVD@>2J zc1KmbBl%L22iJvH6w_Yt%fj>_55Jc1=!IWZWG?xd`j!=4Wh#oCsaaR#-_yett}9Yc zepj`;BmAW}bkZ9GqmSJ&FnZV#P2hAs8kprM(u@A*x`_sAF*N<^c2$wPj-o41XQPLI z4ZaeO-VHhPuB8(W3`b2vj#e=5cPK||diO|Y?(~#p$74BnsOxJ}G@i)GQ;RVNP2}lA Q&8D0j9D9QQwAF?DAL+0{Jpcdz literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/bloom/skybox.vert.spv b/data/shaders/hlsl/bloom/skybox.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..3e732bbc48103225050b6b0d04fc25fe1ee00a61 GIT binary patch literal 1584 zcmZvcOHY$g5QY!E;T1&W;w9M1f`v)LiYSV-cxh3fRRq^nyQs03)E488pWx4RW8(9C ze1|lRry0(?@64R@&U`0iGwZV<%!Cl;!V!O63n7y-*#sM%4_7YzZmZK1WH2*w$({{) z_Ro-ceg*u~{tlxrEbi_J3Sr&ptW*l+-NXkA4l><&(XJc?EuQuEDVXt^H-x z>2q^|YGhi%Ti4 zb93x_{XZNZEZoBC+!OOWKh`-H>nc;+be(yVb!xWm9E)ekP1ng;SEFn17cb-cLWknA)N27f^Xw_ zms-}+*~&#L5^N3}*&OcPIvYV@xr&zp8 zygh-{?AtfKL%x0A$GraqHy9J^dyd~S<~_$ZUPXiF>|o~jP0bgZV|*jwF8cHvdxrDa zP5GEp0XqxNh&fgK3Knzr@XhgU#GIG-@=@C>e6_tN(|7Y4lXFGx4ZfVSi(D<`?7zuW zoJ$?E-hAV}!QY%~Y#%f3{gHc{^6HMr!(7 literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/computecloth/cloth.comp.spv b/data/shaders/hlsl/computecloth/cloth.comp.spv new file mode 100644 index 0000000000000000000000000000000000000000..5e85d78bd47c55a16fbf0e2af9d9dd72853eda19 GIT binary patch literal 19800 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 F{{an=HuwMl literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/computecloth/cloth.frag.spv b/data/shaders/hlsl/computecloth/cloth.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..7a81f3545487667fa2f0037f563054e30491bcdf GIT binary patch literal 2524 zcmZ9MYjaao6owDI3e-|Wz=Gllc!$YQMjdAu<8-joFM()VqTifILmO$DkS1KbQB=H( z%H;$8CjCEtamMF4JqwT7nU%HPcdfnlT6^!aM@LRfCdsZONv4yB{5$q1BN?+dnaK2F zb-7yJ>aUhxf8(_N>10%u`SvAyk}>QNq}^z3%IlRIMM-(H`Ze?_-E@B4)As zH@nU9nbmTu-B@da<)4sm-slf{&2ycNP7j#zN9B#*YP7o>&By$1_?#-lPiFPBHp|x< zz4FS!hv#awrFXMFT*EqZ--X)J`S~iIajLYwp*eFkzv)Vrvk)A7bZ; z-GkzM&+$0o&@V0_kpcX!51k_V zv}cec*?#9Rct4h$b5GHk_$kDgkeGJ>?vF>amB3Gf|N669iFpUXav>3S2+k4s@D7}x zO?GGBg6rFh^~Ml8Qfho=$IN1n5astEeD)$N{pH&?OkpO8Z!T@62b85a+%C_8xejOW-m(MdbC*q4hgQd^X4CI?5UqwC}=M zeD>>|aft2HJK_-Amv!#Sv3=P?5qoEg*gG58KCNY^*RkZ29H;0vx$Px%oQ1vr4LX5# zZTq-{I6v^}5N;0P%R_i=2(J&}Rsmbvl>&A@{l;DYZR&CVUPkOi?Eb!jxF3OE#dbde zzlQC8yhj$#>m*_h=NYTNLPpoo=RD7*jd(6%@0^dn=Q2-r&$EL#$8XgbYwIHNbz(f@ ztB84=`vFy?XdiTWV;wbCv5zf8pW^WRJQr*84D`G99NGufwS5<&&q2;l<=^!+usIeG zedh7(@{I{^}VT!ZVzm1r45iwT3dDqa}NX)y9?YzKWVY|))_R}}vYs46N zbIW~$nA>}z-}mq?@veIZ@!d4W_11GP@_!4qhQQxp+iR@%J+?9OvEC2Zv7Ub4(eVA4 z`+OUW^G%Ife!})GHpW_7Xt`MXXKd>W{0p}C=}z9uU2J3IBj#6Z^W4s3e#16S{{4K< ye#e$~1a}Wx&OU;>pL5=2zrhs!0CB$Y`ezVpzk=3h9Vz-0BByUM$N!N1E#zNsIJ~j| literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/computecloth/cloth.vert.spv b/data/shaders/hlsl/computecloth/cloth.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..5e2dcb53aa033d44e0e2e9f6fd7475079512625b GIT binary patch literal 3096 zcmZve>2s4+6o+4$qy-l$VkvGlp)M#x1ZP~v9V-K!!KPBk_%&cgpl0rEv1S1sVv);W!cW`FaCAy$|e$1%CXkz?D{Qz zt<_l_AHV$e+Qn!q2tn&6UP*&>Id=@h|6``f~T&7Pj8$ruI>c zb(XsQwbtr?oOPR>_G``dS^OsRJoa&-^U})$NtQKlW*?mIwd=z(T{&yYxuh!ecnkXJ zXBv4Pbyu(7eWiVN(CKng^UK@UTKC2F>IQ|;gSWp`>v{;5Ij>(QU#m3U1k>3=aS(a?4j=r$aXqsMlDoofpcZY*KVKJzJ#rcOV zf{gJ_f{&QPaN4}9aoYpAtvot&y6*}d-38xVSzPxD?NIEB`x6)MPh7k|d%PR2*Xp;{ z@)LCOT*t^&f%lEL#Kz6#XoQ`W*!9Z6fB1w;MeiqkB31_MrQfR*_k< zT*odppLl1&`iiF$F0s$?4xGI)`e_TPlUJMPn;~u&dlj+Q0}0^bAyM-z4~=38Vp|L9GWvsSX3|1s>&$v1Bfv2#-2maubj4uQ3M2Z5cN z->g2yJ2$_7Cw(7^9!IC-F9?yt@7R%^cxu z-rW$m`~dba*1lefv`o;WyMeid1EwQFpzo_vWda=guU^&GVH7;KTyYbuE<-&eA*~`hkgI(?)Dn5ez3!|ah)&Kwi literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/computecloth/sphere.frag.spv b/data/shaders/hlsl/computecloth/sphere.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..fbb448bf83c3de7add13ed83892418e4299dad59 GIT binary patch literal 1888 zcmZ9MTTfF_5QUFGQ3SaPh}WVqG0_lB)R-6{sDzi=Lcs>FSS~_U3YG%;q(1l$e9>R( zi;3TNI1{la8TPC-v)9a?y-R!BmE%crEJ>2yNxLU`>dzXFjXYHqDQv0rUW6iekN(*-Kz z$aH_kFU~AIDwWEQ)7r+=ZHe82O7~fBd#{-aE>xBmr^~Z5i)pOmzaDdBpM|e1l=hlC zdre%rIpp+<+l{U2hku+Cs?^pGD(kD{b*6hgQ=zu8*_7n-Jm*+f9Gi?j`oVsI2M*!Gz=J9NI+ds15WZUWXWzrDYB~$! zr&*no{19D?u#Urwvg%*V?#KOM?i&NE<9&{UFSDv4Z~Q8&arfK@+lO`RC9pjl#ok9? z`|>{Aqux_i^{jE1p6tz;`Pu7l&>2>>tzE>-4_s=&b1itj1(#d!LJRhNhrYd4j$mit zn>7A_ew@L1%(Dc(fbaPO`|dpd9H(}smoWF3XKa$)YRc<-KHu9kyFBj_X56c%3^F~en^(E%WN6jt#sA;_aNUWa4 zd@ttte<1qV#y1{jKfYP{sK0}6kAXkp7qRcmz%w;4bL1mu7hj!kSxyt*Jo))-c6<2p we!=bI%XyaI4l>T)@f;KOxBUrozxl=oF?;v-Wz0Uz%VToJ{68W7gZe$}FB_M7jsO4v literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/computecloth/sphere.vert.spv b/data/shaders/hlsl/computecloth/sphere.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..a8803b0f80707cb13899cc40298cf3a0898504a2 GIT binary patch literal 2728 zcmZvd`EOKJ6vtmXGp)F=$|CCcN)0ZAqQ(%Tals|f1Use0hF^y=!eFN}j59?*rHU)K zpzz1~i;17ld-sr+iI<$-^ZlOno_pU=o1UM|vZ*Y~c4iOx>)Mk|C#F_lt-G=(9_hVy zcT+Hp=ut-+$P7X#W1g6mix(+r4~cB+0VIe)iFgL1$rnu`g#0IhRy}o(`aY_F=2YqwX3E`&T>b zqi&xQnP1*Mdi_hCjV%hJ2X8MM*0pJtIUi#$^UoIZ=x#1-wTBDKt<}Zzi>;;CO1~LA zvn<(`S}UKPI*X-2X6M!)kBXo$G?=2Z4F3El7d~pWRz5bFHfKC(d%dvL%ih!dG?>8) z@N27!n~vU@h+Q#vadqzYl*0|$!*;Les$0aKCf0i{UqP0MoktUKi9MrOUhLVbcF!cX zo_5bs^>>y>5SMoGT!FIe4B6t&=KqH?*KXttap7mb5ob-~KA7Mpc^2cg5p%_x ziXKjLYB~K5pgW%&IY^er*~R7)Kbdfiy~&*YF7%NPSs;h}Q^3q&K$Lnc!b9-j-A$EJSfAKTy z<~FDJaKhU65&10p93IcHt2goS4aWJ6@lALy@^j!<*`0~J_T%i@<-{ivj+$>I96h}W zF7K!GKbf#+H2&@6U*26kTS<2Fy@TB|`xeb1_RQ*273`StoLwNRC9Dchp1V z<&5*b{EtXJ;`-=0QjHsc<)fZ)*AV%L8=~h(HO?P-dB3NqH$ss!P3uHAX*`!gaJ^ZNzeJ|fqz=yHlHa@}DL#@|KE zpzCfN0m|Z-O{%FQUu&7M%Z4M9!suon215wO>NCdoJyb#D)Fk aWRE+V0n3H`m1M868$Zh~_b(aWLjD7w<+*ME literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/computecullandlod/cull.comp.spv b/data/shaders/hlsl/computecullandlod/cull.comp.spv new file mode 100644 index 0000000000000000000000000000000000000000..bfaf7a667ab94c7dda71eea8e8f57533aa8f79fb GIT binary patch literal 5912 zcmZ{m*>hag5r?mqku2NDfHxo@Bn$yeG9kol0TP5vDW;T?6O--9HJZ6fCXr@TqmhBC zJlMq(Z+XZ+z#a@qSP~$+sqFi{?+aPTzOf~ceBYhZ(nWEOtJU4VUQVAreXeJqf7fu9 z^<`N$nr)G>PRjZVWK%X&@adTYGu7p8qq^tf3$>4C1G2)l1)mCXKeSkDw#2ob2rhO~ zA@_VuKfpiz=P*|A8AN{VVa-&rQTiX8j%_O%+#PG0X$wHFs_t%kWaWV?vNa9sNk6=-)g^_gm~w7S+gT;SFf zbtDtEUW|R5Z+4cuMe?;6`+O+xbn_c$=jWGmvaQ+dYl`W$3*CMX!P&nkes8CCL+{KR zvU9+TGfz$(NR6&rVcs!krLg0Y1z5>OvW;tc^-!%-{olNm?A*w^GS@cV8y9m4RhWnK zkl%34Y*C%EYpK(IJN<38nJB9kw?~WZM!s;UncsjMxc#Zu7V}PRKQ}EtT=?6c`OeC6 zcV%(^Lamke&N_fK_THFPk^kRaQ`77UU9C{FgCDy477qceK@ZFKC2pMy?MA>w{01=2 zoAM1a;j6tYdbeg9$zFl&__NO|!Di1chO1eNvg?I2(!+amRi3vVZqFLc)zKhJrO0E? z4ldOip2KsGz&VSpD|F-HomZHEE76x~o!Vk?is^;+Ty0@r>rlI1^X~RpE^$MdABJ=n zQ*X=b@95zJ*=-2EPxrbVxl?O2SJ=(Bc?bI3Ts3cXJ2!>@T?kD```z&QcBfiT3B~S9 z*j&4jVg|EEjG3?UA<2ulhkH5$^Hx6tU_;rx@FG{c)or$LEbvNpG~wYqO`X0i`|47+ zXWpmZEcFWfEXWo5L{BYr-(cCUuHBsaJD+8{y7vBLcb3X_b?w$+ymwZ%t82Gz?Y`Tx zU0u6%YxgW=ySjGkd<|alUEPK53ak%VY%^q@GvLOY2v)0{vb&!K<# z1rIFt@jQX`BkN}`0yB@8^#o>&m^E3W=d{LckUpN%rH{*+#LT7r96?suE~edl7r@JB zJ`dd${^khGd+qgRa21O)=@aL?8ad*`*2jsJ%8MnlYAQT zPWC$!?w-bvq5G}_I|J1BD>jDgeX5V+_aeA8iH$Lh_SSQ+Cv%(yuH76HaCLKx!_6V4 z%{SER{a|)>vWZ#eZn$-N52x_=e7Kmp=XT$hK)t!^y+Q3_W1zkzVYmQKHtTsY z+FNK>&%)Oma<0Q`@8Sk8GGv4`AH~u2H@nW9+ zQn<0+k@idAeUSK8JTHS!V7(l!tj`tjVMw0|^sC|8#I;YswVPLcI_dUI{ko)EtNQhD zYtnxYXY!uj0v(3D1Ls@69Il@;q<$pn(c_zw9{b#qboZIyh208wR;|Yx%yB2&THW&s zbZ4&uxsUod+x`9)-X-kHwyC1mII{#5su zk@XRO5}$9wzX7?dUHexcadRt2?yn-7dy*4)majqOv-lSDiSv9t`5f;&+B}1MyN^8f z`6jaa9HwUb@-0ZrJkbNOau2LmJ$f#WeBVX(?!1E>{yoTdWbd`f_4Vz3AJYChJWhuH zAYrgo?1u^SU4-9{66X8Z&px~1KZcCgU;9?b`ki}i?y28TATe#e0d-~P-VkWeeXX1~^?ziIz@}HpL(=e){IL z*-yU--iP0T*k?0xxxN$7qdsl!V}0WBCL@phIU02tdi|Zry5ajuf zB%co;>n9#>@`K3YJ0aiX!*G{p(e?-==2?`Vho72sar@@^waepdk0N_E-<^H@5F{4& Rt4*xjcY9|3)8O9me*vfZX#fBK literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/computecullandlod/indirectdraw.frag.spv b/data/shaders/hlsl/computecullandlod/indirectdraw.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..6d46b40761a4efe996be8ad271d6caaa7d92d476 GIT binary patch literal 1628 zcmZ9LTW=Ck6orpaP+O#}wXN4mHBC%3M2#8~V+&G5?UbQFvFd{vwb4lmGzj`yAN&XY zSYJ$B-{kB#GR^MZYwi0vhivBNY3EKk=Zfx~{_`!mOv22$e4-mcCn$d%e=0wCco%=s zWl@Q5-p#rh*%?VciU;s`;c}9^L=D`6SYoiV`os4@L{1UJ$Aj{>XjE>7?cHjiF7VXw zd@T&ZHqCRYK(6Pz^@Ca%wzuzzN__O2^4&Kdy@!)=(x}sW->tSA^=^_k^WXeARk|d; z*9j-%5 z8b$qNs(3)VhBha5jUats&H_v?FlPX!5175dDVsXHQLFPxHoVo@k!^MGQKupekIk9!PAxx>O&`O%vMZ8b znw@voln?`7(B5#NgdVpf_<7$gzeh_peiM3fFYwl5Pd0NHZp$X-hk9}^9SJe;wtH7L zyYt(zynWg5KYd$4MwC+bssG2_>VXO<<~RDI_DgOga~tvT^y^~w5-3#xR~-X;FofPJ zSpBT}kL@O?Jf7#!UhU*XL?ZKeHo-?C^LSptMd3U19F0O~4o1Iwl zc-@uQ5oaszK3lo-&$cgLSM=&=r?E8OEY|nue9^0dpPg?kG+FQ7b~7(GRvL@>u3LEx zhp54O=^h+nbH&+<%_FuhvGK+Fi9G|cyx6{r<;C_|>=4^yal{))IO180cJu1*-Pwsa z0uL838z)QL#a;iyxwi|EapHuZb;detaNRv!T=zQtVqNSd@*Sd5IqTns?$@A(Y-hzL zX0dC<)*^OqLv-Hvu8(|KM)1(K8QIFZiivh3vDfiKDNzxGRWTss){%W^zEx`%zZhaHG(^wVa%L1NdKwVQj0zn()a$q*IT zyMn7^m!rEUxf;I1%xe(Wi+3h$uf(2#_M+#N>`HX^6#iEwtp64wU(Gy>$2H9Ao`LU6 z|8oB$-gWTa1$~CecRRD^B5(dXnYGJ_4Bk2(>SixU!Ma+HMe$k_vKqXNVHMr=Me3_(a3co@!@k4>^gmn zA=W4Cr_hbzyN(#oqsxcSX>?=gV+^rA+U@TPh%x*Y7{eaDh{)I3qdj^laqN2clh@-#&5J{2x=! z^YH%Mg2*}a?`M|N?*48?v|E$*wTTP+zGV08w69~93;S)!-kar>M}6vY?X0^$<^@rAY^_&}?myhM-!<>9CwK*x_x8dB{@6DFh``Q~5bIR0_I zW^_EiB&)%3JKKBixp(iLy~!rmIofSZhcV`qd7^(tpXp4QTqL#f-&&(~LB9*K2ccWGJz<|q;{LaS{L6~f zYGu!l!b3qZd2>a!;qQ9yW4~ao%KqKkk8{S!sh8CvPkzCSC4SQj-*|#CcU!jJs0F^` zx{a92nR~K4EY?iQ{=4^-IJXt5Yl)WoviqUePW+sCAdu9`n`z<5YwjnpyqPDK(KMI% zM>H*ns|R7(ee1dJgwat+xmvKB_Mpow+q}S!8omyxLGI&}w?#M9FWx2IGX_5I;c-oR zi_g0;F-;rC@73ho!`j8_y^`v}FKQhRd+f&VHg@@k6zUjcdZ83(PsdaCX1z!qlv2cb>;hO?r+dVm9xV zFfnv-4t#or<_S%{Iq)|Bj&QbaS-!1Hj5=_v&Gwgi)MD^H&|iAR_Y3WlvbLX7!rA`v z&C2?Gv$Fnl>RXL7@~Qhd?dPm89CwU<@*QK)Phx!M;LriKbsh>+=a+aeaq>7L8mR|H zpT%h7?tWJ;-$vG8ZOuo*@xJ8R#Wm(S)Zq*w$JRMi-js z3BHZ33Zv8dYr^DyNS}387>+!9J~*4dE=)~(UVP5DEQ=1T&D{{@jJEcsFkH4raM>Pl P9=m=^7;W?&%pLs=>l?p> literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/computenbody/particle.frag.spv b/data/shaders/hlsl/computenbody/particle.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..0304c99370111aff9fa367177dbfaaa49bfb7dc6 GIT binary patch literal 2292 zcmZXV+fNfw5XP56Dc-nq<~*;*^SnXtSbtd~UdA!K3C23)o%Z^)qc{Api6JAw z13oM1mkf)+M@gmiCj5>Zv$9Tzi;vquX>PX^HvGLn7#`m^IEp(_u-w{jMbG?p!cUt2 zf!}EF2a#aH4`_E(%0K6w!oQnmHS%}Epc$_#QZYGIe-iVbjWdMJ(xD%fD&^{0ZLR$L zzNjRQv;AXxU^dR|Y_*lm<#Kub=}8>DXm#QwX|=vpTUuXTsfo*~Tj?HV#T3QYtL0AI z?!;2nk-mgOue1(?`x8u@6`$sr!?F$=M6kqn{W({q6*l8)_|Xa3}{ugkpGNiNCGDBjD!WIN8qGBA^HL)4m-U_`!nyW5*BuFAwgZteA9Mt z+RmKQb})APKC@2S!Db)R_c%*lg8yBI&pJG=)18x^cQ*7v3Cn!x1IzHR^h^qmNT)~G zi9avVTAUCbl>&$VtU3k0Ai)Q*m@(;|_ib@fx0-iD4D}Lc3(U$Z?|4^De5d5a+kwC6 zcrf3e)=n;FhJ8vqdEmj99L5KH*J1?=!gjp9Q z1>srk_`y>fkB9G)AOCyW@rMV`Ic&AeJ50>9qPWBK3f~21BmZMz`a>=jn7(kYSZ3!Q zvCPiBVS(urz3*|DK2fJ(`b19+W9JIKuE8xp<^rhhjj)NA%z(y6ziEJf|NCFCFuU+fFYz<00_ zN3UN>=o^?j_DVwEmXwY8yp|Bd`?7DnaePHS)bdsW$2+TwV~$%Aa+7aEo#RZ~5_tSs zWlfN~;Y+riXiNIa*{PR4Vy7PZwj-e)-Z1r$_nid3tg}C+XzF_T6#&(&72t;Edc2IPx-+ zh9u`OGvS~0fWy?=k`QCPZc8TyKkM~p>G1fntk;orYzT|q*gazw2NHVzQ?-Kmheizi z3vt}VjwJap C%B&p# literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/computenbody/particle.vert.spv b/data/shaders/hlsl/computenbody/particle.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..df56eaae263af31ba0e82101e84397bb102ada75 GIT binary patch literal 3484 zcmZXV>2FkJ6vl6tDO)WfvWQw+P(dLhxP?euYBiOFIMrg~H#5-rFot%TGR5d8`oW|E zLEQHh_kG{@ecu!R6~CDH``vjDxfw5c`kv=G%X{AQ-aB-4u3M009a)z3Wqz>_wxhhaIZ;0Ug3bE-vM!h0w>0a`?N0tqR_jv|z1^S$dH@?_3&A4L#Xt33 zB$W8K1bcj}GTWS#7&8V8+s%a0SWA$5V zxz?&-Pos_cR5R)Be+pXj=IL5_c2@&4-(Sr~sYJi0VqbT8CGSPsXL_b_V{Lb{-r&Uc zsBVvwjfvWxef8Q+*rD6w-rX~`+SEjS65E=KSzGlNz_P49Ro+*fDUVjhw(s0txjLV7 ziOJb>^6k9x`r%6D+AEIvoNZ&a`M*T-oO!!%3z|OfA$-N6C3Y*`qkKKF<73;WydLjH z?$f%17WdrawLR4C$u?k5S7)k|c~|v3Z-hMW+`IOX`##9?dxblLe&D0ubIZf;S&M$p zSM+-(x&52(eAfb>;DgxuucDi{$8`qq6g6ufpKIO6;_N44?8&^#+O+mOaWDkvi+9^UzPLh7+>Au!%_bvxaZo$OzeFP zu!dNT$9wf`#`LGVQxnGbr@48j14Nz7YCq0Wej2O&T0=g->Un|>Cf=HNcmCe!xAt-> zc|U_>oX)DEDLmnfOguQ|?SWV@H8I-{1q-ezV3HKgjAg7p#pd2{tj91V(K~5vw*z? zKO5Wgj?&wD){Vdz^-G8}UrpQI{C42k_fd zx2|VYv&InXoxnSay2IFaCEah%y59fYNsoT+fw%W_FPgfwqM!S))g$kI?Do6|(9~l; z`+g9pN8Ur&?RgKQsry?H`#plKKFUpa2af`Ku%5n^;0R~e_ZZOc*_@5{troL+9J_rs zPoSyC8J*3OKs|amitU`^4xYmH_eecrp2jZ5Jd<>V3Hhw!FCOyvR`|(lIy?fugkHG;DckoHljB{_l_fLU) zTgScS#)bbg?C?k3&(YK?y!(BuUjQ}X(*Yv?OYF#x^L~YV6CEImG${D9+IL>&K+Wd+#1UCEfQ#{xh(iy0zw5e*vD! zJZC01PQNq#6>I?h&Zzl~{RY&FXZ}6u5%UM!y5?C|Zj5tZ!uluBukTRe;oAgPyN3OG zS<67p$M_PfnttEebAW#DN`Ft%^!H(J2KqaJe*eEwi~KFv`n!Psg{*4fKNnknH_*R` LRqbDP+zS2!bpjf< literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/computenbody/particle_calculate.comp.spv b/data/shaders/hlsl/computenbody/particle_calculate.comp.spv new file mode 100644 index 0000000000000000000000000000000000000000..f940caef66be7ba68f83fe24e7344f9b0c90a78b GIT binary patch literal 5412 zcmZve`+Hnv5ywxO-K3?ZgZsc%ctn-sCvA*afo}AC=#uByL*q&Fa^>ob!eOaC*>|(M$*@;eT4jr1#N>v)mi>+!iAxAOw z6Osh!nvH9?v{G)C&d*s)`tYYYm**OoX)kgH&O6T{(RlKq5@XgJYs*A1W8BCZ$ zvKL)joUh)S;$pH7&3V@B6f<3SGnzAPRBEkkT~9IqSFTj5^=dQSRXesj*^f~}oZA8P z-Kkwj2GNbyNsl@84WsMT#k7Y>?Ak(!D_BkIaXrPSs?EF3-M?A5g+{YfIa#gTgYAA! zWZYb1{@i}_<#W~Bc%fWhI+x3yI`cn}<;v%OFyq$p_atW{uCdsvEz&TLy{u+@G+pFY z9nZK*N9?he#1@k0;qrYy*T#`98RM*qaNbcLvG2QB5&OPt`yCPczKi|Fh}FJJzPDn( zJK|Sn*!Oi8;-g>OpQ1MQJ;?jT`mJHSx$=Ioe)~B>_wl{B0_+o<>*X#&%ws?9tq(EA z@03rh8)GMO?nl4h6ra3bF8uc36MomoMP270*N66rIP3I*?SBV-Z9}_1p1GWc;leA9Ys1-V1Te=e{f^ z@crQRUF|xLVq4cg}ocG2jiWud!*bstWSI+ zvviKG^>OC^2E7sOT4%clvA@7qXLvvUE3r$6`48~dSaJB?gl#Q-t`qO$&9vq<$hC-T z^!<;HZbG6beLkM`Ue?=-zrA7mTWhcWuG*XD@9$~!>iO^Mz&Cf`fgJXJ?C-z_a@c%> zIeZX%IKxBC(fWrFd-Pl447`gYh`ckfKXLd*vE^LveH%kOOV`VJ=f)9vzeldygnla` ze}7ivZ5j6zYbLPYj+k5iU(~$??ekya^-Usj&QIIfYs*D%N3q+z^(MDsPa)nzd()>j z)_XpU=y#9KTpW33u=9Ct14kZxu`l!7j_5a!XC>D5oVI4RXJqaF(C;kTzSS|Ccck{( zOz!}9&h$<=`Kawo--*aSlg;p5*yfV|C;L2xK92Y}NBt)dd3(@~9^ReWYv)r2%f&sJ z!}k8h48126M1Ga};(5e%@^L?^*qwV>fRoSfevka!+S_t6`g8-urPk+Q)tA zy9cQw?n^uNbt<*j@-BkqVqXpH&V8MRlaGD92itY>L%gltttJw8LVwJ~JF%4cqectd zSz{Sa-k25idy(CUy!S_J9`B5Mbzkl;a^8#Gnez;seB^u|wmId^DfUk0bDI0_%oG1PVwnN)*%u92=+cC;y;2dr}#wtL!6EIK8l#r zIO`8*ocZ*B43Yap7XR^#>p{DxM^j(B$L-jzyAb_Y#>cu(f?X>gxj%(%?!ceU@Z;n) z$7c{@X z`{Vm6{#wRuN%{6&mdoGeRdDCM*MA(|{OZX6_0(R={{&dhKJ9Nm`U%AKvuM{JL&tu< zf!*G3`+j~CET{N%AI?D%f!b4JnU53u#e+5Qk)PVtF8<7|HfXN+~D-jA{K^_~JpJ$?ClKLP8XB*MG( zG$Lo-m%9hX8WVGR2D@`kKZTRe&*^7i`G=XMbNe~61Cfuue}SFv`=1>qYr)gKK=yOpYP+(V0pil?)xu@oPD@&eR94VQC}VZ Gcm6+RhXC3D literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/computenbody/particle_integrate.comp.spv b/data/shaders/hlsl/computenbody/particle_integrate.comp.spv new file mode 100644 index 0000000000000000000000000000000000000000..22e22b91ec475c569bc9966780a053e0ab8dc7a3 GIT binary patch literal 1828 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 J>*N0w{|91f_>BMn literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/computeparticles/particle.frag.spv b/data/shaders/hlsl/computeparticles/particle.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..f976843b90ef456db463ae79e4a2591ccb553a8f GIT binary patch literal 2396 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 literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/computeraytracing/texture.frag.spv b/data/shaders/hlsl/computeraytracing/texture.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..51a8424800684621d173d40043ec8f9a6f72ac93 GIT binary patch literal 1108 zcmY+CTWb_S5QW>_BolABn#358S$z-;jxlN!L?y(K$4Fe)yoC`5S;$^kH==KXf7%zp z@9UWfV?j;zIaOVKs(ae4`$-5_LI?}t1z&ABv?`_@vDw9tgc+jiLEaylXyH~Y@s+0$ zt9F|mEN`!A@nd>1DGo;GqX{tb3-Z=~%Ln80;*z&# zMK$V^sG&d1zUPyydw64!iN3ng8Zc&j$QBpX7sB z-5-AJsV4~!;2U}_hd5#a=f8_ehpUtZQS$T zpwpb#oO&POY888*8LrlSzA5oB-t6bRI~8BoJgI7YU;9|Ii_8C}kN7F>{~-S!PF>G% rdztIOd56z&HL2qhe_VM7C2zgv9L~Ild!99$xSTofQT&%%dx`%8=l)0s literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/computeraytracing/texture.vert.spv b/data/shaders/hlsl/computeraytracing/texture.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..d9bb5ce5ac1267cedd8a6e5b42941fd3271f8af8 GIT binary patch literal 1328 zcmYk5OHY$Q6o!YEf>#g`ykjeg3pI^yjM0EaK*U=MXydlVE?fXjZ4FEO1O6p9CjKQi zCO*%6Gx!ZT%z5AUeCM2*IjvTfr$d+sAuujF^mj zHPqNYLDu452;IH*cr+M~pu-eV>aNb=*Ar~+4_&{Rj(HBpqvp5Xu=#%T<9fTjyYT?M zhGJZ~$>1i)TyN zJ}zLamifeU5gz}%Pbc&%aWUY@H<-`vYHmCSW!q$8WwkPjsBH`SV@2YN3 z#T-h4{!ho9A-oWH@?oIr1?iXOW@;6&x`3|+b%a@pWk8`kt*^e`7zhdL<&H34lexdn}1uisyXL8oIP6Ly3nalZ+Q}>*=F?D-W Mcc$e2!aTV0k6oyZSTS{A6p%Yb*d!Z&K;MFK<6G0&{X_^qJ@e`lS1sc<&Q%WH*@dJ<; z{UwMpInN?aI2Gr4p66L;07ZPB+r5&LMz^l6^}g@gYwx|zKIc+byJB9J)nr-LnziW| z3$xlP)0{O_egB3VHk7wbZ7r|9{1WxntWH>AKS$)Z%)+dT-7g?6Ce64N z%d&Or%oVp)adtT7`dmD7=svG3+j&jsi$I<^a67SQ4BSEN83T6`d%nP3#GX&=`rX*E z>FKqB7lR#<-$U&Ad-&_!aE`sSKQY9PA~nyQ4Xe4%@s9l09OpaFIX+v5x!vGpc>8J} z)X&G8E8ot_MSKahgf}*41>SR-QvzRD<+Cd9S*&*v=2@12SK-~4oby-Woi8uGIAMF~ zo>t?{k3C(Mbb0l@r2A}~e`V6;#cL9_Mh9nDpZMz%@BXZ_32$tF#JlnCL0n>ox8bef zel_cASCMP)UEd+Luig!Z*gm@d8te*`BHp@=5_S@_9B-~Qk7M>kY(Gxqu=-36yO%vV zZ2lc{@ZLH2&K$O%cjd74_T{ks+@Hhh2j<{|Iqd!p&B1r)u=k}m;kBI4dvgJ1f3D`Q zn%FqbVH{^TMX&Bfw`Y25_?+&;%(;jD`i$>STqAyloR9GDV~*2c^#?F{YZ<#v^u~1_ zOqxE{d5GAYSm$A4xmf2t;!?41$-9nm)OwWIGwx*1p5ZY}&UYowFSj1u`}#O$ zfBeo_!~6OKCLc8q6WfPdlKv#IoNJhW1appj)P0KBx~>~_pC*=%y3Y`M?x_1Lv0T)B zj@UW!gRJHIbQC*+saePG*z;IDb|W{u5C1~q%=MjU#x~MT-|rVOb zAN4*U-it-O4~gZXo|>HVh^aP{u|8m zyY~YLhxRSlXRme;FE&1e?@qDb&c!J{o{LWq+jF1GNxaWhAJ6p^u{rUbI!!FsgZVvd zlx)^PL1nhx2E@{ zme@M-kyA(Pxp$?Uda#_i_DW68K6oDYu8(~*5WA1K-}At7aUa#>@_n=ivHpBw*9hDM z_W8s+-V8QJK5|-!eQvSm1z_{!Tlk9DuU2CIul`#?-Dm8*^-MEKk9yyM4_fz8hmJX)x@Xy4~H(x#WvY%MZz4YOK!Q{lt@V{cc*hcDX q!vB^yd57!zo3R`JJEkr+_m9L`Ybo)cSOMF@Ut@LGbDW`4ANDWpXHPi* literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/computeshader/emboss.comp.spv b/data/shaders/hlsl/computeshader/emboss.comp.spv new file mode 100644 index 0000000000000000000000000000000000000000..98a666b4b999a097294bf05fb259832a91f655e3 GIT binary patch literal 3512 zcmZ{mX>V0k6oyZSTc9m%u@gnaTd*cZxiN+s8dI&rq-jFZ8o%+yT%a*cI;9j66F-y? z6aI;!AQ0yfoacF-=Xo9|f+9Z8y?Z4mjUHWH@4Mc$*WP>Wea@w>cEhqPtI4vgC2Q01 ztjcODk*2Jn;)l0hx3#ouerIV@|E20JS)Hz;wUSc+*J4xUiD~1iZN!bOs$h9FzYf*> z?T7_()`I76oEyUf{oa{KWL^?)i~w(A;(ZlWV=X@m;$oQ?jG;>nUW7 zSsyvG<+<`yX-|2sG(0)8y*xQGy=P`ed46JMdgL19Y?yJby$N$&a@VmQ^9kNtr4{bn zd0nnt^JBe?o(vWbE~kD>lp9Me~odx;~aBd8e?uZyok5Y z_Cfu8d^I=A+L^f*-izwFi_N(J@4kyzFZ`m4&nj{EX1x;TUe>}l;$4?9$6tbXym7fN zn%o|^rhdHnv8GL6b>r#-cy-Up@tg7L#^r;Fo72G_wxsxIin~7RY{QG~k9;5AHOPCZ zxF2r~*Q;4qyMkPM@BBV;`|4fsk=sYtUxQta(u=pQ&wA`n*ap10);xi^2f6)N%yIRT zIqq6+$#L^fT?dPE!SHEKkKb+&P@5mBG=-Up2Wn_92cvoT68EqT4gQH9V)gFmsO5-!1sNQ_Od6k(>|l?_oZt;p+Eb#;qlG zp6HG9+?zCg%yS>uoS5f+u(6ouUGQ6&kMpQMfEjllanyPc>>d|bvwL_5Gv>Pz`!{wq zy7%>A%>FcE*6_YQf*FsR$H4aCrlcPS8*>ixAH^JV9E-Y-fvxMjQTK7M@u>R**nLOc zC&9*|?o(jL7$0LU->0WB=Toze-?3+~dhB{`_yGRd6f?IL^BX@(H+{dK!_+mO8q6Gf z)T zj+f{4PvPqRKC8>~`e#Y^_gY<^pa1iuwt80lGwJfY{#DYulP>SV z?C(bW*O=>fZGJc9p?w4P?9~qA<>Djw)d~CU>`C|p-nq?L#5ZG}%PG9)s*iI$4K^pf zQ-6Vtt*ON8vlYBd4Zcu3ey7y`#*AA_9JS7Xtrchb57@mJH^=wkEM`2$__F55)WF@N z@fcGJHhyz@U+TctF&;VfVE4T@oaA-tlI*ImRPrCD?O|HMhXcGv3Tiw_mMb{^#F=d>;UwYn=JXq({AP z;l{@JmFUNRhZzgIHudKFq~WrN{g7hL6|o;v%x~#f`VRjDcD(uOv6e$%HPc>O#4y=&K>70$he{=;`a%u6GP}ZM8)#AB-=@YkV)x z3SuUJ2kzapu6@qh_Pz~0_pF0g@ZV5$U;n191Kop0W1Igc)_R-QZP~g$1)H7kr=n0< zXd`A*&*q*D?b~`bw|A}I*xR$dyMNopH9Z4;8~eML;x2TN=iWylt|fOLQxTuwt%J14 zT|4*7_1nq@vWKBt5}%nk4KJMK2|fbueuIxp@#a^8TM!@pa`)#G@l}Jg(8%sbgIkhM zT#Xb8+xJIo4a_sj^?NV;T@rrp%QFWb3-(OG>%g8Vcs_(?${n7A?ZoMBnAuTFONXPsWO*#5|OpxuMKm5L9ct>JzZ>naO~ zwfC;?Be$>4hL7Any8j`_JUsTtx;`z)Nmwh|SZiKMpl6WVkEI#ce^m)TFXP6apK;@7 zlF@e=+-#=XxcGj9E-GVXou%DDdBC45iD z-T&SazAxkE?=Rs8GH(9C5`HM-<{vKMM>1~y(-Cy4nK{S)GI8m|92M7y=bt`m3TI?pGc zI@WmsY)q{4B3N6j^CS2>#K(2?zl3Oa9dXop8SELivuDrn3Zl(-MVw#T68wH%Uq$Rs z6=ID_^lOOrsQEhBKHQi5Z-BMAhVgGA=4g+)Z-K4rx>5ISu=c3?4%l-?-FLy-qV9WO zbF{BytzPu|i0kRIj_>ggkfF%ke4;whA10fzz7zZoTR}HF&>tcC6(2s9#Ta|zXGXtg zaORF9+M+kUt3F1KBXNdL!1gH zl$#SZzXDs+d9j8yzeco2&2PYY&2QnpW3*dSZjLkRtT|We$p0SfUBz7e0M_O?%-5$a zpK<3??q|e$>ZtcK*qMrYzkszxJ$>5DKZZ8n&sCiHH?Z$C@5c4z)kye%2kVb|^4xzS z`R$qc^4$MN^4BE4JoleW{@Uc1k3nMnQ^`Lz`Q>^3>Ey3VetGWyGx_V2U!ME_O8$oA zm+QB`Gtp-d&+plGCmz1P;m)YOJ!rXjFS;?|edwly{ca2F_nJNTUTVSKi#qOgEZCTM zm(_u_jU&f*W-E9y;^Vtae?6kzTH>hH0Jc{2v=QuCv>W4`H-WWB&Ny(MGal|4wMWhb zu=WS|oLgfe*gD!HrWx$H?@uw4z}k$pSNgQs2hZc))v=E$VD}O8-2&DY^Qcc--bZ^7 z>rVx{M({SU_w!)d&osC(+9T#1u=f^wJ{NAB_A1^Eo^?8yf5jQm@4d#I`x`}n)H{n$ zo7|Z)F=oo|dwKYVfPF{Vn*+Mw;)CF*e+V3Nfjx_MW9-o!u=dEg7@X(Kg&!bJd*pP0wZ}}& z16xOX#9RXQ+;Kni!P<=!m??eQ%#S|WgIIqd*foML z0w3fYF;k26A=)G6a+T_kuIXGtOaN^+` ziqG#TdvgRW7yDZT0ktF;m@OZ81};!8am4&XoRT zh<0mKW_1>7@gkDQfY?J-l=gRP@IVr~F??zo>- zU~R_QD}CCW3D4u+)v=G8!0sbv>SnOEm??eQ%#S|WgINC-uxkXr73}@QOx*@IMtj8E z4))$+&v(F$(;hQ*CzyZ58PT85l>e`$Kk8M0wXICQ|Av8mcR6eNVpeux(`Q~McsN*_ zd@_0jybZmAI=$$TaBYf@%HOIx(3KGVa$`qv)zw7y&q0)ThACW|q A+W-In literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/computeshader/texture.frag.spv b/data/shaders/hlsl/computeshader/texture.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..5a671efa5eba157bb3ed34066e4211b4a0ee9bc0 GIT binary patch literal 932 zcmY+BSxdt}6otobu`XS#T2z$Ox;+)~K?G5dTKZV1wfZIzg9N$}Q_+9!i{SaDO^E|H zcg{I??wmVGr|OO|OU9UjIn$R_HmNz2wivZ&9FtLIKlFkTLP|kJNndz1(k^YX%C8c$ zCTF?md*U}P-WtKsd-tWm(<}17qG{+i$AfVwX!#X*>OZ{UWZ*A&dd{gty<%yQK)H{06U zT~+ax@cB6pt_rUy(~CantIG6&M=vO&;}?Bhnc3hgI#pDzi76?wr)EQ$|4)yaa8;Rl z_&wF~j_B9Y@JVkL7=O&p0^K&W;tw|_Kt2Ef literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/computeshader/texture.vert.spv b/data/shaders/hlsl/computeshader/texture.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..5b4eecdc002919dcab4bc412bdaa2556efc36751 GIT binary patch literal 1820 zcmZvc+iy}q5XQGqsP)oXYcJjqS~W3EP+!!#5V1z^PVB(v9f`6_r zCVsy?vq*?bhMn)5%g)R$WHY-<&Mi3SR@_H@v({Y3n5@TGSKabdA9VXeKt_Vcq9o__ ztlv*%$myfRuG5Sr$!L;Db$NNhu^REWDJFlrlg6w`PkxMg<;iJ`A2Dz&sGLr`B)$DI zk}dCbY@>1frS~c6$EqwZFMP;5h(GtfY9}tQJ70bEIYD2!~wHGCv zy=VBs99|J-VdtDxkA6Pi7G9T5Zq6>~oBrXDg4GOHl#Llt6MazUhIaCCH`p(0rw(}V zreW#^Z)wMu^T6ANv9Bxh740Q?T-AKHxpWA^x5) zJ%pYf7^YwRA898x^iVNO%}-=!2D~kDfaw{1!7x43W5D#xY~k>y=k$NXxrfr|6JHj6 z|5mnZ+VQ2AeF^mhd@zIQnco2Rr}C%fn-b~)r#+`$?I#k+bT zU*`5&f}Qsi@>PuwJ~d(D@F5=(R}{JLNb?5Ed+Ue|IHs( zrAg`e`E09MZ#Bt}cnv&PYg7v5e;TJZTPxQZ9dYb6Un*|piz~{F1ohZwrnI)+MAX9` zPin0f8ih(QRjEq5w02G`Gw{GU3pl;toB^CZaP|!+56)gKe^h+Gcw9#Q1Hd8XyjhhB=A8QF=m!GB+a?@ZHpTgLo>6uLxkxu zJ`%7ydwGY&(abDvG>B^_;p}-##-8Ki;~p~~b5CexZq63}5v}Y2eMCDys&z`rF|FW9 z{~pQjG;&W!vooI(KPyfhbo}SNpS+vm%t9|_GtL~HoOj&GdB?_?m44Kq{xi?%d0k%z z^YZR^nE$ufajo=Xmb{F7;}5&|Vi$kZ#UFR^Ctdt$2WPhD9h@`ayQlw*=HX1@GWKG8 zN|^I7eoC10Fg`8JdE8eOzVp+vxQskv@!wKK`ru0{n|&|I(D?SPRzY}47WLomvT%qYmecZgpM?Q-`}|b=HK@tN5JAli}xH|4=+LypeJLiJ>3g5SrEJ_mp{zZwRw*>&Fi>G3eH>C2alh)6aaH z-pAb_j^7HKWlNaf6k?c#?-$K_zZK>@jK33R-W|V}_rk=W+q?ZB%)1?vS>8us^zT0J zlQ6mH7V}w{{#JWim^kzY{;b===sc$F2&1uo)4q5uq?Nleq4le*Eh8R3zrF04JBp7v Rh&v-g!^d5P|55cDvcHt{jxqoM literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/conditionalrender/model.vert.spv b/data/shaders/hlsl/conditionalrender/model.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..b64747cc2d645469bb74d85b14a7968ff4c51318 GIT binary patch literal 4280 zcmZ9N*K<`>6o*ep14Iy!s>U0@3PfcTaa1%!L1r*F5X|`C%OwVhL+;HaH#j`WjQ@b+ zi-4nI@4a`i_ueb^`Um*pjNfV36waKp#-dTV1Nm2LVoIM?c_ZL5tj2j|)Y!$X%33=P7yrMawS{qUt*>yixDJ%YKu zV|1u%VslN-b>$pVt<-rW`h}~@X&!aQ=veKtp~3oajorGYytQp-P3^&1+eqz_A<9j2 zO=WK6ZA(h%>Ds+Gte)5cOylGoRcPl{YU*UxP3(Tej`~=oI=+R5pzC)KbEIocrY4K@ zaesXi<6C=b)$w|zTK^v~Uwi6@YqGgAK9u%yO=Yl7NA1yK_>oF|Xl&T7yH0z0zQfh7 z?Uk{vzHA7dN-txu^y4PcAWfl9M@jd1B<&6f&dpBwm^)y)o$a`Oc zj{w*94h6sIyo-9u<&Ec_oaSmz?^e;aJhio?=M(qSUM+idU=Q6m_%2;J2-NA60Z!P(}-=2p`}(TbuS+UmW)HsXp$ycgT_FtmTlDYdPR&{o!LyK9UMZt;u^H#2vzyJ^h&$mgYtJlgE_Y~p4zmyjl8Nrn$C;8|ct*bhUuCb2clMv`Rb z*@5SzxYQkZZUgUI$_=!Zd5Avp&XIRMy88*d0Nwq}gY_P|AMG94U6T7x8fWAkE8%rG zvo(5d9c1ZD=Z0QF7wdNvvwkH+Kl|-E+7>eV2IRy?GdCgbL3|9e^@abj8P-0Ftj95T z;&D8)x^?^B^XFlnC2-ywZJprLnLQ(U?PoG;mlLnbaID*%;izj3*t)~M0o^@DZ~8NA z@62~`hC7+<^$uop+3Pd-Z!dlO<`CO6-*#a8v>0(s?eN)z|9R}UDvw=Tyn;;j+T0F%|2Nf~z-(@Nc@1JdvAx_?z`Jv}8+}g>8-HyMdq&GL zd=~laTNmQ~1D}X)ZGrura{qno(lhtB#u)vyt-{-!^6J*>d+la#)^i=A-FF%}uh01K zxdCjPKIRbXquu+l7xBz|+vf1D+=%Q&%KRd_kDCxV#nFVguUO+|bl32E;2L6M!hQ?7 zb;cUzycLn(KplQNZp%2P1KjNy=X&9HN5;8+AE#%%cOu5?uifvEb$FiIti!v17vlZ3 z4mt1t-H3eD=3BTY<0I}~a53&aIQi(karYzg5%&OkG44S)d3$BQje7`@H_kWsFygz) z*ZD}s=j(hFPCm}4E7^)31?Bzo~3x}1K&?MIh)&EURA-;Y?oZ)P{MocbQ-d5CM+?;jAkSo248 z{iD}Eq01?b==GKC&G?@YbLbcS{{`Lt&qrKStY570D|&v7-@tN;Bi6VgtMPX@eIoxK z=;mL5m|v`q`KK}eiD=j6@1;0w%hBcH?VN%x=g_~ESx&qAI~CDxP1@TsF6=8ZyYEPQ gJF{HaPs{AS8SRsq<-)!)v$tgSDa>;Ju;NPOUni(<^#A|> literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/conservativeraster/fullscreen.frag.spv b/data/shaders/hlsl/conservativeraster/fullscreen.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..5a671efa5eba157bb3ed34066e4211b4a0ee9bc0 GIT binary patch literal 932 zcmY+BSxdt}6otobu`XS#T2z$Ox;+)~K?G5dTKZV1wfZIzg9N$}Q_+9!i{SaDO^E|H zcg{I??wmVGr|OO|OU9UjIn$R_HmNz2wivZ&9FtLIKlFkTLP|kJNndz1(k^YX%C8c$ zCTF?md*U}P-WtKsd-tWm(<}17qG{+i$AfVwX!#X*>OZ{UWZ*A&dd{gty<%yQK)H{06U zT~+ax@cB6pt_rUy(~CantIG6&M=vO&;}?Bhnc3hgI#pDzi76?wr)EQ$|4)yaa8;Rl z_&wF~j_B9Y@JVkL7=O&p0^K&W;tw|_Kt2Ef literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/conservativeraster/fullscreen.vert.spv b/data/shaders/hlsl/conservativeraster/fullscreen.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..46c4b31fdc1568cc56662cc746d3a2d10f9d0983 GIT binary patch literal 1312 zcmYk5O;1xn6o!YE3x0x#h@W_?af7CDWiW~q0TC5jP#d>3cEJK@YHL`Mxc66?_?O(6 z_&oQ{kUQis=Y7w)=e#p>TCY8r4q+mMFcbFq@0ts>$kYpLbT*tj^ACFmM}it=#$>VA zL&p9UGAsT<=zeUEM}zSQI!uve+|@b$eul06x$8I6MV;gEsQIHeY<}AMve9nuZ$2TO z5iu|I&CqfOJm?L3hedX`KOFT>c8YY zT)|i^>xt(Ic)Io&C2G1FIr)?`U*we7n%5%Esj+}>zf$`o_ffv9XEeSTv9;$>dV{^e zxo@)Tn{%68E!Jp&@3VU^^2Q&s8ELZ*JHCVnwFYj_2vyS{aocH_&Q@3;E z8N}wL_zr%G+uJ&CG5KGy?z_l2dp{%h9$(&h+k^8AyO_KyaUbyIe4h?kzHu8f*O;^E ztg6R3=wRw`M%61eUv19M9%kH_?yU5atrx#2HQZSp^E5NX E54V0Hc>n+a literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/conservativeraster/triangle.vert.spv b/data/shaders/hlsl/conservativeraster/triangle.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..66b032f99823fbc55debfeea60e8770d4c1e4ff1 GIT binary patch literal 1772 zcmZ9MTW?ZP5QR4&)Osn_+KV?lv?j(F(I;bKs;8m?+V;@W@=lcpOyLj&6W{y^{#;*7 zT;D!>8p>{_Gi%Ld&&=6vA-}WaT+TVS;=20HS#|lq6g9_v5Ge=w^3>`iLzq|-WSC5JEN zR$R%?6@2w%KRLz$&z$LO>XXb-)Lj0auov)s#dSNa5u-CVm}7H;FV9_a55$dolitu* zANbsca@p^72?xyHD;{N-ZvdtqetMkuGxN5DgCAV=$hoGX*%N0cQx#W0 z9Z9(RS->|J@QN@8KlhY9`u%Q8cuh97xx1p@%nyfDLeFrKeC&w+nFD-BntSOBye>`8 z)B|q>jDJm;o6=Q9Y)NBtA8!P|)wm~{`QWSaKMok4noj~I2K+Q&%YQCRkJj^xfSHH* zU1@UZ@r^Ju@m9zIGZS`h4l|QsW@J}z#4}^|f5Ev|vY3ll4s-rhwY$>9(t9l7e#3in zm>K!|z`v__W_l>0AH%$P?r!TYcJxR>4E$Sp$cMv@rFkcNie*oA34Y#()%y^5i}@%V zONgNcm>B%*_LGEt@uuL|Z$knPM_qQ^l)zhFOZH;kXL0b>4|!iC@Yc`1Y_R ACjbBd literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/conservativeraster/triangleoverlay.frag.spv b/data/shaders/hlsl/conservativeraster/triangleoverlay.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..da33b821eaf29f96aa6488c58e046539c523e972 GIT binary patch literal 392 zcmYjLJqyB65Q}}b^#g5-pqo@2m5w5aii335;wp7>P(jq$pY0-;JX`34yvtqga%Y^e z57Yp35%JfH;1m^ObEyG5)EUJu`S~irAwn2iqY0UT%Xp&T!ngYE`AA;*J=q_Q*=Cn+ zGwLp#sy-=mc?}7@zI6g(@(DFvq20iHJs{JLvNq)&yU5atrx#2HQZSp^E5NX E54V0Hc>n+a literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/debugmarker/colorpass.vert.spv b/data/shaders/hlsl/debugmarker/colorpass.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..cde88b5fcd7a4ae6a9800984cc21bc9f292bf62a GIT binary patch literal 1684 zcmZ9M+fNfw5XMhiyWkB3Wjui(L&X>f^4esdB}813l)YW@ z`b3VhepJ{U_mWvQnPoCvq)0eUH~k@;$56kSo~2W1@@`0Hzb1qF>?D=x^WZp8W!<_W z`|ExpU*v6klWBT7_?8V*bw_Pts69%*56+~?i=^`!3%>v1xc;+0t#^}N=SwF!dMdZ# zB0pE~HIu{SGY)v>OlO%-GDlf+`Fp}%z;_gP-0O@Pow>mrn;U#_?#SI0H|bCNBVT>! zb6d(~zgHz3Fnh0flw-aD7>%DE&-0W)hwn0ttUuPYbKuGZzdCLK$- zdne%Qb9hOZvnBtkG_|;k+RO`wR6>t%v3$$Y^h@91HEHf4AAB=l`U0;@)3f;0l zN}JMEMQll9b3bpyW~0V!VdjIc3O@)K9{Da zHzfGk?Y@M4@uuL|Z&LyfM_qRPRswH%?_|&Cy%z^>{gBs^z>~+fYD?(ZYO|A0;D0Ly z{2_4U8g~$Q`mkDuvYCxq%myZop4s_F34VNh7qIzaZ#(xX+_^0b$043K0f(RORFlM# Of&@Qr1n#ex7m|OD)m_>E literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/debugmarker/postprocess.frag.spv b/data/shaders/hlsl/debugmarker/postprocess.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..7a15cf74b4db0a0da5ca67e10e6faedd1f134016 GIT binary patch literal 4124 zcmZ9P*K<}?6vZ#85K0nCfP|6|J24_EqSOcxdmw~>72}w3GD8w32GJ+=%_sjPo>Wx8 zhKggw-h0D>`uly~-I?P#Gl#p@+Iye1@45HfFVxm_Hx|XLq9_&=_j_Tq7B!_(Tj9#h zMPpINRXjd2HesNKX+{hGs5#h@Dfb@N7-SficQM^7x%ZUDaVwFY=6b1k`I_qXXx_vWSW*1`DmKSw>0VmX1@Go+zPfQ=G~;UW%_X)Y9E2^$C$nPPN+q%AA{3gKY{1IpQ5RU?`L4O@ckU@w?aL9zW}?oF@1ga z)WY{maO(RNT;Ft$zJ{yEo_tg0qe1T|VEv8R+i|XH(c6#U zw6~w&d2c_XsfX_`V72i56|CmIgzs-)*EXiF=S?kqe+TOu`RBlDevi%fJgPJoL z&-pOwQLani)|j`SuaCc7ZD4hC9s2lvRu7-0;M8XsJoQ-)_gsfhJKP%c!lwhQZmvTg zzx(RpvjUv@tc0gNtKgo|@L3JF#=P+91go3t(8u2s_3-Her#@@osZTfDGZ{V?z^ySa zd@cm5o9ocW-zoL*xd@#4TntZrE`fWN!{<`CHRgrSWngu49s2nDryf3Q!KqIVJoUL8 z?pY3>Ubr>ph0hgWb#op1_`9keKI_1#&z11hXFc3=89rCRtuZfrt_G`{>(IyFYxVHC z2AukAfTup!!abMavk`8MdEs*%SlwKQKK>n`9zNHDQ=d)n)Mqo?GZ#Kv;MSNIK3l=+ z<~sE8?~97g>YlM}#5_|^v$}jcT&)>wFKT^o&qL(g09R{4^Lt><4!E_(qHZVH_dDwP z;cBiObvMGTH5PTdz`n0hcN1JK^}88vt+A-P1?>A5b+^LRS`)w9;MN+8y4%60le#G0y;{Cilhf$Kd8<~TyTx73tF pyRX!&-OXRAz9$FKtT*4dz1x$2*BXnSy5MTY{J(|#Je_Q0{s(WpJEQ;r literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/debugmarker/postprocess.vert.spv b/data/shaders/hlsl/debugmarker/postprocess.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..e17bb01671266c1f9d554ec0437ce57a69b308af GIT binary patch literal 1348 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 literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/deferred/debug.vert.spv b/data/shaders/hlsl/deferred/debug.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..af4e223531f4b7d8015c51b6a6bc92c6c832b791 GIT binary patch literal 2076 zcmZ9M>u*v)5XF~Lz-KGgK78S&Xw+zk#>5!k^^umwaw#wCTWC=+!X*eMe)CW8&-IIm z=eKv4Ah#K2&p9)@GjsPgIakOSlQ70Cn67?#vS!XPNsCbz&5_Bv*Xs5Gb21|4Whq(O z;-p=-C8qRuNL;fPjz@#>NK3`cTaI-l`aZ#&(P+jwOInY94m!ngJ0gx8I3B2!PCcb{ z<4GtjZP#dnVf3}LKk7!RF0CkH*tZuQbiT=xr)J$A8C!q1U;NP;7As+`R4;|)8S~;xlY`l;{4*f^tk=<}QDWwcshnpMtf?}JsQlGJ~Bbdj} z1ng%*FJR_fj)uLKnn@`u5FWIKt)4xxYxmmJUc8H=G9EB_Ig4V`u!&c5dG!VF#%=3KASD-W1+vKIY% zv?jc)HD|^1j^_b~(R@Kt$c1do1Q9vu!`blBH%(_z2gEr+R{_`CA- z;QPMsFf&2lmS=zZxF^h9z~q3L3+sf#%z?f=MrYn0GZ(%OV#sGM@&7GjZcAYn#PTqk zKid7gJhAk;BjbFJ%TqX>NvuCmJU!=S)CXoJ>oU&vdO>UItEdWQd{IUYacB<}9mvD8 z=6vqwhH7Qj69^!QRnEE;?GbN95SUTULuFtO;o_g6Az$u|SXyMHZ%hodg;!5bO8&wH!&Y~DL@ z@O}>Dy_doJdOm0!$o$^a{!s?+du};SZo;)4mzd)A9ml(^s2c9)fsB0O(X+DO>I-aOPzh91ro_dpLA@zam4Y OFLb^GxW8iV$o>HkW_h;& literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/deferred/deferred.frag.spv b/data/shaders/hlsl/deferred/deferred.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..5aa3734ec88edd5c9223dabd7ec5ba25c39af5fc GIT binary patch literal 4452 zcmZ9O=Wmx)6vv-#prx#~?9#zfv>GDDggA;4ctI?(^o5COZG*q0gLELi5@QU$@|FJx z;6zs3d+&*RZ$&^+KcA=1X)j!RJm>p8=iYnnIrlz4D$3hyvaBr2vifYLiZLrI&zah+ zI@cREZQax{GTPg5*_uoB*Jl-~+&3eu$ttnSk%8{gpuAqWnOO2{fK`!Ip?e^zSa%-w z=pDQII#%~~lm@zY_JQS%8SUFMIyT(5YiOi2S{fS6`2`U_(mk-Nzi$|r^VR5rIw#&e zi*>Fa8XoBGFXE?6#-GDaos947@9FCuD&nV2#wUDLw#az%AL}uc%qw$FTdIolF2>%z zt}8#4wxhqa^S03uj`v<7%>v@Oe$f8#2+@4Xokb&4@$n{YbHWZ_~-pFOD;c z?Q`lEr+)jL`o;Rq-TC%C^@~%#{ZIX3{pRg_??LJpr+(|4`o;P^=SEJW?PwoY6I@xr z%|u6BdBJ(d+}k>N-WJ4|xJ&6;a4>8dT#s%+ zTvNYz2I2^8&gK<(7Iqpx8|+@O{v2$^HGvy)xcBOq-w3we;cpuEch1kI=HCl*bbZ&1 zA$GKo0gR2L*&KF(eCY9bBJ1jZiQKi);8usw0GV) zt>8=0#>?wpjn;3@;xz>}Mtntq$NOHHtu3&5Eo3j>w%_aq_P-hJoE~&J66fkIaICqf zz^-BZz5<)WTCn}{ojb(#$sRbuZ_bYJ`)(cK_nkVz@4Iw}t+VgY9L3hvI+hjKy4qv8 z%gJN~+E|CRJq5Y|?Of}(A2FZ62NG;O4<^|72NG<3A55_RhZ1bPA5O6TM-r_6(FE&1 zlwkdjC0PIA^YD=b8-Fyx#veceg@H}IP9l=GY@;DKk|4MJ90LU z=Me8u zzK!-hsNKu&F`&r9x!n+0M@4`v*VY4M}$T$Pm{~jXmTH3MJ``E74$yz<=50F~K z{X6MkFZx47Ue0)Rockke{c-M(vE>v;oZEQM{R!e-xx1*t32f)cdv@RE2_)h_#g?n% zZq}hcLtJwmqR%x0=h%~HsLIdq1)TgWBy#@}TRw9C3R_NboS*yGaB1$}fSn_6 z9)36EBKL2x<;>l)e}}l{dPHB$k&ijwW5;=&^8*rd^hJ&2o#TD@5lMUa6L|9cHQ65U z&xpLeGk!MWd~5m(qCfDj*w(a;{_Fn@F$dp|zB$NU^iSXKi2erT-h%rB+cou>uisC( zIOCt#2au@CN$fbIKIa@l%g3C*u;l`u!nRKL7ki$@Hby@3K7;MLD-qwBF|O_RTAyoK zzrT^Re*b{e`t1XsMdYoY@o|sr(Z7g(*K0%nha5!WUYUfP;xMOjS$gX++$^TF-%#k2*GBJ5N4h8nMkS@^1q3m%j;pP1rGiF4#4U ziTU%e(_YO78z=9%k1=1)cx%4^+x`V!2sXxdr+*RH82N}0KhWe;&HSk8JnU!Pq1yVM4b{oAqK;|Ati*QH=NM{vsuPCB^d1?QXC m%-!=1t$=gB@%kI!%;9+9b5G+gM&$HW7Wiyd#=on}vi||eb$vzv literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/deferred/deferred.vert.spv b/data/shaders/hlsl/deferred/deferred.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..46c4b31fdc1568cc56662cc746d3a2d10f9d0983 GIT binary patch literal 1312 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 literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/deferredmultisampling/debug.vert.spv b/data/shaders/hlsl/deferredmultisampling/debug.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..ef7357ab44b47e8a383efe79da3816baa93f6725 GIT binary patch literal 1716 zcmZvcTTfF#6on781+O3?7jM{tQ6r}DiI^C*3R>{iaw(#3Mf!jd+SJzIn~CrKDii;b zFD8E9IWwdo4q41zYhPy1J_EVoh0!D#N|IzO`M_`2L^2$dT*~#1C#R0>gXaFBWEdEc zPxo9>VBbY7@H2wFy;zM-$-if>vY?nS|5A+ZMqsE${6b&wD(${+0C=Jtj1{CZ@b?se{FWlThDivYqgD) z`)OQ0%M14_aOZjSPP5xQNTat~-CpZx?QpMkgkGhRGdK(G2JSrMF8$7CE@c_F4{N&g z%S$OslGV_=bm2c5A1b*3R>|{@F6+lU?`&S>gmyB|xR@8`8_%mUD>d&mjqO)2f*CTb zBR5xmI&kki2ltyBqh2Ogeg;h8b0$ULS`7Rgw!K7t9{a`sAH%i}{hm7xT-I|AMG*7l z69e4%i-1*$`I9OA{>0udVH;!pd(2%v1&k5qSaTYTOTIF|OW5;) zKO){cEdbAd%nADB+Sc(M#kd#P`hU}dc~#(B^8Ne@+A6kj`eNJ~wz}`C!HYydT{nNVDG+5?;$rf`s>)y@A=kR2kJE@=bPLJ zn!3w*|D?XYO`zX*{v&8xLH8}Mqj|>$P2fPc|GTU!7C literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/deferredmultisampling/deferred.frag.spv b/data/shaders/hlsl/deferredmultisampling/deferred.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..94c9de6fcc2ec4d00ef0d1928fa217627549cf68 GIT binary patch literal 6656 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 literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/deferredmultisampling/mrt.frag.spv b/data/shaders/hlsl/deferredmultisampling/mrt.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..bc37efad79d61f38f9b63673e1720efbbdc2538a GIT binary patch literal 3348 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 SD|1)6cGK@WuKMUrQ%`SZQ@xD|Sdr$g4 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 literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/deferredshadows/mrt.vert.spv b/data/shaders/hlsl/deferredshadows/mrt.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..7b7ecd2ea675d60274af81febf4662c6cb92defc GIT binary patch literal 3784 zcmZ9N*>eg1l^@2vOS+nwH?;e}bYAj`7;>@WWMtjcc73EZGgUh~?_(b)Pl*d3dl_w=ZOyRu@iVu* zJ=B^xJ880u1`H7Spf~d3&8|P1b33jXH0R%1qgPCEJOE506%>#}6c%UCh}=tK-$<8p?UqIsQoX_=6+k7|i9Fb>-Ry zmB)C7t=V?oLkc!M%W^sO_bTGvy1yCmOnKy*7VAF zU-D+*iu+Pv&miuGc5}?%jdC92eCO{}!8zCYd(oF|2T#{#YE$_H8hOn!H+;wc__1_~ zW6jC>*t%l-*6taK?OW`-B{oj%nTd@Pdro2>v9-jJ z&odE6KF>lN`JBHv@_7$8AwK3459O%9o6+rQC32WQLCuqKDUrdybkdRydK?Jfv-WgR^V&VBi=qYAX#={ z?^^P0L>mcTf)Uz^klb# zhw!Mdst<5`wy_%DeO}hv3h({WM|@|()*oV02UtB*{j}+Gm^JRC_<@9@$12zv#7vGQ z9CrT2<#y+2{3NUSVkV7*i+ftiW)pVLd+;A*_5HPm*cm&M1qnOjQU`X%o_W~CzU!UX z`hh)zMIG2P@Ox(s>v;x#p8|UZexCws_xsd|{XTVKzfa;_bmlp^7az~!&)f_DdbubK2g4J+mDN-$%S>uoJPi*qQG_oR`=c--S4@z`N0%SKzzR?dK>{ z+QxbhVoviItG_WgUCm&XVJ}J zjCbxi#Cu`P2pu0|eIAkbJEMQ(dI4SAlf;_)Ma2B__T!A@BKJ$^^SR5Jclc#QK6)HR zznu7pdj;Gb_bQyc-#Ys-?lnX{;$BDZj(Y=6-fv>Wy@@U#`+5uA-Y=(py^SuXUvTfB z%Ud(JchTkT-yS@J_Ylv;{W%k{e%dEl-$y*7=w}W32Z;}#55eYeujUZz6ZVhL!!FkV zUqR#}?`rgqkt@hWe8it18xZ-(^(lIHuFv4)&1HSDvBp$cKS#Rf{6*rU{xJAUL_X&H z6?*5KzXr?cSLKHL9({wzD?WZ-e9x^t%la*1zy6Q1H?c8c{|?>xdUvgB&hHWVW!!J^ z4~TgWBHAMMM|5+?zQy{6{U>yDTRU?9j4mI!e?gDj+9LK>baVT^)V{^~hW$5mbI1L* z&)*UG@c9GX9PZ5=VtwpoCF`Gvc5Rmu4%@w8xns<6Rqm5zaz6Sm&ey_j?Y)S0_o97C z;*9ss?nAVDHrki6?nAU2KZ0oQMYJzVT-f&~dnwtMv&w~iG}+6^-p?xcFCFbh{sVj* BBjf-8 literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/deferredshadows/shadow.geom.spv b/data/shaders/hlsl/deferredshadows/shadow.geom.spv new file mode 100644 index 0000000000000000000000000000000000000000..2590e6eed6c8892f7f78b819d7f3db0a5bf7e9e6 GIT binary patch literal 2544 zcmZ9N`*KrN6o(JAX-c^i1PTh)6p(U_D9Xq%GC|R{Gcv6rj{X@S17XNXOp|H>m5YMn zKfa1@;B)AEIOvQse&5MndT@7E*7~jcT6-rQ+jy{=WgD_A+m`*rr)NjDkv}zK1=c#9 zO%+JF(`@G&^wDD+sz4Lac91?VLD~W%COlTyXA0X$ez~xX6*;bww8GyObPJc4hlAd5 zfJpA~LZ`gaT?LPPto31Yz14>sw*x*{@3rc~t6jt*PMt?pg)Uw|zVhyJVN>>W)_UNH z!e-8PzB*{;*IL#xh9#x=YB5JUudg-x^-tda?7ijXk1w7wM~%x=s*469O^uy zIjV(^HJ4J&rTlv9D{zH=UWNCX{br{q*Unu>C7aCVpVKepYu#(jLA#qTT{Nzm9evK; z9S$xJ`mJUsTcAhpZ8PK%dw=4|guTnM-Fp>pN_Ovc7V;SHZVnXaKRj2$JCV)Nfb`#! z@OJnj-Nqdp1bfOlbC3MS|Mj!q@NsX({hD-f*O6<1+fwJuyQ%GrHORQ*2|HIAPk}vQ zcXnr<;d2|j2JInsD_m?pvwZqy)mfvCuXq}=?k;!@@|ah=8#3=+u-^w`&9$FTccxAs zu{+Z)ww627NBt~WoKam3oBMKJb;iC3k67({!Op8*`#!imn_IizUG3_{`x73`FrJOR zucMsWeGATEj-6C~1wMzS23NM)jP3&qhVf}Yuxdhkm^Q89<&Vk*jd5smjL*)$#$M0QWcjjFN zc4vOC+>`O{Y$D+^Se!*)PYrrT_Bpt|&U6E^zPJIuS;E@eCG0M4mGA*%e@7zTea)A! z{{CKQe~0|Oi(`=UiG2shA$$LbUftCRNFR^7N%%=fKhFv}@3#)=t1V(*LpIiVBlZ-s zvFalBb!2_DMeG~M(OblxMrW-3M(mr&`f6KY)4r>>Ap0?|_VY~SUer6MZ|w}^y=ikt z;tRw#;I|?DryzebjB)M`r0oJT`@V9>UFv7-BHVvQ>W$Oi*sbs$q|JIa5>~#6Z2X^0 z^#$DbAdi}TWPN_2<|X(lq;50x2f3fZpFp0!z}g3pdUGj9t|79y?A5ol205pCdx&1Y zMAjDA|55h*fF7J>9nwd=Gx#ReDc^!mL&m!2JJ387JG+Zqg{)^Ee*f-4>ecCQ>le1^nmVuX-xcqqiUeF_T}eGq5~3;%F7B>sNW zHw31+z4zR6X6DSisn^zqLl_DnOoSc&9n+y!b?OnzPKK9{b+@=E1vNrNMl@nwkNFQo zgWn5!zfSUg@2cOU1ZS~leSCRCJsh#?cgmYyQT{#elxOF6;0B!QUzF|J;<|mDpL9+; z`Ozm@k#oPxelL=z2fx4P`OkgH279<(@~DeB@KteLbO%eZv$~P6@T~vb!6EB-wlShb zh&`v+aR{r2iCAaR>xu+Jtz5!$Xh*(Dw@1dsAb-&0O&)(W~l3scmdQ@!)2E9~Agoa!}s6~zqMTFoq3eVQ|0 z)vme9$={LntWM53Yh?BI#p@MzpU+@@`@M%M?7iwMVSRdE_SEZh@a96;rP7;PhhFbl z?G0J2d%q{#Kj9Bgus(ewiPy7lL;QvL=0!q(UvZ#TEa#b*2z|*pPi*a;ez&CiNG<=5 zd7j(%YVRBV*U1}%bNs%}7pqAgHmTiPy`HxS_2Yzku^RQ>^EM$b=Xu46Tc)=6gS9;0 aTf&}0y?1R-Ua!7odGA<0z3&G)d&GZ2(?44P literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/descriptorsets/cube.frag.spv b/data/shaders/hlsl/descriptorsets/cube.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..58670396edd12fa34cfa993d6ce4210b1b3b75c5 GIT binary patch literal 1496 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 literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/displacement/displacement.tesc.spv b/data/shaders/hlsl/displacement/displacement.tesc.spv new file mode 100644 index 0000000000000000000000000000000000000000..c87ccd759b52dfc55bf3581b3209e6d04621ebd2 GIT binary patch literal 3856 zcmaKtS#uO+6oxw?8G>LEb`XpcP*KsiBZ44d5u%t05W=D*3^+il$V@6Tp~_n?tm4KS zZ=~FC7x#VtG5!meDyw{+p6`$*7k28+IqzBCZ|$B1of{WsSx1&-z1i>l_gR{CW(%;r z`TusdFYC*ztemP&)~)LV)^&kyPy&c$Jzx>I2`mQvRN1$x;L9U!Z$B!=ZUJg8;LrFO z2I)q1DgK^Dz1gbPTg?MUDzmNW*%q-<%Hd|?wPy2R?NaR`+1kupPTlLdk$T-+H-C;* zkV2~~kEu1*Xu{hy_K!AZrm7d!Y}dHDtijnFelNW6Z};H)|QhKf1d@ zu9W-cS}|XIYnEW!^`(4oC+kC(sxw1ll_MkLBb8BVN>pW8ijP(fKRbNzf%g7*1}Q$i z@A#fdis7seGo>)z;YysP|-#-w+?EUuvAKwk8|(k-e_3C)@VF`L66F`N?xb zt(n;x_1)QtHlM1^oUh?#`&pBB&AaNl<=$Vp`y-FLY-~TLAn!{#W5V+@ryn`jHvqKi zcz$vpx#uQ#Z{(g;vEK2E_0F$Y@0c5akNtA*n$H1N75>I{D36tsA2H`_%sH+^<7TYf zXLI7cZF-%%zK%k^AK(6{UykouSMh%ZwhY#zwG1maKLGc=j@S^j@|8Kd^6y0%KgL;w zzZ&>Bj(iO$=GVfV$7=HHu#V*(%hxCFyyUkgZv6mz<@dlI>&!VHWA66={vcL8{W4Zw zM&~xH8fD-b-B)#7qxlWk4q)8;9l4#$-=6aAcvrRw?)cGvXUZE_@2cJanDD7H1YO1c4o&?{8WlN=RxLj0qebT zJjby2BG$2u%l$#~3Jb|y%&B@g4^$RFZ#U)e&-_Z zx%+LCZ($_Q+FBpa{x4?xFxIi$-%o(!1;19{?$zt__>}^8U;RCZe$UO{fg<0Q_zuR~ zh`$}UUvlsM6TrF3H|4gyUx%2xXR;I6<73Qoc@o&?W6ZPJ1$F?RF?Q5DJPho&eisPM z-S}#{FQK^yU(JZAxfiHuEHwAw+i$)3(0mF%))t!kiK*F{>eM^{)HD{FBlz}PZ{E1? z+ta``IHol_*(vwixclWh_zdtqnRD;u`ktHL#Hf1%-~2Gzm$7dGwT!O@)~&<71!X5|1mIc?n>g3I|w%xXF7^+%tw8{bz`6eVxQ&K#hD+% zx5qnUkKe;1U?GSexpnrqhH+qzcfuaOnG>J~M33CMKUhaUb_n!>PpLnKJr1lj_9tsQ zf%W-^dUGd%G2egv*yrc)7XkOfcU7+McVQ)PK6UJ8UXD^KwWEu+QzI4?eFmCYkyD7cv1TYxbe{b z5kItJ-o~s8?Vs@HYyV8lcv1Toxbe{b6+g7s;yZ6+*13mEvA+Rp%w0=7a?it!d3Tm! zUjW8@oZBhvY2a^ycfmT(r3$R|QTH^~SoEC1x2F$8&sltXyvz1jV=Q`J#J9)$7(F$7 nd%Vl`SYs^m=kT3xydTc@JXj2zuRU_>{zfJ4toC2Jwu1iv*3Bi6 literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/displacement/displacement.tese.spv b/data/shaders/hlsl/displacement/displacement.tese.spv new file mode 100644 index 0000000000000000000000000000000000000000..8e360fae9a5160250a70ef69e69949bde699e7a7 GIT binary patch literal 5680 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 literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/distancefieldfonts/bitmap.frag.spv b/data/shaders/hlsl/distancefieldfonts/bitmap.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..6b7210822e121b3304a4bbe5791ac0cd0e262026 GIT binary patch literal 968 zcmY+BTT8=05QW#?V!gGsYEe;I@A?qL2N6U;YUyL4*6N!?3=-&#n2P>$Uj)y$ZAx62 z%${>*XU}ZXseQ+oIb+OiILCo>MAO?^qAP!2R?> zx6^p8w_5G{^GPqqdK-=-D?W5zI(O}6qhs&M{F?(mW$_~~^!m0s7(90I?qB4Ep(N~nw@r%B!%xv&wohm5T#1xg;Q?shf|EEVyxS~uw z{I+U&NAzoH_@p-rj6Y^)f$@VkJb~l;@xWa*WqQ&7QYZ01EelUSI$cucEVaCGd^djh z*WerJ_+3+Q->rP2fzhZrP~a8J`yDFq8lOGVo-jk bKqHtf8F;}rHQYu0x&jW3TJWzXzf$}GH%~!3 literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/distancefieldfonts/bitmap.vert.spv b/data/shaders/hlsl/distancefieldfonts/bitmap.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..5b4eecdc002919dcab4bc412bdaa2556efc36751 GIT binary patch literal 1820 zcmZvc+iy}q5XQGqsP)oXYcJjqS~W3EP+!!#5V1z^PVB(v9f`6_r zCVsy?vq*?bhMn)5%g)R$WHY-<&Mi3SR@_H@v({Y3n5@TGSKabdA9VXeKt_Vcq9o__ ztlv*%$myfRuG5Sr$!L;Db$NNhu^REWDJFlrlg6w`PkxMg<;iJ`A2Dz&sGLr`B)$DI zk}dCbY@>1frS~c6$EqwZFMP;5h(GtfY9}tQJ70bEIYD2!~wHGCv zy=VBs99|J-VdtDxkA6Pi7G9T5Zq6>~oBrXDg4GOHl#Llt6MazUhIaCCH`p(0rw(}V zreW#^Z)wMu^T6ANv9Bxh740Q?T-AKHxpWA^x5) zJ%pYf7^YwRA898x^iVNO%}-=!2D~kDfaw{1!7x43W5D#xY~k>y=k$NXxrfr|6JHj6 z|5mnZ+VQ2AeF^mhd@zIQnco2Rr}C%fn-b~)r#+`$?I#k+bT zU*`5&f}Qsi@>PuwJ~d(D@F5=FbM`5LW^m!gTw_$BR~NmMZ|IpaxRceF?R0IAWvYDalszbLky(% zgx&(YM&5#_Ns*B9edp}u9I>S}d;R~ad+j}^t8+&+%Q~_w>&;&9>sp(2=1fnvBHu@k zo;+GxXiwGN+rLM9Z`S3O+xoI<){WkYOxK$;@>=EApvhAJtt+drpMj{5cP)DR@?4{~ zZ>rXuuAgmy<@ISdF0~iu8zZx=*?C~juann*p*}s=YAo|B;1gByuVfp-fAP#LDw(@; zPF<=(KO50ceK>}#n(NwT7u&7o%>T8+=7f@MvN_d0r?1_b!!ssZp4amhHL6s}vgS=?cyH9*ubmMT@k;! zfXlcy$4f)u-v>5dKb3sD))bpFme@5wP0!}icQanTU-`ErS>jFLP3-0>?xvVoaPr&J zxt*o)&c~Y0!uWo6{p7U2&EA2?i#M}(A?93%*B16cn62#U`uHZiJ7WgH&Rlh=tt;cehUBAi1Tlami^YcBr#Lmt4=Mp;y zYnof^x$UPTVbASMqsPzC^*8?kGJAGoUC!cf&^C5+dEQSD{R5wU4WBDv&)+Oz<3BB7 zYqv_+x%z)L{~_uXcUAQI0Uc`_NH*u_N7Y&A>$~xT<}4z14&9guyqx`c#2Ec1@$}4o zFy-}i9mm%@SU|KnCu@6dIdf}oBXTbjUQC?6&O{u(7trNyrQ8?M{a?z5&n0wyZX}<} z==#Wq&lPlQuA&2bxQckMp3R)b=wlDwgZ7BMhAwxEbNe1YN900`@vh{D>B0AT9q}&w zCddu5e}TyNAd!0sUH(see784{CB$#XU*vtn?)sNmX}gKY`L@)f-YxXk>wO6)?{_BZ zeT81|#a(?3_PZqSIecSs;r|V~T;Olfops#Dcj)@ahtK!u<(MD9#>D;nh^~)(#QcO_ zzMr4LaX;2DMxVGJ?GgJ6dij2S1`QA0WOX=OliZIOF1t$^Aq1cmwVc{}|o) z=<5l(eZ~LsDY`zc;Qm0Dv#;QuCC)P*V`9$aIbyv2+RbfGE%xV#HT4@r#5V1z^PVB(v9f`6_r zCVsy?vq*?bhMn)5%g)R$WHY-<&Mi3SR@_H@v({Y3n5@TGSKabdA9VXeKt_Vcq9o__ ztlv*%$myfRuG5Sr$!L;Db$NNhu^REWDJFlrlg6w`PkxMg<;iJ`A2Dz&sGLr`B)$DI zk}dCbY@>1frS~c6$EqwZFMP;5h(GtfY9}tQJ70bEIYD2!~wHGCv zy=VBs99|J-VdtDxkA6Pi7G9T5Zq6>~oBrXDg4GOHl#Llt6MazUhIaCCH`p(0rw(}V zreW#^Z)wMu^T6ANv9Bxh740Q?T-AKHxpWA^x5) zJ%pYf7^YwRA898x^iVNO%}-=!2D~kDfaw{1!7x43W5D#xY~k>y=k$NXxrfr|6JHj6 z|5mnZ+VQ2AeF^mhd@zIQnco2Rr}C%fn-b~)r#+`$?I#k+bT zU*`5&f}Qsi@>PuwJ~d(D@F5=yU5atrx#2HQZSp^E5NX E54V0Hc>n+a literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/dynamicuniformbuffer/base.vert.spv b/data/shaders/hlsl/dynamicuniformbuffer/base.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..8c66fc5e893233676ea1ecd48eb2a4eebd94a042 GIT binary patch literal 2448 zcmZ9NTTfF#6orSDwq8L*F5d7IjG7Ru4~A%rxA1^XjICCy#v28y7HLl{Er|NyPcZ&k zUrb!zIkW4eLpC#O?LB+;UNZ->nWchrW6rq=_d~xKQ!e9~Y=ZGly2HbDyV2?ZGBP5@ zWw~UXP38?ba{4(Wu3oDQ`rScaOP5z99HScV3a2sTUyXO-p5~m`lbZVn-DYX95!YMI zeZeFao?&!O`KE=R`>?#Cz>ID$-fnL8Td^wT9C*&z^ZD4D7yh5C;AVyG+;V5P-{@>M zMJX_Y=| z^}f~0qsmhp@aP;5`pG79&FeBuMJ&|zfTfk4f z7DEp9-5=pb_Yr6N?48+pYq||M`X;a4ulYkR%xiI$m-of6edL8B@2u8GG)J;IRl?T> zW-l21!CBdYFy9d|@FlU}W3n0fj%$u&^t9~p#0Z`gX5c3;8ans$-n{TBt;o&UoQ3{y z*n-YN3%E$WDb3UmhmW2uj^4n;&1g>hO!2%h^-(|m)0*jxbHQgk#y_o{XEhfUaZWR9 z>f#OKw;a4V^oK9Xe?>F8z>{-XGk!SmRgb9`e9dFacSD$(t=AQgE&i6r)?-bW{Pb{J z`Ot>9P7W{{;5Up0tjA>d!DwI@O}GO%{AiN?opo+SD|8^1fi8cP?Yw4U>9sE7JTSe! z2r#|A3^4Jp0-S1=?!Tk`Xi}6>ui-_lsjaG7(0oZo4E$YrBF%8DsfG9XK(U>RGW6vw!*M_FW$>1lyIPmQ6T_V~Watv^+weRb^{{VK z2LD_8z+0YM*GxU=31{*Avw*YuKWH7vEGHU%l)*nyPQJTOp3^ksTAmvVxNXm6G*?wU zZ|t*-{lw$v8~&xd`1rqrpPDLq@tob3!D9^alaF3_3;0djj@F~v#^T_uA2jL8;7x-s zT8A3+gd>^lp^jY{ylK$)oTec+@LZ_Dp65ah_QkQEc>JLTUxo2glj(AxH9U3GE8pxl z8Sji5(E>~yJ@L2Vy9_@*z7eqbE@}-&FX(rWF=5XCQr76mLI0zPpOH71xwjT#dpgkaN=ONM*SnVCB?w|BQaHrDA}n{zJdzUeo>08Pr7!Nz}M@#T!(N>RxXw*=y=iMvV=?pT%S~8!0r0OwUg~AN4|CA^l+5_j7lzNec3)U2W8ZLizcH z!c;DkE(E@g|N4(B`mFT%yx*vAHtK@fx21t+tF>}*Zp zPezUz@s`^!tY^|)GN4mCrFB%wX|3Rq@HZwtYUJ`e@OyBlM#V2_Wgm3><67}styIW~ z!GAU6^mkjF-spw?jC0me&i#mT?uT(^p&onO)J>v)?g0<;{1!W-mA&chp^SLrk0P92 zA0OaPBAnizMmX^c2l!%yx6Y(h?~dwoCZjTXHGWQ*d5w<=Gq3UU!pu9Tt~v7yGWH;k zSo{;((bI}=O4-c0B=cmv7q-{3F#2xT%Ze~sk1EjHs;o_xmf>Sx&I{f4eJ1S5c)x7l zHDPqycU>6Ga!SIUjCas-o(rS*XfA5MkWo7$BOkx@wIOVM5l3JAZs=fsGu}z7R~GhU z(Rvkebc?A9d$Q;po8ss{bcWo|mooCu=@X6bBE4|$@$(LUS3LJypGU|0P7HleC4m>6`c{Yuzso5JY#!!zC!M&mK&gD&ziV68mNQ$j&U_!6 zoSiHmZ5%1@y>5^8o~+$1w{6YN$n`eH{8 z^tsu}YGZk|fl5qA&Z$q=kAj;%b~#mFS)5}Rre z*WHb|>S5Hp?m6s@Y=)vb>&=ACHg!U{f?U}c^-Aw@=E=l>fuJM&S|YFZ*PnB zBUM^k=j?5%(64^>cC1#tmu)?#y)D?=vK`x7d$xtW*+W+zQ(Gz@n_nqUS7s*;PE@Ay zdnl2?*kqfk%-nWh5{ta^P5ek@vNB_UymwJwZRE)!K;HWaJ_1U3duPEHi)-^P!*+1= z&XG!G=9X*WN_16x9>hcNbF&jmUa?(^U2(tS*87z!-miUL1h+iDGQXIgpqA$wBcIQi zGjoZZb6<{{xFca}Xm>u^%`bK?MStfZ4u9uR^!Myy>lknC-H0pjKoe%;REuY4@P9aK zpNWio}qJd<&MBM~Rp8YfqbQ#a0`85i$T z&OwhcEjjD;qW7@(BRk3BS43T$?8TXx$Gh+zwGDu;VRwG=+V`?+ zmlI!~u;&r)OE~)25B3~!uHl6BcRu6n_UL?!zm?tmajq)5@#6j1or~|1oY=W|&J77W z7jqS{?{Z-0go{hdJMeQ&JeT|SJ+-;R%cJ(4)KtirE{y*-M^D=zQEdyJUJ z(9I(sF^{9mE3VdC%vF7w$lZ%}1p_?<}-$&Oc z;y*x_(=YDqLv(q?6?YbM{RqyvIwNa}jfweuj9#2i75oVz-;3Cb_w^|v@4Mk|%4dmV zTjxGcoIQl!7m4$I@Y!`PUn0iquif9Ln88=*&fpYv^!*xuBhL0cocsxDde$Eh^T@}u|0BA&MiK2X-=EOU=dA2ctZ&TsXY}HHhrz!f z^6{+ry#1Q^IM;9B;@$ramebGNK68H{);5o|#rm0}oBdBjySBB2!*)4XF1~eFqRYAT z?_`(L?o6&iv^xXsU5N{OIoZ8u?Hk$U!hUtK`;F7SiCr%2dy>5)**CMx{Y%At$bT8# B3gZ9( literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/geometryshader/base.frag.spv b/data/shaders/hlsl/geometryshader/base.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..870fb6c12ac71dca568d8358a955b81f6eca7faf GIT binary patch literal 648 zcmY+AOG`sR425GK)@NH46cqJVmqKwRf~bf{H$t@*w{qPTY%4`w`?K8$e&6k#g#(!+ z=Oj6qsaB2~5epH~j3aK(MpR0qTI8~=XhaQfJkCcGi3(;#n_HYgMAfL{Um@$USk#Or z-LHJsz3t!k2d8j#D(#zoeiX#h^ULsN(7PKJTyU5atrx#2HQZSp^E5NX E54V0Hc>n+a literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/geometryshader/base.vert.spv b/data/shaders/hlsl/geometryshader/base.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..1c7f97693704ce50ff1e516eaff0c583cd7b6106 GIT binary patch literal 1260 zcmZXTO;1xn6o!YEf}bEFAR4hKJCa6?0*XLbktW(!YuI0RO>9eQ>)M~~hJ@#t-eU?3 zIm~&_dp_Qoxvf@SFQzn?Qd&wU{CBOSN*SqUEW4cU{`dPuZy=~(X3S%?>{s*t6Qai7 z0Go?*uOO#^^0HDE#|(xLE}#`YING&=8tB(^~M^romXYe4)82mcfcffUQgG?SMV{62|g#5JU^iIt&-XQ9|-^13(z0Y39 zoV#1%2RHCTuuI;)OBww=se_mCt+luK5xaApCtfMB{3@q@%)U*=D!cv`Io_Lm^jO2U z-uO2BOLjFIx92N%d1K<85=VWb#O55rtI_+Oo55-ftY+`dnE7g+ey=I*;i=PHm%9Ja z?FqZNYI%#rEb+S;tY*If`6Kex_!Lu5;7xpIcbMgwpJC=0KZdd1n7*@oyHj#K_j^p< zH;aBB%6R1Lfvq#g9%6HX-^aIy?;Jf2@Qr_Cj&J@EGv%OlN_qeQ literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/geometryshader/mesh.frag.spv b/data/shaders/hlsl/geometryshader/mesh.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..a2843e1c83bac70e70368c1f832c1a42246d4da4 GIT binary patch literal 2104 zcmZ9MSx-|@6on5htqRB>0^)#0G#WLH8Z{;cwZWz@m1=1!&J?In?PO`end0#3lRpdp zk1r;!@8)c*y<~INT6;X_-qUbsW}kCC&bdMNP5*gDTqscbT{Kuz>4kKBqq!QtdhHVa zK^JBTd_%6!^$Le%l|reCju$N=i^|l%4ND~k9M&JcWeE{Q5MQdsHw%sUd?tG@kyaOU zYIuDvlg?ym9#I8yy`D=h&Sf&$yO$*eKKga}u9%PBwN^7|w2*(1OJq~YT#(oM-~16( znv$Mc$h4aER+Idw*TD0&Mx{{xr*V37wQ{Y|5yxKhrQ%k;xT4%>P>+44OKa;*L_O^B zq}F<&QK$q{m8!H$Y3IZ;0}q_DfYS@k8NlfSXWwx0;Oy1%$He!G$7JMR@ce)=_Fo3q7#L@RqhAJxu}YMqvHOe=WG zzen;rjocH`?98Xd&x%tA9shanC-0^>v(Ss#j59|k=N)%)-m!6Jr5`n@|IBlGUf0*b zyu3Re=Kn2rTr0hpB`+i2_`@!~*u@`p@yA{KNf&?G!I|xO2j@)q?&&|Pc{r1pjJ+72 z7Un#RpAzOgjL!&j9`{v+@BFkZCL@nn{I^t*KKK&KX5ULPG`@YSRS;g14ft<&S-3}* zl;NWe=Y?){R)nd;ov}Kr!su3~C~S4`QHOIzw>mF{sl#2fI%~q{R%cz<>foae?+4v- zO2X9M_UHLZ7|r~zh1tV^&WrOd%cz->5sRO?yk~r1-ZA&sYE*=&VZ16#&!0M5?omxf z3_5+#>N5JAli}xH|4=+LypeJLiJ>3g5SrEJ_mp{zZwRw*>&Fi>G3eH>C2alh)6aaH z-pAb_j^7HKWlNaf6k?c#?-$K_zZK>@jK33R-W|V}_rk=W+q?ZB%)1?zS>8us^zT0J zlQ6mH7V}w{{#JWim^kzY{;b===sc$F2&1uo)4q5uq?Nlesr9R@Eh8R3zrF04JBp7v Rh&v-g!^d5P|55cDvcD=&jw1j7 literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/geometryshader/mesh.vert.spv b/data/shaders/hlsl/geometryshader/mesh.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..2a233ad24a7730e170febde5ce3bc986da730068 GIT binary patch literal 3248 zcmZvd`EOKJ6vrQJrv*_Ek+yENL*3B|CT=ktF|^Z+Gk_~q+*jNe zP;uY4zrcUXUrhXb-rQqeUcBV=p6~Z8_ndR@8~XbuhO%r^mSx+rKl$t0k@Y2}zrb3z zXXpK=uP!&&1bv7e14s=SL`arxMz$dR{F6U~V~u}X(U%tUZfCvQLB)Td;MC_^kAr(Y zo;TNOuPz_ar^k8Lbn8f~%^sX*FEty-mKulQ28&$QGTVIQ(T*g`b1!D^Jh9%G>>g^# zd9IvGsz#lcpg(kPUgS}Ct+!i`H4b;0ExPqgd23s3tu!dDh&zY9mt&}yM{{lR=yH2< zK3|+UIFrxq#f;xzF{fmk%NHJ)n#Ce-y@{XBXY&OEo z_dh(H=L`4kD{>7LcTu(7RM-Z3{iOS>QO%X`ON%pWUXj&_U2#9+>ix)-@5ef?f?Hp1 zFRvCIG>d%u$ybB-9k|5CjTNYey;HGgXm>th{lw0t?C(6v{?4K7?>iKm*Ld%1H{uFh z@4@T<)y3UU{14|@=OYKm6Mohgan@|yJr%ARr(eXyJB;)8Q>mQ&4x{_kjUyvOoXajY zR=h1?dmG~oI9Gk-%Q8tGZQGGu#M#3*VjX)D-ci99fUP0yJJDTYYq+pL8+QlZ)x&>X z&kcF@aPpDYH}Z_2TYunDbn735y_DVhwU6=F8OteSX)bc(*e+tXK4&GqjNN{W7ss2h z7V+imo)h-*gthM^Q=Pqz$L?bHyjt=0%kwnP71+H`-+UeHcjRp4wcpIHT~2&!!g22H z2}fO1VEc%^rW3YjXR^YsuQR!WzxM4LHb!jU>YEadw_e7^26hg9gU-VEady9{GPeFQ z_M0l>-fw%B-9n~1Hgmh2-QQF*!ESD6(M8NBb{0oV*jXGaVf~Mnuru{{#P~ajcZOFZ z_A7QS*C5sw_*!)Pou@1B=sLt0{j}YMw>jn2tn=MnjcJBeP6 zdjU>9dNS@sMBX^>*7!D@e9r%XzK2tYoZ|9r`d%KS2Y!s>XZ)XN=!p#GFN!S6mU}3|GKkBGzv`=0A%# zBfq_`5brnU;eCFc_?YuIi8D`}`7OG<;)*jP?{{#%NAr3&Vq?_({TW8$JN+JAPV6jy zK)lO1>&L{&yW*^q^kBU|A?DC8&i@(R^G6WR6zdmf{DNLS<5#ep;)*j)P?Kl;hUgRd ze@8d}C}MuGKIY%b{s*F6+wp|Mwg)U1@9hS3IhX!5b~){yJ&91y~*yI(Y~2oF6{e~eIVJlu*?0!iMJvD0xHVu&Hw-a literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/geometryshader/normaldebug.geom.spv b/data/shaders/hlsl/geometryshader/normaldebug.geom.spv new file mode 100644 index 0000000000000000000000000000000000000000..48607edafb834d2a718c2a991682e2738e3f17ec GIT binary patch literal 3108 zcmZ9MS#MlL5Jqq889O%4Mx2Gs*f9_w!R#m!A&iNHiDWz`CcIC;4@R-a8pcRGF)?C? z5cV|?2>Tw^u>21s_#X(6kT|FBEp#(&eXgpns=B+X`c7}pcz>3y$+B#H_ACEgo3bAM zWO|dWcSAOiEcM04!jcYSjHrMr*odb8e9%|2Q4_zBX#HE0FV`tDLYn8k?T41#+u zbbZUM=Kb^cwilXI<=)1mI-B>+A3-9>xIQAY ztnkg$58gRBjYr=4nk(&;w7))GKbZKuU(ru%xQw`ax@wnmMeW+&Z>HH=Y;ZyM--*54 zXf+no2@6ZMuA22{SDeLjgSmEVzOk51(NpJk4sdBZ&yi&1wzX(`mVRp}`|ZgN;L@)> z28_RhX#40I&&63BkB;|ZT;=~b?-P0MVP36^>&`PS@?zF;-W1c2v#zb^=8l40WT>wN zgTI~Hy9IjyeH6H#e(gcv3fo@Uldy--jo(K6dZc@L7wrv&ZTtwfZ`v6733k!8{8>=sJuS1W!Meg-* zp6h)h_Xc!h_02LV-_VV~`?#WC7 z^f-|7x8zS^enFlAu79xgKLO<3OFi~_61@W^xu@^&Dd4^2y@PS~{Ar-C&MoctGX*E_ zvUm2tT6_=shd9d>iPuCjHu*f%U9Iz611o zPtQFGgKnxX;nuM_b^uhe6EtdvyIV z+aJ*7Trpd@nC*|~`pdJGbGCl~e}m3o`@5m^oB`xdpp#Hd_Rj?u_tGa<{tff@=U?{R G1O5Y!i0B*u literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/gltfscene/mesh.frag.spv b/data/shaders/hlsl/gltfscene/mesh.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..9801be96b0a8b1a6e7a5f767e32ceb9a292f8396 GIT binary patch literal 2784 zcmZ9NYjaao6oyZ)qOC0#p;8o2L_qiCX&DT>)MhGX3SVJn(Ygv zrBZRNbEbIssVB5gBtveQZ88~4hS3L+Mzy{wuT^dY8AUiC*@SGyqMvw(f7(w$jNr8s zy>qcuD;_#itT(D>Yhd|1+(sL^Of3Za*bv__Fk%=J=c+BIgh>Ut!lg4$f~Tbdb~Z)z-RY!YqQ;V&k_VuE6(XXy)h? z_U-8U=zoyOh<70RghbpF9Cgg@WFmeq#@Um7#1gwwa^HJP&3vcv@|%&L&iTOifsONQ zYjXDHHn0Bovul^vp0aDVXYCKLTYrjdBdWk&fbmY$cXPwOXY(uO3ElXIz`g-}3gE}t zQ$$|7ACUGm$A@!l4(&&BY~Ed*JHzgLp2g-2d@nAsz56~~VtcptfgWsMf$iP*8(4qe zZ!fmCz|O+=YtE;MEU?G@IFElod)PhOzE%vC2N*`|b;k7>8>A{}Y?ZM91 z@7?o{aK7{0hgf^yN6?*z*!ez+IFGRJM|U2951^ax1XJ)n4SH~xA@UV`X4qdx%wz0JRF<;8fynFYGM}@46EUCP ze$@X~&cA?=L&8eUCuiX?sCp~*C&`j%KkQD{5qoD-;pciP1)Z;tV^FF$H{Edn{AE3)eo)6I@k2dr8?&KrS zN9g9+ibS4|(d8r0C+Lw!n|XY%@)7eXy16fLf4;Y?h+Nn|L$`-LS^*U+uyT7K8p(e;t{eDD8j#PfZ>+WjrRiodmegLsBM z*5tP*7x}+Mx6Z)dp*xQ_?|XE8_(BnMqo)@+oxow(VzbPbY`4Qd!H}tUJRaMC25gHTaf&uiAe>%yAQmoWG)b&gIS{Dp43{@N!Id+V}mi(Vc>m(#Y1UHmWEpF#cuNj%w< literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/gltfscene/mesh.vert.spv b/data/shaders/hlsl/gltfscene/mesh.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..963f9b04929af09c918fb4ac88c7838acfe2ea01 GIT binary patch literal 4200 zcmZ9N*>6=<6o*e~Z<#?vMzyx!j8-6us6njNU=!%AKpS5RHgXN^ZOXkEpCmEi*%yI0 z;*9e=&+|Ob^X%W?i;3TN?q20^ceB{*_gmv$d*4Irl;u;itR>5`IoUt_>zbEMNla^w zwa(?wr9L`b8B?Ev=+TChkamP**)(K2G6R{3wDPBY8v!N$W}^>nDc5V`^%^R1Z8@ht zP~8P?_*kpIIx#xDQ=bNB&ED$H>I8el*~8$_VITV$s*GGSG_oC^_B^-sH&(9NQIllZ z$8qenYsW{r>)Wbw=96s7|OcMnf=50tm`ZS5=fuf&9RJC(C6+4{?yH}!19QsTCpRpPf^dPQ%!y!n#J z7-yDjz2%MN%^J+*9arnMyig>Q_uhk#0BiUbf-e@)<{N3Yt%B3$+iA9~&TVZ+yu%Ww zSOGt@rEkn9fz2bfrgrBn)=%tg#rlbzX))ee7UP{^G2Xcq zkQE6Z(}Wj*trhl#=++9n2;C*Nuf;jqvp(!gz`mQnOVK^cV*d5+?N!{7?pH4O4k|la z@4XYRW7(}Or>!&J8@3bBeQ$F5E@N*&JiFNY5IYa?iR_-s`r?xk4*!!A)_*=#PhsyO z;#79^4t`Dk_F}d%XLFqn?_F!}0-w+B+~u{eW7jSxUY~IE(vxuX(wA`bz6tCcVlL%` zotyav+2gn8oa%*^Rf}1z_juZ%H==LJ^j?O}yN7z@QJC6af_$F2%<}glQ?H7{4I@;9j z+23gok@k2KqTSzT@tz+_{N?z}MSnPPY*}!RB(9~vJ(@V*h@mc6{k8j@yn(#h9!Ip>Q*cit-m?VvB)YtFv2Wk{+mU%;P!q=6O61Cm&~j0bR}&+>7XP#d*AxxZ*rshBID&?ZtV#0@iL%o@pPuT%74u z^yV|Y1}9%U)9YY)dvnfjAabrU|5tj)ZzA%F%f9V1V%|bGMm}QRMweGy%`xx58DpM^ zc^6$?aYf7kU&cE4J;Ywjt#91J`{>?7oXeg+K;(TF;tvyNj)?mR-FIP}GZgC=GyE96 zd4`|B$ww`JOP?b0F^|s@$2NJk&(Y--SDYT`nR*oX}9({h<1C@J~eS+ yUz6;<0qxV+<+RUZKNm5+712IDaS^{Z+1rwR2D@C?&r9}Fvd?6f`;U&+BL4%7hF~uM literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/hdr/bloom.frag.spv b/data/shaders/hlsl/hdr/bloom.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..a9f9034831c6c9feb4d5ce077583802fbec1330c GIT binary patch literal 2976 zcmZ9M+iz7x6o+>&Pys0*luL_nPC-$rCt8t^AlQb}5Ti)}YxPNU3=L^QFF6*XFIWVM ziWbFs#S8UPwO$ZG@ru6iH~1&`?2EU=#P8c@W@pn$)?VxPTWi*=Su?X6>NhkcNnMg8 z&B?EP9m|sXlu>tro0Eo=H)=`Jlr*BXhbn`^I_eQ4mhzP+Ayz{&5B)gKdDza`KUl?{ zpR{9-JvBN|>fB!%9I6}`0LvRcHt^)wq3Xb{k%J@EI|9Ek#y?RR8a+5r1*Y-y(Sf=q z-u3f&?hNtQ&55t^O={O{o?3v!M^}pK#cDU*gZH_Qtd)?0ojaCdl6E1y0AUs z>%o_1Co{YlT^ zN{2JN0(^e@Oom&)S2xXMcqMpx^~DUY0^dJhG?upkU&dE#6U4VD}HLUEJIoGx8kvPPT0$GbSGmUK} z%6BEdA@E}BxEXCO^XR_`U5ChvH=*ObTu#(2;3CYeXl-LQqrF?sDS~}a?nmBxbT_(y zINXnTE8>3Eg14ZpLC$=4q0J{R-WISi;++AzhPW$W&twHPmeE^yqv{@H7HLF0FZX;O z+8W$*8+-B1wj7XMH=U&-1<= zalbq1qdxH-PSvw}4q1fwAMow_-hJb~Yu~c(*Ej1s^=PTynf@1cb@ajV?Ohm z-?iuK9F->&vJ+IyyLueATdegp0Jmwk9go=4<74{i77oj8TK-vgYT_vVGb`PTQs zd5>NUJc_$i`xj0IzMB}&@igMuIL}(d#>5;iVVm2#5p%qZEgy57!8V8Y*c@VGqW=}_ z=(qlb;3-5t#=IJ0tRu#}hAsarwL0f@#Ch_uZ*u?8o7f|DyaR7ycOboV$~*BEBB#W= z9@jbx=Q*4RYrT!_e^EZhyo2o-#+Y}pjg#NQJlA*+@jt2WSm4fKyS6^-_U@kxw)cL0 zu)Xu{-~CLZJ#)3|FF?PK7;}NVW%LJuE1>@*<_h{p#NqwX{~;o8F724>BW!bxg!7oe zmWzA+7(2h$Pr$~=$Gv`v?Oyf8d9&E|aWd@vGi>AJ-TMSu&iHop=SY0F8?nDY{BP;E zpI;*OE8_Fm<~SPie}!#~d_UYM`T}BJb3M#oavl0>MBaFZ`RwUM#6HA(cnSMR;EnO# zeS^rmCv$y^m`^^&T*e+pV$65g#>pGwyzi0Yh_#D<2%NF@MxUJL?>TyA>R9Vf*w#AE rd~5$1k!wYquTL(2f3ASz`oCbihOsBn;^-@3%js)Ci~r-5Y(xGBv&aWY literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/hdr/bloom.vert.spv b/data/shaders/hlsl/hdr/bloom.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..46c4b31fdc1568cc56662cc746d3a2d10f9d0983 GIT binary patch literal 1312 zcmYk5O;1xn6o!YE3x0x#h@W_?af7CDWiW~q0TC5jP#d>3cEJK@YHL`Mxc66?_?O(6 z_&oQ{kUQis=Y7w)=e#p>TCY8r4q+mMFcbFq@0ts>$kYpLbT*tj^ACFmM}it=#$>VA zL&p9UGAsT<=zeUEM}zSQI!uve+|@b$eul06x$8I6MV;gEsQIHeY<}AMve9nuZ$2TO z5iu|I&CqfOJm?L3hedX`KOFT>c8YY zT)|i^>xt(Ic)Io&C2G1FIr)?`U*we7n%5%Esj+}>zf$`o_ffv9XEeSTv9;$>dV{^e zxo@)Tn{%68E!Jp&@3VU^^2Q&s8ELZ*JHCVnwFYj_2vyS{aocH_&Q@3;E z8N}wL_zr%G+uJ&CG5KGy?z_l2dp{%h9$(&h+k^8AyO_KyaUbyIe4h?kzHu8f*O;^E ztg6R3=wRw`M%61eUv19M9%kH_?rS(DPre&h_s5D7VoyuQShNV}v-Ykd`& zHW{;|z5hLR8y9bl!N_@cg^82Pcfb6Z=Qbz9iFX#pS0nw0Gnx)vPtfYg8HVQc8T7F{ z=b@fj;`$(-wKWgMjZepG^jgo&PN#d%)w&~Vdzs99OFr~pdUxG+t7o~?T;J5crTEnG zoRL)z#*h6V$DZQ0-{A89rrYY6dF{$EFtdweX0i_{g9q0v3NSN>^WZqoEaE&Ep0^<% zGl}!yh%c#{W#Ov4qF3YHz?@CUBLibqsrZ09{4q_@f~S-2YR>`N1f!xz|_a=u!v_? zSj3YX15+=xQ!_ZKj~c0knWE?ZOJ$};v=}x2=yXvlXVKQ>=)u&>zXZM!rk|3W`)<_- z92ky%4&?L#X1<4VdWp^+Y0sIyqRik}&KY!1`fsW6L{1zn#y!+ToIGgCa$<1w3I0`A GSMoncRZbcJ literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/hdr/composition.vert.spv b/data/shaders/hlsl/hdr/composition.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..46c4b31fdc1568cc56662cc746d3a2d10f9d0983 GIT binary patch literal 1312 zcmYk5O;1xn6o!YE3x0x#h@W_?af7CDWiW~q0TC5jP#d>3cEJK@YHL`Mxc66?_?O(6 z_&oQ{kUQis=Y7w)=e#p>TCY8r4q+mMFcbFq@0ts>$kYpLbT*tj^ACFmM}it=#$>VA zL&p9UGAsT<=zeUEM}zSQI!uve+|@b$eul06x$8I6MV;gEsQIHeY<}AMve9nuZ$2TO z5iu|I&CqfOJm?L3hedX`KOFT>c8YY zT)|i^>xt(Ic)Io&C2G1FIr)?`U*we7n%5%Esj+}>zf$`o_ffv9XEeSTv9;$>dV{^e zxo@)Tn{%68E!Jp&@3VU^^2Q&s8ELZ*JHCVnwFYj_2vyS{aocH_&Q@3;E z8N}wL_zr%G+uJ&CG5KGy?z_l2dp{%h9$(&h+k^8AyO_KyaUbyIe4h?kzHu8f*O;^E ztg6R3=wRw`M%61eUv19M9%kH_?D{qDQ}c(`)UexHZz-;D^s(Ed~EO7(a|(Ay0_`fWslN6Et}+!+oorYSsmEWfxi9&>RQ$6=?!!y z$d02QPoIHRU$sg6(`PqAJrPsDqZbcV8Q}H!X4$44U1Os|W20&fg(luGxPNe%)r961 zHRM>^(D2}e)jgyAgH$SX*FG?~x4QpO zfAu181JyFtI`tnoR2?3vZcEI0?h~-p=4r^z1m|mMJ3KTv!j-|zt!}ISPbRjW{mZh% z6=gE3b*`pEeZx&XZRc(1>e{|BzZ`AuWnt^?+Oef)OIK%Mv-;z<&aUm-T05{9j zc}cm=y)W68hRt&_I5wIuWJmA$J+0f@+j@$eo}d4-<@;TCpY!K6uEw|bK4+&c*PLf( z@42k6#;tw#;0U}HW6e7UhX?xhTf>@WZFFD2g!Kfn5Gqi?rsBgG$ zAYXm|0gtVEskT>UYvQ?V3Rx7!kpE(^T_qlZoTEMQ*NE*#>uU%+&H=Q zl-uOiP#*cbA5Nv)w96OK!|wS{?ef&_IZW+x?Kbmy)>6A%`$YO?t|mVe;M3@~RP$P9 zFO73< zD|FYgwBSDPY;(zVB4dR<58F&expOb%e`}y-Z^BnTi+*~MXExXtd=A)ogUV{l;D6^H}R$^Hz+n<3aFi?zn1g*szwlszif9)Poi@uOqJ$q-+&HG43=Ty_?xpOVr9?hstO}>nALXK;EIoNA( zzFBy#U|fWnyTWH_<$ilzb{4w#jXsOW-_GdyRCm6ujB#JdI|}Z6^3H-+3f@z2 z*MBnWILK&i^&MsOTH?A772LX5x1)>|x^>fk{)C#pxn>i&819){!YKB-SHs;GpL;gB z`{8rWCbzym*PL5!O?{39x2EPIWp0%F4HSC;sy5{5#9KfnZ5(eCu^f?bAHdAx-s74 zJz(!cc@yJKxc6b??1dZC%e+1p&IKEzpKo+NQ_d69^|d*V=U@F8>-M@_zt`jXNAY)DPBX{#eU}V0F9A!L_(wt03BA?k9ttJNBXi-jAjpa}R*| z8>imL*;G3U=99mZY4=^t z`PP87MgC`k%jfh`H1#+u&jRzw&x$tltYuV>JePsX>wGqvdaV07V){|mT_NA)V13kM zuIGaJ`0}YZUzXV11$4=))u*6B2M^K;B?(r!}U>*+%E<5$#ZLu+^t}3=61hd2KHJm zE6&8r!Tw#MZVlHns)heGV71`af?aRKUkBDlJ$zmPcHYa2IbI3YPu)2-Fsg%r+9uZ8QU?i?E#)x!UEVCN0~dayoGzc+ySWd3cVulBILF|ql# zlfKT;#;8raiP68`#O>fyz%kdG;I8%3q8@Jsn@2t7cng?Mu50&iJ#%daYl~brfSoIH zy%lUO_3(Kc*tn?Q+reu3MozWxe+Sr{!QTls-uurp^DeNOei5%0{_h6sAN)OFYZLRo z7p#wZ_}mC?N%;G~>7KtIu8(@;`2bkmzkB0seGqPbZLVz#qnh*h?(-pV`tI{#c>3;h z6MPl@68tOpe*~;%y!@kJpS|vr{9|A~`QKyuYLEA(kAt1hIpV$P6JT}YY_4%RSlu~% z-}xk1Exrdn1y-}$9Q+=L+I1dRp8hLS-$pP-En>a{SGU_7(wOfe7?Zw-d=IW}w>cOS?;+nuaQ&{w{Q6rX|EBl>xcohS z2by|(xBd{!C;x8M7Vj)S0&6pWtpCSgb-T^MwYXnfA=+bqegZD<&ri|R)BX7wTs><2 zbFi8%=KTd+-EMP8>-I|oW7H$&R}gi(%^{8XHG(l}5%U|ky4~iG#{3q+m~?-B2UoY- z9E^$m`8|T`cRl9UKlbMjVD~5LQ33xEO+EJEPhd6k#5(^BR=3+6oYQ?c8=~EN-)G`q z!09vbukiGl_&2zF7th4MgVl_$5Pv7woQ=ibX8!>5;rH4s(^tE{MaFaSF1T|#Pdpdz z2CExui~CzWy}ysao!95WKf%lCan1LD)$BG0uQ}HJF9dz8?R>_2>C>>s-_t&){$1$t zEc*}KIQ6(6ObX4v-?jV9tiUIrFJjd0934XNGJIkV*F6bMy^G%f5; zaD8rKrHdJ-!u3&)H8z6FYdir>J=Qo4tY){7DqmwaSHA=@9o^i~Z$Pi$GXqVV@r&Ux z=S;YB`g?MmkrUC>qt>&)YUa4VTI;J%yd|T19r7|miar4noWOyk5mi$Ca`uwa=X7zs@;pSlKx*|V}8;A literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/hdr/gbuffer.vert.spv b/data/shaders/hlsl/hdr/gbuffer.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..3791964882095c68ec9858b283ad6bce2357bfbf GIT binary patch literal 4432 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 literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/imgui/ui.frag.spv b/data/shaders/hlsl/imgui/ui.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..282a17fd38c9dac950a8a07a997bf7d9c7b10d79 GIT binary patch literal 1248 zcmZ9KTWeEM5QVq7we`}AwXJQnCiOv32(@ahh(d{_FT#-|M&IO!Q3B0{cp~}({Lj7! ze&5bHQr%%Pd#yEl_RQ>4F5O)S;Zg`;IXvUvwH8V_Q;t}5B`k&t-u*Bgj1)?k5%R0- z)JVpz9IE(_1XM#UTw$O6nDm>6pPGYV`lS!9#$O1Z$D^#<|DMgJ{TRDk#C}bOlk@%* z7$a+VV>>xrTC6MATFL9At>77J9nZ3OsMGt>f%O3bL_k>>f%D*Al`SXW9EO5}8mxBcG2jFEqd;(56fbn_oza()X%j)yrfw(mpCp2fc7Bg~%7;jA8G=J5M5 z#=4$h@;zdl-w|dW&%WcdwLZn{O2JW9?0VimldOx^5DJUrH3)CXVUC)0Q|8^#HILHxS*NhaLP^CjQgU{wDW zPwVZd+v>HV{ijmNr{sGMy57!FBZ@lPK}ToK1zjWBi#jOqVK(D=;sa)#sDYW8&YTL0 zM7=g^a9OzDZH*WsnZPWYAvilj@Yxv_-5qh0cp9JhN(MewQ?aV@NtG?fKAa&PFosJ$ZDRQwCt!Q=%~D>$t)eJ|L+ zv)AQM%uAAW*wvMs^h@J8X1Z(CI{-RAZ&WL@Y)a7cwk*eP;LWBbj2||{0Aqum`M;GAgZF54y$ihA>e$yA9vkj8l5m$}zd1~OY5)KL literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/indirectdraw/ground.frag.spv b/data/shaders/hlsl/indirectdraw/ground.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..e2dfe5b33e08397722c80eb4374cd8944b812f67 GIT binary patch literal 2744 zcmZ9MYjaao6owD!1+=x?!Ghw6D5zjm1{r4@gih@AOC;FV=r<=yz|1sFOj9o202S}z z1r$(F^!MQZ@ryG)&*@n-&Caas^}cKEwbxpEpFLFAyFN+QB}p=o{LQ~(b5h8dv1Bxx zXDV}*(o*kK>F|rsYoADloHESr2Y`3K}1=X=ZDM!CJv?gBIZQF;BB>aET~<39f&d`_+LH>c)e z>1@4QI#Hc{ZK^^g#y8KLFIOwoSqmH?Lvzdd`RTXH)#~i4S?$`aX~6aZRJP9A25g7I zW)IrSy)22j+S~I}voq84*}CC1{Tm_De)!s4b-CAB?zw(6=hRQMyRG`dD(C4%u~y_- z`}{_2)yMj4&BnP}<6UBnW-YUbnqfa< z??D`5T4K8wW z&342Qad)8qbMM~Kh_e$c7ZQFC!zIb3slbyf_}CKV_nzC2BdoOk0^+bA|AL-mc5mzAbI)oMTUToU`|uh+ z?Ck;E8Nlxk;O+ok>cj5e>%;cjcf$RSl8^m;8nKqZ&!F2MamsuEu|Huyh;DxZKZ|a> zlXPW2a|tn~aa^mvKCiHgduw;C_xmj3*@?ZY=Mc|siXD$LpGREdH?L31d;yWK;p08{ z05Ohh-y}2d(1(b;z7F^H9ORAdIedf|+xH`C`8emt^Y8x?u;)IFXfuxICm(Sxq8rC| zC*oW}mybA?(IbvF<9P1!5$98M`hoX^nZBhKgO5l5SGyf5;x<_fy8FVZj1_X|WW z>|df=!#Jm={VT+nGl;(0jqAPBrtY2dEsR{hMmN`ONW}dHT|V%)=~{@4_S5cu zVY{B&d|&kQt&UuNLHAA9$6Wm8wIsS#X dUjMtuBx3!(G1{V*=g{S}ZD1DvNA#DF{{e1!)6M_@ literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/indirectdraw/ground.vert.spv b/data/shaders/hlsl/indirectdraw/ground.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..b8c07cfb1ec0606e91f758ed3a8dc66bff435e84 GIT binary patch literal 3424 zcmZ9NX>(Ln5QcA-Nmxu2kxd~^f;%{ZT8N@zh$&1}%wPg3%5MRubgU$kiW4kUiYV?2 z;sWj(_g(*jKg%yx`8;<{lgpe`bNYRIIeohC8M-=m_GVc}mSz3f-~8*^kaZ@eE5}-| z=Fg=*H&dTi??m+IMoLHzLb7ZPvKCo~tVg=|(|&@05`TT@(^J)@=E71FmALMlQ$Nyp z4&3tbtck|r+{~;#EzUDX8ncZ>_K35FW7DfX)-zqNJwIJLiBC_S+w;fkPe0R?WLZa< zy?J_}R#`gHkTaj0OR7ZOgXqT&Rr5URu7$CaRN<507Ih(Mj)-_@kr8N2=AyM=!^C zpJW@Uj#no&n9Ke*mYVrNkxbs11RnvO;hcgm9-__pwcGZ>X>+daw!3p%_Z8nriCf$W zKRq=z@3`%;*cG!D+rQOWw|ty+%vB%z6tnkE74X8$;>=ur+j^e=F!}usts9JP!l9JP!k9JL<@d-p-a_$L##PY1yE#`mI+ z*xsmjBy4ZIdtiHG&jV|BMuF{>zYoTk&t6%75&OOa+dJQPVEujHMcn#7F3a|DlKu27 zm;L>hYIm`Fmc2TSc%FEe{e?FCVjF&`fQ>&>z|NqO@I&OY=XW9YM{LjcAl53j=X(+R z6ZY0`HowJG<&5t^%we3q+8-u^=V(*+4!+r8?(2NdBHDeck#`wgK73wAH_rEK4)HRg z-EZO*#2nhA)^mwJkB_y#ipcrqBknbH^Ln;<#rnm$ucMpS--W2{4RrbNc@y0n`j|tk zk9KGD7Ge&6OU%*F{x%|C*T`RJQ*7ZLgB!6kHS zxWHM~`3WMYUvQr$-ZP`0pP}1tYw{jq{i2@F(cA0!0#3eI&zE5NsOKwm>xr3sjV`CS z+Gp|&oIbAT{|dTXaVFm;t~itL;EZ2Ev^$fy^Y`f5tUH*cYQ$PDV%Kj^2|92qPB-Ss^_zk^y#_wP`#T93q zwdaS{JOvUex@I(E6RA4v96vae^C`;UtDBmV;< C-}@v0 literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/indirectdraw/indirectdraw.frag.spv b/data/shaders/hlsl/indirectdraw/indirectdraw.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..d96a10a94459cb9315167977d83cc7f9e1c81af0 GIT binary patch literal 2508 zcmZ9M=~J6k6o=nJNvj|&(#5teq13vxlhL}2GcF7w!`<0vli9EQcTHs@i5bsIX;JBpsjJI*Y7sw6A6}oG-7u0R%ffx1t$JM_JX?4-@2OH zm0NkYa<#Vn_I#CY%ww$uzfh~zmTl6Stgql#7vEo~)t28%{cE$YA=~p%DbD_eY*)hO zJ+%A1RK!aCgVp)vrNz}0clf?L93#^O`1(q%-|O^y#+M3C{c5}0%C`0e0rn(%Pk%% z%a%CL+>awJv3bSTCH5}G)+F}+#KwueGqG`E?@80mF$nTpE+Qnf%N&Gmt zjOc%p8{$N%k_LP5l_cnhSh9!M%HdrxHHM_3#j$2HRWspFqEH&=?c}G)Q)Zu`gPCOa?T)1RGJaT$pN03$FCa7E3cI=Fwfkez zE+>AWz~(x~InJW}YMU!;)^~zh-ei9j-d>#>m)IVi3zyg)z4Jo@*!~8wb32Hg+d*uN zfxQ#w)|@Xh@nv@3!8L>Y1v<~}+4i@F7%#TJd} z7ZGa<{1m$V27Vgdegi*)Zoh$_MK|9yy7b*HA?7rXvHI)t2B&zoc4K{~O~khlJ7YHy z-(sE^2a`1sx*A?7jmJt}iH_yi_iUzcaEvCEs=*=Qkah`(=hJ15(S z{2%x@FYSW!cm5|i(gzp)AN;j-5INsaJ>ot__ggT97`MajGESS{V>#p0|7BX#<^E=m zobGWKeRS`_Z%Ew5Ep+*b;`?wL-ML#twAr`wBOiJ0pqpnJi9EaL@{#8g^vI*lJkFiG z`Z~McqR9Cvx;gz0Mb6LA_+_iWAC8Ce~1QR8m#p^b8{D2Lu$;jXMBgqDK2XnLGBhce2;D( z{oX11_yJws72J>La>fVuQ^A?<8vT0y&xrB*Yxg^DZw+>B&c-k7&Wd}~eHmRJeUGw> K|Kqe*kpBUir^o#O literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/indirectdraw/indirectdraw.vert.spv b/data/shaders/hlsl/indirectdraw/indirectdraw.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..f7a117a8f470f94eded05b5cb269eb3d668fb5e7 GIT binary patch literal 6412 zcmZvf33pZ16~`|j2`ZR?2!djKk6FPuFo+^!zz_|2F(Ik6we2IkN^Fvsh6J&bQ|D=Q z^%L}qxK_V|%Wu-bw&LpVckkJ7xQjzJXaE0uIQyJ^?tSmA@7c4VDApB4F;M);iLs^V zDVdE$e>sniPmd4ZT)jSg^w^8q2a5GhrERd-TIxOgzu2B%5@_v3`jCEv1&W7|hml8+ zjmReCQDguaL^dPq`De^ElJ)WLG4$E#*4paw+A1o!dP`1yvU?L;`B?TucV)4?pijkF z&q#NnyTTlC)-^MG&&L{P=Q|(FcINQuFLS&8`22e}RwWtMG0eRB;c{nq?OIpPd~yz{ zKI(n}edc_t%%kpDUg^HynOmLjaw_JRx7Nk(_0GaA7DhLA3v-oc1E?tGmxgb(SB58B z(_>f0S`+1&_m!*OwN139E}t96(#PpqbBeig@tu)YYwE(?7|%c1Mq1;oDGkQhliE5j zL6tUpRm*qRW)Ew&mm|*J)@(;ATYuT_?%Ha(u_)d>c?W`z0Qlu}&$Smi#P{>mn7`^(WxLY3J+^eca~qmH^%tj^m)k4t#qwn5 z%e{=U7oRc3A-2Y$5>?px#O_bKb&1`Z*m}gqiLF6woY*@eHcsrl5F01>Y-iWg%~uZU zA##a#Am$3Z6WuxjKZ)*M#Mbc?QWPJb3HvUP`L6l1l{`|SiAQp z$L=@BzCQyWL-+j|*k1Ym3~aA_ms^AN*el;s}r9`zz2% zX4kS;|3Iu?Jj49Y8va)e|2xC>@~ayDPlnC+-wfO9|JCr2-MF2IImG&C@4&4` zH-~m}xc6Q-d3}6t`jU^I5wV|sIQeec?*??aw~2B8522gK5!}Oxlb+->J@-cd`f4*r z)V&eiy4{;~i}elrrpzwqoq7~beiyoRTE_rb{_vZjuKF;_cI)7#Vv_=2qqkqqq{QdoV4o*JLeF!WcxeufBSN2a^^iMv{ z@OkvSf5YIse=mUbX_7~qbDY_WVBgEpKe7H{e<|7H%*6-rkF{S0=lwkbmJ9n)^t`{v z!1^@Fq0KqgIu5p$=$}~su)mV*(LZtCzZ2kk|6YZY-J2j~4A0XOm2 zPg|*{=ko&C+|fU={*n74dfvY`z;a<9MbGOmrA8p0U)h`9ogR~$}x%nXDvauG8NmRB53dCa#UjPW~3#JmHRR~$~p z`2PHy`6`6{#G+izxUweKS^;n(2bRk?@{Zu%Pn>jcKT2Hm#Jw%R8Lz)~ziY&K zFM_puM&4Jy)5=-z7wAjq{>Eq^a$hoc;pFAwjF-Xk5%**CdfW<}eDvRE=q6Y``ml;_ z4N>13SWds-ZlTM&rtA4V-~)8;Km&0fV*R3?+vxRrK7^Cc>-h;-KI-`?y7k1p_!(GE zaX5L_asEGt(8m$nFA^sm+((Ja`}8rK@%n4e`}7G|yY;!hugN8+eh1y(_EGbv@N!Y} zXJ9$S;pDpE|4WE`kG}%TDGn$7{l4mb{WXL+_49n&aKAzK{Qd4}O=A6Gjo+f@Yy1u@ zr#PHk!|!RX@p}k;BL5%I&F^z#ez890_xJf9lU>_435V?xSkANed3Y0%bLj7HRypmi z{T8B~l%?I@uySD^N7rt>#`~LAF6@`lwfo-G?r&VVuuq_C??trxn^!LEEp+XDh<1Mi L%iW=(6UhGo53bgh literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/indirectdraw/skysphere.frag.spv b/data/shaders/hlsl/indirectdraw/skysphere.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..9f5feeba338300784d998fe46f64da49bcb1505c GIT binary patch literal 1312 zcmZ9KT~8B16o#iQr7ER-g9X7>q6xuljC=$|S}Ksh$llU~gklQPB>%xisFQzmVdF*9my{rL3QyAChC z&8=s|3nqiHu?dqiBl6Qi$8UGhiK0!)L)Q=FWlUD~y@agl&dCoy_XF?wrPuEG9|Cc7 za>C$KcryqNdRM)HsMQzH$-nkH{i|T8k4lfFM1Icp(C&I4{ejm!IzMPMP7ZDF*|^`{ zO=yFsXYZP|lloE9{%7RBIq2u1^u9mvJ2t!BeS2n1UDGk+iok+1Z;~^|BZ6AQ;bnpI zfYWy}4tMc+Rp-n~!n$(t?+9OJyH&^Uinm&=A-^ZScF`E}F>zzQRu{BCFOM4Z_*5Qz zT%aa(*h{{vU68-A@w?*qgt%7K?VS`M2c3OjPSvMmOF~LuFMK+|>0w6r^|M$h>d(9Z zH1atYx8SUjYRpEi&0SO$?*M&1*5S-pl%*DRh~Jl`4mx~MmOEqi8D%ZWmZdz9#V3dR zqXv7*;;XXcqZ5B3OB@Zp9&@x^aeC#RS#WyfURiK@qK8z>>4`f*+tyC{aOXf@f5et$ z*~`B-1@|xb)-ArB;PlMfC4W!*qjQM~h1@*eQ1$^Ej2Id=r&j=zvkPEGwX z|4V^d+%q{*f06!OIq+8kZ)I1=ONn}l&f#$){v*z>NZS*5E8k+RDj%IXZ&ZQa_677L k@_N<8Y69o%3Cuv>`vNm^PQ=|zW%+2txDWVW?cNdo0Z2Gg761SM literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/indirectdraw/skysphere.vert.spv b/data/shaders/hlsl/indirectdraw/skysphere.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..810419c32f8bf4a4678b0f976286bed8a6b46b4f GIT binary patch literal 2168 zcmZ9NS#Q!o6vc6QhRs;*uC~!!9rWu@tO(p+%*ZMG6?-O#A|VTwhE) zzhN#S)7;KI=Pq;aodM!g*=gru&bb*k(0|sPn+iGinZ zYceGDr^K#Oiu%1yzbDnD`{N>6pW=?wVd#9f3*V_0I1IL0&>crF1%TFTN zQeMZ_>9+UlyS+wRl^IXoW_z!GFlf}jNhda?eVAw3*WYO62Gwq^7?n1*HlpXZWcHQQ zSFmk8+kP5Fn}v~$Ufcbi4;(ipRjWTU%m;iyzLnBOixJQZm}UKg|Mj187lk|3Znf#N zH+IK7Nr^azReP5Qau!A!mIkzrvX3EMAxBocq?383(app%o z7DxTWJ(}PqT-w62R1fCIQVdtD#kA6H{7M_<*ZqDW``iDbSLd|e#*_aVE(Fgd9cFrXpybv&T zf)}-OZ)RT#82h|3Eo;xnYujDu{Ouz6M;j00|W4{(KKH%#CTMah@9?m=A zZVS_c^>jC2`epWc?f6nR^C@VD1CxJMyWPiqVP?WxBPW=dpvMAcCd3+MCd?WRe`YfL zZgK98H0FRWi@E$(wsYF?rPoaf=Nm4KVP?YT3;P54Ge`T(fSJi931=5|7Bfvt@PW_E zLVP;toW(nPEMMkYmSE?7!7*EXt$Cg|#u?1+W#BDtTX-_=l{k2ES=?*s@IRHCJZ~ht zRe0*9{#5 zD}jHZ+{}D0aN1lXCa=9Nfk#*|3Gc*WK1wGKyv2Ny4v(-VV?K)`hCCM2kPeTqET*VV z3c~vmY9Tki^t!73i-bF}dC9a|}2vt@+g>^`#6 b;aK=5w8LTN9bS=Orw8nOhT;B*xhMGxUz~t} literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/inlineuniformblocks/pbr.frag.spv b/data/shaders/hlsl/inlineuniformblocks/pbr.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..94ee147286fc1ff1d1c2db7ec1de49aeb19710a6 GIT binary patch literal 6912 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 literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/inputattachments/attachmentread.frag.spv b/data/shaders/hlsl/inputattachments/attachmentread.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..4450a40590cbbc99e5b0553e77e01cc8edac0641 GIT binary patch literal 2908 zcmZ9MYjYG;5Qc}uO(JRtauY8x0R)t|-VsDdAYizt2@vou%!ZYu%51h~XOZ|x%c6=; z{t*A5lvP?j&&+f(Y*+Q3?zb74;>y&k{wBsj3>YHEA38(3dHj``gk&2;Ck&! zMv`YZmDkg?j)oz40v|DwAq^)D&K8CS$V|(o{ua?-$k)z+*KrE^dlZ4Fl3i7QBi`d2rSz9YxyT6)u+P&WVMkmkG zUT$oouv>4Ib}R*Kw7~2o&GU3+b-mrmuXOIU9~Qaor@Uvh=y#)^Hy@-~^XBb4%ja(_ zTw2E7U^4Z&*xw=WUbfPVS&1D1Yqgr>&o&W@xTBma8M7I%J#zV=fy&-!ijM)EAJ~a|+g1c^8}{zs<(|_7e4J->n(4o)#r_PakFE})7 z>^=lzhv6BzQr{2j6MT>k{lDuMeIpj+45TS?9Vo@Z*W9n78>7!;^@d`yc_yoO@NJDh z$f>Vyqy8GFb(Q@L75g>~@;aEir|g?**Z&Pp-_0J>k5{@isLybkKkjQ*y0z@Z@*byt zpH#SU(^R^`X-@N-Q$B;A{aT+Cx^Ez<+mCzfo$B_ZY|Ke4_OJt%?CA;CDbCaQ+S4?A z2tG%Iaq9mPaSAqGAMKKJF#ZUqcUfx}b{?T09nk$Ah25U~4%KzPJ9XXvzxsLZc9w6$ z_BU2x&hs5uT)(r_;cVZ9#s9+F8NXj)#{Eriexsy+@Ym)yOw4|i&Ex)k1UtJHS?&E~ zh56r;7OBK{`WV(GOU~H&IY(!p-JJTKg2l8QtMusaH2QXbBgI~v0TZ`&|Ig-ePdi}`_CFC9sPX z<~uF1J-+WH*m(W5`%V0hmlSt5+>w~^XUN+#ZY1vF0xVwN#mf~QyLbg%Yyx%{uX0N6 zqPAS;JEuX*x=n?fr)!}eNVqe*A}tgAP>fV3no5T z_jh30qVDgJ%_kl;{(vkV{Fv~4kCcPy>2`i`~0jK2$Oj~x^D O&3$`!ZV#v5-TwhWInG=F literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/inputattachments/attachmentread.vert.spv b/data/shaders/hlsl/inputattachments/attachmentread.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..ef56230746c95a033a10aee5bde2c6fa1cf1bea5 GIT binary patch literal 876 zcmY+CxlV#n5Js;oiW`au#7c;rDDH?7m(JK>V~>%-0z!x}lqU8*m5HxpW8yjR-vloi zX1;G$W=N-Y7DAW{A>>1wZ(kv#5+*&tde;JBJneq>WuToxj7amzqMsnLA@eUL8*-t9 zZ`d7m`;E8msPWhvz4pfUgXi8D{*HL-EF-%Kwx-xu!k8{LocjlYZWNzyk>$A@f*+sOu z#?}$z#rE(<;w!K-lo9(~Gp9ar^zCEIeNV0(LIc}-c!RHmJHR$hUyM7%mbcH4F7D_E zk&m^Hv1eBS#5(ey3D-<`Z~c*Q=h*Vz^8wEOEkxcIxeIJL_t&Ab fJH14V)#vT~FSr}`sL%P0s~~dvyp8ymN-g9M-61EQ literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/inputattachments/attachmentwrite.frag.spv b/data/shaders/hlsl/inputattachments/attachmentwrite.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..6db6c47dbfcec0e2da0fa60548ccf79c841f4aaf GIT binary patch literal 1904 zcmZ9M*-leY6o$8*R6quq!~t3{CPve!h%qrB1PM2l11(k@p+JQy9W1Th@&sOaqi^7~ zH$DWuk2fa%-}bC>&#Vl_gawp zSmU^Kqtq-_{Zy42?UuB1V)5~T*$Xhe!0Z8-K48`jCJ)S7Eq_?}jBr{){>>1dJ%PJ~ z$sf`GZt1jySnM8&bBB)%pYzytaIeR69o#28HT7fG;`@caeI4ug2Ymct$A4b<*U{08 z%{J)$$Nh&qo|_xhJR`E1iCNRa!_uq^9{&Yt{OlS2QE6h~2eo5k(it%qrLo7u^C3Sf z5!&~mUY|F*>MSVHD=Mw7TXD;>&4x7E={!^3K7ZUtGmCO0Q3_0F}#k`VD-gnJR z&T9#Ayc2v@7v6H-$d1%J z$nm>iy{fY5Wid6`#KEtI=UkT!&u3giHXQfDxDO#0ljaWd&iKtIpLqP-3Fcpw#>X7Q QU6a7!;|+oTsQLrRUtVB_DF6Tf literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/inputattachments/attachmentwrite.vert.spv b/data/shaders/hlsl/inputattachments/attachmentwrite.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..c77bfa5b662b87b2140b1da42e97b7dc8df417bc GIT binary patch literal 2752 zcmZveYflqV5Qdjasdq%=A}Y3^qC%=@Vu(fss{s;V5tR5zQ?NpjvbDA--a!2W{se!f zUrc^NBh3 zT8Qe^(iU+s$KETI^81zYnz#;^i(2L?>l+P7ee8QqYh$-oE;LsoIQE6(gUYDR^U|L^ z3|$^{zFIxnEUz^xk-BA1cxtOgugWUpA4hFFszZy*bwq2NH|u6p*)Hsq>V?H{dG_gS zxNsx(>u|I4wqiIJE@8;H>Vm-Y3*plI)SL|P%r|N_TrvxQXXeIRKt?R*VEog^&x>KW z^l04ek#*;jw%v5L_P9rX#u?4(viOzd*=>%E*@5}&%)se0gG-(nb&iOumFlIc>!9ND zO)DRFguB59CT`H77<0~G_Q1{=gYg4*c&x=?=8^Pg4oQFRCYZd$b6!IdKEwGK1~aP8 z?!)kZIQBXznNc3|qdtqHX5uDOTsjWFWE{N_w=c0=aOpTWi?cgzbxx~8IDC4g^MZ4d zK1CeU3MLkO!s9lrgW84jzz04l1?9okDd|xhz2_vSx%xX0nxAKdHkuSv7_Ib53>)5%j?zl0e4u-QImq|=|_0qOMDFP8JCKkS44jNuL> zo*ieJlh;|T^uRp97qrp?`-5{@$xTjh-ec_DiX76Kmj`Eq&YrxH`7h9$pM%|)%`ruP>T@)>@az|3gG<9qU_=PMHW zF?>}zdmFwcoqiToH8UTT5Q87K`|>6yJUaVx_oq}VvoA@QA9o&(`L9ag;n;_>Sd+k8 z+$-tnxUx8S-iyV(mJV-m>(bM48{*)3R~A>14o_TB>!yT0tR`mj#`90)!#msZoR+}2 zs^>TpN^QDr*7sC z#?SiVKN9q1z0+4y0&hM$(#e4jIl%asoj=^G^&V z2meF8kn^*oUjlD&U!;?l-&N!V<7f7-($jhO#KG_RJHGGqgP3o^yM&&wKok%X3dS;)zbsi}n}u&=A**;LH*MB{X)z^q zLQCi+bVBbX@DsxS;R_PabN7zC*=vo@yzi7VGw0m9ogF*RNs@I*lJqBk^WSG<(vdQ~ zNl&^?6sL=Y!;OQ5y*FH^y+7%6No@m3Z_V4*f&IaDoF>h;PBww~l%ZPf=G%k}DLN`mDtikQQd`K7sP9hmax zv1Zg+{?=7nDBNGE7xtH?ZXYeujd`p!XrGl%G!e4 z+w%x~dPdFRW(Sod6YOX19f*(EykhGTJ4>-OiJhO=II%Mm8z**7Vjr=0;F1)r;XF9< zd*-cnaoD#I-wVzm`tQncAG-AfK0mW>rK*1PTxL@rK$2v2Bz!ldcrA7#*xJLs3Eker z#&1UcIdf)T;6boY;4LY-bz~dH8Det2TjsNO z`*rn+HOHRAO)B*r#>;n0{=$q8?3ozXtf>p1W^Q}e|6*3_&LNx0lV{DtcsA-gIBD;u z@$F*#rSRSbee&RIS#yZIc3&jzxeV{ku(`Igk9X952if}ot1+{z#yA7#%WIR`tn+5D zy?eiW#P;m{@e#*8UDtx`w-tN8Te0`M6}x|6XXO2M{~LKT@~obVk8}DLw3F4n?RNz+ zUTnV)wc&@`@FQ*b(Kh^88$Qy4-EXx8J9oba?!S-yo%0olwFkZu-FXDQ3f*}Gz8c+m z1m1;izDcIwIqycyX&z(s*XI^?ac}L$dah3(o|V`;`6S|5jk2S&c?vPccRThwn(<|P zydO^^<}vmzD$B7xgUIXa6ZxJ+H=o~z$oCw&{2k=;PCbvv`2_a@x}0Yo+>06KSx+*7 z9P3Mn@%n4`J9Cu0Io4x{b?M_Qya#eo+so+I=C>$ndj(y-FZ*u1if#?#h&J@{#9F^vI*lJl2Z#{XPThBY&El2UtHxGutq$e*VrxPv4;Xd!&!Eon`$N@qWf# zbkFZHKH|Oy8!JD_{hVX{0kNNuQ`x=!F|!#ngg86DQ}WT{Pw385oMZhNv4#@g6=(lT z#>xBGtM8ugm-b%~bLba2e?xbl$1|Vb(e;y$_xKNVd7t3^M3-}q;7(^;>-+u}obmc= ZA3*GFl~r5xat*qiw)L#y|Hyt5@;?y~`DOqB literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/instancing/instancing.vert.spv b/data/shaders/hlsl/instancing/instancing.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..cfd2b12eec2eef5cd2cc2a0c762501bb8f077efd GIT binary patch literal 7736 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 literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/instancing/planet.frag.spv b/data/shaders/hlsl/instancing/planet.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..a768f1b209def263824bea7783eacb9775cdb342 GIT binary patch literal 2892 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 N?49g#|4`97*^rEGqt#jd2D1*wR zRjdLcGftogf!gn6>-I$4bFn{rmdbd%HUO(5i@}>r^q{TJ({D z0|P^)?7`vP{d=-5^6bA3^O4&#cvCS;GuqQcoU0nkvV2=`XZBe^{0Y1{_S{IOd;w-o zSkx^jOgZ=vFA05FL!8hFh{V}hH|Mk&t9kI@0xHaY(i@FBz`l*@r z$Xfze3tP_IOX1C!Z`V5cGR!AebJpNJBYU*KTkz(q%QxbU$<6l?nD07`^lZbM_d=nWw;Aqiu3c7eXK^ky`;6i3 z<66(r&3W9HkMsQvdlGLi*F1-rFL#ZJgd0CNj~`07`FX<4pG>&%x90KDggfha!p-+y zJI@y8@qE0y?rkf-#^e!u1*~SwzH+g9@ScjD-@6$#N5JM9%klDv&4AUWI5*e+7*m_O zi*xt?6S!w@Pvg-?J^Gvn=Lx@1@NT-=_adgI*~`awG+C_sDcBtE_B5Jz;u2c0mSHNoK$GmFoboQNH#d6GV#2&794O5St>);&oyNR3|V0G8A<|byH zdeq$l=a}DD)O`+C_nfW!0<%^<>b?Z$SUS^JaP`Rf8k}Qk@7r+onCTAKI`ydg2ApH* zUcQB^$4qy@)~ZLZ@4(J#EPCAo=UCe7K3qL=z6a-6I_Cqpdh~t>woX0jegNlKdImqj z)nm?|z}Biqub;urYOIdC;u+6kac_-#56%^Oyq77snlZm~dBl!_)q)=b`)$qAy$ydH zGe`Xq^&jAU{>>^&u@hi5|9`~M=WTG>_Z_%>4;OdiU9dUoQF9WU=A438W9r9?y3=55 zjn(mw;u)O5JcHGk@mkEiPU4M4|FdAV_|Dz~tA&~8cl0JlZMt2Ijh(uyyS}<1_d-OZY6l{d#_yy@BO;@k|NZ z$2pAk%zWb62!A}a*Yo&t=DSB{;yKJ1EuXo7?-E;MJ|b(^c#oofahDozP~6=+t6xso z`_ED73VV}xxXP|?%yoAAFh>)-$nHDItKVi zia8A7AzAIiSeJeM<@7anW39c6SwG|FC2Wt*m--Xpy@Ru2{Uz?HCe}BP-#*8!;H&?k z2hXiyet*CD@5H^tH%=|bt>Mc%3j=Ce`xPdibFbrwQWq@ z`Tm)>oy0rC8*si$7n65oZWmw9d>x{kn?1}}HRs*=w^wKDL-dQe_by`N?c16Bm~=H~ kL!32#yK>gHP7{-J8ShNWsrv@EFm-!VcTVO0!92qL1F~63#sB~S literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/mesh/mesh.frag.spv b/data/shaders/hlsl/mesh/mesh.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..b7626a88c842bf480b89b4e4b2f1d43de5d378c1 GIT binary patch literal 2784 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 literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/multithreading/phong.frag.spv b/data/shaders/hlsl/multithreading/phong.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..2990c6794f2672eb6095c6183c5e5c19e3b2c19f GIT binary patch literal 1956 zcmZ9N-A@xy5XDzYi$X2b3it`FnrNbF)Tl8ricM|$QdwwggP*uSg;n}t*@8Z)|A0^a zvA&pie#@O$yJWa?&dfbCclItMCaz9--U-k1GTvAH=E-^!F*D<(;l9B)fxV7zRyNAMUw?K-R2-w;SnRIFsNEYzaiKUQ9+|)Q;`3Um0iRRni&_g}&S}M8a_@otqsHC~;+Prly&!x|D?0GR zuWKdFzDL6JLM{3+Odq3|cQlH5M~3MYJv7jN;V?BH=d zjp6k%Tpz=YG0b;hdi2s7!OVbrO8l|vGlR=AdN*u$&+xKhoZoO>KIdPP%JGbkHP}aP zUiL(a)G5eH+RZsPWN_S7(|YOnw7W~MgqdqaMhqS118+L7<)gzLH=Q@~;Z5hQeA6L@ z4s(S!op4_C^S%F6KD~XC zQG*p2zW!9keH!ivGY_lBKMiu=tzJ*Q)gw+li}hWMdr2ODGpv`-^0P8>=!JU? zXSE0N>CfC!Ukh7vC2# S`XKL$435~8!+)gyQ1%x%z<=Zb literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/multithreading/phong.vert.spv b/data/shaders/hlsl/multithreading/phong.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..b5fd2a3074a078cda25ad424aee3f485bc56d4fa GIT binary patch literal 3384 zcmZ9O>2H-q6o+5B0xF2m7Ps13+yd4uE{Q=)s(~i8x3;A5>yodc6QbA zb$xNtF@3f=QxmixdbAx8)dLKAn#m*j|1j**1_+-{-)td zW#YO^%2=J{9W>i6Ep2UOUvZD^R5JiSH91oAYOGG|ihB_^--}#+FV?vQZmv3Coh>_< zDdX)Vp5MUH0 zCzssuZy-Ns4$loCJIP=y>*_{7k-ZP;A(Q=yJuCLbh*x^+EWb~Ex>Ehga z_CCbCTNAdv9B%+yL)cG2cZtopu|#)V8+cQRi((s-GHs#*|mL zKHtO+da<6n5beH&h4Gl`Enp9MQ}YjWmdef}ZV zGP^O29sbXwM_+M|FTlx%&x`1JOtC(B%w@3tzRQ;o>x?_}jlP`ti1`ZGyy0UnhY|T3 ziQ`?pnmD#&+-r&RErs8a#I>-G^NRd!c^&b*{@VRk4iQ(|8;EvmvL4^tn}|JHk8>02 z7d^d&-rUpMaPra9JLt_ly$dHFwZ4Zg=L+t9bh*5z4-%L6^dX$*_1B*F^buIQHCg`> zyIje4)@V&}<}-B9$j6z_(d89a^O-N;JY$?V z^Ch~x;)*l=KFx!_LafEu`o_$^MtA17xuwqZ%y{q>~dkhDB0VReGR+Ze`LH0`5#hI7)t;E literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/multithreading/starsphere.frag.spv b/data/shaders/hlsl/multithreading/starsphere.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..20b31b6c0ec380fa4c912480a864dc53731a4b2d GIT binary patch literal 2680 zcmZ9N*>6=<6vhv?ltD@tcF)cQgG$ABqs9<<8HNNzLN)UZB(UdYc z;DpkG(W)quf<{I`KyY9vlQKvD2_GCtNc{aSd%?*)$-3+NzBTN%_Ze1j!?3f1gH6Gmc~k%7=HMf4 z$D1dSKN4(>YdlP){2t66)|oqjyixcf=IPo;UX|na7>#Awz>~2~b&22YI|i;67I`(L zyjN$(`eWg0VUafuZOigkW(TjmUDpzPJpAHcf3^mn0H40^k2`!K{O`USt+CD|xHaY( zi@JNkQ+xYcB5yKWEzCUkUx#@GzYpv^EfT*U?^$`Cp0oGMGxFXUe*ho%wU(->@OqRY zUTn@Zy!XH!_3(%A_E9(f2;R7TjW^-VH9nr6bCbRlZ;tvCv=thx%Xy%jmcZsx3jFn)O^;>_Z(lx)O%p^H%^X`??lvm3^v!8XDW}_cVM;NG~XVu zn(shWdhhpwozJa;QJGAPkTH7SJUj}Rlr_L>mCG~<2$th&GY*nv#+uF zX_iAtH>SmUhrzBN{eA$enIH42#r-=1Hop$DhwB~1)FbB@*qr=5{t>S3I@TP=tW%G= z6JYCn@1yrmV0F*gx}Py?)uZkgaQRHXqNzvD$&{1teF{xIW;zYFPCe?*fXnwXh^8Jh zodsK~9=*UZP4 zZt^@C`y5mAyC{x6Tfq6gU%>4f-;FQ9=BP)_R&YLN8{Gdv^|j37ez#-R8mr>VtF{C4 z4C*lBwU~R|j5ikjcY@X8J^Ko*7G~Z^_}AD*%yXCTN}BohHKz6-dyc*9qy8JPIp+HP zmPhPuuv+kUz&%*3^)A>Pb?aB*)gu2ru-bxj9`A$Iyh7UmR`X0k`ygor{Cv)B3jRaP cdh?CfV6M3aZ_G8#n~td&8=Cknx<8Kn4;>}*CIA2c literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/multithreading/starsphere.vert.spv b/data/shaders/hlsl/multithreading/starsphere.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..815e7257e17247f0a5ead54a3a9b5b10d711d51b GIT binary patch literal 1288 zcmYk5&ref96ooIX1w};>`JqNEkhn3aMkAsKNYDTqTLr;wO-y9b_JzKZxbsi&&vj$s z_r3Q9JLGcb+;is6nVHvmZEY%IA|hsDm;a90s8yAEfn{&S)ysLWd)61!2o+a~T#p9% z8^uQP7jbgb9_866ryP^0~!Z_pp+-G2Tb3|(s< zb&lReR_rv(JWESZHDappcGhoQbkAFz_R-<-Vf*7V*U0I2Fv<(^_`}z|cKh>t$p(ym z()k+fb`P9&&%3>{70x5}(RuFcghT9IEElN6?vd~Tos;LaN;6*L0pd1sK%b;@{XV;h z?Y+QUU6WWuH%S(&6Z<-1eJz8%Ycmhl1%3R((H{tc@H={%FSQPR{$ceZS*>24 z6YiJri!rQczbW}G^q%QH;r`p~ASZTiA3Y}BOXl*sc(Bhpp~kmUFIFS(9lRnur*CNw z?_-0oo_fA!ZqHAw(bF5knj_UVnOpPBsrI(2>AS;9?{0eyx%J26bSYFOM6zkh}en42$kNqE3HBzDXt*ps=$Nm;w;~DH%e!CHWscaDc E0Nis*g#Z8m literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/multiview/multiview.frag.spv b/data/shaders/hlsl/multiview/multiview.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..6966e9ad87589fb7abd6317ca898f0e8a94a36b1 GIT binary patch literal 2104 zcmZ9MTTfF#6orREt3oXx0^$XWXf$dXHEK)@YJ*K*D%C(R}{JLNb?5Ed+Ue|IHs( zrAg`e`E09MZ#Bt}cnv&PYg7v5e;TJZTPxQZ9dYb6Un*|piz~{F1ohZwrnI)+MAX9` zPin0f8ih(QRjEq5w02G`Gw{GU3pl;toB^CZaP|!+56)gKe^h+Gcw9#Q1Hd8XyjhhB=A8QF=m!GB+a?@ZHpTgLo>6uLxkxu zJ`%7ydwGY&(abDvG>B^_;p}-##-8Ki;~p~~b5CexZq63}5v}Y2eMCDys&z`rF|FW9 z{~pQjG;&W!vooI(KPyfhbo}SNpS+vm%t9|_GtL~HoOj&GdB?_?m44Kq{xi?%d0k%z z^YZR^nE$ufajo=Xmb{F7;}5&|Vi$kZ#UFR^Ctdt$2WPhD9h@`ayQlw*=HX1@GWKG8 zN|^I7eoC10Fg`8JdE8eOzVp+vxQskv@!wKK`ru0{n|&|I(D?SPRzY}47WLomvT%qYmecZgpM?Q-`}|b=HK@tN5JAli}xH|4=+LypeJLiJ>3g5SrEJ_mp{zZwRw*>&Fi>G3eH>C2alh)6aaH z-pAb_j^7HKWlNaf6k?c#?-$K_zZK>@jK33R-W|V}_rk=W+q?ZB%)1?vS>8us^zT0J zlQ6mH7V}w{{#JWim^kzY{;b===sc$F2&1uo)4q5uq?Nleq4le*Eh8R3zrF04JBp7v Rh&v-g!^d5P|55cDvcHt{jxqoM literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/multiview/multiview.vert.spv b/data/shaders/hlsl/multiview/multiview.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..54de06034bba6cd49008ffb08246477f2398c03c GIT binary patch literal 3504 zcmZ9NX>(LX6oxO!Oac)>LdDZ9`|4Ey=QMMfMN>yH;gwIpcocsx0fu zI z^dY#8JeU29R_{MjmtGKlwd+(^^dDLC=3$+KP57nzR zPHcYpd#Hs()8=VGs}`~ zPi6d`ougRFd6#GSp~`4w+yHs!TwAQ?$s$1B*#{p1WxTzQ;P>6Nf2dL!zw?GXS7&}t zt+uVXt#r`cY>quqBQ)=%7-Fk6nDUD4l}75#nBV)Ghr z?S8}+xUUIwd?~s;4kE*JA8%>{*j420<$|0mo$<5Z@bL`BHCnjVIQ@!oo;9zB!Cdj? zqlev`Moz!A=zitBNHPyb*(fnj*<5bba~Idg8fZI&K2BS z=yLWS+}nxsykopRXZ;Rhy#Ct#eYFqYySBLBchQUY`yROUe&2_a_bmFy{eFP1O>E86 zi20q1_(SA0qMx-J>~c~2BlKeJkHM|AKY^3Cw*FE3Q*>?dEaxtPH>=nW)teTy!qxFXkM%*gof5Oe4k zZ{vG(-;RF+ttr+oYW#rSK%&Nv=yHlHY8*>F{sgB_prb z(9<&)X0o;3a`xW)@9G~3L#o2JD^$Za>_McJH{0@hm40 zF0hF8yhz2^N;sTi*Oyj}8>T`zmsExNj$mIrH;b=Y*!q^6YrWNOuesWuThfo^v-6)9GqN9Nu)5wWoEPfX7bfSYrxxHUc*^s#mt*jqyqmX* z=w|z3y+4zy@Wo8}4aLEPFij5U=`ZIJTg%Y`^|9xdu`~1>m+|5nVh*u$EBnP|zkQee zV*Rc!sK)uZ#*tBy%B300xu&U7ZV)+u{Tg}+yaU@MHhyP; z!lwzpQQ-S$58@xeHpa6~lUckAF-A#yMzL9E6W-m&n`iC;TZ1|GqRr`SPct#`KEyp` zIYgBA*;w~lgW8q!7+LoBsUr3;QQm3!gOL{>Wlql4T-wf0Y}_HVx#h%fq0Miv; z3+voVr1zl)^A1|um>SyO+C4S!3AFL@`cI>O^CuxB+&*!{;M{+N8uc^t8}Pk8DRPg0jNyouPG zcU{go-a_Q%%;6lHh`c!#BTo5mgU$Oa-uthx<$PZrMs5XL-gm+r_9&Nfw6NvUd2Q^) zi0#1-ss5e(Qr6Q!29R@zzDJxR|25)X{hlr7$J%#L-(0L`E%N#vN3Mr$9r~Iop%ydx$y8v)zdN|HNe2-ym|n<7wZw*jx8~2Pgku z-1j}UoW1@VxgW62r!VFD5!+mQkTmc6*z&1{2iS7fkaGQmZ9aV|*F)^BxqgO|Pjx-Q zmMhow3)p=6oYM`oob@<^UlBR6@9ks6cU0_m>Nmu9M(q9g9kGt{^zCo{Byy-t?rG$_ zH*;k38}SEXtUmuA)Oq@?c!qeU=UgJzcll35-aW24D)3wK7h=6-c^>!t9sTb0+ikDD VukzMz-s6azzHJe|3cEJK@YHL`Mxc66?_?O(6 z_&oQ{kUQis=Y7w)=e#p>TCY8r4q+mMFcbFq@0ts>$kYpLbT*tj^ACFmM}it=#$>VA zL&p9UGAsT<=zeUEM}zSQI!uve+|@b$eul06x$8I6MV;gEsQIHeY<}AMve9nuZ$2TO z5iu|I&CqfOJm?L3hedX`KOFT>c8YY zT)|i^>xt(Ic)Io&C2G1FIr)?`U*we7n%5%Esj+}>zf$`o_ffv9XEeSTv9;$>dV{^e zxo@)Tn{%68E!Jp&@3VU^^2Q&s8ELZ*JHCVnwFYj_2vyS{aocH_&Q@3;E z8N}wL_zr%G+uJ&CG5KGy?z_l2dp{%h9$(&h+k^8AyO_KyaUbyIe4h?kzHu8f*O;^E ztg6R3=wRw`M%61eUv19M9%kH_?F!50^v)*E(B?MPxTciH-UV_eVbj1el z-Z|&oxpVGpI#qX!Su(~H%$dHdvPsRDw8f}Jfl7*R<~tgSFvOA_8q~zGxsJ7%yQK|H{IIW zT~+ax@c9`Jt_rUy(~CantIG6&M=vO&;}?Bhnc3hgI#pDzi76?wr)EQ$|4)yaa8;Rl z_&wF~j_B9Y@JVkL7=O&p0^K&W;tw+BKs*2d literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/negativeviewportheight/quad.vert.spv b/data/shaders/hlsl/negativeviewportheight/quad.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..2e4b9563b0719538bcdcbaee8f847990a3dcce60 GIT binary patch literal 1280 zcmZ9KNlyYn5QQ5M+;Kt06(JfAnh;Ig7jTW?;*6riE8aM;1i`aE+lz_s>*+>glcMX@ ztGy=?-xxL~W{gRjYyER(Ox#%#7Q;@N(ShEqH(G$W1dky}(&`C&zllidmy)ek4f?%K zzb93A$lB1u_WJ;n|D{IEu+7kLta9i9fv3W;Ync*JbBX= zeU_;;Egc*E=7pzplM6d|#$jrMXLaLCKj4hR@ELVHr@J7JdEMwa`LI*+`5am4#A7dr zFX(0_?Bv|k4UY}H<*<+6cG&m0=P)s6@@EEi7ju{y=-FdtVAt62XNKq-Hs(+oedEhv zjxS|f(2Xy>?Mr+u@WCI<416>27xJgaWeNR&nPEjj?NGJY!Kwrw>?JY8V?(DFZ+#_S z_HZPD=Z$^7V`uk1C&I+xLk=)L@a*nXLJqzQ-{YCHKgx&i;aq}^<82qxv9TL(D>)nU zg_@eV%M#-8hv$2vHt%#Pp*L#N8yJ83;JvRT@Nn!E?721R*r-jNbqO{O{=6wR_~=`S Qc>0Csjq{RkO>ivv0prF*Gynhq literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/nv_ray_tracing_basic/closesthit.rchit.spv b/data/shaders/hlsl/nv_ray_tracing_basic/closesthit.rchit.spv new file mode 100644 index 0000000000000000000000000000000000000000..95890dd79693ee41f7859fe0afe7b25b97cc7e3b GIT binary patch literal 1144 zcmZ9L%T5$g6h#mHLQz3Pz$aEqq5};>V^pB=?Zk9q($mgW33dWV+LnZwiNEGwX#5T* zKGrJhYH5+(XYcdAw~A(Cbvj}yB4*`h(%~!El_8hLdr6HQL`X zvsva@H5cvpM6P@rCAnm^2mba-nhdn5H zD=uKuWHKJTd{_3U_iy95Vs09zy|u$MUOT`u9o>I?xjJHz9atp_;B%wWzfbX3w}?3> z$325}S$E*(WX;9Jv6_~juIc0OqNZoyy_!A&|4`E>;VzK-pHj0x*0abTAnQ5!Pq4(@ zIky1Dstly{lYPRN9&@Z|*wQT=R+&t+8h_i3e!}=-U zvMe!kRg zG#9#VZRo;U--_~;y#)%^;e?MT`{QY8%ogj+MPJM_!qmiEmtivr4qi;~S>YhTv%=>I zJ}3N~;Pb)^5c@B{H9*XBqTh;`=Y@Y1CEW+-1`0HALBWdolJMK>WxXtYS(qBW|44TX z*Rw=D^ij*56_o>pMv8pkB?W6+-MkgOfojXjA2J#5dA2TIQO$-jn3^qR?u?p>cvTsV zee^wLbUaTdp1d=@$9h+4nT3V#r!HqxnOZz}clyu7Ib%mbe_eB+!7t>)Ir|Fs_#SjP ScM$jP3ZtXp0sqqJCyHNWPA-T5 literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/nv_ray_tracing_basic/raygen.rgen.spv b/data/shaders/hlsl/nv_ray_tracing_basic/raygen.rgen.spv new file mode 100644 index 0000000000000000000000000000000000000000..f0a0a140230a13aa1e966fec469bdacea0aff45a GIT binary patch literal 3468 zcmZ9M`A=L`6vr1yx+a%l zN_>l5oja}^)#4LjVG&Vqx zh@(6Wm2I)y!T!DBjhbAa_JB7CCv;bE?gxI-b82iA82Gu1_Jp0{Z7I$@r2TOG)W~}J zl=j2%Q|}&~kvm~@l&Ak`*6~glwqKt*f<`^d6?K~C zKwxxwUSFmQoPLqh{Ef0%Z~S!G>}R}5Hs?0JST^S}jvb`<64^Z|zEt*s6kjHr0&Kmm zE-AqHa?yVT<1MoP6ybo&rH7Cpq9}SMWfbVL98%RQ1#(?}xhRX_x-T?V7niVhrrXT5_)y>^@kx zPAD!tc(LVPFYbEQTyF6jL^Hyl&DF`bDNvqsh|%C%wMwso?-02-1G#Nrqp{{(FA}>_ z{Cv&SO5Lsc2EqG0XK(84*UULM z8~&@kZRftmb9#dRTFul&ui*vH%X`+iL*m>q`L@f?J@JiVz_|m~GvM@<|DMIuM|xT% z;D>WR#_1j3K>D{$7X4x^gZ}*`cA;k0(!+Uy{fyt1;`H?P3Vufgzca;m$-XPa>FwPq zPHzu;eu?(y?(Pvd&kp@k3*3D7%I0kNs0(hs`(zV8pz67!`vo+>pdV9O&3kx2z<;y< zCOqghz76E&jA-O0{viR)_Ig-0``ccR$VLN<^j=5A@!#V2Ix3rd=N*o*i1lz>hQ@APSbT!BCg zZ}u4h-C~}VO^oFs<~adYK{)IXg%-|^aR&BR`*`snMs0zQUm@5#1!)86+QXR|x_KsM`% z$KNJcua3#aPu*7IaoNW_G%eI{KD>!TL^L9QG@bfP4!`BJs|5!Hu4FZ1n zdV!vC?oR~#oQa-%>NQOZXFuUJ`e$(`y~f$CAD?+GqnZ3$G=DA}7T7!MIlhguzYuDL z-ggPOw PlVam%Z^qxsbdm5M!jUHD literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/nv_ray_tracing_reflections/closesthit.rchit.spv b/data/shaders/hlsl/nv_ray_tracing_reflections/closesthit.rchit.spv new file mode 100644 index 0000000000000000000000000000000000000000..c7833f270f0a1f6676184357b7eaa2106c91d4b9 GIT binary patch literal 7148 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 literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/nv_ray_tracing_reflections/raygen.rgen.spv b/data/shaders/hlsl/nv_ray_tracing_reflections/raygen.rgen.spv new file mode 100644 index 0000000000000000000000000000000000000000..d95bddeb80c96b9e351642d51ea465d0ca6e8388 GIT binary patch literal 4784 zcmZ9OS#y+C5QaaJOu`ab!=?}?>`RP_fVdJAMM{(2I$>_4z;|ABhx*nvj9RIZL6&a!FnhHl%jcgN5~h+wPqfBp90saSI9PE?czl*Y>* z@xNGWjMwU8rO^wq&bwZ@XS7moG;D&!p_VUxEI?xfiJ>#f8goZ_7HdmwzCTC zIhDY(u!}i78+$m1=U^YtVXm*)KIA%~s$i#hDfU&>); z{&Ef*|4JKvHQ^iR-#76Z;yiBTU(X^A-|N`UMxW;rhwlw+<9Bm<@AgeZPH{QUBkcB_ zy@lvMk-kBv6X&f%QL}YQ2wbK6z_7f4Qjj z0k+&DDgHxjxy8uI#C?SQA>wz?9NwAS7W@a%A0tzc0YvU@^e2dX5wVu<`cp*S7~l72 zh`HQnjBovOL_T7^z&56cM9i1i@*~WCDf%nKee!-sl}D+e?`uTAwe8*aB^SMagWcZy zw{Y^&m%V?7$VcAqv6m%&H@~>m*gqihifa<$Z^v5O(LW--XY<;N*get9PuT6f{0t|b z@8uV;yz}skzapM1`uHtz@~-HkH~s(M_r%?THuetsbM}8A`dq=C!H)Rg&L+;Y#U1>K z?SA9+FF|5fe_`vl@96PwY~$Ts%U<;@M1~N1)sDGcjO}|EK%(DE;N&A_QHt?* z5HXA4eyk|85$_mNVB7cnkJqbeS`2>$kS+9GNyD F{{q5WmBs)7 literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/nv_ray_tracing_shadows/closesthit.rchit.spv b/data/shaders/hlsl/nv_ray_tracing_shadows/closesthit.rchit.spv new file mode 100644 index 0000000000000000000000000000000000000000..ebe2f64b7c811ae38f641779f9ac80478b39d275 GIT binary patch literal 7912 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 literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/nv_ray_tracing_shadows/miss.rmiss.spv b/data/shaders/hlsl/nv_ray_tracing_shadows/miss.rmiss.spv new file mode 100644 index 0000000000000000000000000000000000000000..fbbb81219decaa52c8abc45cd3c487e50cca65c5 GIT binary patch literal 672 zcmY+B-Acni5QV2n(`wb$THE>uCU~jzQUtO103w2r+pvge!4?U%;GHkmJADK3IlS@b zJGD#WhRK|hb7pq38wLkevyz$BE#a-zw7}js&1zP$>#H=oOtaiQXXD)63`TcyhBKe4 z8W!0Uukg?fMiN4vh&&0599ai^KNzR(;ptX-WaWSU$f~x>_eYnzVQ=E{-oo9+OB;&` zt;0G0n_$7qXqv(6+Fx~^SHSXk&QIG?feWt}_%b*y@EZ8Mz*oR81-=T_0KWg4I0JZI zhkg^DH^4tchqKbYF(FO3NoaY#0e*YE=y%auV0rZaN8FD%$3Lr4oxCx=Hu(cVdW%82 z8F~E?=fRgwF zroWgpF}OBvb*cNl?@Q~}y6A&OP7nIrrRi&%N_9m2EZ7RXFDw z+^_m&EOC|Yk4EQeU9}q=7#iL`G#rPs!^JqvtxD#M%W9sHGwT+)jk3dBE*gvCu$V7Q3>M?*TyZ*%_7BOQ z(QeMgQ^Z!gcG<<*$*6PlNN0XL9F4@Y%Bn-S(>&`gu((_}E>kP35)B(Es}-HHcZcKJ zbs#QGMsYD8X%}Lv6Cd_WKDyz`iJ2&#iWYRvJ{cFTFV{KiSbp?iaiEaoq4q`6O8Zs0 zEwTr~*|9=6lH`Ij4(5wP;n*}sNzOuVCVd=dOZO1INB*nB*`8=Br##t&v$j9ZkJ4$= zsPn+SQtvqv>&VrUkE0xomTj@z&4GR4jhbAq_JG$3Cv}H#?hSs*b82iB82GuP)`Xqr zEh*0Zr2TOG)W~}Jl=j2%Q}14#k-K8Fm8Sn`J|KKff!(GR?F7tHohjIb31L#IpS!5p7O>5K_w?S;OCa{K%8MYTS`>*R3&eUy69<# z{`0Mxxj$kI?8RDguNCY*Shr3nEIo9o+m$#*PJp7V&&;Jda; zuYzwDxi|y4ZD6CZ=6o*_yHfl@&D2WW&HnwPncnQ*9`Bv?9h%9r2qUcKNw0 zzFiDB_rQ7voWAn^vv~SQPb&ocaPG)Bz2n zJ$H1!fCd=!V^XVm4-W|VZ}#7Xqh90tKyJ>6MsDIC6wqw1hh($A?e(y1G{8vj^@uqB zTl`+fWRnk_z33mB?e(Z^v|D}rW3tg!3x~Y+xNLO3P2`~GXqU^+dwfFRjRXQ3Z}Le2 zoo^L;@jjmt(23!lJ}rG!O%f`P!zz<(9&@;~ciGZIo(UVWTrfK2qC%s1hEbf%oIJ@=ZGp}Vd zlYfim&xIobduKhzw^8;NLbdQ)V|`-R$!-#AQ=lI9XFu}ev)o_GCMUVs18#l$N;X;` z5YO4Z7SOHUZ@i{yLHpKgc2?fQcV0{1^Y_wNPdxq>fqgb<{y~@*>^t?N*U%Z{zDco% iHUA{whxcjz*=yu#m;H-SBjj{aZ2aua_*R=qs=Q literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/nv_ray_tracing_shadows/shadow.rmiss.spv b/data/shaders/hlsl/nv_ray_tracing_shadows/shadow.rmiss.spv new file mode 100644 index 0000000000000000000000000000000000000000..5d37172695adebda427913a5b6ff2416bca6ff6b GIT binary patch literal 608 zcmY+B-AV#c6opsnXjy5d_5&3o-4%ElK@>ef1cA45$S5zgn8N6;m+LK}=jf)NZ9A zz2P+;h2hvjktZQf3L+}n&VaQd5$lGUvqo~>;Yo`RdWW2yaxRy zBCmsgh!!TFd%&GJH;9x;*U2B;tM{6Cfa>6Bla1}!B>Ow;>A-i%*1Uf*>*2e1pCfMF u8Y51Z`+U-OgKV#B{14pk6z-negzL{Z*P406o-_J(z}BtVZ~nze$HXrp>nEH5 literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/occlusionquery/mesh.frag.spv b/data/shaders/hlsl/occlusionquery/mesh.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..6c02ae552e49844c37e779954cf2fb969075d95b GIT binary patch literal 2508 zcmZ9N>2g~|5Jty~9Kgm&NaBPo$O*fHfRL5oIKnYzQ7lI`BJ3qQa!{4Llolv{0WZKW zo`z=#&jUpj6zAM~JE(kJt?BRUp6;HW#S`P_kEAq~QkqTQ@auOxjc3esn##u2+D5I? zAKb58y8M>**)-vh*^Z{^G>JZr?6x|4@>=Ce$P_|?^cZpsi+{o zt5;d8H||txWRf>d!7tZq^@atMh~V6U-(0!3T(387zXO%o%z4Q6cG%2)$aXPo*0?_$ zWJPQ=zul}hR#!IRN>nkrz7k9szPV8!4i1I`R4UCm^|k%pZmau0XLpzPyZgNnKjSq! z{mxdm{b;T|Xm;8^G~3&7Q&|qzU+X;hZXn5LPv#j9TD{h8R%vI?60GSp_66KZ-S6z|4EyaYrj73( zw6}-dmP>@2Oz$#wb}ED3F!#BUKEktLbA|mV zy0rv8h90?$cN|IS*3xNaJ%uKx{{>beK7r^H5_Oz}2R6R`B8u9&VK>kJt!md z;MWk(V~i-`4v{Uvnk3H&m;@z$xL%=ijoOyf9L ze|>I}#oXGj6Vcwiig>r>wYv_ve^}i$#P#T>kDooiil6IPKwO*m-nH3(@4K}G_Rf!D z@BJwD?vLV&hp_iwdzCue&&!B;y;sqnD+T{MKJM`~M9%y5C$;((`29_d+I&BJGpt?R z*w+3YVr=hW^meh}XNo&?6Fi2jWIlP%T(f+{Swc6C_c!9)LYI#?RrH9X&EDH9`H1sA zx^cYs5oZ})KH}U)k2ul-JkMxbBs< zsP7|m>+>CoTpy#$2mS=z*nxfjt>rg*KFxRs(MR6=a%+hBJ%`%e$6xWcwmM=CeXPmz zA{X)3(XBJ^U3B{q`5Nf@$Va{n^vI{(d|}%xY`zKl`Bp|PpQ8Jw>SHaQRk_IR|2OLk z{297FzZ7e^hpvzO-J&0#qs#jR_XWC~H3s)(!HqMn(>L$vSBUfV*X}$1FK1ldv+kJ> V->=ci#55WgMB9=egHVZIp-yxxFl0Jl{M2dczSiBU z)w=KdzUzPG7Zac7oqNpd8*g*C=l46yJ?Gr}PCGkBdP=2rrBdn4(x3cwZ7p>qrZdA@ zw_tavFU{AM)jJS9x{xx`jgYLg9@&6wL^}DWZ2{*p|2Ct~%~n>ME2~XZV!AR;eY$=G z-1hODsd{5+eo>z`=XvAx#d?E1IM1J}9jPrWR{!O!XRcPgZ?1X>t~<+b4U@II?`cZ1 ztmQoR=KU+x(ba{zoVCcgq{`HOKKdOuSF$|nu9Zgp-s+)dt@Exq7lYE!uV`n|EEb z?a6Fi|9LZID!mwfZgyhXCt&4bSKPn2c>i+w`?rTn;8x}v^GjKGwJhI$@|EG8r%P*2>Utco)vgIx=UxwnyNhF;l~`8@ABuygWzkP|y6^>sOHY#w_Lft{oG zrjPN?(eE{ntuOE(y5DPH{rz6^xc&cBiCLAixqFst82O9pM%X>eSsq2qFLsu#9M*m; zhrI)Tqx8QXf9G;3V!weeL${W|m!sS7G+lY8S0Kjdr|ky3%_*;LJ$^T1)b3p#N3{FB zM9v2iA3hI)jnl^*VtvB?5V|@1#v;eV=>|=idF|R)673&jupG42+od7?D$a|J~eTz>c@)756S~2b!IQf{BanB<1 z#yQXD5N8p&y~F1de>*<*@IvC)O2NIDINwrmFD1_VpXOEgO}va4ufO(Qz%&gIwiS>)#UqdhUehN-L-}~!e`RM%(^kVO);pC&IH__!>!M%lk z8p-$mcH;8AzXNBy{@U}szYErGP4?7cmy4d>LofF9KAe2Mrw_pL*5*tad literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/occlusionquery/occluder.frag.spv b/data/shaders/hlsl/occlusionquery/occluder.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..2325bb39be6785034b5bf44e0abc2d901ef7636e GIT binary patch literal 648 zcmY+AOG`sR425H#KHI9Gps2UH6pAYmL`6ip5vsMgmFuoxTPf;qcO&?Hw|5o}WRjed zb*{A@b$-xY$J=Y|K4!hS8vc{{6}i5Rsdvqua^{IU zAQpQ<$2a9R38V&fl8_J zRq01BBiYhk$2J_r-#VYh-B=wOPwsyFxzju8c78}Vp8k8?FJH$rqC-wCBjjK5^K}P> zllG`kkDArPYE*kT^-KG?gRK@d4)*qCNhveC2z)8pj~WEPvzvG__Q}kUlDF?I>=S%T zeywJ8z`Do==Gd;l#MI(ZzujY&l=oqlfBQ?jjPS5MYWID`uFqFiKEBfh2?tCZz8o;$ z6HE;-^MLUKGsmny``VRou!D0RIag6Nz7Z!sz5e6yy)3CH&itrnar8i3agLjh!*4c@ zUWq%EkjvhU^-$K7aQJOX=VfOlTgq}?H<)~2b_GsKGQzxPeBcXW!51YPvR%@hmC(=q zfLEkb$MEW$o%uP~sk7$M>5FaQ4e8XPmrU3tobj132fNG4>xyn_F&lVOH@(m+cuO~P zkQ2NeF!pstUeleE$93K4)a1QkHzDq(Fy8=MPWY~F_5hFlo^I@L;0FO)AN(fh)B1iC zFmvHw)J;5nJ{4vzFfm}}LSLA{%r%SInPKMU-Qz<%b5H-Ta_+G#%!)6E*?%kh4c+)M zOG!d~!>?vAGxK}E{!ISNxFexI!&&LnHk^}Ae|2@i4tFKQWF^?1%bT3==+x(p?WtFG z`C5XVw`DoYfj6IuFmb#$a)9x{&i<-uKE|ua+3Zfz+-3WzR+)CUPY$HKk`?K8$eqU@rFHC06 znRCy~O;S54IONr~;YqZxIw^(tGgZPW-A9lr7yQ6-U*pJ}GiC^gIV z_#-REx3l}%{ES|T(tG*)TiJMcd|KShr+168SN}Idk2d^kR%EMRoBSm&V#+qoKO#J0 zJuBP?x$lrTp|WQ_yL5m9xMO= literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/occlusionquery/simple.vert.spv b/data/shaders/hlsl/occlusionquery/simple.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..2756aedeb775856e17f7c55829447f613a82dc45 GIT binary patch literal 1556 zcmZ9MTTfF_5JoqYf>#iciWr?zg*Vf?33fxl|WI z5q%0-w2Wequ-7zI)xT-$pjVv8KIe^%v5)x@Xn% z_ORM&o*aKTZoYk-#W_U?$#|4H>&-XK_jro1>0S9=oa_#9gZ8l9&&s419TDfgu3C&E zwwF?hGHm@xY+ny1{NhTE8{F(JJe!#clN=v5-DiV)Vx0A3j6IuIo8qSPjGN4}XY(!) zYsK#qdpKfBIpfx_eK}=hohsHATTgsB#|3l=?7J~WzDln63bKmNy_FIBd6eU8*q(^5 zV@JRDEb0sw`y0gH#Im+`m-5}oMZT2x?XJp1Euo#kS;Q-7YulUn7TUh8DPGO7{uMIU z&=n%q(b~q`M#uRo;4;`5<@LKm{c_@mXnTk~ZROaW^*=!yuk3*B**9X2*q*g#avXcM zZ~gY{KEzMSv`=F__Wg(K4YaZL_6&)4iMJ=PGx+ZH?-K7G?jqj5#|`?#+Sc*A9&o2K zK1b}^?Aa~a(`jAk$;QuRJ8yA literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/offscreen/mirror.frag.spv b/data/shaders/hlsl/offscreen/mirror.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..89f23ca2b62227d46b5ee16cf089779a153e130a GIT binary patch literal 2904 zcmZ9N`EQg}6ox-qW(H7Mq)?%XGom7b6Jv~;G)k~Q!!Nd>wfdVGr6FV5nP!|Ccc)Pl z_kG`R-&fp4|17tJ)aUv7o#x6--k$Tm=X~ehbC+p<-}XwDt;n)$ZT1I$9UHQ~Lg~-B z(RJDCY$aBIw$W@E=mTb`m%w_MaSGz~=i03#m9lcS1+9Dc+;shl!}aED1Ey8g_Pu1^0hQu^*bA#`sDtbN5;ku?Yn%bRwZ9! z5gQ+yI5>H5?1tr->u%3?^A9JcZkgPBXmtN1T8XaGUP~w!qfbqY&3EVKyVfp~qvp7A zN?y*n-;Hq!1xC7Zz} z`>?!uqs;BTp8+<2QM#0`&Ha`6er&^cnCm&oU7Os#)41nw0dN?X*FfaE?`d2f@y%3U z1+Ri#e5=12WLa;|Cioh>DzKJux$92(nQ+%QNc=3UHSA|Mw@Gea)=Uv|twU$*iQM%N zwG@%-UNMG)pS{GF=h+BXOA%`xKtHv(xEOp>@om)Fob!Fx$2tb#YALqRfp5Y7?B6#O zL++^3`8i8&p1YMS--G(rLYKQ&=V7g79pmR>t)niFGj|UM$f_3l`B?LU*YMqc^EQ&_ zS=UguWA(RD%e!t}bF6(4)_b5Xzog(*Y>gY{BQw`LW9D3m^_!@1b;0ey_;A6!BSXyZ z{dd2HiMc1*;r4M~!p*<`H2y%s?eoFYcrW38zmRbEa7V)3Pk%dH&$X=2bGa1Qzuf)Z1?+8{ z-aMn-z#R4Kh*(d}{3`Y`;Qko1wtO$&x|WB4`Mz5<`+XRw`*yA286E}d$H) z`p(nC#yqbSF>TEADt-^dJg?!a#XR5Re+wMWWBhfX?mYU|@~yuC$^{?7z6mNI?%iAX zo{7J|e&aoR8>q*6-odx;b`d|0uNL|5;(K16tKYu|jstb?hT8kUy2fJe5AdDacM!Ec z#8;2GKf>>UnEPXVwaEVjKb`wixH;-E_hZ;9Ata2Hq#z%~99&LR8JH9#QE@0&mtK+K~D`DlQ_z!Xo_z!n50>c0R literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/offscreen/mirror.vert.spv b/data/shaders/hlsl/offscreen/mirror.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..6c1d5e98c607fceb0651fbc19c82d59be0ec62b2 GIT binary patch literal 2184 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 literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/offscreen/quad.vert.spv b/data/shaders/hlsl/offscreen/quad.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..5b4eecdc002919dcab4bc412bdaa2556efc36751 GIT binary patch literal 1820 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 literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/particlefire/normalmap.vert.spv b/data/shaders/hlsl/particlefire/normalmap.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..4b1def56368cc611d6a15d4d4e38bfb22734e70b GIT binary patch literal 5592 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 EKXC=dTL1t6 literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/pbribl/filtercube.vert.spv b/data/shaders/hlsl/pbribl/filtercube.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..9b32c2ddea8e5e10473192e2816938ebffb71795 GIT binary patch literal 1404 zcmZ9KUr!T36vcg$@A*oSU6bW7qJAAyhS z3kl~pI~N-ea9Yh_#IDkpFBPK*^1+Dha@9q z@MHafp9&B9-IO*s8_b}GNX#>>v*aup`D#P2YfHzyEF#nZb5~W53XBKC9aXZPwt{As z(*wCjijL}-j{R+&0;cww*63=Ab?N3cgVBL`Jutqi!n_3<_=Z^UJ;kbW3z};R?&590 z){Ei$GkNMhP&jw7zac$dsa^C~c!aBoS<=io_y#}L%sKb~uV}_2`@v5FCcmOiS2fqA zSkuh9sx@z7`!}@44_saQ>ze5eo_en|lZOMp4%qg;5yqeSeIN4p*^wUqd~ayL_~-uT z0yh8jKpy|x1NehZ#WPw4J^a(|bpj&%*5Et*HSR|3(hQu^&BozQaq^<-Lv+TkeI{aQLDAO9dPQJ#P$0zWAPsJUx)-JE$qH)YZ1)8snT({Qv*} literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/pbribl/genbrdflut.frag.spv b/data/shaders/hlsl/pbribl/genbrdflut.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..ecd11746007e34b9ad7466a32fbb05b20ecb3afa GIT binary patch literal 7368 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 B`*Z*R literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/pbribl/prefilterenvmap.frag.spv b/data/shaders/hlsl/pbribl/prefilterenvmap.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..027bdf84ec64f28dca5aeb70d26db53999cddd92 GIT binary patch literal 8564 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 literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/pbribl/skybox.frag.spv b/data/shaders/hlsl/pbribl/skybox.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..9731fbbce3dcc78768196ff5ce1ecdc08a1871af GIT binary patch literal 3964 zcmZ9MXKYth7{+f~pi+=2AVX|H#X%Yq#292)BdH|BRtx2$DbipQTAB`m--@8(Ld98J zC@LfFy~VxQBe=!A_reb*{(iUjC71tgo}TA<-uImMocH|iEh!#fnj}R@k_<@x<-gD1 zq&Ri@C4JJddUoCH%Jz;0m8VQT+4z8@#379hOiGhp@M6&1(A1)DRBsSWp8~Lwq&MSy zjNYt!B)sFI*2c;UI_Ec5HZ?aaY{d5uzj0|tXItaUmL)y8qawGxp}BQYV;eHf?8BH@ z2Xn_nZs+{PwGC|z&Fu-*`Xu^3IXhkBD7?96)y%t&7{) zobkx@j0+o@n;RHCf#*H6PHEbcrk2Vj4Q-XRHFdM*%&Ivj?WNiFYH?>r8my~7e@@kT z)idX$YxO#$ulDVD{8rDEW;eCWt)G`xoQ$9Lv!@{ovX&;*tnPh`1wLx)<+VK@XOPFZ zx&nAEwSCUV)%m#R&BxWoi-7a3<(xs_Y*vr{jz{~1XTIJUInO=lot1fUk1@BJ)9INv zj9P~=mIK#1DbsxmbQ#)bICJ|kmIHI;{Xvp+%@~0`9Hv(SCUOGx0ANla<_*M~G-*;* z)byxe>3)^g3(&)G5q&#^~%B6>~8hU z5o5Fa@y@L`n$bOaXXAgw z7yQ1MJB87DQGaTt-J5gk7+uFT&97&4ZR4k-?VIm|kJ^6uTlP_V9`miC_B`&tDAS(D zUg^31az^tjz^Sb4nVjq684sY2V{|R|vJIFYdV7K1QJ{Ag=v@VRcY)rM(-Yu(bK3gr z3iLe%`rZP4Ux8jtAKuA;5>h?*8u%h%(LdTz_s+PWAF6j-mBjvxp(UK zNbY_5Es}eeeuw1i8T|&yH!%ABk#A)5+ZTJkA8wt{59G9ad=OYW_V^Io9Q`=Q!*KTz z`VqK$yo7VP#-qR-{o3ri{8;826U(w5JPx;pap&8YCxH7j7B!xPd*0Ab!98=-d>U?! ze$;#ht{;e+&*E9bxa(Q-Igszm^EvIAUI6*NyofeOKlbzz+&)D8&2YUy)PEVz`I|wU z`4zZ(Fc#~*3eTVUHMDmdXMP=Sj(*g91Fj#4ns4G+!}!Xq&u_u)g|VplHr&33eg|$% z=h%mLfjRn7b4%tM6U(#px5BMq+~49RMm^WI=hp!}V_lh!*lM(1)VLn*?>OKbzb*Rm zZH)20Y=;lY{2h!#Grp5C-j`kQcwctI<9*o!w?^z^AKW^j-^*$H@jkG2ye}WX&Cz#` zIUfS|5&9#zdyISh7;cV!oc9yBejx7gQ#@-JkKfLIxcf8~H9muT-q4@JJ#*Cj0&b3e z)cg{zABdV?;q3>;UC+Dw8sz)(O-_5}Z$Z8<-=WRXk3D@4w+~VO2e@7!>i>x6eB*KE zpWyDnSgiLmJb&h2(B5sF`B%6(`cd;YxPBmN{*Gr2%qUN7)`x^Q$xHaQ_ z`5SJIe$@O2t{;f^FjQgA3%c$qt_WTB*7yG#pJ|Od>FE^oA17q=C>BSm1!@EEg z@8}f9TR9-I&UG7HKhU3*-S_RF2#f;OH!t>PEcSK> zybGM0eQWN7>-mJY7Ov-d;oX&a#f-JotYEwwIDaiL?q03Ag3*{Y%{vk38S9nl|5*Jr F@IN0-j9LHy literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/pbribl/skybox.vert.spv b/data/shaders/hlsl/pbribl/skybox.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..698235d99a0273c252543604def972cd8e6f0b76 GIT binary patch literal 1908 zcmZ9M*>6%&5XKMC3$CrTc5!Q=7&U1m8WUq;T+lXvwp_~A>Kj!aFv2AWCcgP6_~-g! z;`cjCgPdkM^L?|NnYpLUq>DLYQpT8N^GUxst0wK4jKz3Y%%yXC*c*%hX$cWal1P%Z zIAiTIIV1gC5Z7(Rv*~y?m8qB|%V9T?@8_61I^7eSb6xiI=eS>*oh8JP1IK}ibnBYz z&f8eNthMotC&}0T=jk9(cUeUdL)~HWrTT&a^d?-((Y-aU*`{49l95?rUPEJ|IB(te4IPZ*x%O>lMkmVy{Z)CEUH|@v>}Az$>zYpSsLy%&*s5 zioYR?+HSvYemG>?_smZ6iddDVf93$MOH-G==zCL|`o!Shkj4)W-jZe}?gQWSnEW+m z-I6XS;#YO_)619yP$k;Aj8uCG<=UIKIIL34Ex__c-)?$U72V%&Uuo=PvpoFP6ZE zej2hDdp;Hif2{j?w@qv7m(`AIS=)V|5ZCq`Z=j)WcqbhR`NZSrZ|t|~;?uuE>!+u{ zop_%4=&>w)Dq&~L&(6TaF%xh3qXa)b-T*lG?#YIuNAA2Yf#VR*`-8*J8+jnXpOWC` LJ;MDJ^IY-|pF3`{ literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/pbrtexture/filtercube.vert.spv b/data/shaders/hlsl/pbrtexture/filtercube.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..9b32c2ddea8e5e10473192e2816938ebffb71795 GIT binary patch literal 1404 zcmZ9KUr!T36vcg$@A*oSU6bW7qJAAyhS z3kl~pI~N-ea9Yh_#IDkpFBPK*^1+Dha@9q z@MHafp9&B9-IO*s8_b}GNX#>>v*aup`D#P2YfHzyEF#nZb5~W53XBKC9aXZPwt{As z(*wCjijL}-j{R+&0;cww*63=Ab?N3cgVBL`Jutqi!n_3<_=Z^UJ;kbW3z};R?&590 z){Ei$GkNMhP&jw7zac$dsa^C~c!aBoS<=io_y#}L%sKb~uV}_2`@v5FCcmOiS2fqA zSkuh9sx@z7`!}@44_saQ>ze5eo_en|lZOMp4%qg;5yqeSeIN4p*^wUqd~ayL_~-uT z0yh8jKpy|x1NehZ#WPw4J^a(|bpj&%*5Et*HSR|3(hQu^&BozQaq^<-Lv+TkeI{aQLDAO9dPQJ#P$0zWAPsJUx)-JE$qH)YZ1)8snT({Qv*} literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/pbrtexture/genbrdflut.frag.spv b/data/shaders/hlsl/pbrtexture/genbrdflut.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..ecd11746007e34b9ad7466a32fbb05b20ecb3afa GIT binary patch literal 7368 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 literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/pbrtexture/pbrtexture.vert.spv b/data/shaders/hlsl/pbrtexture/pbrtexture.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..ad07aacf2809bae4c7b1dd7842f068ccb5be01f2 GIT binary patch literal 3160 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 literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/pbrtexture/skybox.frag.spv b/data/shaders/hlsl/pbrtexture/skybox.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..9731fbbce3dcc78768196ff5ce1ecdc08a1871af GIT binary patch literal 3964 zcmZ9MXKYth7{+f~pi+=2AVX|H#X%Yq#292)BdH|BRtx2$DbipQTAB`m--@8(Ld98J zC@LfFy~VxQBe=!A_reb*{(iUjC71tgo}TA<-uImMocH|iEh!#fnj}R@k_<@x<-gD1 zq&Ri@C4JJddUoCH%Jz;0m8VQT+4z8@#379hOiGhp@M6&1(A1)DRBsSWp8~Lwq&MSy zjNYt!B)sFI*2c;UI_Ec5HZ?aaY{d5uzj0|tXItaUmL)y8qawGxp}BQYV;eHf?8BH@ z2Xn_nZs+{PwGC|z&Fu-*`Xu^3IXhkBD7?96)y%t&7{) zobkx@j0+o@n;RHCf#*H6PHEbcrk2Vj4Q-XRHFdM*%&Ivj?WNiFYH?>r8my~7e@@kT z)idX$YxO#$ulDVD{8rDEW;eCWt)G`xoQ$9Lv!@{ovX&;*tnPh`1wLx)<+VK@XOPFZ zx&nAEwSCUV)%m#R&BxWoi-7a3<(xs_Y*vr{jz{~1XTIJUInO=lot1fUk1@BJ)9INv zj9P~=mIK#1DbsxmbQ#)bICJ|kmIHI;{Xvp+%@~0`9Hv(SCUOGx0ANla<_*M~G-*;* z)byxe>3)^g3(&)G5q&#^~%B6>~8hU z5o5Fa@y@L`n$bOaXXAgw z7yQ1MJB87DQGaTt-J5gk7+uFT&97&4ZR4k-?VIm|kJ^6uTlP_V9`miC_B`&tDAS(D zUg^31az^tjz^Sb4nVjq684sY2V{|R|vJIFYdV7K1QJ{Ag=v@VRcY)rM(-Yu(bK3gr z3iLe%`rZP4Ux8jtAKuA;5>h?*8u%h%(LdTz_s+PWAF6j-mBjvxp(UK zNbY_5Es}eeeuw1i8T|&yH!%ABk#A)5+ZTJkA8wt{59G9ad=OYW_V^Io9Q`=Q!*KTz z`VqK$yo7VP#-qR-{o3ri{8;826U(w5JPx;pap&8YCxH7j7B!xPd*0Ab!98=-d>U?! ze$;#ht{;e+&*E9bxa(Q-Igszm^EvIAUI6*NyofeOKlbzz+&)D8&2YUy)PEVz`I|wU z`4zZ(Fc#~*3eTVUHMDmdXMP=Sj(*g91Fj#4ns4G+!}!Xq&u_u)g|VplHr&33eg|$% z=h%mLfjRn7b4%tM6U(#px5BMq+~49RMm^WI=hp!}V_lh!*lM(1)VLn*?>OKbzb*Rm zZH)20Y=;lY{2h!#Grp5C-j`kQcwctI<9*o!w?^z^AKW^j-^*$H@jkG2ye}WX&Cz#` zIUfS|5&9#zdyISh7;cV!oc9yBejx7gQ#@-JkKfLIxcf8~H9muT-q4@JJ#*Cj0&b3e z)cg{zABdV?;q3>;UC+Dw8sz)(O-_5}Z$Z8<-=WRXk3D@4w+~VO2e@7!>i>x6eB*KE zpWyDnSgiLmJb&h2(B5sF`B%6(`cd;YxPBmN{*Gr2%qUN7)`x^Q$xHaQ_ z`5SJIe$@O2t{;f^FjQgA3%c$qt_WTB*7yG#pJ|Od>FE^oA17q=C>BSm1!@EEg z@8}f9TR9-I&UG7HKhU3*-S_RF2#f;OH!t>PEcSK> zybGM0eQWN7>-mJY7Ov-d;oX&a#f-JotYEwwIDaiL?q03Ag3*{Y%{vk38S9nl|5*Jr F@IN0-j9LHy literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/pbrtexture/skybox.vert.spv b/data/shaders/hlsl/pbrtexture/skybox.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..698235d99a0273c252543604def972cd8e6f0b76 GIT binary patch literal 1908 zcmZ9M*>6%&5XKMC3$CrTc5!Q=7&U1m8WUq;T+lXvwp_~A>Kj!aFv2AWCcgP6_~-g! z;`cjCgPdkM^L?|NnYpLUq>DLYQpT8N^GUxst0wK4jKz3Y%%yXC*c*%hX$cWal1P%Z zIAiTIIV1gC5Z7(Rv*~y?m8qB|%V9T?@8_61I^7eSb6xiI=eS>*oh8JP1IK}ibnBYz z&f8eNthMotC&}0T=jk9(cUeUdL)~HWrTT&a^d?-((Y-aU*`{49l95?rUPEJ|IB(te4IPZ*x%O>lMkmVy{Z)CEUH|@v>}Az$>zYpSsLy%&*s5 zioYR?+HSvYemG>?_smZ6iddDVf93$MOH-G==zCL|`o!Shkj4)W-jZe}?gQWSnEW+m z-I6XS;#YO_)619yP$k;Aj8uCG<=UIKIIL34Ex__c-)?$U72V%&Uuo=PvpoFP6ZE zej2hDdp;Hif2{j?w@qv7m(`AIS=)V|5ZCq`Z=j)WcqbhR`NZSrZ|t|~;?uuE>!+u{ zop_%4=&>w)Dq&~L&(6TaF%xh3qXa)b-T*lG?#YIuNAA2Yf#VR*`-8*J8+jnXpOWC` LJ;MDJ^IY-|pF3`{ literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/pipelines/phong.frag.spv b/data/shaders/hlsl/pipelines/phong.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..68dc3a14829e7540810bf04254817e2d34520cee GIT binary patch literal 2788 zcmZvdYjaao6owDIiMA9FOD!rUqM!m%D58!-JGFNDC6Lfrz5N3Ih=0Hte}-S2@p%qsNyxaF)&0KjT6^ua_CDG4_UyVPNj4-&GMxO*U&q#@ zCshWMfpnfNE))x^trLYqk3Fh?IO%mteVdcPqz~MKEmvwQ>U!1su>p(?l8x9FJjTg; z`KSLygnpuO;MTcDwQ%r6p|)H(RfVhHs$PAi)oxa&>r3_K(MluL?~C}=%5r0=+JvV1 zZOoZ;Q@l0RRtje-&BC$L{L!f*otWP`Gkv;LEX~_sKNVVArZ3JsKV2%#Ka=*Z&z`z` z2awWr_SWS)7(UOS-fpEuER zmTqX?UfOIL*O#vKoS!S-h_U~2t$MaxeTiHHX^g!WYo}grDKb2d{mhL@v$C94SzB@Y zSx(9II}KvUT`PBQx#uN!U%6)_cb(jGk-JXrS;!r7@7X(b1kZybzxUedmxq6Z^@H#n zX8hia4`qBiRcr$1GM{)D`{Ua231j7(vE!qUPX^xtzxwCpBcu4Yf{n44eRL+j9W#gP zjE!~Mz$Z`co{YFV;A&wJH-eTVYyZVd*H~U&pfA@)g#aQVDpS&k>>-jdgS>K9C`Ga$8SzO)_epu_xbFb`53Gg z{!hU6FvOSOIbFicIg1&q-@Jai`eNOuV9z)BXJGRL{~YYTanE0XjZt^6P0W`u_wskB z-}m-Xc3)S(?qQ7k`&&_q{9l5tDfm}ldyoCT1{~& xj?jJquVeNW+OL`B`!>gU?_vH8bG`BUM=<;GozZ6<#vQ`c^li-eKV*Lb`xmXL*rxyh literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/pipelines/phong.vert.spv b/data/shaders/hlsl/pipelines/phong.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..38769e287b907506b67c1ff7879ccd80085eeb66 GIT binary patch literal 3936 zcmZve=W~=*6o+4uY!W~s5h-%{0?F4 z9qhgLioN$<{t&-7hanrkbP zEbBOmy>ip^SkLT^vYh$kTv7$};If6uYt3Z~i%U{mp+K*jf24$cdem z`l1{*HgE^J_Yhcr?=5gAy5GJr=Idg&zdZKa4cv|Hw;Nc0zui2p{hO9$8#&2&dzQ=j z|4p^WvwN1a+>Lmi*jet$VP`p?!}{;dVeiD>GvhBH-npHOIFG>V(5+4E9h`zVkFcML z?mPy`;+^*(<}glQ?VHHpIoi~%*>7z#k=A$%qTO#S^4^;G@VO0aoId6d>l60d(aqs^ z89DAimk*yi(aqtvY7VhJ+I?qtA?DB?{obAU@VN(U4$m=%SRd`a&3h5wm*2l!Kl^=% zyqtM`tM?=F5%&OkecV1c`Iw7w`;mQ!an9~R#F`_wclc1^uf)gSo`)01mIe1n;(S}d zJ(@W0-}`K1e+)5Rf9?K`&68K#b7c=}2 zy?%xt!O6#2Mf8sm`IyHiiDO&n?NfAl#TC6p%x7@sk&k(NjxMjb>SMluGbTU7FTwJP zD`H}XU%^?6x%G`+zedmZItTs+k&oXa-^aI!j~c&AoV+W}i@ARfr;q14<9T+u_>KGl zT~2KN9}(Yj(QZxJTM`%c yGm_mmpuLq{PJ281nTYZJ8>)SA;v)X6WN%9LCG2ux-e?D5XOguL^P32LRb_MqPP&R%5G5!q%f72KrqCVJXu${V5$hY6>eOfokj%hl z<1tQN%Rl|MBh(Rf1-No=xl~xWvoJJV++BjJU#MQXr!qEL+B~vnWOPfhoa$Fb{J!FF zc~5B+n(7y^X3}}_)-<%Ya944(u(hv$OII(QnBO`xeRE%LU%w63QK7YE`at)soBR6u zZ%TXDXHQkW8<5g{_EzOv89wh|WUP`Fv3>Bifv*0Z?tygQ^z-hoj!Y&T+}<}ts|qu#XVD+(@UF8N9v<+HFI&FeM>pAA3y_u-Ca{Byv@ z*h@Q|$>(C`aG$ZU?-KB?UCTE{+&s8iSj07<@*wk+^2;OFFyy<*hNJ7y{j+J^x#*)-RDf4)itc$hlr%{+nK?~j7-wlS^n4XmD_uD_F2 zzkB388MlUcoL6SufNsBj13q&5^d0w++oyHfOK^J#Zl8XG!HxGD%ya7qZr^@`=CrQE ztop5eEt%{+X5(G_1G|pZv+d~t%=q9BR`G|b_`_BFkt%+mia%P#AIov?@L&}`l;iet zB*&eFziZapLH*8R6=v_jSA)Gzxiemad7t553-&&PuLGNJ8@K4}*JI{1k9&9RacnN8zAgJ*dNR}XX^qrpzfWP#-dTE< zasD=0pR?2-wLA@0yPtF1`wXV$Z`1^c@|)i=LN8O%2M_~Wv7-KDd$7*r*DR92`kKy^=KY<&g?*4t~s^ zgf(J52fObi@1=Xbz>Hgr>5IJTvFA&0KJRI`+EOfHz5?g-ehoj3wP5-puX^nH2At3P zEnKZN7xNuBpZ9yXarUGy@~TJPAHey%Kf=|P-%{0?F4 z9qhgLioN$<{t&-7hanrkbP zEbBOmy>ip^SkLT^vYh$kTv7$};If6uYt3Z~i%U{mp+K*jf24$cdem z`l1{*HgE^J_Yhcr?=5gAy5GJr=Idg&zdZKa4cv|Hw;Nc0zui2p{hO9$8#&2&dzQ=j z|4p^WvwN1a+>Lmi*jet$VP`p?!}{;dVeiD>GvhBH-npHOIFG>V(5+4E9h`zVkFcML z?mPy`;+^*(<}glQ?VHHpIoi~%*>7z#k=A$%qTO#S^4^;G@VO0aoId6d>l60d(aqs^ z89DAimk*yi(aqtvY7VhJ+I?qtA?DB?{obAU@VN(U4$m=%SRd`a&3h5wm*2l!Kl^=% zyqtM`tM?=F5%&OkecV1c`Iw7w`;mQ!an9~R#F`_wclc1^uf)gSo`)01mIe1n;(S}d zJ(@W0-}`K1e+)5Rf9?K`&68K#b7c=}2 zy?%xt!O6#2Mf8sm`IyHiiDO&n?NfAl#TC6p%x7@sk&k(NjxMjb>SMluGbTU7FTwJP zD`H}XU%^?6x%G`+zedmZItTs+k&oXa-^aI!j~c&AoV+W}i@ARfr;q14<9T+u_>KGl zT~2KN9}(Yj(QZxJTM`%c yGm_mmpuLq{PJ281nTYZJ8>)SA;v)X6WN%9LCG2ux-ICPAzgy2d9(I6t(2+xKD3PBKOHoce zqe=UHIBQ?^ZhHM=v=UCwP2XNq;r`)qaM|x(4^pl8Z-zZ;@GryJa6E4_eV)#u%Qnv6 zCH%zp%MLaRdCy`jQ|p!AV3SpH z6K0KUZI3G1KK5vWH^}fIsqi=E-S ziO<3AP$!&s!Jca3OxvTD`(%#Zgpl*i?)ZD}CXo<+8MjZJ5V=2GYr#3|mJQthfbhJ2 Yb>H4S+*!>%^fd@MHQzz}L-$kS7bMgp;s5{u literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/pipelines/wireframe.vert.spv b/data/shaders/hlsl/pipelines/wireframe.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..cde88b5fcd7a4ae6a9800984cc21bc9f292bf62a GIT binary patch literal 1684 zcmZ9M+fNfw5XMhiyWkB3Wjui(L&X>f^4esdB}813l)YW@ z`b3VhepJ{U_mWvQnPoCvq)0eUH~k@;$56kSo~2W1@@`0Hzb1qF>?D=x^WZp8W!<_W z`|ExpU*v6klWBT7_?8V*bw_Pts69%*56+~?i=^`!3%>v1xc;+0t#^}N=SwF!dMdZ# zB0pE~HIu{SGY)v>OlO%-GDlf+`Fp}%z;_gP-0O@Pow>mrn;U#_?#SI0H|bCNBVT>! zb6d(~zgHz3Fnh0flw-aD7>%DE&-0W)hwn0ttUuPYbKuGZzdCLK$- zdne%Qb9hOZvnBtkG_|;k+RO`wR6>t%v3$$Y^h@91HEHf4AAB=l`U0;@)3f;0l zN}JMEMQll9b3bpyW~0V!VdjIc3O@)K9{Da zHzfGk?Y@M4@uuL|Z&LyfM_qRPRswH%?_|&Cy%z^>{gBs^z>~+fYD?(ZYO|A0;D0Ly z{2_4U8g~$Q`mkDuvYCxq%myZop4s_F34VNh7qIzaZ#(xX+_^0b$043K0f(RORFlM# Of&@Qr1n#ex7m|OD)m_>E literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/pipelinestatistics/scene.frag.spv b/data/shaders/hlsl/pipelinestatistics/scene.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..2e7c9af5dd1ff3fb10cf89efd915c02a73f32b73 GIT binary patch literal 1956 zcmZ9N-A@xy5XDzYi$X2b3iyewnrNbF)Tl8ricM|$QdwwggP*uSg;n}t*@8Y9{{f%; zV|_94{I+*u?ULcnIWu!+?%lhPn7TIOc_%#2%Xr`PnH?33M%_%=*uOFq2me2{NC#L(e=z*|iqAMNk%Jh$b;S$s!6dr0fNIPYB46G}FR?r48%i6(wumCIsi@;*g0hWNJbm_AyiRGc|wG>yi zdw_Ga@K5~|leRL;3gW(MWx7_X)TR#}9h|96&eYJ_@*H7ytUNtEP`*$eCtIGnlhb!L z*I%iaYvtcY^u!9ULS55qs5%XA)YyNxIyF%m*R!Fy7k$<7Dps?a>mC^^UmPiqqP5k% z+^d1Hv*&7xJgw-~ja7Osl%{$P4-Oyd9eBKxUXB$NA4UE zGZyL^^6b7^Gk0Ir=I*Q7+a3~k0IPA`?w^m`_d@QwA$Lskz8`Yy z%=@m$#Q}bCygTN6htxd-b8=zMz3Boza`#2<-pai@a@QyKzR2y9``)Jg-i@^1dDDK^ z5dACZUkWb*pNDh4tU+h_a=7b>d?&H%3BHQh^{nFWYQ`d1kJm~@x%n=*-+<71sFkk) z`dGIX@a%P6en*NR=9RBYxb^Enmc6^je)AjZyx}L0-@TfA5pIwBEAP&EWB=#X-}NGz zdJ5O+cV-iac{UT<7kmq`zW(O>7>mH)T!i1t*aXzgKftJeb2hm3&Tm~0i1{BS_IIl3_Xwl?>dx;s$-HN1{xL@L>Ybdb--~V(zYWG+-0-c8 zMbJG5`aOeYK7P;B#J&^i`fty9{GQ`*=PTAx$X?00-Yb~@RIZ=Tb=TU>TQFVEXPN$b z>V1*Xxx7d6OF568ci^5~+H*OtQMczx&Wky}nse8)lf38WU2n>{=jHlS?%t=|cQ)m1 z3HN+mbL2f=zb$$?pXcj4opRsll>1Jn+;=*-{(hUn-}Cod6nW3vZ;yN{`|256>*JaK z$*+Bi(Y3h0w}I;o{zJkq6JMLduP5An-*@7xQ_?cLMiY?j3&)xYppi zh~4ktyNTWJ;CqPO?<1&1#=SsKAGL1AUZAf}XwMVt?GsubvHm`x?IU&$pCL}pyT2do z1^Vh^pLO;W8D9Xdp$UY~0b!DFZB(;x+3Fy;3nwhEUbGU=w*$*a%;l( z1LE+#O8gsB+418aTswMH#^CW!4>4x*<*Y>#)!9&6O1r%G&(=M_DZ#P)cn j?6F2I@^2Hn-ngf(cM2>4uGb#9b${U!XX^M5UE9IGs((Ve literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/pipelinestatistics/scene.tese.spv b/data/shaders/hlsl/pipelinestatistics/scene.tese.spv new file mode 100644 index 0000000000000000000000000000000000000000..665ad2d918956fc869c83bf8d516b67a49cf58dc GIT binary patch literal 4420 zcmZvd_ji;<6ox<2P)dMc2uLvz6%`E-6;T9@0Ratc2#9#BEAD}CV3(6@@Mr%4{~I}W zvG?9P_TC#7)aTj#E)0A8IG4Ha`_9~Z=g!QgxoP3VESr#JS$o#vz&9gn%9ycVn#Yr_bZoq(N)O~NK)Q?RL6J2ssarkRB`^Urm+5U7=Z)9}}9 zDU4V5jaPAr*HYv3hbm*>`W)A9s*LU}?r~0?vzCF%p2{d=aMreMq;%W1(hj(`S}bcF z9ND?6D#_PcQ?hKN+`GRx+PkSRys>|9X`Od3IX_SsEDS?4e`0NaIlp!7_JKlSc+IkU ztckUKH)wrzt*zFJ%6Rp-MCP|Y!ABzV*t6i%L~8c3Q8Q61J+nV?M$TOV9;lSZs>O13 zZ2hqYx8)jgwzV`iHdxwU+EW;>mS|#V#yYBPD3{f&*$wY2ju!XUb~94;$jo)#al9)B zDwWY&(OR?RXi0jawA480qvz|K#`BeHJYTuS^OgI*^Su!MSgret)g8OCb<8xT_fuO( zG_iM3&De2w)x@EhL(TJ16Nlz~R`WAXyn(>Jkp%)ib?=ziJ&S!iVrvomj>P5{8#`U^ z-AUJ5Q@Y-J66mt^4MzQsaJ92EU1ytsqoFkuFFLBgnVx6oziLo2=Tb$!g zeD|O}i?JJXkLuzs%rEB8#!vM*2{!)8m|v`)i*NkE^YE=Z@O*st74f@sJP-C1{OChB zIQl2Aerm3}2lXCCYm*l*%&|R*_-Ejo-}R?6+BZ4ppT_8VdG#|HT^sr$e06!}pT%e_ zV~Eerv1?|s>&1*c%s7Wp-$~lJDUa-^}QJFo$u~%~4`>o|<@Pj$>cDb8Ou!(c|7u$Z-#&eF(e|-!lztUwvW=ufX=*_i9e-vG2aO6#L#%?0ZYG?@hd%$~+rm`*~J}IlFTijcsr4 z#H=syfdt#jWeK*g{I7 z3s+(0F|Ki3=RDU~!ysl2(PwMeh*?9*Z30_E$`!!Yka9y{Ymkc?HshPexW;jv^P+}f z{C=z{=d581W(_H~6>JSDcQx1=Qf?dA8swseYw*ouT;sUTdEO&`AGTxm%37W4`Fn5W z^?d^~v3}<7WV{Pg@5H(=&)9z6jj8q1-`$M&VBVvc<9)w3=kLhR;6AYH0N2l0(R2eSs_AH?J%{zLe#JBZz$=X@C7ylRp25qxv{H!RKhC|E6WK8A13 zxme_U9A7?iK7sE#`N;VszIoM*Wgnly?5+9iv)Fmo)W`TVW=-}v_UQe122+cgp2ctM z^K)?W*5sP!G1tjQ{1@c$+Y|d9P^QuM8*YM40 zpVOSLgViGE8~El-`}`(YK61W=?>hO&`8K|J)r{50_zq^D&1av*&WoDf#kVH=JP-3+ zt^YktEoyon-o{EzXCAARvYe}c(J{7>;+ zCm(zM4F3?O7CAr1H>Z70bAAC*OQnKltWVGnRe+ z7qidiv(IAZMNR$zikc!{2l@nfwTRP%Zye_sN9-KWWg1*_uB#o$acI|q<>K$yb@+0A z&Y#367k{6x$5$t0O`pst7y1qO>P?vIr!dNeej~nmGp0V3Q7-hG@YP!|^>#+NBV=5G F{ReQMdsqMf literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/pipelinestatistics/scene.vert.spv b/data/shaders/hlsl/pipelinestatistics/scene.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..f9af87c1c3309924ea3ec64fc25e26d1d98c52d4 GIT binary patch literal 3904 zcmZvd>2H)(6o&`eVbvmF0a0sP6c=Iz6UAU$pco*jOf9wXYm1GPw4J6*G4e$kzatR$ z759DLcii`V-}S%ni;2(k&OPL2;%yH1{C;P-=bU@rp=sud*`?BqQmNEZ`kQ}U3rjN- z(^O!s3ra^H(Z>cy#sxDGJ(`g+G7BMDX$~?MY2r_Q2*)yi^U(*kRi#vxvZsUW3OE^ zG2AsZRF(5wIhRzKI*&uYd_$$kqwboRtnM7%UK^>>t@-7xZLE6b@aS$1Mi1WlMm^U? zSmvC^Ue72%d;AJj+bk^G3$I zb`MT=^;WiR>EBY>y4tuh6*-q=+gjgC-cFfnPJtiTwq@MsV0B_wyajRNTae4& zf_1Khn;4uN94k5)De`S1Um4yv=Mo#&R-ig|PGZl{?tH}hiJeRC?>usU=aBpR=EdeU z-uv%FT!B04u(X-#;+?JdAI`ImK{k^o{H!nHtl7AW8@R?e{qi__Gj1`NcV$Tz|B;3T_#=G$@^pVe{i#*yEAg#pNcROP3s}f$= zfER(SA?%CMU1DoEwm^F?3VSQqx&kjjx2|Qd%h|0IdQy~u%86)xt^!JJz?#O$=bo*fk$Vt*X!}k=kqe|WH|3yTL;*0%o)mS zKZjkroOo@*QOCN3qmB(=dx{=6ChQE1?`O9!8}R-NJIezZHvV9Sy%T?<%y$9#oZ+d6vk80}y0ry99o_zW>C!ts12INFZ5QHg zPI-0f_4`>*Z`OMQqTTN%a^9Hu@VNl5~y(aqtv7CCM~mk*y?(aoWcImG&C z-@tww;ydvBl=EHPj>t!C%hB&heB`|o?AgY}*>|DKUq&9k@w*W@S8#{W<-FVA?n#{U z?&TJIqxT}lA40VId$FIq+U`TNTT_Mq?Yyu15qZUBe)HM0Z$o?Z`~Z4m&kw@M=RH3J zmXDqvMsMu-5jc5${01LI{EqUuJeK%re600x#5nnw!4rvRJHkDgxO`SmB`%-U({RS? zuRWjDGhprZ60>?1U0!kJv+}#q9V90!^uaFzK<6W`FIO2qMIxFdkJ0672M0{ za(RERBrfmoRXF4I*Pi$H8d$sMTk|^h*O7gQ^?Cnd{i3Hg&>MSt6HY$A|F^*M(bHk{ zyr;Lpa<1s<9rVLU-qX8@%X@kc&UpQ`=RLg-*6#V%e}G*s>i+<}vHlO?HMW|2pyh9*Dn5oH-)yTl9U1an4YzU(E13^n8ZX;O`OnMTmFq%zi-R zqmLgGC+~_r!v80@14#J)j4r3R!vDHd`!8_j)GuoP72Vof5o;Ig7iav2o}ckMSWa=p z8P}%&%l?4VC-VP^ZvG{R`NjH}e?I$Ph<0rU6As%duw1;4GtuQ-`j^?|w70N#A=<4; q`>e!;{j6m7t!SUkE*JLI$=;OgbJ*p=z9!k5lYK6`+`pW79`YX?l}U{N literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/pushconstants/lights.frag.spv b/data/shaders/hlsl/pushconstants/lights.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..fd17570c8d48f010883c6ddabe309dc55f040cd3 GIT binary patch literal 2436 zcmZ9MdvBCg5XMihaw#pBQc$_P73H1{8YE4Onp#K`var}TjsKYy2o!0zDO(UhEh36H z5V?q={J}Ti%NZmg;rDy@46eS(?94p#%$zfG&e^WcZ7-$Nky7eU5Bc?5lR8UeW$G>U zcy+Q`IoCW<+5h%F9IZ_p8LhH{xcM0$t5s_gF5E)}Yi4}v&_`pn+Qh*(fy$U`H5Qv?vB~L=r$#5n z4^5S^?*Hts2ljUG>B-t+bAGXj$%-vZ`)Fffwtn_s%;}6Z&NdcGUT>LeKh>F2r<>C! zk7JVEn|7e*>kIYSatAYWmL8`Qd)y+4Pv743t)XvE`ttPcBltt0&aFW95Yt|Uq_p&Y z_{&Q_r47VaV7KO+(q1a*uSCp|r>uw9hb|C%vyT2M#4qytvE@f@@CLxl3*PF?3vTe% zfZJp6)?!C3b@0|<+k5Z^v7=TyZ#}rP3*Hd6@u(T~Hh?+P;BCaVUP$m>26NW>&g>N= zrAHqW_^)Ewqw{lKo=1WB$=BbCnD5*Rv^Ct{CVn@g3q+3fHlaI^7T%qPvF*7))-k2m z(8D0x(Arz_eRO>#^4`F99q;cjbt~us5qI6U(DGwlABTK#_pv|wa`X>mzjYtF(@6Hs z8Dw7vGw*Q53-mkWIUo1m(dOHG`1b1=gg=b!tjsw;#2&pHe)jwX?{&1b-SZj5J?OjV zPuqO=%=3H^ch9r`^Zg@=eB+Ha-(Ke1d}p^K`|q-zv)PHb*YI~?+n>H?u^X|!V|3+N z>_NE=7E93gUy@)Sj8}~gK z*I$c7{5-aC-;r_sK_ucAu#NkEjO!0&+xh#B#GSo8{KJ`jhW6~#&c=Im5s~wlzP&%6 zXUzBZH=O(EyNKUYeB+l8acgNut;^Wf8fDIh(O)3W)fpIb?<43h5o7jlu4n%hB7O~y z{u1IF7q<`Z%n}l7UBPZ&>uda2%b2_ZeHAeldEa2S=Uu~(JY$jfEw-^cc|YG_TT5Jy zd%TXguRc8e?~x9~J1XCJaDTv-dp+0t5nH~v{rLvOg8vh?*wxJc8G9KbF5fpICch7T z18Mcuy1zH^y&vLoR-k`D#AA(H*w(qh8peM`e$ykZ1=T9zWe+Q5gS0vHzwA8KfPPA{_ohX@nN3BAJ}4kfjz($bM}G#nKA#jj&V8# g`Y*(M`No~6d+`6om}?g3y@;4G{|EJ-QGEn?4mAa=MF0Q* literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/pushconstants/lights.vert.spv b/data/shaders/hlsl/pushconstants/lights.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..35edbc002d1dbdbecbaa8f6a3c4b08aa366accc6 GIT binary patch literal 3448 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 B!&+>s$=an-KIkvxfWLI7}`X5 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 a677ED+k-1autTO+O@ zqPXF{Z@BLZ?)#r*(8R>&`R*C==}G3BdEc2cXU?2+zMk%F{V8>&lm^oud>zB7yI|Bi zz=Nr$;Efte{izqNy;!X;>F7p`SjShMgjhYP54|5}Us{zmVz&=2*Cuuxn5ZvS7iwU6 zbG2)Cw^v%VUCl zqA&HOiMy(;iP_z^?wXm|bKRx5simLDl$tB;!nt?;w%N%&)4OL2U+;f8kaOA`Y?Zm9c#v*U8W?9z)!>*glv2;V80)*3mBfRHF=dIlL-33umvyZ}tTXBu#;#;+-m{RDPEE%A^#x8- zvDOG!t}L6=K=FQ@@1D#bL+q$f@rI6B#BL$VHzdC)^J4dS4%%Gi8O>)UR`iYLetU+_ z-;6faGZ3GP?m~llAg#`5Az zGIoymvW%T0zC2_1;2pW5;Q27jzY{GN`EST}?D58ot#5>=Ikb8AW!}77*^_V1f7w;| z?6>#CA-2!H6NlKo`7T^jY~QrIGLF94yPeFmSNa?kZ#VW7x5V z^}EN%5&0(Avwk9T$EZvEB(f&+k>@FJtP^>T!^uaUr?KTC&okKOk-v%D_VroB{Q9id zbCrv}KZk9<^?Al(ZO_+#Q^Y-w?cC!z?+e&+Lx?qd=U+s;llE86d;bz5@4qW@y`1?Y zIoB&-^T|idtJv0aILEw(EoW@hDyQw;bIrfFL9e5|+iG*!|2Gh0PLj*F_h#mX(SH*2 zBlmH> zKgTZb*>n8@kuRU?mzj?<`wDD6`FW~npua|}(YkIS>ss_lMBaFZwaI^jcn{4d{x);Q z#~qdP+&w?fO6`1m{yk#P4>4c-L*@q1ac|_x_r^1i^?$;4eb31Ce@5g+km$`X*yY}M pAAUvTT_^hdTjuSvxqe5?CvPqOALU~03$W$%^`OQ7@MpRb`43cEJK@YHL`Mxc66?_?O(6 z_&oQ{kUQis=Y7w)=e#p>TCY8r4q+mMFcbFq@0ts>$kYpLbT*tj^ACFmM}it=#$>VA zL&p9UGAsT<=zeUEM}zSQI!uve+|@b$eul06x$8I6MV;gEsQIHeY<}AMve9nuZ$2TO z5iu|I&CqfOJm?L3hedX`KOFT>c8YY zT)|i^>xt(Ic)Io&C2G1FIr)?`U*we7n%5%Esj+}>zf$`o_ffv9XEeSTv9;$>dV{^e zxo@)Tn{%68E!Jp&@3VU^^2Q&s8ELZ*JHCVnwFYj_2vyS{aocH_&Q@3;E z8N}wL_zr%G+uJ&CG5KGy?z_l2dp{%h9$(&h+k^8AyO_KyaUbyIe4h?kzHu8f*O;^E ztg6R3=wRw`M%61eUv19M9%kH_?yU5atrx#2HQZSp^E5NX E54V0Hc>n+a literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/renderheadless/triangle.vert.spv b/data/shaders/hlsl/renderheadless/triangle.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..8598544fcf110e5c7ed6416c0477a5d7730f003f GIT binary patch literal 1508 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 GQsh4>{dmg& literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/screenshot/mesh.frag.spv b/data/shaders/hlsl/screenshot/mesh.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..6966e9ad87589fb7abd6317ca898f0e8a94a36b1 GIT binary patch literal 2104 zcmZ9MTTfF#6orREt3oXx0^$XWXf$dXHEK)@YJ*K*D%C(R}{JLNb?5Ed+Ue|IHs( zrAg`e`E09MZ#Bt}cnv&PYg7v5e;TJZTPxQZ9dYb6Un*|piz~{F1ohZwrnI)+MAX9` zPin0f8ih(QRjEq5w02G`Gw{GU3pl;toB^CZaP|!+56)gKe^h+Gcw9#Q1Hd8XyjhhB=A8QF=m!GB+a?@ZHpTgLo>6uLxkxu zJ`%7ydwGY&(abDvG>B^_;p}-##-8Ki;~p~~b5CexZq63}5v}Y2eMCDys&z`rF|FW9 z{~pQjG;&W!vooI(KPyfhbo}SNpS+vm%t9|_GtL~HoOj&GdB?_?m44Kq{xi?%d0k%z z^YZR^nE$ufajo=Xmb{F7;}5&|Vi$kZ#UFR^Ctdt$2WPhD9h@`ayQlw*=HX1@GWKG8 zN|^I7eoC10Fg`8JdE8eOzVp+vxQskv@!wKK`ru0{n|&|I(D?SPRzY}47WLomvT%qYmecZgpM?Q-`}|b=HK@tN5JAli}xH|4=+LypeJLiJ>3g5SrEJ_mp{zZwRw*>&Fi>G3eH>C2alh)6aaH z-pAb_j^7HKWlNaf6k?c#?-$K_zZK>@jK33R-W|V}_rk=W+q?ZB%)1?vS>8us^zT0J zlQ6mH7V}w{{#JWim^kzY{;b===sc$F2&1uo)4q5uq?Nleq4le*Eh8R3zrF04JBp7v Rh&v-g!^d5P|55cDvcHt{jxqoM literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/screenshot/mesh.vert.spv b/data/shaders/hlsl/screenshot/mesh.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..76f9ef3d547c77202c878d5575698465be35a554 GIT binary patch literal 3392 zcmZvd`EOKJ6vrQ(P79(SA{4herS5126So+bS`9R*eYM5LUk7Y-8ro^<6r*CO;=ZEd z1}?bo`>sFuZ~2RfpU<0n%*%_H9Pask&vMT>_uXl&XShGh)?`_>A^Vg6U7NC=#MBC` zbz^qgfBHhRwJ7L8^yo$ENFPG7Y%Q`5sqs&KAC7hYtw*1o$yYi{D;-q)dkao|s(nAW z>*INo?d65$0e!lhXN|QFw3pd~^X%Ey+yk?7`{DYET-Gwty7#`0B+GNpX74<>G&i!c zuPx`faxSSlb)JKM*R6SxN8Pow+@7D?-)Xh!)-&a;?I34r56;>a+V{*+ZjtL0_HN$( zVn(gSk%P_Uk*R!UeD8QZxf3&feZ}mOZ8D#}V{`(Gygej-ET71y4Ul)f?UhcEECS@6 zdGHZXhxHzU-+TMrV|hM(+pZ#4e{nxm+f{|Fx9BnMxK1?}!q3i(FM4fOCw9f1iK}-e zSH3grya;Zox!hbRI%pO7c9X9T@3-L+8#h>>F7}?qo}u0Oi1iaYm$JX}DEm8yvcKP^ z*u2JjU)vE^;Gr(e_E24X55xb%dDiL39`b~r^+lXD8+S{EtH$Y9jvC?^v$rN6d3__#0J`-D-iB`d+hEUSw|?z|=?>*W z2GeZ3vj$#gv0J0_5}(IzPv#KE_hdcd^VvNs?2UxAZzj_a`w$-6i@jTeZ=yU?^IQPu zooX8b`v#q_y!NZvwabaGO*qcIKH;cq6l@>S*I2^#?Of*B^|kgJ!1nF;Z;aT!)z>5( z@1%^KX<+Bz`;B}Jbl+ncTYnk*9?Q7`eU)GX6&5o#DlZ{feE-C5W{Jz7*Ylr|8N%x(qQ!KW#VRZBBW0>+@}l z(u?&RMzs4TBIhc)eE2+yZk#^m5U(O(e+=CmzN5%-1YJIS9!EEaKIRbXqkWY93B-H$ z?a7U?KZ(f8nb&XRDMUWvo<^_6Jp(5nJsI~bA|G+jp;zOchm(&!jC%o*H_rQf5wX{( z$vb)}@kj9yA5EOG!M&V#>j>@@ba{J<{I8-rC-XZev3^naG4yKPuffTe`+XfOA8~J> zSL5D?`zEOee{!vH3#Ks0TlP}NVW3arnS;r@c zoGbeN6kT3%mHRg4GsGDAi1|G6+FaF`FW`)E1`+cmy1e3w7~lLn_$$O(%&o7z`nJDD zyu0`=ysK{#@4Up{Ce9oY_Z_<5pmEMnte^TJcK_bRJO3VCPHfLVAkI8$|1oj$uBiP; zI{zm)bLbc6|BUYW1Bhpe^@}rpK`)>2D_Bl(#TkdG$sT`0^ojhxqnqEq$L1I7WB&E* ze<0em`THym+YWTO_%5zMmviY~XP49N*&~Q{Ytr7AxUgTD?B2Kbes;OA?@abuvae;A T3;V8Q?@jh~>~jBb;&sTsR#f|V literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/shadowmapomni/cubemapdisplay.frag.spv b/data/shaders/hlsl/shadowmapomni/cubemapdisplay.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..e62f3d8b26cba95f134e4795ef7d0b74633d7132 GIT binary patch literal 4036 zcmZ9O*K<`>6o(J#kPrx@kkAsUNW7u~q9}sE@PZSBh`u=&$!KOw$b?{dk{QPtpZq6$ zaKLvIfw6b6EB4-dr-}M~CuiyA?wOVSTfbFzJ2%x;^Xs#0LY8IC*%eNVmaHmg8ne25 z-n4n!=F;x5ou%a~mT7O!s-1G%l&n6h0aqbI<-uWjt#VUA@)Q77XSK{bAZp1w3p{q` z$Uy0)Jv#IZ z_~wK+ZyWJbn7a|zVSe?gh$HH?tXJJ@vO!AEMT_2F+J!@nDv*}-pj0APQ6sJQ0)MP6PU9Ody8<=NOb04#7T}_PZ@eVrFU59thq3$~DdqSaiGkd?}Rub969DC(j zPNL0cHr9R*Al6s6--i<2ejl#T4<@?nexyP_l<2PSaH3o9NTM6>8@B$H)OTMOA@;t8 zzuMHr_UT*E&;5NAk?TWKe+-fHO}Kvd%zcVn`aXu3%QgB&*5PH3k0aLdJ(%Bqov?e0 z(jK*50Bf_BXQOUj`*;zN+s_&{Fdr>AYoEY>z6lwp@z-_?`3Lcih@tH$88oAy8%lkdqf}i)|O~e}7T&wp^E^566mP^m@ zIJ$i7$J=1fV^?v;?||i^?z>>Qb|m_H4{RQ7QR{uMwbC>E09`)%{Sa)d{C&k5J_5^k zAm(>nA0zUeNUTdPdj14#&z{%c%#JfzV>?!ij1XuPl z3r;?KW*0tb?KyDr(eGTaT=dcnHjiu27QM))z1WlbJZ5`yPVc+-KKfVy_B)pD+d??` z1AN2%U0np0Ye@EPF}iVS|L4KUN8A#yoN*5nxz0y7pEl3>a%P9`N!wCH&c4Ook6GAz z!L`ilbC@qcuPb!F&n0yG*^bvf<_pn{(eHXZC&DcQ%j@gtqcdYKLf57^oV;i8zsbcA za#thz##^}rtgQ>)vpCEwXOH#Zi;G~0FRdDvUg-F+Q s8JzL@Yxi#0%Ynk?xyODw+naH#!TRWXq|n2*7+p?V4YT@Lc3>6qFDe#jp8x;= literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/shadowmapomni/cubemapdisplay.vert.spv b/data/shaders/hlsl/shadowmapomni/cubemapdisplay.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..064790106af5eebc3dd9b7bdc9b6bff5af030011 GIT binary patch literal 1748 zcmZ9M+fNfg6vn6Rws-|mxp=Evh?=Nre9@Q~5fCgW+Hz_2wa7lyShlHK#5WS({i{s; zmwYkt`^}}vD8VDL zd&!iwABrsNuOhv(-yCIwQ6^P5vK)FV{WiwrZg*VFg7oaiAgPZIQ~Zd5V?mX5+M@LK zdQ-NF)v*nR>6hel)=O1YMPB%j_oSD6#~wK9?Wae{SMB7YUYB>u-XR@j^^@+fez5uJ zb+fs*@x=N?HdnZFS$(L9A9RP^zV+@T!z?-7K0ZoL#W$3Rb1q6AdQ6YNEbR2FYLUa# zu{41>gSF-FgTBm1E6?fi%oWQ;<9?7o_|OO9Rwua0IQ;T)+<~|=Nyr5^83z~Q!drzp z8|pC}KJ(INY4gAaUNvEU1mIoarCEMYzJ_>y$)5b$N`cXN1J zI=P9T(H={JKbRf{OkJ}QtyS`YuUdHa>apH~nyz^cKKNX>J`R&}&f`VpxFMbUaNnwb zQ@9{i-z#P}me;&?>ZO0+o7$<*-90k5q?aV*#D3djS6k8C5w6LDIYY-M){Z|pYQhh+ z)7RKaWakyT<0A7^I+&cquXqgiLYNwvUFrl=BYMH(P$P9>r$+7%ex^w3!k0yze-+J} z;miNdnk1YBUeDoJdd=gP^5;%V63$=I3E05sM2UlT{)-&@_yC3gVh7wjK$ zcFrbGQv(0X=WTh8S^nv{UFq=5@2)uRuxE9B?C!XItGoAU=@oc~0|~y^n002KdYFs0 z)!ocfFBpGnW1jRAZ{GnM?+6YyelOsthjZ>p;8^%GFL2no=Y0wGf&@D=1@}+PbIE_d CN?gPM literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/shadowmapomni/offscreen.frag.spv b/data/shaders/hlsl/shadowmapomni/offscreen.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..ab24664892eb4e20eef29e6b3f4afa4678c09773 GIT binary patch literal 1020 zcmZ9KTWeZD6on_=YNJ&XYb=EtLtlDHPSQ3FfsjH9MFfdbC9lC!XnlwYdh8$QpYBVb z-#2)m&A@igT5In;YsQn$y?hkHMhKx6j`?+MgY%Z@VS0oxBH4b5ykK8wiB8+vjdGc$zNJhhPf6^ab#`$XYKhWMm#XjfW zuF}{zzPg@VeC>UiM6K|jk0RAg_^a`7mENsVw%n)?IrpR6CAbu^FEE(>_?b$witta# zchkl6CZ05#JEBLwzB?AN#CjDwL#)3{Z-GnTE}{N*jeQSShRf{LcbHxwcZoK&n`E(P zboqTuwoYFC30YlF>Q%D3ytqbIv!==G)X94=4YKRJ8n8av|*U5}or53!!~pJ6@uMw#c=?49QsCn);zn{ny$4`_?*EYE&LSTDBs%|BR= z{%`8%=z3}qo+Z}v4xyhBXL-jqVU7GJD(#oMK=*F@#KV~fYktW0@63ddGhE))J2*qn zhlDfypEDnR?DD^|0c_w41Wd{MsD2f}kc6KeMO7V`F3^Nf&F^UcNg Ibe$4^0oD~eb^rhX literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/shadowmapomni/offscreen.vert.spv b/data/shaders/hlsl/shadowmapomni/offscreen.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..6df19d568e87b19b9ab810886a2d1372fe08d0e7 GIT binary patch literal 2332 zcmZvd*-leY6oxmQR8$a=!Kt?3kf>?&#+Vqz;ewJFT4rY{P@zbBnsSQqjz{p3d@OHF z{J(wnBFE|`i@pAT&Fh>4+05)I=Z2hfBd(+0oH3UPOx9zpqwdU!-fpzKYeoznIZ58@ zS$}WIkk^kAyY-b?KkoKpsjeVTI8Hq}6fSs7{*9=2umh=MJo#U@cK71IlXF~L{Jq<( z^tYnKH|IHYsJuG5Bz^5=&F4YqbbHZ$b31ND>bxK?c(B8!TT}e z!C!r3ey(4NQae>mQa3zDkxm>=~ljvB;0AK(V#@Jq)r198U^ z%LO+W2bYdx7sUOP5XZa6f#b|;TX4i-=RM$>C^^OYgFRg@toOt9_jcoVd_uI ze?m94>943K&ohHF!B&(vJHl3y=SAJrgTuz`_+y*YO%HJ3%etw}Y~U-psZCz+)qt^& zE9*7gWqDlJjgHR^-RuOPvhbaN;j!Nh7$5L`-SlVuRsyyj`JU*}@SJpFt*5GV;=xap zk9qkf;K0ntH%|^QGh!PG*k)u->|pk5n3N{5Gh9pI zWCw};sr-{2CH*{8#gcr>5_IzLUcFFFcC;j6F5V|N_OvX4ha(?5T9Lrx!|qlk%%ApI z3%uoC7aq*LAr5{-V!7W)hqvC}N-s&4REzz-lfZF|doLZ1of-Eba6E^)w#BpiC?Oty z?0gqLlo#7433lom_c`#)V%(;5cy_>Syeka}yJUX$3f`313|rDm66*eLN$8hd>`UNlLcBj;0|(Ec zM|vVJ?;HPDsmpVuE|?hd@t(FN*s<}hg3UG~9gaOv`=$hrgFoL0oY`+l$4(E}bGqTM T)9Y;s_KXC3K5)Mk@mTT)leUvK literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/shadowmapomni/scene.frag.spv b/data/shaders/hlsl/shadowmapomni/scene.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..e103a4f71ef146a2c4941f0fec03f5fefb561c7f GIT binary patch literal 3252 zcmZvd*>6=<6o(Hjw^FDr$RvZ>&|qyElG0n-rub$q^ah%=y-jxrc^+_l(*MU76Tk2DEI8h{$zreHZw-5`wf8-3Y*>F;lFUnzq&4}2|6NOx zhLl;9G^KlQ-%ww1rZ!rYHLeclKJQj$V7Q;QeLZE0ck=wAX$JkBa5-> zE7!!UmCu=b4aF7=fLZMs0k z)|&AHrJ?P^+e`iFJha(oW*hFgzq?c#y!SS!G|pb@;%*I_bE&gkjB{Sq*;-oQ(8vSB z+Xj1khT#fSn4fn6W&`}lP-(U{HCscao;gmvzdAip9>2tS+uhais)GtY^Y!ej3{+?2 zn$mpUW8c`Gy|t0bZq$ps^VwOQ9v@A;FY(SN_0M=`c>~;3dAdB2b}=?-dCrS+@^?0x zU3bz;Z=UO0aEU!nY~5nd5nHp^*^7-6J8!XZVrMKiPV8L8F0t?HniO5a9pE_6ca*n_ z!@ivO7H~VF|Hceoj_z7PRjusph&J^$BuNf*tpqPdle6|tIuS2H^a+WaSHRhG;HBus zMc!rTfBo6F#k|YW&Fc(0nTU7=5;x%va5+sqbpKY|r?sGd^$!*f{58ocH1k>~AS?>)AVCu4PwW z$L;&u(EtC$9M@y>&FI$w_6KM_dF`9owa1xvWmq5WT^Y8=HJt6+w&!KkGs}KAKKAE3 zbBXQCcjOXxu-nJH9CqG$?7Z{Xcb~`Bn8&{Rz|P5c?-_S+bIvC2!dd+dx{lpi>~}w6 zzQ70S@WDF#NDe!nLv{GkI(#^XJ?}^kJI|wa_*fl2p2MDZB8R;@+L)XtYsV!=G5xu^am*C{X=jF^N-{UKA@~61VR`zpSxs-F z%ejJk2VKs(f;*pa4eT+$chQa4U%T@=oYnpwy7lODFyr1ww`OhjbC_K&>iq!Sdi@&` z^?ryhA3h(U>$4gOpO4Yy4{?s~;uFL;dCxhLar*nc{S;Y~N} zBNsAZOKbN{_-3{Lg6LzO$nh)sT#n{6=Wk#+edi+uqzP$6tVv&eBK~)DIc+D{#bMio PE~l-TUHlJK-HH4Q9%B^j literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/shadowmapomni/scene.vert.spv b/data/shaders/hlsl/shadowmapomni/scene.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..f5d2ad573968f1e16aeb3e5767b916e69f6a5d71 GIT binary patch literal 3528 zcmZve`%_g_6vvOi1r@@~6wM-#%E}@&b!wa*0uDMuTmqwhMY&Tnz-92_qbFtWr@h~0 z@AvCJ=+EkxX8L^2-Ahkr+Rk#V?{_`++H3D~wY6oSBg@ugS=OEX$=|MxSxe4zX6?Bi z9h({(JlU8X+_!(X{_d<*mHRei8*;mazZYia76p3SkP6a{utByKS%<7gI*~4Plm2rGZIqTh3`u)K7w&F?Ks%UtXA*H>SzC|8RZ2zKjmeJ`SI)nF`mQ z*Rrp%xrZNVOxI3eUgYiL!TR$2Y#x1yxBomo@%DKQT;uFgZE)py9g`YuIj1dE;at7g z4-8fF`r59g<@%$w6OFk#Q?f^S&vI(6c3OXM`7GN-?Ply_r*S1v&-O``*q|q zpIaO}HM2Z8QJp$^>}Yj7zpDxrJah65SI4T8I^;cb;>W9#_Z=F;A@6zGhw^sG__m;SFo^i!IXJOtd61C*Yd2+=(XJ+1Ch$y)U^CeZ6Tu`ud2x8f|~hOx%a|Jf2_N zkG3Ck#XAz#zllue-cQ7JXzgCQ+lemD&%7Jpyjy+!-~(u9DX;%dw0=49!GxoaA+UW$ z-y;coHshz!=0~5kYSrtRe10d#*JF?A(gjIS1~?cFyLQ?;PB(i2ZJh*zdN8 z{celc@3x5jZp8A5Nij%8Qb#) z-i7UXCphI!^eu=v#_7A8Y-`GEyT9MTA+o%y#}NI#|ET$R;v?n>uz7wH)({&L{wJ}m zp+9Oog)JX3Ph(rdeXJoiM*k3c74e?^&g4eW&mgOaoOOLO&m!`XcMiLp_Z*yjoXNcB z5&6h_0lS>{BAk4j!@QRedGnmt%ZO)$j&W|BLZ1 zK11Xcm-Vd|{eF&p8u9nqIf%`PIedX#oI?$K0g*Sycj#SwiCjQp->(uU?<(*6HC%a4 z-@wVA{z%K9iBb35V}iu$=G6 zd$i0-6D=41{mF0N?%#!$`-hJ2K>h_@nh9nA literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/shadowmapping/offscreen.frag.spv b/data/shaders/hlsl/shadowmapping/offscreen.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..199649f35fb9f146c7c92ea4bc0edb23ae68eb13 GIT binary patch literal 408 zcmYk1%?klh6veL@<2we$P9saQloGPg?3rveb`~gM?a#JR&TpDmZryk8edpYB-}Aju z*{on@P3!0++UDgqe%8abtYk$Y^(8%DAv|Shes(7lRlWtnlZe2|8Gm~|rmyrq-5-w0 zW*2W0@qwKFePZ=^4U|MLb25umkHzr{cALG|u4fO?7gG{C%|v_Yc@Hz_Na{#uMTizn zS6i#Xp>AqIS2uHhk?VOIGt7rVyqTZLnHl~<;PH`XUC1ojwi5kH4z6B`W4@8|aO|M} I%5ARv0VmNB>ph2;A0fU-noA`Z)X@g zW^Sx=o_*ejC-xnoM9%$1>b<)X=G`uJaE{nBPOY;`m^tGfEQF8!3Gg71oVzA@4&dd) zGxVxO&e)ye64_q7`{kT7gm;d2WIm5qkG$A-Gw19Aog?@%%qZU2nlZdH>?wn%@Yc(l zpT@g0YVhvG>f0f&CUwh+)nKd+anuks&cnOU9b4R@I;{1m>x=FJ-d<}LFzdx?@;edl zg4H~Zxo?m6GABM@uDTa7wfVouseK8Pmve^iv5d*bnJdK3I;Y276->?(xm990wMWj6 sTTVSSItTIVnElq9_dEDxuDK1&y!+MfyUMA<`~)Uv&ifO8vvC{y0XkbS6aWAK literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/shadowmapping/quad.frag.spv b/data/shaders/hlsl/shadowmapping/quad.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..10e04bc33ac09f5fd919936584e46cadccc68478 GIT binary patch literal 1612 zcmZ9M+fNfw5XO%!u;PV_C@4ll;gO_KAB>6dmQow9Eu|DRDlD?%CiIe8jJ|1%iGQ*$ zCVs!OXX@IM3^U(+GjnFV zFMbu0Rdkcm2O=lklshYX__d#uZylD?PJEOIfvyydqgw zEH?Xf?%M;yr#*HR!_yglc*RZoy_3UT^l1moSy9b1ndxJf6~*rHp9_BQlJKlFwWtF> zBTXIr@bl8}%m+Uw%`WgSDC>fBNuC91Y+^1+GY>UN!pqXc4Jn*oz^SD3lzg#%_DcFO_NKeI3c*!ra&cR!ZqZu+^cOnN4k!wkQbeNmcR?%a_O zZ+LeMzZ%1@$MD7&uI4bk)N+{p@U3#+J>8$ZK{n5Q?FnuvaO~@egk2EJdp?!03(I{b zo1C`1?D)Ba9O8DgeRl9df}dE*a%N>cCmtk!*m?M?UfJ+(~~mX*l{L?y>|QTruE3s(wfE7k(gW A>Hq)$ literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/shadowmapping/quad.vert.spv b/data/shaders/hlsl/shadowmapping/quad.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..21dff7faaea89d4a2e97168330c8f3259d2be041 GIT binary patch literal 1236 zcmYk5T~AX%5Qc}g2mAyP0l$JJ+-cHyqro5`0wQYC`qg+_V=ue_n%WvJ{c$G#C2vf8 zo^y7|Su)JL^S(PXdv@DwY|KT>M8tf&r1Nty?tD7@vfu4~ICuOKhE1ED>9)nyVGJi2WAMFTb3yXIWy375qAiRlKp9J9zt8V;$VaduH?U z8+dth;!eWW6hBGWo?BpN^1L$%=b4;K-kGX574ej+&Y{-jTz}bp8?V;ho0$DGepbWI z=v$HBM(-K!VfNqQoN{7g>v)e@w?!=fhZ)@W9P=){zuzghO{`8X>vo9Ed#@vU+IttP z^3@D4!1daDU~~07FTv(}^zvKoW7etiMfsf%z|QR(@eE>hd+hNZ4zbL8F6+EX`S)m? z?I`7Nk#nz8&hOqs<=q`)YUO-`zB~JPzi%-6`1YJbtlpl!i?^7(ocANn+E<`>C literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/shadowmapping/scene.frag.spv b/data/shaders/hlsl/shadowmapping/scene.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..db20337facf441bd15f5c9dc32cd34e70a72c470 GIT binary patch literal 5848 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 literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/shadowmappingcascade/debugshadowmap.frag.spv b/data/shaders/hlsl/shadowmappingcascade/debugshadowmap.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..25a86e551c87d0e47ee27118d3c913457bd3d14b GIT binary patch literal 1608 zcmZ9L-A_|N5XF~%P!K;r1OyaY@xg?o5lM`R0a8n?sL;~Z;+t9RjW)66=Jr^d4XXc!l*_qkfY-YP)%#1PSrs?RHvt%+J$vPkQmYFj-Y3zaR4*2+ z-pCH(Z&5PA3u2~n+W&I&)E}0=+oas7eW*4Xt)nL)k6!=db_2%@7vt0=w!0rYl~%pR zKJuDwdgi>44dLB(W1Pn0l>Ax6fN|b;@e9r;uWCo1Z7(_=_M%I8=Gv5wZDI%Rw*HVZ z>}gN9+tXxTzbs?wZlk;qcFyg6OEw3ex$wCUpIN4PcKlGnfyXaNLOlDN=J5l+qIll4 zC?S5w`*X56!Jn56zp8GoNf#w>*b5S4ejcuydG{@V5zAYlIYAedbA1B2*bPPT9e^`G z2Y*fek~Fob1HULu9dPobyd0~WK9}-OEJ7N z^(VD+W?eS>0WXO!Ns|vw%}3Jk+=Ktv`_#bS@qXxOS3a@yv8mrZY5qSi6w6+CI}Sek z;H^0L%pZ1&&%D%`@jUY}D;RelNYfkrK2v38B$mU>zf|q6G_{yxUqU=Sxrb9e^YUH8 z?~7-?dlLG=XTJLq?r!QX_Qf|!4ETW<^1+B_=8A-Q@pcx zV%hII2{<{NQ1?VO9ETmSV=#K9ms4l|y|dvla3s`e%7)_v>`XQoJqN7iG2W%A*P^$! dvxzYVenCPnye}NR5cfa=2AA{xZ&iOT`2$)XZ=V1F literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/shadowmappingcascade/debugshadowmap.vert.spv b/data/shaders/hlsl/shadowmappingcascade/debugshadowmap.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..6d67026bc7025bfdc425983556ec3fc845c1a34c GIT binary patch literal 1780 zcmZXU+fNfw5XKMfE+8t12;Q*;;*~V|;w8pgiYely+~|Y!jb3jYwh#^lYg_0KH_!qmXmZR*=;;&?Kbv_kKLF% zrDyh~(8EnLm1apR`wLRyhV>(k)oG{Atl9Rpk{h1AcK*v9yVJy5T4jnAPhag` zR{ETDOB;{3%hl@I(sglY^!u-N!)uY>!_Fvnqi#-oC+Q}8K2yEX%^LgGSVgRFJTR6Y%Z$Mg>7 z*3pTb79P{HAY;vHKkk@!h(jwW9~|{x3-L$fv%le^@-GZvdb9i!@(VJH2UGJPo)jjY zeAISaruES9l!sp*EUG^0Iw6C@EM{6h3(Ouf9??_e&xW4*y+%5Ret(=aH&%4xGk=fqh+qBN`Z=Jj{~Ct;k3JsTz3isf_tzrhWwOnSA2VEbh5{cxJ7mJ(-&q zGI+~fl|PufCJZcYcle{KN82itjnmIxupj%ap>IBhK##Fx4kz5PYmay ze}_H?vrY~$F}BB6&@BhGY|G%khuU5Sj_>1J;9kjx=bKm+$2q)~!Ly8eBOi|WsOcuT z%eOLO(fEG&o~Vaednco3z9Z@d6HkB4?0XqH8nXa4Z9zU9d$Z3)861mvW)KdYJ}=48 ZsSP~}96B>`S%z-&#N5LD)*H8Fe*l}Oa;5+P literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/shadowmappingcascade/depthpass.frag.spv b/data/shaders/hlsl/shadowmappingcascade/depthpass.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..ac6f294189f7616b4e8102c89a9eed883cbfa45e GIT binary patch literal 1072 zcmY+C+iy%!6vmgCPDfpO(MF>ZI>Zw>D5})u0r4aa+VXmEB9nBclcR(;f0j3YmP<(d ze*2s)>}1Va-?uLN+iOm@bG{#OC?aO#4!@p-=(J2XVY72F9aDJYQ8^r&=wS2FO&mjr zy3xbGBGIG%2=T$ENmZ=9DTbr+Z3UKh>g)Zz{rX8c*{(hwysxXoAItUc%F$%6s)333 z-dz8@P4%Lm?jMee4`p3!KYICKYwOv=D^1VTe>%N$k;J5|%TX#Hj(2vQ-H)^INn>;8 zU!jkAt?xVIK#o}5=P-AW@qpMPR_DKYan7G?ce4t2kxKV8jdAX0><%M7f6e%C!V#xp zChgK5?^ahnV$UiwXPPk8u2AJZ<&UIs<~A@n`;33FO=Gzq_&ifD-fV02zp358{s6ivQ0V{w literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/shadowmappingcascade/depthpass.vert.spv b/data/shaders/hlsl/shadowmappingcascade/depthpass.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..de1756812400e08f17bf234787e2ff2a7dc96c67 GIT binary patch literal 2152 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 HqT|TFW(N!a literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/skeletalanimation/mesh.frag.spv b/data/shaders/hlsl/skeletalanimation/mesh.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..3a546e2a53048982b85ee6281496d37d05c81c5a GIT binary patch literal 2844 zcmZ9N>vNM;5QpEUX+>KL2n8vMiKwVxR0bJm9PG5U(=UNwTch8cC>hL5)5bIbyi!!W zi#NRA@P7SM@c;3PGd|DTcWs)}*`EFVcF&&OJ?A|c%Nd}T68B6}+zhirnOPP^m zIGyLp3+2*k=Tzy)1NUhkO9q`%+ty?x$)o3xX05R-uT^dc8AjM3*@A4tqMvw>KkZLJ z4B@pGz4KhFUOIfL)M(aD*TM4F%Gb|zy6yVR%F;^vc&(N4H;4aft=U?tw}B~t9dkx) z@;9f(a_LO1T{=;jKR#8a662d^#?MsBm3a#sB13b__{G^LW-68WN7CB0SyP|weyDVv zwe{H!hs_?WbUSGh3)LqVr{?Eo7t?k5P5m1p(gFDDLZ#bjbvv#f&N%fGEA3`&X@m3h z(qdD;e7e>?KUUrFvHohKezsbFnpnfBkF}Q@r=RIaGVI5l%&l6x)=aZ(EW5omPs69@ zv)>ao@MH{#Xj`*H=uU#DW zan_H33yA&)GdzlJK7p^#?7PTn484%q)VCr@vNjpM+fux-c01VI!+rz0we5!8!E6li zAu1Q|M2s2YI(^2Gzpq|B7I+t!F&XQ21LQ)&??$~Cf%mM#={TR9vhQ>{C&@$j+5_*I zLu~EdBZoNd>p%~-uE5srJrAtE_q-RITi_zP_uPIQWu^7!5QqKv2Xs5Ldt2ADi0j4H z<%8FYSNpJ!Mz6iwhtKrkvpv}T&h=pX>$_mQW9)A~??TKy@ZIS4LtJ1!h}e&?A40bu zf$u>#-buP}fVqSi(>SixU!RBB#l5w=*8BWC;#rBkn=c@q)f78=#xEkS@f+8t!2A*- zU&Y6Be;F~3Yab^w@635bUSEgt?DZOAJl}}O{{s3N@+dyu@mCNzM{uvA%MJ8!uVtKP zeUc8i??uG*`fK-HxJX=WuOsHAkG=37$VF~%pqra-Qsnj~y8LMN-n@lw4zq|h<9L7M zBhK6C#_=tSIPaj#N1S)jBaSxXc<MBthblSJOwp6zFd zv8_w{IC2Sp_x&8%iRcqO_yS$u-uv<;Sl)AW-B*Zf<;~OYQ7-cO8r|Fje}it1BF}Hp z^^uP}zeA5awfnmewkw%!f>}R*Bcg`y(fw_?f|!eMfn4nU1G@Q%y^}v8-opytuC@G> zaq0)!Z40ybU!p&V{0D6d;Cui8 literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/skeletalanimation/mesh.vert.spv b/data/shaders/hlsl/skeletalanimation/mesh.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..00c7c226fd0e6c86e7fdf30acb36789f83563696 GIT binary patch literal 5936 zcmZA4*_Kt+6$ao#Qw1V|iZm)>6<~{&h=M30RWtz%a%fA_r@)Gq0S+k&GjeA}9w2!D zFMO0-=PJGei6edAnZ_jlx6huiJqzYo^Z#eF=ALuaKIg1hzGGFdx2)Iet?S*eW!=|X z-ZCp1j9wqsqFLFjoLVl<-tke_?85waXXh`+ zXS~Vn{8J0>yt{LLXD;FozX8I?l*bp*7e1~d-Io<76$2t zy6|d!KWDNRr`D^3x93y-ZBDJ12G{0qG~9R-tKKVW^Y9Hn%&BHM(P~*2JgjR~GlPX| zQ}53$PMztWKY8I~|MYILV>!tgt?hLG+#55eVj0VXoYV3bj=goH-#>Tsc8s%H+mZgM z{y7FQW;+t|e5l4|<|DQ}L)&Pytg;_`rP8&)uuBGO)bY$i@zN`uwZ9yYtRro6ILI)^I(3kb6|e3xxxHkvx51- z{!U>FHW#?^s|Bw7W&l@yeTOT*ySY7L$p=q1Xow$=uBPe8iBz#OyR~DueU4M>y^#~i zQ-02=I5mo!9^ppg_;uqvi?|OWl?yi-hwH|9W^q4`R2*(J4%dyNH*tBGiqn7GPg{;| z)qXr3rmJC7bZ_5@$mV3$6IfpO{uZxj@rD+Q-Ig2WJu8MEVK03ux!E6xY)r0=*(V}; zwyVXPqRU-)b9D9d-;#YIVzI*yHt3H3LnHX%V6~V3*64Mf_(vjYFMHj$I{(p*eY9SE znT+&$9~|0}Qyz=v*}LaG5j-8)8rFT}gVU>>EyfXc@nl;&6Fw7(-JV^Y<^(^P-E-(I z{8Wqe8-BXQa+%vR+10N$_FdV<pOpVs>PN6xfaX6A(iaTKA8ybM7rnk?x|VV z+~un?UWo4g@|(;V$FjQ*cxRr-&W?j$Z?WFMr&?S!o^J7QE-QOygY~F-cD}_GpO5P% zzq!fxVTtrFzY4z;T`jN~?2qVI*R}jX1+Qs?KmXe-~l!Sc&+umEW>( zV%^W;mWLCItJoFc__CeJZ8X1?(LIZrh~Ay!&S0EXeR?cdtW~pkJeV(A`8^R`Z2sToo(vF+tJtRk__9^( z)6vCt=eR3aYqUW_gWyBt2(_J+fk&%Wq#I7bec5Bu40FGas| zPsWGr^v{YSh2O;qd0@z8;B=vx+;~a_HiYwVZoljy^}e5KcUQ_Q`NRN?x|(!R%@( z?nHFFx{Es*9j^z)y&fH}pPt2cn=eK;BhO++Fu&^Aspz9Udm|ja+q2Wb`07zV`e={N zgu~afpN)>QiaXbG=;F?|T(?IT!ine4J{kXd&Wpk9YVu6Jzv1dW%|`FOC*BOkS^azy zHP5$#@x-z@Urpxlr4VB974zi)Jh5!un6HEogR7XY2IGlk8$RcF^F94*A=Dx_-|Fwz zqwDWPr2dA#5e}~pp5dF(adK4LT=ZLQoZi6vYTlQkcjx_ad@qN?`#$F^&;NEXzMf+~ zI*wR2&r$y03SkcA|4uNDST_DYXls8rgq-}U_J!zb-yBgp%&%&HFZyWh-wuZtQ?*

(+iPM7Q=qFpgNZZtd4Y$jPs2|4wwZ>!I3Veroc&aIv+sebVBx9Sp|R z-8&Q=XYpU19mj6&(-HQhZ0vqZO-IT;6P;bn;{CS5v3rjnj_?-sk44!17Q=m(iuOnT4^$nWbpQYW literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/skeletalanimation/texture.frag.spv b/data/shaders/hlsl/skeletalanimation/texture.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..0fc23090e720bc91c7c74bfabfae6c8c332f3ed0 GIT binary patch literal 2516 zcmZ9MYjaao6oyYPX(_}~K&XIX3Mx7{8DPM%<83;~^h+Vy*624U(9p(dnwTbByjBtK z;thTazr%my7iWB)-LvGF-Fds$yWX|eUVH7GGd6l^GRsD?ESt_A^51bF8%>^l*+iNb zmsXal+x@lbg^Op^r?WAqr0vi4X5-kSpxtO~=~vZP0uz7@vKhR_Xpixyb`3{~h(p-@ zJKbjW{93iuZmc)q`uFH>-tG^2%}brlPVY*ioBW3(e!J1`ZZ><+8hwuU>hj$fZ|7>K*KTY+_SwsNt9h&5yiVLi z%4Oe|TI(Bqoea-6$J}l78tqh3Ys;-X-|P5O&vzU4U*i|)hK!?SGXt>80>KaM{DpMCV#{LySGy-jntx95!^cU0Kp;I5fsj}hhj)c<7em(Rjy znayP$^&`yY(XW1#S>1D}KgF!BU;Q|kIxlc5#m{;O^o5tKG}b^Ch-x z)$iuM9c;f@YGrQB8ovUrKLd8a3^1n58&LlmsJ{q|Rku#xu9~**)^AZ(yrgm+$LG;CqTXf5J8< z_Wl{$z4d!{uK5MHPR+CXo75LM?ql1V*yC4hV`}uPRsL7aE{{Y+dYJM~1p`FIor#8tf|A(qx1^)uB4!!UI literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/skeletalanimation/texture.vert.spv b/data/shaders/hlsl/skeletalanimation/texture.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..b979972b6a3172c3eb169a7b82745b1bd7076a8a GIT binary patch literal 3256 zcmZvdYj0Fl6owCNr$tdJBBkEO8LFaUM!>`n4I&DGCZ$s-O#Ear;Gkn@XDl;SycY3( z1ux(QufN2f;7{;p_{GHMIkQ(enYhVfulHS-z1G@iPe(^)CbDcpmSvl>KltCZB^yc1 zXpXf`X1A{EOU?GOUI|XKi!e@ zOgWcSi5l-lKlN-q&!g_@u5?~$o$0kZbZQ;)*0su++Jm#UrOt~jN?VV&wsY2DQ#n6~ zw?5+sy^iNOolk$Ye)jD7Rz4H!xmhl+Z6cp>d%3pST&XS87iUk-*5`L)rlN5?vn<)> z>nDyKoWoM$20SP6Cl5dWT)lqcP>Pu#D$6?kUY@XMG@o}Dwn%6`?=$#_*#oD|dmgs! z&23}(yy9CaQPqR+jm6nzuitwRy9VlaGYE*&Yq0>6NxzOa(@*#XD;`5;^JM& zxsEU$IrC4U`wLP*wsYDo>|*nZHz%yGcrxKp_A(WFx5ntFEu=so#N@KQmAne;g))jaf-9D!I{~mVh6qk89-ltrMw&)0v6yWw#D{7037J48-@bTZj3?m4w4yP1yLYWZuDECBpkrFEa(-V9YY& z9)R;3(N-nzKh8!xde7@-bY~P=Kbqqe1+ZjAGnHce?{#3FXF-9w~Seo@>!bOHG}*^ zHTScd+gWuG^NF2Rw}7?3TENbDXTtmOcP0-Z_80hJbZZei!$%PNTc8W?Y!_mTe%hYK z+nn<1*5i9QNbTO0f26egP9mp&jO6w4{`!bB_pQizhpULZ?`#(jXuN8E?#!*L(M$;aIo z_c0=G9{c$OvG&WzKf@Jk z{{<|kxWYeb{}s-h`bF)(p7}C)xcS)4q{iF6?`geJt7iy_Nfy6Zawi0Y|#! Ap#T5? literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/specializationconstants/uber.frag.spv b/data/shaders/hlsl/specializationconstants/uber.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..f864debadfc1cec31fcc39549deb216e0ca410e7 GIT binary patch literal 6456 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 nv_FH@+=I~ml4+i0e1HB5cE0(>-%{0?F4 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 literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/ssao/blur.frag.spv b/data/shaders/hlsl/ssao/blur.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..05136819ffac14892ddcd688629d24df72538681 GIT binary patch literal 2348 zcmZ9M>u;1*5Qh)FuvE0IatDDHqKSc2!v|wxfHXk(Sfr)!jVxhPR@t^GTP})Fko!$8 z3Mw~2(9isH1W2Gf&%0;Hi>H~+{C+cM=FFV)ZhPC>N=kE5O5N!{{<}U-Z3Uy=0Parh z1#eVOs-zCIcB5J!*U^R;(aV2%5@NNdPV_#UooOyPQ)(WYtPO0~KTvN}$7;^^ z9c@le)rN-$hlznIf}fbK)|Y0pPe zn%TSr{2`W{xz^LE_#?y^CH8bQx+`o|jo6svblW)fN{w*=~Zx1f9eS6O?v3+irDWa=A=)o9p~2e%)V>)I7fc~oZ%S#JM%-CGv+%u z@1U7^R60(ycRY>A4-#W9hY|aCpLN8>M2;ia=61f3<0!U#tPiLPx>imLjOyD!v<+^9V#>iXuKKd`jWnKN} z5P9orN3QeO_T=pR<}M&|;lGG&?eJg1mfMkMdl}n3^6qioR}g1>Hpg7WHcsAteZO+X z`_`@@9U1%E^ef``8u_kc`)&i@z&6LJoc|`aG4i8u{ubOq%xkXQ+@9a^Z-~6{F5jR% z|BmQ$SwrqN;@hx>_)g}Gjdvqwyl>+VL6vv;ow3Ssr_7LBK2nyB_TrtWhqzI(0 z=gjD=D%TCGn^xEL_O;Y4KK&H^HCcr!_l?V{vk}gi~1FXE3Hj32^}9E@MqzPYuftB4;p7@zQ!+33Oerlw_$*#!YDD{g|zrB?D#rn$; z=i5`MU!3~wt<*2p@420CpQV0r>bK`ozgWL@a=yKn`o*c=`%e90{nl|6zjM)!&?#rF z#v`lPC;aXkF=fTPr3qJFa4QndvpRoO!9_l?W&_obbM6#u_bed`*;ji4!dM#k=p0_Q zWGeoN*v7cWBDz652{9&QGI5i^CB&RvM?3{_Uf`+Nj=tw_}GqB}CBEOji zW!aKgXBNP-P0vQ=z3p1AD;GoTD3RMS17;pOgQ!x$A6xKZ&pr?BTHeVtevd=TiDy#_ z>nrD3LuMDX*5_WeX!DqZxaNGcYs%?A9$kjWix;4+nfpv6>I8Hx%!z1iV-}(99p}`7 zPemIquYWOGzjq}*v%toP&n~ce%w+9)wBH1M>(S;G`EM++=bMD*BJ?@LS;I=iA+~mY z8yw*`2S@mQ`;PGY)*a#ZZ9Bs6TXuxsx9bSMZ`Bcg-=;%ci}o#g7O{16-{nJyJw3JHHliO!IZmW6K-si2Yu`*5}yCy_v&{i03vJ{npbrDX;B&oPoH%_xutf z7x-mt`!#yw6>MYVqc>i~j^5Dkx?9omvCeDQ_DkT`v9}^u6}5T;+Zg#VyascB6LH-I z$V|i-*WQNK7ya-S_V9jq8%}-};-2=yJBWPr!@C7%KkQ@Of6uD z^*&+^*A#E#gMyP+jGKr45b^uf$g2>4RB*=o&8-mGZ*)D|5)!6Y~Mn> z?N71g6o<7cM-Ytnyft!N>-Z%iA9ehy;Eb`3 z2hk4esPAj!AH?%$M}FU6r*-@mEEf{z{tnLCL><4!mNWiHbu=c<^#k_sbNvV>pZ3R3 zVENtLjNgl&5xF?m-`Eb%rSBI+&U0y-uW#sA#M(ywzhMvLKk(o1J6KL}#Jyd?zRv#x zF~)UbjX$x|8vF&8GxkU|Fvebr9Mxj)$DF;B$ax=jn)7~ey5E6(j`w@y{ftT1cb~ME e?ddqrf7q^XAMQYl!*?>aoIcMcK17wyLjDJy%Aa!p literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/ssao/fullscreen.vert.spv b/data/shaders/hlsl/ssao/fullscreen.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..46c4b31fdc1568cc56662cc746d3a2d10f9d0983 GIT binary patch literal 1312 zcmYk5O;1xn6o!YE3x0x#h@W_?af7CDWiW~q0TC5jP#d>3cEJK@YHL`Mxc66?_?O(6 z_&oQ{kUQis=Y7w)=e#p>TCY8r4q+mMFcbFq@0ts>$kYpLbT*tj^ACFmM}it=#$>VA zL&p9UGAsT<=zeUEM}zSQI!uve+|@b$eul06x$8I6MV;gEsQIHeY<}AMve9nuZ$2TO z5iu|I&CqfOJm?L3hedX`KOFT>c8YY zT)|i^>xt(Ic)Io&C2G1FIr)?`U*we7n%5%Esj+}>zf$`o_ffv9XEeSTv9;$>dV{^e zxo@)Tn{%68E!Jp&@3VU^^2Q&s8ELZ*JHCVnwFYj_2vyS{aocH_&Q@3;E z8N}wL_zr%G+uJ&CG5KGy?z_l2dp{%h9$(&h+k^8AyO_KyaUbyIe4h?kzHu8f*O;^E ztg6R3=wRw`M%61eUv19M9%kH_?NcYh52AHSIRJZJXO({P&AwcdAK_S$RjJp=uF*JW8>mSw})pZxdRp7rOA==oIP2ePC4uHS+rNW`9d>ur)I0osma;2mNUA+_fW5Y1j9ELsUX1g5cCI&1V?57^_F}t(cE@s_?{n?W;)2Ea zoW*_UGxMGKrF>_tWsh)*Nb@%#TM@Cj&fib$e8u)6cBW$c5Iak;b;RovM&;O<74w}_ zGjyVPjVp@>Ul@EAtOX>N0$+Mx1RVW z#QeZJu>AtxjP2e6k6=f>Ywtw(#_eYmL(aV)U^3!eh%q77G3FK|%T~vu?rxBI;lEXP zmOW7>{x%HfY@YZIv^}^_aXDevvyVH`#@e_3F?1gyFW!rGE%SE}br*UJ=5Dn19!}AF zqu-k5^=kL>_klfUW5%d=1nr#Vt$!4)UrzjJ!qNY+gsrK6JYm&{{3BW z27$dZft`o@=}Z1H+A|G2hV8u#T*fxHi0wD9^YPwV)AhvO+amVfiXWk}GjrB{&hT&0 zJ!o^?!q!v6raa|v9*cAW;(@T?z1tZ5x{jW@=%?Mc73`|-_HsqR^yL-hOBqV`LP zH^%dS88OE9C+FN=LF9dd=6NSxMdV$_If=t}6Q$oZBoB<}0P`~Ixq*~mqW zZ?K(d)c6+LeEEp^4%=Br%=g&F$w$l&*v16@5!<@wQy}Dv9BTeE~WMVz_xFF&cQn=7i+(UE%!`{e;wO1^9$|`Y&qXe zaBn8g_t4<>cn{w~%r{=Ywd34ZvAr*zyM2g_*MAIs9`Rm`AoezjejAbB%xx84K z(RZ0#`F9X~{`NX|xr>PWE+l$>H}Rd`1#CC7Hk=WZu*z&Q5kFn*vgVFD0Yr H97X;GdTG`* literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/ssao/gbuffer.vert.spv b/data/shaders/hlsl/ssao/gbuffer.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..b862daa7929e1f3ca04e658d8fd8ced1819da9dd GIT binary patch literal 3312 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 UUx>rD3oNJ2^%P%bb#JEs4PG$2CIA2c literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/stencilbuffer/outline.frag.spv b/data/shaders/hlsl/stencilbuffer/outline.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..da33b821eaf29f96aa6488c58e046539c523e972 GIT binary patch literal 392 zcmYjLJqyB65Q}}b^#g5-pqo@2m5w5aii335;wp7>P(jq$pY0-;JX`34yvtqga%Y^e z57Yp35%JfH;1m^ObEyG5)EUJu`S~irAwn2iqY0UT%Xp&T!ngYE`AA;*J=q_Q*=Cn+ zGwLp#sy-=mc?}7@zI6g(@(DFvq20iHJs{JLvNq)&hbC%>@xd64#;Os}mP<z0b|3Z0nROY@WD|^a#-03k@3q4|AS1zJD$!Y& zlRglc)8850hkh}<3QyUc~A}wpUQ)nbtKJ`sV%1JDIcSHzu@lpXhP}2L&xySxJZKNw zy`*%Q#8wr{{%kj3W-CfKU}gftgPCPT!ZBP7`j69>?aoVT%42@iw>Wwx z?$HD{8He9^9K8|uLt?q;8}8V1HX|ITs>$GpomaNJbV)+)8y-`aW0+SsZa*bVodtc) zNS7pwik+4Q)8mpp&q>39i>k!zaK__X^!;Ef$@8={z0o6>y-}My)VLr`9QCo!N@Iry z&q-s$e@>Y$N|(jVOLH&Ehj)VAVit90X85w~%hGARH0O%9!%<_+V~f8oOwTsMO^?&v zOu5_M-|#(eXAk$4kC}O2cjf{!BQqIhMs^B!N0H2hjl-P36}=!$EWJOGFrVS4 zW0=|bjbMKue`dTap+1-yuSlrXR4sONRe}%vLs^K2TbG@B&m@yMtDX<^KaHF<2^_+q ze`=CrO}Z{22XD{%cg^KW~8OFqb)%aWueNs_MQ z2mU&`lh%~kkaVPeyfj%VF4vC~_uhHC`L3i*m*zGm>yvfFt=N2Jc0t~(Tszi*ZGth+ zLPTvT{}4nw*=ynICzh(kJx7YO^Od7ju)MYP>hXG`RvlTKTdW}FuP#uadzS!w_C&zyEn0Y#qLRLPqF*R*L&92 zVGi?R&pGCMw)wm`@_p2=2Ny8wcV+krVn^T&#IC;?wVn6^X3qFZ?7rVm-W#=D;OJ$3 zBbFpTr+M)vY-VPriMvfFD@}Y=ijyYp0be*j(8RrIer12G-v|EX;>9N3oZ?aw_k(}^ z@o*Dg4L;m|ceCFB_}p)&hx*yi7GgE}O?GqA;;ooHoM&yUdkrz`4n^HIuw2*xC+qLS zex8Tt7enkQux5NqYqwA}nDGU?Be37ld1_MYPQ1OnFZS7iSGRl*eXhq3!rXv2-k#lI z=Z87(Ca`zLJ3k1%18)y`^Lz2;og?0tVb|_uol*Qf@b1Gphq!?Et~tc&S6@pGt38js z>w(>mcilOz+rZmjZFjL3_Y`O99{&X0h<7bDKZ;o&*vBT1mvh)X`9qJqYaPpB&%)oY z`62py7P~OD1>Q~UegfZ0?0ych3(vNQImbG4`oVW_ZNLmWPE3KA5Vfk zqcO~!ecYRT^m&ZfKK^c_&*Q}M(dP-`=wr@4o{4|BIdU=j{Q7G?0$S(Ld)~S@~7zS_jm!5 z^Sx1v-(T)8dby50?H$@)BF<}j87$}fq_$7+4z-zk1v`b=$2hdTO1xIvYjE9cZl=a-UZ9`VrpB(JJe?G9QHnDALGz=o_MXc3vlwG?LA_-J}k7!scjW+ zPkTqt4~W$5qtLnf1cs^&3pmg zipl#ncz3_Vq_x|j+`3UcNy1; kKg0{S6aPKteCy43W3K6&XwEgQyA6{w*OB3W=)Mp87f@LI{r~^~ literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/stencilbuffer/toon.vert.spv b/data/shaders/hlsl/stencilbuffer/toon.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..608fddb7182b368e5dbb8dfd1dc856c8b8260022 GIT binary patch literal 3272 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 literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/subpasses/composition.vert.spv b/data/shaders/hlsl/subpasses/composition.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..46c4b31fdc1568cc56662cc746d3a2d10f9d0983 GIT binary patch literal 1312 zcmYk5O;1xn6o!YE3x0x#h@W_?af7CDWiW~q0TC5jP#d>3cEJK@YHL`Mxc66?_?O(6 z_&oQ{kUQis=Y7w)=e#p>TCY8r4q+mMFcbFq@0ts>$kYpLbT*tj^ACFmM}it=#$>VA zL&p9UGAsT<=zeUEM}zSQI!uve+|@b$eul06x$8I6MV;gEsQIHeY<}AMve9nuZ$2TO z5iu|I&CqfOJm?L3hedX`KOFT>c8YY zT)|i^>xt(Ic)Io&C2G1FIr)?`U*we7n%5%Esj+}>zf$`o_ffv9XEeSTv9;$>dV{^e zxo@)Tn{%68E!Jp&@3VU^^2Q&s8ELZ*JHCVnwFYj_2vyS{aocH_&Q@3;E z8N}wL_zr%G+uJ&CG5KGy?z_l2dp{%h9$(&h+k^8AyO_KyaUbyIe4h?kzHu8f*O;^E ztg6R3=wRw`M%61eUv19M9%kH_?}_zf#2x)d`Mh?x!O}#1Y@#k#>txhd3F4HNqv8oOAp1g zRxOYGn@{h_$k}tlDQjo_J}RU6^W|E;SQ-< z15=Bfj)1v8D`Y&xGaA8`kIrEFB969kKKCuoN5eQD-N3B7P`_tu%*l4B7CycF`uX#q zVfuA$vZqUNdL*aOW8;p&#gqle93B%jCf7t4>=TjHb6ZIOEPzElPm8*}MxnM}`-obYlvtjiqq zSgDa5Y7;lz;la5OBY(a+?AF+=>{Wi`9J2l%5@(JXbJqxSw%oUFVO@K#D?IVt8i}Jd zcyGYA_WpqBk9ZO=Yf#NEcQMA?MZ-Dy^g|8mfw_w@<}SvV zy9nN+Ti&gaGvq;^-$JW3Qi~p6%cyVoO@z^+8ez2HgBRzg5hi~u!f49-Oa4KvheqpV z^ae)L4KnmFyiq=S7~UiwJ^EFJGuteq2J^@zen=HrhZsIR^PVKCM9+M?iSvF~T|O}I zCzQi^@zM7mors$V9A{y9=L3hP^u(Sn$e2$)ao#)DPBdPW(GTw)y@AQM-Y&_fH{#aY zW%=;4v~x7NBBO_188PZ`4)E0B9IwjYtPXp+7Wf-d7<@f&Hs^-0&7mfk9P48;#BJ|4 zh2eONyCr{87Hf1naIr>r#4(?I;;}||h0&->Mjv4EO{07A(TKS9c3(a`If=#xGHTcv zb1n}9U($aH;75UDZi_4<%gVTqtV<1Ytmb3+tjl-LGv9~g~ zyIKwWE^vJRZU^pt;L(H{uQkHioDcHJZ;QB(^5OYAax>KV6fk+V{%85rv$eiNIadFx zIP!>D-Z%NwBlaNF|1O_(iP7g9jo)Rq)-(BVrr&esv-no|#JRh~r)z|>_%`{(xyQu$ W&caz-|4#Y1-JhAlaDP;BpX@Jqe$+<* literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/subpasses/gbuffer.vert.spv b/data/shaders/hlsl/subpasses/gbuffer.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..33166e7f369a69346af2fa1ac0659f92efc38a4c GIT binary patch literal 3072 zcmZvdX>S`<6ow~@Q`&}v61uPjyD2-EA{A5#fe4{WBZW+GLgA}REMydWjB5wV*0AqT zma;E@lP^d-&v;H5SzPP*ocBG;J@?!hdunp&K$1)(NivuG#kcE7GMO`nlbKwvu5Yc^ zFAa9;XC6DPe=eC)<-Ymk#@wFdyVGoU1$w8E3NnMRL2?6f5IKZQ@zHmYqza!|>u(}|o*szRmPuwQs4&1-ABdj0Ix*2{x-#%b+C-rhRdPK(yA zbN05^ZoQ7mYaK?9>K@2@Y&3=6|-CEmTOE>b_R>-!`!ncyHrwtwQ&aB`!(#CVk z>p0|{Z#Ep{#lj))%!7|Y6{5X|;LDrq^M1m&eeR`|G;KWlC|rfE%6BY21%F{{t?RYf zwb&JRCU!3W-A^Ttu}<8heclc3HT%s@eu8#hZ4{_FflrG{VkF>>m1^kJ$QR z=TeS$9_4uFP>%QPV)rrMy-y;pz_k%f&a+!Q4@>{Ux%W-TdFn)*{YIWWoA>k>H=bu) zInT41w~s_Ex$!)?$ctw>`dsCNa>g9PokhYP91%o z`6ziu&{f3#A1v_A*sj0}*!B?k7VL8TQLy`3?-;s@xQrJcM~puKz8!5}_Pto#jadpLzI&&oR9fp?{^ z2KL=@Zu0uip!Lg%A4l6~^nJF#o=g8S+W6=zEpYVRD6n_xoSJBT_WlIeIryBrhuAsj zn<%hzaHeJKdluNa_?|{R=VCu)?0Z+nzISCj`cFtWYbB}Tvlmwl`5SZ+ZEwzI7qNce zP6;nz`&**_N#dQ!J&1dWJ@>tc=Lvitw&&U86yC}Gh&jgTdx~sp%4@s7&-gM~-c5!$ zKc8(m@27{z%ejwt^%^1{d425hJpZiZeJ>)=?ZL_W{zRUCI`ZZ%qu)S0 zNA%=uE*Jb&V#IG2oVmfhRq*x^+}qglo+;|TgY9gr@0`TOMc?mYkN15APQKjtK3G2L zzK1>D_xo`2(a#6ia{EZizn=H}AtJB1CJ>)1>!#?B5c~Bv#(u@-g#Tmg@XIy8pCIzl zukX~S1%HKm7JpW7QRj2;c%3icueT~RJU)Z8yEiHu-z}_Xr12?`H1-g+Zy)d z{fLdRzghI3h<<&Y0*CJbuw2adA#6F9@iS;S{qFrRqTloB_qR(f{B>;o&RV~}rE=ka d1Y5tqarzIU<-&g&TmLko{}5X4A9g&8{0nl&*bM*x literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/subpasses/transparent.frag.spv b/data/shaders/hlsl/subpasses/transparent.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..e385546f73368d29b057dba525e9e023893bed31 GIT binary patch literal 2420 zcmZ9OZEuuC6o#j7w4fHstAOIOpcE|GC?5#HAU36v5M*nq)o*1BOIhu9*L^|Wq7_8( zm-r8i@r!=|e~)N1@w#SbU}4DVIrn|;IWu$SnU;~^BjX_qg%Bpg&-`>uh2hBPkAWw{ zNaR&*4_m`1-ndb%Zi#^5w?))R2!}JT6>|{sdwwmjq|lu_a-#?E#dV%_vH0F zE%ICCYqz_-c5SKe`uYP|pNaybej7efFX%mMeWQG<+AhykE>#xai~8|+{=_fMe=%37 zES@(-t#K@bX0ID3U0GgPnq9mwzZ7$$FZ9wL9fe=MQt5SDy)Gdq8jYMW2L|^w_IR$j z-fRzOyo=A4`}?0JZdKdWMqIVNVLA8m34Fh|v5C)`bb)p3?F{A+dta{O5PMf*P3(HF zVA~V6H-|8XdA|v9*4u}{yz3pt9O}g-EbG0q!MxbK>#FyT2J_;a-^;h>-U{p_T4T@i z=aVOAGxj_oY|iZ=|0+>|4Pi40zeeoX2cE>MaqSayQtY|aXwGqs9hf86m?Cyg&hIoC zHvhrzMKZv)kym{}^y!USYO}u$|^9A0#`!N3&-h7d83GZC%?Lu`JUxGP; zH$IfUb@SFNqK$@k@ZRN7tVG>1UX8r#ypK2U+PkTHI`L-`uU6f~gbVyZ*7a@J6KgKu zoo}rV!1mdDaER@p-=jlp@BIE8VteJehZ43oo;728k$;z}FM)j@YEBV(ezgw!@sw(B z%f!3RRbp|@eM>C&DDCSzVmaUJ!^CY8%lmGv;k|5PdCvF5 z>cwb!H2<9HAeLg03U32c!??o=J z^%b#P#_PoP_;=>p;|8Wi{+Go0AAmK?++Wn};2r;PPv)AKoZqhTZ)skO*x!TRm-GA^ z=5U_5uQ5628UM>mFqZoppKI#fuW!~rmcB=^zrT9eHq5)fh`)tRWBKk2;%_kdWi-D1 r+n9Bn`+53C?<8KW!`}IJ5_5hedn?>vwIp-ofF;8bvWnx-J$+v4Z6<2q&&tt;Le@sm14OH=#=2mB}q#% z5+!pzl9c}7cI1@SU$6AdwW!&sH5*dp+vPd*mH1FN@!_nw_#m#g_;Aj~W|C)AdgFJk zRA}zRQhgpc7F1g2j!EBm8OfIMI<{Ip-Y@Mo%CRcvEPObt67Q7`v>V4+N9EElZ9dl- z?MdEl-*35EI4af)E798G`eL;FAo0uiIRx8Wv=pskNGmI|3H)-j`et@XhP0-{Yy!Xj zdTTC%fm9v!4cRwN4AutMxt;FtZ_kK|A@V<(V+E;f)gmW;W;@0W%wV zZ^g{rFtg$tGt8{`W{Dvmv*J9%%qsaEckZzwbHc>3@{+$geOx=S^u8e>-mreIPcSp$ zcLV#h{OReYg!;kE=$3@D4d0ed{a|KxM?(E8%EBGom5_rte6c@Q2F}5TPEEY^Sw(Um zTN3QNaXaT-;LYc~Fmd>h1B?%L?(lSVS&a${&>F^e}C%rwcBo5wY!FgXL@Wk={zDelSYU19$ z2R_p4;NHrCgJ{EXqa6-= fpZ0FRJAGsC3EV$LJdykdzw4JB literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/terraintessellation/skysphere.frag.spv b/data/shaders/hlsl/terraintessellation/skysphere.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..824f9756691210adb62639d059356f5ceb2f4458 GIT binary patch literal 1128 zcmY+CNlODk5QW=B9e0gO+(0Jk$>6w0K~zM=lf)%PZ!+Q_0kbeh(VIWpi{SfurX?2C zRKHi%)vt=lW|ll-x{NU+W=~%%XEG_1wV3Rv@l3ZO=XzLckjTiX7}FPCjdaSI9>qr` zdrYtC*SY=Kih|9jpjHo`BVl-YwWE*rTO6GkTK!eF`jf~1hB(&*%)cPV!0e(EGvgvj8F_F)&aS}B)R_mnd|uspg?)KZwVc_nF<(cs z+A4d6qZc}yfiYiq`jVrqol_ONg&#;=N@>-s6pZVdmg%42*tug@MtFb~J;X zKJJ%Pi6(Lw8oyONu1GC9R^(`PxY&W2gMWkkf$EuOO3r(SQb-O=4*jcgw1U}hAV;ga zyQVXDs$zXbepc>Kcc-b@$A%o9T8wwl2u~ksHsx?-ZHIkrr5rrQylA}AJM3~>P7UU` q9i8E*bzCXsxO=Iod23hBed@`x3pBAOa!ylTXE<`~9{i*3d-7jIg-ZJX literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/terraintessellation/skysphere.vert.spv b/data/shaders/hlsl/terraintessellation/skysphere.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..23e41cb8f669c41450d8bf8ae72da2d875b77a82 GIT binary patch literal 1952 zcmZ9MYfn=_5QZ1%p(@Hn|o%tnNwQ+tg6>EBYEcN0pQOxKhg+y9c{j^*+9dBB?#vs#*Qj=AJBxEBbyS zfAHe)d6w0;VoXs{&h>@^pK#QeD2g6zHsF$QtFe1T>+}F-g}xJyiK+IEyZN`!CqB$I z%wp25O7G{#dDoxV@wv8@i+N8;SYTpSJPMfJz~sly9f9!!)5oYkGvh24cCgjEqtk50 zW$)qKD2MN?WJhu4$9eeJy;jsbop9XSIWg1=Alm^cLO?KJXRA^0v-P z7UX+Ddn%#dwTP#sv%ut;@#yD<*{PY_hUcUcPri%VQwa+@cwT~iS$Ii1wS>8b_XxKV z`(qBNte3QN20hc$W$o0${a|0#PEL66m5AvPd{sNXoCUrXG4^?7zOKC_5AG6uMKdpH zCm&*YQt5W5CFNNYW`6MGt!T#{xPs%shdT=P2NBaF{tva|Z*{LnY;|r#Z0B!9Oz%$= z&s>P-3@~#*9~;5+ZJ4<*Ys1WiZvY?SnM?Tp$CL#bLHaT?R+q?{FiHw%Y-O8Y$tcJ2W?Zy4^cn8%WT5;1R- literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/terraintessellation/terrain.frag.spv b/data/shaders/hlsl/terraintessellation/terrain.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..f6fc2f2a718bf7ab9328a847f06c2b76ba61a784 GIT binary patch literal 5416 zcmZ{n%Wu_16vuxp6cox!Uh-~55p2C^ErXF-a<>ocdv5ACX|v(QCW!^)P-?n zOx%&UbLY;L#)O3njZ6OoANU}?MNvPWU+0vcH*x66obUIXIdf*t%=|918aK|(vW6_n z7G~piv?W<%&dkr|3Y&Lo$GEo^nC9hSk37La1 zL3RUjBQg(JjEDa6v-qdqQxHvf-;X|Z?sT=(alAA>Q8`fs%g>juzA$yRRy|N1Kk@8T z;&+ArnaafJlhqn9_iv_8RKb64))oE{zf`H!D(CVs3$#toF;F>It({4+7G96_AKo>N zpDI09sg(xHM-Fuluscnx%Jn3Er0-a7xqM__zHi#xk2>4kQ299bqt4b5Huo>thRVYS zM-G+;XU4g&b+(!L-0#V=Q+blZqfd@>AL;KKfoq~d#hNw2^uzBPE}xw`eb((I*V#Fz zJ~Vj-JniE#8Jw(5R8C&^G1k#h@wAU;V066t{Al%QxH)+o_iMn~Nz%gC{pvecb&45Z z_vxX@+R5WNJ6+QQaHlJ^%0#}J@l&Shp1uR0pPA``&m0_Wm;T4r&)UqlK@m*tLqSm)JOBYa}*~*t&>~BeoV|o7lN;$sv+UyDz_;bN zvnR%E0_!6mKDXyS7iWAnC%b(3Y{`Az?g@NHjz5_h(+1W@ULV)jj##T0b0>P1eK-@N zl;h^!$ZacFANd%QKQdX@jE@hJcKMj61KslF!nBI=>;-qXDrd(ZseE_Tav0HTPYOm){ZjorxD4tBbxE zD`G_NnB8fNzT!Rf+C6jPy$O3K#N7#dPQ*R*)jHfuMAehv^+7uYHtWd*tzG!jb3W2}fRI3A=vdy-e>|{d_-Oqi;cM)-OZ4t*E2rpldUF{=%zY;@tfTL!O>F&q zCv9SD&8 zzl4i?wSQHIzplgI6tFeDT)>{QZwpxacLh9#{(S*!|Dg_FDd7F+2NK@R{(9~YBGy9e z*?s`A{$kJWgNXGH`vAK24}1vS^#&e9xBh|4=+=LTs`uyp^qkIPY~vZjar$ z-OTJB{)oseMk4M{iEmEd+MmIcB0oFYjAJe2BhD}A#_^jTaehUYk2t@fM;vX&`HEg% z-TL`mkMX~wJ5S(0(Di?d+`X$;5q;#F*(td{5$D*9X!l$2CjRdKUx>d4^l?7Vhg`(J zhHegl|3=s6r8NE@bbaJqw`a)7T=y!(an`lL1Q6%&jETd4CA#;<-vHXh8_~mlbFy0x z?cz-Z`>JGjKJ8-H8sk?ddwa5r+Y0tI$!?t-FWy?PuTA!jWEcDG)z|y&H`aCfmaYTO zPk0yodT?{X?!yMK>mOyW-l1;+J4U}_)XO{4iY~9OZkhRaR<75+%4DC29}RF?dZigcY=*0A8|_P@~+Ks#@Py%eob@RMMDV*D7oKJtz~N-r1w z6?D14PbD1Vp9bqAA3n#?-GlI{qU$FgZ^|?1{N?q~-poC4%_kD?H%}km0Bad<&a-f0 z{mj?jv~n?bGrC-yiv{R%{}JZ0ehcCG%l}{MS+M^48}~}G8&}`Mh@7^0314IM4&-0K CZk37v literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/terraintessellation/terrain.tesc.spv b/data/shaders/hlsl/terraintessellation/terrain.tesc.spv new file mode 100644 index 0000000000000000000000000000000000000000..676d3259d822e3a1b9461a21b14167d31eef42a3 GIT binary patch literal 13508 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 literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/terraintessellation/terrain.tese.spv b/data/shaders/hlsl/terraintessellation/terrain.tese.spv new file mode 100644 index 0000000000000000000000000000000000000000..fc0840dcca26a061a525a96c6027cee76118b759 GIT binary patch literal 6732 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 Yyd`|ZxzBep;&~Zy-U7aV%J?F?1%G&4{Qv*} literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/tessellation/base.frag.spv b/data/shaders/hlsl/tessellation/base.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..94b5f80576d30e0122042f1acec39adbd1676ae6 GIT binary patch literal 1832 zcmZ9M+fI`~6orQ#5Ns_V0s@Mys4>C(F-D2T2ofNTTH4Z(G&|lV+iC86JM(v)>m2<&quO2*n zbRU1pMA@uw!i<@i?1<0`nnx@&ls1Ik-k+f^n0CtPp0}FXxRC7w-p|v z#cUimyjLCcdsB8N?1n9SO7nzt&VC}@-p62=zn79#4Q5#qSa4>5Qx{I(!+!3Nb6EJ{ z^veuz?rhi(_x>6A$HdbD^;aApm(7}0Hy5?11$@{Ef#rG9va@r~FAezfImM@Blfz8+ z)ERt2payxw`ZFhG`yR-d5`O;3t@*l_#f>>z_k7y&^YwW%Zr>L<d!pcBjDZ0-@A zI>a0ZXa)VExwqF&Lub)@L?9mj8-W=;e=D1LzN-)3^E-hU^rWUhdoNIj_lZ9tBy}FX z4+1{!oH%~J{ARzY9_Jkj^hBK3YO>M!E$_N>L)kTf<+UT(HG%qG`{*=gDyl#3pe~S4 aJbupSu6Sek{9WCVjfRi64gam`kA*)z`F{@p literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/tessellation/base.vert.spv b/data/shaders/hlsl/tessellation/base.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..86de6853367cece9dbc41dcb419a8380f328dad9 GIT binary patch literal 1600 zcmZ9KTTfa+6om&6(O$e(?bU)-O>9G&G-*s4tyHb0Du;rSz8>F51PleA{n@@W>H217 z>q!sU%&fiFzO0!k-Q)XxFYWdLc^QleSy47AQ!)7p z9$$)3)Ne|@PCFTouE!&7#hdUx_RYZ`;lQC!V=(NcR}UO|Ty&^Y^8LE~>P$3I=s(e-obd}3tAF6XfS^^si7=h5v~i_Z&Z`3u7ID~rDvWAp<*ia@8R_@;?EuY@@_Vin;nt?0y0d|NAVeBcieTi;I++gv*lGshS4(S^ob2BX6;I=K_W z=;U3%As?OGvte{H5BRf~Xd{;ot#|77QY*R4zAJ-ocrSy|$lD~oD?Xa+eHnf$AHBfg zF2cM`O%={8>4jCttIoM8Ai+p+e{#yhpyerS*1ICUQj9BP2!5a;fH z%BaEHwlh14e&d|_Sm00t3@3EKabE$4*qSgt&IP^iWcc{t^LFqN=RP-N#5p(O Yyd`|Zxz9}*@w|*UZvo$5W$eiQ0f$&!1^@s6 literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/tessellation/passthrough.tesc.spv b/data/shaders/hlsl/tessellation/passthrough.tesc.spv new file mode 100644 index 0000000000000000000000000000000000000000..8eac17020c8069ca6239822d6bc486babe5de4af GIT binary patch literal 3340 zcmaKs>r<3<6vrQ7LCoZmAZlhybf?I&&@wLshD->Eh&EZd(pHSJOUuIe#+k-9Hr?#5 z)AfCSRsThonP&QYc7I16dC|jsIp=$B&-tD6+o!cfi+wC(|(zk zv{AJieXLqpt(PkG)l+9@*6J&3b!_d)hnmfoS68RX>*cF>%e4)kb?^EnD;0fh{Q0h2 zDQXoOHfzmRSK-YV^QWt|<dxdrRAH~L+w46m1J!_zZ!r$?s_G<$X~$v%Jb z!r08r+&G?Qj&rK6)$d92oX#%n`J}cqpP0Swgxh-(Bi|2C2VkZ{hq|Hh|?h zq`EUYh|JH(Ixk?;9_M-<-8-k1=Mr~Ty=-$n*)Jx$JrB@} zKRoY`@ADnzE+KulcKMaWBj+QyJI&{;r5NqzTuVIqyPkOTcO!B8J3_qopapD6d;sbB zf)Ap*li=>zZ$ohR?6<)j>$zvo5Zpccn+44XAafi<;7 z&DYS)KLPYd%`x;iThtuKW=+ql&6+2HHMK>}*U`;4UcYvKKNG++_)cSvF)8P*-Ff+& zIt9E>`kcL7{U*|HSHyjau78x;*N~q9YiZvNjC0+DUm|t=+u|sXf z*mF1X*A!zPcM=cZn{aK;wg>qZ(B|V=E+XFselwkwaXXRk0AqcuYmBzYc^BQBP7pbl z(9Lnz<`{DcL{16a9QPGDm(k5}*X9_bE&Pk<_8a%de%}Mzf&H2zH|}q$#7>p}l64sT E2L>7IlmGw# literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/tessellation/passthrough.tese.spv b/data/shaders/hlsl/tessellation/passthrough.tese.spv new file mode 100644 index 0000000000000000000000000000000000000000..12cdd336b304dca0163caea18400be1a16c025ee GIT binary patch literal 4092 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 literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/textoverlay/mesh.frag.spv b/data/shaders/hlsl/textoverlay/mesh.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..6e2c26afcfddcb36a24cf4c99c0832651958510f GIT binary patch literal 1916 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 literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/textoverlay/text.frag.spv b/data/shaders/hlsl/textoverlay/text.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..eb9d32312d23287e304d0b9afc6bae760d2cccb5 GIT binary patch literal 1032 zcmY+C+e-pb5XMj5HoK`=Nd~1wMYrwp5J40~nU9v4^%ff~A>;*HqyF<=g1+C;jcsI{ z^UXIi=R2eE*qUR^m@#I?9O@g(nb;^3w-`2K9FtJw-1b@>h?ty;tiH)>kWO)vRD2eh zG%1@4zIwiU^y0SK-m5PzsSmRP|1%i${p)Tgu(cE9sD1a^y*IxvXlt1_N{wnAdv~kj zet3PiQF*+q)#_IV!+OVR>J9=+-Zh^Z7xikTVP_@&=|^8)`JUJJ+P1pYxo>i(V^)-p zX!#Rgm2%#_EXTm?Ac}e0Dx?e^T()S4c~6uFhx~%3jSH9LizaRN2WG$A8yXlZX?kjS zw6#T5u}AXhQ65|no>F8MbKoZxnL{3aMiCyp@Y9OCjeK5R8O5?PSw+s&%qsG`GovhA zP^6wbd{Ggexl8J0ui#U0=;kgAj9zwufzgLnG=f7tXkzw;BD1*fSe#K=PUOFy CDnsJ{ literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/textoverlay/text.vert.spv b/data/shaders/hlsl/textoverlay/text.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..4870eb420dd28d374237042f33359751c4d51ca0 GIT binary patch literal 1228 zcmYk5NlyYn5QUpf+!YaUi(-f;5~4;CMKnf@;o^*f#OrwDz!C({{%kKMzOQE*X;XH+ zdev30tA|9qlr|=2j9E1|`p?Rkcoa!k47+9)rhYHz_5pDj8A(~n`U$&#h)C&gPO(nQ zn~aB(v0UM#jp6%)&nc$#!&2Vny5U=Pgvt5+sl#7OJ33I-v{PoDE7dWGxyU-uJ5n=eO6lS#_Dr3`P?ikJ#-qpy<=RC7L6kpWN z9f(u2q#d3Z_$b2ed^y78)WxHb*~Dfr8XZP6vm{17n!|6@n5sN9lgmQ)kE-RglZ%!U znd=2Uoxy14n}Ba9AC22G^fYYdN z7v=DtRT(jsi(SYk#=U&0LtjlsE*#$g?@k})c`2heeb50W-|4uLj}E>Kr=u>PxXZbg zPYrUY0Vaoh-m)Qshhv6d$L+}{hJLj2+aSgwpZ6mM&x{Xb@Z1lc_ayeKNKN(!xH&=I literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/texture/texture.frag.spv b/data/shaders/hlsl/texture/texture.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..83be30a4df360725ffe492ea4b26dbe4151f73ba GIT binary patch literal 2724 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 VJ$Qm=4mFz!I5hSI|7xpC#UH#5LXH3c literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/texturearray/instancing.vert.spv b/data/shaders/hlsl/texturearray/instancing.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..ad916322b8b2e1792ae5511647757a54fcbdf92c GIT binary patch literal 2608 zcmZvd+jCP@6o(H@lWE7VUQD#m;l-JzG-|*mF--~u#H#S_ z_}BX4jNf;%S9@gK%wp}|Z(a6UYwwemX6CC|wlB-F!`UnTcOA=S5>v{t)+5=$-Tg+V z*B8tnddwnaq>|%OzF)&w=HGs}mF3oCJe-W#;xn6b?%RXSUF;e6R;Dq>*^jq}-Ns~X zpr0{vE~zr7o?w6Pix##@zSlM!4IXwMjC%vBtKg-NdAEAq$J)c!x_kZ2ai{;FD{q}= z(ai#9yqs%eu-^R%ZM>X0JEKu&yV+mwJ~6(OF~n3`HJ?kb-`MJm8tv9{^KP^C^(D;s zRr7fz+ufV@zihR>{c6|d{05V89#}M%>EAPB?&6E!mE~sNu{s~ID`qO*n`tF`4?OIQ zIvaWRULNP|Ec}O$2}~QiO@4SUG{wFLv1eDYWOe5q*3Qu43-sin)V}-0_YgcjWTC*W=`h zan8rM9mKeJ$5F#=UWA-}r`Y?I)sWLqC1eilx22DK16KS7auVB{=o(@@ ziwPfo4Icq}ZrGizOYAwvaS*`&a1pINa(ZXpx4b#tPuMf+^yG(Z|N3du=Q7$DdGVEm?OS{`;W*<{usy{b zt|uIIFC}d6#@|Al-#W!jwDFPuJNDX*zlPnpiuDmYSNHo8c8{wDhcw7$+_74dwrv*;AC_O$|@XYcP;_&d{ugg+zRo-3$-MgGU^_wrBcd;%w5%)1SikGh|-H&@K#8GG+FVw~M` zL_X&GOX5(w+>69H^YHsMalXek)g3_ZAja#j-QUzd=~3Hn$PQvn!Tru&-ny;P@AnU6 z6|qKVA=b~H_M=}StBAI>gv0hRSk4+fvw_ID^e?03wA=e9h<5wZUP;_PFjtX(0l3kn A@Bjb+ literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/texturecubemap/reflect.frag.spv b/data/shaders/hlsl/texturecubemap/reflect.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..3d56c86db704d07ec5cd760d6f828b4334ea2c50 GIT binary patch literal 3844 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 literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/texturecubemap/skybox.frag.spv b/data/shaders/hlsl/texturecubemap/skybox.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..4437977490e40138333585532152d62895da5773 GIT binary patch literal 932 zcmY+B-Ae*d5XEnPZT6*RB^AYP_Vpw^MGysH;!_A_+FPu(gwUF78ug#|5_EpoUDyU@ z=bkxpXU^QsX6lYH3&xl=bE+>^F_}1%wHUT!9FtSz9Qva%L`F_USzq#Mq*K=96^A18 zreJf^?@7>jo(+S>DD+jASJk(q=qXcHZ4IN4G1A+;tT_ zc`_S4{A=))c=T?_nRhLna9}uU>T9w%U|S#DLLcC=U>7x(+tk*?9UJ%lNB&!G zO#FW5oQ|>{F>&O;@j>Nv+dcW6 zy+~TY`DmkY{I!2R8N}+UpeSOfJB+{dzv(28-jW(c*Z1I}`lC0lHltRf-G~mKN>)tK z%@R*1PHZ2XzKx>eeZ;&JSJThVgpb9KdgI1`vW zgDW1_bu;tuZ6=4MIsJHcM^@K8A&&YXhMviLGsDg15f}2p&cl5*O$5grEAn{>W!b7S zr~@V!eBEPqP!i@H5CdOTF8GFQSsFVk%eZ^n<69|A-PPYH1&5XVjO?(ih`TzOm$|_!I_Z-+z^gi$k$T`YkI|Qud0%Hm z5f60Y6Z1%C*hNK{{jv{u^ewN$fww(Q_MNjQ!t@k+eC9Fz6ThRA`q)chX5cN617-&N zIgi5(%z@4f><0W?neY~9>gI&Lu zu|I0SvF{Hu_)wSKfAoCF`y@P@cPI{?8R&<+NCqF~ZpvrwBW2UykqnM6aL4lD_+0|m z@*KNuYUAv@?Q}EZ(fK?0t-5F(89Mg|uIqVbVGiEXiSv_L*$(Ln5QcA-NsPvXMS@8X6Ho++gCd}o3Kb!hqAD^miKE}F(F{0M*(#YRxW)x{ zal?JXec%3_U##+Z?wr=CIaG7{eY;P0pFTY|9qqfjv#c%4vcBvu{&#K8+H=PJM(`C` zSB@vAW~Yj4_4(qV!#C^Kmvy-1w*IU)>qKuy7Av(Sd988UT7OIIaP&j!; zm#NyBN9&R--{}DRN@caOnBSnbWNG$e2EOT?{(IcX^!|O=C#m1uI}w-IykhSlHmBJ7 z#m<)4b7K20_MF&Wi#;c{zhalzxpIbFfk)9JpL5h~7i%~FHqQ65k0AQ*Px#6f?A`Pa zdq28sJN}#4jiG&vD#e=-eUvz}1>HLa-iq#>0$+vhod@vR#y)~*Qy)OGY~z^uwxh`z zYmDxRuSWChIRL_QAWv61zsoy`!Nf-_E?ok;EBO zeH5{_A)@SJ-vNIuySg^x#QVv6r|a0wZC>rW+1n6#@%0JoBi@s6}2FS|9#ZzYT0#Zj33?CLw2GJkhbhjAOR8oM!Wf^#4)Pqg4CTkumY_~{n> zOcS=R&o*K6Z8Txu=Rm@Dliz;&N5k61zK0)n`y=)}{FvJxvG3;}68jU_KOWvE@L_cO zGfh{Vk0XdVjB6~ry+&m(evcZ_LGFCg+_-~C0zH}{OQa~|=G-zI&m z`z1tPALr?1#JP~y$Ju%Xk=Lih{wiXeencPp^BN*w#>csP9WlRWAK<3@*xx|p^_BOV zXU*Qv_ttI>-}_C(99s}`*wYJ$d~f=Oy@l?4O(5EgSl;=*ABGA-Xm9G9BLWBg7b!h`!p5 z<2-ANb04F7F7PMl#=S`YoP|#jedLWT_ZedBy@>WfD2Plz$}Gln(%jF@LS&EGGHlUJTgXMaWa zy!QK2y}zN$yMp^2UC!LW{gF6pndaTB{ZGX6`fDFRyz>UTwz%VM=yKY6*v0=4{dVME D>{sx< literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/texturemipmapgen/texture.vert.spv b/data/shaders/hlsl/texturemipmapgen/texture.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..de4cb54486f9eb5d6da2507997ff422fb91d7abb GIT binary patch literal 4204 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 literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/triangle/triangle.frag.spv b/data/shaders/hlsl/triangle/triangle.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..870fb6c12ac71dca568d8358a955b81f6eca7faf GIT binary patch literal 648 zcmY+AOG`sR425GK)@NH46cqJVmqKwRf~bf{H$t@*w{qPTY%4`w`?K8$e&6k#g#(!+ z=Oj6qsaB2~5epH~j3aK(MpR0qTI8~=XhaQfJkCcGi3(;#n_HYgMAfL{Um@$USk#Or z-LHJsz3t!k2d8j#D(#zoeiX#h^ULsN(7PKJTyU5atrx#2HQZSp^E5NX E54V0Hc>n+a literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/triangle/triangle.vert.spv b/data/shaders/hlsl/triangle/triangle.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..ebd52799bf0ba00ad10a93283900216be8ad17a0 GIT binary patch literal 1960 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 I4_XWT4`vjNm;e9( literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/viewportarray/scene.frag.spv b/data/shaders/hlsl/viewportarray/scene.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..a2843e1c83bac70e70368c1f832c1a42246d4da4 GIT binary patch literal 2104 zcmZ9MSx-|@6on5htqRB>0^)#0G#WLH8Z{;cwZWz@m1=1!&J?In?PO`end0#3lRpdp zk1r;!@8)c*y<~INT6;X_-qUbsW}kCC&bdMNP5*gDTqscbT{Kuz>4kKBqq!QtdhHVa zK^JBTd_%6!^$Le%l|reCju$N=i^|l%4ND~k9M&JcWeE{Q5MQdsHw%sUd?tG@kyaOU zYIuDvlg?ym9#I8yy`D=h&Sf&$yO$*eKKga}u9%PBwN^7|w2*(1OJq~YT#(oM-~16( znv$Mc$h4aER+Idw*TD0&Mx{{xr*V37wQ{Y|5yxKhrQ%k;xT4%>P>+44OKa;*L_O^B zq}F<&QK$q{m8!H$Y3IZ;0}q_DfYS@k8NlfSXWwx0;Oy1%$He!G$7JMR@ce)=_Fo3q7#L@RqhAJxu}YMqvHOe=WG zzen;rjocH`?98Xd&x%tA9shanC-0^>v(Ss#j59|k=N)%)-m!6Jr5`n@|IBlGUf0*b zyu3Re=Kn2rTr0hpB`+i2_`@!~*u@`p@yA{KNf&?G!I|xO2j@)q?&&|Pc{r1pjJ+72 z7Un#RpAzOgjL!&j9`{v+@BFkZCL@nn{I^t*KKK&KX5ULPG`@YSRS;g14ft<&S-3}* zl;NWe=Y?){R)nd;ov}Kr!su3~C~S4`QHOIzw>mF{sl#2fI%~q{R%cz<>foae?+4v- zO2X9M_UHLZ7|r~zh1tV^&WrOd%cz->5sRO?yk~r1-ZA&sYE*=&VZ16#&!0M5?omxf z3_5+#>N5JAli}xH|4=+LypeJLiJ>3g5SrEJ_mp{zZwRw*>&Fi>G3eH>C2alh)6aaH z-pAb_j^7HKWlNaf6k?c#?-$K_zZK>@jK33R-W|V}_rk=W+q?ZB%)1?zS>8us^zT0J zlQ6mH7V}w{{#JWim^kzY{;b===sc$F2&1uo)4q5uq?Nlesr9R@Eh8R3zrF04JBp7v Rh&v-g!^d5P|55cDvcD=&jw1j7 literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/viewportarray/scene.vert.spv b/data/shaders/hlsl/viewportarray/scene.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..54e85bdaf9b3366ef0a3ea6431f5d6e77a00eb22 GIT binary patch literal 1536 zcmZ9KTW?Z96oscy@ZMT$Tdx(Yi7_U`r$(#2AZo?594w~q_|~LAgW$72+ZPkR?{K!k z9g3@b9;hN(EESvFdWV@y{Rh&xV2$X2c>^!KxU^;L17v zPC$j;iTQ~=d$Bdd&M7ud z?0oa_&K2?N?7j}JVH?C=V-=f2Y+doJ#_TSPk=Gh1-s??ljrd!vHOyXK7I+EYUIH&) z(r<(P)UCCWqhI?q@Ev?}SxdaiYA^O6zFT1RRjRD9)`?hW)!*dwJnQH;^4x>-9MtOM zdB*A-^5%WcsxBvfQQ+9WU10loi*BFJxG;z9a~^x9ft|y9HOBqU;XTb`>x;LEbQbse zIooflZLqr6Uf*EG2i}>(&g9!t-zDA|9%A+z_z}Lf0zbyL-!5HwM!pyK7^k*Jv^nMV zt?wIX(yM3n4paB;Bj;|xN6a4Bea4tWY)t6;_~!7vM2-V|`G{%ao5L7$h!3#P-{YIZ zHx@Zs`0`)r)%W%Rlk*GiBfgwx9^9vb^W3_ergwjcx!-to->$WNAD=OMv$nm7jkgcq zRU1=R+bM8pPr!24woV4SSKYTH7y1^yy1lFW7Ucf0<2Cjd%X(W! literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/vulkanscene/logo.frag.spv b/data/shaders/hlsl/vulkanscene/logo.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..8408252ebad6ddef19dc5d54120bf63286cbb7a9 GIT binary patch literal 2224 zcmZ9M*-sNu6vi)w78GO=0Y$|k8jVXeMvaMaA=oq|rBmD57#B!cgeq;Zv?y+XyDvWZ z$NFO8_nXd%V}~5h`M$H>bEnf8nd)|~!#UUQe&|2Xkc;?CuZ#IQmCmOVn~mkf)oYjW z_q$G%?;CKvu1j`AQYn?I@Oa^(l9)sdT#sZ>9^$~A`oq5{A}WTQay7A4swWD`hclj+ zyXW_cssgnFU&hPLO{e97CqLk4ytJ1ifm-wo_^g+oEzEkEpjNlvyRFX^h5LETSZg-? zA@aqA!gMZ`Ecm{z|IQax^l|aUyw_}OG#fJgDdBh?6v3?+Hk+x{E2Z^+96Ok)t=H<( z7RULM+bh}HCS1&~&$-j()wM=(Wl5$g#@vMTMyXz^_*0gvv`=Y6s(Q{Z;jz~|68JEVM&^+9Gt6nRQT+2Tuo81yKsd{ImsRd8{bJF-N{$hZM!G9^h z%y?6n`I(0q!OY8E!kD`bW9~YP>1UYpao5zmuD66Uu`3?V_*>|xG`*Phk%WB1k3*Q* zpM)^8KMi60^KEz`gxLx29QALhA3HrEVK#7UN3HW3o|KRC8a^qT^BSI#O}(s6$sL@M zP%|zemv~}ss|&sHPpcwlElJ>b&#m5K!0!a}ED6K)sVnm>OFAS;2|ntwGkB}JBAdGW zUaamj+3;3(RW_XEtjQ*a-<0K)WyAOBg!Fzcp?69`K7O0)g>0LPIOgK+;H`%~QGO48 zr`Dq)8~(m_!aG=%!0{MYlMP3G<2C{=BAwNIyw5KsZdJko*OzW|h+b literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/vulkanscene/logo.vert.spv b/data/shaders/hlsl/vulkanscene/logo.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..1c78bd853be349afbd7503223856fda13a790351 GIT binary patch literal 3764 zcmZ9N*>hA?5XNto2}>{t$l?~0prV2!A|i?kF=C)9GLb;aM-rIQSV<-oCMa(Mq1+b) z_Z9bj-}S{m%NMKs{ccW&>)h0r)8E&p`}FB^?wz*QjZ3nuCCjp|>@WWNtjbz*r8Dcu z$HAeIq4M$ivGVrYx9ac8+8lD<%4}tBxAK2#Y+_oXw;hx~2VjA0DOd)UgHEslwDISh zae_z8Se`w;7N9&{2qnLReJ&g5}Gu86kcumbZ)O?gm)ZL4H_`XV>N84v+w)R-{ zXnmqa7hF@l1x(eBRVi&zv)<`Kz0R}V6BE_P85VO|@1(WOSh2OWWtT86)UYIvnV2r0 z7@I8*S4Q?9+Fv=4pHGPl#wOo^%E1Twhwzj*3HO`yLwg?{s8kN#zZm0LCEq}0sB%z; zF`iv*uAVPc400XMG<>m;y5}5vBr}(1A9}H9ecp-i#X8&2O6;b1zvMTgkB;o0_NusB zxzEBqDdpVWU%VF`xn`b2)h7mOwb^6N_neF^-WTgHqs@%Xj!osep2*i3WF7Cad+?DP z*PXKkZr|mut>1pjT~}_8<;KbFZ86?{7US(>G2XR{@%Bvay5{qK^Z}pX-Y=hhR1@~b z1?hj9d%HBB*SP^cZVvgX#GNZ&ow#dub9#QWjB%d6BFf~}zXq%& z_AZJ~?S zeKjz~dHS>?xA)5XyMf$&jLvthZen{G)rxTM-Kn?wdzgI3u`tp9pQw2VNeY%Oy7r60f3fwa)Cw>q4JcC<+waD$^R$zbR_WV|0f5N{F z+x`qwm3QDaU=HJ)tN&gyx{f~W2BYtDKbbu5CxK_=d#mP|KLyl%w_U4`@oAtQanE2k z$32Ut?mHiG&ta>dBe!{;2WsZC9($-3^IyPLa~*s7BCvkzbB=v_38m~$Sx0j%8|a_7W;U%_tP@2hC)k=Omb2Gk!)wY{D+hOEME zUCsCgP!~QepcO>So7m=2kC?Zx)rC)U%-d+jm?vW1!B!VO5i`uKIRbwdSc|!x>t4qh z-vjo`Uf3^dejljYbNL0JW{wr)Q~Ln8#$Ip%M7|HP8^Au6Re*?fnsE`01;D~SDmkKF+NKDwsdm{{`%Y}bssf5i5;P~G|S zjB2sZpRmzl(f`4yr8sh)} literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/vulkanscene/mesh.frag.spv b/data/shaders/hlsl/vulkanscene/mesh.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..21cf637e52b047f2e5fb0664daa90da1cb348821 GIT binary patch literal 4008 zcmZ9OS8!ET6o!up2`ESasZk*j3kqHoL~$5FL_}s{5&<*5IRUPCXGodk#*ruG!51HV zvSF`?3Kkd@vG<0(ckI0vz&3v0$yso`hgq!u|JT}Ut-bd-Nvf+R4os3gk|Y_L{LTM9 z!;`918JyInenHdXrb2IddEuxTM;ITPRO`}MT{1Ws0ItG1+Do14M%8MtT8swCAZ!>B z^W@e1Grkm|hO7g?ATv@ESWzi{fn~118OQz3jX=+*If*K}u{!DLe zS-fz`!j|T&*1&Wh6@8|Wp00DhU47+rh{bJZESbA#!Tcp@Y{37{s)pQ$>v>$~r!(u%XnZN+6k zD%K`b@!jn`?H%cqrB2&BPYJ!ZySR*4I*<2o30hOSt~$9C-<;vg@F%CZCRu}Dy0lR2 zEcdJeQfWYP4Zd_{q1@9~Olx1=&pV1e=@lmn$Z_8Bn2+398nIeu5}xQe`d-TE{)Io`FN&%T)V6SejOPoLhqYft;b*?F4p{NB&yYsSrvxhBBf zciy5_1A3C2cfvSs(tC2fXKTNBmltIH3?8}knKp~_+SMwH2T@p$gX@7Q{-$(!pBNAuk^rx89AZ!LA>v+%~F z-<*s)lkt->?wXPGzX0FJ*Ksl49M|u*{&VqL@R`MW&%<}!NACXJk9(B6U*EGl_gl>K z+6wNx5%+usVb(mFuh=t*JM)Zoz^35s<(xNRt`EMpg5R9up2fNfeoKy9@74-_TLoXA z_YQ~Ra{|AHp#o}4Xz4Ie6&p-Gyu;(9q zI=D8+j{~=)C|m;)^V-*=FFyxy^YVMqGxqCrsmJJsDDqUpPS8dFI;U1U7c?; z=3URnj9J$^RFAs%fvvkY7In9P)uZnHV6|BD0N6D{u~_pUSbYdPwD&`py%%7vHy(36 z434?XbFQ^`_2}^kxN@#X(bOa7u`DNlCXb`3ujbsG;|a`l>e2s6aP&8Bf8Sm8sQnbU zvj5X)>XGwImXkk+XVKIzqJJI!Im~tHL%4Uf=P~>HjT!g%jX%4cV;$aj^w-h!(~&f8f|{ylyNO+D`7 zU9juaeNUbJJ*l#U*e*`v1 zJ$i2gM{ncyj@ZXptRBA&)5lz&fX89x#QA;-cBaVr3~Zjd^WKG5GvB>^j(N_(zW}>G z@5lI;m^tck#$SQGhkdcw=htBMQ?tAO2CU{2+P7de_Zr%FnO22wc;S8cPklB0`yb~pwi8ox4srCD zkjAQZ#mtEr{{lOsxts9vh#d`9Gd2h>|A*U|iTQVcXH~*{F2;@_Zx;TN9KJM%F9SQ< z8oWLHmM+K434R6G_3=Gi2{uPP?&B)3y5E8KaW&q@b1-%dre-g3)V>z%48gAh+dFz) r555*tkDtLefPEh)W5(_2`xf8djbP*Tn7Iwuzw}kNzjMf4=ehj{7P^Hg literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/vulkanscene/mesh.vert.spv b/data/shaders/hlsl/vulkanscene/mesh.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..b621bf60e14bb8e79823a1a661ac08b33cd6b969 GIT binary patch literal 3864 zcmZ9N`BPP87{`yoMNLG>T+$+t%F4P~so7M95rfQ-mjIc5MY&Tnz-91a`I|FMS<_~= z@B6;*d(r+c^-D8-K8N?g(>=^{-{<>%*7teeb7)%Ly&}t&Wm(pi{mrjWd$v4hR%b2w z+CMllSUy^xDDT?6Q+r$1p_?mt9(AADx!PUT zBlXD|Q?RDIy-wFAsY5J|!|3n`{Rw!?*4q#8ToU+;8GX`)=>8REBR^it((Ht+z5*8P;Ho zXIGoA=Y@(v*6~ck7KP+J=inomxjg&ei%o0uPJ}J$Tn$%ZH^uuUz6^eBWMIat;%>!0 zi}$3IV`qQnUbN(#c}A=E^ww%~6Z(5j#uo33{qKOA9iJPY&UZbT*XgH@ciBDoh>eT$ z7d!Vjcd_#pTUYFicOZHQ0cu0@y~pc{RCx)+!K zaqev$a)3PHXWoc&p2qbwaE)>L7318yaVL<-CD#}ySB!JE#w{QbC)XG!SBz6P&X>=) zcz1ISx}Q^%v))E@_uPqWB8y)$u{p%;3F|99J7H^faC&~TjL}b9QOe}jz8={?>^ZER zi1XQz@CI~q2j19V-vssv`(|`&2R;|wUd8sk1aB8(6i=iT5S!p2a;0M{m6eM{oUL_a3ttNZ5F1 zI?QTM?$3Oqtk#ng&$AjYz8>r>eMjZQovg+#OSp^G^9j5S-SZ2q-ETo=u{{iYPL-;^Tun6FU)e7^koHePpzbHg)&l zJG!4ty{r!*+I=^p&clfhpGUyP`M#P%tdI77)<=;wi0`kQ_vSG~KJt2pP9^>}eBAHj ziDStsoTPg`jmRrLp1o%hF;AeIM?PYnM3+~58e^Vxf z?`3rP@OcH@9Qv3;tdDlj=T)Tfd|pd@!laIXC{s@te zIv=B(E9!iLE~j7g_bIybHIKE$`o(@eLw7%s^K= z{N8vbKOx5JuYC&=bNm@yyM5Zf-$J>V(J$z7F^>gwImM@O9>2oHJYp}u!O7ptUfkR7 z$O0lC@7*8h=ITSV$9(@pH{Vvo{>1v4yN&fPM7uV>+v2cYg)SH0q-)USeDq(zDyO}j zbr+)DKD4h)oOb)(jc9ka+E*nm?0b^EDcSv>CKvW=lf60FSF_56eQ&atlD(Bx?q53E Gi~I*0|0%!# literal 0 HcmV?d00001 diff --git a/data/shaders/hlsl/vulkanscene/skybox.frag.spv b/data/shaders/hlsl/vulkanscene/skybox.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..4437977490e40138333585532152d62895da5773 GIT binary patch literal 932 zcmY+B-Ae*d5XEnPZT6*RB^AYP_Vpw^MGysH;!_A_+FPu(gwUF78ug#|5_EpoUDyU@ z=bkxpXU^QsX6lYH3&xl=bE+>^F_}1%wHUT!9FtSz9Qva%L`F_USzq#Mq*K=96^A18 zreJf^?@7>jo(+S>DD+jASJk(q=qXcHZ4IN4G1A+;tT_ zc`_S4{A=))c=T?_nRhLna9}uU>T2j_(Tvz%C)T*PPy}1v=23u)6`QF-~1E&bA2)K z`|a5wCtWh^eBU>-J2Pj~d~UVm+=O#(+I`V~)~w3~ChsxojJtQ|_dC5?Ku$))q~G(d zp#558L4QU07pKuE8H^IS!jqoEZ^u9GFlV1%T>6~H@{?bKZf$fO6Gsjl3#y>oX62vn zM$(GjM;i>|@7=FSFIH7WMG?cf{rFq=Mmu@bmYz}ab@y&-KRd%(J34KhwW6apk`+_( zy~Lx$i)RN{dr@? Date: Fri, 29 May 2020 16:36:27 +0100 Subject: [PATCH 5/7] Add command flag for picking between shaders The new `-s`, `--shaders` command line flag allows you to specify whether you want to load the glsl or hlsl shaders. Defaults to glsl. Issue: #723 --- base/VulkanTools.cpp | 5 ----- base/VulkanTools.h | 1 - base/vulkanexamplebase.cpp | 17 +++++++++++++++++ base/vulkanexamplebase.h | 12 ++++++++---- examples/computeheadless/computeheadless.cpp | 9 +++++++-- examples/imgui/main.cpp | 8 ++++---- examples/renderheadless/renderheadless.cpp | 13 +++++++++---- 7 files changed, 45 insertions(+), 20 deletions(-) diff --git a/base/VulkanTools.cpp b/base/VulkanTools.cpp index 40783e78..947f56aa 100644 --- a/base/VulkanTools.cpp +++ b/base/VulkanTools.cpp @@ -19,11 +19,6 @@ const std::string getAssetPath() #endif } -const std::string getShadersPath() -{ - return getAssetPath() + "shaders/glsl/"; -} - namespace vks { namespace tools diff --git a/base/VulkanTools.h b/base/VulkanTools.h index d6b0fd6b..adccbf9f 100644 --- a/base/VulkanTools.h +++ b/base/VulkanTools.h @@ -60,7 +60,6 @@ #endif const std::string getAssetPath(); -const std::string getShadersPath(); namespace vks { diff --git a/base/vulkanexamplebase.cpp b/base/vulkanexamplebase.cpp index 2cfbfbfa..aee433d3 100644 --- a/base/vulkanexamplebase.cpp +++ b/base/vulkanexamplebase.cpp @@ -129,6 +129,11 @@ void VulkanExampleBase::destroyCommandBuffers() vkFreeCommandBuffers(device, cmdPool, static_cast(drawCmdBuffers.size()), drawCmdBuffers.data()); } +std::string VulkanExampleBase::getShadersPath() const +{ + return getAssetPath() + "shaders/" + shaderDir + "/"; +} + void VulkanExampleBase::createPipelineCache() { VkPipelineCacheCreateInfo pipelineCacheCreateInfo = {}; @@ -642,6 +647,18 @@ VulkanExampleBase::VulkanExampleBase(bool enableValidation) uint32_t h = strtol(args[i + 1], &numConvPtr, 10); if (numConvPtr != args[i + 1]) { height = h; }; } + // Select between glsl and hlsl shaders + if ((args[i] == std::string("-s")) || (args[i] == std::string("--shaders"))) { + std::string type; + if (args.size() > i + 1) { + type = args[i + 1]; + } + if (type == "glsl" || type == "hlsl") { + shaderDir = type; + } else { + std::cerr << args[i] << " must be one of 'glsl' or 'hlsl'" << std::endl; + } + } // Benchmark if ((args[i] == std::string("-b")) || (args[i] == std::string("--benchmark"))) { benchmark.active = true; diff --git a/base/vulkanexamplebase.h b/base/vulkanexamplebase.h index 91f9beaf..dfbb203e 100644 --- a/base/vulkanexamplebase.h +++ b/base/vulkanexamplebase.h @@ -73,7 +73,11 @@ private: void setupSwapChain(); void createCommandBuffers(); void destroyCommandBuffers(); + std::string shaderDir = "glsl"; protected: + // Returns the path to the root of the glsl or hlsl shader directory. + std::string getShadersPath() const; + // Frame counter to display fps uint32_t frameCounter = 0; uint32_t lastFPS = 0; @@ -131,7 +135,7 @@ protected: VkSemaphore renderComplete; } semaphores; std::vector waitFences; -public: +public: bool prepared = false; uint32_t width = 1280; uint32_t height = 720; @@ -193,7 +197,7 @@ public: bool middle = false; } mouseButtons; - // OS specific + // OS specific #if defined(_WIN32) HWND window; HINSTANCE windowInstance; @@ -328,7 +332,7 @@ public: /** @brief Loads a SPIR-V shader file for the given shader stage */ VkPipelineShaderStageCreateInfo loadShader(std::string fileName, VkShaderStageFlagBits stage); - + /** @brief Entry point for the main render loop */ void renderLoop(); @@ -369,7 +373,7 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int) \ vulkanExample->renderLoop(); \ delete(vulkanExample); \ return 0; \ -} +} #elif defined(VK_USE_PLATFORM_ANDROID_KHR) // Android entry point #define VULKAN_EXAMPLE_MAIN() \ diff --git a/examples/computeheadless/computeheadless.cpp b/examples/computeheadless/computeheadless.cpp index 11ee8c2f..1b1944bf 100644 --- a/examples/computeheadless/computeheadless.cpp +++ b/examples/computeheadless/computeheadless.cpp @@ -361,13 +361,18 @@ public: VkSpecializationMapEntry specializationMapEntry = vks::initializers::specializationMapEntry(0, 0, sizeof(uint32_t)); VkSpecializationInfo specializationInfo = vks::initializers::specializationInfo(1, &specializationMapEntry, sizeof(SpecializationData), &specializationData); + // TODO: There is no command line arguments parsing (nor Android settings) for this + // example, so we have no way of picking between GLSL or HLSL shaders. + // Hard-code to glsl for now. + const std::string shadersPath = getAssetPath() + "/shaders/glsl/computeheadless"; + VkPipelineShaderStageCreateInfo shaderStage = {}; shaderStage.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO; shaderStage.stage = VK_SHADER_STAGE_COMPUTE_BIT; #if defined(VK_USE_PLATFORM_ANDROID_KHR) - shaderStage.module = vks::tools::loadShader(androidapp->activity->assetManager, (getShadersPath() + "computeheadless/headless.comp.spv").c_str(), device); + shaderStage.module = vks::tools::loadShader(androidapp->activity->assetManager, (shadersPath + "headless.comp.spv").c_str(), device); #else - shaderStage.module = vks::tools::loadShader((getShadersPath() + "computeheadless/headless.comp.spv").c_str(), device); + shaderStage.module = vks::tools::loadShader((shadersPath + "headless.comp.spv").c_str(), device); #endif shaderStage.pName = "main"; shaderStage.pSpecializationInfo = &specializationInfo; diff --git a/examples/imgui/main.cpp b/examples/imgui/main.cpp index 8a2f72f3..f406015a 100644 --- a/examples/imgui/main.cpp +++ b/examples/imgui/main.cpp @@ -110,7 +110,7 @@ public: } // Initialize all Vulkan resources used by the ui - void initResources(VkRenderPass renderPass, VkQueue copyQueue) + void initResources(VkRenderPass renderPass, VkQueue copyQueue, const std::string& shadersPath) { ImGuiIO& io = ImGui::GetIO(); @@ -329,8 +329,8 @@ public: pipelineCreateInfo.pVertexInputState = &vertexInputState; - shaderStages[0] = example->loadShader(getShadersPath() + "imgui/ui.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = example->loadShader(getShadersPath() + "imgui/ui.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = example->loadShader(shadersPath + "imgui/ui.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = example->loadShader(shadersPath + "imgui/ui.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VK_CHECK_RESULT(vkCreateGraphicsPipelines(device->logicalDevice, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipeline)); } @@ -759,7 +759,7 @@ public: { imGui = new ImGUI(this); imGui->init((float)width, (float)height); - imGui->initResources(renderPass, queue); + imGui->initResources(renderPass, queue, getShadersPath()); } void prepare() diff --git a/examples/renderheadless/renderheadless.cpp b/examples/renderheadless/renderheadless.cpp index 24003fa7..e33d4330 100644 --- a/examples/renderheadless/renderheadless.cpp +++ b/examples/renderheadless/renderheadless.cpp @@ -591,6 +591,11 @@ public: pipelineCreateInfo.pVertexInputState = &vertexInputState; + // TODO: There is no command line arguments parsing (nor Android settings) for this + // example, so we have no way of picking between GLSL or HLSL shaders. + // Hard-code to glsl for now. + const std::string shadersPath = getAssetPath() + "/shaders/glsl/renderheadless"; + shaderStages[0].sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO; shaderStages[0].stage = VK_SHADER_STAGE_VERTEX_BIT; shaderStages[0].pName = "main"; @@ -598,11 +603,11 @@ public: shaderStages[1].stage = VK_SHADER_STAGE_FRAGMENT_BIT; shaderStages[1].pName = "main"; #if defined(VK_USE_PLATFORM_ANDROID_KHR) - shaderStages[0].module = vks::tools::loadShader(androidapp->activity->assetManager, (getShadersPath() + "renderheadless/triangle.vert.spv").c_str(), device); - shaderStages[1].module = vks::tools::loadShader(androidapp->activity->assetManager, (getShadersPath() + "renderheadless/triangle.frag.spv").c_str(), device); + shaderStages[0].module = vks::tools::loadShader(androidapp->activity->assetManager, (shadersPath + "triangle.vert.spv").c_str(), device); + shaderStages[1].module = vks::tools::loadShader(androidapp->activity->assetManager, (shadersPath + "triangle.frag.spv").c_str(), device); #else - shaderStages[0].module = vks::tools::loadShader((getShadersPath() + "renderheadless/triangle.vert.spv").c_str(), device); - shaderStages[1].module = vks::tools::loadShader((getShadersPath() + "renderheadless/triangle.frag.spv").c_str(), device); + shaderStages[0].module = vks::tools::loadShader((shadersPath + "triangle.vert.spv").c_str(), device); + shaderStages[1].module = vks::tools::loadShader((shadersPath + "triangle.frag.spv").c_str(), device); #endif shaderModules = { shaderStages[0].module, shaderStages[1].module }; VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipeline)); From 3d49863bc7ad47609441f0b2f28b28cde82ff548 Mon Sep 17 00:00:00 2001 From: Ben Clayton Date: Sat, 30 May 2020 11:49:40 +0100 Subject: [PATCH 6/7] Rename multisampling shaders: scene -> mesh Possibly went unnoticed use to the rebase of the HLSL shaders and 10a1ecaf7. --- .../hlsl/multisampling/{scene.frag => mesh.frag} | 0 .../multisampling/{scene.frag.spv => mesh.frag.spv} | Bin .../hlsl/multisampling/{scene.vert => mesh.vert} | 0 .../multisampling/{scene.vert.spv => mesh.vert.spv} | Bin 4 files changed, 0 insertions(+), 0 deletions(-) rename data/shaders/hlsl/multisampling/{scene.frag => mesh.frag} (100%) rename data/shaders/hlsl/multisampling/{scene.frag.spv => mesh.frag.spv} (100%) rename data/shaders/hlsl/multisampling/{scene.vert => mesh.vert} (100%) rename data/shaders/hlsl/multisampling/{scene.vert.spv => mesh.vert.spv} (100%) diff --git a/data/shaders/hlsl/multisampling/scene.frag b/data/shaders/hlsl/multisampling/mesh.frag similarity index 100% rename from data/shaders/hlsl/multisampling/scene.frag rename to data/shaders/hlsl/multisampling/mesh.frag diff --git a/data/shaders/hlsl/multisampling/scene.frag.spv b/data/shaders/hlsl/multisampling/mesh.frag.spv similarity index 100% rename from data/shaders/hlsl/multisampling/scene.frag.spv rename to data/shaders/hlsl/multisampling/mesh.frag.spv diff --git a/data/shaders/hlsl/multisampling/scene.vert b/data/shaders/hlsl/multisampling/mesh.vert similarity index 100% rename from data/shaders/hlsl/multisampling/scene.vert rename to data/shaders/hlsl/multisampling/mesh.vert diff --git a/data/shaders/hlsl/multisampling/scene.vert.spv b/data/shaders/hlsl/multisampling/mesh.vert.spv similarity index 100% rename from data/shaders/hlsl/multisampling/scene.vert.spv rename to data/shaders/hlsl/multisampling/mesh.vert.spv From 4818f85916bf88c1ca8c2ed1a46e0e758651489e Mon Sep 17 00:00:00 2001 From: Sascha Willems Date: Wed, 3 Jun 2020 06:04:21 +0200 Subject: [PATCH 7/7] Take Recipients for Travis build notifications from environment --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index d0b9a43b..3ad3f083 100644 --- a/.travis.yml +++ b/.travis.yml @@ -32,6 +32,6 @@ script: notifications: email: recipients: - - webmaster@saschawillems.de + - ${email} on_success: change on_failure: always \ No newline at end of file