broadcom/vc5: Fix depth and stencil clear values.

I had misread the packet description: We always have a 32f depth, and a
separate u8 stencil.
This commit is contained in:
Eric Anholt 2017-09-28 11:41:31 -07:00
parent be11251e3c
commit 7f3b890697
4 changed files with 11 additions and 15 deletions

View file

@ -557,7 +557,7 @@
<packet code="121" name="Tile Rendering Mode Configuration (Z Stencil Clear Values)" cl="R">
<field name="unused" size="16" start="48" type="uint"/>
<field name="Z/S Clear Value" size="32" start="16" type="uint"/>
<field name="Z Clear Value" size="32" start="16" type="float"/>
<field name="Stencil/VG Mask Clear Value" size="8" start="8" type="uint"/>
<field name="sub-id" size="4" start="0" type="uint" default="3"/>

View file

@ -245,7 +245,8 @@ struct vc5_job {
*/
uint32_t resolve;
uint32_t clear_color[2];
uint32_t clear_zs; /**< 24-bit unorm depth/stencil */
float clear_z;
uint8_t clear_s;
/**
* Set if some drawing (triangles, blits, or just a glClear()) has

View file

@ -561,21 +561,15 @@ vc5_clear(struct pipe_context *pctx, unsigned buffers,
rsc->initialized_buffers |= (buffers & PIPE_CLEAR_COLOR0);
}
if (buffers & PIPE_CLEAR_DEPTHSTENCIL) {
unsigned zsclear = buffers & PIPE_CLEAR_DEPTHSTENCIL;
if (zsclear) {
struct vc5_resource *rsc =
vc5_resource(vc5->framebuffer.zsbuf->texture);
unsigned zsclear = buffers & PIPE_CLEAR_DEPTHSTENCIL;
if (buffers & PIPE_CLEAR_DEPTH) {
job->clear_zs |=
util_pack_z_stencil(PIPE_FORMAT_S8_UINT_Z24_UNORM,
depth, 0);
}
if (buffers & PIPE_CLEAR_STENCIL) {
job->clear_zs |=
util_pack_z_stencil(PIPE_FORMAT_S8_UINT_Z24_UNORM,
0, stencil);
}
if (zsclear & PIPE_CLEAR_DEPTH)
job->clear_z = depth;
if (zsclear & PIPE_CLEAR_STENCIL)
job->clear_s = stencil;
rsc->initialized_buffers |= zsclear;
}

View file

@ -182,7 +182,8 @@ vc5_emit_rcl(struct vc5_job *job)
/* Ends rendering mode config. */
cl_emit(&job->rcl, TILE_RENDERING_MODE_CONFIGURATION_Z_STENCIL_CLEAR_VALUES,
clear) {
clear.z_s_clear_value = job->clear_zs;
clear.z_clear_value = job->clear_z;
clear.stencil_vg_mask_clear_value = job->clear_s;
};
/* Always set initial block size before the first branch, which needs