i965: Invoke lowering pass for YUV textures
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
This commit is contained in:

committed by
Kristian Høgsberg Kristensen

parent
44997fc0c1
commit
654e950cba
@@ -159,6 +159,13 @@ struct brw_sampler_prog_key_data {
|
|||||||
* For Sandybridge, which shader w/a we need for gather quirks.
|
* For Sandybridge, which shader w/a we need for gather quirks.
|
||||||
*/
|
*/
|
||||||
enum gen6_gather_sampler_wa gen6_gather_wa[MAX_SAMPLERS];
|
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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@@ -627,6 +627,10 @@ brw_nir_apply_sampler_key(nir_shader *nir,
|
|||||||
tex_options.swizzles[s][c] = GET_SWZ(key_tex->swizzles[s], c);
|
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)) {
|
if (nir_lower_tex(nir, &tex_options)) {
|
||||||
nir_validate_shader(nir);
|
nir_validate_shader(nir);
|
||||||
nir = nir_optimize(nir, is_scalar);
|
nir = nir_optimize(nir, is_scalar);
|
||||||
|
@@ -35,6 +35,7 @@
|
|||||||
#include "program/prog_parameter.h"
|
#include "program/prog_parameter.h"
|
||||||
#include "program/program.h"
|
#include "program/program.h"
|
||||||
#include "intel_mipmap_tree.h"
|
#include "intel_mipmap_tree.h"
|
||||||
|
#include "intel_image.h"
|
||||||
#include "brw_nir.h"
|
#include "brw_nir.h"
|
||||||
#include "brw_program.h"
|
#include "brw_program.h"
|
||||||
|
|
||||||
@@ -207,6 +208,16 @@ brw_debug_recompile_sampler_key(struct brw_context *brw,
|
|||||||
old_key->msaa_16,
|
old_key->msaa_16,
|
||||||
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++) {
|
for (unsigned int i = 0; i < MAX_SAMPLERS; i++) {
|
||||||
found |= key_debug(brw, "textureGather workarounds",
|
found |= key_debug(brw, "textureGather workarounds",
|
||||||
old_key->gen6_gather_wa[i], key->gen6_gather_wa[i]);
|
old_key->gen6_gather_wa[i], key->gen6_gather_wa[i]);
|
||||||
@@ -371,6 +382,23 @@ brw_populate_sampler_prog_key_data(struct gl_context *ctx,
|
|||||||
key->msaa_16 |= 1 << s;
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -396,6 +396,9 @@ intel_image_target_texture_2d(struct gl_context *ctx, GLenum target,
|
|||||||
if (mt == NULL)
|
if (mt == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
struct intel_texture_object *intel_texobj = intel_texture_object(texObj);
|
||||||
|
intel_texobj->planar_format = image->planar_format;
|
||||||
|
|
||||||
intel_set_texture_image_mt(brw, texImage, mt);
|
intel_set_texture_image_mt(brw, texImage, mt);
|
||||||
intel_miptree_release(&mt);
|
intel_miptree_release(&mt);
|
||||||
}
|
}
|
||||||
|
@@ -58,6 +58,8 @@ struct intel_texture_object
|
|||||||
* since the mt is shared across views with differing formats.
|
* since the mt is shared across views with differing formats.
|
||||||
*/
|
*/
|
||||||
mesa_format _Format;
|
mesa_format _Format;
|
||||||
|
|
||||||
|
const struct intel_image_format *planar_format;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user