i965/skl: skip fast clears for certain surface formats
Some of the information originally in this commit message is now in the patch before this. SKL adds compressible render targets and as a result mutates some of the programming for fast clears and resolves. There is a new internal surface type called the CCS. The old AUX_MCS bit becomes AUX_CCS_D. "Auxiliary Surfaces For Sampled Tiled Resource". The formats which are supported are defined in the table titled "Render Target Surface Types [SKL+]". There is no PRM yet to reference. The previously implemented helper function already does the right thing provided the table is correct. v2: Use better English in commit message (Matt) s/compressable/compressible/ (Matt) Don't compare bools to true (Matt) Use the helper function and don't increase the context size - this is mostly implemented in the patch just before this (Chad, Neil) Remove an "invalid" assert (Chad) Fix assertion to check num_samples > 1, instead of num_samples (Chad) v3: Use Matt's code as Requested-by: Chad. I didn't even look at it since Chad said he was fine with that, and presumably Matt is fine with it. v4: Use better quote from spec (Topi) Cc: Chad Versace <chad.versace@intel.com> Signed-off-by: Ben Widawsky <ben@bwidawsk.net> Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
This commit is contained in:
parent
9d94eeb8a4
commit
6fa1130cd2
|
@ -90,9 +90,9 @@ struct surface_format_info {
|
|||
*/
|
||||
const struct surface_format_info surface_formats[] = {
|
||||
/* smpl filt shad CK RT AB VB SO color ccs_e */
|
||||
SF( Y, 50, x, x, Y, Y, Y, Y, x, x, R32G32B32A32_FLOAT)
|
||||
SF( Y, x, x, x, Y, x, Y, Y, x, x, R32G32B32A32_SINT)
|
||||
SF( Y, x, x, x, Y, x, Y, Y, x, x, R32G32B32A32_UINT)
|
||||
SF( Y, 50, x, x, Y, Y, Y, Y, x, 90, R32G32B32A32_FLOAT)
|
||||
SF( Y, x, x, x, Y, x, Y, Y, x, 90, R32G32B32A32_SINT)
|
||||
SF( Y, x, x, x, Y, x, Y, Y, x, 90, R32G32B32A32_UINT)
|
||||
SF( x, x, x, x, x, x, Y, x, x, x, R32G32B32A32_UNORM)
|
||||
SF( x, x, x, x, x, x, Y, x, x, x, R32G32B32A32_SNORM)
|
||||
SF( x, x, x, x, x, x, Y, x, x, x, R64G64_FLOAT)
|
||||
|
@ -109,15 +109,15 @@ const struct surface_format_info surface_formats[] = {
|
|||
SF( x, x, x, x, x, x, Y, x, x, x, R32G32B32_SSCALED)
|
||||
SF( x, x, x, x, x, x, Y, x, x, x, R32G32B32_USCALED)
|
||||
SF( x, x, x, x, x, x, x, x, x, x, R32G32B32_SFIXED)
|
||||
SF( Y, Y, x, x, Y, 45, Y, x, 60, x, R16G16B16A16_UNORM)
|
||||
SF( Y, Y, x, x, Y, 60, Y, x, x, x, R16G16B16A16_SNORM)
|
||||
SF( Y, x, x, x, Y, x, Y, x, x, x, R16G16B16A16_SINT)
|
||||
SF( Y, x, x, x, Y, x, Y, x, x, x, R16G16B16A16_UINT)
|
||||
SF( Y, Y, x, x, Y, Y, Y, x, x, x, R16G16B16A16_FLOAT)
|
||||
SF( Y, 50, x, x, Y, Y, Y, Y, x, x, R32G32_FLOAT)
|
||||
SF( Y, Y, x, x, Y, 45, Y, x, 60, 90, R16G16B16A16_UNORM)
|
||||
SF( Y, Y, x, x, Y, 60, Y, x, x, 90, R16G16B16A16_SNORM)
|
||||
SF( Y, x, x, x, Y, x, Y, x, x, 90, R16G16B16A16_SINT)
|
||||
SF( Y, x, x, x, Y, x, Y, x, x, 90, R16G16B16A16_UINT)
|
||||
SF( Y, Y, x, x, Y, Y, Y, x, x, 90, R16G16B16A16_FLOAT)
|
||||
SF( Y, 50, x, x, Y, Y, Y, Y, x, 90, R32G32_FLOAT)
|
||||
SF( Y, 70, x, x, Y, Y, Y, Y, x, x, R32G32_FLOAT_LD)
|
||||
SF( Y, x, x, x, Y, x, Y, Y, x, x, R32G32_SINT)
|
||||
SF( Y, x, x, x, Y, x, Y, Y, x, x, R32G32_UINT)
|
||||
SF( Y, x, x, x, Y, x, Y, Y, x, 90, R32G32_SINT)
|
||||
SF( Y, x, x, x, Y, x, Y, Y, x, 90, R32G32_UINT)
|
||||
SF( Y, 50, Y, x, x, x, x, x, x, x, R32_FLOAT_X8X24_TYPELESS)
|
||||
SF( Y, x, x, x, x, x, x, x, x, x, X32_TYPELESS_G8X24_UINT)
|
||||
SF( Y, 50, x, x, x, x, x, x, x, x, L32A32_FLOAT)
|
||||
|
@ -125,7 +125,7 @@ const struct surface_format_info surface_formats[] = {
|
|||
SF( x, x, x, x, x, x, Y, x, x, x, R32G32_SNORM)
|
||||
SF( x, x, x, x, x, x, Y, x, x, x, R64_FLOAT)
|
||||
SF( Y, Y, x, x, x, x, x, x, x, x, R16G16B16X16_UNORM)
|
||||
SF( Y, Y, x, x, x, x, x, x, x, x, R16G16B16X16_FLOAT)
|
||||
SF( Y, Y, x, x, x, x, x, x, x, 90, R16G16B16X16_FLOAT)
|
||||
SF( Y, 50, x, x, x, x, x, x, x, x, A32X32_FLOAT)
|
||||
SF( Y, 50, x, x, x, x, x, x, x, x, L32X32_FLOAT)
|
||||
SF( Y, 50, x, x, x, x, x, x, x, x, I32X32_FLOAT)
|
||||
|
@ -135,29 +135,29 @@ const struct surface_format_info surface_formats[] = {
|
|||
SF( x, x, x, x, x, x, Y, x, x, x, R32G32_USCALED)
|
||||
SF( x, x, x, x, x, x, x, x, x, x, R32G32_SFIXED)
|
||||
SF( x, x, x, x, x, x, x, x, x, x, R64_PASSTHRU)
|
||||
SF( Y, Y, x, Y, Y, Y, Y, x, 60, x, B8G8R8A8_UNORM)
|
||||
SF( Y, Y, x, Y, Y, Y, Y, x, 60, 90, B8G8R8A8_UNORM)
|
||||
SF( Y, Y, x, x, Y, Y, x, x, x, x, B8G8R8A8_UNORM_SRGB)
|
||||
/* smpl filt shad CK RT AB VB SO color ccs_e */
|
||||
SF( Y, Y, x, x, Y, Y, Y, x, 60, x, R10G10B10A2_UNORM)
|
||||
SF( Y, Y, x, x, x, x, x, x, 60, x, R10G10B10A2_UNORM_SRGB)
|
||||
SF( Y, x, x, x, Y, x, Y, x, x, x, R10G10B10A2_UINT)
|
||||
SF( Y, Y, x, x, x, Y, Y, x, x, x, R10G10B10_SNORM_A2_UNORM)
|
||||
SF( Y, Y, x, x, Y, Y, Y, x, 60, x, R8G8B8A8_UNORM)
|
||||
SF( Y, Y, x, x, Y, Y, Y, x, 60, 90, R8G8B8A8_UNORM)
|
||||
SF( Y, Y, x, x, Y, Y, x, x, 60, x, R8G8B8A8_UNORM_SRGB)
|
||||
SF( Y, Y, x, x, Y, 60, Y, x, x, x, R8G8B8A8_SNORM)
|
||||
SF( Y, x, x, x, Y, x, Y, x, x, x, R8G8B8A8_SINT)
|
||||
SF( Y, x, x, x, Y, x, Y, x, x, x, R8G8B8A8_UINT)
|
||||
SF( Y, Y, x, x, Y, 45, Y, x, x, x, R16G16_UNORM)
|
||||
SF( Y, Y, x, x, Y, 60, Y, x, x, x, R16G16_SNORM)
|
||||
SF( Y, x, x, x, Y, x, Y, x, x, x, R16G16_SINT)
|
||||
SF( Y, x, x, x, Y, x, Y, x, x, x, R16G16_UINT)
|
||||
SF( Y, Y, x, x, Y, Y, Y, x, x, x, R16G16_FLOAT)
|
||||
SF( Y, Y, x, x, Y, 60, Y, x, x, 90, R8G8B8A8_SNORM)
|
||||
SF( Y, x, x, x, Y, x, Y, x, x, 90, R8G8B8A8_SINT)
|
||||
SF( Y, x, x, x, Y, x, Y, x, x, 90, R8G8B8A8_UINT)
|
||||
SF( Y, Y, x, x, Y, 45, Y, x, x, 90, R16G16_UNORM)
|
||||
SF( Y, Y, x, x, Y, 60, Y, x, x, 90, R16G16_SNORM)
|
||||
SF( Y, x, x, x, Y, x, Y, x, x, 90, R16G16_SINT)
|
||||
SF( Y, x, x, x, Y, x, Y, x, x, 90, R16G16_UINT)
|
||||
SF( Y, Y, x, x, Y, Y, Y, x, x, 90, R16G16_FLOAT)
|
||||
SF( Y, Y, x, x, Y, Y, x, x, 60, x, B10G10R10A2_UNORM)
|
||||
SF( Y, Y, x, x, Y, Y, x, x, 60, x, B10G10R10A2_UNORM_SRGB)
|
||||
SF( Y, Y, x, x, Y, Y, Y, x, x, x, R11G11B10_FLOAT)
|
||||
SF( Y, x, x, x, Y, x, Y, Y, x, x, R32_SINT)
|
||||
SF( Y, x, x, x, Y, x, Y, Y, x, x, R32_UINT)
|
||||
SF( Y, 50, Y, x, Y, Y, Y, Y, x, x, R32_FLOAT)
|
||||
SF( Y, x, x, x, Y, x, Y, Y, x, 90, R32_SINT)
|
||||
SF( Y, x, x, x, Y, x, Y, Y, x, 90, R32_UINT)
|
||||
SF( Y, 50, Y, x, Y, Y, Y, Y, x, 90, R32_FLOAT)
|
||||
SF( Y, 50, Y, x, x, x, x, x, x, x, R24_UNORM_X8_TYPELESS)
|
||||
SF( Y, x, x, x, x, x, x, x, x, x, X24_TYPELESS_G8_UINT)
|
||||
SF( Y, Y, x, x, x, x, x, x, x, x, L16A16_UNORM)
|
||||
|
@ -167,7 +167,7 @@ const struct surface_format_info surface_formats[] = {
|
|||
SF( Y, 50, Y, x, x, x, x, x, x, x, I32_FLOAT)
|
||||
SF( Y, 50, Y, x, x, x, x, x, x, x, L32_FLOAT)
|
||||
SF( Y, 50, Y, x, x, x, x, x, x, x, A32_FLOAT)
|
||||
SF( Y, Y, x, Y, x, x, x, x, 60, x, B8G8R8X8_UNORM)
|
||||
SF( Y, Y, x, Y, x, x, x, x, 60, 90, B8G8R8X8_UNORM)
|
||||
SF( Y, Y, x, x, x, x, x, x, x, x, B8G8R8X8_UNORM_SRGB)
|
||||
SF( Y, Y, x, x, x, x, x, x, x, x, R8G8B8X8_UNORM)
|
||||
SF( Y, Y, x, x, x, x, x, x, x, x, R8G8B8X8_UNORM_SRGB)
|
||||
|
|
|
@ -222,6 +222,7 @@ gen8_emit_texture_surface_state(struct brw_context *brw,
|
|||
int surf_index = surf_offset - &brw->wm.base.surf_offset[0];
|
||||
unsigned tiling_mode, pitch;
|
||||
const unsigned tr_mode = surface_tiling_resource_mode(mt->tr_mode);
|
||||
const uint32_t surf_type = translate_tex_target(target);
|
||||
|
||||
if (mt->format == MESA_FORMAT_S_UINT8) {
|
||||
tiling_mode = GEN8_SURFACE_TILING_W;
|
||||
|
@ -245,9 +246,14 @@ gen8_emit_texture_surface_state(struct brw_context *brw,
|
|||
*/
|
||||
if (brw->gen >= 9 || mt->num_samples == 1)
|
||||
assert(mt->halign == 16);
|
||||
|
||||
if (brw->gen >= 9) {
|
||||
assert(mt->num_samples > 1 ||
|
||||
brw_losslessly_compressible_format(brw, surf_type));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
const uint32_t surf_type = translate_tex_target(target);
|
||||
uint32_t *surf = allocate_surface_state(brw, surf_offset, surf_index);
|
||||
|
||||
surf[0] = SET_FIELD(surf_type, BRW_SURFACE_TYPE) |
|
||||
|
|
Loading…
Reference in New Issue