PCSX2 / pcsx2

PCSX2 - The Playstation 2 Emulator
https://pcsx2.net
GNU General Public License v3.0
11.85k stars 1.63k forks source link

[GSdx] Vertical lines in Marie to Elie no Atelier: Salburg no Renkinjutsushi 1 & 2 #2374

Open orbea opened 6 years ago

orbea commented 6 years ago

PCSX2 version: pcsx2-2018.04.06_1292cd5_master-x86_64-1_git

PCSX2 options: Only occurs with OpenGL and not software and other options do not seem to make a difference.

Plugins used: GSdx (GCC 7.3.0 SSE2/AVX) 1.1.0 [libGSdx] GSdx (GCC 7.3.0, SSE2) 1.0.0 [libGSdx-legacy-1.0.0]

Renderer: OpenGL (Software is not affected) Resolution: Native

Description of the issue: When playing the game Marie to Elie no Atelier: Salburg no Renkinjutsushi 1 & 2 with either the Japanese iso or an iso patched with the new English translation various parts of the game will have vertical lines, these lines can be stationary, mobile or flashing. Most commonly this is seen on every dialogue box and can be seen on the title screen and right after starting the game for easy testing.

I've included two gs dumps showing two examples, the second one is a multiframe gs dump.

http://ks392457.kimsufi.com/orbea/stuff/trace/gsdx_Atelier-marie1.gs.xz http://ks392457.kimsufi.com/orbea/stuff/trace/gsdx_Atelier-marie2.gs.xz

!(1)[https://i.imgur.com/enG4ckn.png] !(2)[https://i.imgur.com/wHbO9Zf.png]

How to reproduce the issue:

  1. Start the game with OpenGL.
  2. Proceed to the title screen.
  3. Start the game and view the beginning areas for additional examples.

Last known version to work: I went back to commit 5c7d9d08e without any changes in behavior.

PC specifications: OS: Slackware64-current GK110B [GeForce GTX 780 Ti] Linux-4.14.29 mesa-2018.03.24_776e6af_master-x86_64-1_git

orbea commented 6 years ago

Github won't let me edit anything so here are the corrected images... 1 2

gregory38 commented 6 years ago

Could you check the impact of the texturing options. And try to disable blending if enabled.

orbea commented 6 years ago

Blending unit accuracy makes no difference while changing the texture filtering to Bilinear (Forced) makes the lines slightly more pronounced.

ghost commented 6 years ago

Did you try some Half pixel offset value?

orbea commented 6 years ago

Yes, I checked again to confirm and it makes no difference.

gregory38 commented 6 years ago

HPO is for upscaling. In this case, I think we sample a wrong pixels on texture border. It could be related to small rounding issue

orbea commented 6 years ago

Is there anything more I can do to help debug this? OpenGL does offer a nice performance improvement the software renderer lacks here.

gregory38 commented 6 years ago

Well next step is to replay the gsdump in a debug build. Find the bad draw call in apitrace. Then understand where is the bad texture sampling. Potentially compare with sw texture dump.

orbea commented 6 years ago

So I'll try this one step at a time, please correct me if I am misunderstanding anything.

First I rebuilt pcsx2 with -DCMAKE_BUILD_TYPE=Debug and created an trace of pcsx2 playing the gsdump.

apitrace trace pcsx2_GSReplayLoader /usr/lib/games/PCSX2/libGSdx.so gsdx_Atelier-marie2.gs

Next I replayed the trace with apitrace.

Log - https://pastebin.com/GHTQp74m Trace - http://ks392457.kimsufi.com/orbea/stuff/trace/pcsx2_GSReplayLoader_Atelier-marie.trace.xz

I also looked at it with qapitrace, but frankly I'm not sure what I'm looking for...

orbea commented 6 years ago

I suppose looking at the trace output this could point to the issue?

12339: message: application error 57005: OI_GsMemClear (0,0 => 640,448)
12340: message: application error 57005: OI_DoubleHalfClear: base 1180 half 2300. w_pages 10 h_pages 14 fbw 10. Color 0
gregory38 commented 6 years ago

Various error message aren't error actually but normal behaviour. Often complex renderings that are source of issues.

So in apitrace, you have the draw call tree. A trace is composed of around 4 frames. A frame is split in GS draw call. Each GS draw call is emulated with 1 or multiple GL draw call. Input of draw calls are vertices data, texture, some constants (aka uniforms), the shader program. The output is the framebuffer.

The idea is to check the framebuffer of each GS draw to find the first wrong framebuffer (i.e. the one that add the vertical lines). You can do a binary search. Note it could also be related to a wrong alpha channel.

gregory38 commented 6 years ago

Note better use a gsdump, it greatly reduces the noise in apitrace.

orbea commented 6 years ago

Thanks, that helps me understand better.

First I made a new trace from gsdump. http://ks392457.kimsufi.com/orbea/stuff/trace/pcsx2_GSReplayLoader_Atelier-marie2.trace.xz

Then with qapitrace I looked around until I found what appears to be the first instance of the line, glDrawElementsBaseVertex(GL_LINES,4,GL_UNSIGNED_INT,0x18,14). I found it under Frame 1 -> HW Draw 5 -> GL Draw from 8 (area 0,0 => 297,249) in 2 (Depth 5)(area 20,320 => 612,440) -> glDrawElementsBaseVertex.

Am I looking at the right place now?

gregory38 commented 6 years ago

Yes, Double click on it. Or right click, lookup state. It will query all gl states. Then you can see the content of input texture and framebuffer. Note main texture is the first slot. By the way did you use 8 bits texture or 32 bits texture ? Rinse and repeat until you find the bad draw. Note you can see the state before the draw if you lookup the gl call just before the draw.

gregory38 commented 6 years ago

Ok You get the bad draw already. So check the content of texture to see it size.

gregory38 commented 6 years ago

When I get acccess to a PC, I will explain you how to dump the state on the sw renderer (both texture and gs registers) and how to read the vertices data. Potentially it could be either a bad texture sampling or a bad position of sprites.

orbea commented 6 years ago

I used 8 bit textures for the gsdump, but I tried not selecting that option earlier without any observed change.

Checking the texture shows.

GL_TEXTURE3,
GL_TEXTURE_2d, level = 0,
GL_RGBA8, 1280 x 1024
gregory38 commented 6 years ago

This texture feels like the texture attached to the framebuffer whereas you need the input texture. Besides, you likely have a texture atlas. A bigger texture that contains multiple small texture, it should be at the top of texture state. You're bad draw call is 2 lines so 2 sprites. By the way might worth to check that rendering is fine without a geometry shader (i.e. with 2 triangles by sprite instead of a line).

Could you give us the vertices data. I think I called it "IA" in the trace. You have 2 memcpy, one for vertices structure and one for indexes. You need the bigger one (32*4 = 128 bytes). Strides should be set to 32 bytes.

X,Y position => 2 half int with an offset of 16 bytes 
U,V position => 2 half int with an offset of 24 bytes 
orbea commented 6 years ago

Yes, that was the bigger texture which actually showed the line, the other one was.

GL_TEXTURE0,
GL_TEXTURE_2D, level = 0,
GL_RGBA8, 512 x 512

Setting the geometry shader to force-disabled has no effect, I just checked again to make sure.

Under IA I found two memcpy, the first was larger.

memcpy(0xee2911c0, [binary data, size = 128 bytes], 128)
memcpy(0xeda91018, [binary data, size = 16 bytes], 16)

For the first one I set stride to 32 and hit 'Interpret`.

0) [0,0, -1.1801e-38,1]
1) [0,0, -1.1801e-38,1]
2) [0,0, -1.1801e-38,1]
3) [0,0, -1.1801e-38,1]

