mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-07-22 18:15:14 +00:00
remove profile checks and simple emit for added opcodes
This commit is contained in:
parent
e51d31b359
commit
a608b962a4
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user