+ case VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT: {
+ VkSamplerCustomBorderColorCreateInfoEXT *custom_border_color =
+ (VkSamplerCustomBorderColorCreateInfoEXT *) ext;
+ if (sampler->custom_border_color.map == NULL)
+ break;
+ struct gen8_border_color *cbc = sampler->custom_border_color.map;
+ if (custom_border_color->format == VK_FORMAT_B4G4R4A4_UNORM_PACK16) {
+ /* B4G4R4A4_UNORM_PACK16 is treated as R4G4B4A4_UNORM_PACK16 with
+ * a swizzle, but this does not carry over to the sampler for
+ * border colors, so we need to do the swizzle ourselves here.
+ */
+ cbc->uint32[0] = custom_border_color->customBorderColor.uint32[2];
+ cbc->uint32[1] = custom_border_color->customBorderColor.uint32[1];
+ cbc->uint32[2] = custom_border_color->customBorderColor.uint32[0];
+ cbc->uint32[3] = custom_border_color->customBorderColor.uint32[3];
+ } else {
+ /* Both structs share the same layout, so just copy them over. */
+ memcpy(cbc, &custom_border_color->customBorderColor,
+ sizeof(VkClearColorValue));
+ }
+ has_custom_color = true;
+ break;
+ }