Is this what you mean?

gregory38 commented 6 years ago

Basically the rendering will create 2 sprites (2 rectangles) and it will map a part of the texture on top of it. I'm pretty sure the mapping is 1:1. For example a sprite of 10x10 pixels will sample 10x10 texels (from texture).

You need to set the offset too and the type of data. Unsigned half (16 bits) integer. Otherwise, there are read as float. And you need to set the number of element to 2. The content of the memcpy is an array of GSVertex structures.

orbea commented 6 years ago

I'm not sure I follow exactly, there is no "elements", do you mean "components"?

Anyways I tried once more.

Type: GL_UNSIGNED_INT
Stride: 32
Components: 2
Starting Offset: 16
0) [2248174912, 4294967293]
1) [2374008768, 4294967293]
2) [2248179648, 4294967293]
3) [2374013504, 4294967293]

Is this closer to what I want?

gregory38 commented 6 years ago

Closer. The type is wrong. Do you have unsigned short maybe ? Sorry I don't remember the name.

orbea commented 6 years ago

Yes.

Type: GL_UNSIGNED_SHORT
Stride: 32
Components: 2
Starting Offset: 16
0) [27968, 34304]
1) [32704, 36224]
2) [32704, 34304]
3) [37440, 36224]
gregory38 commented 6 years ago

Ok. And what do you have at offset 24 (same others settings). Do you know which part of the screen is drawn ?

orbea commented 6 years ago
Type: GL_UNSIGNED_SHORT
Stride: 32
Components: 2
Starting Offset: 24
0) [0, 0]
1) [4752, 1936]
2) [0, 2048]
3) [4752, 3984]

How do I know what part of the screen is drawn?

When I lookup the state I just get a black screen.

The framebuffer contains three images the title screen just before the dialogue box (With the line) appears, a black screen and a black and white image showing garbage.

gregory38 commented 6 years ago

You can lookup the state on the line before the gldraw. You will see the content of the framebuffer before the draw. It is likely the area with the line. Could you post a screenshot of the framebuffer and the input texture

orbea commented 6 years ago

