mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 21:50:12 +01:00
r600g: Use a texture as the underlying resource for compute_memory_pool
This the first step towards being able to use evergreen_cb to bind RATs.
This commit is contained in:
parent
9d36441374
commit
eb065f5d9d
2 changed files with 37 additions and 18 deletions
|
|
@ -41,6 +41,32 @@
|
|||
#include "compute_memory_pool.h"
|
||||
#include "evergreen_compute_internal.h"
|
||||
|
||||
static struct r600_resource_texture * create_pool_texture(struct r600_screen * screen,
|
||||
unsigned size_in_dw)
|
||||
{
|
||||
|
||||
struct pipe_resource templ;
|
||||
struct r600_resource_texture * tex;
|
||||
|
||||
memset(&templ, 0, sizeof(templ));
|
||||
templ.target = PIPE_TEXTURE_1D;
|
||||
templ.format = PIPE_FORMAT_R32_UNORM;
|
||||
templ.bind = PIPE_BIND_CUSTOM;
|
||||
templ.usage = PIPE_USAGE_IMMUTABLE;
|
||||
templ.flags = 0;
|
||||
templ.width0 = size_in_dw;
|
||||
templ.height0 = 1;
|
||||
templ.depth0 = 1;
|
||||
templ.array_size = 1;
|
||||
|
||||
tex = (struct r600_resource_texture *)r600_texture_create(
|
||||
&screen->screen, &templ);
|
||||
/* XXX: Propagate this error */
|
||||
assert(tex && "Out of memory");
|
||||
tex->is_rat = 1;
|
||||
return tex;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new pool
|
||||
*/
|
||||
|
|
@ -54,8 +80,8 @@ struct compute_memory_pool* compute_memory_pool_new(
|
|||
pool->next_id = 1;
|
||||
pool->size_in_dw = initial_size_in_dw;
|
||||
pool->screen = rscreen;
|
||||
pool->bo = (struct r600_resource*)r600_compute_buffer_alloc_vram(
|
||||
pool->screen, pool->size_in_dw*4);
|
||||
pool->bo = (struct r600_resource*)create_pool_texture(pool->screen,
|
||||
pool->size_in_dw);
|
||||
pool->shadow = (uint32_t*)CALLOC(4, pool->size_in_dw);
|
||||
|
||||
return pool;
|
||||
|
|
@ -147,8 +173,8 @@ void compute_memory_grow_pool(struct compute_memory_pool* pool,
|
|||
pool->screen->screen.resource_destroy(
|
||||
(struct pipe_screen *)pool->screen,
|
||||
(struct pipe_resource *)pool->bo);
|
||||
pool->bo = r600_compute_buffer_alloc_vram(pool->screen,
|
||||
pool->size_in_dw*4);
|
||||
pool->bo = (struct r600_resource*)create_pool_texture(pool->screen,
|
||||
pool->size_in_dw);
|
||||
compute_memory_shadow(pool, pipe, 0);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -298,20 +298,13 @@ void evergreen_set_rat(
|
|||
evergreen_compute_get_gpu_format(&fmt, bo);
|
||||
}
|
||||
|
||||
if (linear) {
|
||||
evergreen_reg_set(res,
|
||||
R_028C70_CB_COLOR0_INFO, S_028C70_RAT(1)
|
||||
| S_028C70_ARRAY_MODE(V_028C70_ARRAY_LINEAR_ALIGNED)
|
||||
| S_028C70_FORMAT(fmt.format)
|
||||
| S_028C70_NUMBER_TYPE(fmt.number_type)
|
||||
);
|
||||
evergreen_emit_force_reloc(res);
|
||||
} else {
|
||||
assert(0 && "TODO");
|
||||
///TODO
|
||||
// evergreen_reg_set(res, R_028C70_CB_COLOR0_INFO, S_028C70_RAT(1) | S_028C70_ARRAY_MODE(????));
|
||||
// evergreen_emit_force_reloc(res);
|
||||
}
|
||||
evergreen_reg_set(res,
|
||||
R_028C70_CB_COLOR0_INFO, S_028C70_RAT(1)
|
||||
| S_028C70_ARRAY_MODE(V_028C70_ARRAY_LINEAR_ALIGNED)
|
||||
| S_028C70_FORMAT(fmt.format)
|
||||
| S_028C70_NUMBER_TYPE(fmt.number_type)
|
||||
);
|
||||
evergreen_emit_force_reloc(res);
|
||||
|
||||
evergreen_reg_set(res, R_028C74_CB_COLOR0_ATTRIB, S_028C74_NON_DISP_TILING_ORDER(1));
|
||||
evergreen_emit_force_reloc(res);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue