mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-08-02 22:28:45 +00:00
spirv: Better names
This commit is contained in:
parent
dd0773dfb1
commit
dd0abc556b
3 changed files with 12 additions and 10 deletions
|
@ -86,10 +86,11 @@ Id OutputAttrPointer(EmitContext& ctx, IR::Attribute attr, u32 element) {
|
||||||
} // Anonymous namespace
|
} // Anonymous namespace
|
||||||
|
|
||||||
Id EmitGetUserData(EmitContext& ctx, IR::ScalarReg reg) {
|
Id EmitGetUserData(EmitContext& ctx, IR::ScalarReg reg) {
|
||||||
|
const u32 index = ctx.binding.user_data + ctx.info.ud_mask.Index(reg);
|
||||||
|
const u32 half = PushData::UdRegsIndex + (index >> 2);
|
||||||
const Id ud_ptr{
|
const Id ud_ptr{
|
||||||
ctx.OpAccessChain(ctx.TypePointer(spv::StorageClass::PushConstant, ctx.U32[1]),
|
ctx.OpAccessChain(ctx.TypePointer(spv::StorageClass::PushConstant, ctx.U32[1]),
|
||||||
ctx.push_data_block, ctx.ConstU32(PushData::UdRegsIndex),
|
ctx.push_data_block, ctx.ConstU32(half), ctx.ConstU32(index & 3))};
|
||||||
ctx.ConstU32(ctx.binding.user_data + ctx.info.ud_mask.Index(reg)))};
|
|
||||||
const Id ud_reg{ctx.OpLoad(ctx.U32[1], ud_ptr)};
|
const Id ud_reg{ctx.OpLoad(ctx.U32[1], ud_ptr)};
|
||||||
ctx.Name(ud_reg, fmt::format("ud_{}", u32(reg)));
|
ctx.Name(ud_reg, fmt::format("ud_{}", u32(reg)));
|
||||||
return ud_reg;
|
return ud_reg;
|
||||||
|
|
|
@ -181,9 +181,10 @@ void EmitContext::DefineBufferOffsets() {
|
||||||
const Id ptr{OpAccessChain(TypePointer(spv::StorageClass::PushConstant, U32[1]),
|
const Id ptr{OpAccessChain(TypePointer(spv::StorageClass::PushConstant, U32[1]),
|
||||||
push_data_block, ConstU32(half), ConstU32(comp))};
|
push_data_block, ConstU32(half), ConstU32(comp))};
|
||||||
const Id value{OpLoad(U32[1], ptr)};
|
const Id value{OpLoad(U32[1], ptr)};
|
||||||
Name(value, fmt::format("buf{}_off", binding));
|
|
||||||
buffer.offset = OpBitFieldUExtract(U32[1], value, ConstU32(offset), ConstU32(8U));
|
buffer.offset = OpBitFieldUExtract(U32[1], value, ConstU32(offset), ConstU32(8U));
|
||||||
|
Name(buffer.offset, fmt::format("buf{}_off", binding));
|
||||||
buffer.offset_dwords = OpShiftRightLogical(U32[1], buffer.offset, ConstU32(2U));
|
buffer.offset_dwords = OpShiftRightLogical(U32[1], buffer.offset, ConstU32(2U));
|
||||||
|
Name(buffer.offset_dwords, fmt::format("buf{}_dword_off", binding));
|
||||||
}
|
}
|
||||||
for (TextureBufferDefinition& tex_buffer : texture_buffers) {
|
for (TextureBufferDefinition& tex_buffer : texture_buffers) {
|
||||||
const u32 binding = tex_buffer.binding;
|
const u32 binding = tex_buffer.binding;
|
||||||
|
@ -193,8 +194,8 @@ void EmitContext::DefineBufferOffsets() {
|
||||||
const Id ptr{OpAccessChain(TypePointer(spv::StorageClass::PushConstant, U32[1]),
|
const Id ptr{OpAccessChain(TypePointer(spv::StorageClass::PushConstant, U32[1]),
|
||||||
push_data_block, ConstU32(half), ConstU32(comp))};
|
push_data_block, ConstU32(half), ConstU32(comp))};
|
||||||
const Id value{OpLoad(U32[1], ptr)};
|
const Id value{OpLoad(U32[1], ptr)};
|
||||||
Name(value, fmt::format("texbuf{}_off", binding));
|
tex_buffer.coord_offset = OpBitFieldUExtract(U32[1], value, ConstU32(offset), ConstU32(6U));
|
||||||
tex_buffer.coord_offset = OpBitFieldUExtract(U32[1], value, ConstU32(offset), ConstU32(8U));
|
Name(tex_buffer.coord_offset, fmt::format("texbuf{}_off", binding));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -332,20 +333,20 @@ void EmitContext::DefineOutputs() {
|
||||||
|
|
||||||
void EmitContext::DefinePushDataBlock() {
|
void EmitContext::DefinePushDataBlock() {
|
||||||
// Create push constants block for instance steps rates
|
// Create push constants block for instance steps rates
|
||||||
const Id ud_array{TypeArray(U32[1], ConstU32(PushData::MaxUdRegs))};
|
const Id struct_type{Name(TypeStruct(U32[1], U32[1], U32[4], U32[4], U32[4], U32[4]), "AuxData")};
|
||||||
Decorate(ud_array, spv::Decoration::ArrayStride, 4U);
|
|
||||||
const Id struct_type{Name(TypeStruct(U32[1], U32[1], U32[4], U32[4], ud_array), "AuxData")};
|
|
||||||
Decorate(struct_type, spv::Decoration::Block);
|
Decorate(struct_type, spv::Decoration::Block);
|
||||||
MemberName(struct_type, 0, "sr0");
|
MemberName(struct_type, 0, "sr0");
|
||||||
MemberName(struct_type, 1, "sr1");
|
MemberName(struct_type, 1, "sr1");
|
||||||
MemberName(struct_type, 2, "buf_offsets0");
|
MemberName(struct_type, 2, "buf_offsets0");
|
||||||
MemberName(struct_type, 3, "buf_offsets1");
|
MemberName(struct_type, 3, "buf_offsets1");
|
||||||
MemberName(struct_type, 4, "ud_regs");
|
MemberName(struct_type, 4, "ud_regs0");
|
||||||
|
MemberName(struct_type, 5, "ud_regs1");
|
||||||
MemberDecorate(struct_type, 0, spv::Decoration::Offset, 0U);
|
MemberDecorate(struct_type, 0, spv::Decoration::Offset, 0U);
|
||||||
MemberDecorate(struct_type, 1, spv::Decoration::Offset, 4U);
|
MemberDecorate(struct_type, 1, spv::Decoration::Offset, 4U);
|
||||||
MemberDecorate(struct_type, 2, spv::Decoration::Offset, 8U);
|
MemberDecorate(struct_type, 2, spv::Decoration::Offset, 8U);
|
||||||
MemberDecorate(struct_type, 3, spv::Decoration::Offset, 24U);
|
MemberDecorate(struct_type, 3, spv::Decoration::Offset, 24U);
|
||||||
MemberDecorate(struct_type, 4, spv::Decoration::Offset, 40U);
|
MemberDecorate(struct_type, 4, spv::Decoration::Offset, 40U);
|
||||||
|
MemberDecorate(struct_type, 5, spv::Decoration::Offset, 56U);
|
||||||
push_data_block = DefineVar(struct_type, spv::StorageClass::PushConstant);
|
push_data_block = DefineVar(struct_type, spv::StorageClass::PushConstant);
|
||||||
Name(push_data_block, "push_data");
|
Name(push_data_block, "push_data");
|
||||||
interfaces.push_back(push_data_block);
|
interfaces.push_back(push_data_block);
|
||||||
|
|
|
@ -88,7 +88,7 @@ using SamplerResourceList = boost::container::small_vector<SamplerResource, 16>;
|
||||||
struct PushData {
|
struct PushData {
|
||||||
static constexpr u32 BufOffsetIndex = 2;
|
static constexpr u32 BufOffsetIndex = 2;
|
||||||
static constexpr u32 UdRegsIndex = 4;
|
static constexpr u32 UdRegsIndex = 4;
|
||||||
static constexpr u32 MaxUdRegs = 16;
|
static constexpr u32 MaxUdRegs = 8;
|
||||||
|
|
||||||
u32 step0;
|
u32 step0;
|
||||||
u32 step1;
|
u32 step1;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue