Skip to content

Commit 99bf823

Browse files
Revert mipmap generation on render targets from 66a7657 (#18731)
1 parent ee880a4 commit 99bf823

3 files changed

Lines changed: 34 additions & 61 deletions

File tree

gfx/drivers/d3d10.c

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -406,8 +406,8 @@ static void d3d10_init_texture(D3D10Device device, d3d10_texture_t* texture)
406406
unsigned width, height;
407407

408408
texture->desc.BindFlags |= D3D10_BIND_RENDER_TARGET;
409-
width = texture->desc.Width;
410-
height = texture->desc.Height;
409+
width = texture->desc.Width >> 5;
410+
height = texture->desc.Height >> 5;
411411

412412
while ((width > 1) || (height > 1))
413413
{
@@ -2378,7 +2378,6 @@ static void d3d10_init_render_targets(d3d10_video_t* d3d10,
23782378
d3d10->pass[i].rt.desc.BindFlags = D3D10_BIND_RENDER_TARGET;
23792379
d3d10->pass[i].rt.desc.Format = glslang_format_to_dxgi(
23802380
d3d10->pass[i].semantics.format);
2381-
d3d10->pass[i].rt.desc.MiscFlags = D3D10_RESOURCE_MISC_GENERATE_MIPS;
23822381
d3d10_release_texture(&d3d10->pass[i].rt);
23832382
d3d10_init_texture(d3d10->device, &d3d10->pass[i].rt);
23842383

@@ -2721,11 +2720,6 @@ static bool d3d10_gfx_frame(
27212720
#endif /* D3D10_ROLLING_SCANLINE_SIMULATION */
27222721

27232722
context->lpVtbl->Draw(context, 4, 0);
2724-
2725-
/* Generate mipmaps for render target if needed */
2726-
if (d3d10->pass[i].rt.desc.MiscFlags & D3D10_RESOURCE_MISC_GENERATE_MIPS)
2727-
context->lpVtbl->GenerateMips(context, d3d10->pass[i].rt.view);
2728-
27292723
texture = &d3d10->pass[i].rt;
27302724
}
27312725
else

gfx/drivers/d3d11.c

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -579,9 +579,8 @@ static void d3d11_init_texture(D3D11Device device, d3d11_texture_t* texture)
579579
unsigned width, height;
580580

581581
texture->desc.BindFlags |= D3D11_BIND_RENDER_TARGET;
582-
width = texture->desc.Width;
583-
height = texture->desc.Height;
584-
texture->desc.MipLevels = 1;
582+
width = texture->desc.Width >> 5;
583+
height = texture->desc.Height >> 5;
585584

586585
while ((width > 1) || (height > 1))
587586
{
@@ -3226,13 +3225,10 @@ static void d3d11_init_render_targets(d3d11_video_t* d3d11, unsigned width, unsi
32263225
d3d11->pass[i].viewport.Width = width;
32273226
d3d11->pass[i].viewport.Height = height;
32283227
d3d11->pass[i].viewport.MaxDepth = 1.0;
3229-
32303228
d3d11->pass[i].rt.desc.Width = width;
32313229
d3d11->pass[i].rt.desc.Height = height;
32323230
d3d11->pass[i].rt.desc.BindFlags = D3D11_BIND_RENDER_TARGET;
32333231
d3d11->pass[i].rt.desc.Format = glslang_format_to_dxgi(d3d11->pass[i].semantics.format);
3234-
d3d11->pass[i].rt.desc.MiscFlags = D3D11_RESOURCE_MISC_GENERATE_MIPS;
3235-
32363232
d3d11_release_texture(&d3d11->pass[i].rt);
32373233
d3d11_init_texture(d3d11->device, &d3d11->pass[i].rt);
32383234

@@ -3728,10 +3724,6 @@ static bool d3d11_gfx_frame(
37283724
else
37293725
context->lpVtbl->Draw(context, 4, 4);
37303726

3731-
/* Generate mipmaps for render target if needed */
3732-
if (d3d11->pass[i].rt.desc.MiscFlags & D3D11_RESOURCE_MISC_GENERATE_MIPS)
3733-
context->lpVtbl->GenerateMips(context, d3d11->pass[i].rt.view);
3734-
37353727
texture = &d3d11->pass[i].rt;
37363728
}
37373729
}

gfx/drivers/d3d12.c

Lines changed: 30 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)