out_properties->bufferFeatures = buffer_features;
return;
}
- buffer_features = VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT;
+
if (!util_format_is_srgb(pformat) &&
physical_device->pscreen->is_format_supported(physical_device->pscreen, pformat,
PIPE_BUFFER, 0, 0, PIPE_BIND_VERTEX_BUFFER)) {
buffer_features |= VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT;
}
+ if (physical_device->pscreen->is_format_supported(physical_device->pscreen, pformat,
+ PIPE_BUFFER, 0, 0, PIPE_BIND_SHADER_IMAGE)) {
+ buffer_features |= VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT;
+ }
if (physical_device->pscreen->is_format_supported(physical_device->pscreen, pformat,
PIPE_TEXTURE_2D, 0, 0, PIPE_BIND_SAMPLER_VIEW)) {
/* SNORM blending on llvmpipe fails CTS - disable for now */
if (!util_format_is_snorm(pformat))
features |= VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT;
+ }
+
+ if (physical_device->pscreen->is_format_supported(physical_device->pscreen, pformat,
+ PIPE_TEXTURE_2D, 0, 0, PIPE_BIND_SHADER_IMAGE)) {
features |= VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT;
}