The line before glDrawElementsBaseVertex(...) is glTextureBarrier().

Framebuffer framebuffer

Texture texture

orbea commented 6 years ago

To compare here is the framebuffer and input texture from glDrawElementsBaseVertex(...).

Framebuffer framebuffer

Texture texture

gregory38 commented 6 years ago

Ok so menu is drawn. However the line seem to be the background instead of a corrupted texture data. Is it correct ?

orbea commented 6 years ago

My guess is the lines from from where textures do not line up correctly. The texture seems to contain the dialogue box in two halves and when put together there is an errant gap left in the middle.

gregory38 commented 6 years ago
0) [27968, 34304]
1) [32704, 36224]
2) [32704, 34304]
3) [37440, 36224]

If you look at the vertices positions, you can see that both sprite are side by side. First one finish at 32704 (V2) and the second one start at 32704 (V3). But it feels like it misses some pixels. So it could be a wrong pixel tests or the bordure of texture is transparent.

Could you 1) enable the alpha view on the input texture and post it. 2) on the first tab of gl state, click "hide default configuration" and post the value for blending (search _EQ_ and _FUNC_ pattern if there isn't blend in the name). 3) on the shader program tab (maybe the 2nd or 3rd tab). Select the fragment GLSL shader and copy-past the beginning (it should be various define).

orbea commented 6 years ago

Here is the alpha view of the input texture. alpha_texture

I went to the first tab of glDrawElementsBaseVertex(...) and selected 'Only show non-defaults. Here is anything that containsBLENDorFUNCin the name, I did not see anyEQ`.

GL_BLEND_DST - GL_ONE_MINUS_SRC_ALPHA
GL_BLEND_DEST_RGB - GL_ONE_MINUS_SRC_ALPHA
GL_BLEND_SRC - GL_SRC_ALPHA
GL_BLEND_SRC_RGB - GL_SRC_ALPHA
GL_DEPTH_FUNC - GL_GEQUAL
GL_TEXTURE0 --> GL_SAMPLER --> GL_TEXTURE_COMPARE_FUNC - GL_LEQUAL
GL_TEXTURE1 --> GL_SAMPLER --> GL_TEXTURE_COMPARE_FUNC - GL_LEQUAL
GL_TEXTURE3 --> GL_TEXTURE_2D --> GL_TEXTURE_COMPARE_FUNC - GL_LEQUAL

On the shaders tab I selected GL_FRAGMENT_SHADER and here is the beginning.

#version 330 core
#extension GL_ARB_shading_language_420pack: require
#extension GL_ARB_separate_shader_objects: require
#extension GL_ARB_shader_image_load_store: require
#define pGL_ES 0
#define FRAGMENT_SHADER 1
#define ps_main main
#define PS_FST 1
#define PS_WMS 2
#define PS_WMT 2
#define PS_TEX_FMT 0
#define PS_DFMT 0
#define PS_DEPTH_FMT 0
#define PS_CHANNEL_FETCH 0
#define PS_URBAN_CHAOS_HLE 0
#define PS_TALES_OF_ABYSS_HLE 0
#define PS_TEX_IS_FB 0
#define PS_AEM 0
#define PS_TFX 1
#define PS_TCC 1
#define PS_ATST 0
#define PS_FOG 0
#define PS_CLR1 0
#define PS_FBA 0
#define PS_LTF 0
#define PS_AUTOMATIC_LOD 0
#define PS_MANUAL_LOD 0
#define PS_COLCLIP 0
#define PS_DATE 0
#define PS_TCOFFSETHACK 0
#define PS_BLEND_A 0
#define PS_BLEND_B 1
#define PS_BLEND_C 0
#define PS_BLEND_D 1
#define PS_IIP 1
#define PS_SHUFFLE 0
#define PS_READ_BA 0
#define PS_WRITE_RG 0
#define PS_FBMASK 0
#define PS_HDR 0
#define PS_PABE 0
//#version 420 // Keep it for editor detection

Here is the whole shader. https://pastebin.com/iLB97ikU

gregory38 commented 6 years ago

Ok, so SW blending is enabled.

#define PS_BLEND_A 0
#define PS_BLEND_B 1
#define PS_BLEND_C 0
#define PS_BLEND_D 1

Means

(Cs - Cd) * As + Cd

So the missing pixel is likely one with alpha == 0 (dark).

Hum, I just saw that WMS/WMT are 2. It triggers special clamping on texture coordinate. On the alpha texture could you tell me which first texel is dark, X position (on the rigth side of the menu). It should be around 296

orbea commented 6 years ago

The x position of the first black texel on the right is 303.

gregory38 commented 6 years ago

Just to be sure, origin (i.e. 0) is on the left of the texture. I mean black on the alpha view of the texture (otherwise it is a white-transparent texel on the coloured texture).

orbea commented 6 years ago

The position of the first black texel in the alpha view on the right is 303 while from the left its 296.

To be clear I mean this black vertical bar. example

rgrest commented 6 years ago

I had the same issues. Enabling HW Hacks with Sprite = Full and TC Offset X = 1 and TC Offset Y = 1 fixed the problem for me except for the scrolling background images.

orbea commented 6 years ago

Oh, somehow I missed the Texture offset option earlier. Setting it to 2 seems to work around the lines including in the scrolling background images even without Sprite = Full which still doesn't seem to have any effect. Setting it to 1 helps with the lines in the dialogue boxes, but not the moving backgrounds.

Even with this workaround I would still like to help in what little ways I can to see this issue solved without hacks. :)

