summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/svga
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/drivers/svga')
-rw-r--r--src/gallium/drivers/svga/svga_surface.c27
1 files changed, 17 insertions, 10 deletions
diff --git a/src/gallium/drivers/svga/svga_surface.c b/src/gallium/drivers/svga/svga_surface.c
index 29d91fd3221..1f50b9cd057 100644
--- a/src/gallium/drivers/svga/svga_surface.c
+++ b/src/gallium/drivers/svga/svga_surface.c
@@ -162,7 +162,7 @@ svga_texture_view_surface(struct svga_context *svga,
struct svga_host_surface_cache_key *key) /* OUT */
{
struct svga_screen *ss = svga_screen(svga->pipe.screen);
- struct svga_winsys_surface *handle;
+ struct svga_winsys_surface *handle = NULL;
boolean validated;
boolean needCopyResource;
@@ -170,6 +170,8 @@ svga_texture_view_surface(struct svga_context *svga,
"svga: Create surface view: layer %d zslice %d mips %d..%d\n",
layer_pick, zslice_pick, start_mip, start_mip+num_mip-1);
+ SVGA_STATS_TIME_PUSH(ss->sws, SVGA_STATS_TIME_EMULATESURFACEVIEW);
+
key->flags = flags;
key->format = format;
key->numMipLevels = num_mip;
@@ -197,7 +199,7 @@ svga_texture_view_surface(struct svga_context *svga,
if (key->format == SVGA3D_FORMAT_INVALID) {
key->cachable = 0;
- return NULL;
+ goto done;
}
if (cacheable && tex->backed_handle &&
@@ -218,7 +220,7 @@ svga_texture_view_surface(struct svga_context *svga,
if (!handle) {
key->cachable = 0;
- return NULL;
+ goto done;
}
SVGA_DBG(DEBUG_DMA, " --> got sid %p (texture view)\n", handle);
@@ -234,6 +236,9 @@ svga_texture_view_surface(struct svga_context *svga,
tex->backed_age = tex->age;
}
+done:
+ SVGA_STATS_TIME_POP(ss->sws);
+
return handle;
}
@@ -427,18 +432,18 @@ create_backed_surface_view(struct svga_context *svga, struct svga_surface *s)
{
struct svga_texture *tex = svga_texture(s->base.texture);
- SVGA_STATS_TIME_PUSH(svga_sws(svga),
- SVGA_STATS_TIME_CREATEBACKEDSURFACEVIEW);
-
if (!s->backed) {
struct pipe_surface *backed_view;
+ SVGA_STATS_TIME_PUSH(svga_sws(svga),
+ SVGA_STATS_TIME_CREATEBACKEDSURFACEVIEW);
+
backed_view = svga_create_surface_view(&svga->pipe,
&tex->b.b,
&s->base,
TRUE);
if (!backed_view)
- return NULL;
+ goto done;
s->backed = svga_surface(backed_view);
}
@@ -469,13 +474,15 @@ create_backed_surface_view(struct svga_context *svga, struct svga_surface *s)
bs->key.numMipLevels,
bs->key.numFaces * bs->key.arraySize,
zslice, s->base.u.tex.level, layer);
+
+ svga_mark_surface_dirty(&s->backed->base);
+
+ SVGA_STATS_TIME_POP(svga_sws(svga));
}
- svga_mark_surface_dirty(&s->backed->base);
s->backed->age = tex->age;
- SVGA_STATS_TIME_POP(svga_sws(svga));
-
+done:
return s->backed;
}