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:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user