diff options
author | Dave Airlie <[email protected]> | 2018-03-13 15:37:36 +1000 |
---|---|---|
committer | Dave Airlie <[email protected]> | 2018-03-23 10:21:10 +1000 |
commit | fa683385de515c24f4c7cf62dfce8a16faa4b2be (patch) | |
tree | 4756ff5ae207ebcdb45cec16a77dc908533bb90d /src/gallium/drivers/virgl/virgl_tgsi.c | |
parent | d7a015cbc6a6c12a87ee7ec725cc399d3712f43c (diff) |
virgl: add ARB_cull_distance support.
This just allows the properties through to the host if we have
cull dist support.
Signed-off-by: Dave Airlie <[email protected]>
Diffstat (limited to 'src/gallium/drivers/virgl/virgl_tgsi.c')
-rw-r--r-- | src/gallium/drivers/virgl/virgl_tgsi.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/gallium/drivers/virgl/virgl_tgsi.c b/src/gallium/drivers/virgl/virgl_tgsi.c index ca0591322da..ff5abf6ddbd 100644 --- a/src/gallium/drivers/virgl/virgl_tgsi.c +++ b/src/gallium/drivers/virgl/virgl_tgsi.c @@ -27,8 +27,10 @@ */ #include "tgsi/tgsi_transform.h" #include "virgl_context.h" +#include "virgl_screen.h" struct virgl_transform_context { struct tgsi_transform_context base; + bool cull_enabled; }; static void @@ -55,9 +57,13 @@ static void virgl_tgsi_transform_property(struct tgsi_transform_context *ctx, struct tgsi_full_property *prop) { + struct virgl_transform_context *vtctx = (struct virgl_transform_context *)ctx; switch (prop->Property.PropertyName) { case TGSI_PROPERTY_NUM_CLIPDIST_ENABLED: case TGSI_PROPERTY_NUM_CULLDIST_ENABLED: + if (vtctx->cull_enabled) + ctx->emit_property(ctx, prop); + break; case TGSI_PROPERTY_NEXT_SHADER: break; default: @@ -82,9 +88,9 @@ virgl_tgsi_transform_instruction(struct tgsi_transform_context *ctx, ctx->emit_instruction(ctx, inst); } -struct tgsi_token *virgl_tgsi_transform(const struct tgsi_token *tokens_in) +struct tgsi_token *virgl_tgsi_transform(struct virgl_context *vctx, const struct tgsi_token *tokens_in) { - + struct virgl_screen *vscreen = (struct virgl_screen *)vctx->base.screen; struct virgl_transform_context transform; const uint newLen = tgsi_num_tokens(tokens_in); struct tgsi_token *new_tokens; @@ -97,6 +103,7 @@ struct tgsi_token *virgl_tgsi_transform(const struct tgsi_token *tokens_in) transform.base.transform_declaration = virgl_tgsi_transform_declaration; transform.base.transform_property = virgl_tgsi_transform_property; transform.base.transform_instruction = virgl_tgsi_transform_instruction; + transform.cull_enabled = vscreen->caps.caps.v1.bset.has_cull; tgsi_transform_shader(tokens_in, new_tokens, newLen, &transform.base); return new_tokens; |