Skip to content

Commit 8849245

Browse files
Revert mipmap generation on render targets from 66a7657
Reverts the render target mipmap generation feature introduced in 66a7657 (fix mipmaps on generated textures) across d3d10, d3d11, and d3d12 while preserving the non-square texture mipmap count fix (|| vs &&) and all HDR pipeline fixes from 7df941e.
1 parent 648db5b commit 8849245

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)