rusticl/kernel: use binding for filling image channel data and order
Signed-off-by: Karol Herbst <kherbst@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19381>
This commit is contained in:
@@ -68,7 +68,10 @@ pub struct KernelArg {
|
|||||||
spirv: spirv::SPIRVKernelArg,
|
spirv: spirv::SPIRVKernelArg,
|
||||||
pub kind: KernelArgType,
|
pub kind: KernelArgType,
|
||||||
pub size: usize,
|
pub size: usize,
|
||||||
|
/// The offset into the input buffer
|
||||||
pub offset: usize,
|
pub offset: usize,
|
||||||
|
/// The actual binding slot
|
||||||
|
pub binding: u32,
|
||||||
pub dead: bool,
|
pub dead: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -127,6 +130,7 @@ impl KernelArg {
|
|||||||
// we'll update it later in the 2nd pass
|
// we'll update it later in the 2nd pass
|
||||||
kind: kind,
|
kind: kind,
|
||||||
offset: 0,
|
offset: 0,
|
||||||
|
binding: 0,
|
||||||
dead: true,
|
dead: true,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -143,6 +147,7 @@ impl KernelArg {
|
|||||||
) {
|
) {
|
||||||
if let Some(arg) = args.get_mut(var.data.location as usize) {
|
if let Some(arg) = args.get_mut(var.data.location as usize) {
|
||||||
arg.offset = var.data.driver_location as usize;
|
arg.offset = var.data.driver_location as usize;
|
||||||
|
arg.binding = var.data.binding;
|
||||||
arg.dead = false;
|
arg.dead = false;
|
||||||
} else {
|
} else {
|
||||||
internal_args
|
internal_args
|
||||||
@@ -159,6 +164,7 @@ impl KernelArg {
|
|||||||
bin.append(&mut self.spirv.serialize());
|
bin.append(&mut self.spirv.serialize());
|
||||||
bin.extend_from_slice(&self.size.to_ne_bytes());
|
bin.extend_from_slice(&self.size.to_ne_bytes());
|
||||||
bin.extend_from_slice(&self.offset.to_ne_bytes());
|
bin.extend_from_slice(&self.offset.to_ne_bytes());
|
||||||
|
bin.extend_from_slice(&self.binding.to_ne_bytes());
|
||||||
bin.extend_from_slice(&(self.dead as u8).to_ne_bytes());
|
bin.extend_from_slice(&(self.dead as u8).to_ne_bytes());
|
||||||
bin.extend_from_slice(&(self.kind as u8).to_ne_bytes());
|
bin.extend_from_slice(&(self.kind as u8).to_ne_bytes());
|
||||||
|
|
||||||
@@ -169,6 +175,7 @@ impl KernelArg {
|
|||||||
let spirv = spirv::SPIRVKernelArg::deserialize(bin)?;
|
let spirv = spirv::SPIRVKernelArg::deserialize(bin)?;
|
||||||
let size = read_ne_usize(bin);
|
let size = read_ne_usize(bin);
|
||||||
let offset = read_ne_usize(bin);
|
let offset = read_ne_usize(bin);
|
||||||
|
let binding = read_ne_u32(bin);
|
||||||
let dead = read_ne_u8(bin) == 1;
|
let dead = read_ne_u8(bin) == 1;
|
||||||
|
|
||||||
let kind = match read_ne_u8(bin) {
|
let kind = match read_ne_u8(bin) {
|
||||||
@@ -188,6 +195,7 @@ impl KernelArg {
|
|||||||
kind: kind,
|
kind: kind,
|
||||||
size: size,
|
size: size,
|
||||||
offset: offset,
|
offset: offset,
|
||||||
|
binding: binding,
|
||||||
dead: dead,
|
dead: dead,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -941,10 +949,11 @@ impl Kernel {
|
|||||||
(&mut tex_formats, &mut tex_orders)
|
(&mut tex_formats, &mut tex_orders)
|
||||||
};
|
};
|
||||||
|
|
||||||
assert!(arg.offset >= formats.len());
|
let binding = arg.binding as usize;
|
||||||
|
assert!(binding >= formats.len());
|
||||||
|
|
||||||
formats.resize(arg.offset, 0);
|
formats.resize(binding, 0);
|
||||||
orders.resize(arg.offset, 0);
|
orders.resize(binding, 0);
|
||||||
|
|
||||||
formats.push(mem.image_format.image_channel_data_type as u16);
|
formats.push(mem.image_format.image_channel_data_type as u16);
|
||||||
orders.push(mem.image_format.image_channel_order as u16);
|
orders.push(mem.image_format.image_channel_order as u16);
|
||||||
|
Reference in New Issue
Block a user