mirror of
https://github.com/jmarshall23/DoomRTX.git
synced 2026-08-17 19:23:51 +02:00
Specular reflections now sample from the texture color.
This commit is contained in:
@@ -2184,15 +2184,7 @@ static inline bool QD3D12_CurrentDrawUsesAlphaBlend()
|
||||
|
||||
static inline uint32_t QD3D12_CurrentEffectiveRayMaterialFlags()
|
||||
{
|
||||
uint32_t flags = QD3D12_CurrentRayMaterialFlags();
|
||||
|
||||
// Alpha-blended fixed-function surfaces are visually transparent. Mirror that
|
||||
// into the DXR material bits automatically so callers do not also have to tag
|
||||
// the same draw as glass just to make shadow/GI rays continue through it.
|
||||
if (QD3D12_CurrentDrawUsesAlphaBlend())
|
||||
flags |= GL_RAYTRACING_MATERIAL_FLAG_GLASS;
|
||||
|
||||
return QD3D12_ClampRayMaterialFlags(flags);
|
||||
return QD3D12_CurrentRayMaterialFlags();
|
||||
}
|
||||
|
||||
static inline float QD3D12_CurrentEffectiveGeometryFlag()
|
||||
@@ -2203,6 +2195,12 @@ static inline float QD3D12_CurrentEffectiveGeometryFlag()
|
||||
return (float)bits;
|
||||
}
|
||||
|
||||
static inline bool QD3D12_GeometryFlagHasGlass(float geometryFlag)
|
||||
{
|
||||
const uint32_t bits = (uint32_t)max(0.0f, floorf(geometryFlag + 0.5f));
|
||||
return (bits & QD3D12_GEOMETRY_FLAG_GLASS_BIT) != 0u;
|
||||
}
|
||||
|
||||
static inline float QD3D12_CurrentEffectiveMaterialType()
|
||||
{
|
||||
if (QD3D12_RayMaterialFlagsHaveGlass(QD3D12_CurrentEffectiveRayMaterialFlags()) &&
|
||||
@@ -9401,15 +9399,17 @@ static D3D12_GRAPHICS_PIPELINE_STATE_DESC BuildPSODesc(
|
||||
d.RasterizerState.MultisampleEnable = (d.SampleDesc.Count > 1) ? TRUE : FALSE;
|
||||
|
||||
const bool alphaBlended = QD3D12_PipelineUsesAlphaBlend(mode);
|
||||
const bool glassGBuffer = alphaBlended && QD3D12_GeometryFlagHasGlass(key.geometryFlag);
|
||||
|
||||
d.BlendState.RenderTarget[0].RenderTargetWriteMask = key.colorWriteMask;
|
||||
if (!nativeColorOnly)
|
||||
{
|
||||
d.BlendState.RenderTarget[1].RenderTargetWriteMask = (key.colorWriteMask && !alphaBlended) ? D3D12_COLOR_WRITE_ENABLE_ALL : 0;
|
||||
d.BlendState.RenderTarget[2].RenderTargetWriteMask = (key.colorWriteMask && !alphaBlended) ? D3D12_COLOR_WRITE_ENABLE_ALL : 0;
|
||||
d.BlendState.RenderTarget[3].RenderTargetWriteMask = (key.colorWriteMask && !alphaBlended) ? D3D12_COLOR_WRITE_ENABLE_ALL : 0;
|
||||
d.BlendState.RenderTarget[4].RenderTargetWriteMask = (key.colorWriteMask && !alphaBlended) ? D3D12_COLOR_WRITE_ENABLE_ALL : 0;
|
||||
d.BlendState.RenderTarget[5].RenderTargetWriteMask = (key.colorWriteMask && !alphaBlended) ? D3D12_COLOR_WRITE_ENABLE_ALL : 0;
|
||||
const UINT8 gbufferWriteMask = (key.colorWriteMask && (!alphaBlended || glassGBuffer)) ? D3D12_COLOR_WRITE_ENABLE_ALL : 0;
|
||||
d.BlendState.RenderTarget[1].RenderTargetWriteMask = gbufferWriteMask;
|
||||
d.BlendState.RenderTarget[2].RenderTargetWriteMask = gbufferWriteMask;
|
||||
d.BlendState.RenderTarget[3].RenderTargetWriteMask = gbufferWriteMask;
|
||||
d.BlendState.RenderTarget[4].RenderTargetWriteMask = gbufferWriteMask;
|
||||
d.BlendState.RenderTarget[5].RenderTargetWriteMask = gbufferWriteMask;
|
||||
}
|
||||
|
||||
d.BlendState.AlphaToCoverageEnable = FALSE;
|
||||
@@ -9714,6 +9714,7 @@ static D3D12_GRAPHICS_PIPELINE_STATE_DESC BuildARBPSODesc(
|
||||
d.RasterizerState.MultisampleEnable = (d.SampleDesc.Count > 1) ? TRUE : FALSE;
|
||||
|
||||
const bool alphaBlended = QD3D12_PipelineUsesAlphaBlend(key.pipeline);
|
||||
const bool glassGBuffer = alphaBlended && QD3D12_GeometryFlagHasGlass(key.geometryFlag);
|
||||
|
||||
d.BlendState.AlphaToCoverageEnable = FALSE;
|
||||
d.BlendState.IndependentBlendEnable = nativeColorOnly ? FALSE : TRUE;
|
||||
@@ -9730,7 +9731,7 @@ static D3D12_GRAPHICS_PIPELINE_STATE_DESC BuildARBPSODesc(
|
||||
rt.DestBlendAlpha = D3D12_BLEND_ZERO;
|
||||
rt.BlendOpAlpha = D3D12_BLEND_OP_ADD;
|
||||
rt.LogicOp = D3D12_LOGIC_OP_NOOP;
|
||||
rt.RenderTargetWriteMask = (i == 0) ? key.colorWriteMask : 0;
|
||||
rt.RenderTargetWriteMask = (i == 0) ? key.colorWriteMask : ((!nativeColorOnly && glassGBuffer) ? D3D12_COLOR_WRITE_ENABLE_ALL : 0);
|
||||
}
|
||||
|
||||
if (alphaBlended)
|
||||
|
||||
Reference in New Issue
Block a user