* For Sandybridge, which shader w/a we need for gather quirks.
*/
enum gen6_gather_sampler_wa gen6_gather_wa[MAX_SAMPLERS];
+
+ /**
+ * Texture units that have a YUV image bound.
+ */
+ uint32_t y_u_v_image_mask;
+ uint32_t y_uv_image_mask;
+ uint32_t yx_xuxv_image_mask;
};
tex_options.swizzles[s][c] = GET_SWZ(key_tex->swizzles[s], c);
}
+ tex_options.lower_y_uv_external = key_tex->y_uv_image_mask;
+ tex_options.lower_y_u_v_external = key_tex->y_u_v_image_mask;
+ tex_options.lower_yx_xuxv_external = key_tex->yx_xuxv_image_mask;
+
if (nir_lower_tex(nir, &tex_options)) {
nir_validate_shader(nir);
nir = nir_optimize(nir, is_scalar);
#include "program/prog_parameter.h"
#include "program/program.h"
#include "intel_mipmap_tree.h"
+#include "intel_image.h"
#include "brw_nir.h"
#include "brw_program.h"
old_key->msaa_16,
key->msaa_16);
+ found |= key_debug(brw, "y_uv image bound",
+ old_key->y_uv_image_mask,
+ key->y_uv_image_mask);
+ found |= key_debug(brw, "y_u_v image bound",
+ old_key->y_u_v_image_mask,
+ key->y_u_v_image_mask);
+ found |= key_debug(brw, "yx_xuxv image bound",
+ old_key->yx_xuxv_image_mask,
+ key->yx_xuxv_image_mask);
+
for (unsigned int i = 0; i < MAX_SAMPLERS; i++) {
found |= key_debug(brw, "textureGather workarounds",
old_key->gen6_gather_wa[i], key->gen6_gather_wa[i]);
key->msaa_16 |= 1 << s;
}
}
+
+ if (t->Target == GL_TEXTURE_EXTERNAL_OES && intel_tex->planar_format) {
+ switch (intel_tex->planar_format->components) {
+ case __DRI_IMAGE_COMPONENTS_Y_UV:
+ key->y_uv_image_mask |= 1 << s;
+ break;
+ case __DRI_IMAGE_COMPONENTS_Y_U_V:
+ key->y_u_v_image_mask |= 1 << s;
+ break;
+ case __DRI_IMAGE_COMPONENTS_Y_XUXV:
+ key->yx_xuxv_image_mask |= 1 << s;
+ break;
+ default:
+ break;
+ }
+ }
+
}
}
}