@@ -302,6 +302,7 @@ typedef struct
302302 D3D12Resource renderTargets [2 ];
303303#ifdef HAVE_DXGI_HDR
304304 d3d12_texture_t back_buffer ;
305+ DXGI_FORMAT current_rt_format ;
305306#endif
306307 D3D12_CPU_DESCRIPTOR_HANDLE desc_handles [2 ];
307308 D3D12_VIEWPORT viewport ;
@@ -359,6 +360,11 @@ typedef struct
359360 D3D12PipelineState pipe_blend ;
360361 D3D12PipelineState pipe_noblend ;
361362 D3D12PipelineState pipe_font ;
363+ #ifdef HAVE_DXGI_HDR
364+ D3D12PipelineState pipe_blend_hdr ;
365+ D3D12PipelineState pipe_noblend_hdr ;
366+ D3D12PipelineState pipe_font_hdr ;
367+ #endif
362368 D3D12Resource vbo ;
363369 D3D12_VERTEX_BUFFER_VIEW vbo_view ;
364370 int offset ;
@@ -755,8 +761,13 @@ static void d3d12_init_texture(D3D12Device device, d3d12_texture_t* texture)
755761 format_support .Support2 |= D3D12_FORMAT_SUPPORT2_UAV_TYPED_STORE ;
756762 }
757763
764+ D3D12_RESOURCE_STATES initial_state = D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE ;
765+
758766 if (texture -> desc .Flags & D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET )
767+ {
759768 format_support .Support1 |= D3D12_FORMAT_SUPPORT1_RENDER_TARGET ;
769+ initial_state = D3D12_RESOURCE_STATE_RENDER_TARGET ;
770+ }
760771
761772 texture -> desc .Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D ;
762773 texture -> desc .DepthOrArraySize = 1 ;
@@ -765,7 +776,7 @@ static void d3d12_init_texture(D3D12Device device, d3d12_texture_t* texture)
765776
766777 device -> lpVtbl -> CreateCommittedResource (
767778 device , & heap_props , D3D12_HEAP_FLAG_NONE , & texture -> desc ,
768- D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE , NULL , uuidof (ID3D12Resource ), (void * * )& texture -> handle );
779+ initial_state , NULL , uuidof (ID3D12Resource ), (void * * )& texture -> handle );
769780 }
770781
771782 {
@@ -875,6 +886,8 @@ static void d3d12_upload_texture(D3D12GraphicsCommandList cmd,
875886 {
876887 unsigned width = texture -> desc .Width >> i ;
877888 unsigned height = texture -> desc .Height >> i ;
889+ if (width == 0 ) width = 1 ;
890+ if (height == 0 ) height = 1 ;
878891 struct
879892 {
880893 uint32_t src_level ;
@@ -946,15 +959,26 @@ static void gfx_display_d3d12_blend_begin(void *data)
946959{
947960 d3d12_video_t * d3d12 = (d3d12_video_t * )data ;
948961 D3D12GraphicsCommandList cmd = d3d12 -> queue .cmd ;
949- d3d12 -> sprites .pipe = d3d12 -> sprites .pipe_blend ;
962+
963+ #ifdef HAVE_DXGI_HDR
964+ if ((d3d12 -> chain .current_rt_format == DXGI_FORMAT_R10G10B10A2_UNORM ) || (d3d12 -> chain .current_rt_format == DXGI_FORMAT_R16G16B16A16_UNORM ))
965+ d3d12 -> sprites .pipe = d3d12 -> sprites .pipe_blend_hdr ;
966+ else
967+ #endif
968+ d3d12 -> sprites .pipe = d3d12 -> sprites .pipe_blend ;
950969 cmd -> lpVtbl -> SetPipelineState (cmd , (D3D12PipelineState )d3d12 -> sprites .pipe );
951970}
952971
953972static void gfx_display_d3d12_blend_end (void * data )
954973{
955974 d3d12_video_t * d3d12 = (d3d12_video_t * )data ;
956975 D3D12GraphicsCommandList cmd = d3d12 -> queue .cmd ;
957- d3d12 -> sprites .pipe = d3d12 -> sprites .pipe_noblend ;
976+ #ifdef HAVE_DXGI_HDR
977+ if ((d3d12 -> chain .current_rt_format == DXGI_FORMAT_R10G10B10A2_UNORM ) || (d3d12 -> chain .current_rt_format == DXGI_FORMAT_R16G16B16A16_UNORM ))
978+ d3d12 -> sprites .pipe = d3d12 -> sprites .pipe_noblend_hdr ;
979+ else
980+ #endif
981+ d3d12 -> sprites .pipe = d3d12 -> sprites .pipe_noblend ;
958982 cmd -> lpVtbl -> SetPipelineState (cmd , (D3D12PipelineState )d3d12 -> sprites .pipe );
959983}
960984
@@ -1063,8 +1087,15 @@ static void gfx_display_d3d12_draw(gfx_display_ctx_draw_t *draw,
10631087
10641088 sprite ++ ;
10651089 }
1066- cmd -> lpVtbl -> SetPipelineState (cmd ,
1067- (D3D12PipelineState )d3d12 -> pipes [VIDEO_SHADER_STOCK_BLEND ]);
1090+
1091+ #ifdef HAVE_DXGI_HDR
1092+ if ((d3d12 -> chain .current_rt_format == DXGI_FORMAT_R10G10B10A2_UNORM ) || (d3d12 -> chain .current_rt_format == DXGI_FORMAT_R16G16B16A16_UNORM ))
1093+ cmd -> lpVtbl -> SetPipelineState (cmd ,
1094+ (D3D12PipelineState )d3d12 -> pipes [VIDEO_SHADER_STOCK_HDR ]);
1095+ else
1096+ #endif
1097+ cmd -> lpVtbl -> SetPipelineState (cmd ,
1098+ (D3D12PipelineState )d3d12 -> pipes [VIDEO_SHADER_STOCK_BLEND ]);
10681099 cmd -> lpVtbl -> IASetPrimitiveTopology (cmd ,
10691100 D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP );
10701101 }
@@ -1081,8 +1112,16 @@ static void gfx_display_d3d12_draw(gfx_display_ctx_draw_t *draw,
10811112 d3d12_upload_texture (cmd , texture , d3d12 );
10821113
10831114 if (vertex_count > 1 )
1084- cmd -> lpVtbl -> SetPipelineState (cmd ,
1085- (D3D12PipelineState )d3d12 -> pipes [VIDEO_SHADER_STOCK_BLEND ]);
1115+ {
1116+ #ifdef HAVE_DXGI_HDR
1117+ if ((d3d12 -> chain .current_rt_format == DXGI_FORMAT_R10G10B10A2_UNORM ) || (d3d12 -> chain .current_rt_format == DXGI_FORMAT_R16G16B16A16_UNORM ))
1118+ cmd -> lpVtbl -> SetPipelineState (cmd ,
1119+ (D3D12PipelineState )d3d12 -> pipes [VIDEO_SHADER_STOCK_HDR ]);
1120+ else
1121+ #endif
1122+ cmd -> lpVtbl -> SetPipelineState (cmd ,
1123+ (D3D12PipelineState )d3d12 -> pipes [VIDEO_SHADER_STOCK_BLEND ]);
1124+ }
10861125 else
10871126 cmd -> lpVtbl -> SetPipelineState (cmd ,
10881127 (D3D12PipelineState )d3d12 -> sprites .pipe );
@@ -1426,7 +1465,12 @@ static void d3d12_font_render_line(
14261465 if (font -> texture .dirty )
14271466 d3d12_upload_texture (cmd , & font -> texture , d3d12 );
14281467
1429- cmd -> lpVtbl -> SetPipelineState (cmd , (D3D12PipelineState )d3d12 -> sprites .pipe_font );
1468+ #ifdef HAVE_DXGI_HDR
1469+ if ((d3d12 -> chain .current_rt_format == DXGI_FORMAT_R10G10B10A2_UNORM ) || (d3d12 -> chain .current_rt_format == DXGI_FORMAT_R16G16B16A16_UNORM ))
1470+ cmd -> lpVtbl -> SetPipelineState (cmd , (D3D12PipelineState )d3d12 -> sprites .pipe_font_hdr );
1471+ else
1472+ #endif
1473+ cmd -> lpVtbl -> SetPipelineState (cmd , (D3D12PipelineState )d3d12 -> sprites .pipe_font );
14301474 cmd -> lpVtbl -> SetGraphicsRootDescriptorTable (cmd , ROOT_ID_TEXTURE_T ,
14311475 font -> texture .gpu_descriptor [0 ]);
14321476 cmd -> lpVtbl -> SetGraphicsRootDescriptorTable (cmd , ROOT_ID_SAMPLER_T ,
@@ -2257,10 +2301,7 @@ static bool d3d12_gfx_set_shader(void* data, enum rarch_shader_type type, const
22572301 d3d_compile (ps_src , 0 , _path , "main" , "ps_5_0" , & ps_code );
22582302
22592303 desc .BlendState .RenderTarget [0 ].RenderTargetWriteMask = D3D12_COLOR_WRITE_ENABLE_ALL ;
2260- if (i == d3d12 -> shader_preset -> passes - 1 )
2261- desc .RTVFormats [0 ] = DXGI_FORMAT_R8G8B8A8_UNORM ;
2262- else
2263- desc .RTVFormats [0 ] = glslang_format_to_dxgi (d3d12 -> pass [i ].semantics .format );
2304+ desc .RTVFormats [0 ] = glslang_format_to_dxgi (d3d12 -> pass [i ].semantics .format );
22642305
22652306 desc .PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE ;
22662307 desc .InputLayout .pInputElementDescs = inputElementDesc ;
@@ -2531,6 +2572,21 @@ static bool d3d12_gfx_init_pipelines(d3d12_video_t* d3d12)
25312572 d3d12_init_pipeline (
25322573 d3d12 -> device , vs_code , ps_code , gs_code , & desc , & d3d12 -> sprites .pipe_font );
25332574
2575+ #ifdef HAVE_DXGI_HDR
2576+ desc .RTVFormats [0 ] = DXGI_FORMAT_R10G10B10A2_UNORM ;
2577+
2578+ desc .BlendState .RenderTarget [0 ].BlendEnable = false;
2579+ d3d12_init_pipeline (
2580+ d3d12 -> device , vs_code , ps_code , gs_code , & desc , & d3d12 -> sprites .pipe_noblend_hdr );
2581+
2582+ desc .BlendState .RenderTarget [0 ].BlendEnable = true;
2583+ d3d12_init_pipeline (
2584+ d3d12 -> device , vs_code , ps_code , gs_code , & desc , & d3d12 -> sprites .pipe_blend_hdr );
2585+
2586+ d3d12_init_pipeline (
2587+ d3d12 -> device , vs_code , ps_code , gs_code , & desc , & d3d12 -> sprites .pipe_font_hdr );
2588+ #endif
2589+
25342590 Release (vs_code );
25352591 Release (ps_code );
25362592 Release (gs_code );
@@ -2943,7 +2999,7 @@ static bool d3d12_init_swapchain(d3d12_video_t* d3d12,
29432999 d3d12 -> chain .back_buffer .desc .Width = width ;
29443000 d3d12 -> chain .back_buffer .desc .Height = height ;
29453001 d3d12 -> chain .back_buffer .desc .Format =
2946- d3d12 -> shader_preset && d3d12 -> shader_preset -> passes ? glslang_format_to_dxgi ( d3d12 -> pass [ d3d12 -> shader_preset -> passes - 1 ]. semantics . format ) : DXGI_FORMAT_R8G8B8A8_UNORM ;
3002+ DXGI_FORMAT_R8G8B8A8_UNORM ;
29473003 d3d12 -> chain .back_buffer .desc .Flags =
29483004 D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET ;
29493005 d3d12 -> chain .back_buffer .srv_heap =
@@ -3074,7 +3130,12 @@ static void d3d12_init_descriptor_heap(D3D12Device device, d3d12_descriptor_heap
30743130{
30753131 device -> lpVtbl -> CreateDescriptorHeap (device , & out -> desc , uuidof (ID3D12DescriptorHeap ), (void * * )& out -> handle );
30763132 out -> cpu = D3D12GetCPUDescriptorHandleForHeapStart (out -> handle );
3077- out -> gpu = D3D12GetGPUDescriptorHandleForHeapStart (out -> handle );
3133+
3134+ if (out -> desc .Flags & D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE )
3135+ out -> gpu = D3D12GetGPUDescriptorHandleForHeapStart (out -> handle );
3136+ else
3137+ out -> gpu .ptr = 0 ;
3138+
30783139 out -> stride = device -> lpVtbl -> GetDescriptorHandleIncrementSize (device , out -> desc .Type );
30793140 out -> map = (bool * )calloc (out -> desc .NumDescriptors , sizeof (bool ));
30803141}
@@ -3822,6 +3883,8 @@ static bool d3d12_gfx_frame(
38223883 bool video_hdr_enable = video_info -> hdr_enable ;
38233884 DXGI_FORMAT back_buffer_format = d3d12 -> shader_preset && d3d12 -> shader_preset -> passes ? glslang_format_to_dxgi (d3d12 -> pass [d3d12 -> shader_preset -> passes - 1 ].semantics .format ) : d3d12 -> chain .formats [d3d12 -> chain .bit_depth ];
38243885 bool use_back_buffer = back_buffer_format != d3d12 -> chain .formats [d3d12 -> chain .bit_depth ]; /* this is used when presets use scale_type in their last pass */
3886+
3887+ d3d12 -> chain .current_rt_format = back_buffer_format ;
38253888#endif
38263889 D3D12GraphicsCommandList cmd = d3d12 -> queue .cmd ;
38273890
@@ -3926,7 +3989,7 @@ static bool d3d12_gfx_frame(
39263989 0 , sizeof (d3d12 -> chain .back_buffer ));
39273990 d3d12 -> chain .back_buffer .desc .Width = video_width ;
39283991 d3d12 -> chain .back_buffer .desc .Height = video_height ;
3929- d3d12 -> chain .back_buffer .desc .Format = back_buffer_format ;
3992+ d3d12 -> chain .back_buffer .desc .Format = DXGI_FORMAT_R8G8B8A8_UNORM ;
39303993 d3d12 -> chain .back_buffer .desc .Flags =
39313994 D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET ;
39323995 d3d12 -> chain .back_buffer .srv_heap = & d3d12 -> desc .srv_heap ;
@@ -4302,11 +4365,6 @@ static bool d3d12_gfx_frame(
43024365 if (d3d12 -> pass [i ].rt .handle )
43034366 {
43044367 UINT start_vertex_location = 4 ;
4305- D3D12_RESOURCE_TRANSITION (
4306- cmd ,
4307- d3d12 -> pass [i ].rt .handle ,
4308- D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE ,
4309- D3D12_RESOURCE_STATE_RENDER_TARGET );
43104368
43114369 cmd -> lpVtbl -> OMSetRenderTargets (cmd , 1 ,
43124370 & d3d12 -> pass [i ].rt .rt_view , FALSE, NULL );
@@ -4354,6 +4412,16 @@ static bool d3d12_gfx_frame(
43544412 d3d12 -> pass [i ].rt .handle ,
43554413 D3D12_RESOURCE_STATE_RENDER_TARGET ,
43564414 D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE );
4415+
4416+ /* Generate mipmaps for framebuffer if it has multiple mipmap levels */
4417+ d3d12_generate_mipmaps (cmd , & d3d12 -> pass [i ].rt , d3d12 );
4418+
4419+ D3D12_RESOURCE_TRANSITION (
4420+ cmd ,
4421+ d3d12 -> pass [i ].rt .handle ,
4422+ D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE ,
4423+ D3D12_RESOURCE_STATE_RENDER_TARGET );
4424+
43574425 texture = & d3d12 -> pass [i ].rt ;
43584426 }
43594427 else
@@ -4422,6 +4490,24 @@ static bool d3d12_gfx_frame(
44224490 d3d12 -> chain .frame_index = DXGIGetCurrentBackBufferIndex (
44234491 d3d12 -> chain .handle );
44244492
4493+ #ifdef HAVE_DXGI_HDR
4494+ /* Copy over back buffer to swap chain render targets */
4495+ if ((d3d12 -> flags & D3D12_ST_FLAG_HDR_ENABLE ) && use_back_buffer )
4496+ {
4497+ d3d12 -> chain .current_rt_format = d3d12 -> chain .back_buffer .desc .Format ;
4498+
4499+ cmd -> lpVtbl -> OMSetRenderTargets (
4500+ cmd , 1 ,
4501+ & d3d12 -> chain .back_buffer .rt_view ,
4502+ FALSE, NULL );
4503+ cmd -> lpVtbl -> ClearRenderTargetView (
4504+ cmd ,
4505+ d3d12 -> chain .back_buffer .rt_view ,
4506+ d3d12 -> chain .clearcolor ,
4507+ 0 , NULL );
4508+ }
4509+ else
4510+ #endif
44254511 {
44264512 D3D12_RESOURCE_TRANSITION (
44274513 cmd ,
@@ -4474,6 +4560,8 @@ static bool d3d12_gfx_frame(
44744560 /* Copy over back buffer to swap chain render targets */
44754561 if ((d3d12 -> flags & D3D12_ST_FLAG_HDR_ENABLE ) && use_back_buffer )
44764562 {
4563+ cmd -> lpVtbl -> SetPipelineState (cmd , d3d12 -> pipes [VIDEO_SHADER_STOCK_HDR ]);
4564+
44774565 D3D12_RESOURCE_TRANSITION (
44784566 cmd ,
44794567 d3d12 -> chain .renderTargets [d3d12 -> chain .frame_index ],
@@ -4485,18 +4573,20 @@ static bool d3d12_gfx_frame(
44854573 d3d12 -> chain .back_buffer .handle ,
44864574 D3D12_RESOURCE_STATE_RENDER_TARGET ,
44874575 D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE );
4488- cmd -> lpVtbl -> SetPipelineState (cmd , d3d12 -> pipes [VIDEO_SHADER_STOCK_HDR ]);
4576+
4577+ d3d12 -> chain .current_rt_format = back_buffer_format ;
44894578
44904579 cmd -> lpVtbl -> OMSetRenderTargets (
44914580 cmd , 1 , & d3d12 -> chain .desc_handles [d3d12 -> chain .frame_index ],
44924581 FALSE, NULL );
44934582 cmd -> lpVtbl -> ClearRenderTargetView (
44944583 cmd , d3d12 -> chain .desc_handles [d3d12 -> chain .frame_index ],
44954584 d3d12 -> chain .clearcolor , 0 , NULL );
4496-
4585+
44974586 cmd -> lpVtbl -> RSSetViewports (cmd , 1 , & d3d12 -> chain .viewport );
44984587 cmd -> lpVtbl -> RSSetScissorRects (cmd , 1 , & d3d12 -> chain .scissorRect );
44994588
4589+ cmd -> lpVtbl -> SetGraphicsRootSignature (cmd , d3d12 -> desc .rootSignature );
45004590 cmd -> lpVtbl -> SetGraphicsRootDescriptorTable (cmd , ROOT_ID_TEXTURE_T ,
45014591 d3d12 -> chain .back_buffer .gpu_descriptor [0 ]);
45024592 cmd -> lpVtbl -> SetGraphicsRootDescriptorTable (cmd , ROOT_ID_SAMPLER_T ,
@@ -4507,6 +4597,12 @@ static bool d3d12_gfx_frame(
45074597 const float prev_inverse_tonemap = d3d12 -> hdr .ubo_values .inverse_tonemap ;
45084598 const float prev_hdr10 = d3d12 -> hdr .ubo_values .hdr10 ;
45094599
4600+ d3d12 -> hdr .ubo_values .source_size .width = d3d12 -> frame .output_size .x ;
4601+ d3d12 -> hdr .ubo_values .source_size .height = d3d12 -> frame .output_size .y ;
4602+
4603+ d3d12 -> hdr .ubo_values .output_size .width = d3d12 -> frame .output_size .x ;
4604+ d3d12 -> hdr .ubo_values .output_size .height = d3d12 -> frame .output_size .y ;
4605+
45104606 d3d12 -> hdr .ubo_values .scanlines = 0.0f ;
45114607 d3d12 -> hdr .ubo_values .inverse_tonemap = 1.0f ;
45124608 d3d12 -> hdr .ubo_values .hdr10 = 1.0f ;
@@ -4531,6 +4627,15 @@ static bool d3d12_gfx_frame(
45314627 }
45324628
45334629 cmd -> lpVtbl -> DrawInstanced (cmd , 4 , 1 , 0 , 0 );
4630+
4631+ D3D12_RESOURCE_TRANSITION (
4632+ cmd ,
4633+ d3d12 -> chain .back_buffer .handle ,
4634+ D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE ,
4635+ D3D12_RESOURCE_STATE_RENDER_TARGET );
4636+
4637+ cmd -> lpVtbl -> RSSetViewports (cmd , 1 , & d3d12 -> frame .viewport );
4638+ cmd -> lpVtbl -> RSSetScissorRects (cmd , 1 , & d3d12 -> frame .scissorRect );
45344639 }
45354640#endif
45364641
@@ -4539,13 +4644,9 @@ static bool d3d12_gfx_frame(
45394644
45404645#ifdef HAVE_DXGI_HDR
45414646 if ((d3d12 -> flags & D3D12_ST_FLAG_HDR_ENABLE ) &&
4542- (d3d12 -> flags & D3D12_ST_FLAG_MENU_ENABLE ))
4647+ (( d3d12 -> flags & D3D12_ST_FLAG_MENU_ENABLE ) || ( d3d12 -> flags & D3D12_ST_FLAG_OVERLAYS_ENABLE ) ))
45434648 {
4544- D3D12_RESOURCE_TRANSITION (
4545- cmd ,
4546- d3d12 -> chain .back_buffer .handle ,
4547- D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE ,
4548- D3D12_RESOURCE_STATE_RENDER_TARGET );
4649+ d3d12 -> chain .current_rt_format = d3d12 -> chain .back_buffer .desc .Format ;
45494650
45504651 cmd -> lpVtbl -> OMSetRenderTargets (
45514652 cmd , 1 ,
@@ -4571,9 +4672,13 @@ static bool d3d12_gfx_frame(
45714672 && d3d12 -> menu .texture .handle )
45724673 {
45734674 if (d3d12 -> menu .texture .dirty )
4675+ {
45744676 d3d12_upload_texture (cmd , & d3d12 -> menu .texture ,
45754677 d3d12 );
45764678
4679+ cmd -> lpVtbl -> SetPipelineState (cmd , d3d12 -> pipes [VIDEO_SHADER_STOCK_BLEND ]);
4680+ }
4681+
45774682 cmd -> lpVtbl -> SetGraphicsRootConstantBufferView (
45784683 cmd , ROOT_ID_UBO , d3d12 -> ubo_view .BufferLocation );
45794684
@@ -4657,21 +4762,17 @@ static bool d3d12_gfx_frame(
46574762#ifdef HAVE_DXGI_HDR
46584763 /* Copy over back buffer to swap chain render targets */
46594764 if ((d3d12 -> flags & D3D12_ST_FLAG_HDR_ENABLE ) &&
4660- (d3d12 -> flags & D3D12_ST_FLAG_MENU_ENABLE ))
4765+ (( d3d12 -> flags & D3D12_ST_FLAG_MENU_ENABLE ) || ( d3d12 -> flags & D3D12_ST_FLAG_OVERLAYS_ENABLE ) ))
46614766 {
4662- D3D12_RESOURCE_TRANSITION (
4663- cmd ,
4664- d3d12 -> chain .renderTargets [d3d12 -> chain .frame_index ],
4665- D3D12_RESOURCE_STATE_PRESENT ,
4666- D3D12_RESOURCE_STATE_RENDER_TARGET );
4667-
46684767 D3D12_RESOURCE_TRANSITION (
46694768 cmd ,
46704769 d3d12 -> chain .back_buffer .handle ,
46714770 D3D12_RESOURCE_STATE_RENDER_TARGET ,
46724771 D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE );
46734772 cmd -> lpVtbl -> SetPipelineState (cmd , d3d12 -> pipes [VIDEO_SHADER_STOCK_HDR ]);
46744773
4774+ d3d12 -> chain .current_rt_format = back_buffer_format ;
4775+
46754776 cmd -> lpVtbl -> OMSetRenderTargets (
46764777 cmd , 1 , & d3d12 -> chain .desc_handles [d3d12 -> chain .frame_index ],
46774778 FALSE, NULL );
@@ -4719,6 +4820,13 @@ static bool d3d12_gfx_frame(
47194820 cmd -> lpVtbl -> RSSetScissorRects (cmd , 1 , & d3d12 -> chain .scissorRect );
47204821
47214822 cmd -> lpVtbl -> DrawInstanced (cmd , 4 , 1 , 0 , 0 );
4823+
4824+ D3D12_RESOURCE_TRANSITION (
4825+ cmd ,
4826+ d3d12 -> chain .back_buffer .handle ,
4827+ D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE ,
4828+ D3D12_RESOURCE_STATE_RENDER_TARGET
4829+ );
47224830 }
47234831#endif
47244832
0 commit comments