@@ -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
422427bool 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