i965/blorp: Add a fast_clear_op enum
Signed-off-by: Jason Ekstrand <jason@jlekstrand.net> Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
This commit is contained in:
@@ -145,7 +145,6 @@ brw_blorp_params_init(struct brw_blorp_params *params)
|
|||||||
{
|
{
|
||||||
memset(params, 0, sizeof(*params));
|
memset(params, 0, sizeof(*params));
|
||||||
params->hiz_op = GEN6_HIZ_OP_NONE;
|
params->hiz_op = GEN6_HIZ_OP_NONE;
|
||||||
params->fast_clear_op = 0;
|
|
||||||
params->num_draw_buffers = 1;
|
params->num_draw_buffers = 1;
|
||||||
params->num_layers = 1;
|
params->num_layers = 1;
|
||||||
}
|
}
|
||||||
|
@@ -109,7 +109,7 @@ blorp_fast_clear(struct blorp_batch *batch,
|
|||||||
params.y1 = y1;
|
params.y1 = y1;
|
||||||
|
|
||||||
memset(¶ms.wm_inputs, 0xff, 4*sizeof(float));
|
memset(¶ms.wm_inputs, 0xff, 4*sizeof(float));
|
||||||
params.fast_clear_op = GEN7_PS_RENDER_TARGET_FAST_CLEAR_ENABLE;
|
params.fast_clear_op = BLORP_FAST_CLEAR_OP_CLEAR;
|
||||||
|
|
||||||
brw_get_fast_clear_rect(batch->blorp->isl_dev, surf->aux_surf,
|
brw_get_fast_clear_rect(batch->blorp->isl_dev, surf->aux_surf,
|
||||||
¶ms.x0, ¶ms.y0, ¶ms.x1, ¶ms.y1);
|
¶ms.x0, ¶ms.y0, ¶ms.x1, ¶ms.y1);
|
||||||
@@ -184,10 +184,15 @@ brw_blorp_ccs_resolve(struct blorp_batch *batch,
|
|||||||
¶ms.x0, ¶ms.y0,
|
¶ms.x0, ¶ms.y0,
|
||||||
¶ms.x1, ¶ms.y1);
|
¶ms.x1, ¶ms.y1);
|
||||||
|
|
||||||
|
if (batch->blorp->isl_dev->info->gen >= 9) {
|
||||||
if (params.dst.aux_usage == ISL_AUX_USAGE_CCS_E)
|
if (params.dst.aux_usage == ISL_AUX_USAGE_CCS_E)
|
||||||
params.resolve_type = GEN9_PS_RENDER_TARGET_RESOLVE_FULL;
|
params.fast_clear_op = BLORP_FAST_CLEAR_OP_RESOLVE_FULL;
|
||||||
else
|
else
|
||||||
params.resolve_type = GEN7_PS_RENDER_TARGET_RESOLVE_ENABLE;
|
params.fast_clear_op = BLORP_FAST_CLEAR_OP_RESOLVE_PARTIAL;
|
||||||
|
} else {
|
||||||
|
/* Broadwell and earlier do not have a partial resolve */
|
||||||
|
params.fast_clear_op = BLORP_FAST_CLEAR_OP_RESOLVE_FULL;
|
||||||
|
}
|
||||||
|
|
||||||
/* Note: there is no need to initialize push constants because it doesn't
|
/* Note: there is no need to initialize push constants because it doesn't
|
||||||
* matter what data gets dispatched to the render target. However, we must
|
* matter what data gets dispatched to the render target. However, we must
|
||||||
|
@@ -42,6 +42,13 @@ enum {
|
|||||||
BLORP_NUM_BT_ENTRIES
|
BLORP_NUM_BT_ENTRIES
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum blorp_fast_clear_op {
|
||||||
|
BLORP_FAST_CLEAR_OP_NONE = 0,
|
||||||
|
BLORP_FAST_CLEAR_OP_CLEAR,
|
||||||
|
BLORP_FAST_CLEAR_OP_RESOLVE_PARTIAL,
|
||||||
|
BLORP_FAST_CLEAR_OP_RESOLVE_FULL,
|
||||||
|
};
|
||||||
|
|
||||||
struct brw_blorp_surface_info
|
struct brw_blorp_surface_info
|
||||||
{
|
{
|
||||||
struct isl_surf surf;
|
struct isl_surf surf;
|
||||||
@@ -168,10 +175,7 @@ struct brw_blorp_params
|
|||||||
struct brw_blorp_surface_info src;
|
struct brw_blorp_surface_info src;
|
||||||
struct brw_blorp_surface_info dst;
|
struct brw_blorp_surface_info dst;
|
||||||
enum gen6_hiz_op hiz_op;
|
enum gen6_hiz_op hiz_op;
|
||||||
union {
|
enum blorp_fast_clear_op fast_clear_op;
|
||||||
unsigned fast_clear_op;
|
|
||||||
unsigned resolve_type;
|
|
||||||
};
|
|
||||||
bool color_write_disable[4];
|
bool color_write_disable[4];
|
||||||
struct brw_blorp_wm_inputs wm_inputs;
|
struct brw_blorp_wm_inputs wm_inputs;
|
||||||
unsigned num_draw_buffers;
|
unsigned num_draw_buffers;
|
||||||
|
@@ -528,21 +528,25 @@ blorp_emit_ps_config(struct blorp_batch *batch,
|
|||||||
ps.MaximumNumberofThreadsPerPSD = 64 - 2;
|
ps.MaximumNumberofThreadsPerPSD = 64 - 2;
|
||||||
|
|
||||||
switch (params->fast_clear_op) {
|
switch (params->fast_clear_op) {
|
||||||
|
case BLORP_FAST_CLEAR_OP_NONE:
|
||||||
|
break;
|
||||||
#if GEN_GEN >= 9
|
#if GEN_GEN >= 9
|
||||||
case (1 << 6): /* GEN7_PS_RENDER_TARGET_RESOLVE_ENABLE */
|
case BLORP_FAST_CLEAR_OP_RESOLVE_PARTIAL:
|
||||||
ps.RenderTargetResolveType = RESOLVE_PARTIAL;
|
ps.RenderTargetResolveType = RESOLVE_PARTIAL;
|
||||||
break;
|
break;
|
||||||
case (3 << 6): /* GEN9_PS_RENDER_TARGET_RESOLVE_FULL */
|
case BLORP_FAST_CLEAR_OP_RESOLVE_FULL:
|
||||||
ps.RenderTargetResolveType = RESOLVE_FULL;
|
ps.RenderTargetResolveType = RESOLVE_FULL;
|
||||||
break;
|
break;
|
||||||
#else
|
#else
|
||||||
case (1 << 6): /* GEN7_PS_RENDER_TARGET_RESOLVE_ENABLE */
|
case BLORP_FAST_CLEAR_OP_RESOLVE_FULL:
|
||||||
ps.RenderTargetResolveEnable = true;
|
ps.RenderTargetResolveEnable = true;
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
case (1 << 8): /* GEN7_PS_RENDER_TARGET_FAST_CLEAR_ENABLE */
|
case BLORP_FAST_CLEAR_OP_CLEAR:
|
||||||
ps.RenderTargetFastClearEnable = true;
|
ps.RenderTargetFastClearEnable = true;
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
unreachable("Invalid fast clear op");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -627,12 +631,16 @@ blorp_emit_ps_config(struct blorp_batch *batch,
|
|||||||
ps.SamplerCount = 1; /* Up to 4 samplers */
|
ps.SamplerCount = 1; /* Up to 4 samplers */
|
||||||
|
|
||||||
switch (params->fast_clear_op) {
|
switch (params->fast_clear_op) {
|
||||||
case (1 << 6): /* GEN7_PS_RENDER_TARGET_RESOLVE_ENABLE */
|
case BLORP_FAST_CLEAR_OP_NONE:
|
||||||
|
break;
|
||||||
|
case BLORP_FAST_CLEAR_OP_RESOLVE_FULL:
|
||||||
ps.RenderTargetResolveEnable = true;
|
ps.RenderTargetResolveEnable = true;
|
||||||
break;
|
break;
|
||||||
case (1 << 8): /* GEN7_PS_RENDER_TARGET_FAST_CLEAR_ENABLE */
|
case BLORP_FAST_CLEAR_OP_CLEAR:
|
||||||
ps.RenderTargetFastClearEnable = true;
|
ps.RenderTargetFastClearEnable = true;
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
unreachable("Invalid fast clear op");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user