shader: Add PointCoord attribute
This commit is contained in:
		| @@ -425,6 +425,9 @@ void EmitContext::DefineInputs(const Info& info) { | ||||
|     if (info.loads_front_face) { | ||||
|         front_face = DefineInput(*this, U1, spv::BuiltIn::FrontFacing); | ||||
|     } | ||||
|     if (info.loads_point_coord) { | ||||
|         point_coord = DefineInput(*this, F32[2], spv::BuiltIn::PointCoord); | ||||
|     } | ||||
|     for (size_t index = 0; index < info.input_generics.size(); ++index) { | ||||
|         const InputVarying generic{info.input_generics[index]}; | ||||
|         if (!generic.used) { | ||||
|   | ||||
| @@ -103,6 +103,8 @@ public: | ||||
|     Id vertex_index{}; | ||||
|     Id base_vertex{}; | ||||
|     Id front_face{}; | ||||
|     Id point_coord{}; | ||||
|  | ||||
|     Id fswzadd_lut_a{}; | ||||
|     Id fswzadd_lut_b{}; | ||||
|  | ||||
|   | ||||
| @@ -179,6 +179,12 @@ Id EmitGetAttribute(EmitContext& ctx, IR::Attribute attr) { | ||||
|         return ctx.OpSelect(ctx.U32[1], ctx.OpLoad(ctx.U1, ctx.front_face), | ||||
|                             ctx.Constant(ctx.U32[1], std::numeric_limits<u32>::max()), | ||||
|                             ctx.u32_zero_value); | ||||
|     case IR::Attribute::PointSpriteS: | ||||
|         return ctx.OpLoad(ctx.F32[1], ctx.OpAccessChain(ctx.input_f32, ctx.point_coord, | ||||
|                                                         ctx.Constant(ctx.U32[1], 0U))); | ||||
|     case IR::Attribute::PointSpriteT: | ||||
|         return ctx.OpLoad(ctx.F32[1], ctx.OpAccessChain(ctx.input_f32, ctx.point_coord, | ||||
|                                                         ctx.Constant(ctx.U32[1], 1U))); | ||||
|     default: | ||||
|         throw NotImplementedException("Read attribute {}", attr); | ||||
|     } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user