mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-02-23 19:54:16 +01:00
[dxvk] Emit barriers when updating shader resources
This commit is contained in:
parent
ea99f2f2c5
commit
767bf80b23
@ -899,9 +899,6 @@ namespace dxvk {
|
||||
uint32_t y,
|
||||
uint32_t z) {
|
||||
if (this->commitComputeState()) {
|
||||
this->commitComputeBarriers<false>();
|
||||
this->commitComputeBarriers<true>();
|
||||
|
||||
m_queryManager.beginQueries(m_cmd,
|
||||
VK_QUERY_TYPE_PIPELINE_STATISTICS);
|
||||
|
||||
@ -924,9 +921,6 @@ namespace dxvk {
|
||||
sizeof(VkDispatchIndirectCommand), DxvkAccess::Read);
|
||||
|
||||
if (this->commitComputeState()) {
|
||||
this->commitComputeBarriers<false>();
|
||||
this->commitComputeBarriers<true>();
|
||||
|
||||
m_queryManager.beginQueries(m_cmd,
|
||||
VK_QUERY_TYPE_PIPELINE_STATISTICS);
|
||||
|
||||
@ -5918,6 +5912,9 @@ namespace dxvk {
|
||||
descriptorInfo.image.imageView = viewHandle;
|
||||
descriptorInfo.image.imageLayout = res.imageView->image()->info().layout;
|
||||
|
||||
if (BindPoint == VK_PIPELINE_BIND_POINT_COMPUTE || unlikely(res.imageView->image()->hasGfxStores()))
|
||||
accessImage(DxvkCmdBuffer::ExecBuffer, *res.imageView, util::pipelineStages(binding.stage), binding.access);
|
||||
|
||||
m_cmd->track(res.imageView->image(), DxvkAccess::Read);
|
||||
} else {
|
||||
descriptorInfo.image.sampler = VK_NULL_HANDLE;
|
||||
@ -5939,6 +5936,9 @@ namespace dxvk {
|
||||
descriptorInfo.image.imageView = viewHandle;
|
||||
descriptorInfo.image.imageLayout = res.imageView->image()->info().layout;
|
||||
|
||||
if (BindPoint == VK_PIPELINE_BIND_POINT_COMPUTE || res.imageView->image()->hasGfxStores())
|
||||
accessImage(DxvkCmdBuffer::ExecBuffer, *res.imageView, util::pipelineStages(binding.stage), binding.access);
|
||||
|
||||
m_cmd->track(res.imageView->image(), (binding.access & vk::AccessWriteMask)
|
||||
? DxvkAccess::Write : DxvkAccess::Read);
|
||||
} else {
|
||||
@ -5961,6 +5961,9 @@ namespace dxvk {
|
||||
descriptorInfo.image.imageView = viewHandle;
|
||||
descriptorInfo.image.imageLayout = res.imageView->image()->info().layout;
|
||||
|
||||
if (BindPoint == VK_PIPELINE_BIND_POINT_COMPUTE || unlikely(res.imageView->image()->hasGfxStores()))
|
||||
accessImage(DxvkCmdBuffer::ExecBuffer, *res.imageView, util::pipelineStages(binding.stage), binding.access);
|
||||
|
||||
m_cmd->track(res.sampler);
|
||||
m_cmd->track(res.imageView->image(), DxvkAccess::Read);
|
||||
} else {
|
||||
@ -5976,6 +5979,9 @@ namespace dxvk {
|
||||
if (res.bufferView != nullptr) {
|
||||
descriptorInfo.texelBuffer = res.bufferView->handle();
|
||||
|
||||
if (BindPoint == VK_PIPELINE_BIND_POINT_COMPUTE || unlikely(res.bufferView->buffer()->hasGfxStores()))
|
||||
accessBuffer(DxvkCmdBuffer::ExecBuffer, *res.bufferView, util::pipelineStages(binding.stage), binding.access);
|
||||
|
||||
m_cmd->track(res.bufferView->buffer(), DxvkAccess::Read);
|
||||
} else {
|
||||
descriptorInfo.texelBuffer = VK_NULL_HANDLE;
|
||||
@ -5988,6 +5994,9 @@ namespace dxvk {
|
||||
if (res.bufferView != nullptr) {
|
||||
descriptorInfo.texelBuffer = res.bufferView->handle();
|
||||
|
||||
if (BindPoint == VK_PIPELINE_BIND_POINT_COMPUTE || res.bufferView->buffer()->hasGfxStores())
|
||||
accessBuffer(DxvkCmdBuffer::ExecBuffer, *res.bufferView, util::pipelineStages(binding.stage), binding.access);
|
||||
|
||||
m_cmd->track(res.bufferView->buffer(), (binding.access & vk::AccessWriteMask)
|
||||
? DxvkAccess::Write : DxvkAccess::Read);
|
||||
} else {
|
||||
@ -6001,6 +6010,9 @@ namespace dxvk {
|
||||
if (res.bufferSlice.length()) {
|
||||
descriptorInfo = res.bufferSlice.getDescriptor();
|
||||
|
||||
if (BindPoint == VK_PIPELINE_BIND_POINT_COMPUTE || unlikely(res.bufferSlice.buffer()->hasGfxStores()))
|
||||
accessBuffer(DxvkCmdBuffer::ExecBuffer, res.bufferSlice, util::pipelineStages(binding.stage), binding.access);
|
||||
|
||||
m_cmd->track(res.bufferSlice.buffer(), DxvkAccess::Read);
|
||||
} else {
|
||||
descriptorInfo.buffer.buffer = VK_NULL_HANDLE;
|
||||
@ -6015,6 +6027,9 @@ namespace dxvk {
|
||||
if (res.bufferSlice.length()) {
|
||||
descriptorInfo = res.bufferSlice.getDescriptor();
|
||||
|
||||
if (BindPoint == VK_PIPELINE_BIND_POINT_COMPUTE || unlikely(res.bufferSlice.buffer()->hasGfxStores()))
|
||||
accessBuffer(DxvkCmdBuffer::ExecBuffer, res.bufferSlice, util::pipelineStages(binding.stage), binding.access);
|
||||
|
||||
m_cmd->track(res.bufferSlice.buffer(), (binding.access & vk::AccessWriteMask)
|
||||
? DxvkAccess::Write : DxvkAccess::Read);
|
||||
} else {
|
||||
@ -6607,6 +6622,8 @@ namespace dxvk {
|
||||
return false;
|
||||
}
|
||||
|
||||
this->commitComputeBarriers<false>();
|
||||
|
||||
if (m_descriptorState.hasDirtyComputeSets())
|
||||
this->updateComputeShaderResources();
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user