aboutsummaryrefslogtreecommitdiffstats
path: root/src/intel/vulkan/anv_nir_lower_ycbcr_textures.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/intel/vulkan/anv_nir_lower_ycbcr_textures.c')
-rw-r--r--src/intel/vulkan/anv_nir_lower_ycbcr_textures.c50
1 files changed, 27 insertions, 23 deletions
diff --git a/src/intel/vulkan/anv_nir_lower_ycbcr_textures.c b/src/intel/vulkan/anv_nir_lower_ycbcr_textures.c
index 0567a1be939..799749d5db0 100644
--- a/src/intel/vulkan/anv_nir_lower_ycbcr_textures.c
+++ b/src/intel/vulkan/anv_nir_lower_ycbcr_textures.c
@@ -79,36 +79,40 @@ chroma_range(nir_builder *b,
}
}
-static const nir_const_value *
+typedef struct nir_const_value_3_4 {
+ nir_const_value v[3][4];
+} nir_const_value_3_4;
+
+static const nir_const_value_3_4 *
ycbcr_model_to_rgb_matrix(VkSamplerYcbcrModelConversion model)
{
switch (model) {
case VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601: {
- static const nir_const_value bt601[3] = {
- { .f32 = { 1.402f, 1.0f, 0.0f, 0.0f } },
- { .f32 = { -0.714136286201022f, 1.0f, -0.344136286201022f, 0.0f } },
- { .f32 = { 0.0f, 1.0f, 1.772f, 0.0f } }
- };
+ static const nir_const_value_3_4 bt601 = { {
+ { { .f32 = 1.402f }, { .f32 = 1.0f }, { .f32 = 0.0f }, { .f32 = 0.0f } },
+ { { .f32 = -0.714136286201022f }, { .f32 = 1.0f }, { .f32 = -0.344136286201022f }, { .f32 = 0.0f } },
+ { { .f32 = 0.0f }, { .f32 = 1.0f }, { .f32 = 1.772f }, { .f32 = 0.0f } },
+ } };
- return bt601;
+ return &bt601;
}
case VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709: {
- static const nir_const_value bt709[3] = {
- { .f32 = { 1.5748031496063f, 1.0f, 0.0, 0.0f } },
- { .f32 = { -0.468125209181067f, 1.0f, -0.187327487470334f, 0.0f } },
- { .f32 = { 0.0f, 1.0f, 1.85563184264242f, 0.0f } }
- };
+ static const nir_const_value_3_4 bt709 = { {
+ { { .f32 = 1.5748031496063f }, { .f32 = 1.0f }, { .f32 = 0.0f }, { .f32 = 0.0f } },
+ { { .f32 = -0.468125209181067f }, { .f32 = 1.0f }, { .f32 = -0.187327487470334f }, { .f32 = 0.0f } },
+ { { .f32 = 0.0f }, { .f32 = 1.0f }, { .f32 = 1.85563184264242f }, { .f32 = 0.0f } },
+ } };
- return bt709;
+ return &bt709;
}
case VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020: {
- static const nir_const_value bt2020[3] = {
- { .f32 = { 1.4746f, 1.0f, 0.0f, 0.0f } },
- { .f32 = { -0.571353126843658f, 1.0f, -0.164553126843658f, 0.0f } },
- { .f32 = { 0.0f, 1.0f, 1.8814f, 0.0f } }
- };
+ static const nir_const_value_3_4 bt2020 = { {
+ { { .f32 = 1.4746f }, { .f32 = 1.0f }, { .f32 = 0.0f }, { .f32 = 0.0f } },
+ { { .f32 = -0.571353126843658f }, { .f32 = 1.0f }, { .f32 = -0.164553126843658f }, { .f32 = 0.0f } },
+ { { .f32 = 0.0f }, { .f32 = 1.0f }, { .f32 = 1.8814f }, { .f32 = 0.0f } },
+ } };
- return bt2020;
+ return &bt2020;
}
default:
unreachable("missing Ycbcr model");
@@ -137,13 +141,13 @@ convert_ycbcr(struct ycbcr_state *state,
if (conversion->ycbcr_model == VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY)
return expanded_channels;
- const nir_const_value *conversion_matrix =
+ const nir_const_value_3_4 *conversion_matrix =
ycbcr_model_to_rgb_matrix(conversion->ycbcr_model);
nir_ssa_def *converted_channels[] = {
- nir_fdot4(b, expanded_channels, nir_build_imm(b, 4, 32, conversion_matrix[0])),
- nir_fdot4(b, expanded_channels, nir_build_imm(b, 4, 32, conversion_matrix[1])),
- nir_fdot4(b, expanded_channels, nir_build_imm(b, 4, 32, conversion_matrix[2]))
+ nir_fdot4(b, expanded_channels, nir_build_imm(b, 4, 32, conversion_matrix->v[0])),
+ nir_fdot4(b, expanded_channels, nir_build_imm(b, 4, 32, conversion_matrix->v[1])),
+ nir_fdot4(b, expanded_channels, nir_build_imm(b, 4, 32, conversion_matrix->v[2]))
};
return nir_vec4(b,