Skip to content

Commit 3874f69

Browse files
committed
rm cap checks: remove BuilderSpirv::has_capability
1 parent e9d77f5 commit 3874f69

File tree

4 files changed

+24
-67
lines changed

4 files changed

+24
-67
lines changed

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, SourceFile, Span};
2524
use std::assert_matches;
2625
use std::cell::{RefCell, RefMut};
@@ -442,8 +441,6 @@ pub struct BuilderSpirv<'tcx> {
442441
id_to_const: RefCell<FxHashMap<Word, WithConstLegality<SpirvConst<'tcx, 'tcx>>>>,
443442

444443
debug_file_cache: RefCell<FxHashMap<DebugFileKey, DebugFileSpirv<'tcx>>>,
445-
446-
enabled_capabilities: FxHashSet<Capability>,
447444
}
448445

449446
impl<'tcx> BuilderSpirv<'tcx> {
@@ -460,50 +457,26 @@ impl<'tcx> BuilderSpirv<'tcx> {
460457
builder.set_version(version.0, version.1);
461458
builder.module_mut().header.as_mut().unwrap().generator = 0x001B_0000;
462459

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

492-
add_cap(&mut builder, &mut enabled_capabilities, Capability::Shader);
471+
builder.capability(Capability::Shader);
493472
if memory_model == MemoryModel::Vulkan {
494473
if version < (1, 5) {
495-
add_ext(&mut builder, sym.spv_khr_vulkan_memory_model);
474+
builder.extension(sym.spv_khr_vulkan_memory_model.as_str());
496475
}
497-
add_cap(
498-
&mut builder,
499-
&mut enabled_capabilities,
500-
Capability::VulkanMemoryModel,
501-
);
476+
builder.capability(Capability::VulkanMemoryModel);
502477
}
503-
504478
// The linker will always be ran on this module
505-
add_cap(&mut builder, &mut enabled_capabilities, Capability::Linkage);
506-
479+
builder.capability(Capability::Linkage);
507480
builder.memory_model(AddressingModel::Logical, memory_model);
508481

509482
Self {
@@ -513,7 +486,6 @@ impl<'tcx> BuilderSpirv<'tcx> {
513486
const_to_id: Default::default(),
514487
id_to_const: Default::default(),
515488
debug_file_cache: Default::default(),
516-
enabled_capabilities,
517489
}
518490
}
519491

@@ -534,10 +506,6 @@ impl<'tcx> BuilderSpirv<'tcx> {
534506
.unwrap();
535507
}
536508

537-
pub fn has_capability(&self, capability: Capability) -> bool {
538-
self.enabled_capabilities.contains(&capability)
539-
}
540-
541509
/// See comment on `BuilderCursor`
542510
fn builder(&self, cursor: BuilderCursor) -> RefMut<'_, Builder> {
543511
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)