gregory38 commented 6 years ago

Could you give me the value of the uniform "MinMax". There is a related tab for the constant. You will need to unfold Fragment Shader.

So far we have delta(X) == 296 and delta(U) == 297. If my math is correct, we should sample last texel at position 295.9966 which will be truncated to 295 but the margin is very small only 0.0034 texels...

What happen if you remove - vec2(0.05f, 0.05f) of this line : https://github.com/PCSX2/pcsx2/blob/master/plugins/GSdx/res/glsl/tfx_vgs.glsl#L55

gregory38 commented 6 years ago

I think it would be nice to dump the renderer frame buffer from a run of the SW renderer on the gsdump.

In the gsdx GUI there is a debug tab. You should enable the option called "dump", you can start at 4 and dump 3 calls. In theory, it should be the 5th. It will create png in the /tmp/GSdx.... directory.

Interesting images have rt0 and rt1 in their file names. rt0 is the framebuffer before the draw, and rt1 is the image after the draw. So you can easily check which draw call to use.

It would be nice to compare the position of the menu between SW and HW. And if you can post the content of the txt file dumped too. It is the content of all GS registers, this way I will see the clamp setting

orbea commented 6 years ago

In the Uniforms tabs under GL_FRAGMENT_SHADER there is MinMax is [0,0,1,1].

Next I tried rebuilding pcsx2 with this patch.

diff --git a/plugins/GSdx/res/glsl/tfx_vgs.glsl b/plugins/GSdx/res/glsl/tfx_vgs.glsl
index a14a4dbbc..ea6c05433 100644
--- a/plugins/GSdx/res/glsl/tfx_vgs.glsl
+++ b/plugins/GSdx/res/glsl/tfx_vgs.glsl
@@ -52,7 +52,7 @@ void vs_main()
     // example: 133.0625 (133 + 1/16) should start from line 134, ceil(133.0625 - 0.05) still above 133
     vec4 p;

-    p.xy = vec2(i_p) - vec2(0.05f, 0.05f);
+    p.xy = vec2(i_p);
     p.xy = p.xy * VertexScale - VertexOffset;
     p.w = 1.0f;
     p.z = float(z) * exp_min32;

This patch does seem to help somewhat, the line in the menu is gone, but now the two halves of the menu are slightly misaligned as is the line in the moving background image, but it introduced new flashing horizontal and vertical lines in other scenes.

1 2

Next I went to the debug tab of the gsdx GUI and enabled Dump GS data and set Start of dump at 4 and Length of dump to 3.

Doing this printed the following in the log.

Failed to create directory: /tmp/GS_HW_dump32/
Failed to create directory: /tmp/GS_SW_dump32/

However both directories were successfully created anyways, I guess this is an unrelated issue?

Moving on I then started the game, proceeded to the title screen menu and saw the line. Upon closing the game I only see many .txt files in those two directories, but no image files. Am I doing something wrong?

$ ls /tmp/GS_*
/tmp/GS_HW_dump32:
00104_context.txt

