소스 검색

Fix crash in RenderingDeviceVulkan::shader_create

This commit moves the declaration of a local variable to ensure its
scope survives long enough; at least in some versions of GCC and LLVM
the associated memory was freed too early and thus caused issues ranging
from black screens to crashes.
rsjtdrjgfuzkfg 4 년 전
부모
커밋
b1f95e150e
1개의 변경된 파일3개의 추가작업 그리고 1개의 파일을 삭제
  1. 3 1
      drivers/vulkan/rendering_device_vulkan.cpp

+ 3 - 1
drivers/vulkan/rendering_device_vulkan.cpp

@@ -4312,8 +4312,10 @@ RID RenderingDeviceVulkan::shader_create(const Vector<ShaderStageData> &p_stages
 		}
 
 		pipeline_layout_create_info.pSetLayouts = layouts.ptr();
+		// Needs to be declared in this outer scope, otherwise it may not outlive its assignment
+		// to pipeline_layout_create_info.
+		VkPushConstantRange push_constant_range;
 		if (push_constant.push_constant_size) {
-			VkPushConstantRange push_constant_range;
 			push_constant_range.stageFlags = push_constant.push_constants_vk_stage;
 			push_constant_range.offset = 0;
 			push_constant_range.size = push_constant.push_constant_size;