vk_shader_gen_spv: Fix OpCompositeConstruct bug

* Fixes graphics on the 2d_shapes homebrew and maybe other games
This commit is contained in:
GPUCode
2023-01-02 15:14:41 +02:00
parent 230a463a39
commit cce6a79a91
6 changed files with 28 additions and 4 deletions

View File

@ -111,6 +111,8 @@ add_library(video_core STATIC
renderer_vulkan/vk_platform.h
renderer_vulkan/vk_renderpass_cache.cpp
renderer_vulkan/vk_renderpass_cache.h
renderer_vulkan/vk_shader_decompiler.cpp
renderer_vulkan/vk_shader_decompiler.h
renderer_vulkan/vk_shader_gen.cpp
renderer_vulkan/vk_shader_gen.h
renderer_vulkan/vk_shader_gen_spv.cpp

View File

@ -0,0 +1,6 @@
#include "vk_shader_decompiler.h"
vk_shader_decompiler::vk_shader_decompiler()
{
}

View File

@ -0,0 +1,11 @@
#ifndef VK_SHADER_DECOMPILER_H
#define VK_SHADER_DECOMPILER_H
class vk_shader_decompiler
{
public:
vk_shader_decompiler();
};
#endif // VK_SHADER_DECOMPILER_H

View File

@ -1824,6 +1824,7 @@ layout (set = 0, binding = 0, std140) uniform vs_config {
out += program_source;
LOG_INFO(Render_Vulkan, "{}", out);
return out;
}

View File

@ -948,7 +948,8 @@ void FragmentModule::DefineProcTexSampler() {
const Id proctex_alpha_map_offset{GetShaderDataMember(i32_id, ConstS32(13))};
const Id final_alpha{AppendProcTexCombineAndMap(config.state.proctex.alpha_combiner, u, v,
proctex_alpha_map_offset)};
final_color = OpCompositeConstruct(vec_ids.Get(4), final_color, final_alpha);
const Id final_color_xyz{OpVectorShuffle(vec_ids.Get(3), final_color, final_color, 0, 1, 2)};
final_color = OpCompositeConstruct(vec_ids.Get(4), final_color_xyz, final_alpha);
}
OpReturnValue(final_color);

View File

@ -224,10 +224,13 @@ ImageAlloc TextureRuntime::Allocate(u32 width, u32 height, VideoCore::PixelForma
}
const bool need_format_list = create_storage_view && instance.IsImageFormatListSupported();
const vk::Format storage_format = vk::Format::eR32Uint;
const std::array format_list = {
vk::Format::eR8G8B8A8Unorm,
vk::Format::eR32Uint,
};
const vk::ImageFormatListCreateInfo image_format_list = {
.viewFormatCount = 1,
.pViewFormats = &storage_format,
.viewFormatCount = static_cast<u32>(format_list.size()),
.pViewFormats = format_list.data(),
};
const vk::ImageCreateInfo image_info = {