[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(
ID3D11Predicate* pPredicate,
BOOL PredicateValue) {

View File

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

View File

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

View File

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