@@ -1573,12 +1573,6 @@ RDD::TextureID RenderingDeviceDriverD3D12::texture_create(const TextureFormat &p
15731573 tex_info->view_descs .srv = srv_desc;
15741574 tex_info->view_descs .uav = uav_desc;
15751575
1576- if (!barrier_capabilities.enhanced_barriers_supported && (p_format.usage_bits & (TEXTURE_USAGE_STORAGE_BIT | TEXTURE_USAGE_COLOR_ATTACHMENT_BIT))) {
1577- // Fallback to clear resources when they're first used in a uniform set. Not necessary if enhanced barriers
1578- // are supported, as the discard flag will be used instead when transitioning from an undefined layout.
1579- textures_pending_clear.add (&tex_info->pending_clear );
1580- }
1581-
15821576 return TextureID (tex_info);
15831577}
15841578
@@ -3055,7 +3049,7 @@ D3D12_UNORDERED_ACCESS_VIEW_DESC RenderingDeviceDriverD3D12::_make_ranged_uav_fo
30553049 } break ;
30563050 case D3D12_UAV_DIMENSION_TEXTURE3D: {
30573051 uav_desc.Texture3D .MipSlice = mip;
3058- uav_desc.Texture3D .WSize >>= p_mipmap_offset;
3052+ uav_desc.Texture3D .WSize = MAX (uav_desc. Texture3D . WSize >> p_mipmap_offset, 1U ) ;
30593053 } break ;
30603054 default :
30613055 break ;
@@ -3643,21 +3637,6 @@ void RenderingDeviceDriverD3D12::command_uniform_set_prepare_for_use(CommandBuff
36433637 return ;
36443638 }
36453639
3646- // Perform pending blackouts.
3647- {
3648- SelfList<TextureInfo> *E = textures_pending_clear.first ();
3649- while (E) {
3650- TextureSubresourceRange subresources;
3651- subresources.layer_count = E->self ()->layers ;
3652- subresources.mipmap_count = E->self ()->mipmaps ;
3653- command_clear_color_texture (p_cmd_buffer, TextureID (E->self ()), TEXTURE_LAYOUT_UNDEFINED, Color (), subresources);
3654-
3655- SelfList<TextureInfo> *next = E->next ();
3656- E->remove_from_list ();
3657- E = next;
3658- }
3659- }
3660-
36613640 CommandBufferInfo *cmd_buf_info = (CommandBufferInfo *)p_cmd_buffer.id ;
36623641 const UniformSetInfo *uniform_set_info = (const UniformSetInfo *)p_uniform_set.id ;
36633642 const ShaderInfo *shader_info_in = (const ShaderInfo *)p_shader.id ;
@@ -4571,8 +4550,7 @@ void RenderingDeviceDriverD3D12::command_begin_render_pass(CommandBufferID p_cmd
45714550 p_rect.position .y ,
45724551 p_rect.position .x + p_rect.size .x ,
45734552 p_rect.position .y + p_rect.size .y );
4574- cmd_buf_info->render_pass_state .region_is_all = !(
4575- cmd_buf_info->render_pass_state .region_rect .left == 0 &&
4553+ cmd_buf_info->render_pass_state .region_is_all = (cmd_buf_info->render_pass_state .region_rect .left == 0 &&
45764554 cmd_buf_info->render_pass_state .region_rect .top == 0 &&
45774555 cmd_buf_info->render_pass_state .region_rect .right == fb_info->size .x &&
45784556 cmd_buf_info->render_pass_state .region_rect .bottom == fb_info->size .y );
@@ -4616,7 +4594,6 @@ void RenderingDeviceDriverD3D12::command_begin_render_pass(CommandBufferID p_cmd
46164594 if (pass_info->attachments [i].load_op == ATTACHMENT_LOAD_OP_CLEAR) {
46174595 clear.aspect .set_flag (TEXTURE_ASPECT_COLOR_BIT);
46184596 clear.color_attachment = i;
4619- tex_info->pending_clear .remove_from_list ();
46204597 }
46214598 } else if ((tex_info->desc .Flags & D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL)) {
46224599 if (pass_info->attachments [i].load_op == ATTACHMENT_LOAD_OP_CLEAR) {
@@ -5799,6 +5776,8 @@ uint64_t RenderingDeviceDriverD3D12::api_trait_get(ApiTrait p_trait) {
57995776 return true ;
58005777 case API_TRAIT_BUFFERS_REQUIRE_TRANSITIONS:
58015778 return !barrier_capabilities.enhanced_barriers_supported ;
5779+ case API_TRAIT_TEXTURE_OUTPUTS_REQUIRE_CLEARS:
5780+ return true ;
58025781 default :
58035782 return RenderingDeviceDriver::api_trait_get (p_trait);
58045783 }
@@ -5807,7 +5786,7 @@ uint64_t RenderingDeviceDriverD3D12::api_trait_get(ApiTrait p_trait) {
58075786bool RenderingDeviceDriverD3D12::has_feature (Features p_feature) {
58085787 switch (p_feature) {
58095788 case SUPPORTS_HALF_FLOAT:
5810- return shader_capabilities.native_16bit_ops && storage_buffer_capabilities. storage_buffer_16_bit_access_is_supported ;
5789+ return shader_capabilities.native_16bit_ops ;
58115790 case SUPPORTS_FRAGMENT_SHADER_WITH_ONLY_SIDE_EFFECTS:
58125791 return true ;
58135792 case SUPPORTS_BUFFER_DEVICE_ADDRESS:
@@ -6037,7 +6016,6 @@ Error RenderingDeviceDriverD3D12::_check_capabilities() {
60376016 subgroup_capabilities.wave_ops_supported = false ;
60386017 shader_capabilities.shader_model = (D3D_SHADER_MODEL)0 ;
60396018 shader_capabilities.native_16bit_ops = false ;
6040- storage_buffer_capabilities.storage_buffer_16_bit_access_is_supported = false ;
60416019 format_capabilities.relaxed_casting_supported = false ;
60426020
60436021 {
@@ -6078,9 +6056,8 @@ Error RenderingDeviceDriverD3D12::_check_capabilities() {
60786056
60796057 D3D12_FEATURE_DATA_D3D12_OPTIONS options = {};
60806058 res = device->CheckFeatureSupport (D3D12_FEATURE_D3D12_OPTIONS, &options, sizeof (options));
6081- if (SUCCEEDED (res)) {
6082- storage_buffer_capabilities.storage_buffer_16_bit_access_is_supported = options.TypedUAVLoadAdditionalFormats ;
6083- }
6059+ ERR_FAIL_COND_V_MSG (!SUCCEEDED (res), ERR_UNAVAILABLE, " CheckFeatureSupport failed with error " + vformat (" 0x%08ux" , (uint64_t )res) + " ." );
6060+ ERR_FAIL_COND_V_MSG (!options.TypedUAVLoadAdditionalFormats , ERR_UNAVAILABLE, " No support for Typed UAV Load Additional Formats has been found." );
60846061
60856062 D3D12_FEATURE_DATA_D3D12_OPTIONS1 options1 = {};
60866063 res = device->CheckFeatureSupport (D3D12_FEATURE_D3D12_OPTIONS1, &options1, sizeof (options1));
0 commit comments