149{
150 if ( IsValidated() )
152
154
156 {
157
158
159 constexpr static TUINT8 s_VertexShaderFunction[] = { 0x01, 0x01, 0xfe, 0xff, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x04, 0x00, 0xe4, 0xa0, 0x03, 0x00, 0xe4, 0x90, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xb0, 0x00, 0x00, 0x00, 0x80, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x0f, 0x80, 0x05, 0x20, 0xe4, 0xa0, 0x02, 0x00, 0x00, 0x90, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0f, 0x80, 0x06, 0x20, 0xe4, 0xa0, 0x02, 0x00, 0x00, 0x90, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0f, 0x80, 0x07, 0x20, 0xe4, 0xa0, 0x02, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xb0, 0x00, 0x00, 0x55, 0x80, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x0f, 0x80, 0x05, 0x20, 0xe4, 0xa0, 0x02, 0x00, 0x55, 0x90, 0x03, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0f, 0x80, 0x06, 0x20, 0xe4, 0xa0, 0x02, 0x00, 0x55, 0x90, 0x04, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0f, 0x80, 0x07, 0x20, 0xe4, 0xa0, 0x02, 0x00, 0x55, 0x90, 0x05, 0x00, 0xe4, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xb0, 0x00, 0x00, 0xaa, 0x80, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x0f, 0x80, 0x05, 0x20, 0xe4, 0xa0, 0x02, 0x00, 0xaa, 0x90, 0x03, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0f, 0x80, 0x06, 0x20, 0xe4, 0xa0, 0x02, 0x00, 0xaa, 0x90, 0x04, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0f, 0x80, 0x07, 0x20, 0xe4, 0xa0, 0x02, 0x00, 0xaa, 0x90, 0x05, 0x00, 0xe4, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xb0, 0x00, 0x00, 0xff, 0x80, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x0f, 0x80, 0x05, 0x20, 0xe4, 0xa0, 0x02, 0x00, 0xff, 0x90, 0x03, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0f, 0x80, 0x06, 0x20, 0xe4, 0xa0, 0x02, 0x00, 0xff, 0x90, 0x04, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0f, 0x80, 0x07, 0x20, 0xe4, 0xa0, 0x02, 0x00, 0xff, 0x90, 0x05, 0x00, 0xe4, 0x80, 0x09, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x80, 0x03, 0x00, 0xe4, 0x80, 0x00, 0x00, 0xe4, 0x90, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x01, 0x80, 0x03, 0x00, 0xe4, 0x80, 0x01, 0x00, 0xe4, 0x90, 0x09, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0x80, 0x04, 0x00, 0xe4, 0x80, 0x00, 0x00, 0xe4, 0x90, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x02, 0x80, 0x04, 0x00, 0xe4, 0x80, 0x01, 0x00, 0xe4, 0x90, 0x09, 0x00, 0x00, 0x00, 0x02, 0x00, 0x04, 0x80, 0x05, 0x00, 0xe4, 0x80, 0x00, 0x00, 0xe4, 0x90, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x04, 0x80, 0x05, 0x00, 0xe4, 0x80, 0x01, 0x00, 0xe4, 0x90, 0x0d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x08, 0x80, 0x02, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0x80, 0x14, 0x00, 0x00, 0x00, 0x07, 0x00, 0x0f, 0x80, 0x02, 0x00, 0xe4, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x07, 0x00, 0xe4, 0x80, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x80, 0x02, 0x00, 0x54, 0x80, 0x5f, 0x00, 0x54, 0xa0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xaa, 0x80, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0x02, 0x00, 0x54, 0x80, 0x5f, 0x00, 0xfe, 0xa0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x55, 0x80, 0x00, 0x00, 0xaa, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x06, 0x00, 0xe4, 0x80, 0x59, 0x00, 0xe4, 0xa1, 0x0b, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x5d, 0x00, 0xaa, 0xa0, 0x0a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x80, 0x02, 0x00, 0x00, 0x80, 0x5d, 0x00, 0xff, 0xa0, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x02, 0x00, 0x00, 0x80, 0x5b, 0x00, 0xa4, 0xa0, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x80, 0x02, 0x00, 0xff, 0x80, 0x02, 0x00, 0x00, 0x81, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x02, 0x00, 0x00, 0x80, 0x5a, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0xe4, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xd0, 0x00, 0x00, 0xe4, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xd0, 0x5a, 0x00, 0xff, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xe0, 0x04, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00 };
160 constexpr static TUINT8 s_VertexHDShaderFunction[] = { 0x01, 0x01, 0xfe, 0xff, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x04, 0x00, 0xe4, 0xa0, 0x03, 0x00, 0xe4, 0x90, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xb0, 0x00, 0x00, 0x00, 0x80, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x0f, 0x80, 0x05, 0x20, 0xe4, 0xa0, 0x02, 0x00, 0x00, 0x90, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0f, 0x80, 0x06, 0x20, 0xe4, 0xa0, 0x02, 0x00, 0x00, 0x90, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0f, 0x80, 0x07, 0x20, 0xe4, 0xa0, 0x02, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xb0, 0x00, 0x00, 0x55, 0x80, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x0f, 0x80, 0x05, 0x20, 0xe4, 0xa0, 0x02, 0x00, 0x55, 0x90, 0x03, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0f, 0x80, 0x06, 0x20, 0xe4, 0xa0, 0x02, 0x00, 0x55, 0x90, 0x04, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0f, 0x80, 0x07, 0x20, 0xe4, 0xa0, 0x02, 0x00, 0x55, 0x90, 0x05, 0x00, 0xe4, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xb0, 0x00, 0x00, 0xaa, 0x80, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x0f, 0x80, 0x05, 0x20, 0xe4, 0xa0, 0x02, 0x00, 0xaa, 0x90, 0x03, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0f, 0x80, 0x06, 0x20, 0xe4, 0xa0, 0x02, 0x00, 0xaa, 0x90, 0x04, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0f, 0x80, 0x07, 0x20, 0xe4, 0xa0, 0x02, 0x00, 0xaa, 0x90, 0x05, 0x00, 0xe4, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xb0, 0x00, 0x00, 0xff, 0x80, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x0f, 0x80, 0x05, 0x20, 0xe4, 0xa0, 0x02, 0x00, 0xff, 0x90, 0x03, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0f, 0x80, 0x06, 0x20, 0xe4, 0xa0, 0x02, 0x00, 0xff, 0x90, 0x04, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0f, 0x80, 0x07, 0x20, 0xe4, 0xa0, 0x02, 0x00, 0xff, 0x90, 0x05, 0x00, 0xe4, 0x80, 0x09, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x80, 0x03, 0x00, 0xe4, 0x80, 0x00, 0x00, 0xe4, 0x90, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x01, 0x80, 0x03, 0x00, 0xe4, 0x80, 0x01, 0x00, 0xe4, 0x90, 0x09, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0x80, 0x04, 0x00, 0xe4, 0x80, 0x00, 0x00, 0xe4, 0x90, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x02, 0x80, 0x04, 0x00, 0xe4, 0x80, 0x01, 0x00, 0xe4, 0x90, 0x09, 0x00, 0x00, 0x00, 0x02, 0x00, 0x04, 0x80, 0x05, 0x00, 0xe4, 0x80, 0x00, 0x00, 0xe4, 0x90, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x04, 0x80, 0x05, 0x00, 0xe4, 0x80, 0x01, 0x00, 0xe4, 0x90, 0x0d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x08, 0x80, 0x02, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0x80, 0x14, 0x00, 0x00, 0x00, 0x07, 0x00, 0x0f, 0x80, 0x02, 0x00, 0xe4, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x07, 0x00, 0xe4, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x06, 0x00, 0xe4, 0x80, 0x59, 0x00, 0xe4, 0xa1, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x80, 0x06, 0x00, 0xe4, 0x80, 0x5e, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xd0, 0x5a, 0x00, 0xff, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xe0, 0x04, 0x00, 0xe4, 0x90, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0xe0, 0x00, 0x00, 0x54, 0x80, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x03, 0xe0, 0x00, 0x00, 0x54, 0x80, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0xe0, 0x00, 0x00, 0x54, 0x80, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x03, 0xe0, 0x00, 0x00, 0x54, 0x80, 0xff, 0xff, 0x00, 0x00 };
161
162 if ( CreateSkinVertexShader( "ASkinShader_D3D8_Win.vsh", (DWORD*)s_VertexShaderFunction, &m_hVertexShader ) &&
163 CreateSkinVertexShader( "ASkinShader_D3D8_Win.vsh", (DWORD*)s_VertexHDShaderFunction, &m_hVertexShaderHD ) )
164 {
165 constexpr static TUINT8 s_PixelShaderFunction[] = { 0x04, 0x01, 0xff, 0xff, 0xfd, 0xff, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xb0, 0x42, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0xb0, 0x42, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0f, 0x80, 0x02, 0x00, 0xe4, 0xb0, 0x42, 0x00, 0x00, 0x00, 0x03, 0x00, 0x0f, 0x80, 0x03, 0x00, 0xe4, 0xb0, 0x42, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0f, 0x80, 0x04, 0x00, 0xe4, 0xb0, 0x12, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0xe4, 0x80, 0x03, 0x00, 0xe4, 0x80, 0x12, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x02, 0x00, 0xe4, 0x80, 0x04, 0x00, 0xe4, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, 0xe4, 0x80, 0x05, 0x00, 0x00, 0x40, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0xff, 0x80, 0x00, 0x00, 0xff, 0x90, 0xff, 0xff, 0x00, 0x00 };
166 constexpr static TUINT8 s_PixelShaderFunctionLowEnd[] = { 0x01, 0x01, 0xff, 0xff, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xb0, 0x42, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0f, 0xb0, 0x42, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0f, 0xb0, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x80, 0x01, 0x00, 0xe4, 0xb1, 0x00, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0xe4, 0xb0, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x02, 0x00, 0xe4, 0xb0, 0x00, 0x00, 0xe4, 0x80, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0xff, 0xb0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
167
169 auto pD3DDevice = pRenderInterface->GetDirect3DDevice();
170 auto pDevice =
TSTATICCAST( TD3DAdapter::Mode::Device, pRenderInterface->GetCurrentDevice() );
171
172 if ( pDevice->GetD3DCaps().PixelShaderVersion < 0xffff0104 )
173 {
175 }
176 else
177 {
179 }
180
181 ApplyGPUSpecificPatches();
182 CheckCPUFeature1();
183 CheckCPUFeature2();
184
185 return BaseClass::Validate();
186 }
187 else
188 {
190 }
191 }
192 else
193 {
194
195
196 ApplyGPUSpecificPatches();
197 CheckCPUFeature1();
198 CheckCPUFeature2();
199
200 return BaseClass::Validate();
201 }
202}
static TBOOL CreatePixelShader(const DWORD *a_pFunction, DWORD *a_pOutPixelShader)
Creates a pixel shader.
virtual void EnableHighEndSkinning(TBOOL a_bEnable) override