Dolphin, the GameCube and Wii emulator - Forums

Full Version: Custom D3D Version with massive performance boost and a lot of rendering fixes
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
(06-15-2014, 02:21 AM)JMC47 Wrote: [ -> ]This build should fix the EFB2Ram crashes.

Sadly no =(, see my report.

Salu2 - Darkness Knight
GSYNC can benefit Dolphin because PAL games run at 50 FPS and NTSC games run at 59.94 FPS
(06-15-2014, 02:26 AM)Darkness Knight Wrote: [ -> ]
(06-15-2014, 02:21 AM)JMC47 Wrote: [ -> ]This build should fix the EFB2Ram crashes.

Sadly no =(, see my report.

Salu2 - Darkness Knight

The first url i publish was a build with a big misstake ( i comment some wip tests and the line that compute texture hashes was commented with the line above that was for private purpose ) try to download again it should work far better. i will review my code tonight to see if i did not forget something else in that release i did just before moving to sport.

Someone already tried efb2ram with the corrected build and report it was ok compared to the immediate issues of the first one
Btw galop1n if you interested in d3d specific issues, in Aggresive Inline and BMX XXX (both gc games) there are no player shadows with d3d while they work fine with opengl.
I have tested Sonic Adventure 2 with your latest build and have being getting random crashes, here is the log.

Code:
09:45:922 VertexLoader.cpp:947 E[Video]: ByteDequant is set to zero
09:45:943 HW\Memmap.cpp:345 E[MI]: Unknown Pointer 0x1c1c4300 PC 0x800e3828 LR 0x800e6308
09:45:944 IndexGenerator.cpp:203 W[Video]: Non-standard primitive drawing command GL_DRAW_QUADS_2
09:45:946 HW\Memmap.cpp:345 E[MI]: Unknown Pointer 0x404a0021 PC 0x800e3828 LR 0x800e6308
09:45:990 IndexGenerator.cpp:203 W[Video]: Non-standard primitive drawing command GL_DRAW_QUADS_2
09:45:991 HW\Memmap.cpp:345 E[MI]: Unknown Pointer 0x403d0006 PC 0x800e3828 LR 0x800e6308
09:45:991 HW\Memmap.cpp:345 E[MI]: Unknown Pointer 0x90000c00 PC 0x800e3828 LR 0x800e6308
09:45:991 HW\Memmap.cpp:345 E[MI]: Unknown Pointer 0x40085454 PC 0x800e3828 LR 0x800e6308
09:45:996 VertexLoader.cpp:947 E[Video]: ByteDequant is set to zero
09:45:998 HW\Memmap.cpp:345 E[MI]: Unknown Pointer 0x40372525 PC 0x800e3828 LR 0x800e6308
09:46:107 HW\Memmap.cpp:345 E[MI]: Unknown Pointer 0x820040c0 PC 0x800e3828 LR 0x800e6308
09:46:107 HW\Memmap.cpp:345 E[MI]: Unknown Pointer 0x820034a8 PC 0x800e3828 LR 0x800e6308
09:46:108 IndexGenerator.cpp:203 W[Video]: Non-standard primitive drawing command GL_DRAW_QUADS_2
09:46:110 HW\Memmap.cpp:345 E[MI]: Unknown Pointer 0x82005cc0 PC 0x800e3828 LR 0x800e6308
09:46:110 HW\Memmap.cpp:345 E[MI]: Unknown Pointer 0x40800050 PC 0x800e3828 LR 0x800e6308
09:46:110 IndexGenerator.cpp:203 W[Video]: Non-standard primitive drawing command GL_DRAW_QUADS_2
09:46:403 IndexGenerator.cpp:203 W[Video]: Non-standard primitive drawing command GL_DRAW_QUADS_2
09:46:403 HW\Memmap.cpp:345 E[MI]: Unknown Pointer 0x82001c88 PC 0x800e3828 LR 0x800e6308
09:46:573 VertexLoader.cpp:947 E[Video]: ByteDequant is set to zero
09:46:579 VertexManagerBase.cpp:70 E[Video]: Too little remaining index values. Use 32-bit or reset them on flush.
09:46:696 VertexManagerBase.cpp:70 E[Video]: Too little remaining index values. Use 32-bit or reset them on flush.
09:46:770 IndexGenerator.cpp:203 W[Video]: Non-standard primitive drawing command GL_DRAW_QUADS_2
09:46:770 HW\Memmap.cpp:345 E[MI]: Unknown Pointer 0xd4b01440 PC 0x800e3828 LR 0x800e6308
09:46:771 HW\Memmap.cpp:345 E[MI]: Unknown Pointer 0xd5038a40 PC 0x800e3828 LR 0x800e6308
09:46:772 IndexGenerator.cpp:203 W[Video]: Non-standard primitive drawing command GL_DRAW_QUADS_2
09:46:773 IndexGenerator.cpp:203 W[Video]: Non-standard primitive drawing command GL_DRAW_QUADS_2
09:46:776 IndexGenerator.cpp:203 W[Video]: Non-standard primitive drawing command GL_DRAW_QUADS_2
09:46:777 IndexGenerator.cpp:203 W[Video]: Non-standard primitive drawing command GL_DRAW_QUADS_2
09:46:779 VertexManagerBase.cpp:70 E[Video]: Too little remaining index values. Use 32-bit or reset them on flush.
09:46:791 HW\Memmap.cpp:345 E[MI]: Unknown Pointer 0xfffffc40 PC 0x800e3828 LR 0x800e6308
09:46:791 HW\Memmap.cpp:345 E[MI]: Unknown Pointer 0xfffffc40 PC 0x800e3828 LR 0x800e6308
09:46:791 HW\Memmap.cpp:345 E[MI]: Unknown Pointer 0xfffffc40 PC 0x800e3828 LR 0x800e6308
09:46:791 HW\Memmap.cpp:345 E[MI]: Unknown Pointer 0xfffffc40 PC 0x800e3828 LR 0x800e6308
09:46:791 HW\Memmap.cpp:345 E[MI]: Unknown Pointer 0xfffffc40 PC 0x800e3828 LR 0x800e6308
09:46:791 HW\Memmap.cpp:345 E[MI]: Unknown Pointer 0xfffffc40 PC 0x800e3828 LR 0x800e6308
09:46:791 HW\Memmap.cpp:345 E[MI]: Unknown Pointer 0xfffffc40 PC 0x800e3828 LR 0x800e6308
09:46:791 HW\Memmap.cpp:345 E[MI]: Unknown Pointer 0xfffffc40 PC 0x800e3828 LR 0x800e6308
09:46:792 VertexManagerBase.cpp:70 E[Video]: Too little remaining index values. Use 32-bit or reset them on flush.
09:46:793 VertexManagerBase.cpp:70 E[Video]: Too little remaining index values. Use 32-bit or reset them on flush.
09:46:794 VertexManagerBase.cpp:73 E[Video]: VertexManager: Buffer not large enough for all indices! Increase MAXIBUFFERSIZE or we need primitive breaking after all.
09:46:795 VertexManagerBase.cpp:70 E[Video]: Too little remaining index values. Use 32-bit or reset them on flush.
09:46:802 MsgHandler.cpp:80 E[*]: Warning: Failed to compile pixel shader!
This usually happens when trying to use Dolphin with an outdated GPU or integrated GPU like the Intel GMA series.

bad_ps_0001
Code:
//Pixel Shader for TEV stages
//15 TEV stages, 0 texgens, 1850112 IND stages
int idot(int3 x, int3 y)
{
    int3 tmp = x * y;
    return tmp.x + tmp.y + tmp.z;
}
int idot(int4 x, int4 y)
{
    int4 tmp = x * y;
    return tmp.x + tmp.y + tmp.z + tmp.w;
}

int  iround(float  x) { return int (round(x)); }
int2 iround(float2 x) { return int2(round(x)); }
int3 iround(float3 x) { return int3(round(x)); }
int4 iround(float4 x) { return int4(round(x)); }

sampler samp0 : register(s0);
sampler samp1 : register(s1);
sampler samp2 : register(s2);
sampler samp3 : register(s3);
sampler samp4 : register(s4);
sampler samp5 : register(s5);
sampler samp6 : register(s6);
sampler samp7 : register(s7);

Texture2D Tex0 : register(t0);
Texture2D Tex1 : register(t1);
Texture2D Tex2 : register(t2);
Texture2D Tex3 : register(t3);
Texture2D Tex4 : register(t4);
Texture2D Tex5 : register(t5);
Texture2D Tex6 : register(t6);
Texture2D Tex7 : register(t7);

cbuffer PSBlock {
    int4 color[4];
    int4 k[4];
    int4 alphaRef;
    float4 texdim[8];
    int4 czbias[2];
    int4 cindscale[2];
    int4 cindmtx[6];
    int4 cfogcolor;
    int4 cfogi;
    float4 cfogf[2];
    int4 cPLightColors[8];
    float4 cPLights[32];
    int4 cPmtrl[4];
};
[earlydepthstencil]
void main(
  out float4 ocol0 : SV_Target0,
  in float4 rawpos : SV_Position,
  in centroid float4 colors_0 : COLOR0,
  in centroid float4 colors_1 : COLOR1,
  in centroid float4 clipPos : TEXCOORD0,
  in centroid float4 Normal : TEXCOORD1        ) {
    int4 c0 = color[1], c1 = color[2], c2 = color[3], prev = color[0];
    int4 rastemp = int4(0, 0, 0, 0), textemp = int4(0, 0, 0, 0), konsttemp = int4(0, 0, 0, 0);
    int3 comp16 = int3(1, 256, 0), comp24 = int3(1, 256, 256*256);
    int alphabump=0;
    int3 tevcoord=int3(0, 0, 0);
    int2 wrappedcoord=int2(0,0), tempcoord=int2(0,0);
    int4 tevin_a=int4(0,0,0,0),tevin_b=int4(0,0,0,0),tevin_c=int4(0,0,0,0),tevin_d=int4(0,0,0,0);

    float3 _norm0 = normalize(Normal.xyz);

    float3 pos = float3(clipPos.x,clipPos.y,Normal.w);
    int4 lacc;
    float3 ldir, h;
    float dist, dist2, attn;
{
int4 mat = int4(round(colors_0 * 255.0));
lacc = int4(255, 255, 255, 255);
lacc.w = 255;
lacc = clamp(lacc, 0, 255);colors_0 = float4((mat * (lacc + (lacc >> 7))) >> 8) / 255.0;
}
    int2 fixpoint_uv0 = int2(0, 0);

    tempcoord = int2(0, 0);
    int3 iindtex3 = iround(255.0 * Tex0.Sample(samp0,(float2(tempcoord)/128.0).xy * texdim[0].xy)).abg;
    // TEV stage 0
    // indirect op
    int2 indtevtrans0 = int2(0, 0);
    wrappedcoord.x = fixpoint_uv0.x;
    wrappedcoord.y = fixpoint_uv0.y;
    tevcoord.xy = wrappedcoord + indtevtrans0;
    tevcoord.xy = (tevcoord.xy << 8) >> 8;
    rastemp = iround(colors_0 * 255.0).rgba;
    textemp = iround(255.0 * Tex0.Sample(samp0,(float2(tevcoord.xy)/128.0).xy * texdim[0].xy)).rgba;
tevin_a = int4(int3(0,0,0), 0)&255;
tevin_b = int4(textemp.rgb, textemp.a)&255;
tevin_c = int4(rastemp.rgb, rastemp.a)&255;
tevin_d = int4(int3(0,0,0), 0);
    // color combine
    prev.rgb = clamp((((tevin_d.rgb)) + ((((tevin_a.rgb*256 + (tevin_b.rgb-tevin_a.rgb)*(tevin_c.rgb+(tevin_c.rgb>>7)))) + 128)>>8)), int3(0,0,0), int3(255,255,255));
    // alpha combine
    prev.a = clamp((((tevin_d.a)) + ((((tevin_a.a*256 + (tevin_b.a-tevin_a.a)*(tevin_c.a+(tevin_c.a>>7)))) + 128)>>8)), 0, 255);

    // TEV stage 1
    // indirect op
    int2 indtevtrans1 = int2(0, 0);
    wrappedcoord.x = fixpoint_uv0.x;
    wrappedcoord.y = fixpoint_uv0.y;
    tevcoord.xy = wrappedcoord + indtevtrans1;
    tevcoord.xy = (tevcoord.xy << 8) >> 8;
    textemp = iround(255.0 * Tex5.Sample(samp5,(float2(tevcoord.xy)/128.0).xy * texdim[5].xy)).rgba;
tevin_a = int4(prev.rgb, 0)&255;
tevin_b = int4(textemp.rgb, 0)&255;
tevin_c = int4(textemp.aaa, 0)&255;
tevin_d = int4(int3(0,0,0), prev.a);
    // color combine
    prev.rgb = clamp((((tevin_d.rgb)) + ((((tevin_a.rgb*256 + (tevin_b.rgb-tevin_a.rgb)*(tevin_c.rgb+(tevin_c.rgb>>7)))) + 128)>>8)), int3(0,0,0), int3(255,255,255));
    // alpha combine
    prev.a = clamp((((tevin_d.a)) + ((((tevin_a.a*256 + (tevin_b.a-tevin_a.a)*(tevin_c.a+(tevin_c.a>>7)))) + 128)>>8)), 0, 255);

    // TEV stage 2
    // indirect op
    int2 indtevtrans2 = int2(0, 0);
    wrappedcoord.x = fixpoint_uv0.x;
    wrappedcoord.y = fixpoint_uv0.y;
    tevcoord.xy = wrappedcoord + indtevtrans2;
    tevcoord.xy = (tevcoord.xy << 8) >> 8;
    textemp = iround(255.0 * Tex6.Sample(samp6,(float2(tevcoord.xy)/128.0).xy * texdim[6].xy)).rgba;
tevin_a = int4(prev.rgb, 0)&255;
tevin_b = int4(textemp.rgb, 0)&255;
tevin_c = int4(textemp.aaa, 0)&255;
tevin_d = int4(int3(0,0,0), prev.a);
    // color combine
    prev.rgb = clamp((((tevin_d.rgb)) + ((((tevin_a.rgb*256 + (tevin_b.rgb-tevin_a.rgb)*(tevin_c.rgb+(tevin_c.rgb>>7)))) + 128)>>8)), int3(0,0,0), int3(255,255,255));
    // alpha combine
    prev.a = clamp((((tevin_d.a)) + ((((tevin_a.a*256 + (tevin_b.a-tevin_a.a)*(tevin_c.a+(tevin_c.a>>7)))) + 128)>>8)), 0, 255);

    // TEV stage 3
    // indirect op
    int2 indtevtrans3 = int2(0, 0);
    wrappedcoord.x = fixpoint_uv0.x;
    wrappedcoord.y = fixpoint_uv0.y;
    tevcoord.xy = wrappedcoord + indtevtrans3;
    tevcoord.xy = (tevcoord.xy << 8) >> 8;
    textemp = iround(255.0 * Tex7.Sample(samp7,(float2(tevcoord.xy)/128.0).xy * texdim[7].xy)).rgba;
tevin_a = int4(prev.rgb, 0)&255;
tevin_b = int4(textemp.rgb, 0)&255;
tevin_c = int4(textemp.aaa, 0)&255;
tevin_d = int4(int3(0,0,0), prev.a);
    // color combine
    prev.rgb = clamp((((tevin_d.rgb)) + ((((tevin_a.rgb*256 + (tevin_b.rgb-tevin_a.rgb)*(tevin_c.rgb+(tevin_c.rgb>>7)))) + 128)>>8)), int3(0,0,0), int3(255,255,255));
    // alpha combine
    prev.a = clamp((((tevin_d.a)) + ((((tevin_a.a*256 + (tevin_b.a-tevin_a.a)*(tevin_c.a+(tevin_c.a>>7)))) + 128)>>8)), 0, 255);

    // TEV stage 4
    // indirect op
    int2 indtevtrans4 = int2(0, 0);
    wrappedcoord.x = fixpoint_uv0.x;
    wrappedcoord.y = fixpoint_uv0.y;
    tevcoord.xy = wrappedcoord + indtevtrans4;
    tevcoord.xy = (tevcoord.xy << 8) >> 8;
    textemp = iround(255.0 * Tex3.Sample(samp3,(float2(tevcoord.xy)/128.0).xy * texdim[3].xy)).rgba;
tevin_a = int4(prev.rgb, 0)&255;
tevin_b = int4(textemp.rgb, 0)&255;
tevin_c = int4(textemp.aaa, 0)&255;
tevin_d = int4(int3(0,0,0), prev.a);
    // color combine
    prev.rgb = clamp((((tevin_d.rgb)) + ((((tevin_a.rgb*256 + (tevin_b.rgb-tevin_a.rgb)*(tevin_c.rgb+(tevin_c.rgb>>7)))) + 128)>>8)), int3(0,0,0), int3(255,255,255));
    // alpha combine
    prev.a = clamp((((tevin_d.a)) + ((((tevin_a.a*256 + (tevin_b.a-tevin_a.a)*(tevin_c.a+(tevin_c.a>>7)))) + 128)>>8)), 0, 255);

    // TEV stage 5
    // indirect op
alphabump = iindtex3.x & 248;
    int3 iindtevcrd5 = iindtex3 & 255;
    iindtevcrd5.xyz += int3(-128, -128, -128);
    int2 indtevtrans5 = int2(0, 0);
    wrappedcoord.x = fixpoint_uv0.x % (256<<7);
    wrappedcoord.y = fixpoint_uv0.y % (256<<7);
    tevcoord.xy = wrappedcoord + indtevtrans5;
    tevcoord.xy = (tevcoord.xy << 8) >> 8;
    textemp = iround(255.0 * Tex4.Sample(samp4,(float2(tevcoord.xy)/128.0).xy * texdim[4].xy)).rgba;
tevin_a = int4(prev.rgb, 0)&255;
tevin_b = int4(textemp.rgb, 0)&255;
tevin_c = int4(textemp.aaa, 0)&255;
tevin_d = int4(int3(0,0,0), prev.a);
    // color combine
    prev.rgb = clamp((((tevin_d.rgb)) + ((((tevin_a.rgb*256 + (tevin_b.rgb-tevin_a.rgb)*(tevin_c.rgb+(tevin_c.rgb>>7)))) + 128)>>8)), int3(0,0,0), int3(255,255,255));
    // alpha combine
    prev.a = clamp((((tevin_d.a)) + ((((tevin_a.a*256 + (tevin_b.a-tevin_a.a)*(tevin_c.a+(tevin_c.a>>7)))) + 128)>>8)), 0, 255);

    // TEV stage 6
    // indirect op
    int2 indtevtrans6 = int2(0, 0);
    wrappedcoord.x = fixpoint_uv0.x;
    wrappedcoord.y = fixpoint_uv0.y;
    tevcoord.xy = wrappedcoord + indtevtrans6;
    tevcoord.xy = (tevcoord.xy << 8) >> 8;
    textemp = iround(255.0 * Tex6.Sample(samp6,(float2(tevcoord.xy)/128.0).xy * texdim[6].xy)).rgba;
tevin_a = int4(prev.rgb, prev.a)&255;
tevin_b = int4(prev.rgb, prev.a)&255;
tevin_c = int4(prev.rgb, prev.a)&255;
tevin_d = int4(prev.rgb, prev.a);
    // color combine
    prev.rgb = clamp((((tevin_d.rgb)) + ((((tevin_a.rgb*256 + (tevin_b.rgb-tevin_a.rgb)*(tevin_c.rgb+(tevin_c.rgb>>7)))) + 128)>>8)), int3(-1024,-1024,-1024), int3(1023,1023,1023));
    // alpha combine
    prev.a = clamp((((tevin_d.a)) + ((((tevin_a.a*256 + (tevin_b.a-tevin_a.a)*(tevin_c.a+(tevin_c.a>>7)))) + 128)>>8)), -1024, 1023);

    // TEV stage 7
    // indirect op
    int2 indtevtrans7 = int2(0, 0);
    wrappedcoord.x = fixpoint_uv0.x;
    wrappedcoord.y = fixpoint_uv0.y;
    tevcoord.xy = wrappedcoord + indtevtrans7;
    tevcoord.xy = (tevcoord.xy << 8) >> 8;
    textemp = iround(255.0 * Tex7.Sample(samp7,(float2(tevcoord.xy)/128.0).xy * texdim[7].xy)).rgba;
tevin_a = int4(prev.rgb, prev.a)&255;
tevin_b = int4(prev.rgb, prev.a)&255;
tevin_c = int4(prev.rgb, prev.a)&255;
tevin_d = int4(prev.rgb, prev.a);
    // color combine
    prev.rgb = clamp((((tevin_d.rgb)) + ((((tevin_a.rgb*256 + (tevin_b.rgb-tevin_a.rgb)*(tevin_c.rgb+(tevin_c.rgb>>7)))) + 128)>>8)), int3(-1024,-1024,-1024), int3(1023,1023,1023));
    // alpha combine
    prev.a = clamp((((tevin_d.a)) + ((((tevin_a.a*256 + (tevin_b.a-tevin_a.a)*(tevin_c.a+(tevin_c.a>>7)))) + 128)>>8)), -1024, 1023);

    // TEV stage 8
    // indirect op
alphabump = iindtex3.x & 248;
    int3 iindtevcrd8 = iindtex3 & 255;
    iindtevcrd8.xyz += int3(-128, -128, -128);
    int2 indtevtrans8 = int2(0, 0);
    wrappedcoord.x = fixpoint_uv0.x % (256<<7);
    wrappedcoord.y = fixpoint_uv0.y % xyz;
    tevcoord.xy = wrappedcoord + indtevtrans8;
    tevcoord.xy = (tevcoord.xy << 8) >> 8;
    textemp = int4(255, 255, 255, 255);
tevin_a = int4(prev.rgb, prev.a)&255;
tevin_b = int4(prev.rgb, prev.a)&255;
tevin_c = int4(prev.rgb, prev.a)&255;
tevin_d = int4(prev.rgb, prev.a);
    // color combine
    prev.rgb = clamp((((tevin_d.rgb)) + ((((tevin_a.rgb*256 + (tevin_b.rgb-tevin_a.rgb)*(tevin_c.rgb+(tevin_c.rgb>>7)))) + 128)>>8)), int3(-1024,-1024,-1024), int3(1023,1023,1023));
    // alpha combine
    prev.a = clamp((((tevin_d.a)) + ((((tevin_a.a*256 + (tevin_b.a-tevin_a.a)*(tevin_c.a+(tevin_c.a>>7)))) + 128)>>8)), -1024, 1023);

    // TEV stage 9
    // indirect op
    int2 indtevtrans9 = int2(0, 0);
    wrappedcoord.x = fixpoint_uv0.x;
    wrappedcoord.y = fixpoint_uv0.y;
    tevcoord.xy = wrappedcoord + indtevtrans9;
    tevcoord.xy = (tevcoord.xy << 8) >> 8;
    textemp = int4(255, 255, 255, 255);
tevin_a = int4(prev.rgb, prev.a)&255;
tevin_b = int4(prev.rgb, prev.a)&255;
tevin_c = int4(prev.rgb, prev.a)&255;
tevin_d = int4(prev.rgb, prev.a);
    // color combine
    prev.rgb = clamp((((tevin_d.rgb)) + ((((tevin_a.rgb*256 + (tevin_b.rgb-tevin_a.rgb)*(tevin_c.rgb+(tevin_c.rgb>>7)))) + 128)>>8)), int3(-1024,-1024,-1024), int3(1023,1023,1023));
    // alpha combine
    prev.a = clamp((((tevin_d.a)) + ((((tevin_a.a*256 + (tevin_b.a-tevin_a.a)*(tevin_c.a+(tevin_c.a>>7)))) + 128)>>8)), -1024, 1023);

    // TEV stage 10
    // indirect op
    int2 indtevtrans10 = int2(0, 0);
    wrappedcoord.x = fixpoint_uv0.x;
    wrappedcoord.y = fixpoint_uv0.y;
    tevcoord.xy = wrappedcoord + indtevtrans10;
    tevcoord.xy = (tevcoord.xy << 8) >> 8;
    textemp = int4(255, 255, 255, 255);
tevin_a = int4(prev.rgb, prev.a)&255;
tevin_b = int4(prev.rgb, prev.a)&255;
tevin_c = int4(prev.rgb, prev.a)&255;
tevin_d = int4(prev.rgb, prev.a);
    // color combine
    prev.rgb = clamp((((tevin_d.rgb)) + ((((tevin_a.rgb*256 + (tevin_b.rgb-tevin_a.rgb)*(tevin_c.rgb+(tevin_c.rgb>>7)))) + 128)>>8)), int3(-1024,-1024,-1024), int3(1023,1023,1023));
    // alpha combine
    prev.a = clamp((((tevin_d.a)) + ((((tevin_a.a*256 + (tevin_b.a-tevin_a.a)*(tevin_c.a+(tevin_c.a>>7)))) + 128)>>8)), -1024, 1023);

    // TEV stage 11
    // indirect op
alphabump = iindtex3.x & 248;
    int3 iindtevcrd11 = iindtex3 & 255;
    iindtevcrd11.xyz += int3(-128, -128, -128);
    int2 indtevtrans11 = int2(0, 0);
    wrappedcoord.x = fixpoint_uv0.x % (256<<7);
    wrappedcoord.y = fixpoint_uv0.y % (16<<7);
    tevcoord.xy = wrappedcoord + indtevtrans11;
    tevcoord.xy = (tevcoord.xy << 8) >> 8;
    textemp = int4(255, 255, 255, 255);
tevin_a = int4(prev.rgb, prev.a)&255;
tevin_b = int4(prev.rgb, prev.a)&255;
tevin_c = int4(prev.rgb, prev.a)&255;
tevin_d = int4(prev.rgb, prev.a);
    // color combine
    prev.rgb = clamp((((tevin_d.rgb)) + ((((tevin_a.rgb*256 + (tevin_b.rgb-tevin_a.rgb)*(tevin_c.rgb+(tevin_c.rgb>>7)))) + 128)>>8)), int3(-1024,-1024,-1024), int3(1023,1023,1023));
    // alpha combine
    prev.a = clamp((((tevin_d.a)) + ((((tevin_a.a*256 + (tevin_b.a-tevin_a.a)*(tevin_c.a+(tevin_c.a>>7)))) + 128)>>8)), -1024, 1023);

    // TEV stage 12
    // indirect op
    int2 indtevtrans12 = int2(0, 0);
    wrappedcoord.x = fixpoint_uv0.x;
    wrappedcoord.y = fixpoint_uv0.y;
    tevcoord.xy = wrappedcoord + indtevtrans12;
    tevcoord.xy = (tevcoord.xy << 8) >> 8;
    textemp = int4(255, 255, 255, 255);
tevin_a = int4(prev.rgb, prev.a)&255;
tevin_b = int4(prev.rgb, prev.a)&255;
tevin_c = int4(prev.rgb, prev.a)&255;
tevin_d = int4(prev.rgb, prev.a);
    // color combine
    prev.rgb = clamp((((tevin_d.rgb)) + ((((tevin_a.rgb*256 + (tevin_b.rgb-tevin_a.rgb)*(tevin_c.rgb+(tevin_c.rgb>>7)))) + 128)>>8)), int3(-1024,-1024,-1024), int3(1023,1023,1023));
    // alpha combine
    prev.a = clamp((((tevin_d.a)) + ((((tevin_a.a*256 + (tevin_b.a-tevin_a.a)*(tevin_c.a+(tevin_c.a>>7)))) + 128)>>8)), -1024, 1023);

    // TEV stage 13
    // indirect op
    int2 indtevtrans13 = int2(0, 0);
    wrappedcoord.x = fixpoint_uv0.x;
    wrappedcoord.y = fixpoint_uv0.y;
    tevcoord.xy = wrappedcoord + indtevtrans13;
    tevcoord.xy = (tevcoord.xy << 8) >> 8;
    textemp = int4(255, 255, 255, 255);
tevin_a = int4(prev.rgb, prev.a)&255;
tevin_b = int4(prev.rgb, prev.a)&255;
tevin_c = int4(prev.rgb, prev.a)&255;
tevin_d = int4(prev.rgb, prev.a);
    // color combine
    prev.rgb = clamp((((tevin_d.rgb)) + ((((tevin_a.rgb*256 + (tevin_b.rgb-tevin_a.rgb)*(tevin_c.rgb+(tevin_c.rgb>>7)))) + 128)>>8)), int3(-1024,-1024,-1024), int3(1023,1023,1023));
    // alpha combine
    prev.a = clamp((((tevin_d.a)) + ((((tevin_a.a*256 + (tevin_b.a-tevin_a.a)*(tevin_c.a+(tevin_c.a>>7)))) + 128)>>8)), -1024, 1023);

    // TEV stage 14
    // indirect op
    int2 indtevtrans14 = int2(0, 0);
    wrappedcoord.x = fixpoint_uv0.x;
    wrappedcoord.y = fixpoint_uv0.y;
    tevcoord.xy = wrappedcoord + indtevtrans14;
    tevcoord.xy = (tevcoord.xy << 8) >> 8;
    textemp = int4(255, 255, 255, 255);
tevin_a = int4(prev.rgb, prev.a)&255;
tevin_b = int4(prev.rgb, prev.a)&255;
tevin_c = int4(prev.rgb, prev.a)&255;
tevin_d = int4(prev.rgb, prev.a);
    // color combine
    prev.rgb = clamp((((tevin_d.rgb)) + ((((tevin_a.rgb*256 + (tevin_b.rgb-tevin_a.rgb)*(tevin_c.rgb+(tevin_c.rgb>>7)))) + 128)>>8)), int3(-1024,-1024,-1024), int3(1023,1023,1023));
    // alpha combine
    prev.a = clamp((((tevin_d.a)) + ((((tevin_a.a*256 + (tevin_b.a-tevin_a.a)*(tevin_c.a+(tevin_c.a>>7)))) + 128)>>8)), -1024, 1023);

    prev = prev & 255;
    if(!( (prev.a >  alphaRef.r) && (true))) {
        ocol0 = float4(0.0, 0.0, 0.0, 0.0);
        discard;
}
    int zCoord = 0xFFFFFF- iround(rawpos.z * float(0xFFFFFF));
zCoord = clamp(zCoord,0,0xFFFFFF);
    ocol0 = float4(prev) / 255.0;
}
(06-15-2014, 02:48 AM)galop1n Wrote: [ -> ]
(06-15-2014, 02:26 AM)Darkness Knight Wrote: [ -> ]
(06-15-2014, 02:21 AM)JMC47 Wrote: [ -> ]This build should fix the EFB2Ram crashes.

Sadly no =(, see my report.

Salu2 - Darkness Knight

The first url i publish was a build with a big misstake ( i comment some wip tests and the line that compute texture hashes was commented with the line above that was for private purpose ) try to download again it should work far better. i will review my code tonight to see if i did not forget something else in that release i did just before moving to sport.

Someone already tried efb2ram with the corrected build and report it was ok compared to the immediate issues of the first one

Thanks but have the same issues with the new download =(.

Salu2 - Darkness Knight
Loving your changes in Okami, i used OGL before (couldn't tell you why really) and after TEV merged it killed my performance, downloaded your plugin and it's back and better than how it was!
Though i'm sure you're more interested in game breaking bugs.. But if you could think of away to fix the misaligned framebuffer effects, I'd love you forever Big Grin

Also, if you should ever find it needed to use your DX coding skills elsewhere. PCSX2 needs a rewrite of GSDX... Tongue
PCSX2 needs a rewrite of everything. It's even more hacked together than Dolphin, hence so many devs abandoning it.
(06-16-2014, 04:18 AM)AnyOldName3 Wrote: [ -> ]PCSX2 needs a rewrite of everything. It's even more hacked together than Dolphin, hence so many devs abandoning it.
And it's GUI is downright horrible. And lots of flickering.
Ahem, I'd prefer it if things were kept on topic in this thread.

Galop1n: Bug in Mario Kart Wii, sometimes the kart selection screen has blackened karts.
Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39