1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2025-02-23 10:54:14 +01:00

[d3d11] Add queue parameter to CS chunk injection

This commit is contained in:
Philip Rebohle 2025-01-20 19:15:38 +01:00
parent b686d95e71
commit 75617db76e
7 changed files with 13 additions and 10 deletions

View File

@ -214,7 +214,7 @@ namespace dxvk {
void D3D11Buffer::SetDebugName(const char* pName) {
if (m_buffer) {
m_parent->GetContext()->InjectCs([
m_parent->GetContext()->InjectCs(DxvkCsQueue::HighPriority, [
cBuffer = m_buffer,
cName = std::string(pName ? pName : "")
] (DxvkContext* ctx) {

View File

@ -920,11 +920,12 @@ namespace dxvk {
void D3D11ImmediateContext::InjectCsChunk(
DxvkCsQueue Queue,
DxvkCsChunkRef&& Chunk,
bool Synchronize) {
// Do not update the sequence number when emitting a chunk
// from an external source since that would break tracking
m_csThread.injectChunk(DxvkCsQueue::HighPriority, std::move(Chunk), Synchronize);
m_csThread.injectChunk(Queue, std::move(Chunk), Synchronize);
}

View File

@ -98,16 +98,18 @@ namespace dxvk {
}
void InjectCsChunk(
DxvkCsQueue Queue,
DxvkCsChunkRef&& Chunk,
bool Synchronize);
template<typename Fn>
void InjectCs(
DxvkCsQueue Queue,
Fn&& Command) {
auto chunk = AllocCsChunk();
chunk->push(std::move(Command));
InjectCsChunk(std::move(chunk), false);
InjectCsChunk(Queue, std::move(chunk), false);
}
private:

View File

@ -2828,7 +2828,7 @@ namespace dxvk {
feedback = ctx->ensureImageCompatibility(cImage, usageInfo);
});
m_device->GetContext()->InjectCsChunk(std::move(chunk), true);
m_device->GetContext()->InjectCsChunk(DxvkCsQueue::HighPriority, std::move(chunk), true);
if (!feedback) {
Logger::err(str::format("Failed to lock image:"
@ -2852,7 +2852,7 @@ namespace dxvk {
ctx->ensureBufferAddress(cBuffer);
});
m_device->GetContext()->InjectCsChunk(std::move(chunk), true);
m_device->GetContext()->InjectCsChunk(DxvkCsQueue::HighPriority, std::move(chunk), true);
}

View File

@ -371,7 +371,7 @@ namespace dxvk {
void D3D11Initializer::FlushCsChunkLocked() {
m_parent->GetContext()->InjectCsChunk(std::move(m_csChunk), false);
m_parent->GetContext()->InjectCsChunk(DxvkCsQueue::HighPriority, std::move(m_csChunk), false);
m_csChunk = m_parent->AllocCsChunk(DxvkCsChunkFlag::SingleUse);
}

View File

@ -576,7 +576,7 @@ namespace dxvk {
// Initialize images so that we can use them. Clearing
// to black prevents garbled output for the first frame.
m_parent->GetContext()->InjectCs([
m_parent->GetContext()->InjectCs(DxvkCsQueue::HighPriority, [
cImages = std::move(images)
] (DxvkContext* ctx) {
for (size_t i = 0; i < cImages.size(); i++) {
@ -612,7 +612,7 @@ namespace dxvk {
void D3D11SwapChain::DestroyLatencyTracker() {
// Need to make sure the context stops using
// the tracker for submissions
m_parent->GetContext()->InjectCs([
m_parent->GetContext()->InjectCs(DxvkCsQueue::Ordered, [
cLatency = m_latency
] (DxvkContext* ctx) {
ctx->endLatencyTracking(cLatency);

View File

@ -377,7 +377,7 @@ namespace dxvk {
void D3D11CommonTexture::SetDebugName(const char* pName) {
if (m_image) {
m_device->GetContext()->InjectCs([
m_device->GetContext()->InjectCs(DxvkCsQueue::HighPriority, [
cImage = m_image,
cName = std::string(pName ? pName : "")
] (DxvkContext* ctx) {
@ -387,7 +387,7 @@ namespace dxvk {
if (m_mapMode == D3D11_COMMON_TEXTURE_MAP_MODE_STAGING) {
for (uint32_t i = 0; i < m_buffers.size(); i++) {
m_device->GetContext()->InjectCs([
m_device->GetContext()->InjectCs(DxvkCsQueue::HighPriority, [
cBuffer = m_buffers[i].buffer,
cName = std::string(pName ? pName : "")
] (DxvkContext* ctx) {