When applying render state, don't assume UAVStartSlot == NumRTVs

* On D3D11.1 the UAV slots can be greater than 8 which is the maximum value for
  NumRTVs.
This commit is contained in:
baldurk
2018-06-28 18:25:20 +01:00
parent 08e7eecd3b
commit 6e8218d0e0
+6 -4
View File
@@ -542,12 +542,14 @@ void D3D11RenderState::ApplyState(WrappedID3D11DeviceContext *context)
if(context->IsFL11_1())
context->OMSetRenderTargetsAndUnorderedAccessViews(
OM.UAVStartSlot, OM.RenderTargets, OM.DepthView, OM.UAVStartSlot,
D3D11_1_UAV_SLOT_COUNT - OM.UAVStartSlot, OM.UAVs, UAV_keepcounts);
RDCMIN(OM.UAVStartSlot, (UINT)D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT), OM.RenderTargets,
OM.DepthView, OM.UAVStartSlot, D3D11_1_UAV_SLOT_COUNT - OM.UAVStartSlot, OM.UAVs,
UAV_keepcounts);
else
context->OMSetRenderTargetsAndUnorderedAccessViews(
OM.UAVStartSlot, OM.RenderTargets, OM.DepthView, OM.UAVStartSlot,
D3D11_PS_CS_UAV_REGISTER_COUNT - OM.UAVStartSlot, OM.UAVs, UAV_keepcounts);
RDCMIN(OM.UAVStartSlot, (UINT)D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT), OM.RenderTargets,
OM.DepthView, OM.UAVStartSlot, D3D11_PS_CS_UAV_REGISTER_COUNT - OM.UAVStartSlot, OM.UAVs,
UAV_keepcounts);
context->SetPredication(Predicate, PredicateValue);
}