Skip to content

Commit a5159fa

Browse files
Moved the more modern logic to IsVulkanStorageBuffer, which is then called by IsVulkanReadOnlyStorageBuffer
1 parent 8bf4b62 commit a5159fa

1 file changed

Lines changed: 18 additions & 36 deletions

File tree

source/opt/instruction.cpp

Lines changed: 18 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -403,24 +403,29 @@ bool Instruction::IsVulkanStorageBuffer() const {
403403

404404
spv::StorageClass storage_class =
405405
spv::StorageClass(GetSingleWordInOperand(kPointerTypeStorageClassIndex));
406-
if (storage_class == spv::StorageClass::Uniform) {
407-
bool is_buffer_block = false;
408-
context()->get_decoration_mgr()->ForEachDecoration(
409-
base_type->result_id(), uint32_t(spv::Decoration::BufferBlock),
410-
[&is_buffer_block](const Instruction&) { is_buffer_block = true; });
411-
return is_buffer_block;
412-
} else if (storage_class == spv::StorageClass::StorageBuffer) {
413-
bool is_block = false;
414-
context()->get_decoration_mgr()->ForEachDecoration(
415-
base_type->result_id(), uint32_t(spv::Decoration::Block),
416-
[&is_block](const Instruction&) { is_block = true; });
417-
return is_block;
406+
407+
if (storage_class != spv::StorageClass::Uniform &&
408+
storage_class != spv::StorageClass::StorageBuffer) {
409+
return false;
410+
}
411+
412+
analysis::DecorationManager* decoration_mgr = context()->get_decoration_mgr();
413+
uint32_t base_result_id = base_type->result_id();
414+
415+
if (storage_class == spv::StorageClass::Uniform &&
416+
decoration_mgr->HasDecoration(base_result_id,
417+
spv::Decoration::BufferBlock)) {
418+
return true;
419+
}
420+
if (storage_class == spv::StorageClass::StorageBuffer &&
421+
decoration_mgr->HasDecoration(base_result_id, spv::Decoration::Block)) {
422+
return true;
418423
}
419424
return false;
420425
}
421426

422427
bool Instruction::IsVulkanReadOnlyStorageBuffer() const {
423-
if (opcode() != spv::Op::OpTypePointer) {
428+
if (!IsVulkanStorageBuffer()) {
424429
return false;
425430
}
426431
Instruction* base_type =
@@ -432,31 +437,8 @@ bool Instruction::IsVulkanReadOnlyStorageBuffer() const {
432437
base_type = context()->get_def_use_mgr()->GetDef(
433438
base_type->GetSingleWordInOperand(0));
434439
}
435-
436-
if (base_type->opcode() != spv::Op::OpTypeStruct) {
437-
return false;
438-
}
439-
440-
spv::StorageClass storage_class =
441-
spv::StorageClass(GetSingleWordInOperand(kPointerTypeStorageClassIndex));
442-
443-
if (storage_class != spv::StorageClass::Uniform &&
444-
storage_class != spv::StorageClass::StorageBuffer) {
445-
return false;
446-
}
447-
448440
analysis::DecorationManager* decoration_mgr = context()->get_decoration_mgr();
449441
uint32_t base_result_id = base_type->result_id();
450-
451-
if (storage_class == spv::StorageClass::Uniform &&
452-
!decoration_mgr->HasDecoration(base_result_id,
453-
spv::Decoration::BufferBlock)) {
454-
return false;
455-
}
456-
if (storage_class == spv::StorageClass::StorageBuffer &&
457-
!decoration_mgr->HasDecoration(base_result_id, spv::Decoration::Block)) {
458-
return false;
459-
}
460442
return decoration_mgr->HasDecoration(base_result_id,
461443
spv::Decoration::NonWritable);
462444
}

0 commit comments

Comments
 (0)