summaryrefslogtreecommitdiff
path: root/src/gallium/state_trackers/vega/vg_context.c
diff options
context:
space:
mode:
authorChia-I Wu <olv@lunarg.com>2010-06-23 16:14:49 +0800
committerChia-I Wu <olv@lunarg.com>2010-06-29 17:16:19 +0800
commit982aba97c581bab0ff55dc9cae4164ab30dfbeae (patch)
tree8ce0237fb9336859616ab43a05c82135ae22048c /src/gallium/state_trackers/vega/vg_context.c
parentda7bd6a90e1fee5c16327338fd251c0f6be34e36 (diff)
st_api: Remove st_context::is_visual_supported.
The callback is used by st/vega to check if a visual specifies the depth/stencil format. It forces st/vega to be loaded by st/egl to perform the check. As noted in EGL spec, the depth/stencil format of a visual should not affect OpenVG. It should be better to ignore the field and always allocate the depth/stencil texture.
Diffstat (limited to 'src/gallium/state_trackers/vega/vg_context.c')
-rw-r--r--src/gallium/state_trackers/vega/vg_context.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/gallium/state_trackers/vega/vg_context.c b/src/gallium/state_trackers/vega/vg_context.c
index f02db8949d..b45e0086b4 100644
--- a/src/gallium/state_trackers/vega/vg_context.c
+++ b/src/gallium/state_trackers/vega/vg_context.c
@@ -65,6 +65,32 @@ static void init_clear(struct vg_context *st)
st->clear.fs =
util_make_fragment_passthrough_shader(pipe);
}
+
+/**
+ * A depth/stencil rb will be needed regardless of what the visual says.
+ */
+static boolean
+choose_depth_stencil_format(struct vg_context *ctx)
+{
+ struct pipe_screen *screen = ctx->pipe->screen;
+ enum pipe_format formats[] = {
+ PIPE_FORMAT_Z24_UNORM_S8_USCALED,
+ PIPE_FORMAT_S8_USCALED_Z24_UNORM,
+ PIPE_FORMAT_NONE
+ };
+ enum pipe_format *fmt;
+
+ for (fmt = formats; *fmt != PIPE_FORMAT_NONE; fmt++) {
+ if (screen->is_format_supported(screen, *fmt,
+ PIPE_TEXTURE_2D, 0, PIPE_BIND_DEPTH_STENCIL, 0))
+ break;
+ }
+
+ ctx->ds_format = *fmt;
+
+ return (ctx->ds_format != PIPE_FORMAT_NONE);
+}
+
void vg_set_current_context(struct vg_context *ctx)
{
_vg_context = ctx;
@@ -81,6 +107,10 @@ struct vg_context * vg_create_context(struct pipe_context *pipe,
ctx = CALLOC_STRUCT(vg_context);
ctx->pipe = pipe;
+ if (!choose_depth_stencil_format(ctx)) {
+ FREE(ctx);
+ return NULL;
+ }
ctx->dispatch = api_create_dispatch();