1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2025-03-13 19:29:14 +01:00

[d3d9] Convert border color to float in CS thread

It's cheaper to look up sampler keys this way
This commit is contained in:
Joshua Ashton 2020-05-07 13:11:59 +01:00
parent fd75775197
commit f88f424da4
3 changed files with 7 additions and 18 deletions

View File

@ -5308,7 +5308,7 @@ namespace dxvk {
key.MaxAnisotropy = state[D3DSAMP_MAXANISOTROPY];
key.MipmapLodBias = bit::cast<float>(state[D3DSAMP_MIPMAPLODBIAS]);
key.MaxMipLevel = state[D3DSAMP_MAXMIPLEVEL];
DecodeD3DCOLOR(D3DCOLOR(state[D3DSAMP_BORDERCOLOR]), key.BorderColor);
key.BorderColor = D3DCOLOR(state[D3DSAMP_BORDERCOLOR]);
if (m_d3d9Options.samplerAnisotropy != -1) {
if (key.MagFilter == D3DTEXF_LINEAR)
@ -5362,8 +5362,8 @@ namespace dxvk {
colorInfo.mipmapLodMin = mipFilter.MipsEnabled ? float(cKey.MaxMipLevel) : 0;
colorInfo.mipmapLodMax = mipFilter.MipsEnabled ? FLT_MAX : 0;
colorInfo.usePixelCoord = VK_FALSE;
for (uint32_t i = 0; i < 4; i++)
colorInfo.borderColor.float32[i] = cKey.BorderColor[i];
DecodeD3DCOLOR(cKey.BorderColor, colorInfo.borderColor.float32);
if (!m_dxvkDevice->features().extCustomBorderColor.customBorderColorWithoutFormat) {
// HACK: Let's get OPAQUE_WHITE border color over

View File

@ -19,10 +19,7 @@ namespace dxvk {
state.add(dhash (key.MaxAnisotropy));
state.add(fhash (key.MipmapLodBias));
state.add(dhash (key.MaxMipLevel));
state.add(fhash (key.BorderColor[0]));
state.add(fhash (key.BorderColor[1]));
state.add(fhash (key.BorderColor[2]));
state.add(fhash (key.BorderColor[3]));
state.add(dhash (key.BorderColor));
return state;
}
@ -38,10 +35,7 @@ namespace dxvk {
&& a.MaxAnisotropy == b.MaxAnisotropy
&& a.MipmapLodBias == b.MipmapLodBias
&& a.MaxMipLevel == b.MaxMipLevel
&& a.BorderColor[0] == b.BorderColor[0]
&& a.BorderColor[1] == b.BorderColor[1]
&& a.BorderColor[2] == b.BorderColor[2]
&& a.BorderColor[3] == b.BorderColor[3];
&& a.BorderColor == b.BorderColor;
}
}

View File

@ -20,7 +20,7 @@ namespace dxvk {
DWORD MaxAnisotropy;
float MipmapLodBias;
DWORD MaxMipLevel;
float BorderColor[4];
D3DCOLOR BorderColor;
};
struct D3D9SamplerKeyHash {
@ -63,12 +63,7 @@ namespace dxvk {
if (key.AddressU != D3DTADDRESS_BORDER
&& key.AddressV != D3DTADDRESS_BORDER
&& key.AddressW != D3DTADDRESS_BORDER) {
for (auto& val : key.BorderColor)
val = 0.0f;
}
else {
for (auto& val : key.BorderColor)
val = val >= 0.5f ? 1.0f : 0.0f;
key.BorderColor = 0;
}
}