Skip to content

Commit 784c8c8

Browse files
committed
rm cap checks: remove BuilderSpirv::has_capability
1 parent 3166085 commit 784c8c8

4 files changed

Lines changed: 24 additions & 67 deletions

File tree

crates/rustc_codegen_spirv/src/builder/builder_methods.rs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use crate::custom_insts::CustomInst;
1111
use crate::spirv_type::SpirvType;
1212
use itertools::Itertools;
1313
use rspirv::dr::{InsertPoint, Instruction, Operand};
14-
use rspirv::spirv::{Capability, MemoryModel, MemorySemantics, Op, Scope, StorageClass, Word};
14+
use rspirv::spirv::{MemoryModel, MemorySemantics, Op, Scope, StorageClass, Word};
1515
use rustc_abi::{Align, BackendRepr, Scalar, Size, WrappingRange};
1616
use rustc_apfloat::{Float, Round, Status, ieee};
1717
use rustc_codegen_ssa::MemFlags;
@@ -569,12 +569,10 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
569569

570570
#[instrument(level = "trace", skip(self))]
571571
fn zombie_ptr_equal(&self, def: Word, inst: &str) {
572-
if !self.builder.has_capability(Capability::VariablePointers) {
573-
self.zombie(
574-
def,
575-
&format!("{inst} without OpCapability VariablePointers"),
576-
);
577-
}
572+
self.zombie(
573+
def,
574+
&format!("{inst} without OpCapability VariablePointers"),
575+
);
578576
}
579577

580578
/// Convenience wrapper for `adjust_pointer_for_sized_access`, falling back

crates/rustc_codegen_spirv/src/builder/byte_addressable_buffer.rs

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ use crate::builder_spirv::{SpirvValue, SpirvValueExt, SpirvValueKind};
66
use crate::spirv_type::SpirvType;
77
use rspirv::spirv::{Decoration, Word};
88
use rustc_abi::{Align, Size};
9-
use rustc_codegen_spirv_types::Capability;
109
use rustc_codegen_ssa::traits::BuilderMethods;
1110
use rustc_errors::ErrorGuaranteed;
1211
use rustc_middle::ty::Ty;
@@ -50,13 +49,11 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
5049
.in_bounds_access_chain(u32_ptr, None, array, [actual_index])
5150
.unwrap()
5251
.with_type(u32_ptr);
53-
if self.builder.has_capability(Capability::ShaderNonUniform) {
54-
// apply NonUniform to the operation and the index
55-
self.emit()
56-
.decorate(ptr.def(self), Decoration::NonUniform, []);
57-
self.emit()
58-
.decorate(actual_index, Decoration::NonUniform, []);
59-
}
52+
// apply NonUniform to the operation and the index
53+
self.emit()
54+
.decorate(ptr.def(self), Decoration::NonUniform, []);
55+
self.emit()
56+
.decorate(actual_index, Decoration::NonUniform, []);
6057
self.load(u32_ty, ptr, Align::ONE)
6158
}
6259

@@ -252,13 +249,11 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
252249
.in_bounds_access_chain(u32_ptr, None, array, [actual_index])
253250
.unwrap()
254251
.with_type(u32_ptr);
255-
if self.builder.has_capability(Capability::ShaderNonUniform) {
256-
// apply NonUniform to the operation and the index
257-
self.emit()
258-
.decorate(ptr.def(self), Decoration::NonUniform, []);
259-
self.emit()
260-
.decorate(actual_index, Decoration::NonUniform, []);
261-
}
252+
// apply NonUniform to the operation and the index
253+
self.emit()
254+
.decorate(ptr.def(self), Decoration::NonUniform, []);
255+
self.emit()
256+
.decorate(actual_index, Decoration::NonUniform, []);
262257
self.store(value, ptr, Align::ONE);
263258
Ok(())
264259
}

crates/rustc_codegen_spirv/src/builder_spirv.rs

Lines changed: 7 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,11 @@ use rspirv::{binary::Assemble, binary::Disassemble};
1515
use rustc_abi::Size;
1616
use rustc_arena::DroplessArena;
1717
use rustc_codegen_ssa::traits::ConstCodegenMethods as _;
18-
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
18+
use rustc_data_structures::fx::FxHashMap;
1919
use rustc_middle::bug;
2020
use rustc_middle::mir::interpret::ConstAllocation;
2121
use rustc_middle::ty::TyCtxt;
2222
use rustc_span::source_map::SourceMap;
23-
use rustc_span::symbol::Symbol;
2423
use rustc_span::{DUMMY_SP, FileName, FileNameDisplayPreference, SourceFile, Span};
2524
use std::assert_matches::assert_matches;
2625
use std::cell::{RefCell, RefMut};
@@ -443,8 +442,6 @@ pub struct BuilderSpirv<'tcx> {
443442
id_to_const: RefCell<FxHashMap<Word, WithConstLegality<SpirvConst<'tcx, 'tcx>>>>,
444443

