mirror of
https://github.com/EduApps-CDG/OpenDX
synced 2024-12-30 09:45:37 +01:00
[dxvk] Move descriptor set updates to updateShaderResources
Saves two state flags and allows us to move the descriptor info array into the function itself.
This commit is contained in:
parent
7df3b409c3
commit
63cc8cdd35
@ -161,8 +161,8 @@ namespace dxvk {
|
|||||||
DxvkContextFlag::GpDirtyResources);
|
DxvkContextFlag::GpDirtyResources);
|
||||||
} else {
|
} else {
|
||||||
m_flags.set(
|
m_flags.set(
|
||||||
DxvkContextFlag::CpDirtyDescriptorOffsets,
|
DxvkContextFlag::CpDirtyDescriptorBinding,
|
||||||
DxvkContextFlag::GpDirtyDescriptorOffsets);
|
DxvkContextFlag::GpDirtyDescriptorBinding);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_rc[slot].bufferSlice = buffer;
|
m_rc[slot].bufferSlice = buffer;
|
||||||
@ -1759,8 +1759,8 @@ namespace dxvk {
|
|||||||
m_flags.set(DxvkContextFlag::GpDirtyResources,
|
m_flags.set(DxvkContextFlag::GpDirtyResources,
|
||||||
DxvkContextFlag::CpDirtyResources);
|
DxvkContextFlag::CpDirtyResources);
|
||||||
} else {
|
} else {
|
||||||
m_flags.set(DxvkContextFlag::GpDirtyDescriptorOffsets,
|
m_flags.set(DxvkContextFlag::GpDirtyDescriptorBinding,
|
||||||
DxvkContextFlag::CpDirtyDescriptorOffsets);
|
DxvkContextFlag::CpDirtyDescriptorBinding);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3671,16 +3671,14 @@ namespace dxvk {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
if ((m_flags.test(DxvkContextFlag::CpDirtyResources))
|
if ((m_flags.test(DxvkContextFlag::CpDirtyResources))
|
||||||
|| (m_flags.test(DxvkContextFlag::CpDirtyDescriptorOffsets)
|
|| (m_flags.test(DxvkContextFlag::CpDirtyDescriptorBinding)
|
||||||
&& m_state.cp.pipeline->layout()->hasStaticBufferBindings())) {
|
&& m_state.cp.pipeline->layout()->hasStaticBufferBindings())) {
|
||||||
m_flags.clr(DxvkContextFlag::CpDirtyResources);
|
m_flags.clr(DxvkContextFlag::CpDirtyResources);
|
||||||
|
|
||||||
if (this->updateShaderResources<VK_PIPELINE_BIND_POINT_COMPUTE>(m_state.cp.pipeline->layout()))
|
if (this->updateShaderResources<VK_PIPELINE_BIND_POINT_COMPUTE>(m_state.cp.pipeline->layout()))
|
||||||
m_flags.set(DxvkContextFlag::CpDirtyPipelineState);
|
m_flags.set(DxvkContextFlag::CpDirtyPipelineState);
|
||||||
|
|
||||||
m_flags.set(
|
m_flags.set(DxvkContextFlag::CpDirtyDescriptorBinding);
|
||||||
DxvkContextFlag::CpDirtyDescriptorSet,
|
|
||||||
DxvkContextFlag::CpDirtyDescriptorOffsets);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3689,19 +3687,10 @@ namespace dxvk {
|
|||||||
if (m_state.cp.pipeline == nullptr)
|
if (m_state.cp.pipeline == nullptr)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (m_flags.test(DxvkContextFlag::CpDirtyDescriptorSet)) {
|
this->updateShaderDescriptorSetBinding<VK_PIPELINE_BIND_POINT_COMPUTE>(
|
||||||
m_cpSet = this->updateShaderDescriptors(
|
m_cpSet, m_state.cp.pipeline->layout());
|
||||||
m_state.cp.pipeline->layout());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_flags.test(DxvkContextFlag::CpDirtyDescriptorOffsets)) {
|
m_flags.clr(DxvkContextFlag::CpDirtyDescriptorBinding);
|
||||||
this->updateShaderDescriptorSetBinding<VK_PIPELINE_BIND_POINT_COMPUTE>(
|
|
||||||
m_cpSet, m_state.cp.pipeline->layout());
|
|
||||||
}
|
|
||||||
|
|
||||||
m_flags.clr(
|
|
||||||
DxvkContextFlag::CpDirtyDescriptorOffsets,
|
|
||||||
DxvkContextFlag::CpDirtyDescriptorSet);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -3710,16 +3699,14 @@ namespace dxvk {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
if ((m_flags.test(DxvkContextFlag::GpDirtyResources))
|
if ((m_flags.test(DxvkContextFlag::GpDirtyResources))
|
||||||
|| (m_flags.test(DxvkContextFlag::GpDirtyDescriptorOffsets)
|
|| (m_flags.test(DxvkContextFlag::GpDirtyDescriptorBinding)
|
||||||
&& m_state.gp.pipeline->layout()->hasStaticBufferBindings())) {
|
&& m_state.gp.pipeline->layout()->hasStaticBufferBindings())) {
|
||||||
m_flags.clr(DxvkContextFlag::GpDirtyResources);
|
m_flags.clr(DxvkContextFlag::GpDirtyResources);
|
||||||
|
|
||||||
if (this->updateShaderResources<VK_PIPELINE_BIND_POINT_GRAPHICS>(m_state.gp.pipeline->layout()))
|
if (this->updateShaderResources<VK_PIPELINE_BIND_POINT_GRAPHICS>(m_state.gp.pipeline->layout()))
|
||||||
m_flags.set(DxvkContextFlag::GpDirtyPipelineState);
|
m_flags.set(DxvkContextFlag::GpDirtyPipelineState);
|
||||||
|
|
||||||
m_flags.set(
|
m_flags.set(DxvkContextFlag::GpDirtyDescriptorBinding);
|
||||||
DxvkContextFlag::GpDirtyDescriptorSet,
|
|
||||||
DxvkContextFlag::GpDirtyDescriptorOffsets);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3728,25 +3715,18 @@ namespace dxvk {
|
|||||||
if (m_state.gp.pipeline == nullptr)
|
if (m_state.gp.pipeline == nullptr)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (m_flags.test(DxvkContextFlag::GpDirtyDescriptorSet)) {
|
this->updateShaderDescriptorSetBinding<VK_PIPELINE_BIND_POINT_GRAPHICS>(
|
||||||
m_gpSet = this->updateShaderDescriptors(
|
m_gpSet, m_state.gp.pipeline->layout());
|
||||||
m_state.gp.pipeline->layout());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_flags.test(DxvkContextFlag::GpDirtyDescriptorOffsets)) {
|
m_flags.clr(DxvkContextFlag::GpDirtyDescriptorBinding);
|
||||||
this->updateShaderDescriptorSetBinding<VK_PIPELINE_BIND_POINT_GRAPHICS>(
|
|
||||||
m_gpSet, m_state.gp.pipeline->layout());
|
|
||||||
}
|
|
||||||
|
|
||||||
m_flags.clr(
|
|
||||||
DxvkContextFlag::GpDirtyDescriptorOffsets,
|
|
||||||
DxvkContextFlag::GpDirtyDescriptorSet);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template<VkPipelineBindPoint BindPoint>
|
template<VkPipelineBindPoint BindPoint>
|
||||||
bool DxvkContext::updateShaderResources(
|
bool DxvkContext::updateShaderResources(const DxvkPipelineLayout* layout) {
|
||||||
const DxvkPipelineLayout* layout) {
|
std::array<DxvkDescriptorInfo, MaxNumActiveBindings> descriptors;
|
||||||
|
|
||||||
|
// Assume that all bindings are active as a fast path
|
||||||
DxvkBindingMask bindMask;
|
DxvkBindingMask bindMask;
|
||||||
bindMask.setFirst(layout->bindingCount());
|
bindMask.setFirst(layout->bindingCount());
|
||||||
|
|
||||||
@ -3771,25 +3751,25 @@ namespace dxvk {
|
|||||||
switch (binding.type) {
|
switch (binding.type) {
|
||||||
case VK_DESCRIPTOR_TYPE_SAMPLER:
|
case VK_DESCRIPTOR_TYPE_SAMPLER:
|
||||||
if (res.sampler != nullptr) {
|
if (res.sampler != nullptr) {
|
||||||
m_descInfos[i].image.sampler = res.sampler->handle();
|
descriptors[i].image.sampler = res.sampler->handle();
|
||||||
m_descInfos[i].image.imageView = VK_NULL_HANDLE;
|
descriptors[i].image.imageView = VK_NULL_HANDLE;
|
||||||
m_descInfos[i].image.imageLayout = VK_IMAGE_LAYOUT_UNDEFINED;
|
descriptors[i].image.imageLayout = VK_IMAGE_LAYOUT_UNDEFINED;
|
||||||
|
|
||||||
if (m_rcTracked.set(binding.slot))
|
if (m_rcTracked.set(binding.slot))
|
||||||
m_cmd->trackResource<DxvkAccess::None>(res.sampler);
|
m_cmd->trackResource<DxvkAccess::None>(res.sampler);
|
||||||
} else {
|
} else {
|
||||||
bindMask.clr(i);
|
bindMask.clr(i);
|
||||||
m_descInfos[i].image = m_common->dummyResources().samplerDescriptor();
|
descriptors[i].image = m_common->dummyResources().samplerDescriptor();
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
|
case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
|
||||||
if (res.imageView != nullptr && res.imageView->handle(binding.view) != VK_NULL_HANDLE) {
|
if (res.imageView != nullptr && res.imageView->handle(binding.view) != VK_NULL_HANDLE) {
|
||||||
m_descInfos[i].image.sampler = VK_NULL_HANDLE;
|
descriptors[i].image.sampler = VK_NULL_HANDLE;
|
||||||
m_descInfos[i].image.imageView = res.imageView->handle(binding.view);
|
descriptors[i].image.imageView = res.imageView->handle(binding.view);
|
||||||
m_descInfos[i].image.imageLayout = res.imageView->imageInfo().layout;
|
descriptors[i].image.imageLayout = res.imageView->imageInfo().layout;
|
||||||
|
|
||||||
if (unlikely(res.imageView->imageHandle() == depthImage))
|
if (unlikely(res.imageView->imageHandle() == depthImage))
|
||||||
m_descInfos[i].image.imageLayout = depthLayout;
|
descriptors[i].image.imageLayout = depthLayout;
|
||||||
|
|
||||||
if (m_rcTracked.set(binding.slot)) {
|
if (m_rcTracked.set(binding.slot)) {
|
||||||
m_cmd->trackResource<DxvkAccess::None>(res.imageView);
|
m_cmd->trackResource<DxvkAccess::None>(res.imageView);
|
||||||
@ -3797,17 +3777,17 @@ namespace dxvk {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
bindMask.clr(i);
|
bindMask.clr(i);
|
||||||
m_descInfos[i].image = m_common->dummyResources().imageViewDescriptor(binding.view);
|
descriptors[i].image = m_common->dummyResources().imageViewDescriptor(binding.view);
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
|
case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
|
||||||
if (res.imageView != nullptr && res.imageView->handle(binding.view) != VK_NULL_HANDLE) {
|
if (res.imageView != nullptr && res.imageView->handle(binding.view) != VK_NULL_HANDLE) {
|
||||||
m_descInfos[i].image.sampler = VK_NULL_HANDLE;
|
descriptors[i].image.sampler = VK_NULL_HANDLE;
|
||||||
m_descInfos[i].image.imageView = res.imageView->handle(binding.view);
|
descriptors[i].image.imageView = res.imageView->handle(binding.view);
|
||||||
m_descInfos[i].image.imageLayout = res.imageView->imageInfo().layout;
|
descriptors[i].image.imageLayout = res.imageView->imageInfo().layout;
|
||||||
|
|
||||||
if (unlikely(res.imageView->imageHandle() == depthImage))
|
if (unlikely(res.imageView->imageHandle() == depthImage))
|
||||||
m_descInfos[i].image.imageLayout = depthLayout;
|
descriptors[i].image.imageLayout = depthLayout;
|
||||||
|
|
||||||
if (m_rcTracked.set(binding.slot)) {
|
if (m_rcTracked.set(binding.slot)) {
|
||||||
m_cmd->trackResource<DxvkAccess::None>(res.imageView);
|
m_cmd->trackResource<DxvkAccess::None>(res.imageView);
|
||||||
@ -3815,18 +3795,18 @@ namespace dxvk {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
bindMask.clr(i);
|
bindMask.clr(i);
|
||||||
m_descInfos[i].image = m_common->dummyResources().imageViewDescriptor(binding.view);
|
descriptors[i].image = m_common->dummyResources().imageViewDescriptor(binding.view);
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
|
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
|
||||||
if (res.sampler != nullptr && res.imageView != nullptr
|
if (res.sampler != nullptr && res.imageView != nullptr
|
||||||
&& res.imageView->handle(binding.view) != VK_NULL_HANDLE) {
|
&& res.imageView->handle(binding.view) != VK_NULL_HANDLE) {
|
||||||
m_descInfos[i].image.sampler = res.sampler->handle();
|
descriptors[i].image.sampler = res.sampler->handle();
|
||||||
m_descInfos[i].image.imageView = res.imageView->handle(binding.view);
|
descriptors[i].image.imageView = res.imageView->handle(binding.view);
|
||||||
m_descInfos[i].image.imageLayout = res.imageView->imageInfo().layout;
|
descriptors[i].image.imageLayout = res.imageView->imageInfo().layout;
|
||||||
|
|
||||||
if (unlikely(res.imageView->imageHandle() == depthImage))
|
if (unlikely(res.imageView->imageHandle() == depthImage))
|
||||||
m_descInfos[i].image.imageLayout = depthLayout;
|
descriptors[i].image.imageLayout = depthLayout;
|
||||||
|
|
||||||
if (m_rcTracked.set(binding.slot)) {
|
if (m_rcTracked.set(binding.slot)) {
|
||||||
m_cmd->trackResource<DxvkAccess::None>(res.sampler);
|
m_cmd->trackResource<DxvkAccess::None>(res.sampler);
|
||||||
@ -3835,13 +3815,13 @@ namespace dxvk {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
bindMask.clr(i);
|
bindMask.clr(i);
|
||||||
m_descInfos[i].image = m_common->dummyResources().imageSamplerDescriptor(binding.view);
|
descriptors[i].image = m_common->dummyResources().imageSamplerDescriptor(binding.view);
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
|
case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
|
||||||
if (res.bufferView != nullptr) {
|
if (res.bufferView != nullptr) {
|
||||||
res.bufferView->updateView();
|
res.bufferView->updateView();
|
||||||
m_descInfos[i].texelBuffer = res.bufferView->handle();
|
descriptors[i].texelBuffer = res.bufferView->handle();
|
||||||
|
|
||||||
if (m_rcTracked.set(binding.slot)) {
|
if (m_rcTracked.set(binding.slot)) {
|
||||||
m_cmd->trackResource<DxvkAccess::None>(res.bufferView);
|
m_cmd->trackResource<DxvkAccess::None>(res.bufferView);
|
||||||
@ -3849,13 +3829,13 @@ namespace dxvk {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
bindMask.clr(i);
|
bindMask.clr(i);
|
||||||
m_descInfos[i].texelBuffer = m_common->dummyResources().bufferViewDescriptor();
|
descriptors[i].texelBuffer = m_common->dummyResources().bufferViewDescriptor();
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER:
|
case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER:
|
||||||
if (res.bufferView != nullptr) {
|
if (res.bufferView != nullptr) {
|
||||||
res.bufferView->updateView();
|
res.bufferView->updateView();
|
||||||
m_descInfos[i].texelBuffer = res.bufferView->handle();
|
descriptors[i].texelBuffer = res.bufferView->handle();
|
||||||
|
|
||||||
if (m_rcTracked.set(binding.slot)) {
|
if (m_rcTracked.set(binding.slot)) {
|
||||||
m_cmd->trackResource<DxvkAccess::None>(res.bufferView);
|
m_cmd->trackResource<DxvkAccess::None>(res.bufferView);
|
||||||
@ -3863,53 +3843,53 @@ namespace dxvk {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
bindMask.clr(i);
|
bindMask.clr(i);
|
||||||
m_descInfos[i].texelBuffer = m_common->dummyResources().bufferViewDescriptor();
|
descriptors[i].texelBuffer = m_common->dummyResources().bufferViewDescriptor();
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER:
|
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER:
|
||||||
if (res.bufferSlice.defined()) {
|
if (res.bufferSlice.defined()) {
|
||||||
m_descInfos[i] = res.bufferSlice.getDescriptor();
|
descriptors[i] = res.bufferSlice.getDescriptor();
|
||||||
|
|
||||||
if (m_rcTracked.set(binding.slot))
|
if (m_rcTracked.set(binding.slot))
|
||||||
m_cmd->trackResource<DxvkAccess::Read>(res.bufferSlice.buffer());
|
m_cmd->trackResource<DxvkAccess::Read>(res.bufferSlice.buffer());
|
||||||
} else {
|
} else {
|
||||||
bindMask.clr(i);
|
bindMask.clr(i);
|
||||||
m_descInfos[i].buffer = m_common->dummyResources().bufferDescriptor();
|
descriptors[i].buffer = m_common->dummyResources().bufferDescriptor();
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER:
|
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER:
|
||||||
if (res.bufferSlice.defined()) {
|
if (res.bufferSlice.defined()) {
|
||||||
m_descInfos[i] = res.bufferSlice.getDescriptor();
|
descriptors[i] = res.bufferSlice.getDescriptor();
|
||||||
|
|
||||||
if (m_rcTracked.set(binding.slot))
|
if (m_rcTracked.set(binding.slot))
|
||||||
m_cmd->trackResource<DxvkAccess::Write>(res.bufferSlice.buffer());
|
m_cmd->trackResource<DxvkAccess::Write>(res.bufferSlice.buffer());
|
||||||
} else {
|
} else {
|
||||||
bindMask.clr(i);
|
bindMask.clr(i);
|
||||||
m_descInfos[i].buffer = m_common->dummyResources().bufferDescriptor();
|
descriptors[i].buffer = m_common->dummyResources().bufferDescriptor();
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC:
|
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC:
|
||||||
if (res.bufferSlice.defined()) {
|
if (res.bufferSlice.defined()) {
|
||||||
m_descInfos[i] = res.bufferSlice.getDescriptor();
|
descriptors[i] = res.bufferSlice.getDescriptor();
|
||||||
m_descInfos[i].buffer.offset = 0;
|
descriptors[i].buffer.offset = 0;
|
||||||
|
|
||||||
if (m_rcTracked.set(binding.slot))
|
if (m_rcTracked.set(binding.slot))
|
||||||
m_cmd->trackResource<DxvkAccess::Read>(res.bufferSlice.buffer());
|
m_cmd->trackResource<DxvkAccess::Read>(res.bufferSlice.buffer());
|
||||||
} else {
|
} else {
|
||||||
bindMask.clr(i);
|
bindMask.clr(i);
|
||||||
m_descInfos[i].buffer = m_common->dummyResources().bufferDescriptor();
|
descriptors[i].buffer = m_common->dummyResources().bufferDescriptor();
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC:
|
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC:
|
||||||
if (res.bufferSlice.defined()) {
|
if (res.bufferSlice.defined()) {
|
||||||
m_descInfos[i] = res.bufferSlice.getDescriptor();
|
descriptors[i] = res.bufferSlice.getDescriptor();
|
||||||
m_descInfos[i].buffer.offset = 0;
|
descriptors[i].buffer.offset = 0;
|
||||||
|
|
||||||
if (m_rcTracked.set(binding.slot))
|
if (m_rcTracked.set(binding.slot))
|
||||||
m_cmd->trackResource<DxvkAccess::Write>(res.bufferSlice.buffer());
|
m_cmd->trackResource<DxvkAccess::Write>(res.bufferSlice.buffer());
|
||||||
} else {
|
} else {
|
||||||
bindMask.clr(i);
|
bindMask.clr(i);
|
||||||
m_descInfos[i].buffer = m_common->dummyResources().bufferDescriptor();
|
descriptors[i].buffer = m_common->dummyResources().bufferDescriptor();
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -3917,6 +3897,18 @@ namespace dxvk {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Allocate and update descriptor set
|
||||||
|
auto& set = BindPoint == VK_PIPELINE_BIND_POINT_GRAPHICS ? m_gpSet : m_cpSet;
|
||||||
|
|
||||||
|
if (layout->bindingCount()) {
|
||||||
|
set = allocateDescriptorSet(layout->descriptorSetLayout());
|
||||||
|
|
||||||
|
m_cmd->updateDescriptorSetWithTemplate(set,
|
||||||
|
layout->descriptorTemplate(), descriptors.data());
|
||||||
|
} else {
|
||||||
|
set = VK_NULL_HANDLE;
|
||||||
|
}
|
||||||
|
|
||||||
// Select the active binding mask to update
|
// Select the active binding mask to update
|
||||||
auto& refMask = BindPoint == VK_PIPELINE_BIND_POINT_GRAPHICS
|
auto& refMask = BindPoint == VK_PIPELINE_BIND_POINT_GRAPHICS
|
||||||
? m_state.gp.state.bsBindingMask
|
? m_state.gp.state.bsBindingMask
|
||||||
@ -3933,23 +3925,6 @@ namespace dxvk {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
VkDescriptorSet DxvkContext::updateShaderDescriptors(
|
|
||||||
const DxvkPipelineLayout* layout) {
|
|
||||||
VkDescriptorSet descriptorSet = VK_NULL_HANDLE;
|
|
||||||
|
|
||||||
if (layout->bindingCount() != 0) {
|
|
||||||
descriptorSet = allocateDescriptorSet(
|
|
||||||
layout->descriptorSetLayout());
|
|
||||||
|
|
||||||
m_cmd->updateDescriptorSetWithTemplate(
|
|
||||||
descriptorSet, layout->descriptorTemplate(),
|
|
||||||
m_descInfos.data());
|
|
||||||
}
|
|
||||||
|
|
||||||
return descriptorSet;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<VkPipelineBindPoint BindPoint>
|
template<VkPipelineBindPoint BindPoint>
|
||||||
void DxvkContext::updateShaderDescriptorSetBinding(
|
void DxvkContext::updateShaderDescriptorSetBinding(
|
||||||
VkDescriptorSet set,
|
VkDescriptorSet set,
|
||||||
@ -4193,15 +4168,13 @@ namespace dxvk {
|
|||||||
|
|
||||||
if (m_flags.any(
|
if (m_flags.any(
|
||||||
DxvkContextFlag::CpDirtyResources,
|
DxvkContextFlag::CpDirtyResources,
|
||||||
DxvkContextFlag::CpDirtyDescriptorOffsets))
|
DxvkContextFlag::CpDirtyDescriptorBinding))
|
||||||
this->updateComputeShaderResources();
|
this->updateComputeShaderResources();
|
||||||
|
|
||||||
if (m_flags.test(DxvkContextFlag::CpDirtyPipelineState))
|
if (m_flags.test(DxvkContextFlag::CpDirtyPipelineState))
|
||||||
this->updateComputePipelineState();
|
this->updateComputePipelineState();
|
||||||
|
|
||||||
if (m_flags.any(
|
if (m_flags.test(DxvkContextFlag::CpDirtyDescriptorBinding))
|
||||||
DxvkContextFlag::CpDirtyDescriptorSet,
|
|
||||||
DxvkContextFlag::CpDirtyDescriptorOffsets))
|
|
||||||
this->updateComputeShaderDescriptors();
|
this->updateComputeShaderDescriptors();
|
||||||
|
|
||||||
if (m_flags.test(DxvkContextFlag::DirtyPushConstants))
|
if (m_flags.test(DxvkContextFlag::DirtyPushConstants))
|
||||||
@ -4228,7 +4201,7 @@ namespace dxvk {
|
|||||||
|
|
||||||
if (m_flags.any(
|
if (m_flags.any(
|
||||||
DxvkContextFlag::GpDirtyResources,
|
DxvkContextFlag::GpDirtyResources,
|
||||||
DxvkContextFlag::GpDirtyDescriptorOffsets))
|
DxvkContextFlag::GpDirtyDescriptorBinding))
|
||||||
this->updateGraphicsShaderResources();
|
this->updateGraphicsShaderResources();
|
||||||
|
|
||||||
if (m_flags.test(DxvkContextFlag::GpDirtyPipelineState))
|
if (m_flags.test(DxvkContextFlag::GpDirtyPipelineState))
|
||||||
@ -4240,9 +4213,7 @@ namespace dxvk {
|
|||||||
if (m_flags.test(DxvkContextFlag::GpDirtyPredicate))
|
if (m_flags.test(DxvkContextFlag::GpDirtyPredicate))
|
||||||
this->updateConditionalRendering();
|
this->updateConditionalRendering();
|
||||||
|
|
||||||
if (m_flags.any(
|
if (m_flags.test(DxvkContextFlag::GpDirtyDescriptorBinding))
|
||||||
DxvkContextFlag::GpDirtyDescriptorSet,
|
|
||||||
DxvkContextFlag::GpDirtyDescriptorOffsets))
|
|
||||||
this->updateGraphicsShaderDescriptors();
|
this->updateGraphicsShaderDescriptors();
|
||||||
|
|
||||||
if (m_flags.any(
|
if (m_flags.any(
|
||||||
|
@ -1028,8 +1028,6 @@ namespace dxvk {
|
|||||||
DxvkBindingSet<MaxNumResourceSlots> m_rcTracked;
|
DxvkBindingSet<MaxNumResourceSlots> m_rcTracked;
|
||||||
|
|
||||||
std::array<DxvkShaderResourceSlot, MaxNumResourceSlots> m_rc;
|
std::array<DxvkShaderResourceSlot, MaxNumResourceSlots> m_rc;
|
||||||
std::array<DxvkDescriptorInfo, MaxNumActiveBindings> m_descInfos;
|
|
||||||
|
|
||||||
std::array<DxvkGraphicsPipeline*, 4096> m_gpLookupCache = { };
|
std::array<DxvkGraphicsPipeline*, 4096> m_gpLookupCache = { };
|
||||||
std::array<DxvkComputePipeline*, 256> m_cpLookupCache = { };
|
std::array<DxvkComputePipeline*, 256> m_cpLookupCache = { };
|
||||||
|
|
||||||
@ -1135,9 +1133,6 @@ namespace dxvk {
|
|||||||
bool updateShaderResources(
|
bool updateShaderResources(
|
||||||
const DxvkPipelineLayout* layout);
|
const DxvkPipelineLayout* layout);
|
||||||
|
|
||||||
VkDescriptorSet updateShaderDescriptors(
|
|
||||||
const DxvkPipelineLayout* layout);
|
|
||||||
|
|
||||||
template<VkPipelineBindPoint BindPoint>
|
template<VkPipelineBindPoint BindPoint>
|
||||||
void updateShaderDescriptorSetBinding(
|
void updateShaderDescriptorSetBinding(
|
||||||
VkDescriptorSet set,
|
VkDescriptorSet set,
|
||||||
|
@ -29,8 +29,7 @@ namespace dxvk {
|
|||||||
GpDirtyPipeline, ///< Graphics pipeline binding is out of date
|
GpDirtyPipeline, ///< Graphics pipeline binding is out of date
|
||||||
GpDirtyPipelineState, ///< Graphics pipeline needs to be recompiled
|
GpDirtyPipelineState, ///< Graphics pipeline needs to be recompiled
|
||||||
GpDirtyResources, ///< Graphics pipeline resource bindings are out of date
|
GpDirtyResources, ///< Graphics pipeline resource bindings are out of date
|
||||||
GpDirtyDescriptorOffsets, ///< Graphics descriptor set needs to be rebound
|
GpDirtyDescriptorBinding, ///< Graphics descriptor set needs to be rebound
|
||||||
GpDirtyDescriptorSet, ///< Graphics descriptor set needs to be updated
|
|
||||||
GpDirtyVertexBuffers, ///< Vertex buffer bindings are out of date
|
GpDirtyVertexBuffers, ///< Vertex buffer bindings are out of date
|
||||||
GpDirtyIndexBuffer, ///< Index buffer binding are out of date
|
GpDirtyIndexBuffer, ///< Index buffer binding are out of date
|
||||||
GpDirtyXfbBuffers, ///< Transform feedback buffer bindings are out of date
|
GpDirtyXfbBuffers, ///< Transform feedback buffer bindings are out of date
|
||||||
@ -49,8 +48,7 @@ namespace dxvk {
|
|||||||
CpDirtyPipeline, ///< Compute pipeline binding are out of date
|
CpDirtyPipeline, ///< Compute pipeline binding are out of date
|
||||||
CpDirtyPipelineState, ///< Compute pipeline needs to be recompiled
|
CpDirtyPipelineState, ///< Compute pipeline needs to be recompiled
|
||||||
CpDirtyResources, ///< Compute pipeline resource bindings are out of date
|
CpDirtyResources, ///< Compute pipeline resource bindings are out of date
|
||||||
CpDirtyDescriptorOffsets, ///< Compute descriptor set needs to be rebound
|
CpDirtyDescriptorBinding, ///< Compute descriptor set needs to be rebound
|
||||||
CpDirtyDescriptorSet, ///< Compute descriptor set needs to be updated
|
|
||||||
|
|
||||||
DirtyDrawBuffer, ///< Indirect argument buffer is dirty
|
DirtyDrawBuffer, ///< Indirect argument buffer is dirty
|
||||||
DirtyPushConstants, ///< Push constant data has changed
|
DirtyPushConstants, ///< Push constant data has changed
|
||||||
|
Loading…
x
Reference in New Issue
Block a user