i965/state: Use ISL for emitting image surfaces

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Chad Versace <chad.versace@intel.com>
This commit is contained in:
Jason Ekstrand 2016-06-09 11:45:44 -07:00
parent 7a21d1bfc3
commit 5a8c89038a
1 changed files with 22 additions and 11 deletions

View File

@ -1402,22 +1402,33 @@ update_image_surface(struct brw_context *brw,
access != GL_READ_ONLY);
} else {
const unsigned min_layer = obj->MinLayer + u->_Layer;
const unsigned min_level = obj->MinLevel + u->Level;
const unsigned num_layers = (!u->Layered ? 1 :
obj->Target == GL_TEXTURE_CUBE_MAP ? 6 :
mt->logical_depth0);
const GLenum target = (obj->Target == GL_TEXTURE_CUBE_MAP ||
obj->Target == GL_TEXTURE_CUBE_MAP_ARRAY ?
GL_TEXTURE_2D_ARRAY : obj->Target);
struct isl_view view = {
.format = format,
.base_level = obj->MinLevel + u->Level,
.levels = 1,
.base_array_layer = obj->MinLayer + u->_Layer,
.array_len = num_layers,
.channel_select = {
ISL_CHANNEL_SELECT_RED,
ISL_CHANNEL_SELECT_GREEN,
ISL_CHANNEL_SELECT_BLUE,
ISL_CHANNEL_SELECT_ALPHA,
},
.usage = ISL_SURF_USAGE_STORAGE_BIT,
};
const int surf_index = surf_offset - &brw->wm.base.surf_offset[0];
brw->vtbl.emit_texture_surface_state(
brw, mt, target,
min_layer, min_layer + num_layers,
min_level, min_level + 1,
format, SWIZZLE_XYZW,
surf_offset, surf_index, access != GL_READ_ONLY, false);
brw_emit_surface_state(brw, mt, &view,
surface_state_infos[brw->gen].rb_mocs, false,
surf_offset, surf_index,
I915_GEM_DOMAIN_SAMPLER,
access == GL_READ_ONLY ? 0 :
I915_GEM_DOMAIN_SAMPLER);
}
update_texture_image_param(brw, u, surface_idx, param);