@@ -726,11 +726,11 @@ static void d3d12_init_texture(D3D12Device device, d3d12_texture_t* texture)
726726 if (!texture -> desc .MipLevels )
727727 texture -> desc .MipLevels = 1 ;
728728
729- /* Calculate mipmap count */
730- if (texture -> desc .Width > 1 || texture -> desc .Height > 1 )
729+ if ( !( texture -> desc . Width >> ( texture -> desc . MipLevels - 1 ))
730+ && ! (texture -> desc .Height >> ( texture -> desc .MipLevels - 1 )) )
731731 {
732- unsigned width = texture -> desc .Width ;
733- unsigned height = texture -> desc .Height ;
732+ unsigned width = texture -> desc .Width >> 5 ;
733+ unsigned height = texture -> desc .Height >> 5 ;
734734 texture -> desc .MipLevels = 1 ;
735735 while ((width > 1 ) || (height > 1 ))
736736 {
@@ -846,11 +846,33 @@ static void d3d12_init_texture(D3D12Device device, d3d12_texture_t* texture)
846846 texture -> size_data .w = 1.0f / texture -> desc .Height ;
847847}
848848
849- static void d3d12_generate_mipmaps (
850- D3D12GraphicsCommandList cmd ,
851- d3d12_texture_t * texture ,
852- void * userdata )
849+ static void d3d12_upload_texture (D3D12GraphicsCommandList cmd ,
850+ d3d12_texture_t * texture , void * userdata )
853851{
852+ D3D12_TEXTURE_COPY_LOCATION src , dst ;
853+
854+ src .pResource = texture -> upload_buffer ;
855+ src .Type = D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT ;
856+ src .PlacedFootprint = texture -> layout ;
857+
858+ dst .pResource = texture -> handle ;
859+ dst .Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX ;
860+ dst .SubresourceIndex = 0 ;
861+
862+ D3D12_RESOURCE_TRANSITION (
863+ cmd ,
864+ texture -> handle ,
865+ D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE ,
866+ D3D12_RESOURCE_STATE_COPY_DEST );
867+
868+ cmd -> lpVtbl -> CopyTextureRegion (cmd , & dst , 0 , 0 , 0 , & src , NULL );
869+
870+ D3D12_RESOURCE_TRANSITION (
871+ cmd ,
872+ texture -> handle ,
873+ D3D12_RESOURCE_STATE_COPY_DEST ,
874+ D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE );
875+
854876 if (texture -> desc .MipLevels > 1 )
855877 {
856878 unsigned i ;
@@ -906,36 +928,6 @@ static void d3d12_generate_mipmaps(
906928 }
907929 }
908930 }
909- }
910-
911- static void d3d12_upload_texture (D3D12GraphicsCommandList cmd ,
912- d3d12_texture_t * texture , void * userdata )
913- {
914- D3D12_TEXTURE_COPY_LOCATION src , dst ;
915-
916- src .pResource = texture -> upload_buffer ;
917- src .Type = D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT ;
918- src .PlacedFootprint = texture -> layout ;
919-
920- dst .pResource = texture -> handle ;
921- dst .Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX ;
922- dst .SubresourceIndex = 0 ;
923-
924- D3D12_RESOURCE_TRANSITION (
925- cmd ,
926- texture -> handle ,
927- D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE ,
928- D3D12_RESOURCE_STATE_COPY_DEST );
929-
930- cmd -> lpVtbl -> CopyTextureRegion (cmd , & dst , 0 , 0 , 0 , & src , NULL );
931-
932- D3D12_RESOURCE_TRANSITION (
933- cmd ,
934- texture -> handle ,
935- D3D12_RESOURCE_STATE_COPY_DEST ,
936- D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE );
937-
938- d3d12_generate_mipmaps (cmd , texture , userdata );
939931
940932 texture -> dirty = false;
941933}
@@ -3776,8 +3768,6 @@ static void d3d12_init_render_targets(d3d12_video_t* d3d12, unsigned width, unsi
37763768 d3d12 -> pass [i ].rt .desc .Flags = D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET ;
37773769 d3d12 -> pass [i ].rt .srv_heap = & d3d12 -> desc .srv_heap ;
37783770 d3d12 -> pass [i ].rt .desc .Format = glslang_format_to_dxgi (d3d12 -> pass [i ].semantics .format );
3779- /* Initialize MipLevels so mipmaps are created for render target */
3780- d3d12 -> pass [i ].rt .desc .MipLevels = 0 ;
37813771 d3d12_release_texture (& d3d12 -> pass [i ].rt );
37823772 d3d12_init_texture (d3d12 -> device , & d3d12 -> pass [i ].rt );
37833773
@@ -4424,9 +4414,6 @@ static bool d3d12_gfx_frame(
44244414 D3D12_RESOURCE_STATE_RENDER_TARGET ,
44254415 D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE );
44264416
4427- /* Generate mipmaps for framebuffer if it has multiple mipmap levels */
4428- d3d12_generate_mipmaps (cmd , & d3d12 -> pass [i ].rt , d3d12 );
4429-
44304417 D3D12_RESOURCE_TRANSITION (
44314418 cmd ,
44324419 d3d12 -> pass [i ].rt .handle ,
0 commit comments