aboutsummaryrefslogtreecommitdiffstats
path: root/src/gallium
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/drivers/ilo/ilo_resource.c60
1 files changed, 18 insertions, 42 deletions
diff --git a/src/gallium/drivers/ilo/ilo_resource.c b/src/gallium/drivers/ilo/ilo_resource.c
index 270724c4126..85cff908800 100644
--- a/src/gallium/drivers/ilo/ilo_resource.c
+++ b/src/gallium/drivers/ilo/ilo_resource.c
@@ -861,8 +861,8 @@ tex_alloc_slices(struct ilo_texture *tex)
return true;
}
-static struct intel_bo *
-tex_create_bo(const struct ilo_texture *tex,
+static bool
+tex_create_bo(struct ilo_texture *tex,
const struct winsys_handle *handle)
{
struct ilo_screen *is = ilo_screen(tex->base.screen);
@@ -909,12 +909,9 @@ tex_create_bo(const struct ilo_texture *tex,
tex->tiling, tex->bo_flags);
}
- return bo;
-}
+ if (!bo)
+ return false;
-static void
-tex_set_bo(struct ilo_texture *tex, struct intel_bo *bo)
-{
if (tex->bo)
tex->bo->unreference(tex->bo);
@@ -923,6 +920,8 @@ tex_set_bo(struct ilo_texture *tex, struct intel_bo *bo)
/* winsys may decide to use a different tiling */
tex->tiling = tex->bo->get_tiling(tex->bo);
tex->bo_stride = tex->bo->get_pitch(tex->bo);
+
+ return true;
}
static void
@@ -943,7 +942,6 @@ tex_create(struct pipe_screen *screen,
{
struct tex_layout layout;
struct ilo_texture *tex;
- struct intel_bo *bo;
tex = CALLOC_STRUCT(ilo_texture);
if (!tex)
@@ -1003,15 +1001,12 @@ tex_create(struct pipe_screen *screen,
tex_layout_apply(&layout, tex);
- bo = tex_create_bo(tex, handle);
- if (!bo) {
+ if (!tex_create_bo(tex, handle)) {
tex_free_slices(tex);
FREE(tex);
return NULL;
}
- tex_set_bo(tex, bo);
-
/* allocate separate stencil resource */
if (layout.separate_stencil) {
struct pipe_resource s8_templ = *layout.templ;
@@ -1074,11 +1069,12 @@ tex_estimate_size(struct pipe_screen *screen,
return tex_layout_estimate_size(&layout);
}
-static struct intel_bo *
-buf_create_bo(const struct ilo_buffer *buf)
+static bool
+buf_create_bo(struct ilo_buffer *buf)
{
struct ilo_screen *is = ilo_screen(buf->base.screen);
const char *name;
+ struct intel_bo *bo;
switch (buf->base.bind) {
case PIPE_BIND_VERTEX_BUFFER:
@@ -1098,17 +1094,17 @@ buf_create_bo(const struct ilo_buffer *buf)
break;
}
- return is->winsys->alloc_buffer(is->winsys,
+ bo = is->winsys->alloc_buffer(is->winsys,
name, buf->bo_size, buf->bo_flags);
-}
+ if (!bo)
+ return false;
-static void
-buf_set_bo(struct ilo_buffer *buf, struct intel_bo *bo)
-{
if (buf->bo)
buf->bo->unreference(buf->bo);
buf->bo = bo;
+
+ return true;
}
static void
@@ -1122,7 +1118,6 @@ static struct pipe_resource *
buf_create(struct pipe_screen *screen, const struct pipe_resource *templ)
{
struct ilo_buffer *buf;
- struct intel_bo *bo;
buf = CALLOC_STRUCT(ilo_buffer);
if (!buf)
@@ -1135,14 +1130,11 @@ buf_create(struct pipe_screen *screen, const struct pipe_resource *templ)
buf->bo_size = templ->width0;
buf->bo_flags = 0;
- bo = buf_create_bo(buf);
- if (!bo) {
+ if (!buf_create_bo(buf)) {
FREE(buf);
return NULL;
}
- buf_set_bo(buf, bo);
-
return &buf->base;
}
@@ -1224,33 +1216,17 @@ ilo_init_resource_functions(struct ilo_screen *is)
bool
ilo_buffer_alloc_bo(struct ilo_buffer *buf)
{
- struct intel_bo *bo;
-
- bo = buf_create_bo(buf);
- if (!bo)
- return false;
-
- buf_set_bo(buf, bo);
-
- return true;
+ return buf_create_bo(buf);
}
bool
ilo_texture_alloc_bo(struct ilo_texture *tex)
{
- struct intel_bo *bo;
-
/* a shared bo cannot be reallocated */
if (tex->imported)
return false;
- bo = tex_create_bo(tex, NULL);
- if (!bo)
- return false;
-
- tex_set_bo(tex, bo);
-
- return true;
+ return tex_create_bo(tex, NULL);
}
/**