mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-03-15 07:29:17 +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:
parent
fd75775197
commit
f88f424da4
@ -5308,7 +5308,7 @@ namespace dxvk {
|
|||||||
key.MaxAnisotropy = state[D3DSAMP_MAXANISOTROPY];
|
key.MaxAnisotropy = state[D3DSAMP_MAXANISOTROPY];
|
||||||
key.MipmapLodBias = bit::cast<float>(state[D3DSAMP_MIPMAPLODBIAS]);
|
key.MipmapLodBias = bit::cast<float>(state[D3DSAMP_MIPMAPLODBIAS]);
|
||||||
key.MaxMipLevel = state[D3DSAMP_MAXMIPLEVEL];
|
key.MaxMipLevel = state[D3DSAMP_MAXMIPLEVEL];
|
||||||
DecodeD3DCOLOR(D3DCOLOR(state[D3DSAMP_BORDERCOLOR]), key.BorderColor);
|
key.BorderColor = D3DCOLOR(state[D3DSAMP_BORDERCOLOR]);
|
||||||
|
|
||||||
if (m_d3d9Options.samplerAnisotropy != -1) {
|
if (m_d3d9Options.samplerAnisotropy != -1) {
|
||||||
if (key.MagFilter == D3DTEXF_LINEAR)
|
if (key.MagFilter == D3DTEXF_LINEAR)
|
||||||
@ -5362,8 +5362,8 @@ namespace dxvk {
|
|||||||
colorInfo.mipmapLodMin = mipFilter.MipsEnabled ? float(cKey.MaxMipLevel) : 0;
|
colorInfo.mipmapLodMin = mipFilter.MipsEnabled ? float(cKey.MaxMipLevel) : 0;
|
||||||
colorInfo.mipmapLodMax = mipFilter.MipsEnabled ? FLT_MAX : 0;
|
colorInfo.mipmapLodMax = mipFilter.MipsEnabled ? FLT_MAX : 0;
|
||||||
colorInfo.usePixelCoord = VK_FALSE;
|
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) {
|
if (!m_dxvkDevice->features().extCustomBorderColor.customBorderColorWithoutFormat) {
|
||||||
// HACK: Let's get OPAQUE_WHITE border color over
|
// HACK: Let's get OPAQUE_WHITE border color over
|
||||||
|
@ -19,10 +19,7 @@ namespace dxvk {
|
|||||||
state.add(dhash (key.MaxAnisotropy));
|
state.add(dhash (key.MaxAnisotropy));
|
||||||
state.add(fhash (key.MipmapLodBias));
|
state.add(fhash (key.MipmapLodBias));
|
||||||
state.add(dhash (key.MaxMipLevel));
|
state.add(dhash (key.MaxMipLevel));
|
||||||
state.add(fhash (key.BorderColor[0]));
|
state.add(dhash (key.BorderColor));
|
||||||
state.add(fhash (key.BorderColor[1]));
|
|
||||||
state.add(fhash (key.BorderColor[2]));
|
|
||||||
state.add(fhash (key.BorderColor[3]));
|
|
||||||
|
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
@ -38,10 +35,7 @@ namespace dxvk {
|
|||||||
&& a.MaxAnisotropy == b.MaxAnisotropy
|
&& a.MaxAnisotropy == b.MaxAnisotropy
|
||||||
&& a.MipmapLodBias == b.MipmapLodBias
|
&& a.MipmapLodBias == b.MipmapLodBias
|
||||||
&& a.MaxMipLevel == b.MaxMipLevel
|
&& a.MaxMipLevel == b.MaxMipLevel
|
||||||
&& a.BorderColor[0] == b.BorderColor[0]
|
&& a.BorderColor == b.BorderColor;
|
||||||
&& a.BorderColor[1] == b.BorderColor[1]
|
|
||||||
&& a.BorderColor[2] == b.BorderColor[2]
|
|
||||||
&& a.BorderColor[3] == b.BorderColor[3];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -20,7 +20,7 @@ namespace dxvk {
|
|||||||
DWORD MaxAnisotropy;
|
DWORD MaxAnisotropy;
|
||||||
float MipmapLodBias;
|
float MipmapLodBias;
|
||||||
DWORD MaxMipLevel;
|
DWORD MaxMipLevel;
|
||||||
float BorderColor[4];
|
D3DCOLOR BorderColor;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct D3D9SamplerKeyHash {
|
struct D3D9SamplerKeyHash {
|
||||||
@ -63,12 +63,7 @@ namespace dxvk {
|
|||||||
if (key.AddressU != D3DTADDRESS_BORDER
|
if (key.AddressU != D3DTADDRESS_BORDER
|
||||||
&& key.AddressV != D3DTADDRESS_BORDER
|
&& key.AddressV != D3DTADDRESS_BORDER
|
||||||
&& key.AddressW != D3DTADDRESS_BORDER) {
|
&& key.AddressW != D3DTADDRESS_BORDER) {
|
||||||
for (auto& val : key.BorderColor)
|
key.BorderColor = 0;
|
||||||
val = 0.0f;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
for (auto& val : key.BorderColor)
|
|
||||||
val = val >= 0.5f ? 1.0f : 0.0f;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user