1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2025-03-13 19:29:14 +01:00

[dxvk] Fix buffer usage flags in commitGraphicsBarriers

Only checking for one single usage flag is incorrect since
buffers can have both the storage buffer and storage texel
buffer usage bits set.
This commit is contained in:
Philip Rebohle 2019-10-13 03:16:30 +02:00
parent 950ea21b83
commit b67e5809ba
No known key found for this signature in database
GPG Key ID: C8CC613427A31C99

View File

@ -4363,6 +4363,10 @@ namespace dxvk {
void DxvkContext::commitGraphicsBarriers() {
auto layout = m_state.gp.pipeline->layout();
constexpr auto storageBufferUsage = VK_BUFFER_USAGE_STORAGE_BUFFER_BIT
| VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT;
constexpr auto storageImageUsage = VK_IMAGE_USAGE_STORAGE_BIT;
bool requiresBarrier = false;
for (uint32_t i = 0; i < layout->bindingCount() && !requiresBarrier; i++) {
@ -4381,7 +4385,7 @@ namespace dxvk {
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER:
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC:
if (slot.bufferSlice.defined()
&& slot.bufferSlice.bufferInfo().usage & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT) {
&& slot.bufferSlice.bufferInfo().usage & storageBufferUsage) {
srcAccess = m_gfxBarriers.getBufferAccess(
slot.bufferSlice.getSliceHandle());
@ -4400,7 +4404,7 @@ namespace dxvk {
case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
if (slot.bufferView != nullptr
&& slot.bufferView->bufferInfo().usage & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT) {
&& slot.bufferView->bufferInfo().usage & storageBufferUsage) {
srcAccess = m_gfxBarriers.getBufferAccess(
slot.bufferView->getSliceHandle());
@ -4420,7 +4424,7 @@ namespace dxvk {
case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
if (slot.imageView != nullptr
&& slot.imageView->imageInfo().usage & VK_IMAGE_USAGE_STORAGE_BIT) {
&& slot.imageView->imageInfo().usage & storageImageUsage) {
srcAccess = m_gfxBarriers.getImageAccess(
slot.imageView->image(),
slot.imageView->imageSubresources());