/tmp/GS_SW_dump32:
00004_f0_gs_reg.txt  00037_f0_gs_reg.txt  00070_f0_gs_reg.txt
00005_f0_gs_reg.txt  00038_f0_gs_reg.txt  00071_f0_gs_reg.txt
00006_f0_gs_reg.txt  00039_f0_gs_reg.txt  00072_f0_gs_reg.txt
00007_f0_gs_reg.txt  00040_f0_gs_reg.txt  00073_f0_gs_reg.txt
00008_f0_gs_reg.txt  00041_f0_gs_reg.txt  00074_f0_gs_reg.txt
00009_f0_gs_reg.txt  00042_f0_gs_reg.txt  00075_f0_gs_reg.txt
00010_f0_gs_reg.txt  00043_f0_gs_reg.txt  00076_f0_gs_reg.txt
00011_f0_gs_reg.txt  00044_f0_gs_reg.txt  00077_f0_gs_reg.txt
00012_f0_gs_reg.txt  00045_f0_gs_reg.txt  00078_f0_gs_reg.txt
00013_f0_gs_reg.txt  00046_f0_gs_reg.txt  00079_f0_gs_reg.txt
00014_f0_gs_reg.txt  00047_f0_gs_reg.txt  00080_f0_gs_reg.txt
00015_f0_gs_reg.txt  00048_f0_gs_reg.txt  00081_f0_gs_reg.txt
00016_f0_gs_reg.txt  00049_f0_gs_reg.txt  00082_f0_gs_reg.txt
00017_f0_gs_reg.txt  00050_f0_gs_reg.txt  00083_f0_gs_reg.txt
00018_f0_gs_reg.txt  00051_f0_gs_reg.txt  00084_f0_gs_reg.txt
00019_f0_gs_reg.txt  00052_f0_gs_reg.txt  00085_f0_gs_reg.txt
00020_f0_gs_reg.txt  00053_f0_gs_reg.txt  00086_f0_gs_reg.txt
00021_f0_gs_reg.txt  00054_f0_gs_reg.txt  00087_f0_gs_reg.txt
00022_f0_gs_reg.txt  00055_f0_gs_reg.txt  00088_f0_gs_reg.txt
00023_f0_gs_reg.txt  00056_f0_gs_reg.txt  00089_f0_gs_reg.txt
00024_f0_gs_reg.txt  00057_f0_gs_reg.txt  00090_f0_gs_reg.txt
00025_f0_gs_reg.txt  00058_f0_gs_reg.txt  00091_f0_gs_reg.txt
00026_f0_gs_reg.txt  00059_f0_gs_reg.txt  00092_f0_gs_reg.txt
00027_f0_gs_reg.txt  00060_f0_gs_reg.txt  00093_f0_gs_reg.txt
00028_f0_gs_reg.txt  00061_f0_gs_reg.txt  00094_f0_gs_reg.txt
00029_f0_gs_reg.txt  00062_f0_gs_reg.txt  00095_f0_gs_reg.txt
00030_f0_gs_reg.txt  00063_f0_gs_reg.txt  00096_f0_gs_reg.txt
00031_f0_gs_reg.txt  00064_f0_gs_reg.txt  00097_f0_gs_reg.txt
00032_f0_gs_reg.txt  00065_f0_gs_reg.txt  00098_f0_gs_reg.txt
00033_f0_gs_reg.txt  00066_f0_gs_reg.txt  00099_f0_gs_reg.txt
00034_f0_gs_reg.txt  00067_f0_gs_reg.txt  00100_f0_gs_reg.txt
00035_f0_gs_reg.txt  00068_f0_gs_reg.txt  00101_f0_gs_reg.txt
00036_f0_gs_reg.txt  00069_f0_gs_reg.txt  00102_f0_gs_reg.txt
gregory38 commented 6 years ago

I don't remember the name but there are options to select ehich texture to dump in the same tab

orbea commented 6 years ago

I enabled Save texture, but it didn't make a difference. So I next enabled everything, Print GL error, Save RT, Save Texture, GLSL compilation, Save Frame and Save Depth.

This seemed to work better.

$ ls GS_*
GS_HW_dump32:
00104_context.txt             00104_f0_rz0_02300_Z_16S_alpha.png
00104_f0_rt0_00000_C_32.png   00104_f0_rz1_02300_Z_16S.png
00104_f0_rt1_00000_C_32.png   00104_f0_rz1_02300_Z_16S_alpha.png
00104_f0_rz0_02300_Z_16S.png

