mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-02-06 13:54:14 +01:00
[d3d9] Track fixed function sampler bitfields
Cleans some stuff up a little bit and makes FF draws faster when this gets incorrectly invalidated.
This commit is contained in:
parent
c6a4c41d20
commit
64852f05c3
@ -5815,12 +5815,8 @@ namespace dxvk {
|
|||||||
const uint32_t textureBitMask = 0b11u << offset;
|
const uint32_t textureBitMask = 0b11u << offset;
|
||||||
const uint32_t textureBits = textureType << offset;
|
const uint32_t textureBits = textureType << offset;
|
||||||
|
|
||||||
if ((m_samplerTypeBitfield & textureBitMask) != textureBits) {
|
m_samplerTypeBitfield &= ~textureBitMask;
|
||||||
m_flags.set(D3D9DeviceFlag::DirtyFFPixelShader);
|
m_samplerTypeBitfield |= textureBits;
|
||||||
|
|
||||||
m_samplerTypeBitfield &= ~textureBitMask;
|
|
||||||
m_samplerTypeBitfield |= textureBits;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
EmitCs([
|
EmitCs([
|
||||||
@ -5842,9 +5838,6 @@ namespace dxvk {
|
|||||||
for (uint32_t i : bit::BitMask(mask & pixelShaderMask))
|
for (uint32_t i : bit::BitMask(mask & pixelShaderMask))
|
||||||
typeMask |= 0b11u << (i * 2u);
|
typeMask |= 0b11u << (i * 2u);
|
||||||
|
|
||||||
if ((m_samplerTypeBitfield & typeMask) != 0) {
|
|
||||||
m_flags.set(D3D9DeviceFlag::DirtyFFPixelShader);
|
|
||||||
|
|
||||||
m_samplerTypeBitfield &= ~typeMask;
|
m_samplerTypeBitfield &= ~typeMask;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -6570,8 +6563,9 @@ namespace dxvk {
|
|||||||
|
|
||||||
void D3D9DeviceEx::UpdateFixedFunctionPS() {
|
void D3D9DeviceEx::UpdateFixedFunctionPS() {
|
||||||
// Shader...
|
// Shader...
|
||||||
if (m_flags.test(D3D9DeviceFlag::DirtyFFPixelShader)) {
|
if (m_flags.test(D3D9DeviceFlag::DirtyFFPixelShader) || m_lastSamplerTypeBitfieldFF != m_samplerTypeBitfield) {
|
||||||
m_flags.clr(D3D9DeviceFlag::DirtyFFPixelShader);
|
m_flags.clr(D3D9DeviceFlag::DirtyFFPixelShader);
|
||||||
|
m_lastSamplerTypeBitfieldFF = m_samplerTypeBitfield;
|
||||||
|
|
||||||
// Used args for a given operation.
|
// Used args for a given operation.
|
||||||
auto ArgsMask = [](DWORD Op) {
|
auto ArgsMask = [](DWORD Op) {
|
||||||
|
@ -1211,6 +1211,7 @@ namespace dxvk {
|
|||||||
uint32_t m_lastPointMode = 0;
|
uint32_t m_lastPointMode = 0;
|
||||||
uint32_t m_lastFetch4 = 0;
|
uint32_t m_lastFetch4 = 0;
|
||||||
uint32_t m_lastHazardsDS = 0;
|
uint32_t m_lastHazardsDS = 0;
|
||||||
|
uint32_t m_lastSamplerTypeBitfieldFF = 0;
|
||||||
|
|
||||||
D3D9ShaderMasks m_vsShaderMasks = D3D9ShaderMasks();
|
D3D9ShaderMasks m_vsShaderMasks = D3D9ShaderMasks();
|
||||||
D3D9ShaderMasks m_psShaderMasks = FixedFunctionMask;
|
D3D9ShaderMasks m_psShaderMasks = FixedFunctionMask;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user