mirror of
https://github.com/RPCS3/rpcs3.git
synced 2024-11-26 04:32:35 +01:00
rsx/fp: Improvements
- Export some debug information in the free texture register space components zw Very useful when analysing renderdoc captures - Enable shadow comparison on depth as long as compare function is active and texture is uploaded for depth read Some engines (UE3) read all the components in the shader and use mul/mad with the result
This commit is contained in:
parent
5817f9fe3f
commit
27552891ad
@ -644,10 +644,10 @@ bool FragmentProgramDecompiler::handle_tex_srb(u32 opcode)
|
||||
SetDst(getFunction(FUNCTION::FUNCTION_TEXTURE_SAMPLE1D));
|
||||
return true;
|
||||
case rsx::texture_dimension_extended::texture_dimension_2d:
|
||||
if (DstExpectsSca() && (m_prog.shadow_textures & (1 << dst.tex_num)))
|
||||
if (m_prog.shadow_textures & (1 << dst.tex_num))
|
||||
{
|
||||
m_shadow_sampled_textures |= (1 << dst.tex_num);
|
||||
SetDst(getFunction(FUNCTION::FUNCTION_TEXTURE_SHADOW2D) + ".r", false); //No swizzle mask on shadow lookup
|
||||
SetDst(getFunction(FUNCTION::FUNCTION_TEXTURE_SHADOW2D) + ".xxxx");
|
||||
return true;
|
||||
}
|
||||
if (m_prog.redirected_textures & (1 << dst.tex_num))
|
||||
@ -676,10 +676,10 @@ bool FragmentProgramDecompiler::handle_tex_srb(u32 opcode)
|
||||
return true;
|
||||
case rsx::texture_dimension_extended::texture_dimension_2d:
|
||||
//Note shadow comparison only returns a true/false result!
|
||||
if (DstExpectsSca() && (m_prog.shadow_textures & (1 << dst.tex_num)))
|
||||
if (m_prog.shadow_textures & (1 << dst.tex_num))
|
||||
{
|
||||
m_shadow_sampled_textures |= (1 << dst.tex_num);
|
||||
SetDst(getFunction(FUNCTION::FUNCTION_TEXTURE_SHADOW2D_PROJ) + ".r", false); //No swizzle mask on shadow lookup
|
||||
SetDst(getFunction(FUNCTION::FUNCTION_TEXTURE_SHADOW2D_PROJ) + ".xxxx");
|
||||
}
|
||||
else
|
||||
SetDst(getFunction(FUNCTION::FUNCTION_TEXTURE_SAMPLE2D_PROJ));
|
||||
|
@ -349,9 +349,10 @@ public:
|
||||
}
|
||||
else if (sanitize)
|
||||
{
|
||||
//Lower NaNs to 0
|
||||
const auto mask = _mm_cmpunord_ps((__m128&)shuffled_vector, _mm_set1_ps(1.f));
|
||||
const auto result = _mm_andnot_ps(mask, (__m128&)shuffled_vector);
|
||||
//Convert NaNs and Infs to 0
|
||||
const auto masked = _mm_and_si128((__m128i&)shuffled_vector, _mm_set1_epi32(0x7fffffff));
|
||||
const auto valid = _mm_cmplt_epi32(masked, _mm_set1_epi32(0x7f800000));
|
||||
const auto result = _mm_and_si128((__m128i&)shuffled_vector, valid);
|
||||
_mm_stream_si128((__m128i*)dst, (__m128i&)result);
|
||||
}
|
||||
else
|
||||
|
@ -1517,6 +1517,8 @@ namespace rsx
|
||||
auto &tex = rsx::method_registers.fragment_textures[i];
|
||||
result.texture_scale[i][0] = sampler_descriptors[i]->scale_x;
|
||||
result.texture_scale[i][1] = sampler_descriptors[i]->scale_y;
|
||||
result.texture_scale[i][2] = (f32)tex.remap(); //Debug value
|
||||
result.texture_scale[i][3] = (f32)tex.format(); //Debug value
|
||||
result.textures_alpha_kill[i] = 0;
|
||||
result.textures_zfunc[i] = 0;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user