Jackalope / jen (public) (License: GPLv3 or later version) (since 2018-10-24) (hash sha1)
----> ABOUT:

3D rendering and computing framework based on Vulkan API.

Libraries:
- simdcpp submodule (see my simdcpp repo)
- jmath submodule (see my jmath repo)
- mesh (constexpr generation of cubes, spheres, icosahedrons subdivisions)
- atlas (1D lines and 2D rectangles cutting)
- jlib submodule (see my jlib repo)
- jrf submodule (see my jrf repo)
- vkw (Vulkan API C++ wrapper)
Modules:
- compute (run compute shaders on gpu)
- graphics (draw models with clustered forward rendering and onscreen text)
- resource manager (load meshes, models, textures, scene data from
files and create related objects in graphics module)

----> INSTALLING:

To download all the parts of this framework it's enough to launch
git clone with recursive flag:

$ git clone —recursive ssh://rocketgit@ssh.rocketgit.com/user/Jackalope/jen

After this look at git tags:

$ git tag

It is recommended to use a tagged version instead of the latest commit,
because the first commit after the tagged one mostly includes incompatible
parts of future changes for the next version.

$ git checkout v0.1.0

----> DEPENDENCIES:

To use JEN as CMake subdirectory and successfully build programs with it
you need to make sure you have all of its dependencies:
- compiler: Clang or GCC, support for C++17. Clang 10+ or GCC 9+ is recommended,
compiling on Windows OS is tricky and requires something like MinGW with MSYS,
there are also some complications to go through to make dependencies work;
- GLFW3 library, supported version is 3.2.1;
- FreeType library, if graphics module will be used;
- Vulkan API headers, and optional validation layers to debug sneaky problems,
you also need Vulkan support in your graphics driver to run compiled programs;
- LibZip can be necessary, if JRF is used to read zip files;
- CMake, for obvious reasons;
- glslangValidator to compile shader for the graphics module.

CMake must be able to find GLFW3, Vulkan and FreeType (for graphics)
with find_package().

----> HOW TO USE IT:

To use JEN, you need to add it as a subdirectory:

add_subdirecroty(${PATH_TO_JEN})

There are several configuration options:
- JEN_MODULE_COMPUTE - turn compute module on for compiling and including;
- JEN_MODULE_GRAPHICS - turn graphics module on ...;
- JEN_MULTITHREADED_DRAW_FRAME - draw_frame function will use thread pool queue
instead of linear executing;
- JEN_MODULE_RESOURCE_MANAGER - resource manager module ON, if graphics is ON;
- JEN_VLK_VALIDATION - enable Vulkan Validation Layers to debug some errors
related to JEN. This will often produce false-positive,
as well as true-positive errors.

Look in CMakeLists.txt at JenExamples repo for details on how to use and
configure JEN automatically:

$ git clone ssh://rocketgit@ssh.rocketgit.com/user/Jackalope/JenExamples

Also I recommend to compile and run examples to make sure it works correctly.

----> SUPPORTED HARDWARE:

JEN has not been tested well, because it requires running it on large amount of
different hardware to do so. It must work with mesa driver and modern
Intel i965 GPUs as well as AMD GPUs.


----> DOCUMENTATION:

You can generate Doxygen documentation, to do so
turn on any of JEN_DOXYGEN_* options and run documentation target in cmake:

$ cmake -G %1 -DJEN_DOXYGEN_HTML=ON -DJEN_DOXYGEN_LATEX=ON
$ cmake —build —target documentation

