remove profile checks and simple emit for added opcodes

This commit is contained in:
Frodo Baggins 2025-07-12 21:45:15 -07:00
parent e51d31b359
commit a608b962a4

View File

@ -7,60 +7,32 @@
namespace Shader::Backend::SPIRV { namespace Shader::Backend::SPIRV {
namespace { namespace {
Id ExtractU16(EmitContext& ctx, Id value) { Id ExtractU16(EmitContext& ctx, Id value) {
if (ctx.profile.support_int16) { return ctx.OpUConvert(ctx.U16, value);
return ctx.OpUConvert(ctx.U16, value);
} else {
return ctx.OpBitFieldUExtract(ctx.U32[1], value, ctx.u32_zero_value, ctx.ConstU32(16u));
}
} }
Id ExtractS16(EmitContext& ctx, Id value) { Id ExtractS16(EmitContext& ctx, Id value) {
if (ctx.profile.support_int16) { return ctx.OpSConvert(ctx.S16, value);
return ctx.OpSConvert(ctx.S16, value);
} else {
return ctx.OpBitFieldSExtract(ctx.U32[1], value, ctx.u32_zero_value, ctx.ConstU32(16u));
}
} }
Id ExtractU8(EmitContext& ctx, Id value) { Id ExtractU8(EmitContext& ctx, Id value) {
if (ctx.profile.support_int8) { return ctx.OpUConvert(ctx.U8, value);
return ctx.OpUConvert(ctx.U8, value);
} else {
return ctx.OpBitFieldUExtract(ctx.U32[1], value, ctx.u32_zero_value, ctx.ConstU32(8u));
}
} }
Id ExtractS8(EmitContext& ctx, Id value) { Id ExtractS8(EmitContext& ctx, Id value) {
if (ctx.profile.support_int8) { return ctx.OpSConvert(ctx.S8, value);
return ctx.OpSConvert(ctx.S8, value);
} else {
return ctx.OpBitFieldSExtract(ctx.U32[1], value, ctx.u32_zero_value, ctx.ConstU32(8u));
}
} }
} // Anonymous namespace } // Anonymous namespace
Id EmitConvertS16F16(EmitContext& ctx, Id value) { Id EmitConvertS16F16(EmitContext& ctx, Id value) {
if (ctx.profile.support_int16) { return ctx.OpSConvert(ctx.U32[1], ctx.OpConvertFToS(ctx.U16, value));
return ctx.OpSConvert(ctx.U32[1], ctx.OpConvertFToS(ctx.U16, value));
} else {
return ExtractS16(ctx, ctx.OpConvertFToS(ctx.U32[1], value));
}
} }
Id EmitConvertS16F32(EmitContext& ctx, Id value) { Id EmitConvertS16F32(EmitContext& ctx, Id value) {
if (ctx.profile.support_int16) { return ctx.OpSConvert(ctx.U32[1], ctx.OpConvertFToS(ctx.U16, value));
return ctx.OpSConvert(ctx.U32[1], ctx.OpConvertFToS(ctx.U16, value));
} else {
return ExtractS16(ctx, ctx.OpConvertFToS(ctx.U32[1], value));
}
} }
Id EmitConvertS16F64(EmitContext& ctx, Id value) { Id EmitConvertS16F64(EmitContext& ctx, Id value) {
if (ctx.profile.support_int16) { return ctx.OpSConvert(ctx.U32[1], ctx.OpConvertFToS(ctx.U16, value));
return ctx.OpSConvert(ctx.U32[1], ctx.OpConvertFToS(ctx.U16, value));
} else {
return ExtractS16(ctx, ctx.OpConvertFToS(ctx.U32[1], value));
}
} }
Id EmitConvertS32F16(EmitContext& ctx, Id value) { Id EmitConvertS32F16(EmitContext& ctx, Id value) {
@ -88,27 +60,15 @@ Id EmitConvertS64F64(EmitContext& ctx, Id value) {
} }
Id EmitConvertU16F16(EmitContext& ctx, Id value) { Id EmitConvertU16F16(EmitContext& ctx, Id value) {
if (ctx.profile.support_int16) { return ctx.OpUConvert(ctx.U32[1], ctx.OpConvertFToU(ctx.U16, value));
return ctx.OpUConvert(ctx.U32[1], ctx.OpConvertFToU(ctx.U16, value));
} else {
return ExtractU16(ctx, ctx.OpConvertFToU(ctx.U32[1], value));
}
} }
Id EmitConvertU16F32(EmitContext& ctx, Id value) { Id EmitConvertU16F32(EmitContext& ctx, Id value) {
if (ctx.profile.support_int16) { return ctx.OpUConvert(ctx.U32[1], ctx.OpConvertFToU(ctx.U16, value));
return ctx.OpUConvert(ctx.U32[1], ctx.OpConvertFToU(ctx.U16, value));
} else {
return ExtractU16(ctx, ctx.OpConvertFToU(ctx.U32[1], value));
}
} }
Id EmitConvertU16F64(EmitContext& ctx, Id value) { Id EmitConvertU16F64(EmitContext& ctx, Id value) {
if (ctx.profile.support_int16) { return ctx.OpUConvert(ctx.U32[1], ctx.OpConvertFToU(ctx.U16, value));
return ctx.OpUConvert(ctx.U32[1], ctx.OpConvertFToU(ctx.U16, value));
} else {
return ExtractU16(ctx, ctx.OpConvertFToU(ctx.U32[1], value));
}
} }
Id EmitConvertU32F16(EmitContext& ctx, Id value) { Id EmitConvertU32F16(EmitContext& ctx, Id value) {
@ -272,15 +232,11 @@ Id EmitConvertU32U8(EmitContext& ctx, Id value) {
} }
Id EmitConvertS32S8(EmitContext& ctx, Id value) { Id EmitConvertS32S8(EmitContext& ctx, Id value) {
const Id as_s8 = ctx.OpBitcast(ctx.S8, value); return ctx.OpSConvert(ctx.U32[1], value);
const Id as_s32 = ctx.OpSConvert(ctx.S32[1], as_s8);
return ctx.OpBitcast(ctx.U32[1], as_s32);
} }
Id EmitConvertS32S16(EmitContext& ctx, Id value) { Id EmitConvertS32S16(EmitContext& ctx, Id value) {
const Id as_s16 = ctx.OpBitcast(ctx.S16, value); return ctx.OpSConvert(ctx.U32[1], value);
const Id as_s32 = ctx.OpSConvert(ctx.S32[1], as_s16);
return ctx.OpBitcast(ctx.U32[1], as_s32);
} }
} // namespace Shader::Backend::SPIRV } // namespace Shader::Backend::SPIRV