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:
parent
fd75775197
commit
f88f424da4
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user