rusticl: use real constant buffer for cb0

Signed-off-by: Karol Herbst <kherbst@redhat.com>
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18581>
This commit is contained in:
Karol Herbst
2022-09-14 17:53:18 +02:00
committed by Marge Bot
parent 900d50c386
commit 7b01545716
2 changed files with 30 additions and 11 deletions
+7 -2
View File
@@ -588,6 +588,10 @@ fn lower_and_optimize_nir_late(
nir.pass0(nir_lower_int64);
}
if nir_options.lower_uniforms_to_ubo {
nir.pass0(rusticl_lower_inputs);
}
nir.pass1(nir_lower_convert_alu_types, None);
opt_nir(nir, dev);
@@ -988,15 +992,16 @@ impl Kernel {
init_data.len() as u32,
);
}
let cso = ctx.create_compute_state(nir, input.len() as u32, local_size as u32);
let cso = ctx.create_compute_state(nir, local_size as u32);
ctx.bind_compute_state(cso);
ctx.bind_sampler_states(&samplers);
ctx.set_sampler_views(&mut sviews);
ctx.set_shader_images(&iviews);
ctx.set_global_binding(resources.as_slice(), &mut globals);
ctx.set_constant_buffer(0, &input);
ctx.launch_grid(work_dim, block, grid, &input);
ctx.launch_grid(work_dim, block, grid);
ctx.clear_global_binding(globals.len() as u32);
ctx.clear_shader_images(iviews.len() as u32);
@@ -265,16 +265,11 @@ impl PipeContext {
unsafe { self.pipe.as_ref().texture_unmap.unwrap()(self.pipe.as_ptr(), tx) };
}
pub fn create_compute_state(
&self,
nir: &NirShader,
input_mem: u32,
local_mem: u32,
) -> *mut c_void {
pub fn create_compute_state(&self, nir: &NirShader, local_mem: u32) -> *mut c_void {
let state = pipe_compute_state {
ir_type: pipe_shader_ir::PIPE_SHADER_IR_NIR,
prog: nir.dup_for_driver().cast(),
req_input_mem: input_mem,
req_input_mem: 0,
req_local_mem: local_mem,
};
unsafe { self.pipe.as_ref().create_compute_state.unwrap()(self.pipe.as_ptr(), &state) }
@@ -321,10 +316,28 @@ impl PipeContext {
unsafe { self.pipe.as_ref().delete_sampler_state.unwrap()(self.pipe.as_ptr(), ptr) }
}
pub fn launch_grid(&self, work_dim: u32, block: [u32; 3], grid: [u32; 3], input: &[u8]) {
pub fn set_constant_buffer(&self, idx: u32, data: &[u8]) {
let cb = pipe_constant_buffer {
buffer: ptr::null_mut(),
buffer_offset: 0,
buffer_size: data.len() as u32,
user_buffer: data.as_ptr().cast(),
};
unsafe {
self.pipe.as_ref().set_constant_buffer.unwrap()(
self.pipe.as_ptr(),
pipe_shader_type::PIPE_SHADER_COMPUTE,
idx,
false,
&cb,
)
}
}
pub fn launch_grid(&self, work_dim: u32, block: [u32; 3], grid: [u32; 3]) {
let info = pipe_grid_info {
pc: 0,
input: input.as_ptr().cast(),
input: ptr::null(),
work_dim: work_dim,
block: block,
last_block: [0; 3],
@@ -475,6 +488,7 @@ fn has_required_cbs(c: &pipe_context) -> bool {
&& c.memory_barrier.is_some()
&& c.resource_copy_region.is_some()
&& c.sampler_view_destroy.is_some()
&& c.set_constant_buffer.is_some()
&& c.set_global_binding.is_some()
&& c.set_sampler_views.is_some()
&& c.set_shader_images.is_some()