| 2827 | } |
| 2828 | |
| 2829 | static void create_layout(GraphicContext* gctx, int storage_buffers_num, int textures2d_sampled_num, int textures2d_storage_num, |
| 2830 | int samplers_num, int gds_buffers_num, VkShaderStageFlags stage, VkDescriptorSetLayout* dst) |
| 2831 | { |
| 2832 | uint32_t binding_num = 0; |
| 2833 | |
| 2834 | ShaderBindResources tmp {}; |
| 2835 | tmp.storage_buffers.buffers_num = storage_buffers_num; |
| 2836 | tmp.textures2D.textures_num = textures2d_sampled_num + textures2d_storage_num; |
| 2837 | tmp.samplers.samplers_num = samplers_num; |
| 2838 | tmp.gds_pointers.pointers_num = gds_buffers_num; |
| 2839 | |
| 2840 | ShaderCalcBindingIndices(&tmp); |
| 2841 | |
| 2842 | constexpr uint32_t B_MAX = 5; |
| 2843 | |
| 2844 | VkDescriptorSetLayoutBinding ubo_layout_binding[B_MAX] = {}; |
| 2845 | |
| 2846 | if (storage_buffers_num > 0) |
| 2847 | { |
| 2848 | EXIT_IF(binding_num >= B_MAX); |
| 2849 | ubo_layout_binding[binding_num].binding = tmp.storage_buffers.binding_index; |
| 2850 | ubo_layout_binding[binding_num].descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER; |
| 2851 | ubo_layout_binding[binding_num].descriptorCount = storage_buffers_num; |
| 2852 | ubo_layout_binding[binding_num].stageFlags = stage; |
| 2853 | ubo_layout_binding[binding_num].pImmutableSamplers = nullptr; |
| 2854 | binding_num++; |
| 2855 | } |
| 2856 | |
| 2857 | if (textures2d_sampled_num > 0) |
| 2858 | { |
| 2859 | EXIT_IF(binding_num >= B_MAX); |
| 2860 | ubo_layout_binding[binding_num].binding = tmp.textures2D.binding_sampled_index; |
| 2861 | ubo_layout_binding[binding_num].descriptorType = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE; |
| 2862 | ubo_layout_binding[binding_num].descriptorCount = textures2d_sampled_num; |
| 2863 | ubo_layout_binding[binding_num].stageFlags = stage; |
| 2864 | ubo_layout_binding[binding_num].pImmutableSamplers = nullptr; |
| 2865 | binding_num++; |
| 2866 | } |
| 2867 | |
| 2868 | if (textures2d_storage_num > 0) |
| 2869 | { |
| 2870 | EXIT_IF(binding_num >= B_MAX); |
| 2871 | ubo_layout_binding[binding_num].binding = tmp.textures2D.binding_storage_index; |
| 2872 | ubo_layout_binding[binding_num].descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE; |
| 2873 | ubo_layout_binding[binding_num].descriptorCount = textures2d_storage_num; |
| 2874 | ubo_layout_binding[binding_num].stageFlags = stage; |
| 2875 | ubo_layout_binding[binding_num].pImmutableSamplers = nullptr; |
| 2876 | binding_num++; |
| 2877 | } |
| 2878 | |
| 2879 | if (samplers_num > 0) |
| 2880 | { |
| 2881 | EXIT_IF(binding_num >= B_MAX); |
| 2882 | ubo_layout_binding[binding_num].binding = tmp.samplers.binding_index; |
| 2883 | ubo_layout_binding[binding_num].descriptorType = VK_DESCRIPTOR_TYPE_SAMPLER; |
| 2884 | ubo_layout_binding[binding_num].descriptorCount = samplers_num; |
| 2885 | ubo_layout_binding[binding_num].stageFlags = stage; |
| 2886 | ubo_layout_binding[binding_num].pImmutableSamplers = nullptr; |
no test coverage detected