spirv: Remove conflict
This commit is contained in:
parent
e96a6ebd9d
commit
93db0625f6
|
@ -311,83 +311,6 @@ void EmitStoreBufferU32(EmitContext& ctx, IR::Inst* inst, u32 handle, Id address
|
|||
EmitStoreBufferF32xN<1>(ctx, handle, address, value);
|
||||
}
|
||||
|
||||
<<<<<<< HEAD
|
||||
static Id ConvertF32ToFormat(EmitContext& ctx, Id value, AmdGpu::NumberFormat format,
|
||||
u32 bit_width) {
|
||||
switch (format) {
|
||||
case AmdGpu::NumberFormat::Unorm:
|
||||
return ctx.OpConvertFToU(
|
||||
ctx.U32[1], ctx.OpFMul(ctx.F32[1], value, ctx.ConstF32(float(UXBitsMax(bit_width)))));
|
||||
case AmdGpu::NumberFormat::Uint:
|
||||
return ctx.OpBitcast(ctx.U32[1], value);
|
||||
case AmdGpu::NumberFormat::Float:
|
||||
return value;
|
||||
default:
|
||||
UNREACHABLE_MSG("Unsupported number format for conversion: {}",
|
||||
magic_enum::enum_name(format));
|
||||
}
|
||||
}
|
||||
|
||||
template <u32 N>
|
||||
static void EmitStoreBufferFormatF32xN(EmitContext& ctx, u32 handle, Id address, Id value) {
|
||||
auto& buffer = ctx.buffers[handle];
|
||||
const auto format = buffer.dfmt;
|
||||
const auto num_format = buffer.nfmt;
|
||||
|
||||
switch (format) {
|
||||
case AmdGpu::DataFormat::FormatInvalid:
|
||||
return;
|
||||
case AmdGpu::DataFormat::Format8_8_8_8:
|
||||
case AmdGpu::DataFormat::Format16:
|
||||
case AmdGpu::DataFormat::Format32:
|
||||
case AmdGpu::DataFormat::Format32_32:
|
||||
case AmdGpu::DataFormat::Format32_32_32_32: {
|
||||
ASSERT(N == AmdGpu::NumComponents(format));
|
||||
|
||||
address = ctx.OpIAdd(ctx.U32[1], address, buffer.offset);
|
||||
const Id index = ctx.OpShiftRightLogical(ctx.U32[1], address, ctx.ConstU32(2u));
|
||||
const Id ptr = ctx.OpAccessChain(buffer.pointer_type, buffer.id, ctx.u32_zero_value, index);
|
||||
|
||||
Id packed_value{};
|
||||
for (u32 i = 0; i < N; i++) {
|
||||
const u32 bit_width = AmdGpu::ComponentBits(format, i);
|
||||
const u32 bit_offset = AmdGpu::ComponentOffset(format, i) % 32;
|
||||
|
||||
const Id comp{ConvertF32ToFormat(
|
||||
ctx, N == 1 ? value : ctx.OpCompositeExtract(ctx.F32[1], value, i), num_format,
|
||||
bit_width)};
|
||||
|
||||
if (bit_width == 32) {
|
||||
if constexpr (N == 1) {
|
||||
ctx.OpStore(ptr, comp);
|
||||
} else {
|
||||
const Id index_i = ctx.OpIAdd(ctx.U32[1], index, ctx.ConstU32(i));
|
||||
const Id ptr = ctx.OpAccessChain(buffer.pointer_type, buffer.id,
|
||||
ctx.u32_zero_value, index_i);
|
||||
ctx.OpStore(ptr, comp);
|
||||
}
|
||||
} else {
|
||||
if (i == 0) {
|
||||
packed_value = comp;
|
||||
} else {
|
||||
packed_value =
|
||||
ctx.OpBitFieldInsert(ctx.U32[1], packed_value, comp,
|
||||
ctx.ConstU32(bit_offset), ctx.ConstU32(bit_width));
|
||||
}
|
||||
|
||||
if (i == N - 1) {
|
||||
ctx.OpStore(ptr, packed_value);
|
||||
}
|
||||
}
|
||||
}
|
||||
} break;
|
||||
default:
|
||||
UNREACHABLE_MSG("Invalid format for conversion: {}", magic_enum::enum_name(format));
|
||||
}
|
||||
}
|
||||
|
||||
=======
|
||||
>>>>>>> 8b824588 (video_core: Use texture buffers for untyped format load/store)
|
||||
void EmitStoreBufferFormatF32(EmitContext& ctx, IR::Inst* inst, u32 handle, Id address, Id value) {
|
||||
const auto& buffer = ctx.texture_buffers[handle];
|
||||
const Id tex_buffer = ctx.OpLoad(buffer.image_type, buffer.id);
|
||||
|
|
Loading…
Reference in New Issue