Revert "Don't load level 0 twice for 1-level textures in DX11." and fix it properly.
All backend TextureCaches now load level 0 in CreateTexture.
This reverts commit 294cb165ba
.
This commit is contained in:
parent
294cb165ba
commit
6e6d8af6dd
|
@ -481,15 +481,20 @@ TextureCache::TCacheEntryBase* TextureCache::Load(unsigned int const stage,
|
||||||
|
|
||||||
GFX_DEBUGGER_PAUSE_AT(NEXT_NEW_TEXTURE, true);
|
GFX_DEBUGGER_PAUSE_AT(NEXT_NEW_TEXTURE, true);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// load texture (CreateTexture also loads level 0)
|
||||||
|
entry->Load(width, height, expandedWidth, 0);
|
||||||
|
}
|
||||||
|
|
||||||
entry->SetGeneralParameters(address, texture_size, full_format, entry->num_mipmaps);
|
entry->SetGeneralParameters(address, texture_size, full_format, entry->num_mipmaps);
|
||||||
entry->SetDimensions(nativeW, nativeH, width, height);
|
entry->SetDimensions(nativeW, nativeH, width, height);
|
||||||
entry->hash = tex_hash;
|
entry->hash = tex_hash;
|
||||||
if (entry->IsEfbCopy() && !g_ActiveConfig.bCopyEFBToTexture) entry->type = TCET_EC_DYNAMIC;
|
|
||||||
else entry->type = TCET_NORMAL;
|
if (entry->IsEfbCopy() && !g_ActiveConfig.bCopyEFBToTexture)
|
||||||
|
entry->type = TCET_EC_DYNAMIC;
|
||||||
// load texture
|
else
|
||||||
entry->Load(width, height, expandedWidth, 0);
|
entry->type = TCET_NORMAL;
|
||||||
|
|
||||||
if (g_ActiveConfig.bDumpTextures && !using_custom_texture)
|
if (g_ActiveConfig.bDumpTextures && !using_custom_texture)
|
||||||
DumpTexture(entry, 0);
|
DumpTexture(entry, 0);
|
||||||
|
|
|
@ -70,19 +70,24 @@ TextureCache::TCacheEntryBase* TextureCache::CreateTexture(unsigned int width,
|
||||||
{
|
{
|
||||||
D3D11_USAGE usage = D3D11_USAGE_DEFAULT;
|
D3D11_USAGE usage = D3D11_USAGE_DEFAULT;
|
||||||
D3D11_CPU_ACCESS_FLAG cpu_access = (D3D11_CPU_ACCESS_FLAG)0;
|
D3D11_CPU_ACCESS_FLAG cpu_access = (D3D11_CPU_ACCESS_FLAG)0;
|
||||||
|
D3D11_SUBRESOURCE_DATA srdata, *data = NULL;
|
||||||
|
|
||||||
// This is just an optimization apparently?
|
|
||||||
if (tex_levels == 1)
|
if (tex_levels == 1)
|
||||||
{
|
{
|
||||||
usage = D3D11_USAGE_DYNAMIC;
|
usage = D3D11_USAGE_DYNAMIC;
|
||||||
cpu_access = D3D11_CPU_ACCESS_WRITE;
|
cpu_access = D3D11_CPU_ACCESS_WRITE;
|
||||||
|
|
||||||
|
srdata.pSysMem = TextureCache::temp;
|
||||||
|
srdata.SysMemPitch = 4 * expanded_width;
|
||||||
|
|
||||||
|
data = &srdata;
|
||||||
}
|
}
|
||||||
|
|
||||||
const D3D11_TEXTURE2D_DESC texdesc = CD3D11_TEXTURE2D_DESC(DXGI_FORMAT_R8G8B8A8_UNORM,
|
const D3D11_TEXTURE2D_DESC texdesc = CD3D11_TEXTURE2D_DESC(DXGI_FORMAT_R8G8B8A8_UNORM,
|
||||||
width, height, 1, tex_levels, D3D11_BIND_SHADER_RESOURCE, usage, cpu_access);
|
width, height, 1, tex_levels, D3D11_BIND_SHADER_RESOURCE, usage, cpu_access);
|
||||||
|
|
||||||
ID3D11Texture2D *pTexture;
|
ID3D11Texture2D *pTexture;
|
||||||
const HRESULT hr = D3D::device->CreateTexture2D(&texdesc, NULL, &pTexture);
|
const HRESULT hr = D3D::device->CreateTexture2D(&texdesc, data, &pTexture);
|
||||||
CHECK(SUCCEEDED(hr), "Create texture of the TextureCache");
|
CHECK(SUCCEEDED(hr), "Create texture of the TextureCache");
|
||||||
|
|
||||||
TCacheEntry* const entry = new TCacheEntry(new D3DTexture2D(pTexture, D3D11_BIND_SHADER_RESOURCE));
|
TCacheEntry* const entry = new TCacheEntry(new D3DTexture2D(pTexture, D3D11_BIND_SHADER_RESOURCE));
|
||||||
|
|
|
@ -226,6 +226,8 @@ TextureCache::TCacheEntryBase* TextureCache::CreateTexture(unsigned int width, u
|
||||||
TCacheEntry* entry = new TCacheEntry(D3D::CreateTexture2D(temp, width, height, expanded_width, d3d_fmt, swap_r_b, tex_levels));
|
TCacheEntry* entry = new TCacheEntry(D3D::CreateTexture2D(temp, width, height, expanded_width, d3d_fmt, swap_r_b, tex_levels));
|
||||||
entry->swap_r_b = swap_r_b;
|
entry->swap_r_b = swap_r_b;
|
||||||
entry->d3d_fmt = d3d_fmt;
|
entry->d3d_fmt = d3d_fmt;
|
||||||
|
|
||||||
|
entry->Load(width, height, expanded_width, 0);
|
||||||
|
|
||||||
return entry;
|
return entry;
|
||||||
}
|
}
|
||||||
|
|
|
@ -178,6 +178,8 @@ TextureCache::TCacheEntryBase* TextureCache::CreateTexture(unsigned int width,
|
||||||
entry.pcfmt = pcfmt;
|
entry.pcfmt = pcfmt;
|
||||||
|
|
||||||
entry.bHaveMipMaps = tex_levels != 1;
|
entry.bHaveMipMaps = tex_levels != 1;
|
||||||
|
|
||||||
|
entry.Load(width, height, expanded_width, 0);
|
||||||
|
|
||||||
return &entry;
|
return &entry;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue