summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/virgl/virgl_tgsi.c
diff options
context:
space:
mode:
authorDave Airlie <[email protected]>2018-03-13 15:37:36 +1000
committerDave Airlie <[email protected]>2018-03-23 10:21:10 +1000
commitfa683385de515c24f4c7cf62dfce8a16faa4b2be (patch)
tree4756ff5ae207ebcdb45cec16a77dc908533bb90d /src/gallium/drivers/virgl/virgl_tgsi.c
parentd7a015cbc6a6c12a87ee7ec725cc399d3712f43c (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.c11
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;