mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-01-31 14:52:11 +01:00
[d3d9,dxso] Add d3d9.forceSampleRateShading option
This commit is contained in:
parent
e426ec09a1
commit
0342a25e61
@ -208,6 +208,7 @@
|
|||||||
# Supported values: True, False
|
# Supported values: True, False
|
||||||
|
|
||||||
# d3d11.forceSampleRateShading = False
|
# d3d11.forceSampleRateShading = False
|
||||||
|
# d3d9.forceSampleRateShading = False
|
||||||
|
|
||||||
|
|
||||||
# Forces the sample count of all textures to 1, and performs
|
# Forces the sample count of all textures to 1, and performs
|
||||||
|
@ -14,6 +14,7 @@ namespace dxvk {
|
|||||||
|
|
||||||
D3D9FixedFunctionOptions::D3D9FixedFunctionOptions(const D3D9Options* options) {
|
D3D9FixedFunctionOptions::D3D9FixedFunctionOptions(const D3D9Options* options) {
|
||||||
invariantPosition = options->invariantPosition;
|
invariantPosition = options->invariantPosition;
|
||||||
|
forceSampleRateShading = options->forceSampleRateShading;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t DoFixedFunctionFog(D3D9ShaderSpecConstantManager& spec, SpirvModule& spvModule, const D3D9FogContext& fogCtx) {
|
uint32_t DoFixedFunctionFog(D3D9ShaderSpecConstantManager& spec, SpirvModule& spvModule, const D3D9FogContext& fogCtx) {
|
||||||
@ -933,10 +934,16 @@ namespace dxvk {
|
|||||||
|
|
||||||
uint32_t ptr = m_module.newVar(ptrType, storageClass);
|
uint32_t ptr = m_module.newVar(ptrType, storageClass);
|
||||||
|
|
||||||
if (builtin == spv::BuiltInMax)
|
if (builtin == spv::BuiltInMax) {
|
||||||
m_module.decorateLocation(ptr, slot);
|
m_module.decorateLocation(ptr, slot);
|
||||||
else
|
|
||||||
|
if (isPS() && input && m_options.forceSampleRateShading) {
|
||||||
|
m_module.enableCapability(spv::CapabilitySampleRateShading);
|
||||||
|
m_module.decorate(ptr, spv::DecorationSample);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
m_module.decorateBuiltIn(ptr, builtin);
|
m_module.decorateBuiltIn(ptr, builtin);
|
||||||
|
}
|
||||||
|
|
||||||
bool diffuseOrSpec = semantic == DxsoSemantic{ DxsoUsage::Color, 0 }
|
bool diffuseOrSpec = semantic == DxsoSemantic{ DxsoUsage::Color, 0 }
|
||||||
|| semantic == DxsoSemantic{ DxsoUsage::Color, 1 };
|
|| semantic == DxsoSemantic{ DxsoUsage::Color, 1 };
|
||||||
|
@ -49,6 +49,7 @@ namespace dxvk {
|
|||||||
D3D9FixedFunctionOptions(const D3D9Options* options);
|
D3D9FixedFunctionOptions(const D3D9Options* options);
|
||||||
|
|
||||||
bool invariantPosition;
|
bool invariantPosition;
|
||||||
|
bool forceSampleRateShading;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Returns new oFog if VS
|
// Returns new oFog if VS
|
||||||
|
@ -63,6 +63,7 @@ namespace dxvk {
|
|||||||
this->enableDialogMode = config.getOption<bool> ("d3d9.enableDialogMode", false);
|
this->enableDialogMode = config.getOption<bool> ("d3d9.enableDialogMode", false);
|
||||||
this->forceSamplerTypeSpecConstants = config.getOption<bool> ("d3d9.forceSamplerTypeSpecConstants", false);
|
this->forceSamplerTypeSpecConstants = config.getOption<bool> ("d3d9.forceSamplerTypeSpecConstants", false);
|
||||||
this->forceSwapchainMSAA = config.getOption<int32_t> ("d3d9.forceSwapchainMSAA", -1);
|
this->forceSwapchainMSAA = config.getOption<int32_t> ("d3d9.forceSwapchainMSAA", -1);
|
||||||
|
this->forceSampleRateShading = config.getOption<bool> ("d3d9.forceSampleRateShading", false);
|
||||||
this->forceAspectRatio = config.getOption<std::string> ("d3d9.forceAspectRatio", "");
|
this->forceAspectRatio = config.getOption<std::string> ("d3d9.forceAspectRatio", "");
|
||||||
this->allowDiscard = config.getOption<bool> ("d3d9.allowDiscard", true);
|
this->allowDiscard = config.getOption<bool> ("d3d9.allowDiscard", true);
|
||||||
this->enumerateByDisplays = config.getOption<bool> ("d3d9.enumerateByDisplays", true);
|
this->enumerateByDisplays = config.getOption<bool> ("d3d9.enumerateByDisplays", true);
|
||||||
|
@ -123,6 +123,9 @@ namespace dxvk {
|
|||||||
/// Forces an MSAA level on the swapchain
|
/// Forces an MSAA level on the swapchain
|
||||||
int32_t forceSwapchainMSAA;
|
int32_t forceSwapchainMSAA;
|
||||||
|
|
||||||
|
/// Forces sample rate shading
|
||||||
|
bool forceSampleRateShading;
|
||||||
|
|
||||||
/// Allow D3DLOCK_DISCARD
|
/// Allow D3DLOCK_DISCARD
|
||||||
bool allowDiscard;
|
bool allowDiscard;
|
||||||
|
|
||||||
|
@ -3192,6 +3192,12 @@ void DxsoCompiler::emitControlFlowGenericLoop(
|
|||||||
|
|
||||||
m_module.decorateLocation(inputPtr.id, slot);
|
m_module.decorateLocation(inputPtr.id, slot);
|
||||||
|
|
||||||
|
if (m_programInfo.type() == DxsoProgramType::PixelShader
|
||||||
|
&& m_moduleInfo.options.forceSampleRateShading) {
|
||||||
|
m_module.enableCapability(spv::CapabilitySampleRateShading);
|
||||||
|
m_module.decorate(inputPtr.id, spv::DecorationSample);
|
||||||
|
}
|
||||||
|
|
||||||
std::string name =
|
std::string name =
|
||||||
str::format("in_", elem.semantic.usage, elem.semantic.usageIndex);
|
str::format("in_", elem.semantic.usage, elem.semantic.usageIndex);
|
||||||
m_module.setDebugName(inputPtr.id, name.c_str());
|
m_module.setDebugName(inputPtr.id, name.c_str());
|
||||||
|
@ -25,6 +25,7 @@ namespace dxvk {
|
|||||||
invariantPosition = options.invariantPosition;
|
invariantPosition = options.invariantPosition;
|
||||||
|
|
||||||
forceSamplerTypeSpecConstants = options.forceSamplerTypeSpecConstants;
|
forceSamplerTypeSpecConstants = options.forceSamplerTypeSpecConstants;
|
||||||
|
forceSampleRateShading = options.forceSampleRateShading;
|
||||||
|
|
||||||
vertexFloatConstantBufferAsSSBO = pDevice->GetVertexConstantLayout().floatSize() > devInfo.core.properties.limits.maxUniformBufferRange;
|
vertexFloatConstantBufferAsSSBO = pDevice->GetVertexConstantLayout().floatSize() > devInfo.core.properties.limits.maxUniformBufferRange;
|
||||||
|
|
||||||
|
@ -36,6 +36,9 @@ namespace dxvk {
|
|||||||
/// Works around a game bug in Halo CE where it gives cube textures to 2d/volume samplers
|
/// Works around a game bug in Halo CE where it gives cube textures to 2d/volume samplers
|
||||||
bool forceSamplerTypeSpecConstants;
|
bool forceSamplerTypeSpecConstants;
|
||||||
|
|
||||||
|
/// Interpolate pixel shader inputs at the sample location rather than pixel center
|
||||||
|
bool forceSampleRateShading;
|
||||||
|
|
||||||
/// Should the SWVP float constant buffer be a SSBO (because of the size on NV)
|
/// Should the SWVP float constant buffer be a SSBO (because of the size on NV)
|
||||||
bool vertexFloatConstantBufferAsSSBO;
|
bool vertexFloatConstantBufferAsSSBO;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user