GS_SW_dump32:
00004_f0_gs_reg.txt  00029_f0_gs_reg.txt  00054_f0_gs_reg.txt  00079_f0_gs_reg.txt
00005_f0_gs_reg.txt  00030_f0_gs_reg.txt  00055_f0_gs_reg.txt  00080_f0_gs_reg.txt
00006_f0_gs_reg.txt  00031_f0_gs_reg.txt  00056_f0_gs_reg.txt  00081_f0_gs_reg.txt
00007_f0_gs_reg.txt  00032_f0_gs_reg.txt  00057_f0_gs_reg.txt  00082_f0_gs_reg.txt
00008_f0_gs_reg.txt  00033_f0_gs_reg.txt  00058_f0_gs_reg.txt  00083_f0_gs_reg.txt
00009_f0_gs_reg.txt  00034_f0_gs_reg.txt  00059_f0_gs_reg.txt  00084_f0_gs_reg.txt
00010_f0_gs_reg.txt  00035_f0_gs_reg.txt  00060_f0_gs_reg.txt  00085_f0_gs_reg.txt
00011_f0_gs_reg.txt  00036_f0_gs_reg.txt  00061_f0_gs_reg.txt  00086_f0_gs_reg.txt
00012_f0_gs_reg.txt  00037_f0_gs_reg.txt  00062_f0_gs_reg.txt  00087_f0_gs_reg.txt
00013_f0_gs_reg.txt  00038_f0_gs_reg.txt  00063_f0_gs_reg.txt  00088_f0_gs_reg.txt
00014_f0_gs_reg.txt  00039_f0_gs_reg.txt  00064_f0_gs_reg.txt  00089_f0_gs_reg.txt
00015_f0_gs_reg.txt  00040_f0_gs_reg.txt  00065_f0_gs_reg.txt  00090_f0_gs_reg.txt
00016_f0_gs_reg.txt  00041_f0_gs_reg.txt  00066_f0_gs_reg.txt  00091_f0_gs_reg.txt
00017_f0_gs_reg.txt  00042_f0_gs_reg.txt  00067_f0_gs_reg.txt  00092_f0_gs_reg.txt
00018_f0_gs_reg.txt  00043_f0_gs_reg.txt  00068_f0_gs_reg.txt  00093_f0_gs_reg.txt
00019_f0_gs_reg.txt  00044_f0_gs_reg.txt  00069_f0_gs_reg.txt  00094_f0_gs_reg.txt
00020_f0_gs_reg.txt  00045_f0_gs_reg.txt  00070_f0_gs_reg.txt  00095_f0_gs_reg.txt
00021_f0_gs_reg.txt  00046_f0_gs_reg.txt  00071_f0_gs_reg.txt  00096_f0_gs_reg.txt
00022_f0_gs_reg.txt  00047_f0_gs_reg.txt  00072_f0_gs_reg.txt  00097_f0_gs_reg.txt
00023_f0_gs_reg.txt  00048_f0_gs_reg.txt  00073_f0_gs_reg.txt  00098_f0_gs_reg.txt
00024_f0_gs_reg.txt  00049_f0_gs_reg.txt  00074_f0_gs_reg.txt  00099_f0_gs_reg.txt
00025_f0_gs_reg.txt  00050_f0_gs_reg.txt  00075_f0_gs_reg.txt  00100_f0_gs_reg.txt
00026_f0_gs_reg.txt  00051_f0_gs_reg.txt  00076_f0_gs_reg.txt  00101_f0_gs_reg.txt
00027_f0_gs_reg.txt  00052_f0_gs_reg.txt  00077_f0_gs_reg.txt  00102_f0_gs_reg.txt
00028_f0_gs_reg.txt  00053_f0_gs_reg.txt  00078_f0_gs_reg.txt

However all the .png files just show black...I guess I'm still missing something?

orbea commented 6 years ago

Both the Save RT and Save Depth options create .png files in /tmp/GS_HW_dump32/, but they are always just show a black screen.

orbea commented 6 years ago

Looking at the framebuffer for many calls in apitrace always includes a black screen. I suppose this is what PCSX2 is dumping?

gregory38 commented 6 years ago

You should replay with the sw renderer. Coud you post your gsdx.ini file

orbea commented 6 years ago

Oops, I forgot to switch it to software...

This time I did and selected Save RT, Save Texture, Save Frame and Save Depth.

$ ls GS_*
GS_HW_dump32:

