Re: [Mesa-dev] [PATCH v2 3/7] mesa: Add support for AMD_depth_clamp_separate
On 08/22/2018 04:31 PM, Marek Olšák wrote: > On Wed, Aug 22, 2018 at 5:52 PM Sagar Ghuge wrote: >> >> Enable _mesa_PushAttrib() and _mesa_PopAttrib() to handle >> GL_DEPTH_CLAMP_NEAR_AMD and GL_DEPTH_CLAMP_FAR_AMD tokens. >> >> Remove DepthClamp, because DepthClampNear + DepthClampFar replaces it, >> as suggested by Marek Olsak. >> >> Driver that enables AMD_depth_clamp_separate will only ever look at >> DepthClampNear and DepthClampFar, as suggested by Ian Romanick. >> >> v2: 1) Remove unnecessary parentheses (Marek Olsak) >> 2) if AMD_depth_clamp_separate is unsupported, TEST_AND_UPDATE >>GL_DEPTH_CLAMP only (Marek Olsak) >> 3) Clamp against near and far plane separately (Marek Olsak) >> 4) Clip point separately for near and far Z clipping plane (Marek >>Olsak) >> >> Signed-off-by: Sagar Ghuge >> --- >> src/mesa/drivers/dri/i965/genX_state_upload.c | 11 ++-- >> src/mesa/main/attrib.c| 40 +++--- >> src/mesa/main/enable.c| 9 ++- >> src/mesa/main/get.c | 4 ++ >> src/mesa/main/get_hash_params.py | 2 +- >> src/mesa/main/mtypes.h| 1 - >> src/mesa/main/rastpos.c | 55 --- >> src/mesa/state_tracker/st_atom_rasterizer.c | 3 +- >> src/mesa/state_tracker/st_cb_drawpixels.c | 3 +- >> src/mesa/swrast/s_span.c | 2 +- >> src/mesa/tnl/t_vb_program.c | 6 +- >> src/mesa/tnl/t_vb_vertex.c| 8 ++- >> 12 files changed, 111 insertions(+), 33 deletions(-) >> >> diff --git a/src/mesa/drivers/dri/i965/genX_state_upload.c >> b/src/mesa/drivers/dri/i965/genX_state_upload.c >> index c051848985..dc54cb67af 100644 >> --- a/src/mesa/drivers/dri/i965/genX_state_upload.c >> +++ b/src/mesa/drivers/dri/i965/genX_state_upload.c >> @@ -1399,7 +1399,8 @@ genX(upload_clip_state)(struct brw_context *brw) >>clip.ScreenSpaceViewportYMax = 1; >> >>clip.ViewportXYClipTestEnable = true; >> - clip.ViewportZClipTestEnable = !ctx->Transform.DepthClamp; >> + clip.ViewportZClipTestEnable = !(ctx->Transform.DepthClampNear && >> + ctx->Transform.DepthClampFar); >> >>/* _NEW_TRANSFORM */ >>if (GEN_GEN == 5 || GEN_IS_G4X) { >> @@ -1493,7 +1494,8 @@ genX(upload_clip_state)(struct brw_context *brw) >>clip.UserClipDistanceCullTestEnableBitmask = >> brw_vue_prog_data(brw->vs.base.prog_data)->cull_distance_mask; >> >> - clip.ViewportZClipTestEnable = !ctx->Transform.DepthClamp; >> + clip.ViewportZClipTestEnable = !(ctx->Transform.DepthClampNear && >> + ctx->Transform.DepthClampFar); >> #endif >> >>/* _NEW_LIGHT */ >> @@ -2338,7 +2340,7 @@ genX(upload_cc_viewport)(struct brw_context *brw) >> for (unsigned i = 0; i < viewport_count; i++) { >>/* _NEW_VIEWPORT | _NEW_TRANSFORM */ >>const struct gl_viewport_attrib *vp = &ctx->ViewportArray[i]; >> - if (ctx->Transform.DepthClamp) { >> + if (ctx->Transform.DepthClampNear && ctx->Transform.DepthClampFar) { >> ccv.MinimumDepth = MIN2(vp->Near, vp->Far); >> ccv.MaximumDepth = MAX2(vp->Near, vp->Far); >>} else { >> @@ -4605,7 +4607,8 @@ genX(upload_raster)(struct brw_context *brw) >>raster.ScissorRectangleEnable = ctx->Scissor.EnableFlags; >> >>/* _NEW_TRANSFORM */ >> - if (!ctx->Transform.DepthClamp) { >> + if (!(ctx->Transform.DepthClampNear && >> +ctx->Transform.DepthClampFar)) { >> #if GEN_GEN >= 9 >> raster.ViewportZFarClipTestEnable = true; >> raster.ViewportZNearClipTestEnable = true; >> diff --git a/src/mesa/main/attrib.c b/src/mesa/main/attrib.c >> index cbe93ab6fa..a46fec73fd 100644 >> --- a/src/mesa/main/attrib.c >> +++ b/src/mesa/main/attrib.c >> @@ -72,7 +72,8 @@ struct gl_enable_attrib >> GLbitfield ClipPlanes; >> GLboolean ColorMaterial; >> GLboolean CullFace; >> - GLboolean DepthClamp; >> + GLboolean DepthClampNear; >> + GLboolean DepthClampFar; >> GLboolean DepthTest; >> GLboolean Dither; >> GLboolean Fog; >> @@ -336,7 +337,8 @@ _mesa_PushAttrib(GLbitfield mask) >>attr->ClipPlanes = ctx->Transform.ClipPlanesEnabled; >>attr->ColorMaterial = ctx->Light.ColorMaterialEnabled; >>attr->CullFace = ctx->Polygon.CullFlag; >> - attr->DepthClamp = ctx->Transform.DepthClamp; >> + attr->DepthClampNear = ctx->Transform.DepthClampNear; >> + attr->DepthClampFar = ctx->Transform.DepthClampFar; >>attr->DepthTest = ctx->Depth.Test; >>attr->Dither = ctx->Color.DitherFlag; >>attr->Fog = ctx->Fog.Enabled; >> @@ -627,8 +629,18 @@ pop_enable_group(struct gl_context *ctx, const struct >> gl_enable_attrib *enable) >> TEST_AND_UPDATE(ctx->Light.ColorMaterialEnabled, enable->ColorMaterial, >>
Re: [Mesa-dev] [PATCH v2 3/7] mesa: Add support for AMD_depth_clamp_separate
On Wed, Aug 22, 2018 at 5:52 PM Sagar Ghuge wrote: > > Enable _mesa_PushAttrib() and _mesa_PopAttrib() to handle > GL_DEPTH_CLAMP_NEAR_AMD and GL_DEPTH_CLAMP_FAR_AMD tokens. > > Remove DepthClamp, because DepthClampNear + DepthClampFar replaces it, > as suggested by Marek Olsak. > > Driver that enables AMD_depth_clamp_separate will only ever look at > DepthClampNear and DepthClampFar, as suggested by Ian Romanick. > > v2: 1) Remove unnecessary parentheses (Marek Olsak) > 2) if AMD_depth_clamp_separate is unsupported, TEST_AND_UPDATE >GL_DEPTH_CLAMP only (Marek Olsak) > 3) Clamp against near and far plane separately (Marek Olsak) > 4) Clip point separately for near and far Z clipping plane (Marek >Olsak) > > Signed-off-by: Sagar Ghuge > --- > src/mesa/drivers/dri/i965/genX_state_upload.c | 11 ++-- > src/mesa/main/attrib.c| 40 +++--- > src/mesa/main/enable.c| 9 ++- > src/mesa/main/get.c | 4 ++ > src/mesa/main/get_hash_params.py | 2 +- > src/mesa/main/mtypes.h| 1 - > src/mesa/main/rastpos.c | 55 --- > src/mesa/state_tracker/st_atom_rasterizer.c | 3 +- > src/mesa/state_tracker/st_cb_drawpixels.c | 3 +- > src/mesa/swrast/s_span.c | 2 +- > src/mesa/tnl/t_vb_program.c | 6 +- > src/mesa/tnl/t_vb_vertex.c| 8 ++- > 12 files changed, 111 insertions(+), 33 deletions(-) > > diff --git a/src/mesa/drivers/dri/i965/genX_state_upload.c > b/src/mesa/drivers/dri/i965/genX_state_upload.c > index c051848985..dc54cb67af 100644 > --- a/src/mesa/drivers/dri/i965/genX_state_upload.c > +++ b/src/mesa/drivers/dri/i965/genX_state_upload.c > @@ -1399,7 +1399,8 @@ genX(upload_clip_state)(struct brw_context *brw) >clip.ScreenSpaceViewportYMax = 1; > >clip.ViewportXYClipTestEnable = true; > - clip.ViewportZClipTestEnable = !ctx->Transform.DepthClamp; > + clip.ViewportZClipTestEnable = !(ctx->Transform.DepthClampNear && > + ctx->Transform.DepthClampFar); > >/* _NEW_TRANSFORM */ >if (GEN_GEN == 5 || GEN_IS_G4X) { > @@ -1493,7 +1494,8 @@ genX(upload_clip_state)(struct brw_context *brw) >clip.UserClipDistanceCullTestEnableBitmask = > brw_vue_prog_data(brw->vs.base.prog_data)->cull_distance_mask; > > - clip.ViewportZClipTestEnable = !ctx->Transform.DepthClamp; > + clip.ViewportZClipTestEnable = !(ctx->Transform.DepthClampNear && > + ctx->Transform.DepthClampFar); > #endif > >/* _NEW_LIGHT */ > @@ -2338,7 +2340,7 @@ genX(upload_cc_viewport)(struct brw_context *brw) > for (unsigned i = 0; i < viewport_count; i++) { >/* _NEW_VIEWPORT | _NEW_TRANSFORM */ >const struct gl_viewport_attrib *vp = &ctx->ViewportArray[i]; > - if (ctx->Transform.DepthClamp) { > + if (ctx->Transform.DepthClampNear && ctx->Transform.DepthClampFar) { > ccv.MinimumDepth = MIN2(vp->Near, vp->Far); > ccv.MaximumDepth = MAX2(vp->Near, vp->Far); >} else { > @@ -4605,7 +4607,8 @@ genX(upload_raster)(struct brw_context *brw) >raster.ScissorRectangleEnable = ctx->Scissor.EnableFlags; > >/* _NEW_TRANSFORM */ > - if (!ctx->Transform.DepthClamp) { > + if (!(ctx->Transform.DepthClampNear && > +ctx->Transform.DepthClampFar)) { > #if GEN_GEN >= 9 > raster.ViewportZFarClipTestEnable = true; > raster.ViewportZNearClipTestEnable = true; > diff --git a/src/mesa/main/attrib.c b/src/mesa/main/attrib.c > index cbe93ab6fa..a46fec73fd 100644 > --- a/src/mesa/main/attrib.c > +++ b/src/mesa/main/attrib.c > @@ -72,7 +72,8 @@ struct gl_enable_attrib > GLbitfield ClipPlanes; > GLboolean ColorMaterial; > GLboolean CullFace; > - GLboolean DepthClamp; > + GLboolean DepthClampNear; > + GLboolean DepthClampFar; > GLboolean DepthTest; > GLboolean Dither; > GLboolean Fog; > @@ -336,7 +337,8 @@ _mesa_PushAttrib(GLbitfield mask) >attr->ClipPlanes = ctx->Transform.ClipPlanesEnabled; >attr->ColorMaterial = ctx->Light.ColorMaterialEnabled; >attr->CullFace = ctx->Polygon.CullFlag; > - attr->DepthClamp = ctx->Transform.DepthClamp; > + attr->DepthClampNear = ctx->Transform.DepthClampNear; > + attr->DepthClampFar = ctx->Transform.DepthClampFar; >attr->DepthTest = ctx->Depth.Test; >attr->Dither = ctx->Color.DitherFlag; >attr->Fog = ctx->Fog.Enabled; > @@ -627,8 +629,18 @@ pop_enable_group(struct gl_context *ctx, const struct > gl_enable_attrib *enable) > TEST_AND_UPDATE(ctx->Light.ColorMaterialEnabled, enable->ColorMaterial, > GL_COLOR_MATERIAL); > TEST_AND_UPDATE(ctx->Polygon.CullFlag, enable->CullFace, GL_CULL_FACE); > - TEST_AND_UPDATE(ctx->Transform.Depth
[Mesa-dev] [PATCH v2 3/7] mesa: Add support for AMD_depth_clamp_separate
Enable _mesa_PushAttrib() and _mesa_PopAttrib() to handle GL_DEPTH_CLAMP_NEAR_AMD and GL_DEPTH_CLAMP_FAR_AMD tokens. Remove DepthClamp, because DepthClampNear + DepthClampFar replaces it, as suggested by Marek Olsak. Driver that enables AMD_depth_clamp_separate will only ever look at DepthClampNear and DepthClampFar, as suggested by Ian Romanick. v2: 1) Remove unnecessary parentheses (Marek Olsak) 2) if AMD_depth_clamp_separate is unsupported, TEST_AND_UPDATE GL_DEPTH_CLAMP only (Marek Olsak) 3) Clamp against near and far plane separately (Marek Olsak) 4) Clip point separately for near and far Z clipping plane (Marek Olsak) Signed-off-by: Sagar Ghuge --- src/mesa/drivers/dri/i965/genX_state_upload.c | 11 ++-- src/mesa/main/attrib.c| 40 +++--- src/mesa/main/enable.c| 9 ++- src/mesa/main/get.c | 4 ++ src/mesa/main/get_hash_params.py | 2 +- src/mesa/main/mtypes.h| 1 - src/mesa/main/rastpos.c | 55 --- src/mesa/state_tracker/st_atom_rasterizer.c | 3 +- src/mesa/state_tracker/st_cb_drawpixels.c | 3 +- src/mesa/swrast/s_span.c | 2 +- src/mesa/tnl/t_vb_program.c | 6 +- src/mesa/tnl/t_vb_vertex.c| 8 ++- 12 files changed, 111 insertions(+), 33 deletions(-) diff --git a/src/mesa/drivers/dri/i965/genX_state_upload.c b/src/mesa/drivers/dri/i965/genX_state_upload.c index c051848985..dc54cb67af 100644 --- a/src/mesa/drivers/dri/i965/genX_state_upload.c +++ b/src/mesa/drivers/dri/i965/genX_state_upload.c @@ -1399,7 +1399,8 @@ genX(upload_clip_state)(struct brw_context *brw) clip.ScreenSpaceViewportYMax = 1; clip.ViewportXYClipTestEnable = true; - clip.ViewportZClipTestEnable = !ctx->Transform.DepthClamp; + clip.ViewportZClipTestEnable = !(ctx->Transform.DepthClampNear && + ctx->Transform.DepthClampFar); /* _NEW_TRANSFORM */ if (GEN_GEN == 5 || GEN_IS_G4X) { @@ -1493,7 +1494,8 @@ genX(upload_clip_state)(struct brw_context *brw) clip.UserClipDistanceCullTestEnableBitmask = brw_vue_prog_data(brw->vs.base.prog_data)->cull_distance_mask; - clip.ViewportZClipTestEnable = !ctx->Transform.DepthClamp; + clip.ViewportZClipTestEnable = !(ctx->Transform.DepthClampNear && + ctx->Transform.DepthClampFar); #endif /* _NEW_LIGHT */ @@ -2338,7 +2340,7 @@ genX(upload_cc_viewport)(struct brw_context *brw) for (unsigned i = 0; i < viewport_count; i++) { /* _NEW_VIEWPORT | _NEW_TRANSFORM */ const struct gl_viewport_attrib *vp = &ctx->ViewportArray[i]; - if (ctx->Transform.DepthClamp) { + if (ctx->Transform.DepthClampNear && ctx->Transform.DepthClampFar) { ccv.MinimumDepth = MIN2(vp->Near, vp->Far); ccv.MaximumDepth = MAX2(vp->Near, vp->Far); } else { @@ -4605,7 +4607,8 @@ genX(upload_raster)(struct brw_context *brw) raster.ScissorRectangleEnable = ctx->Scissor.EnableFlags; /* _NEW_TRANSFORM */ - if (!ctx->Transform.DepthClamp) { + if (!(ctx->Transform.DepthClampNear && +ctx->Transform.DepthClampFar)) { #if GEN_GEN >= 9 raster.ViewportZFarClipTestEnable = true; raster.ViewportZNearClipTestEnable = true; diff --git a/src/mesa/main/attrib.c b/src/mesa/main/attrib.c index cbe93ab6fa..a46fec73fd 100644 --- a/src/mesa/main/attrib.c +++ b/src/mesa/main/attrib.c @@ -72,7 +72,8 @@ struct gl_enable_attrib GLbitfield ClipPlanes; GLboolean ColorMaterial; GLboolean CullFace; - GLboolean DepthClamp; + GLboolean DepthClampNear; + GLboolean DepthClampFar; GLboolean DepthTest; GLboolean Dither; GLboolean Fog; @@ -336,7 +337,8 @@ _mesa_PushAttrib(GLbitfield mask) attr->ClipPlanes = ctx->Transform.ClipPlanesEnabled; attr->ColorMaterial = ctx->Light.ColorMaterialEnabled; attr->CullFace = ctx->Polygon.CullFlag; - attr->DepthClamp = ctx->Transform.DepthClamp; + attr->DepthClampNear = ctx->Transform.DepthClampNear; + attr->DepthClampFar = ctx->Transform.DepthClampFar; attr->DepthTest = ctx->Depth.Test; attr->Dither = ctx->Color.DitherFlag; attr->Fog = ctx->Fog.Enabled; @@ -627,8 +629,18 @@ pop_enable_group(struct gl_context *ctx, const struct gl_enable_attrib *enable) TEST_AND_UPDATE(ctx->Light.ColorMaterialEnabled, enable->ColorMaterial, GL_COLOR_MATERIAL); TEST_AND_UPDATE(ctx->Polygon.CullFlag, enable->CullFace, GL_CULL_FACE); - TEST_AND_UPDATE(ctx->Transform.DepthClamp, enable->DepthClamp, - GL_DEPTH_CLAMP); + + if (!ctx->Extensions.AMD_depth_clamp_separate) { + TEST_AND_UPDATE(ctx->Transform.DepthClampNear && ctx->Transform.DepthClampFar, + enable->DepthClampNear