diff options
author | Bas Nieuwenhuizen <[email protected]> | 2018-12-02 23:58:58 +0100 |
---|---|---|
committer | Bas Nieuwenhuizen <[email protected]> | 2019-04-25 19:56:20 +0000 |
commit | 65c4f612aa21008a7140d3d6399832b58374e6c3 (patch) | |
tree | 10ed1205eb21a10caa54aa991665528a097e69aa /src/amd/vulkan/radv_descriptor_set.c | |
parent | a83776885705543ef6ecb9cee864f5ac68a89aa9 (diff) |
radv: Add ycbcr conversion structs.
Reviewed-by: Samuel Pitoiset <[email protected]>
Diffstat (limited to 'src/amd/vulkan/radv_descriptor_set.c')
-rw-r--r-- | src/amd/vulkan/radv_descriptor_set.c | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/src/amd/vulkan/radv_descriptor_set.c b/src/amd/vulkan/radv_descriptor_set.c index 6c6b88a4553..7374f94d260 100644 --- a/src/amd/vulkan/radv_descriptor_set.c +++ b/src/amd/vulkan/radv_descriptor_set.c @@ -1216,19 +1216,40 @@ void radv_UpdateDescriptorSetWithTemplate(VkDevice _device, } -VkResult radv_CreateSamplerYcbcrConversion(VkDevice device, +VkResult radv_CreateSamplerYcbcrConversion(VkDevice _device, const VkSamplerYcbcrConversionCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSamplerYcbcrConversion* pYcbcrConversion) { - *pYcbcrConversion = VK_NULL_HANDLE; + RADV_FROM_HANDLE(radv_device, device, _device); + struct radv_sampler_ycbcr_conversion *conversion = NULL; + + conversion = vk_zalloc2(&device->alloc, pAllocator, sizeof(*conversion), 8, + VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); + + if (conversion == NULL) + return vk_error(device->instance, VK_ERROR_OUT_OF_HOST_MEMORY); + + conversion->format = pCreateInfo->format; + conversion->ycbcr_model = pCreateInfo->ycbcrModel; + conversion->ycbcr_range = pCreateInfo->ycbcrRange; + conversion->components = pCreateInfo->components; + conversion->chroma_offsets[0] = pCreateInfo->xChromaOffset; + conversion->chroma_offsets[1] = pCreateInfo->yChromaOffset; + conversion->chroma_filter = pCreateInfo->chromaFilter; + + *pYcbcrConversion = radv_sampler_ycbcr_conversion_to_handle(conversion); return VK_SUCCESS; } -void radv_DestroySamplerYcbcrConversion(VkDevice device, +void radv_DestroySamplerYcbcrConversion(VkDevice _device, VkSamplerYcbcrConversion ycbcrConversion, const VkAllocationCallbacks* pAllocator) { - /* Do nothing. */ + RADV_FROM_HANDLE(radv_device, device, _device); + RADV_FROM_HANDLE(radv_sampler_ycbcr_conversion, ycbcr_conversion, ycbcrConversion); + + if (ycbcr_conversion) + vk_free2(&device->alloc, pAllocator, ycbcr_conversion); } |