Resource manager is not documented because it still requires large enhancements.
List of commits:
Subject Hash Author Date (UTC)
get size of vkFormat pixel function 41e309467955bc2e1361a1f9689367f961040bf7 Jackalope 2020-05-04 17:48:08
vkw image to buffer copy 57234d0007df737094aef5b6bab4177ca39bb347 Jackalope 2020-05-04 17:47:08
added flag to wait events instead of polling for interactive apps b9cfe8faa84e5bfc00aa842b16819b28f5e2be10 Jackalope 2020-05-04 17:45:34
added compute info validation 7cd15af2afd064302703eccd1094f4353da35c4f Jackalope 2020-04-26 08:05:18
fixed uninitialized value 8313a622987f51e74b068231cddde3ff34a93625 Jackalope 2020-04-26 08:04:48
disable checking present support when graphics module not loaded b2ff208cef191444cd995c40989c6b9414c1fb9f Jackalope 2020-04-26 02:35:19
added debug extension loading when graphics module is disabled 54bc7c5eff1353559ec29e560a4095cfa9ef33d8 Jackalope 2020-04-26 02:32:45
Noise library: removed excess commentary lines 6b518ad33508161bd0cc8790eb13f4d03d827acc TheArtOfGriefing 2020-04-23 20:56:55
Noise library: added forgotten hash function use in gradient computation. bfce031f8de0410107aaf33009b46e455acd5095 TheArtOfGriefing 2020-04-23 18:40:05
Noise library update: +6 hash functions +1D,2D,3D,4D highly optimized simplex noise +1D,2D,3D,4D white noise 731cba496cf3c253ad365355faae9df45e1e714e TheArtOfGriefing 2020-04-23 17:37:19
simd library moved to simdcpp submodule, also updates to match new version 36fa65052847fbb258e0ceaf2a2c3fab40e5c3a7 Jackalope 2020-04-21 23:19:24
jlib update d7d711f8b289b2a84e58c66d20c0871c21d17350 Jackalope 2020-04-15 09:54:57
hiding clang-10 new warnings 6d3a1a1dbc928d9ed75024848f06f541d55e1580 Jackalope 2020-04-15 09:54:39
vkw new Vulkan API result values 0eed6a08e659a2e58ed35d9870022d235f0d87d4 Jackalope 2020-04-15 09:54:04
removed temporary fence, validation layers still complaining ba2b7277f0db6e549e68619f8f61ecc50066343d Jackalope 2020-04-15 09:41:02
device queues had incorrect orders in memory layout 28bf6b0e793ae988c390571baa5e8654200f6b42 Jackalope 2020-04-15 07:10:19
updated new vulkan enum names a7f4e2fdd01884df5469abda3520ca3901a44532 Jackalope 2020-04-15 07:09:55
fix gradient values in simplex noise 75ee283d9f06b69936c9db3d1eabe5c876b418cf Jackalope 2020-04-03 04:00:15
conditional device queues loading based on ModulesMask 952bb3a4d1ae3c867309b136543bbc7a072684bb Jackalope 2020-04-02 02:44:36
fixed issue when gpu_transfer is sleeping while jobs queued 7af01807ffbc1ffae785745378f832303bcf79dc Jackalope 2020-03-31 07:40:10
Commit 41e309467955bc2e1361a1f9689367f961040bf7 - get size of vkFormat pixel function
Author: Jackalope
Author date (UTC): 2020-05-04 17:48
Committer name: Jackalope
Committer date (UTC): 2020-05-04 17:48
Parent(s): 57234d0007df737094aef5b6bab4177ca39bb347
Signer:
Signing key:
Signing status: N
Tree: b74d772b8fef273ceb0174f3d8b5db11fd0f8d9d
File Lines added Lines deleted
libs/vkw/include/vkw/typedefs.h 139 0
File libs/vkw/include/vkw/typedefs.h changed (mode: 100644) (index 18682e8..be9cc31)
... ... namespace vkw
541 541 }; };
542 542
543 543 using BindNo = uint32_t; using BindNo = uint32_t;
544
545
546 constexpr uint32_t format_size(VkFormat f) {
547 uint32_t s = 0;
548 switch(f) {
549 default: break;
550 case VK_FORMAT_R4G4_UNORM_PACK8: s = 1; break;
551 case VK_FORMAT_R4G4B4A4_UNORM_PACK16: s = 2; break;
552 case VK_FORMAT_B4G4R4A4_UNORM_PACK16: s = 2; break;
553 case VK_FORMAT_R5G6B5_UNORM_PACK16: s = 2; break;
554 case VK_FORMAT_B5G6R5_UNORM_PACK16: s = 2; break;
555 case VK_FORMAT_R5G5B5A1_UNORM_PACK16: s = 2; break;
556 case VK_FORMAT_B5G5R5A1_UNORM_PACK16: s = 2; break;
557 case VK_FORMAT_A1R5G5B5_UNORM_PACK16: s = 2; break;
558 case VK_FORMAT_R8_UNORM: s = 1; break;
559 case VK_FORMAT_R8_SNORM: s = 1; break;
560 case VK_FORMAT_R8_USCALED: s = 1; break;
561 case VK_FORMAT_R8_SSCALED: s = 1; break;
562 case VK_FORMAT_R8_UINT: s = 1; break;
563 case VK_FORMAT_R8_SINT: s = 1; break;
564 case VK_FORMAT_R8_SRGB: s = 1; break;
565 case VK_FORMAT_R8G8_UNORM: s = 2; break;
566 case VK_FORMAT_R8G8_SNORM: s = 2; break;
567 case VK_FORMAT_R8G8_USCALED: s = 2; break;
568 case VK_FORMAT_R8G8_SSCALED: s = 2; break;
569 case VK_FORMAT_R8G8_UINT: s = 2; break;
570 case VK_FORMAT_R8G8_SINT: s = 2; break;
571 case VK_FORMAT_R8G8_SRGB: s = 2; break;
572 case VK_FORMAT_R8G8B8_UNORM: s = 3; break;
573 case VK_FORMAT_R8G8B8_SNORM: s = 3; break;
574 case VK_FORMAT_R8G8B8_USCALED: s = 3; break;
575 case VK_FORMAT_R8G8B8_SSCALED: s = 3; break;
576 case VK_FORMAT_R8G8B8_UINT: s = 3; break;
577 case VK_FORMAT_R8G8B8_SINT: s = 3; break;
578 case VK_FORMAT_R8G8B8_SRGB: s = 3; break;
579 case VK_FORMAT_B8G8R8_UNORM: s = 3; break;
580 case VK_FORMAT_B8G8R8_SNORM: s = 3; break;
581 case VK_FORMAT_B8G8R8_USCALED: s = 3; break;
582 case VK_FORMAT_B8G8R8_SSCALED: s = 3; break;
583 case VK_FORMAT_B8G8R8_UINT: s = 3; break;
584 case VK_FORMAT_B8G8R8_SINT: s = 3; break;
585 case VK_FORMAT_B8G8R8_SRGB: s = 3; break;
586 case VK_FORMAT_R8G8B8A8_UNORM: s = 4; break;
587 case VK_FORMAT_R8G8B8A8_SNORM: s = 4; break;
588 case VK_FORMAT_R8G8B8A8_USCALED: s = 4; break;
589 case VK_FORMAT_R8G8B8A8_SSCALED: s = 4; break;
590 case VK_FORMAT_R8G8B8A8_UINT: s = 4; break;
591 case VK_FORMAT_R8G8B8A8_SINT: s = 4; break;
592 case VK_FORMAT_R8G8B8A8_SRGB: s = 4; break;
593 case VK_FORMAT_B8G8R8A8_UNORM: s = 4; break;
594 case VK_FORMAT_B8G8R8A8_SNORM: s = 4; break;
595 case VK_FORMAT_B8G8R8A8_USCALED: s = 4; break;
596 case VK_FORMAT_B8G8R8A8_SSCALED: s = 4; break;
597 case VK_FORMAT_B8G8R8A8_UINT: s = 4; break;
598 case VK_FORMAT_B8G8R8A8_SINT: s = 4; break;
599 case VK_FORMAT_B8G8R8A8_SRGB: s = 4; break;
600 case VK_FORMAT_A8B8G8R8_UNORM_PACK32: s = 4; break;
601 case VK_FORMAT_A8B8G8R8_SNORM_PACK32: s = 4; break;
602 case VK_FORMAT_A8B8G8R8_USCALED_PACK32: s = 4; break;
603 case VK_FORMAT_A8B8G8R8_SSCALED_PACK32: s = 4; break;
604 case VK_FORMAT_A8B8G8R8_UINT_PACK32: s = 4; break;
605 case VK_FORMAT_A8B8G8R8_SINT_PACK32: s = 4; break;
606 case VK_FORMAT_A8B8G8R8_SRGB_PACK32: s = 4; break;
607 case VK_FORMAT_A2R10G10B10_UNORM_PACK32: s = 4; break;
608 case VK_FORMAT_A2R10G10B10_SNORM_PACK32: s = 4; break;
609 case VK_FORMAT_A2R10G10B10_USCALED_PACK32: s = 4; break;
610 case VK_FORMAT_A2R10G10B10_SSCALED_PACK32: s = 4; break;
611 case VK_FORMAT_A2R10G10B10_UINT_PACK32: s = 4; break;
612 case VK_FORMAT_A2R10G10B10_SINT_PACK32: s = 4; break;
613 case VK_FORMAT_A2B10G10R10_UNORM_PACK32: s = 4; break;
614 case VK_FORMAT_A2B10G10R10_SNORM_PACK32: s = 4; break;
615 case VK_FORMAT_A2B10G10R10_USCALED_PACK32: s = 4; break;
616 case VK_FORMAT_A2B10G10R10_SSCALED_PACK32: s = 4; break;
617 case VK_FORMAT_A2B10G10R10_UINT_PACK32: s = 4; break;
618 case VK_FORMAT_A2B10G10R10_SINT_PACK32: s = 4; break;
619 case VK_FORMAT_R16_UNORM: s = 2; break;
620 case VK_FORMAT_R16_SNORM: s = 2; break;
621 case VK_FORMAT_R16_USCALED: s = 2; break;
622 case VK_FORMAT_R16_SSCALED: s = 2; break;
623 case VK_FORMAT_R16_UINT: s = 2; break;
624 case VK_FORMAT_R16_SINT: s = 2; break;
625 case VK_FORMAT_R16_SFLOAT: s = 2; break;
626 case VK_FORMAT_R16G16_UNORM: s = 4; break;
627 case VK_FORMAT_R16G16_SNORM: s = 4; break;
628 case VK_FORMAT_R16G16_USCALED: s = 4; break;
629 case VK_FORMAT_R16G16_SSCALED: s = 4; break;
630 case VK_FORMAT_R16G16_UINT: s = 4; break;
631 case VK_FORMAT_R16G16_SINT: s = 4; break;
632 case VK_FORMAT_R16G16_SFLOAT: s = 4; break;
633 case VK_FORMAT_R16G16B16_UNORM: s = 6; break;
634 case VK_FORMAT_R16G16B16_SNORM: s = 6; break;
635 case VK_FORMAT_R16G16B16_USCALED: s = 6; break;
636 case VK_FORMAT_R16G16B16_SSCALED: s = 6; break;
637 case VK_FORMAT_R16G16B16_UINT: s = 6; break;
638 case VK_FORMAT_R16G16B16_SINT: s = 6; break;
639 case VK_FORMAT_R16G16B16_SFLOAT: s = 6; break;
640 case VK_FORMAT_R16G16B16A16_UNORM: s = 8; break;
641 case VK_FORMAT_R16G16B16A16_SNORM: s = 8; break;
642 case VK_FORMAT_R16G16B16A16_USCALED: s = 8; break;
643 case VK_FORMAT_R16G16B16A16_SSCALED: s = 8; break;
644 case VK_FORMAT_R16G16B16A16_UINT: s = 8; break;
645 case VK_FORMAT_R16G16B16A16_SINT: s = 8; break;
646 case VK_FORMAT_R16G16B16A16_SFLOAT: s = 8; break;
647 case VK_FORMAT_R32_UINT: s = 4; break;
648 case VK_FORMAT_R32_SINT: s = 4; break;
649 case VK_FORMAT_R32_SFLOAT: s = 4; break;
650 case VK_FORMAT_R32G32_UINT: s = 8; break;
651 case VK_FORMAT_R32G32_SINT: s = 8; break;
652 case VK_FORMAT_R32G32_SFLOAT: s = 8; break;
653 case VK_FORMAT_R32G32B32_UINT: s = 12; break;
654 case VK_FORMAT_R32G32B32_SINT: s = 12; break;
655 case VK_FORMAT_R32G32B32_SFLOAT: s = 12; break;
656 case VK_FORMAT_R32G32B32A32_UINT: s = 16; break;
657 case VK_FORMAT_R32G32B32A32_SINT: s = 16; break;
658 case VK_FORMAT_R32G32B32A32_SFLOAT: s = 16; break;
659 case VK_FORMAT_R64_UINT: s = 8; break;
660 case VK_FORMAT_R64_SINT: s = 8; break;
661 case VK_FORMAT_R64_SFLOAT: s = 8; break;
662 case VK_FORMAT_R64G64_UINT: s = 16; break;
663 case VK_FORMAT_R64G64_SINT: s = 16; break;
664 case VK_FORMAT_R64G64_SFLOAT: s = 16; break;
665 case VK_FORMAT_R64G64B64_UINT: s = 24; break;
666 case VK_FORMAT_R64G64B64_SINT: s = 24; break;
667 case VK_FORMAT_R64G64B64_SFLOAT: s = 24; break;
668 case VK_FORMAT_R64G64B64A64_UINT: s = 32; break;
669 case VK_FORMAT_R64G64B64A64_SINT: s = 32; break;
670 case VK_FORMAT_R64G64B64A64_SFLOAT: s = 32; break;
671 case VK_FORMAT_B10G11R11_UFLOAT_PACK32: s = 4; break;
672 case VK_FORMAT_E5B9G9R9_UFLOAT_PACK32: s = 4; break;
673 case VK_FORMAT_D16_UNORM: s = 2; break;
674 case VK_FORMAT_X8_D24_UNORM_PACK32: s = 4; break;
675 case VK_FORMAT_D32_SFLOAT: s = 4; break;
676 case VK_FORMAT_S8_UINT: s = 1; break;
677 case VK_FORMAT_D16_UNORM_S8_UINT: s = 3; break;
678 case VK_FORMAT_D24_UNORM_S8_UINT: s = 4; break;
679 case VK_FORMAT_D32_SFLOAT_S8_UINT: s = 5; break;
680 }
681 return s;
682 };
544 683 } }
Hints:
Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://rocketgit.com/user/Jackalope/jen

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@ssh.rocketgit.com/user/Jackalope/jen

Clone this repository using git:
git clone git://git.rocketgit.com/user/Jackalope/jen

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a merge request:
... clone the repository ...
... make some changes and some commits ...
git push origin main