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

[dxbc] Fix invalid NonReadable/NonWritable decorations

This commit is contained in:
Philip Rebohle 2021-09-09 19:35:51 +02:00
parent 5db76784bd
commit 2f01df82d2
No known key found for this signature in database
GPG Key ID: C8CC613427A31C99

View File

@ -1060,6 +1060,11 @@ namespace dxvk {
? VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER ? VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER
: VK_DESCRIPTOR_TYPE_STORAGE_IMAGE; : VK_DESCRIPTOR_TYPE_STORAGE_IMAGE;
resource.access = m_analysis->uavInfos[registerId].accessFlags; resource.access = m_analysis->uavInfos[registerId].accessFlags;
if (!(resource.access & VK_ACCESS_SHADER_WRITE_BIT))
m_module.decorate(varId, spv::DecorationNonWritable);
if (!(resource.access & VK_ACCESS_SHADER_READ_BIT))
m_module.decorate(varId, spv::DecorationNonReadable);
} else { } else {
resource.type = resourceType == DxbcResourceDim::Buffer resource.type = resourceType == DxbcResourceDim::Buffer
? VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER ? VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER
@ -1067,11 +1072,6 @@ namespace dxvk {
resource.access = VK_ACCESS_SHADER_READ_BIT; resource.access = VK_ACCESS_SHADER_READ_BIT;
} }
if (!(resource.access & VK_ACCESS_SHADER_WRITE_BIT))
m_module.decorate(varId, spv::DecorationNonWritable);
if (!(resource.access & VK_ACCESS_SHADER_READ_BIT))
m_module.decorate(varId, spv::DecorationNonReadable);
m_resourceSlots.push_back(resource); m_resourceSlots.push_back(resource);
} }
@ -1210,10 +1210,12 @@ namespace dxvk {
? m_analysis->uavInfos[registerId].accessFlags ? m_analysis->uavInfos[registerId].accessFlags
: VK_ACCESS_SHADER_READ_BIT; : VK_ACCESS_SHADER_READ_BIT;
if (!(resource.access & VK_ACCESS_SHADER_WRITE_BIT)) if (useRawSsbo || isUav) {
m_module.decorate(varId, spv::DecorationNonWritable); if (!(resource.access & VK_ACCESS_SHADER_WRITE_BIT))
if (!(resource.access & VK_ACCESS_SHADER_READ_BIT)) m_module.decorate(varId, spv::DecorationNonWritable);
m_module.decorate(varId, spv::DecorationNonReadable); if (!(resource.access & VK_ACCESS_SHADER_READ_BIT))
m_module.decorate(varId, spv::DecorationNonReadable);
}
m_resourceSlots.push_back(resource); m_resourceSlots.push_back(resource);
} }