shader_recompiler: Avoid some asserts

This commit is contained in:
IndecisiveTurtle 2024-09-03 04:11:10 +03:00
parent f7a8ceb395
commit 9bd3553fe6
4 changed files with 12 additions and 10 deletions

View file

@ -42,7 +42,7 @@ void Name(EmitContext& ctx, Id object, std::string_view format_str, Args&&... ar
} // Anonymous namespace
EmitContext::EmitContext(const Profile& profile_, const RuntimeInfo& runtime_info_,
const Shader::Info& info_, u32& binding_)
const Info& info_, u32& binding_)
: Sirit::Module(profile_.supported_spirv), info{info_}, runtime_info{runtime_info_},
profile{profile_}, stage{info.stage}, binding{binding_} {
AddCapability(spv::Capability::Shader);
@ -169,7 +169,7 @@ EmitContext::SpirvAttribute EmitContext::GetAttributeInfo(AmdGpu::NumberFormat f
void EmitContext::DefineBufferOffsets() {
for (auto& buffer : buffers) {
const u32 binding = buffer.binding;
const u32 half = Shader::PushData::BufOffsetIndex + (binding >> 4);
const u32 half = PushData::BufOffsetIndex + (binding >> 4);
const u32 comp = (binding & 0xf) >> 2;
const u32 offset = (binding & 0x3) << 3;
const Id ptr{OpAccessChain(TypePointer(spv::StorageClass::PushConstant, U32[1]),
@ -180,7 +180,7 @@ void EmitContext::DefineBufferOffsets() {
}
for (auto& tex_buffer : texture_buffers) {
const u32 binding = tex_buffer.binding;
const u32 half = Shader::PushData::BufOffsetIndex + (binding >> 4);
const u32 half = PushData::BufOffsetIndex + (binding >> 4);
const u32 comp = (binding & 0xf) >> 2;
const u32 offset = (binding & 0x3) << 3;
const Id ptr{OpAccessChain(TypePointer(spv::StorageClass::PushConstant, U32[1]),

View file

@ -36,8 +36,8 @@ struct VectorIds {
class EmitContext final : public Sirit::Module {
public:
explicit EmitContext(const Profile& profile, const RuntimeInfo& runtime_info,
const Shader::Info& info, u32& binding);
explicit EmitContext(const Profile& profile, const RuntimeInfo& runtime_info, const Info& info,
u32& binding);
~EmitContext();
Id Def(const IR::Value& value);

View file

@ -113,14 +113,16 @@ struct RuntimeInfo {
RuntimeInfo(Stage stage_) : stage{stage_} {}
bool operator==(const RuntimeInfo& other) const noexcept {
if (stage == Stage::Fragment) {
switch (stage) {
case Stage::Fragment:
return fs_info == other.fs_info;
} else if (stage == Stage::Vertex) {
case Stage::Vertex:
return vs_info == other.vs_info;
} else if (stage == Stage::Compute) {
case Stage::Compute:
return cs_info == other.cs_info;
default:
return true;
}
UNREACHABLE();
}
};

View file

@ -106,7 +106,7 @@ Shader::RuntimeInfo BuildRuntimeInfo(Shader::Stage stage, const GraphicsPipeline
break;
}
default:
UNREACHABLE();
break;
}
return info;
}