1
0
mirror of https://github.com/EduApps-CDG/OpenDX synced 2024-12-30 09:45:37 +01:00

[d3d11] Move common Begin/End implementation to immediate context

This commit is contained in:
Philip Rebohle 2019-11-02 13:10:59 +01:00
parent 63dbca82e7
commit be5dc234c1
No known key found for this signature in database
GPG Key ID: C8CC613427A31C99
4 changed files with 40 additions and 46 deletions

View File

@ -243,39 +243,6 @@ namespace dxvk {
} }
void STDMETHODCALLTYPE D3D11DeviceContext::Begin(ID3D11Asynchronous *pAsync) {
D3D10DeviceLock lock = LockContext();
if (unlikely(!pAsync))
return;
Com<D3D11Query, false> query(static_cast<D3D11Query*>(pAsync));
if (unlikely(!query->IsScoped()))
return;
EmitCs([cQuery = std::move(query)]
(DxvkContext* ctx) {
cQuery->Begin(ctx);
});
}
void STDMETHODCALLTYPE D3D11DeviceContext::End(ID3D11Asynchronous *pAsync) {
D3D10DeviceLock lock = LockContext();
if (unlikely(!pAsync))
return;
Com<D3D11Query, false> query(static_cast<D3D11Query*>(pAsync));
EmitCs([cQuery = std::move(query)]
(DxvkContext* ctx) {
cQuery->End(ctx);
});
}
void STDMETHODCALLTYPE D3D11DeviceContext::SetPredication( void STDMETHODCALLTYPE D3D11DeviceContext::SetPredication(
ID3D11Predicate* pPredicate, ID3D11Predicate* pPredicate,
BOOL PredicateValue) { BOOL PredicateValue) {

View File

@ -44,10 +44,6 @@ namespace dxvk {
void STDMETHODCALLTYPE ClearState(); void STDMETHODCALLTYPE ClearState();
void STDMETHODCALLTYPE Begin(ID3D11Asynchronous *pAsync);
void STDMETHODCALLTYPE End(ID3D11Asynchronous *pAsync);
void STDMETHODCALLTYPE SetPredication( void STDMETHODCALLTYPE SetPredication(
ID3D11Predicate* pPredicate, ID3D11Predicate* pPredicate,
BOOL PredicateValue); BOOL PredicateValue);

View File

@ -102,16 +102,43 @@ namespace dxvk {
} }
void STDMETHODCALLTYPE D3D11ImmediateContext::End(ID3D11Asynchronous* pAsync) { void STDMETHODCALLTYPE D3D11ImmediateContext::Begin(ID3D11Asynchronous* pAsync) {
D3D11DeviceContext::End(pAsync); D3D10DeviceLock lock = LockContext();
auto query = static_cast<D3D11Query*>(pAsync); if (unlikely(!pAsync))
if (unlikely(query && query->IsEvent())) { return;
Com<D3D11Query, false> query(static_cast<D3D11Query*>(pAsync));
if (unlikely(!query->IsScoped()))
return;
EmitCs([cQuery = std::move(query)]
(DxvkContext* ctx) {
cQuery->Begin(ctx);
});
}
void STDMETHODCALLTYPE D3D11ImmediateContext::End(ID3D11Asynchronous* pAsync) {
D3D10DeviceLock lock = LockContext();
if (unlikely(!pAsync))
return;
Com<D3D11Query, false> query(static_cast<D3D11Query*>(pAsync));
if (unlikely(query->IsEvent())) {
query->NotifyEnd(); query->NotifyEnd();
query->IsStalling() query->IsStalling()
? Flush() ? Flush()
: FlushImplicit(TRUE); : FlushImplicit(TRUE);
} }
EmitCs([cQuery = std::move(query)]
(DxvkContext* ctx) {
cQuery->End(ctx);
});
} }

View File

@ -27,12 +27,16 @@ namespace dxvk {
UINT STDMETHODCALLTYPE GetContextFlags(); UINT STDMETHODCALLTYPE GetContextFlags();
HRESULT STDMETHODCALLTYPE GetData( HRESULT STDMETHODCALLTYPE GetData(
ID3D11Asynchronous* pAsync, ID3D11Asynchronous* pAsync,
void* pData, void* pData,
UINT DataSize, UINT DataSize,
UINT GetDataFlags); UINT GetDataFlags);
void STDMETHODCALLTYPE End(ID3D11Asynchronous *pAsync); void STDMETHODCALLTYPE Begin(
ID3D11Asynchronous* pAsync);
void STDMETHODCALLTYPE End(
ID3D11Asynchronous* pAsync);
void STDMETHODCALLTYPE Flush(); void STDMETHODCALLTYPE Flush();