summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/ilo
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/drivers/ilo')
-rw-r--r--src/gallium/drivers/ilo/ilo_resource.c114
1 files changed, 55 insertions, 59 deletions
diff --git a/src/gallium/drivers/ilo/ilo_resource.c b/src/gallium/drivers/ilo/ilo_resource.c
index 04dcf8d7faf..4f0e416ee37 100644
--- a/src/gallium/drivers/ilo/ilo_resource.c
+++ b/src/gallium/drivers/ilo/ilo_resource.c
@@ -71,6 +71,53 @@ struct tex_layout {
*/
static const size_t max_resource_size = 1u << 31;
+static const char *
+resource_get_bo_name(const struct pipe_resource *templ)
+{
+ static const char *target_names[PIPE_MAX_TEXTURE_TYPES] = {
+ [PIPE_BUFFER] = "buf",
+ [PIPE_TEXTURE_1D] = "tex-1d",
+ [PIPE_TEXTURE_2D] = "tex-2d",
+ [PIPE_TEXTURE_3D] = "tex-3d",
+ [PIPE_TEXTURE_CUBE] = "tex-cube",
+ [PIPE_TEXTURE_RECT] = "tex-rect",
+ [PIPE_TEXTURE_1D_ARRAY] = "tex-1d-array",
+ [PIPE_TEXTURE_2D_ARRAY] = "tex-2d-array",
+ [PIPE_TEXTURE_CUBE_ARRAY] = "tex-cube-array",
+ };
+ const char *name = target_names[templ->target];
+
+ if (templ->target == PIPE_BUFFER) {
+ switch (templ->bind) {
+ case PIPE_BIND_VERTEX_BUFFER:
+ name = "buf-vb";
+ break;
+ case PIPE_BIND_INDEX_BUFFER:
+ name = "buf-ib";
+ break;
+ case PIPE_BIND_CONSTANT_BUFFER:
+ name = "buf-cb";
+ break;
+ case PIPE_BIND_STREAM_OUTPUT:
+ name = "buf-so";
+ break;
+ default:
+ break;
+ }
+ }
+
+ return name;
+}
+
+static enum intel_domain_flag
+resource_get_bo_initial_domain(const struct pipe_resource *templ)
+{
+ return (templ->bind & (PIPE_BIND_DEPTH_STENCIL |
+ PIPE_BIND_RENDER_TARGET |
+ PIPE_BIND_STREAM_OUTPUT)) ?
+ INTEL_DOMAIN_RENDER : 0;
+}
+
static void
tex_layout_init_qpitch(struct tex_layout *layout)
{
@@ -1065,39 +1112,9 @@ tex_create_bo(struct ilo_texture *tex,
const struct winsys_handle *handle)
{
struct ilo_screen *is = ilo_screen(tex->base.screen);
- const char *name;
+ const char *name = resource_get_bo_name(&tex->base);
struct intel_bo *bo;
- switch (tex->base.target) {
- case PIPE_TEXTURE_1D:
- name = "1D texture";
- break;
- case PIPE_TEXTURE_2D:
- name = "2D texture";
- break;
- case PIPE_TEXTURE_3D:
- name = "3D texture";
- break;
- case PIPE_TEXTURE_CUBE:
- name = "cube texture";
- break;
- case PIPE_TEXTURE_RECT:
- name = "rectangle texture";
- break;
- case PIPE_TEXTURE_1D_ARRAY:
- name = "1D array texture";
- break;
- case PIPE_TEXTURE_2D_ARRAY:
- name = "2D array texture";
- break;
- case PIPE_TEXTURE_CUBE_ARRAY:
- name = "cube array texture";
- break;
- default:
- name ="unknown texture";
- break;
- }
-
if (handle) {
enum intel_tiling_mode tiling;
unsigned long pitch;
@@ -1111,10 +1128,8 @@ tex_create_bo(struct ilo_texture *tex,
}
}
else {
- const uint32_t initial_domain =
- (tex->base.bind & (PIPE_BIND_DEPTH_STENCIL |
- PIPE_BIND_RENDER_TARGET)) ?
- INTEL_DOMAIN_RENDER : 0;
+ const enum intel_domain_flag initial_domain =
+ resource_get_bo_initial_domain(&tex->base);
bo = intel_winsys_alloc_bo(is->winsys, name, tex->tiling,
tex->bo_stride, tex->bo_height, initial_domain);
@@ -1371,33 +1386,14 @@ tex_get_handle(struct ilo_texture *tex, struct winsys_handle *handle)
static bool
buf_create_bo(struct ilo_buffer *buf)
{
- const uint32_t initial_domain =
- (buf->base.bind & PIPE_BIND_STREAM_OUTPUT) ?
- INTEL_DOMAIN_RENDER : 0;
struct ilo_screen *is = ilo_screen(buf->base.screen);
- const char *name;
+ const char *name = resource_get_bo_name(&buf->base);
+ const enum intel_domain_flag initial_domain =
+ resource_get_bo_initial_domain(&buf->base);
struct intel_bo *bo;
- switch (buf->base.bind) {
- case PIPE_BIND_VERTEX_BUFFER:
- name = "vertex buffer";
- break;
- case PIPE_BIND_INDEX_BUFFER:
- name = "index buffer";
- break;
- case PIPE_BIND_CONSTANT_BUFFER:
- name = "constant buffer";
- break;
- case PIPE_BIND_STREAM_OUTPUT:
- name = "stream output";
- break;
- default:
- name = "unknown buffer";
- break;
- }
-
- bo = intel_winsys_alloc_buffer(is->winsys,
- name, buf->bo_size, initial_domain);
+ bo = intel_winsys_alloc_buffer(is->winsys, name,
+ buf->bo_size, initial_domain);
if (!bo)
return false;