nak: Rename BitSetView to BitView

We're about to add a BitSet struct which is like a HashSet and it's an
entirely different concept.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
This commit is contained in:
Faith Ekstrand 2023-04-10 17:23:26 -05:00 committed by Marge Bot
parent e1be53e266
commit d10ff2bdcd
4 changed files with 40 additions and 44 deletions

View file

@ -9,13 +9,13 @@ use crate::util::DivCeil;
use std::ops::Range;
pub trait BitSetViewable {
pub trait BitViewable {
fn bits(&self) -> usize;
fn get_bit_range_u64(&self, range: Range<usize>) -> u64;
}
pub trait BitSetMutViewable: BitSetViewable {
pub trait BitMutViewable: BitViewable {
fn set_bit_range_u64(&mut self, range: Range<usize>, val: u64);
}
@ -26,7 +26,7 @@ fn u64_mask_for_bits(bits: usize) -> u64 {
macro_rules! decl_bit_set_viewable_for_uint {
($ty: ty) => {
impl BitSetViewable for $ty {
impl BitViewable for $ty {
fn bits(&self) -> usize {
<$ty>::BITS as usize
}
@ -40,7 +40,7 @@ macro_rules! decl_bit_set_viewable_for_uint {
}
}
impl BitSetMutViewable for $ty {
impl BitMutViewable for $ty {
fn set_bit_range_u64(&mut self, range: Range<usize>, val: u64) {
assert!(!range.is_empty());
assert!(range.end <= self.bits());
@ -54,7 +54,7 @@ macro_rules! decl_bit_set_viewable_for_uint {
}
}
impl BitSetViewable for [$ty] {
impl BitViewable for [$ty] {
fn bits(&self) -> usize {
self.len() * (<$ty>::BITS as usize)
}
@ -83,7 +83,7 @@ macro_rules! decl_bit_set_viewable_for_uint {
}
}
impl BitSetMutViewable for [$ty] {
impl BitMutViewable for [$ty] {
fn set_bit_range_u64(&mut self, range: Range<usize>, val: u64) {
assert!(!range.is_empty());
assert!(range.end <= self.bits());
@ -110,7 +110,7 @@ macro_rules! decl_bit_set_viewable_for_uint {
}
}
impl<const N: usize> BitSetViewable for [$ty; N] {
impl<const N: usize> BitViewable for [$ty; N] {
fn bits(&self) -> usize {
N * (<$ty>::BITS as usize)
}
@ -120,7 +120,7 @@ macro_rules! decl_bit_set_viewable_for_uint {
}
}
impl<const N: usize> BitSetMutViewable for [$ty; N] {
impl<const N: usize> BitMutViewable for [$ty; N] {
fn set_bit_range_u64(&mut self, range: Range<usize>, val: u64) {
self[..].set_bit_range_u64(range, val);
}
@ -133,12 +133,12 @@ decl_bit_set_viewable_for_uint!(u16);
decl_bit_set_viewable_for_uint!(u32);
decl_bit_set_viewable_for_uint!(u64);
pub struct BitSetView<'a, BS: BitSetViewable + ?Sized> {
pub struct BitView<'a, BS: BitViewable + ?Sized> {
parent: &'a BS,
range: Range<usize>,
}
impl<'a, BS: BitSetViewable + ?Sized> BitSetView<'a, BS> {
impl<'a, BS: BitViewable + ?Sized> BitView<'a, BS> {
pub fn new(parent: &'a BS) -> Self {
let len = parent.bits();
Self {
@ -158,8 +158,8 @@ impl<'a, BS: BitSetViewable + ?Sized> BitSetView<'a, BS> {
pub fn subset(
&'a self,
range: Range<usize>,
) -> BitSetView<'a, BitSetView<'a, BS>> {
BitSetView::new_subset(self, range)
) -> BitView<'a, BitView<'a, BS>> {
BitView::new_subset(self, range)
}
fn range_in_parent(&self, range: Range<usize>) -> Range<usize> {
@ -174,7 +174,7 @@ impl<'a, BS: BitSetViewable + ?Sized> BitSetView<'a, BS> {
}
}
impl<'a, BS: BitSetViewable + ?Sized> BitSetViewable for BitSetView<'a, BS> {
impl<'a, BS: BitViewable + ?Sized> BitViewable for BitView<'a, BS> {
fn bits(&self) -> usize {
self.range.end - self.range.start
}
@ -184,12 +184,12 @@ impl<'a, BS: BitSetViewable + ?Sized> BitSetViewable for BitSetView<'a, BS> {
}
}
pub struct BitSetMutView<'a, BS: BitSetMutViewable + ?Sized> {
pub struct BitMutView<'a, BS: BitMutViewable + ?Sized> {
parent: &'a mut BS,
range: Range<usize>,
}
impl<'a, BS: BitSetMutViewable + ?Sized> BitSetMutView<'a, BS> {
impl<'a, BS: BitMutViewable + ?Sized> BitMutView<'a, BS> {
pub fn new(parent: &'a mut BS) -> Self {
let len = parent.bits();
Self {
@ -209,8 +209,8 @@ impl<'a, BS: BitSetMutViewable + ?Sized> BitSetMutView<'a, BS> {
pub fn subset_mut<'b>(
&'b mut self,
range: Range<usize>,
) -> BitSetMutView<'b, BitSetMutView<'a, BS>> {
BitSetMutView::new_subset(self, range)
) -> BitMutView<'b, BitMutView<'a, BS>> {
BitMutView::new_subset(self, range)
}
fn range_in_parent(&self, range: Range<usize>) -> Range<usize> {
@ -229,9 +229,7 @@ impl<'a, BS: BitSetMutViewable + ?Sized> BitSetMutView<'a, BS> {
}
}
impl<'a, BS: BitSetMutViewable + ?Sized> BitSetViewable
for BitSetMutView<'a, BS>
{
impl<'a, BS: BitMutViewable + ?Sized> BitViewable for BitMutView<'a, BS> {
fn bits(&self) -> usize {
self.range.end - self.range.start
}
@ -241,9 +239,7 @@ impl<'a, BS: BitSetMutViewable + ?Sized> BitSetViewable
}
}
impl<'a, BS: BitSetMutViewable + ?Sized> BitSetMutViewable
for BitSetMutView<'a, BS>
{
impl<'a, BS: BitMutViewable + ?Sized> BitMutViewable for BitMutView<'a, BS> {
fn set_bit_range_u64(&mut self, range: Range<usize>, val: u64) {
self.parent
.set_bit_range_u64(self.range_in_parent(range), val);
@ -254,7 +250,7 @@ pub trait SetFieldU64 {
fn set_field_u64(&mut self, range: Range<usize>, val: u64);
}
impl<'a, BS: BitSetMutViewable + ?Sized> SetFieldU64 for BitSetMutView<'a, BS> {
impl<'a, BS: BitMutViewable + ?Sized> SetFieldU64 for BitMutView<'a, BS> {
fn set_field_u64(&mut self, range: Range<usize>, val: u64) {
let bits = range.end - range.start;

View file

@ -3,7 +3,7 @@
* SPDX-License-Identifier: MIT
*/
mod bitset;
mod bitview;
mod nak_assign_regs;
mod nak_calc_instr_deps;
mod nak_encode_sm75;
@ -17,7 +17,7 @@ mod nir;
mod union_find;
mod util;
use bitset::*;
use bitview::*;
use nak_bindings::*;
use nak_from_nir::*;
use std::os::raw::c_void;
@ -120,7 +120,7 @@ fn encode_hdr_for_nir(nir: &nir_shader, tls_size: u32) -> [u32; 32] {
}
let mut hdr = [0_u32; 32];
let mut hdr_view = BitSetMutView::new(&mut hdr);
let mut hdr_view = BitMutView::new(&mut hdr);
/* [0, 31]: CommonWord0 */
let mut cw0 = hdr_view.subset_mut(0..32);
@ -192,7 +192,7 @@ fn encode_hdr_for_nir(nir: &nir_shader, tls_size: u32) -> [u32; 32] {
cw4.set_field(20..24, 0_u32 /* Reserved */);
cw4.set_field(24..32, 0_u32 /* TODO: StoreReqEnd */);
let nir_sv = BitSetView::new(&nir.info.system_values_read);
let nir_sv = BitView::new(&nir.info.system_values_read);
if nir.info.stage() != MESA_SHADER_FRAGMENT {
assert!(sph_type == 1);
@ -211,7 +211,7 @@ fn encode_hdr_for_nir(nir: &nir_shader, tls_size: u32) -> [u32; 32] {
/* [192, 319]: ImapGenericVector[32] */
let mut imap_g = hdr_view.subset_mut(192..320);
let nir_ir = BitSetView::new(&nir.info.inputs_read);
let nir_ir = BitView::new(&nir.info.inputs_read);
let input0: usize = if nir.info.stage() == MESA_SHADER_VERTEX {
VERT_ATTRIB_GENERIC0.try_into().unwrap()
} else {
@ -228,7 +228,7 @@ fn encode_hdr_for_nir(nir: &nir_shader, tls_size: u32) -> [u32; 32] {
/* [352, 391]: ImapFixedFncTexture[10] */
/* [392, 399]: ImapReserved */
let nir_ow = BitSetView::new(&nir.info.outputs_written);
let nir_ow = BitView::new(&nir.info.outputs_written);
/* [400, 423]: TODO: OmapSystemValuesA */
@ -282,7 +282,7 @@ fn encode_hdr_for_nir(nir: &nir_shader, tls_size: u32) -> [u32; 32] {
/* [576, 607]: OmapTarget[8] */
let mut omap_color = hdr_view.subset_mut(576..608);
let nir_ow = BitSetView::new(&nir.info.outputs_written);
let nir_ow = BitView::new(&nir.info.outputs_written);
let output0 = usize::try_from(FRAG_RESULT_DATA0).unwrap();
for i in 0..8 {
if nir_ow.get_bit(output0 + i) {

View file

@ -3,7 +3,7 @@
* SPDX-License-Identifier: MIT
*/
use crate::bitset::*;
use crate::bitview::*;
use crate::nak_ir::*;
use std::collections::HashMap;
@ -91,31 +91,31 @@ struct SM75Instr {
sm: u8,
}
impl BitSetViewable for SM75Instr {
impl BitViewable for SM75Instr {
fn bits(&self) -> usize {
BitSetView::new(&self.inst).bits()
BitView::new(&self.inst).bits()
}
fn get_bit_range_u64(&self, range: Range<usize>) -> u64 {
BitSetView::new(&self.inst).get_bit_range_u64(range)
BitView::new(&self.inst).get_bit_range_u64(range)
}
}
impl BitSetMutViewable for SM75Instr {
impl BitMutViewable for SM75Instr {
fn set_bit_range_u64(&mut self, range: Range<usize>, val: u64) {
BitSetMutView::new(&mut self.inst).set_bit_range_u64(range, val);
BitMutView::new(&mut self.inst).set_bit_range_u64(range, val);
}
}
impl SetFieldU64 for SM75Instr {
fn set_field_u64(&mut self, range: Range<usize>, val: u64) {
BitSetMutView::new(&mut self.inst).set_field_u64(range, val);
BitMutView::new(&mut self.inst).set_field_u64(range, val);
}
}
impl SM75Instr {
fn set_bit(&mut self, bit: usize, val: bool) {
BitSetMutView::new(&mut self.inst).set_bit(bit, val);
BitMutView::new(&mut self.inst).set_bit(bit, val);
}
fn set_src_imm(&mut self, range: Range<usize>, u: &u32) {
@ -190,7 +190,7 @@ impl SM75Instr {
}
fn set_src_cb(&mut self, range: Range<usize>, cb: &CBufRef) {
let mut v = BitSetMutView::new_subset(self, range);
let mut v = BitMutView::new_subset(self, range);
v.set_field(0..16, cb.offset);
if let CBuf::Binding(idx) = cb.buf {
v.set_field(16..21, idx);
@ -200,7 +200,7 @@ impl SM75Instr {
}
fn set_src_cx(&mut self, range: Range<usize>, cb: &CBufRef) {
let mut v = BitSetMutView::new_subset(self, range);
let mut v = BitMutView::new_subset(self, range);
if let CBuf::BindlessGPR(reg) = cb.buf {
assert!(reg.base_idx() <= 63);
assert!(reg.file() == RegFile::UGPR);

View file

@ -3,10 +3,10 @@
* SPDX-License-Identifier: MIT
*/
mod bitset;
mod bitview;
mod util;
use crate::bitset::*;
use crate::bitview::*;
use std::fs;
use std::io::Write;
@ -72,7 +72,7 @@ fn main() {
let cuda_path = find_cuda().expect("Failed to find CUDA");
for bits in 0..(1_u64 << range.len()) {
BitSetMutView::new(&mut instr).set_field(range.clone(), bits);
BitMutView::new(&mut instr).set_field(range.clone(), bits);
print!("With {:#x} in {}..{}:", bits, range.start, range.end);
for dw in instr {