| 77 | }; |
| 78 | |
| 79 | bool ShaderProgress::do_in_background() |
| 80 | { |
| 81 | SkrZoneScopedN("CreateShader"); |
| 82 | |
| 83 | auto device = factory->root.device; |
| 84 | auto& shader = factory->mShaderMap[identifier]; |
| 85 | |
| 86 | skr_atomicu32_store_relaxed(&shader->shader_status, SKR_SHADER_MAP_SHADER_STATUS_LOADED); |
| 87 | |
| 88 | auto desc = make_zeroed<CGPUShaderLibraryDescriptor>(); |
| 89 | desc.code = (const uint32_t*)blob->get_data(); |
| 90 | desc.code_size = (uint32_t)blob->get_size(); |
| 91 | desc.name = bytes_uri.u8_str(); |
| 92 | desc.stage = identifier.shader_stage; |
| 93 | const auto created_shader = cgpu_create_shader_library(device, &desc); |
| 94 | blob.reset(); |
| 95 | if (!created_shader) |
| 96 | { |
| 97 | skr_atomicu32_store_relaxed(&shader->shader_status, SKR_SHADER_MAP_SHADER_STATUS_FAILED); |
| 98 | skr_atomicu64_store_relaxed(&factory->mShaderMap[identifier]->frame, UINT64_MAX); |
| 99 | return false; |
| 100 | } |
| 101 | else |
| 102 | { |
| 103 | shader->shader = created_shader; |
| 104 | skr_atomicu32_store_relaxed(&shader->shader_status, SKR_SHADER_MAP_SHADER_STATUS_INSTALLED); |
| 105 | skr_atomicu64_store_relaxed(&factory->mShaderMap[identifier]->frame, factory->frame_index); |
| 106 | } |
| 107 | return true; |
| 108 | } |
| 109 | |
| 110 | CGPUShaderLibraryId ShaderMapImpl::find_shader(const skr_platform_shader_identifier_t& identifier) SKR_NOEXCEPT |
| 111 | { |
nothing calls this directly
no test coverage detected