GS_SW_dump32:
00004_f0_fr1_00000_C_32.png  00029_f0_gs_reg.txt          00055_f0_fr1_00000_C_32.png  00080_f0_gs_reg.txt
00004_f0_gs_reg.txt          00030_f0_fr1_00000_C_32.png  00055_f0_gs_reg.txt          00081_f0_fr1_00000_C_32.png
00005_f0_fr1_00000_C_32.png  00030_f0_gs_reg.txt          00056_f0_fr1_00000_C_32.png  00081_f0_gs_reg.txt
00005_f0_gs_reg.txt          00031_f0_fr1_00000_C_32.png  00056_f0_gs_reg.txt          00082_f0_fr1_00000_C_32.png
00006_f0_fr1_00000_C_32.png  00031_f0_gs_reg.txt          00057_f0_fr1_00000_C_32.png  00082_f0_gs_reg.txt
00006_f0_gs_reg.txt          00032_f0_fr1_00000_C_32.png  00057_f0_gs_reg.txt          00083_f0_fr1_00000_C_32.png
00007_f0_fr1_00000_C_32.png  00032_f0_gs_reg.txt          00058_f0_fr1_00000_C_32.png  00083_f0_gs_reg.txt
00007_f0_gs_reg.txt          00033_f0_fr1_00000_C_32.png  00058_f0_gs_reg.txt          00084_f0_fr1_00000_C_32.png
00008_f0_fr1_00000_C_32.png  00033_f0_gs_reg.txt          00059_f0_fr1_00000_C_32.png  00084_f0_gs_reg.txt
00008_f0_gs_reg.txt          00034_f0_fr1_00000_C_32.png  00059_f0_gs_reg.txt          00085_f0_fr1_00000_C_32.png
00009_f0_fr1_00000_C_32.png  00034_f0_gs_reg.txt          00060_f0_fr1_00000_C_32.png  00085_f0_gs_reg.txt
00009_f0_gs_reg.txt          00035_f0_fr1_00000_C_32.png  00060_f0_gs_reg.txt          00086_f0_fr1_00000_C_32.png
00010_f0_fr1_00000_C_32.png  00035_f0_gs_reg.txt          00061_f0_fr1_00000_C_32.png  00086_f0_gs_reg.txt
00010_f0_gs_reg.txt          00036_f0_fr1_00000_C_32.png  00061_f0_gs_reg.txt          00087_f0_fr1_00000_C_32.png
00011_f0_fr1_00000_C_32.png  00036_f0_gs_reg.txt          00062_f0_fr1_00000_C_32.png  00087_f0_gs_reg.txt
00011_f0_gs_reg.txt          00037_f0_fr1_00000_C_32.png  00062_f0_gs_reg.txt          00088_f0_fr1_00000_C_32.png
00012_f0_fr1_00000_C_32.png  00037_f0_gs_reg.txt          00063_f0_fr1_00000_C_32.png  00088_f0_gs_reg.txt
00012_f0_gs_reg.txt          00038_f0_fr1_00000_C_32.png  00063_f0_gs_reg.txt          00089_f0_fr1_00000_C_32.png
00013_f0_fr1_00000_C_32.png  00038_f0_gs_reg.txt          00064_f0_fr1_00000_C_32.png  00089_f0_gs_reg.txt
00013_f0_gs_reg.txt          00039_f0_fr1_00000_C_32.png  00064_f0_gs_reg.txt          00090_f0_fr1_00000_C_32.png
00014_f0_fr1_00000_C_32.png  00039_f0_gs_reg.txt          00065_f0_fr1_00000_C_32.png  00090_f0_gs_reg.txt
00014_f0_gs_reg.txt          00040_f0_fr1_00000_C_32.png  00065_f0_gs_reg.txt          00091_f0_fr1_00000_C_32.png
00015_f0_fr1_00000_C_32.png  00040_f0_gs_reg.txt          00066_f0_fr1_00000_C_32.png  00091_f0_gs_reg.txt
00015_f0_gs_reg.txt          00041_f0_fr1_00000_C_32.png  00066_f0_gs_reg.txt          00092_f0_fr1_00000_C_32.png
00016_f0_fr1_00000_C_32.png  00041_f0_gs_reg.txt          00067_f0_fr1_00000_C_32.png  00092_f0_gs_reg.txt
00016_f0_gs_reg.txt          00042_f0_fr1_00000_C_32.png  00067_f0_gs_reg.txt          00093_f0_fr1_00000_C_32.png
00017_f0_fr1_00000_C_32.png  00042_f0_gs_reg.txt          00068_f0_fr1_00000_C_32.png  00093_f0_gs_reg.txt
00017_f0_gs_reg.txt          00043_f0_fr1_00000_C_32.png  00068_f0_gs_reg.txt          00094_f0_fr1_00000_C_32.png
00018_f0_fr1_00000_C_32.png  00043_f0_gs_reg.txt          00069_f0_fr1_00000_C_32.png  00094_f0_gs_reg.txt
00018_f0_gs_reg.txt          00044_f0_fr1_00000_C_32.png  00069_f0_gs_reg.txt          00095_f0_fr1_00000_C_32.png
00019_f0_fr1_00000_C_32.png  00044_f0_gs_reg.txt          00070_f0_fr1_00000_C_32.png  00095_f0_gs_reg.txt
00019_f0_gs_reg.txt          00045_f0_fr1_00000_C_32.png  00070_f0_gs_reg.txt          00096_f0_fr1_00000_C_32.png
00020_f0_fr1_00000_C_32.png  00045_f0_gs_reg.txt          00071_f0_fr1_00000_C_32.png  00096_f0_gs_reg.txt
00020_f0_gs_reg.txt          00046_f0_fr1_00000_C_32.png  00071_f0_gs_reg.txt          00097_f0_fr1_00000_C_32.png
00021_f0_fr1_00000_C_32.png  00046_f0_gs_reg.txt          00072_f0_fr1_00000_C_32.png  00097_f0_gs_reg.txt
00021_f0_gs_reg.txt          00047_f0_fr1_00000_C_32.png  00072_f0_gs_reg.txt          00098_f0_fr1_00000_C_32.png
00022_f0_fr1_00000_C_32.png  00047_f0_gs_reg.txt          00073_f0_fr1_00000_C_32.png  00098_f0_gs_reg.txt
00022_f0_gs_reg.txt          00048_f0_fr1_00000_C_32.png  00073_f0_gs_reg.txt          00099_f0_fr1_00000_C_32.png
00023_f0_fr1_00000_C_32.png  00048_f0_gs_reg.txt          00074_f0_fr1_00000_C_32.png  00099_f0_gs_reg.txt
00023_f0_gs_reg.txt          00049_f0_fr1_00000_C_32.png  00074_f0_gs_reg.txt          00100_f0_fr1_00000_C_32.png
00024_f0_fr1_00000_C_32.png  00049_f0_gs_reg.txt          00075_f0_fr1_00000_C_32.png  00100_f0_gs_reg.txt
00024_f0_gs_reg.txt          00050_f0_fr1_00000_C_32.png  00075_f0_gs_reg.txt          00101_f0_fr1_00000_C_32.png
00025_f0_fr1_00000_C_32.png  00050_f0_gs_reg.txt          00076_f0_fr1_00000_C_32.png  00101_f0_gs_reg.txt
00025_f0_gs_reg.txt          00051_f0_fr1_00000_C_32.png  00076_f0_gs_reg.txt          00102_f0_fr1_00000_C_32.png
00026_f0_fr1_00000_C_32.png  00051_f0_gs_reg.txt          00077_f0_fr1_00000_C_32.png  00102_f0_gs_reg.txt
00026_f0_gs_reg.txt          00052_f0_fr1_00000_C_32.png  00077_f0_gs_reg.txt          00103_f0_fr1_00000_C_32.png
00027_f0_fr1_00000_C_32.png  00052_f0_gs_reg.txt          00078_f0_fr1_00000_C_32.png  00104_context.txt
00027_f0_gs_reg.txt          00053_f0_fr1_00000_C_32.png  00078_f0_gs_reg.txt          00104_f0_rt0_00000_C_32.png
00028_f0_fr1_00000_C_32.png  00053_f0_gs_reg.txt          00079_f0_fr1_00000_C_32.png  00104_f0_rt1_00000_C_32.png
00028_f0_gs_reg.txt          00054_f0_fr1_00000_C_32.png  00079_f0_gs_reg.txt          00104_f0_rz0_02300_Z_16S.png
00029_f0_fr1_00000_C_32.png  00054_f0_gs_reg.txt          00080_f0_fr1_00000_C_32.png  00104_f0_rz1_02300_Z_16S.png

