radv: Enable YCBCR conversion feature.
[mesa.git] / src / amd / vulkan / radv_private.h
index 852dfd259c601db952ab7e8cbd9755ffb0b641c8..352072f8ff3f176f4df93889c76083066fcb127e 100644 (file)
@@ -809,7 +809,8 @@ struct radv_descriptor_update_template_entry {
        uint32_t buffer_offset;
 
        /* Only valid for combined image samplers and samplers */
-       uint16_t has_sampler;
+       uint8_t has_sampler;
+       uint8_t sampler_offset;
 
        /* In bytes */
        size_t src_offset;
@@ -1670,6 +1671,16 @@ radv_init_metadata(struct radv_device *device,
                   struct radv_image *image,
                   struct radeon_bo_metadata *metadata);
 
+union radv_descriptor {
+       struct {
+               uint32_t plane0_descriptor[8];
+               uint32_t fmask_descriptor[8];
+       };
+       struct {
+               uint32_t plane_descriptors[3][8];
+       };
+};
+
 struct radv_image_view {
        struct radv_image *image; /**< VkImageViewCreateInfo::image */
        struct radeon_winsys_bo *bo;
@@ -1678,18 +1689,19 @@ struct radv_image_view {
        VkImageAspectFlags aspect_mask;
        VkFormat vk_format;
        unsigned plane_id;
+       bool multiple_planes;
        uint32_t base_layer;
        uint32_t layer_count;
        uint32_t base_mip;
        uint32_t level_count;
        VkExtent3D extent; /**< Extent of VkImageViewCreateInfo::baseMipLevel. */
 
-       uint32_t descriptor[16];
+       union radv_descriptor descriptor;
 
        /* Descriptor for use as a storage image as opposed to a sampled image.
         * This has a few differences for cube maps (e.g. type).
         */
-       uint32_t storage_descriptor[16];
+       union radv_descriptor storage_descriptor;
 };
 
 struct radv_image_create_info {
@@ -1716,6 +1728,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 +1792,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 +2063,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)