i965/blorp: Use the generic ISL path for texture surfaces on gen6
Signed-off-by: Jason Ekstrand <jason@jlekstrand.net> Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com> Reviewed-by: Chad Versace <chad.versace@intel.com>
This commit is contained in:
@@ -350,78 +350,6 @@ gen6_blorp_emit_cc_state_pointers(struct brw_context *brw,
|
||||
ADVANCE_BATCH();
|
||||
}
|
||||
|
||||
/* SURFACE_STATE for renderbuffer or texture surface (see
|
||||
* brw_update_renderbuffer_surface and brw_update_texture_surface)
|
||||
*/
|
||||
static uint32_t
|
||||
gen6_blorp_emit_surface_state(struct brw_context *brw,
|
||||
const struct brw_blorp_params *params,
|
||||
const struct brw_blorp_surface_info *surface,
|
||||
uint32_t read_domains, uint32_t write_domain)
|
||||
{
|
||||
uint32_t wm_surf_offset;
|
||||
uint32_t width = surface->width;
|
||||
uint32_t height = surface->height;
|
||||
if (surface->num_samples > 1) {
|
||||
/* Since gen6 uses INTEL_MSAA_LAYOUT_IMS, width and height are measured
|
||||
* in samples. But SURFACE_STATE wants them in pixels, so we need to
|
||||
* divide them each by 2.
|
||||
*/
|
||||
width /= 2;
|
||||
height /= 2;
|
||||
}
|
||||
struct intel_mipmap_tree *mt = surface->mt;
|
||||
uint32_t tile_x, tile_y;
|
||||
|
||||
uint32_t *surf = (uint32_t *)
|
||||
brw_state_batch(brw, AUB_TRACE_SURFACE_STATE, 6 * 4, 32,
|
||||
&wm_surf_offset);
|
||||
|
||||
surf[0] = (BRW_SURFACE_2D << BRW_SURFACE_TYPE_SHIFT |
|
||||
BRW_SURFACE_MIPMAPLAYOUT_BELOW << BRW_SURFACE_MIPLAYOUT_SHIFT |
|
||||
BRW_SURFACE_CUBEFACE_ENABLES |
|
||||
surface->brw_surfaceformat << BRW_SURFACE_FORMAT_SHIFT);
|
||||
|
||||
/* reloc */
|
||||
surf[1] = (brw_blorp_compute_tile_offsets(surface, &tile_x, &tile_y) +
|
||||
mt->bo->offset64);
|
||||
|
||||
surf[2] = (0 << BRW_SURFACE_LOD_SHIFT |
|
||||
(width - 1) << BRW_SURFACE_WIDTH_SHIFT |
|
||||
(height - 1) << BRW_SURFACE_HEIGHT_SHIFT);
|
||||
|
||||
uint32_t tiling = surface->map_stencil_as_y_tiled
|
||||
? BRW_SURFACE_TILED | BRW_SURFACE_TILED_Y
|
||||
: brw_get_surface_tiling_bits(mt->tiling);
|
||||
uint32_t pitch_bytes = mt->pitch;
|
||||
if (surface->map_stencil_as_y_tiled)
|
||||
pitch_bytes *= 2;
|
||||
surf[3] = (tiling |
|
||||
0 << BRW_SURFACE_DEPTH_SHIFT |
|
||||
(pitch_bytes - 1) << BRW_SURFACE_PITCH_SHIFT);
|
||||
|
||||
surf[4] = brw_get_surface_num_multisamples(surface->num_samples);
|
||||
|
||||
/* Note that the low bits of these fields are missing, so
|
||||
* there's the possibility of getting in trouble.
|
||||
*/
|
||||
assert(tile_x % 4 == 0);
|
||||
assert(tile_y % 2 == 0);
|
||||
surf[5] = ((tile_x / 4) << BRW_SURFACE_X_OFFSET_SHIFT |
|
||||
(tile_y / 2) << BRW_SURFACE_Y_OFFSET_SHIFT |
|
||||
(surface->mt->valign == 4 ?
|
||||
BRW_SURFACE_VERTICAL_ALIGN_ENABLE : 0));
|
||||
|
||||
/* Emit relocation to surface contents */
|
||||
drm_intel_bo_emit_reloc(brw->batch.bo,
|
||||
wm_surf_offset + 4,
|
||||
mt->bo,
|
||||
surf[1] - mt->bo->offset64,
|
||||
read_domains, write_domain);
|
||||
|
||||
return wm_surf_offset;
|
||||
}
|
||||
|
||||
|
||||
/* BINDING_TABLE. See brw_wm_binding_table(). */
|
||||
uint32_t
|
||||
@@ -1035,8 +963,8 @@ gen6_blorp_exec(struct brw_context *brw,
|
||||
I915_GEM_DOMAIN_RENDER, true);
|
||||
if (params->src.mt) {
|
||||
wm_surf_offset_texture =
|
||||
gen6_blorp_emit_surface_state(brw, params, ¶ms->src,
|
||||
I915_GEM_DOMAIN_SAMPLER, 0);
|
||||
brw_blorp_emit_surface_state(brw, ¶ms->src,
|
||||
I915_GEM_DOMAIN_SAMPLER, 0, false);
|
||||
}
|
||||
wm_bind_bo_offset =
|
||||
gen6_blorp_emit_binding_table(brw,
|
||||
|
Reference in New Issue
Block a user