lavapipe: Always advertise formatless storage image OPs

The pipe cap isn't really accurate since shaders created by lavapipe take
a different codepath compared to GL. The format information is part of
the descriptor.

This allows vkd3d-proton to advertise typed UAV loads. (Whatever that
means)

Reviewed-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Reviewed-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24014>
This commit is contained in:
Konstantin Seurer
2023-07-06 13:32:35 +02:00
committed by Marge Bot
parent d681cdf4a6
commit 2ad2af19ce
2 changed files with 8 additions and 12 deletions

View File

@@ -283,8 +283,8 @@ lvp_get_features(const struct lvp_physical_device *pdevice,
.shaderSampledImageArrayDynamicIndexing = true,
.shaderStorageBufferArrayDynamicIndexing = true,
.shaderStorageImageArrayDynamicIndexing = true,
.shaderStorageImageReadWithoutFormat = (pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_IMAGE_LOAD_FORMATTED) != 0),
.shaderStorageImageWriteWithoutFormat = (pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_IMAGE_STORE_FORMATTED) != 0),
.shaderStorageImageReadWithoutFormat = true,
.shaderStorageImageWriteWithoutFormat = true,
.shaderClipDistance = true,
.shaderCullDistance = (pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_CULL_DISTANCE) == 1),
.shaderFloat64 = (pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_DOUBLES) == 1),

View File

@@ -122,11 +122,9 @@ lvp_physical_device_get_format_properties(struct lvp_physical_device *physical_d
if (pscreen->is_format_supported(pscreen, pformat, PIPE_BUFFER, 0, 0,
PIPE_BIND_SHADER_IMAGE)) {
buffer_features |= VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT;
if (pscreen->get_param(pscreen, PIPE_CAP_IMAGE_LOAD_FORMATTED))
buffer_features |= VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT;
if (pscreen->get_param(pscreen, PIPE_CAP_IMAGE_STORE_FORMATTED))
buffer_features |= VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT;
buffer_features |= VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT |
VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT |
VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT;
}
if (pscreen->is_format_supported(pscreen, pformat, PIPE_TEXTURE_2D, 0, 0,
@@ -151,11 +149,9 @@ lvp_physical_device_get_format_properties(struct lvp_physical_device *physical_d
if (pscreen->is_format_supported(pscreen, pformat, PIPE_TEXTURE_2D, 0, 0,
PIPE_BIND_SHADER_IMAGE)) {
features |= VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT;
if (pscreen->get_param(pscreen, PIPE_CAP_IMAGE_LOAD_FORMATTED))
features |= VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT;
if (pscreen->get_param(pscreen, PIPE_CAP_IMAGE_STORE_FORMATTED))
features |= VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT;
features |= VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT |
VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT |
VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT;
}
if (pformat == PIPE_FORMAT_R32_UINT ||