445444
debug_file_cache: RefCell<FxHashMap<DebugFileKey, DebugFileSpirv<'tcx>>>,
446-
447-
enabled_capabilities: FxHashSet<Capability>,
448445
}
449446

450447
impl<'tcx> BuilderSpirv<'tcx> {
@@ -461,50 +458,26 @@ impl<'tcx> BuilderSpirv<'tcx> {
461458
builder.set_version(version.0, version.1);
462459
builder.module_mut().header.as_mut().unwrap().generator = 0x001B_0000;
463460

464-
let mut enabled_capabilities = FxHashSet::default();
465-
466-
fn add_cap(
467-
builder: &mut Builder,
468-
enabled_capabilities: &mut FxHashSet<Capability>,
469-
cap: Capability,
470-
) {
471-
// This should be the only callsite of Builder::capability (aside from tests), to make
472-
// sure the hashset stays in sync.
473-
builder.capability(cap);
474-
enabled_capabilities.insert(cap);
475-
}
476-
fn add_ext(builder: &mut Builder, ext: Symbol) {
477-
// This should be the only callsite of Builder::extension (aside from tests), to make
478-
// sure the hashset stays in sync.
479-
builder.extension(ext.as_str());
480-
}
481-
482461
for feature in features {
483462
match *feature {
484463
TargetFeature::Capability(cap) => {
485-
add_cap(&mut builder, &mut enabled_capabilities, cap);
464+
builder.capability(cap);
486465
}
487466
TargetFeature::Extension(ext) => {
488-
add_ext(&mut builder, ext);
467+
builder.extension(ext.as_str());
489468
}
490469
}
491470
}
492471

493-
add_cap(&mut builder, &mut enabled_capabilities, Capability::Shader);
472+
builder.capability(Capability::Shader);
494473
if memory_model == MemoryModel::Vulkan {
495474
if version < (1, 5) {
496-
add_ext(&mut builder, sym.spv_khr_vulkan_memory_model);
475+
builder.extension(sym.spv_khr_vulkan_memory_model.as_str());
497476
}
498-
add_cap(
499-
&mut builder,
500-
&mut enabled_capabilities,
501-
Capability::VulkanMemoryModel,
502-
);
477+
builder.capability(Capability::VulkanMemoryModel);
503478
}
504-
505479
// The linker will always be ran on this module
506-
add_cap(&mut builder, &mut enabled_capabilities, Capability::Linkage);
507-
480+
builder.capability(Capability::Linkage);
508481
builder.memory_model(AddressingModel::Logical, memory_model);
509482

510483
Self {
@@ -514,7 +487,6 @@ impl<'tcx> BuilderSpirv<'tcx> {
514487
const_to_id: Default::default(),
515488
id_to_const: Default::default(),
516489
debug_file_cache: Default::default(),
517-
enabled_capabilities,
518490
}
519491
}
520492

@@ -535,10 +507,6 @@ impl<'tcx> BuilderSpirv<'tcx> {
535507
.unwrap();
536508
}
537509

538-
pub fn has_capability(&self, capability: Capability) -> bool {
539-
self.enabled_capabilities.contains(&capability)
540-
}
541-
542510
/// See comment on `BuilderCursor`
543511
fn builder(&self, cursor: BuilderCursor) -> RefMut<'_, Builder> {
544512
let mut builder = self.builder.borrow_mut();

crates/rustc_codegen_spirv/src/codegen_cx/entry.rs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use crate::builder_spirv::{SpirvFunctionCursor, SpirvValue, SpirvValueExt};
99
use crate::spirv_type::SpirvType;
1010
use rspirv::dr::Operand;
1111
use rspirv::spirv::{
12-
BuiltIn, Capability, Decoration, Dim, ExecutionModel, FunctionControl, StorageClass, Word,
12+
BuiltIn, Decoration, Dim, ExecutionModel, FunctionControl, StorageClass, Word,
1313
};
1414
use rustc_abi::FieldsShape;
1515
use rustc_codegen_ssa::traits::{BaseTypeCodegenMethods, BuilderMethods, MiscCodegenMethods as _};
@@ -931,16 +931,12 @@ impl<'tcx> CodegenCx<'tcx> {
931931
_ => false,
932932
};
933933
if let Some(attachment_index) = attrs.input_attachment_index {
934-
if is_subpass_input && self.builder.has_capability(Capability::InputAttachment) {
934+
if is_subpass_input {
935935
self.emit_global().decorate(
936936
var_id.unwrap(),
937937
Decoration::InputAttachmentIndex,
938938
std::iter::once(Operand::LiteralBit32(attachment_index.value)),
939939
);
940-
} else if is_subpass_input {
941-
self.tcx
942-
.dcx()
943-
.span_err(hir_param.ty_span, "Missing capability InputAttachment");
944940
} else {
945941
self.tcx.dcx().span_err(
946942
attachment_index.span,

0 commit comments

Comments
 (0)