radv: Add ycbcr conversion structs.
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
This commit is contained in:
parent
a837768857
commit
65c4f612aa
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -4837,6 +4837,10 @@ VkResult radv_CreateSampler(
|
|||
RADV_FROM_HANDLE(radv_device, device, _device);
|
||||
struct radv_sampler *sampler;
|
||||
|
||||
const struct VkSamplerYcbcrConversionInfo *ycbcr_conversion =
|
||||
vk_find_struct_const(pCreateInfo->pNext,
|
||||
SAMPLER_YCBCR_CONVERSION_INFO);
|
||||
|
||||
assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO);
|
||||
|
||||
sampler = vk_alloc2(&device->alloc, pAllocator, sizeof(*sampler), 8,
|
||||
|
@ -4845,6 +4849,8 @@ VkResult radv_CreateSampler(
|
|||
return vk_error(device->instance, VK_ERROR_OUT_OF_HOST_MEMORY);
|
||||
|
||||
radv_init_sampler(device, sampler, pCreateInfo);
|
||||
|
||||
sampler->ycbcr_sampler = ycbcr_conversion ? radv_sampler_ycbcr_conversion_from_handle(ycbcr_conversion->conversion): NULL;
|
||||
*pSampler = radv_sampler_to_handle(sampler);
|
||||
|
||||
return VK_SUCCESS;
|
||||
|
|
|
@ -1716,6 +1716,15 @@ void radv_image_view_init(struct radv_image_view *view,
|
|||
|
||||
VkFormat radv_get_aspect_format(struct radv_image *image, VkImageAspectFlags mask);
|
||||
|
||||
struct radv_sampler_ycbcr_conversion {
|
||||
VkFormat format;
|
||||
VkSamplerYcbcrModelConversion ycbcr_model;
|
||||
VkSamplerYcbcrRange ycbcr_range;
|
||||
VkComponentMapping components;
|
||||
VkChromaLocation chroma_offsets[2];
|
||||
VkFilter chroma_filter;
|
||||
};
|
||||
|
||||
struct radv_buffer_view {
|
||||
struct radeon_winsys_bo *bo;
|
||||
VkFormat vk_format;
|
||||
|
@ -1771,6 +1780,7 @@ radv_image_extent_compare(const struct radv_image *image,
|
|||
|
||||
struct radv_sampler {
|
||||
uint32_t state[4];
|
||||
struct radv_sampler_ycbcr_conversion *ycbcr_sampler;
|
||||
};
|
||||
|
||||
struct radv_color_buffer_info {
|
||||
|
@ -2041,6 +2051,7 @@ RADV_DEFINE_NONDISP_HANDLE_CASTS(radv_pipeline_layout, VkPipelineLayout)
|
|||
RADV_DEFINE_NONDISP_HANDLE_CASTS(radv_query_pool, VkQueryPool)
|
||||
RADV_DEFINE_NONDISP_HANDLE_CASTS(radv_render_pass, VkRenderPass)
|
||||
RADV_DEFINE_NONDISP_HANDLE_CASTS(radv_sampler, VkSampler)
|
||||
RADV_DEFINE_NONDISP_HANDLE_CASTS(radv_sampler_ycbcr_conversion, VkSamplerYcbcrConversion)
|
||||
RADV_DEFINE_NONDISP_HANDLE_CASTS(radv_shader_module, VkShaderModule)
|
||||
RADV_DEFINE_NONDISP_HANDLE_CASTS(radv_semaphore, VkSemaphore)
|
||||
|
||||
|
|
Loading…
Reference in New Issue