From 8bfd12067aaaaab34a1cd9036be1e66b99f12434 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Wed, 28 Feb 2018 06:44:55 +0100 Subject: [PATCH] [dxbc] Remove packDrefValueIntoCoordinates hack Causes more issues than it solves when the coordinate vector gets too big. --- src/dxbc/dxbc_compiler.cpp | 22 ---------------------- src/dxbc/dxbc_options.cpp | 7 ------- src/dxbc/dxbc_options.h | 4 ---- 3 files changed, 33 deletions(-) diff --git a/src/dxbc/dxbc_compiler.cpp b/src/dxbc/dxbc_compiler.cpp index 050a8d5d..de404e22 100644 --- a/src/dxbc/dxbc_compiler.cpp +++ b/src/dxbc/dxbc_compiler.cpp @@ -2633,17 +2633,6 @@ namespace dxvk { DxbcRegMask(true, false, false, false)) : DxbcRegisterValue(); - if (isDepthCompare && m_options.packDrefValueIntoCoordinates) { - const std::array packedCoordIds - = {{ coord.id, referenceValue.id }}; - - coord.type.ccount += 1; - coord.id = m_module.opCompositeConstruct( - getVectorTypeId(coord.type), - packedCoordIds.size(), - packedCoordIds.data()); - } - // Determine the sampled image type based on the opcode. const uint32_t sampledImageType = isDepthCompare ? m_module.defSampledImageType(m_textures.at(textureId).depthTypeId) @@ -2758,17 +2747,6 @@ namespace dxvk { ? emitRegisterLoad(ins.src[3], DxbcRegMask(true, false, false, false)) : DxbcRegisterValue(); - if (isDepthCompare && m_options.packDrefValueIntoCoordinates) { - const std::array packedCoordIds - = {{ coord.id, referenceValue.id }}; - - coord.type.ccount += 1; - coord.id = m_module.opCompositeConstruct( - getVectorTypeId(coord.type), - packedCoordIds.size(), - packedCoordIds.data()); - } - // Load explicit gradients for sample operations that require them const bool hasExplicitGradients = ins.op == DxbcOpcode::SampleD; diff --git a/src/dxbc/dxbc_options.cpp b/src/dxbc/dxbc_options.cpp index 20b8b184..98809566 100644 --- a/src/dxbc/dxbc_options.cpp +++ b/src/dxbc/dxbc_options.cpp @@ -12,18 +12,11 @@ namespace dxvk { if (vendor == DxvkGpuVendor::Nvidia) { // From vkd3d: NMin/NMax/NClamp crash the driver. this->useSimpleMinMaxClamp = true; - - // From vkd3d: Nvidia expects the depth reference - // value to be packed into the coordinate vector. - this->packDrefValueIntoCoordinates = true; } // Inform the user about which workarounds are enabled if (this->useSimpleMinMaxClamp) Logger::warn("DxbcOptions: Using FMin/FMax/FClamp instead of NMin/NMax/NClamp"); - - if (this->packDrefValueIntoCoordinates) - Logger::warn("DxbcOptions: Packing depth reference value into coordinate vector"); } } \ No newline at end of file diff --git a/src/dxbc/dxbc_options.h b/src/dxbc/dxbc_options.h index 48e8f944..cfb4283c 100644 --- a/src/dxbc/dxbc_options.h +++ b/src/dxbc/dxbc_options.h @@ -17,10 +17,6 @@ namespace dxvk { /// Use Fmin/Fmax instead of Nmin/Nmax. bool useSimpleMinMaxClamp = false; - - /// Pack the depth reference value into the - /// coordinate vector for depth-compare ops. - bool packDrefValueIntoCoordinates = false; }; } \ No newline at end of file