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);
|
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) {
|
void EmitStoreBufferFormatF32(EmitContext& ctx, IR::Inst* inst, u32 handle, Id address, Id value) {
|
||||||
const auto& buffer = ctx.texture_buffers[handle];
|
const auto& buffer = ctx.texture_buffers[handle];
|
||||||
const Id tex_buffer = ctx.OpLoad(buffer.image_type, buffer.id);
|
const Id tex_buffer = ctx.OpLoad(buffer.image_type, buffer.id);
|
||||||
|
|
Loading…
Reference in New Issue