mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-02-07 03:40:07 +00:00
d3d12: Implement sampler filters properly
Fix menu in the guided fate paradox
This commit is contained in:
parent
2d0dbf4949
commit
8669dac5e7
@ -147,6 +147,54 @@ DXGI_FORMAT getDXGIFormat(int format)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static D3D12_FILTER getSamplerFilter(u32 minFilter, u32 magFilter)
|
||||||
|
{
|
||||||
|
D3D12_FILTER_TYPE min, mag, mip;
|
||||||
|
switch (minFilter)
|
||||||
|
{
|
||||||
|
case 1: //GL_NEAREST
|
||||||
|
min = D3D12_FILTER_TYPE_POINT;
|
||||||
|
mip = D3D12_FILTER_TYPE_POINT;
|
||||||
|
break;
|
||||||
|
case 2: // GL_LINEAR
|
||||||
|
min = D3D12_FILTER_TYPE_LINEAR;
|
||||||
|
mip = D3D12_FILTER_TYPE_POINT;
|
||||||
|
break;
|
||||||
|
case 3: //GL_NEAREST_MIPMAP_NEAREST
|
||||||
|
min = D3D12_FILTER_TYPE_POINT;
|
||||||
|
mip = D3D12_FILTER_TYPE_POINT;
|
||||||
|
break;
|
||||||
|
case 4: // GL_LINEAR_MIPMAP_NEAREST
|
||||||
|
min = D3D12_FILTER_TYPE_LINEAR;
|
||||||
|
mip = D3D12_FILTER_TYPE_POINT;
|
||||||
|
break;
|
||||||
|
case 5: // GL_NEAREST_MIPMAP_LINEAR
|
||||||
|
min = D3D12_FILTER_TYPE_POINT;
|
||||||
|
mip = D3D12_FILTER_TYPE_LINEAR;
|
||||||
|
break;
|
||||||
|
case 6: //GL_LINEAR_MIPMAP_LINEAR
|
||||||
|
min = D3D12_FILTER_TYPE_LINEAR;
|
||||||
|
mip = D3D12_FILTER_TYPE_LINEAR;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
LOG_ERROR(RSX, "Unknow min filter %x", minFilter);
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (magFilter)
|
||||||
|
{
|
||||||
|
case 1: // GL_NEAREST
|
||||||
|
mag = D3D12_FILTER_TYPE_POINT;
|
||||||
|
break;
|
||||||
|
case 2: // GL_LINEAR
|
||||||
|
mag = D3D12_FILTER_TYPE_LINEAR;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
LOG_ERROR(RSX, "Unknow mag filter %x", magFilter);
|
||||||
|
}
|
||||||
|
|
||||||
|
return D3D12_ENCODE_BASIC_FILTER(min, mag, mip, D3D12_FILTER_REDUCTION_TYPE_STANDARD);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a texture residing in default heap and generate uploads commands in commandList,
|
* Create a texture residing in default heap and generate uploads commands in commandList,
|
||||||
* using a temporary texture buffer.
|
* using a temporary texture buffer.
|
||||||
@ -575,9 +623,8 @@ size_t D3D12GSRender::UploadTextures()
|
|||||||
Handle.ptr += (getCurrentResourceStorage().m_currentTextureIndex + usedTexture) * m_device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV);
|
Handle.ptr += (getCurrentResourceStorage().m_currentTextureIndex + usedTexture) * m_device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV);
|
||||||
m_device->CreateShaderResourceView(vramTexture, &srvDesc, Handle);
|
m_device->CreateShaderResourceView(vramTexture, &srvDesc, Handle);
|
||||||
|
|
||||||
// TODO : Correctly define sampler
|
|
||||||
D3D12_SAMPLER_DESC samplerDesc = {};
|
D3D12_SAMPLER_DESC samplerDesc = {};
|
||||||
samplerDesc.Filter = D3D12_FILTER_MIN_MAG_LINEAR_MIP_POINT;
|
samplerDesc.Filter = getSamplerFilter(m_textures[i].GetMinFilter(), m_textures[i].GetMagFilter());
|
||||||
samplerDesc.AddressU = GetWrap(m_textures[i].GetWrapS());
|
samplerDesc.AddressU = GetWrap(m_textures[i].GetWrapS());
|
||||||
samplerDesc.AddressV = GetWrap(m_textures[i].GetWrapT());
|
samplerDesc.AddressV = GetWrap(m_textures[i].GetWrapT());
|
||||||
samplerDesc.AddressW = GetWrap(m_textures[i].GetWrapR());
|
samplerDesc.AddressW = GetWrap(m_textures[i].GetWrapR());
|
||||||
|
Loading…
x
Reference in New Issue
Block a user