<div dir="ltr"><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small"><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Feb 7, 2018 at 11:22 AM, Kenneth Graunke <span dir="ltr"><<a href="mailto:kenneth@whitecape.org" target="_blank">kenneth@whitecape.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Tuesday, February 6, 2018 4:38:00 PM PST Nanley Chery wrote:<br>
> On Mon, Feb 05, 2018 at 04:08:40PM -0800, Anuj Phogat wrote:<br>
> > Signed-off-by: Anuj Phogat <<a href="mailto:anuj.phogat@gmail.com">anuj.phogat@gmail.com</a>><br>
> > ---<br>
> >  src/mesa/drivers/dri/i965/<wbr>genX_state_upload.c | 3 ++-<br>
> >  1 file changed, 2 insertions(+), 1 deletion(-)<br>
> ><br>
> > diff --git a/src/mesa/drivers/dri/i965/<wbr>genX_state_upload.c b/src/mesa/drivers/dri/i965/<wbr>genX_state_upload.c<br>
> > index aa4d64d08e..67fb328dbc 100644<br>
> > --- a/src/mesa/drivers/dri/i965/<wbr>genX_state_upload.c<br>
> > +++ b/src/mesa/drivers/dri/i965/<wbr>genX_state_upload.c<br>
> > @@ -3966,7 +3966,8 @@ genX(upload_ds_state)(struct brw_context *brw)<br>
> >             tes_prog_data->domain == BRW_TESS_DOMAIN_TRI;<br>
> ><br>
> >  #if GEN_GEN >= 8<br>
> > -        if (vue_prog_data->dispatch_mode == DISPATCH_MODE_SIMD8)<br>
> > +        if (vue_prog_data &&<br>
> > +            vue_prog_data->dispatch_mode == DISPATCH_MODE_SIMD8)<br>
><br>
> In this else case (where tes_prog_data != NULL) this variable is also<br>
> guaranteed to be non-NULL. They point to the same location in memory as<br>
> far as I can tell.<br>
<br>
</span>NAK on this patch.  The if (!tes_prog_data) {...} else { surrounding<br>
this code guarantees that tes_prog_data != NULL, which also means that<br>
vue_prog_data != NULL.<br></blockquote><div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">​Right. Dropping this patch.​</div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<span class=""><br>
> Though, what I find confusing is that we can simultaneously access<br>
> fields of struct brw_tes_prog_data as well as struct brw_vue_prog_data<br>
> even though neither is a subclass of the other.<br>
<br>
</span>The class hierarchy is:<br>
<br>
  brw_stage_prog_data -> brw_vue_prog_data -> brw_vs_prog_data<br>
                                           -> brw_tcs_prog_data<br>
                                           -> brw_tes_prog_data<br>
                                           -> brw_gs_prog_data<br>
                      -> brw_wm_prog_data<br>
                      -> brw_cs_prog_data<br>
<br>
This is done in the traditional C style of embedding the base object<br>
as the first member in the struct.  So, you can safely cast between<br>
brw_stage_prog_data, brw_vue_prog_data, and brw_tes_prog_data for a<br>
tessellation evaluation shader.<br>
<span class="im HOEnZb"><br>
> >             ds.DispatchMode = DISPATCH_MODE_SIMD8_SINGLE_<wbr>PATCH;<br>
> >          ds.<wbr>UserClipDistanceCullTestEnable<wbr>Bitmask =<br>
> >              vue_prog_data->cull_distance_<wbr>mask;<br>
</span><div class="HOEnZb"><div class="h5">> ______________________________<wbr>_________________<br>
> mesa-dev mailing list<br>
> <a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
> <a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" target="_blank">https://lists.freedesktop.org/<wbr>mailman/listinfo/mesa-dev</a><br>
><br>
<br>
</div></div></blockquote></div><br></div></div>