Я пытаюсь преобразовать встроенный пиксельный шейдер asm ps+mov
3 обратно в HLSL и застрял на одной инструкции, для которой не могу найти никакой документации. Инструкция +mov
, и такой модификатор не указан в модификаторы. Я перевел его в простое задание, но визуализированная сцена тогда выглядит по-другому. Возможно, другие мои переводы тоже неверны.
Полный ассемблерный код:
Sampler[0] = (DiffuseMapSampler);
pixelShader = asm
{
ps_1_3
tex t0
#ifdef _POINTLIGHT_
add r0.rgb, v0, v0
+mov r0.a, v0.a
mul_x4 r0, t0, r0
#else
mul_x4 r0, t0, v0
#endif
#if defined(OVERGROWTH) && HASALPHA2MASK
mul_x2 r0.a, r0.a, t0.a
#endif
};
Структура и семплер
struct VS_OUTPUT
{
float4 Pos : POSITION0;
float2 Tex0 : TEXCOORD0;
#if _HASSHADOW_
float4 TexShadow : TEXCOORD1;
#endif
float4 Color : COLOR0;
float Fog : FOG;
};
texture DiffuseMap;
sampler DiffuseMapSampler = sampler_state
{
Texture = (DiffuseMap);
MipFilter = LINEAR;
MinFilter = LINEAR;
MagFilter = LINEAR;
AddressU = WRAP;
AddressV = WRAP;
MipMapLodBias = 0;
};
Мой перевод HLSL
float4 basicPixelShaderNoShadow(VS_OUTPUT VsOut) : COLOR
{
float4 diffuseMap = tex2D(DiffuseMapSampler, VsOut.Tex0);
float4 outCol;
#ifdef _POINTLIGHT_
outCol.rgb = VsOut.Color.rgb * 2;
outCol.a = VsOut.Color.a;
outCol = diffuseMap * outCol * 4;
#else
outCol = diffuseMap * VsOut.Color * 4;
#endif
#if defined(OVERGROWTH) && HASALPHA2MASK
outCol.a *= 2 * diffuseMap.a;
#endif
return outCol;
}