mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 19:40:10 +01:00
anv: support VkExternalFormatANDROID in vkCreateSamplerYcbcrConversion
If external format is used, we store the external format identifier in
conversion to be used later when creating VkImageView.
v2: rebase to b43f955037 changes
v3: added assert, ignore components when creating external
format conversion (Lionel)
Signed-off-by: Tapani Pälli <tapani.palli@intel.com>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
This commit is contained in:
parent
f1654fa7e3
commit
c070b0e25f
1 changed files with 26 additions and 4 deletions
|
|
@ -1170,6 +1170,17 @@ VkResult anv_CreateSamplerYcbcrConversion(
|
|||
ANV_FROM_HANDLE(anv_device, device, _device);
|
||||
struct anv_ycbcr_conversion *conversion;
|
||||
|
||||
/* Search for VkExternalFormatANDROID and resolve the format. */
|
||||
struct anv_format *ext_format = NULL;
|
||||
const struct VkExternalFormatANDROID *ext_info =
|
||||
vk_find_struct_const(pCreateInfo->pNext, EXTERNAL_FORMAT_ANDROID);
|
||||
|
||||
uint64_t format = ext_info ? ext_info->externalFormat : 0;
|
||||
if (format) {
|
||||
assert(pCreateInfo->format == VK_FORMAT_UNDEFINED);
|
||||
ext_format = (struct anv_format *) (uintptr_t) format;
|
||||
}
|
||||
|
||||
assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO);
|
||||
|
||||
conversion = vk_alloc2(&device->alloc, pAllocator, sizeof(*conversion), 8,
|
||||
|
|
@ -1182,14 +1193,25 @@ VkResult anv_CreateSamplerYcbcrConversion(
|
|||
conversion->format = anv_get_format(pCreateInfo->format);
|
||||
conversion->ycbcr_model = pCreateInfo->ycbcrModel;
|
||||
conversion->ycbcr_range = pCreateInfo->ycbcrRange;
|
||||
conversion->mapping[0] = pCreateInfo->components.r;
|
||||
conversion->mapping[1] = pCreateInfo->components.g;
|
||||
conversion->mapping[2] = pCreateInfo->components.b;
|
||||
conversion->mapping[3] = pCreateInfo->components.a;
|
||||
|
||||
/* The Vulkan 1.1.95 spec says "When creating an external format conversion,
|
||||
* the value of components if ignored."
|
||||
*/
|
||||
if (!ext_format) {
|
||||
conversion->mapping[0] = pCreateInfo->components.r;
|
||||
conversion->mapping[1] = pCreateInfo->components.g;
|
||||
conversion->mapping[2] = pCreateInfo->components.b;
|
||||
conversion->mapping[3] = pCreateInfo->components.a;
|
||||
}
|
||||
|
||||
conversion->chroma_offsets[0] = pCreateInfo->xChromaOffset;
|
||||
conversion->chroma_offsets[1] = pCreateInfo->yChromaOffset;
|
||||
conversion->chroma_filter = pCreateInfo->chromaFilter;
|
||||
|
||||
/* Setup external format. */
|
||||
if (ext_format)
|
||||
conversion->format = ext_format;
|
||||
|
||||
bool has_chroma_subsampled = false;
|
||||
for (uint32_t p = 0; p < conversion->format->n_planes; p++) {
|
||||
if (conversion->format->planes[p].has_chroma &&
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue