mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-20 05:50:27 +01:00
lavapipe: add EXT_sampler_filter_minmax support
Hook up the extension Reviewed-by: Roland Scheidegger <sroland@vmware.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9423>
This commit is contained in:
parent
6adbf6c86c
commit
49bb53ba43
4 changed files with 44 additions and 0 deletions
|
|
@ -120,6 +120,7 @@ static const struct vk_device_extension_table lvp_device_extensions_supported =
|
|||
.EXT_index_type_uint8 = true,
|
||||
.EXT_post_depth_coverage = true,
|
||||
.EXT_private_data = true,
|
||||
.EXT_sampler_filter_minmax = true,
|
||||
.EXT_shader_stencil_export = true,
|
||||
.EXT_shader_viewport_index_layer = true,
|
||||
.EXT_transform_feedback = true,
|
||||
|
|
@ -1673,6 +1674,9 @@ VKAPI_ATTR VkResult VKAPI_CALL lvp_CreateSampler(
|
|||
{
|
||||
LVP_FROM_HANDLE(lvp_device, device, _device);
|
||||
struct lvp_sampler *sampler;
|
||||
const VkSamplerReductionModeCreateInfo *reduction_mode_create_info =
|
||||
vk_find_struct_const(pCreateInfo->pNext,
|
||||
SAMPLER_REDUCTION_MODE_CREATE_INFO);
|
||||
|
||||
assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO);
|
||||
|
||||
|
|
@ -1684,6 +1688,11 @@ VKAPI_ATTR VkResult VKAPI_CALL lvp_CreateSampler(
|
|||
vk_object_base_init(&device->vk, &sampler->base,
|
||||
VK_OBJECT_TYPE_SAMPLER);
|
||||
sampler->create_info = *pCreateInfo;
|
||||
|
||||
sampler->reduction_mode = VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE;
|
||||
if (reduction_mode_create_info)
|
||||
sampler->reduction_mode = reduction_mode_create_info->reductionMode;
|
||||
|
||||
*pSampler = lvp_sampler_to_handle(sampler);
|
||||
|
||||
return VK_SUCCESS;
|
||||
|
|
|
|||
|
|
@ -761,6 +761,7 @@ static void fill_sampler(struct pipe_sampler_state *ss,
|
|||
ss->compare_mode = samp->create_info.compareEnable ? PIPE_TEX_COMPARE_R_TO_TEXTURE : PIPE_TEX_COMPARE_NONE;
|
||||
ss->compare_func = samp->create_info.compareOp;
|
||||
ss->seamless_cube_map = true;
|
||||
ss->reduction_mode = samp->reduction_mode;
|
||||
|
||||
switch (samp->create_info.borderColor) {
|
||||
case VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK:
|
||||
|
|
|
|||
|
|
@ -158,6 +158,35 @@ enum pipe_format vk_format_to_pipe(VkFormat format)
|
|||
return format_to_vk_table[format];
|
||||
}
|
||||
|
||||
static bool lvp_is_filter_minmax_format_supported(VkFormat format)
|
||||
{
|
||||
/* From the Vulkan spec 1.1.71:
|
||||
*
|
||||
* "The following formats must support the
|
||||
* VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT feature with
|
||||
* VK_IMAGE_TILING_OPTIMAL, if they support
|
||||
* VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT."
|
||||
*/
|
||||
/* TODO: enable more formats. */
|
||||
switch (format) {
|
||||
case VK_FORMAT_R8_UNORM:
|
||||
case VK_FORMAT_R8_SNORM:
|
||||
case VK_FORMAT_R16_UNORM:
|
||||
case VK_FORMAT_R16_SNORM:
|
||||
case VK_FORMAT_R16_SFLOAT:
|
||||
case VK_FORMAT_R32_SFLOAT:
|
||||
case VK_FORMAT_D16_UNORM:
|
||||
case VK_FORMAT_X8_D24_UNORM_PACK32:
|
||||
case VK_FORMAT_D32_SFLOAT:
|
||||
case VK_FORMAT_D16_UNORM_S8_UINT:
|
||||
case VK_FORMAT_D24_UNORM_S8_UINT:
|
||||
case VK_FORMAT_D32_SFLOAT_S8_UINT:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
lvp_physical_device_get_format_properties(struct lvp_physical_device *physical_device,
|
||||
VkFormat format,
|
||||
|
|
@ -179,6 +208,8 @@ lvp_physical_device_get_format_properties(struct lvp_physical_device *physical_d
|
|||
VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT |
|
||||
VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT;
|
||||
|
||||
if (lvp_is_filter_minmax_format_supported(format))
|
||||
out_properties->optimalTilingFeatures |= VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT;
|
||||
out_properties->bufferFeatures = 0;
|
||||
return;
|
||||
}
|
||||
|
|
@ -214,6 +245,8 @@ lvp_physical_device_get_format_properties(struct lvp_physical_device *physical_d
|
|||
features |= VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT;
|
||||
if (!util_format_is_pure_integer(pformat))
|
||||
features |= VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT;
|
||||
if (lvp_is_filter_minmax_format_supported(format))
|
||||
features |= VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT;
|
||||
}
|
||||
|
||||
if (physical_device->pscreen->is_format_supported(physical_device->pscreen, pformat,
|
||||
|
|
|
|||
|
|
@ -382,6 +382,7 @@ struct lvp_render_pass {
|
|||
struct lvp_sampler {
|
||||
struct vk_object_base base;
|
||||
VkSamplerCreateInfo create_info;
|
||||
VkSamplerReductionMode reduction_mode;
|
||||
uint32_t state[4];
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue