mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-04-01 00:25:17 +02:00
[dxvk] Remove remaining built-in specialization constants
This commit is contained in:
parent
0f16a8f70d
commit
f15466a2c5
@ -45,16 +45,16 @@ namespace dxvk {
|
|||||||
|
|
||||||
if (!fogCtx.IsPixel) {
|
if (!fogCtx.IsPixel) {
|
||||||
spvModule.setDebugName(fogMode, "vertex_fog_mode");
|
spvModule.setDebugName(fogMode, "vertex_fog_mode");
|
||||||
spvModule.decorateSpecId(fogMode, getSpecId(D3D9SpecConstantId::VertexFogMode));
|
spvModule.decorateSpecId(fogMode, D3D9SpecConstantId::VertexFogMode);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
spvModule.setDebugName(fogMode, "pixel_fog_mode");
|
spvModule.setDebugName(fogMode, "pixel_fog_mode");
|
||||||
spvModule.decorateSpecId(fogMode, getSpecId(D3D9SpecConstantId::PixelFogMode));
|
spvModule.decorateSpecId(fogMode, D3D9SpecConstantId::PixelFogMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t fogEnabled = spvModule.specConstBool(false);
|
uint32_t fogEnabled = spvModule.specConstBool(false);
|
||||||
spvModule.setDebugName(fogEnabled, "fog_enabled");
|
spvModule.setDebugName(fogEnabled, "fog_enabled");
|
||||||
spvModule.decorateSpecId(fogEnabled, getSpecId(D3D9SpecConstantId::FogEnabled));
|
spvModule.decorateSpecId(fogEnabled, D3D9SpecConstantId::FogEnabled);
|
||||||
|
|
||||||
uint32_t doFog = spvModule.allocateId();
|
uint32_t doFog = spvModule.allocateId();
|
||||||
uint32_t skipFog = spvModule.allocateId();
|
uint32_t skipFog = spvModule.allocateId();
|
||||||
@ -272,7 +272,7 @@ namespace dxvk {
|
|||||||
if (isFixedFunction) {
|
if (isFixedFunction) {
|
||||||
uint32_t pointMode = spvModule.specConst32(uint32Type, 0);
|
uint32_t pointMode = spvModule.specConst32(uint32Type, 0);
|
||||||
spvModule.setDebugName(pointMode, "point_mode");
|
spvModule.setDebugName(pointMode, "point_mode");
|
||||||
spvModule.decorateSpecId(pointMode, getSpecId(D3D9SpecConstantId::PointMode));
|
spvModule.decorateSpecId(pointMode, D3D9SpecConstantId::PointMode);
|
||||||
|
|
||||||
uint32_t scaleBit = spvModule.opBitFieldUExtract(uint32Type, pointMode, spvModule.consti32(0), spvModule.consti32(1));
|
uint32_t scaleBit = spvModule.opBitFieldUExtract(uint32Type, pointMode, spvModule.consti32(0), spvModule.consti32(1));
|
||||||
uint32_t isScale = spvModule.opIEqual(boolType, scaleBit, spvModule.constu32(1));
|
uint32_t isScale = spvModule.opIEqual(boolType, scaleBit, spvModule.constu32(1));
|
||||||
@ -325,7 +325,7 @@ namespace dxvk {
|
|||||||
|
|
||||||
uint32_t pointMode = spvModule.specConst32(uint32Type, 0);
|
uint32_t pointMode = spvModule.specConst32(uint32Type, 0);
|
||||||
spvModule.setDebugName(pointMode, "point_mode");
|
spvModule.setDebugName(pointMode, "point_mode");
|
||||||
spvModule.decorateSpecId(pointMode, getSpecId(D3D9SpecConstantId::PointMode));
|
spvModule.decorateSpecId(pointMode, D3D9SpecConstantId::PointMode);
|
||||||
|
|
||||||
uint32_t spriteBit = spvModule.opBitFieldUExtract(uint32Type, pointMode, spvModule.consti32(1), spvModule.consti32(1));
|
uint32_t spriteBit = spvModule.opBitFieldUExtract(uint32Type, pointMode, spvModule.consti32(1), spvModule.consti32(1));
|
||||||
uint32_t isSprite = spvModule.opIEqual(boolType, spriteBit, spvModule.constu32(1));
|
uint32_t isSprite = spvModule.opIEqual(boolType, spriteBit, spvModule.constu32(1));
|
||||||
@ -2190,7 +2190,7 @@ namespace dxvk {
|
|||||||
// Declare spec constants for render states
|
// Declare spec constants for render states
|
||||||
uint32_t alphaFuncId = m_module.specConst32(m_module.defIntType(32, 0), 0);
|
uint32_t alphaFuncId = m_module.specConst32(m_module.defIntType(32, 0), 0);
|
||||||
m_module.setDebugName(alphaFuncId, "alpha_func");
|
m_module.setDebugName(alphaFuncId, "alpha_func");
|
||||||
m_module.decorateSpecId(alphaFuncId, getSpecId(D3D9SpecConstantId::AlphaCompareOp));
|
m_module.decorateSpecId(alphaFuncId, D3D9SpecConstantId::AlphaCompareOp);
|
||||||
|
|
||||||
// Implement alpha test
|
// Implement alpha test
|
||||||
auto oC0 = m_ps.out.COLOR;
|
auto oC0 = m_ps.out.COLOR;
|
||||||
|
@ -270,11 +270,11 @@ namespace dxvk {
|
|||||||
}
|
}
|
||||||
|
|
||||||
m_nullSpecConstant = m_module.specConst32(m_module.defIntType(32, 0), 0);
|
m_nullSpecConstant = m_module.specConst32(m_module.defIntType(32, 0), 0);
|
||||||
m_module.decorateSpecId(m_nullSpecConstant, getSpecId(D3D9SpecConstantId::SamplerNull));
|
m_module.decorateSpecId(m_nullSpecConstant, D3D9SpecConstantId::SamplerNull);
|
||||||
m_module.setDebugName(m_nullSpecConstant, "nullSamplers");
|
m_module.setDebugName(m_nullSpecConstant, "nullSamplers");
|
||||||
|
|
||||||
m_depthSpecConstant = m_module.specConst32(m_module.defIntType(32, 0), 0);
|
m_depthSpecConstant = m_module.specConst32(m_module.defIntType(32, 0), 0);
|
||||||
m_module.decorateSpecId(m_depthSpecConstant, getSpecId(D3D9SpecConstantId::SamplerDepthMode));
|
m_module.decorateSpecId(m_depthSpecConstant, D3D9SpecConstantId::SamplerDepthMode);
|
||||||
m_module.setDebugName(m_depthSpecConstant, "depthSamplers");
|
m_module.setDebugName(m_depthSpecConstant, "depthSamplers");
|
||||||
|
|
||||||
this->emitDclInputArray();
|
this->emitDclInputArray();
|
||||||
@ -339,10 +339,10 @@ namespace dxvk {
|
|||||||
m_bindings.push_back(binding);
|
m_bindings.push_back(binding);
|
||||||
|
|
||||||
m_boolSpecConstant = m_module.specConst32(m_module.defIntType(32, 0), 0);
|
m_boolSpecConstant = m_module.specConst32(m_module.defIntType(32, 0), 0);
|
||||||
m_module.decorateSpecId(m_boolSpecConstant, getSpecId(
|
m_module.decorateSpecId(m_boolSpecConstant,
|
||||||
m_programInfo.type() == DxsoProgramType::VertexShader
|
m_programInfo.type() == DxsoProgramType::VertexShader
|
||||||
? D3D9SpecConstantId::VertexShaderBools
|
? D3D9SpecConstantId::VertexShaderBools
|
||||||
: D3D9SpecConstantId::PixelShaderBools));
|
: D3D9SpecConstantId::PixelShaderBools);
|
||||||
m_module.setDebugName(m_boolSpecConstant, "boolConstants");
|
m_module.setDebugName(m_boolSpecConstant, "boolConstants");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -534,18 +534,18 @@ namespace dxvk {
|
|||||||
|
|
||||||
if (m_programInfo.majorVersion() < 2 || m_moduleInfo.options.forceSamplerTypeSpecConstants) {
|
if (m_programInfo.majorVersion() < 2 || m_moduleInfo.options.forceSamplerTypeSpecConstants) {
|
||||||
m_ps.samplerTypeSpec = m_module.specConst32(m_module.defIntType(32, 0), 0);
|
m_ps.samplerTypeSpec = m_module.specConst32(m_module.defIntType(32, 0), 0);
|
||||||
m_module.decorateSpecId(m_ps.samplerTypeSpec, getSpecId(D3D9SpecConstantId::SamplerType));
|
m_module.decorateSpecId(m_ps.samplerTypeSpec, D3D9SpecConstantId::SamplerType);
|
||||||
m_module.setDebugName(m_ps.samplerTypeSpec, "s_sampler_types");
|
m_module.setDebugName(m_ps.samplerTypeSpec, "s_sampler_types");
|
||||||
|
|
||||||
if (m_programInfo.majorVersion() < 2) {
|
if (m_programInfo.majorVersion() < 2) {
|
||||||
m_ps.projectionSpec = m_module.specConst32(m_module.defIntType(32, 0), 0);
|
m_ps.projectionSpec = m_module.specConst32(m_module.defIntType(32, 0), 0);
|
||||||
m_module.decorateSpecId(m_ps.projectionSpec, getSpecId(D3D9SpecConstantId::ProjectionType));
|
m_module.decorateSpecId(m_ps.projectionSpec, D3D9SpecConstantId::ProjectionType);
|
||||||
m_module.setDebugName(m_ps.projectionSpec, "s_projections");
|
m_module.setDebugName(m_ps.projectionSpec, "s_projections");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m_ps.fetch4Spec = m_module.specConst32(m_module.defIntType(32, 0), 0);
|
m_ps.fetch4Spec = m_module.specConst32(m_module.defIntType(32, 0), 0);
|
||||||
m_module.decorateSpecId(m_ps.fetch4Spec, getSpecId(D3D9SpecConstantId::Fetch4));
|
m_module.decorateSpecId(m_ps.fetch4Spec, D3D9SpecConstantId::Fetch4);
|
||||||
m_module.setDebugName(m_ps.fetch4Spec, "s_fetch4");
|
m_module.setDebugName(m_ps.fetch4Spec, "s_fetch4");
|
||||||
|
|
||||||
this->setupRenderStateInfo();
|
this->setupRenderStateInfo();
|
||||||
@ -3759,7 +3759,7 @@ void DxsoCompiler::emitControlFlowGenericLoop(
|
|||||||
|
|
||||||
uint32_t alphaFuncId = m_module.specConst32(m_module.defIntType(32, 0), 0);
|
uint32_t alphaFuncId = m_module.specConst32(m_module.defIntType(32, 0), 0);
|
||||||
m_module.setDebugName (alphaFuncId, "alpha_func");
|
m_module.setDebugName (alphaFuncId, "alpha_func");
|
||||||
m_module.decorateSpecId (alphaFuncId, getSpecId(D3D9SpecConstantId::AlphaCompareOp));
|
m_module.decorateSpecId (alphaFuncId, D3D9SpecConstantId::AlphaCompareOp);
|
||||||
|
|
||||||
// Implement alpha test and fog
|
// Implement alpha test and fog
|
||||||
DxsoRegister color0;
|
DxsoRegister color0;
|
||||||
|
@ -109,7 +109,7 @@ namespace dxvk {
|
|||||||
DxvkSpecConstants specData;
|
DxvkSpecConstants specData;
|
||||||
|
|
||||||
for (uint32_t i = 0; i < MaxNumSpecConstants; i++)
|
for (uint32_t i = 0; i < MaxNumSpecConstants; i++)
|
||||||
specData.set(getSpecId(i), state.sc.specConstants[i], 0u);
|
specData.set(i, state.sc.specConstants[i], 0u);
|
||||||
|
|
||||||
VkSpecializationInfo specInfo = specData.getSpecInfo();
|
VkSpecializationInfo specInfo = specData.getSpecInfo();
|
||||||
|
|
||||||
|
@ -1024,9 +1024,8 @@ namespace dxvk {
|
|||||||
/**
|
/**
|
||||||
* \brief Sets specialization constants
|
* \brief Sets specialization constants
|
||||||
*
|
*
|
||||||
* Replaces current specialization constants with
|
* Replaces current specialization constants
|
||||||
* the given list of constant entries. The specId
|
* with the given list of constant entries.
|
||||||
* in the shader can be computed with \c getSpecId.
|
|
||||||
* \param [in] pipeline Graphics or Compute pipeline
|
* \param [in] pipeline Graphics or Compute pipeline
|
||||||
* \param [in] index Constant index
|
* \param [in] index Constant index
|
||||||
* \param [in] value Constant value
|
* \param [in] value Constant value
|
||||||
|
@ -805,7 +805,7 @@ namespace dxvk {
|
|||||||
DxvkSpecConstants specData;
|
DxvkSpecConstants specData;
|
||||||
|
|
||||||
for (uint32_t i = 0; i < MaxNumSpecConstants; i++)
|
for (uint32_t i = 0; i < MaxNumSpecConstants; i++)
|
||||||
specData.set(getSpecId(i), state.sc.specConstants[i], 0u);
|
specData.set(i, state.sc.specConstants[i], 0u);
|
||||||
|
|
||||||
VkSpecializationInfo specInfo = specData.getSpecInfo();
|
VkSpecializationInfo specInfo = specData.getSpecInfo();
|
||||||
|
|
||||||
|
@ -18,21 +18,6 @@ namespace dxvk {
|
|||||||
class DxvkPipelineManager;
|
class DxvkPipelineManager;
|
||||||
struct DxvkPipelineStats;
|
struct DxvkPipelineStats;
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Built-in specialization constants
|
|
||||||
*
|
|
||||||
* These specialization constants allow the SPIR-V
|
|
||||||
* shaders to access some pipeline state like D3D
|
|
||||||
* shaders do. They need to be filled in by the
|
|
||||||
* implementation at pipeline compilation time.
|
|
||||||
*/
|
|
||||||
enum class DxvkSpecConstantId : uint32_t {
|
|
||||||
FirstPipelineConstant = 0,
|
|
||||||
/// Special constant ranges that do not count
|
|
||||||
/// towards the spec constant min/max values
|
|
||||||
ColorComponentMappings = DxvkLimits::MaxNumSpecConstants,
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Shader flags
|
* \brief Shader flags
|
||||||
*
|
*
|
||||||
|
@ -74,18 +74,5 @@ namespace dxvk {
|
|||||||
void setAsUint32(uint32_t specId, uint32_t value);
|
void setAsUint32(uint32_t specId, uint32_t value);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Computes specialization constant ID
|
|
||||||
*
|
|
||||||
* Computest the specId to use within shaders
|
|
||||||
* for a given pipeline specialization constant.
|
|
||||||
* \param [in] index Spec constant index
|
|
||||||
* \returns Specialization constant ID
|
|
||||||
*/
|
|
||||||
inline uint32_t getSpecId(uint32_t index) {
|
|
||||||
return uint32_t(DxvkSpecConstantId::FirstPipelineConstant) + index;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user