However again, all of the .png files are just black screens, some are larger than others.

Here is my GSdx.ini.

AspectRatio = 1
CaptureHeight = 480
CaptureWidth = 640
MaxAnisotropy = 0
ModeHeight = 480
ModeWidth = 640
NTSC_Saturation = 1
Renderer = 13
ShadeBoost = 0
ShadeBoost_Brightness = 50
ShadeBoost_Contrast = 50
ShadeBoost_Saturation = 50
TVShader = 0
UserHacks = 1
UserHacks_AutoFlush = 0
UserHacks_CPU_FB_Conversion = 0
UserHacks_DisableDepthSupport = 0
UserHacks_DisableGsMemClear = 0
UserHacks_DisablePartialInvalidation = 0
UserHacks_HalfPixelOffset = 0
UserHacks_SkipDraw = 0
UserHacks_SpriteHack = 0
UserHacks_TCOffset = 0
UserHacks_TextureInsideRt = 0
UserHacks_TriFilter = 0
UserHacks_WildHack = 0
UserHacks_align_sprite_X = 0
UserHacks_merge_pp_sprite = 0
UserHacks_round_sprite_offset = 0
UserHacks_unscale_point_line = 0
aa1 = 1
accurate_blending_unit = 3
accurate_date = 1
capture_enabled = 0
capture_out_dir = /tmp/GSdx_Capture
capture_threads = 4
clut_load_before_draw = 0
crc_hack_level = 2
debug_glsl_shader = 0
debug_opengl = 0
disable_hw_gl_draw = 0
dump = 1
extrathreads = 6
extrathreads_height = 4
filter = 2
force_texture_clear = 0
fxaa = 0
interlace = 7
large_framebuffer = 1
linear_present = 1
mipmap = 1
mipmap_hw = 2
osd_fontname = /usr/share/fonts/TTF/LiberationSerif-Regular.ttf
osd_fontsize = 24
osd_indicator_enabled = 0
osd_log_enabled = 1
osd_log_speed = 6
osd_max_log_messages = 3
osd_monitor_enabled = 0
osd_transparency = 25
override_GL_ARB_clear_texture = -1
override_GL_ARB_clip_control = -1
override_GL_ARB_copy_image = -1
override_GL_ARB_direct_state_access = -1
override_GL_ARB_draw_buffers_blend = -1
override_GL_ARB_get_texture_sub_image = -1
override_GL_ARB_gpu_shader5 = -1
override_GL_ARB_shader_image_load_store = -1
override_GL_ARB_texture_barrier = -1
override_GL_ARB_viewport_array = -1
override_GL_EXT_texture_filter_anisotropic = -1
override_geometry_shader = -1
paltex = 1
png_compression_level = 1
preload_frame_with_gs_data = 0
save = 1
savef = 1
savel = 3
saven = 4
savet = 1
savez = 1
shaderfx = 0
shaderfx_conf = shaders/GSdx_FX_Settings.ini
shaderfx_glsl = shaders/GSdx.fx
upscale_multiplier = 1
vsync = 0
wrap_gs_mem = 0
gregory38 commented 6 years ago

Strange. How do you run it ? You shouldn't use apitrace here.

gregory38 commented 6 years ago

And it should only create 10 images by draw call. You have way too much

orbea commented 6 years ago

I am running it with Boot Iso (fast) from the System drop down menu in PCSX2. I am not using apitrace here.