vk_graphics_pipeline: Handle null tsharp

This commit is contained in:
IndecisiveTurtle 2024-08-23 15:34:07 +03:00
parent f5bf701618
commit a8c4f4450c
2 changed files with 15 additions and 7 deletions

View File

@ -179,6 +179,10 @@ struct Image {
return base_address << 8; return base_address << 8;
} }
operator bool() const noexcept {
return base_address != 0;
}
u32 DstSelect() const { u32 DstSelect() const {
return dst_sel_x | (dst_sel_y << 3) | (dst_sel_z << 6) | (dst_sel_w << 9); return dst_sel_x | (dst_sel_y << 3) | (dst_sel_z << 6) | (dst_sel_w << 9);
} }

View File

@ -396,13 +396,17 @@ void GraphicsPipeline::BindResources(const Liverpool::Regs& regs,
boost::container::static_vector<AmdGpu::Image, 16> tsharps; boost::container::static_vector<AmdGpu::Image, 16> tsharps;
for (const auto& image_desc : stage->images) { for (const auto& image_desc : stage->images) {
const auto& tsharp = tsharps.emplace_back( const auto tsharp = stage->ReadUd<AmdGpu::Image>(image_desc.sgpr_base, image_desc.dword_offset);
stage->ReadUd<AmdGpu::Image>(image_desc.sgpr_base, image_desc.dword_offset)); if (tsharp) {
tsharps.emplace_back(tsharp);
VideoCore::ImageInfo image_info{tsharp}; VideoCore::ImageInfo image_info{tsharp};
VideoCore::ImageViewInfo view_info{tsharp, image_desc.is_storage}; VideoCore::ImageViewInfo view_info{tsharp, image_desc.is_storage};
const auto& image_view = texture_cache.FindTexture(image_info, view_info); const auto& image_view = texture_cache.FindTexture(image_info, view_info);
const auto& image = texture_cache.GetImage(image_view.image_id); const auto& image = texture_cache.GetImage(image_view.image_id);
image_infos.emplace_back(VK_NULL_HANDLE, *image_view.image_view, image.layout); image_infos.emplace_back(VK_NULL_HANDLE, *image_view.image_view, image.layout);
} else {
image_infos.emplace_back(VK_NULL_HANDLE, VK_NULL_HANDLE, vk::ImageLayout::eGeneral);
}
set_writes.push_back({ set_writes.push_back({
.dstSet = VK_NULL_HANDLE, .dstSet = VK_NULL_HANDLE,
.dstBinding = binding++, .dstBinding = binding++,