You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-04 12:00:25 +00:00
Renderer: Move reflect_spirv to RenderingShaderContainer
This change introduces a new protected type, `ReflectedShaderStage` to `RenderingShaderContainer` that derived types use to access SPIR-V and the reflected module, `SpvReflectShaderModule` allowing implementations to use the reflection information to compile their platform-specific module. * Fixes memory leak in `reflect_spirv` that would not deallocate the `SpvReflectShaderModule` if an error occurred. * Removes unnecessary allocation when creating `SpvReflectShaderModule` by passing `NO_COPY` flag to `spvReflectCreateShaderModule2` constructor function. * Replaces `VectorView` with `Span` for consistency * Fixes unnecessary allocations in D3D12 shader container in `_convert_spirv_to_nir` and `_convert_spirv_to_dxil` which implicitly converted the old `VectorView` to a `Vector`
This commit is contained in:
@@ -428,15 +428,10 @@ void ShaderBakerExportPlugin::_process_work_item(WorkItem p_work_item) {
|
||||
Vector<RD::ShaderStageSPIRVData> spirv_data = ShaderRD::compile_stages(p_work_item.stage_sources);
|
||||
ERR_FAIL_COND_MSG(spirv_data.is_empty(), "Unable to retrieve SPIR-V data for shader");
|
||||
|
||||
RD::ShaderReflection shader_refl;
|
||||
Error err = RenderingDeviceCommons::reflect_spirv(spirv_data, shader_refl);
|
||||
ERR_FAIL_COND_MSG(err != OK, "Unable to reflect SPIR-V data that was compiled");
|
||||
|
||||
Ref<RenderingShaderContainer> shader_container = shader_container_format->create_container();
|
||||
shader_container->set_from_shader_reflection(p_work_item.shader_name, shader_refl);
|
||||
|
||||
// Compile shader binary from SPIR-V.
|
||||
bool code_compiled = shader_container->set_code_from_spirv(spirv_data);
|
||||
bool code_compiled = shader_container->set_code_from_spirv(p_work_item.shader_name, spirv_data);
|
||||
ERR_FAIL_COND_MSG(!code_compiled, vformat("Failed to compile code to native for SPIR-V."));
|
||||
|
||||
PackedByteArray shader_bytes = shader_container->to_bytes();
|
||||
|
||||
Reference in New Issue
Block a user