| 3505 | } |
| 3506 | |
| 3507 | VkDescriptorSetLayout DescriptorCache::GetDescriptorSetLayout(Stage stage, const ShaderBindResources& bind) |
| 3508 | { |
| 3509 | int storage_buffers_num = bind.storage_buffers.buffers_num; |
| 3510 | int textures2d_sampled_num = bind.textures2D.textures2d_sampled_num; |
| 3511 | int textures2d_storage_num = bind.textures2D.textures2d_storage_num; |
| 3512 | int samplers_num = bind.samplers.samplers_num; |
| 3513 | int gds_buffers_num = bind.gds_pointers.pointers_num; |
| 3514 | |
| 3515 | EXIT_IF(storage_buffers_num < 0 || storage_buffers_num > BUFFERS_MAX); |
| 3516 | EXIT_IF(textures2d_sampled_num < 0 || textures2d_sampled_num > TEXTURES_SAMPLED_MAX); |
| 3517 | EXIT_IF(textures2d_storage_num < 0 || textures2d_storage_num > TEXTURES_STORAGE_MAX); |
| 3518 | EXIT_IF(samplers_num < 0 || samplers_num > SAMPLERS_MAX); |
| 3519 | EXIT_IF(gds_buffers_num < 0 || gds_buffers_num > GDS_BUFFER_MAX); |
| 3520 | |
| 3521 | EXIT_NOT_IMPLEMENTED(stage != Stage::Pixel && stage != Stage::Compute && |
| 3522 | (textures2d_sampled_num > 0 || textures2d_storage_num > 0 || samplers_num > 0)); |
| 3523 | |
| 3524 | Core::LockGuard lock(m_mutex); |
| 3525 | Init(); |
| 3526 | switch (stage) |
| 3527 | { |
| 3528 | case Stage::Vertex: |
| 3529 | return m_descriptor_set_layout_vertex[storage_buffers_num][textures2d_sampled_num][textures2d_storage_num][samplers_num] |
| 3530 | [gds_buffers_num]; |
| 3531 | case Stage::Pixel: |
| 3532 | return m_descriptor_set_layout_pixel[storage_buffers_num][textures2d_sampled_num][textures2d_storage_num][samplers_num] |
| 3533 | [gds_buffers_num]; |
| 3534 | case Stage::Compute: |
| 3535 | return m_descriptor_set_layout_compute[storage_buffers_num][textures2d_sampled_num][textures2d_storage_num][samplers_num] |
| 3536 | [gds_buffers_num]; |
| 3537 | default: EXIT("unknown stage\n"); |
| 3538 | } |
| 3539 | return nullptr; |
| 3540 | } |
| 3541 | |
| 3542 | void DeleteFramebuffer(VideoOutVulkanImage* image) |
| 3543 | { |