#include "panvk_private.h"
#include "panvk_varyings.h"
+#include "vk_sampler.h"
+
static enum mali_mipmap_mode
panvk_translate_sampler_mipmap_mode(VkSamplerMipmapMode mode)
{
}
}
-static void
-panvk_translate_sampler_border_color(const VkSamplerCreateInfo *pCreateInfo,
- uint32_t border_color[4])
-{
- const VkSamplerCustomBorderColorCreateInfoEXT *pBorderColor =
- vk_find_struct_const(pCreateInfo->pNext, SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT);
-
- switch (pCreateInfo->borderColor) {
- case VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK:
- case VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK:
- border_color[0] = border_color[1] = border_color[2] = fui(0.0);
- border_color[3] =
- pCreateInfo->borderColor == VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK ?
- fui(1.0) : fui(0.0);
- break;
- case VK_BORDER_COLOR_INT_OPAQUE_BLACK:
- case VK_BORDER_COLOR_INT_TRANSPARENT_BLACK:
- border_color[0] = border_color[1] = border_color[2] = 0;
- border_color[3] =
- pCreateInfo->borderColor == VK_BORDER_COLOR_INT_OPAQUE_BLACK ?
- 1 : 0;
- break;
- case VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE:
- border_color[0] = border_color[1] = border_color[2] = border_color[3] = fui(1.0);
- break;
- case VK_BORDER_COLOR_INT_OPAQUE_WHITE:
- border_color[0] = border_color[1] = border_color[2] = border_color[3] = 1;
- break;
- case VK_BORDER_COLOR_FLOAT_CUSTOM_EXT:
- case VK_BORDER_COLOR_INT_CUSTOM_EXT:
- memcpy(border_color, pBorderColor->customBorderColor.int32, sizeof(uint32_t) * 4);
- break;
- default:
- unreachable("Invalid border color");
- }
-}
-
static mali_pixel_format
panvk_varying_hw_format(const struct panvk_device *dev,
const struct panvk_varyings_info *varyings,
panvk_per_arch(emit_sampler)(const VkSamplerCreateInfo *pCreateInfo,
void *desc)
{
- uint32_t border_color[4];
-
- panvk_translate_sampler_border_color(pCreateInfo, border_color);
+ VkClearColorValue border_color =
+ vk_sampler_border_color_value(pCreateInfo, NULL);
pan_pack(desc, SAMPLER, cfg) {
cfg.magnify_nearest = pCreateInfo->magFilter == VK_FILTER_NEAREST;
cfg.wrap_mode_t = panvk_translate_sampler_address_mode(pCreateInfo->addressModeV);
cfg.wrap_mode_r = panvk_translate_sampler_address_mode(pCreateInfo->addressModeW);
cfg.compare_function = panvk_per_arch(translate_sampler_compare_func)(pCreateInfo);
- cfg.border_color_r = border_color[0];
- cfg.border_color_g = border_color[1];
- cfg.border_color_b = border_color[2];
- cfg.border_color_a = border_color[3];
+ cfg.border_color_r = border_color.uint32[0];
+ cfg.border_color_g = border_color.uint32[1];
+ cfg.border_color_b = border_color.uint32[2];
+ cfg.border_color_a = border_color.uint32[3];
}
}