llvmpipe: Use lp_jit_buffer_from_pipe_const in setup

Reviewed-by: Dave Airlie <airlied@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22828>
This commit is contained in:
Konstantin Seurer
2023-05-12 13:36:15 +02:00
committed by Marge Bot
parent 63d09d2437
commit b9c588b47b

View File

@@ -994,7 +994,6 @@ lp_setup_is_resource_referenced(const struct lp_setup_context *setup,
static bool
try_update_scene_state(struct lp_setup_context *setup)
{
static const float fake_const_buf[4];
bool new_scene = (setup->fs.stored == NULL);
struct lp_scene *scene = setup->scene;
@@ -1064,56 +1063,8 @@ try_update_scene_state(struct lp_setup_context *setup)
if (setup->dirty & LP_SETUP_NEW_CONSTANTS) {
for (unsigned i = 0; i < ARRAY_SIZE(setup->constants); ++i) {
struct pipe_resource *buffer = setup->constants[i].current.buffer;
const unsigned current_size = MIN2(setup->constants[i].current.buffer_size,
LP_MAX_TGSI_CONST_BUFFER_SIZE);
const uint8_t *current_data = NULL;
STATIC_ASSERT(DATA_BLOCK_SIZE >= LP_MAX_TGSI_CONST_BUFFER_SIZE);
if (buffer) {
/* resource buffer */
current_data = (uint8_t *) llvmpipe_resource_data(buffer);
} else if (setup->constants[i].current.user_buffer) {
/* user-space buffer */
current_data = (uint8_t *) setup->constants[i].current.user_buffer;
}
if (current_data && current_size >= sizeof(float)) {
current_data += setup->constants[i].current.buffer_offset;
/* TODO: copy only the actually used constants? */
if (setup->constants[i].stored_size != current_size ||
!setup->constants[i].stored_data ||
memcmp(setup->constants[i].stored_data,
current_data,
current_size) != 0) {
void *stored = lp_scene_alloc(scene, current_size);
if (!stored) {
assert(!new_scene);
return false;
}
memcpy(stored,
current_data,
current_size);
setup->constants[i].stored_size = current_size;
setup->constants[i].stored_data = stored;
}
setup->fs.current.jit_resources.constants[i].f =
setup->constants[i].stored_data;
} else {
setup->constants[i].stored_size = 0;
setup->constants[i].stored_data = NULL;
setup->fs.current.jit_resources.constants[i].f = fake_const_buf;
}
const int num_constants =
DIV_ROUND_UP(setup->constants[i].stored_size,
lp_get_constant_buffer_stride(scene->pipe->screen));
setup->fs.current.jit_resources.constants[i].num_elements = num_constants;
lp_jit_buffer_from_pipe_const(&setup->fs.current.jit_resources.constants[i],
&setup->constants[i].current, setup->pipe->screen);
setup->dirty |= LP_SETUP_NEW_FS;
}
}