summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/shader_recompiler/backend/spirv/emit_spirv_context_get_set.cpp16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/shader_recompiler/backend/spirv/emit_spirv_context_get_set.cpp b/src/shader_recompiler/backend/spirv/emit_spirv_context_get_set.cpp
index 23a74f966..f3de577f6 100644
--- a/src/shader_recompiler/backend/spirv/emit_spirv_context_get_set.cpp
+++ b/src/shader_recompiler/backend/spirv/emit_spirv_context_get_set.cpp
@@ -211,7 +211,7 @@ Id EmitGetAttribute(EmitContext& ctx, IR::Attribute attr, Id vertex) {
211 } 211 }
212 switch (attr) { 212 switch (attr) {
213 case IR::Attribute::PrimitiveId: 213 case IR::Attribute::PrimitiveId:
214 return ctx.OpLoad(ctx.U32[1], ctx.primitive_id); 214 return ctx.OpBitcast(ctx.F32[1], ctx.OpLoad(ctx.U32[1], ctx.primitive_id));
215 case IR::Attribute::PositionX: 215 case IR::Attribute::PositionX:
216 case IR::Attribute::PositionY: 216 case IR::Attribute::PositionY:
217 case IR::Attribute::PositionZ: 217 case IR::Attribute::PositionZ:
@@ -220,17 +220,19 @@ Id EmitGetAttribute(EmitContext& ctx, IR::Attribute attr, Id vertex) {
220 ctx.F32[1], AttrPointer(ctx, ctx.input_f32, vertex, ctx.input_position, element_id())); 220 ctx.F32[1], AttrPointer(ctx, ctx.input_f32, vertex, ctx.input_position, element_id()));
221 case IR::Attribute::InstanceId: 221 case IR::Attribute::InstanceId:
222 if (ctx.profile.support_vertex_instance_id) { 222 if (ctx.profile.support_vertex_instance_id) {
223 return ctx.OpLoad(ctx.U32[1], ctx.instance_id); 223 return ctx.OpBitcast(ctx.F32[1], ctx.OpLoad(ctx.U32[1], ctx.instance_id));
224 } else { 224 } else {
225 return ctx.OpISub(ctx.U32[1], ctx.OpLoad(ctx.U32[1], ctx.instance_index), 225 const Id index{ctx.OpLoad(ctx.U32[1], ctx.instance_index)};
226 ctx.OpLoad(ctx.U32[1], ctx.base_instance)); 226 const Id base{ctx.OpLoad(ctx.U32[1], ctx.base_instance)};
227 return ctx.OpBitcast(ctx.F32[1], ctx.OpISub(ctx.U32[1], index, base));
227 } 228 }
228 case IR::Attribute::VertexId: 229 case IR::Attribute::VertexId:
229 if (ctx.profile.support_vertex_instance_id) { 230 if (ctx.profile.support_vertex_instance_id) {
230 return ctx.OpLoad(ctx.U32[1], ctx.vertex_id); 231 return ctx.OpBitcast(ctx.F32[1], ctx.OpLoad(ctx.U32[1], ctx.vertex_id));
231 } else { 232 } else {
232 return ctx.OpISub(ctx.U32[1], ctx.OpLoad(ctx.U32[1], ctx.vertex_index), 233 const Id index{ctx.OpLoad(ctx.U32[1], ctx.vertex_index)};
233 ctx.OpLoad(ctx.U32[1], ctx.base_vertex)); 234 const Id base{ctx.OpLoad(ctx.U32[1], ctx.base_vertex)};
235 return ctx.OpBitcast(ctx.F32[1], ctx.OpISub(ctx.U32[1], index, base));
234 } 236 }
235 case IR::Attribute::FrontFace: 237 case IR::Attribute::FrontFace:
236 return ctx.OpSelect(ctx.U32[1], ctx.OpLoad(ctx.U1, ctx.front_face), 238 return ctx.OpSelect(ctx.U32[1], ctx.OpLoad(ctx.U1, ctx.front_face),