spirv/convert: Catch more broken signed operations on Nvidia OpenGL
BitCast U32 to S32 before converting to float on drivers with broken signed operations.
This commit is contained in:
		| @@ -205,6 +205,9 @@ Id EmitConvertF32S16(EmitContext& ctx, Id value) { | |||||||
| } | } | ||||||
|  |  | ||||||
| Id EmitConvertF32S32(EmitContext& ctx, Id value) { | Id EmitConvertF32S32(EmitContext& ctx, Id value) { | ||||||
|  |     if (ctx.profile.has_broken_signed_operations) { | ||||||
|  |         value = ctx.OpBitcast(ctx.S32[1], value); | ||||||
|  |     } | ||||||
|     return ctx.OpConvertSToF(ctx.F32[1], value); |     return ctx.OpConvertSToF(ctx.F32[1], value); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -237,6 +240,9 @@ Id EmitConvertF64S16(EmitContext& ctx, Id value) { | |||||||
| } | } | ||||||
|  |  | ||||||
| Id EmitConvertF64S32(EmitContext& ctx, Id value) { | Id EmitConvertF64S32(EmitContext& ctx, Id value) { | ||||||
|  |     if (ctx.profile.has_broken_signed_operations) { | ||||||
|  |         value = ctx.OpBitcast(ctx.S32[1], value); | ||||||
|  |     } | ||||||
|     return ctx.OpConvertSToF(ctx.F64[1], value); |     return ctx.OpConvertSToF(ctx.F64[1], value); | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user