#pragma once #include #include "d3d11_context.h" namespace dxvk { using D3D11ChunkDispatchProc = std::function; class D3D11CommandList : public D3D11DeviceChild { public: D3D11CommandList( D3D11Device* pDevice, UINT ContextFlags); ~D3D11CommandList(); HRESULT STDMETHODCALLTYPE QueryInterface( REFIID riid, void** ppvObject) final; UINT STDMETHODCALLTYPE GetContextFlags() final; void AddChunk( DxvkCsChunkRef&& Chunk); void AddQuery( D3D11Query* pQuery); void EmitToCommandList( ID3D11CommandList* pCommandList); void EmitToCsThread( const D3D11ChunkDispatchProc& DispatchProc); void TrackResourceUsage( ID3D11Resource* pResource, D3D11_RESOURCE_DIMENSION ResourceType, UINT Subresource); bool HasTrackedResources() const { return !m_resources.empty(); } private: UINT const m_contextFlags; std::vector m_chunks; std::vector> m_queries; std::vector m_resources; std::atomic m_submitted = { false }; std::atomic m_warned = { false }; void TrackResourceSequenceNumber( const D3D11ResourceRef& Resource, uint64_t Seq); void MarkSubmitted(); }; }