Skip to content

Commit cada249

Browse files
committed
D3D12: Fix shader model check, initialization error handling
1 parent 037956d commit cada249

File tree

2 files changed

+9
-7
lines changed

2 files changed

+9
-7
lines changed

drivers/d3d12/rendering_device_driver_d3d12.cpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5819,8 +5819,7 @@ Error RenderingDeviceDriverD3D12::_check_capabilities() {
58195819
D3D_SHADER_MODEL_6_4,
58205820
D3D_SHADER_MODEL_6_3,
58215821
D3D_SHADER_MODEL_6_2,
5822-
D3D_SHADER_MODEL_6_1,
5823-
D3D_SHADER_MODEL_6_0, // Determined by NIR (dxil_min_shader_model).
5822+
D3D_SHADER_MODEL_6_1, // Reported by users to be minimum (previously was determined by NIR (dxil_min_shader_model)).
58245823
};
58255824

58265825
D3D12_FEATURE_DATA_SHADER_MODEL shader_model = {};
@@ -5839,7 +5838,7 @@ Error RenderingDeviceDriverD3D12::_check_capabilities() {
58395838

58405839
#define D3D_SHADER_MODEL_TO_STRING(m_sm) vformat("%d.%d", (m_sm >> 4), (m_sm & 0xf))
58415840

5842-
ERR_FAIL_COND_V_MSG(!shader_capabilities.shader_model, ERR_UNAVAILABLE,
5841+
ERR_FAIL_COND_V_MSG(shader_capabilities.shader_model < SMS_TO_CHECK[ARRAY_SIZE(SMS_TO_CHECK) - 1], ERR_UNAVAILABLE,
58435842
vformat("No support for any of the suitable shader models (%s-%s) has been found.", D3D_SHADER_MODEL_TO_STRING(SMS_TO_CHECK[ARRAY_SIZE(SMS_TO_CHECK) - 1]), D3D_SHADER_MODEL_TO_STRING(SMS_TO_CHECK[0])));
58445843

58455844
print_verbose("- Shader:");
@@ -6058,6 +6057,8 @@ Error RenderingDeviceDriverD3D12::_initialize_command_signatures() {
60586057
}
60596058

60606059
Error RenderingDeviceDriverD3D12::initialize(uint32_t p_device_index, uint32_t p_frame_count) {
6060+
glsl_type_singleton_init_or_ref();
6061+
60616062
context_device = context_driver->device_get(p_device_index);
60626063
adapter = context_driver->create_adapter(p_device_index);
60636064
ERR_FAIL_NULL_V(adapter, ERR_CANT_CREATE);
@@ -6087,7 +6088,5 @@ Error RenderingDeviceDriverD3D12::initialize(uint32_t p_device_index, uint32_t p
60876088
err = _initialize_command_signatures();
60886089
ERR_FAIL_COND_V(err != OK, ERR_CANT_CREATE);
60896090

6090-
glsl_type_singleton_init_or_ref();
6091-
60926091
return OK;
60936092
}

servers/rendering/rendering_device.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6688,7 +6688,6 @@ Error RenderingDevice::initialize(RenderingContextDriver *p_context, DisplayServ
66886688
}
66896689

66906690
frame = 0;
6691-
frames.resize(frame_count);
66926691
max_timestamp_query_elements = GLOBAL_GET("debug/settings/profiler/max_timestamp_query_elements");
66936692

66946693
device = context->device_get(device_index);
@@ -6757,6 +6756,8 @@ Error RenderingDevice::initialize(RenderingContextDriver *p_context, DisplayServ
67576756
// Use the processor count as the max amount of transfer workers that can be created.
67586757
transfer_worker_pool_max_size = OS::get_singleton()->get_processor_count();
67596758

6759+
frames.resize(frame_count);
6760+
67606761
// Create data for all the frames.
67616762
for (uint32_t i = 0; i < frames.size(); i++) {
67626763
frames[i].index = 0;
@@ -7144,7 +7145,9 @@ void RenderingDevice::finalize() {
71447145
_wait_for_transfer_workers();
71457146

71467147
// Delete everything the graph has created.
7147-
draw_graph.finalize();
7148+
if (!frames.is_empty()) {
7149+
draw_graph.finalize();
7150+
}
71487151

71497152
// Free all resources.
71507153
_free_rids(render_pipeline_owner, "Pipeline");

0 commit comments

Comments
 (0)