diff --git a/src/dxvk/dxvk_context_state.h b/src/dxvk/dxvk_context_state.h index 5784ec35..33136a3b 100644 --- a/src/dxvk/dxvk_context_state.h +++ b/src/dxvk/dxvk_context_state.h @@ -22,6 +22,7 @@ namespace dxvk { */ enum class DxvkContextFlag : uint64_t { GpRenderPassBound, ///< Render pass is currently bound + GpXfbActive, ///< Transform feedback is enabled GpClearRenderTargets, ///< Render targets need to be cleared GpDirtyFramebuffer, ///< Framebuffer binding is out of date GpDirtyPipeline, ///< Graphics pipeline binding is out of date @@ -31,6 +32,7 @@ namespace dxvk { GpDirtyDescriptorSet, ///< Graphics descriptor set needs to be updated GpDirtyVertexBuffers, ///< Vertex buffer bindings are out of date GpDirtyIndexBuffer, ///< Index buffer binding are out of date + GpDirtyXfbBuffers, ///< Transform feedback buffer bindings are out of date GpDirtyBlendConstants, ///< Blend constants have changed GpDirtyStencilRef, ///< Stencil reference has changed GpDirtyViewport, ///< Viewport state has changed @@ -86,6 +88,12 @@ namespace dxvk { DxvkBlendConstants blendConstants = { 0.0f, 0.0f, 0.0f, 0.0f }; uint32_t stencilReference = 0; }; + + + struct DxvkXfbState { + std::array buffers; + std::array counters; + }; struct DxvkShaderStage { @@ -125,6 +133,7 @@ namespace dxvk { DxvkViewportState vp; DxvkDynamicDepthState ds; DxvkOutputMergerState om; + DxvkXfbState xfb; DxvkGraphicsPipelineState gp; DxvkComputePipelineState cp; diff --git a/src/dxvk/dxvk_limits.h b/src/dxvk/dxvk_limits.h index 12104fd4..183b4492 100644 --- a/src/dxvk/dxvk_limits.h +++ b/src/dxvk/dxvk_limits.h @@ -8,7 +8,8 @@ namespace dxvk { MaxNumRenderTargets = 8, MaxNumVertexAttributes = 32, MaxNumVertexBindings = 32, - MaxNumOutputStreams = 4, + MaxNumXfbBuffers = 4, + MaxNumXfbStreams = 4, MaxNumViewports = 16, MaxNumResourceSlots = 1216, MaxNumActiveBindings = 128,