From a1db96d70de2343116957c45e0b8b8d2cd4e0586 Mon Sep 17 00:00:00 2001 From: raven02 Date: Sat, 28 Jun 2014 07:30:12 +0800 Subject: [PATCH 1/3] Fix CELL_GCM_TEXTURE_DEPTH24_D8 and detail trace for GLTexture::Init() --- rpcs3/Emu/GS/GL/GLGSRender.h | 89 +++++++++++++++++++----------------- 1 file changed, 46 insertions(+), 43 deletions(-) diff --git a/rpcs3/Emu/GS/GL/GLGSRender.h b/rpcs3/Emu/GS/GL/GLGSRender.h index b9041048ac..9f3b3e28f0 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.h +++ b/rpcs3/Emu/GS/GL/GLGSRender.h @@ -111,7 +111,7 @@ public: case CELL_GCM_TEXTURE_B8: // One 8-bit fixed-point number { glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_BLUE, GL_UNSIGNED_BYTE, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_B8)"); static const GLint swizzleMaskB8[] = { GL_BLUE, GL_BLUE, GL_BLUE, GL_BLUE }; glRemap = swizzleMaskB8; @@ -124,16 +124,16 @@ public: // TODO: texture swizzling glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_A1R5G5B5)"); glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE); - checkForGlError("GLTexture::Init() -> glPixelStorei"); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_A1R5G5B5)"); break; case CELL_GCM_TEXTURE_A4R4G4B4: { glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_A4R4G4B4)"); // We read it in as R4G4B4A4, so we need to remap each component. static const GLint swizzleMaskA4R4G4B4[] = { GL_BLUE, GL_ALPHA, GL_RED, GL_GREEN }; @@ -144,13 +144,13 @@ public: case CELL_GCM_TEXTURE_R5G6B5: { glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_TRUE); - checkForGlError("GLTexture::Init() -> glPixelStorei"); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_R5G6B5)"); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, tex.GetWidth(), tex.GetHeight(), 0, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_R5G6B5)"); glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE); - checkForGlError("GLTexture::Init() -> glPixelStorei"); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_R5G6B5)"); } break; @@ -177,7 +177,7 @@ public: } glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, is_swizzled ? unswizzledPixels : pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_A8R8G8B8)"); break; case CELL_GCM_TEXTURE_COMPRESSED_DXT1: // Compressed 4x4 pixels into 8 bytes @@ -185,7 +185,7 @@ public: u32 size = ((tex.GetWidth() + 3) / 4) * ((tex.GetHeight() + 3) / 4) * 8; glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, tex.GetWidth(), tex.GetHeight(), 0, size, pixels); - checkForGlError("GLTexture::Init() -> glCompressedTexImage2D"); + checkForGlError("GLTexture::Init() -> glCompressedTexImage2D(CELL_GCM_TEXTURE_COMPRESSED_DXT1)"); } break; @@ -194,7 +194,7 @@ public: u32 size = ((tex.GetWidth() + 3) / 4) * ((tex.GetHeight() + 3) / 4) * 16; glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, tex.GetWidth(), tex.GetHeight(), 0, size, pixels); - checkForGlError("GLTexture::Init() -> glCompressedTexImage2D"); + checkForGlError("GLTexture::Init() -> glCompressedTexImage2D(CELL_GCM_TEXTURE_COMPRESSED_DXT23)"); } break; @@ -203,14 +203,14 @@ public: u32 size = ((tex.GetWidth() + 3) / 4) * ((tex.GetHeight() + 3) / 4) * 16; glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, tex.GetWidth(), tex.GetHeight(), 0, size, pixels); - checkForGlError("GLTexture::Init() -> glCompressedTexImage2D"); + checkForGlError("GLTexture::Init() -> glCompressedTexImage2D(CELL_GCM_TEXTURE_COMPRESSED_DXT45)"); } break; case CELL_GCM_TEXTURE_G8B8: { glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RG, GL_UNSIGNED_BYTE, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_G8B8)"); static const GLint swizzleMaskG8B8[] = { GL_RED, GL_GREEN, GL_RED, GL_GREEN }; glRemap = swizzleMaskG8B8; @@ -232,42 +232,42 @@ public: } glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RGBA, GL_UNSIGNED_BYTE, unswizzledPixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_R6G5B5)"); free(unswizzledPixels); } break; case CELL_GCM_TEXTURE_DEPTH24_D8: // 24-bit unsigned fixed-point number and 8 bits of garbage - glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, tex.GetWidth(), tex.GetHeight(), 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT_24_8, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, tex.GetWidth(), tex.GetHeight(), 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, pixels); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_DEPTH24_D8)"); break; case CELL_GCM_TEXTURE_DEPTH24_D8_FLOAT: // 24-bit unsigned float and 8 bits of garbage glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, tex.GetWidth(), tex.GetHeight(), 0, GL_DEPTH_COMPONENT, GL_FLOAT, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_DEPTH24_D8_FLOAT)"); break; case CELL_GCM_TEXTURE_DEPTH16: // 16-bit unsigned fixed-point number glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT16, tex.GetWidth(), tex.GetHeight(), 0, GL_DEPTH_COMPONENT, GL_SHORT, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_DEPTH16)"); break; case CELL_GCM_TEXTURE_DEPTH16_FLOAT: // 16-bit unsigned float glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT16, tex.GetWidth(), tex.GetHeight(), 0, GL_DEPTH_COMPONENT, GL_FLOAT, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_DEPTH16_FLOAT)"); break; case CELL_GCM_TEXTURE_X16: // A 16-bit fixed-point number { glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_TRUE); - checkForGlError("GLTexture::Init() -> glPixelStorei"); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_X16)"); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RED, GL_UNSIGNED_SHORT, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_X16)"); glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE); - checkForGlError("GLTexture::Init() -> glPixelStorei"); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_X16)"); static const GLint swizzleMaskX16[] = { GL_RED, GL_ONE, GL_RED, GL_ONE }; glRemap = swizzleMaskX16; @@ -277,13 +277,13 @@ public: case CELL_GCM_TEXTURE_Y16_X16: // Two 16-bit fixed-point numbers { glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_TRUE); - checkForGlError("GLTexture::Init() -> glPixelStorei"); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_Y16_X16)"); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RG, GL_UNSIGNED_SHORT, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_Y16_X16)"); glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE); - checkForGlError("GLTexture::Init() -> glPixelStorei"); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_Y16_X16)"); static const GLint swizzleMaskX32_Y16_X16[] = { GL_GREEN, GL_RED, GL_GREEN, GL_RED }; glRemap = swizzleMaskX32_Y16_X16; @@ -292,35 +292,35 @@ public: case CELL_GCM_TEXTURE_R5G5B5A1: glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_TRUE); - checkForGlError("GLTexture::Init() -> glPixelStorei"); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_R5G5B5A1)"); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_R5G5B5A1)"); glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE); - checkForGlError("GLTexture::Init() -> glPixelStorei"); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_R5G5B5A1)"); break; case CELL_GCM_TEXTURE_W16_Z16_Y16_X16_FLOAT: // Four fp16 values glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_TRUE); - checkForGlError("GLTexture::Init() -> glPixelStorei"); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_W16_Z16_Y16_X16_FLOAT)"); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RGBA, GL_HALF_FLOAT, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_W16_Z16_Y16_X16_FLOAT)"); glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE); - checkForGlError("GLTexture::Init() -> glPixelStorei"); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_W16_Z16_Y16_X16_FLOAT)"); break; case CELL_GCM_TEXTURE_W32_Z32_Y32_X32_FLOAT: // Four fp32 values glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_BGRA, GL_FLOAT, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_W32_Z32_Y32_X32_FLOAT)"); break; case CELL_GCM_TEXTURE_X32_FLOAT: // One 32-bit floating-point number { glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RED, GL_FLOAT, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_X32_FLOAT)"); static const GLint swizzleMaskX32_FLOAT[] = { GL_RED, GL_ONE, GL_ONE, GL_ONE }; glRemap = swizzleMaskX32_FLOAT; @@ -330,24 +330,24 @@ public: case CELL_GCM_TEXTURE_D1R5G5B5: { glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_TRUE); - checkForGlError("GLTexture::Init() -> glPixelStorei"); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_D1R5G5B5)"); // TODO: Texture swizzling glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_D1R5G5B5)"); static const GLint swizzleMaskX32_D1R5G5B5[] = { GL_ONE, GL_RED, GL_GREEN, GL_BLUE }; glRemap = swizzleMaskX32_D1R5G5B5; glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE); - checkForGlError("GLTexture::Init() -> glPixelStorei"); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_D1R5G5B5)"); } break; case CELL_GCM_TEXTURE_D8R8G8B8: // 8 bits of garbage and three unsigned 8-bit fixed-point numbers { glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_D8R8G8B8)"); static const GLint swizzleMaskX32_D8R8G8B8[] = { GL_ONE, GL_RED, GL_GREEN, GL_BLUE }; glRemap = swizzleMaskX32_D8R8G8B8; @@ -357,13 +357,13 @@ public: case CELL_GCM_TEXTURE_Y16_X16_FLOAT: // Two fp16 values { glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_TRUE); - checkForGlError("GLTexture::Init() -> glPixelStorei"); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_Y16_X16_FLOAT)"); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RG, GL_HALF_FLOAT, pixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_Y16_X16_FLOAT)"); glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE); - checkForGlError("GLTexture::Init() -> glPixelStorei"); + checkForGlError("GLTexture::Init() -> glPixelStorei(CELL_GCM_TEXTURE_Y16_X16_FLOAT)"); static const GLint swizzleMaskX32_Y16_X16_FLOAT[] = { GL_RED, GL_GREEN, GL_RED, GL_GREEN }; glRemap = swizzleMaskX32_Y16_X16_FLOAT; @@ -389,7 +389,7 @@ public: } glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RGBA, GL_UNSIGNED_BYTE, unswizzledPixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_COMPRESSED_B8R8_G8R8 & ~(CELL_GCM_TEXTURE_LN | CELL_GCM_TEXTURE_UN)"); free(unswizzledPixels); } @@ -414,7 +414,7 @@ public: } glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RGBA, GL_UNSIGNED_BYTE, unswizzledPixels); - checkForGlError("GLTexture::Init() -> glTexImage2D"); + checkForGlError("GLTexture::Init() -> glTexImage2D(CELL_GCM_TEXTURE_COMPRESSED_R8B8_R8G8 & ~(CELL_GCM_TEXTURE_LN | CELL_GCM_TEXTURE_UN)"); free(unswizzledPixels); } @@ -465,15 +465,18 @@ public: glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GetGlWrap(tex.GetWrapS())); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GetGlWrap(tex.GetWrapT())); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, GetGlWrap(tex.GetWrapR())); + + checkForGlError("GLTexture::Init() -> wrap"); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, gl_tex_zfunc[tex.GetZfunc()]); - checkForGlError("GLTexture::Init() -> parameters1"); + checkForGlError("GLTexture::Init() -> compare"); glTexEnvi(GL_TEXTURE_FILTER_CONTROL, GL_TEXTURE_LOD_BIAS, tex.GetBias()); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_LOD, (tex.GetMinLOD() >> 8)); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LOD, (tex.GetMaxLOD() >> 8)); - checkForGlError("GLTexture::Init() -> parameters2"); + checkForGlError("GLTexture::Init() -> lod"); static const int gl_tex_filter[] = { From 382af8437c831f734260be34cd4ef5bb84ba5ed5 Mon Sep 17 00:00:00 2001 From: raven02 Date: Sat, 28 Jun 2014 17:19:23 +0800 Subject: [PATCH 2/3] Fix texture MAG filter and add max anisotropy --- rpcs3/Emu/GS/GCM.h | 40 +++++++++++++++++++++--- rpcs3/Emu/GS/GL/GLGSRender.h | 60 +++++++++++++++++++++++++++--------- 2 files changed, 82 insertions(+), 18 deletions(-) diff --git a/rpcs3/Emu/GS/GCM.h b/rpcs3/Emu/GS/GCM.h index 8d57541ff6..25997ac12e 100644 --- a/rpcs3/Emu/GS/GCM.h +++ b/rpcs3/Emu/GS/GCM.h @@ -25,7 +25,7 @@ enum { CELL_GCM_VERTEX_S1 = 1, CELL_GCM_VERTEX_F = 2, - CELL_GCM_VERTEX_S = 3, + CELL_GCM_VERTEX_SF = 3, CELL_GCM_VERTEX_UB = 4, CELL_GCM_VERTEX_S32K = 5, CELL_GCM_VERTEX_CMP = 6, @@ -89,6 +89,26 @@ enum // Normalization Flag CELL_GCM_TEXTURE_NR = 0x00, CELL_GCM_TEXTURE_UN = 0x40, + + // Max Anisotropy + CELL_GCM_TEXTURE_MAX_ANISO_1 = 0, + CELL_GCM_TEXTURE_MAX_ANISO_2 = 1, + CELL_GCM_TEXTURE_MAX_ANISO_4 = 2, + CELL_GCM_TEXTURE_MAX_ANISO_6 = 3, + CELL_GCM_TEXTURE_MAX_ANISO_8 = 4, + CELL_GCM_TEXTURE_MAX_ANISO_10 = 5, + CELL_GCM_TEXTURE_MAX_ANISO_12 = 6, + CELL_GCM_TEXTURE_MAX_ANISO_16 = 7, + + // Wrap + CELL_GCM_TEXTURE_WRAP = 1, + CELL_GCM_TEXTURE_MIRROR = 2, + CELL_GCM_TEXTURE_CLAMP_TO_EDGE = 3, + CELL_GCM_TEXTURE_BORDER = 4, + CELL_GCM_TEXTURE_CLAMP = 5, + CELL_GCM_TEXTURE_MIRROR_ONCE_CLAMP_TO_EDGE = 6, + CELL_GCM_TEXTURE_MIRROR_ONCE_BORDER = 7, + CELL_GCM_TEXTURE_MIRROR_ONCE_CLAMP = 8, }; // GCM Surface @@ -107,7 +127,7 @@ enum CELL_GCM_SURFACE_Z24S8 = 2, // Surface Antialias - CELL_GCM_SURFACE_CENTER_1 = 2, + CELL_GCM_SURFACE_CENTER_1 = 0, CELL_GCM_SURFACE_DIAGONAL_CENTERED_2 = 3, CELL_GCM_SURFACE_SQUARE_CENTERED_4 = 4, CELL_GCM_SURFACE_SQUARE_ROTATED_4 = 5, @@ -117,8 +137,20 @@ enum CELL_GCM_SURFACE_SWIZZLE = 2, // Surface format - CELL_GCM_SURFACE_A8R8G8B8 = 8, - CELL_GCM_SURFACE_F_W16Z16Y16X16 = 11, + CELL_GCM_SURFACE_X1R5G5B5_Z1R5G5B5 = 1, + CELL_GCM_SURFACE_X1R5G5B5_O1R5G5B5 = 2, + CELL_GCM_SURFACE_R5G6B5 = 3, + CELL_GCM_SURFACE_X8R8G8B8_Z8R8G8B8 = 4, + CELL_GCM_SURFACE_X8R8G8B8_O8R8G8B8 = 5, + CELL_GCM_SURFACE_A8R8G8B8 = 8, + CELL_GCM_SURFACE_B8 = 9, + CELL_GCM_SURFACE_G8B8 = 10, + CELL_GCM_SURFACE_F_W16Z16Y16X16 = 11, + CELL_GCM_SURFACE_F_W32Z32Y32X32 = 12, + CELL_GCM_SURFACE_F_X32 = 13, + CELL_GCM_SURFACE_X8B8G8R8_Z8B8G8R8 = 14, + CELL_GCM_SURFACE_X8B8G8R8_O8B8G8R8 = 15, + CELL_GCM_SURFACE_A8B8G8R8 = 16, }; diff --git a/rpcs3/Emu/GS/GL/GLGSRender.h b/rpcs3/Emu/GS/GL/GLGSRender.h index 9f3b3e28f0..b3bca78d01 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.h +++ b/rpcs3/Emu/GS/GL/GLGSRender.h @@ -47,20 +47,38 @@ public: { switch(wrap) { - case 1: return GL_REPEAT; - case 2: return GL_MIRRORED_REPEAT; - case 3: return GL_CLAMP_TO_EDGE; - case 4: return GL_CLAMP_TO_BORDER; - case 5: return GL_CLAMP_TO_EDGE; - case 6: return GL_MIRROR_CLAMP_TO_EDGE_EXT; - case 7: return GL_MIRROR_CLAMP_TO_BORDER_EXT; - case 8: return GL_MIRROR_CLAMP_EXT; + case CELL_GCM_TEXTURE_WRAP: return GL_REPEAT; + case CELL_GCM_TEXTURE_MIRROR: return GL_MIRRORED_REPEAT; + case CELL_GCM_TEXTURE_CLAMP_TO_EDGE: return GL_CLAMP_TO_EDGE; + case CELL_GCM_TEXTURE_BORDER: return GL_CLAMP_TO_BORDER; + case CELL_GCM_TEXTURE_CLAMP: return GL_CLAMP_TO_EDGE; + case CELL_GCM_TEXTURE_MIRROR_ONCE_CLAMP_TO_EDGE: return GL_MIRROR_CLAMP_TO_EDGE_EXT; + case CELL_GCM_TEXTURE_MIRROR_ONCE_BORDER: return GL_MIRROR_CLAMP_TO_BORDER_EXT; + case CELL_GCM_TEXTURE_MIRROR_ONCE_CLAMP: return GL_MIRROR_CLAMP_EXT; } LOG_ERROR(RSX, "Texture wrap error: bad wrap (%d).", wrap); return GL_REPEAT; } + float GetMaxAniso(int aniso) + { + switch (aniso) + { + case CELL_GCM_TEXTURE_MAX_ANISO_1: return 1.0f; + case CELL_GCM_TEXTURE_MAX_ANISO_2: return 2.0f; + case CELL_GCM_TEXTURE_MAX_ANISO_4: return 4.0f; + case CELL_GCM_TEXTURE_MAX_ANISO_6: return 6.0f; + case CELL_GCM_TEXTURE_MAX_ANISO_8: return 8.0f; + case CELL_GCM_TEXTURE_MAX_ANISO_10: return 10.0f; + case CELL_GCM_TEXTURE_MAX_ANISO_12: return 12.0f; + case CELL_GCM_TEXTURE_MAX_ANISO_16: return 16.0f; + } + + LOG_ERROR(RSX, "Texture anisotropy error: bad max aniso (%d).", aniso); + return 1.0f; + } + inline static u8 Convert4To8(u8 v) { // Swizzle bits: 00001234 -> 12341234 @@ -478,22 +496,36 @@ public: checkForGlError("GLTexture::Init() -> lod"); - static const int gl_tex_filter[] = + static const int gl_tex_min_filter[] = { - GL_NEAREST, + GL_NEAREST, // unused GL_NEAREST, GL_LINEAR, GL_NEAREST_MIPMAP_NEAREST, GL_LINEAR_MIPMAP_NEAREST, GL_NEAREST_MIPMAP_LINEAR, GL_LINEAR_MIPMAP_LINEAR, - GL_NEAREST, + GL_NEAREST, // CELL_GCM_TEXTURE_CONVOLUTION_MIN }; - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_tex_filter[tex.GetMinFilter()]); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_tex_filter[tex.GetMagFilter()]); + static const int gl_tex_mag_filter[] = { + GL_NEAREST, // unused + GL_NEAREST, + GL_LINEAR, + GL_NEAREST, // unused + GL_LINEAR // CELL_GCM_TEXTURE_CONVOLUTION_MAG + }; - checkForGlError("GLTexture::Init() -> filters"); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_tex_min_filter[tex.GetMinFilter()]); + + checkForGlError("GLTexture::Init() -> min filters"); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_tex_mag_filter[tex.GetMagFilter()]); + + checkForGlError("GLTexture::Init() -> mag filters"); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, GetMaxAniso(tex.GetMaxAniso())); + + checkForGlError("GLTexture::Init() -> max anisotropy"); //Unbind(); From fb8ced95b01cbf2a74f2d31606134d115abc805d Mon Sep 17 00:00:00 2001 From: raven02 Date: Fri, 27 Jun 2014 22:57:58 +0800 Subject: [PATCH 3/3] Remove obsolete option "Hide Debug Console" and move skipPamf to HLE section --- rpcs3/Emu/SysCalls/Modules/cellPamf.cpp | 2 +- rpcs3/Gui/MainFrame.cpp | 16 ++++++---------- rpcs3/Ini.h | 14 +++++--------- 3 files changed, 12 insertions(+), 20 deletions(-) diff --git a/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp b/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp index 53cc3f5c62..4d172a8171 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellPamf.cpp @@ -176,7 +176,7 @@ int cellPamfVerify(mem_ptr_t pAddr, u64 fileSize) int cellPamfReaderInitialize(mem_ptr_t pSelf, mem_ptr_t pAddr, u64 fileSize, u32 attribute) { // Skip PAMF initialization - if (Ini.SkipPamf.GetValue()) + if (Ini.HLESkipPamf.GetValue()) return -1; cellPamf->Warning("cellPamfReaderInitialize(pSelf=0x%x, pAddr=0x%x, fileSize=%d, attribute=0x%x)", diff --git a/rpcs3/Gui/MainFrame.cpp b/rpcs3/Gui/MainFrame.cpp index 0da12e6462..d6018821b3 100644 --- a/rpcs3/Gui/MainFrame.cpp +++ b/rpcs3/Gui/MainFrame.cpp @@ -420,7 +420,6 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) wxCheckBox* chbox_gs_log_prog = new wxCheckBox(p_graphics, wxID_ANY, "Log vertex/fragment programs"); wxCheckBox* chbox_gs_dump_depth = new wxCheckBox(p_graphics, wxID_ANY, "Write Depth Buffer"); wxCheckBox* chbox_gs_dump_color = new wxCheckBox(p_graphics, wxID_ANY, "Write Color Buffers"); - wxCheckBox* chbox_skip_pamf = new wxCheckBox(p_graphics, wxID_ANY, "Skip Pamf"); wxCheckBox* chbox_gs_downscale = new wxCheckBox(p_graphics, wxID_ANY, "480p Downscale"); wxCheckBox* chbox_gs_vsync = new wxCheckBox(p_graphics, wxID_ANY, "VSync"); wxCheckBox* chbox_audio_dump = new wxCheckBox(p_audio, wxID_ANY, "Dump to file"); @@ -428,9 +427,9 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) wxCheckBox* chbox_hle_logging = new wxCheckBox(p_hle, wxID_ANY, "Log all SysCalls"); wxCheckBox* chbox_hle_hook_stfunc = new wxCheckBox(p_hle, wxID_ANY, "Hook static functions"); wxCheckBox* chbox_hle_savetty = new wxCheckBox(p_hle, wxID_ANY, "Save TTY output to file"); - wxCheckBox* chbox_hle_exitonstop = new wxCheckBox(p_hle, wxID_ANY, "Exit RPCS3 when process finishes"); - wxCheckBox* chbox_hle_hide_debug_console = new wxCheckBox(p_hle, wxID_ANY, "Hide Debug Console"); - wxCheckBox* chbox_hle_always_start = new wxCheckBox(p_hle, wxID_ANY, "Always start after boot"); + wxCheckBox* chbox_hle_exitonstop = new wxCheckBox(p_hle, wxID_ANY, "Exit RPCS3 when process finishes"); + wxCheckBox* chbox_hle_always_start = new wxCheckBox(p_hle, wxID_ANY, "Always start after boot"); + wxCheckBox* chbox_hle_skip_pamf = new wxCheckBox(p_hle, wxID_ANY, "Skip Pamf"); //cbox_cpu_decoder->Append("DisAsm"); cbox_cpu_decoder->Append("Interpreter & DisAsm"); @@ -500,7 +499,6 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) chbox_gs_log_prog ->SetValue(Ini.GSLogPrograms.GetValue()); chbox_gs_dump_depth ->SetValue(Ini.GSDumpDepthBuffer.GetValue()); chbox_gs_dump_color ->SetValue(Ini.GSDumpColorBuffers.GetValue()); - chbox_skip_pamf ->SetValue(Ini.SkipPamf.GetValue()); chbox_gs_downscale ->SetValue(Ini.GSDownscale.GetValue()); chbox_gs_vsync ->SetValue(Ini.GSVSyncEnable.GetValue()); chbox_audio_dump ->SetValue(Ini.AudioDumpToFile.GetValue()); @@ -509,8 +507,8 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) chbox_hle_hook_stfunc ->SetValue(Ini.HLEHookStFunc.GetValue()); chbox_hle_savetty ->SetValue(Ini.HLESaveTTY.GetValue()); chbox_hle_exitonstop ->SetValue(Ini.HLEExitOnStop.GetValue()); - chbox_hle_hide_debug_console->SetValue(Ini.HLEHideDebugConsole.GetValue()); chbox_hle_always_start ->SetValue(Ini.HLEAlwaysStart.GetValue()); + chbox_hle_skip_pamf ->SetValue(Ini.HLESkipPamf.GetValue()); cbox_cpu_decoder ->SetSelection(Ini.CPUDecoderMode.GetValue() ? Ini.CPUDecoderMode.GetValue() - 1 : 0); cbox_spu_decoder ->SetSelection(Ini.SPUDecoderMode.GetValue() ? Ini.SPUDecoderMode.GetValue() - 1 : 0); @@ -561,7 +559,6 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) s_subpanel_graphics->Add(chbox_gs_log_prog, wxSizerFlags().Border(wxALL, 5).Expand()); s_subpanel_graphics->Add(chbox_gs_dump_depth, wxSizerFlags().Border(wxALL, 5).Expand()); s_subpanel_graphics->Add(chbox_gs_dump_color, wxSizerFlags().Border(wxALL, 5).Expand()); - s_subpanel_graphics->Add(chbox_skip_pamf, wxSizerFlags().Border(wxALL, 5).Expand()); s_subpanel_graphics->Add(chbox_gs_vsync, wxSizerFlags().Border(wxALL, 5).Expand()); s_subpanel_graphics->Add(chbox_gs_downscale, wxSizerFlags().Border(wxALL, 5).Expand()); @@ -581,8 +578,8 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) s_subpanel_hle->Add(chbox_hle_hook_stfunc, wxSizerFlags().Border(wxALL, 5).Expand()); s_subpanel_hle->Add(chbox_hle_savetty, wxSizerFlags().Border(wxALL, 5).Expand()); s_subpanel_hle->Add(chbox_hle_exitonstop, wxSizerFlags().Border(wxALL, 5).Expand()); - s_subpanel_hle->Add(chbox_hle_hide_debug_console, wxSizerFlags().Border(wxALL, 5).Expand()); s_subpanel_hle->Add(chbox_hle_always_start, wxSizerFlags().Border(wxALL, 5).Expand()); + s_subpanel_hle->Add(chbox_hle_skip_pamf, wxSizerFlags().Border(wxALL, 5).Expand()); // System s_subpanel_system->Add(s_round_sys_lang, wxSizerFlags().Border(wxALL, 5).Expand()); @@ -616,7 +613,6 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) Ini.GSLogPrograms.SetValue(chbox_gs_log_prog->GetValue()); Ini.GSDumpDepthBuffer.SetValue(chbox_gs_dump_depth->GetValue()); Ini.GSDumpColorBuffers.SetValue(chbox_gs_dump_color->GetValue()); - Ini.SkipPamf.SetValue(chbox_skip_pamf->GetValue()); Ini.PadHandlerMode.SetValue(cbox_pad_handler->GetSelection()); Ini.KeyboardHandlerMode.SetValue(cbox_keyboard_handler->GetSelection()); Ini.MouseHandlerMode.SetValue(cbox_mouse_handler->GetSelection()); @@ -629,8 +625,8 @@ void MainFrame::Config(wxCommandEvent& WXUNUSED(event)) Ini.HLEExitOnStop.SetValue(chbox_hle_exitonstop->GetValue()); Ini.HLELogLvl.SetValue(cbox_hle_loglvl->GetSelection()); Ini.SysLanguage.SetValue(cbox_sys_lang->GetSelection()); - Ini.HLEHideDebugConsole.SetValue(chbox_hle_hide_debug_console->GetValue()); Ini.HLEAlwaysStart.SetValue(chbox_hle_always_start->GetValue()); + Ini.HLESkipPamf.SetValue(chbox_hle_skip_pamf->GetValue()); Ini.Save(); } diff --git a/rpcs3/Ini.h b/rpcs3/Ini.h index a0c17b6dc3..1408e4a443 100644 --- a/rpcs3/Ini.h +++ b/rpcs3/Ini.h @@ -115,7 +115,6 @@ public: IniEntry GSLogPrograms; IniEntry GSDumpColorBuffers; IniEntry GSDumpDepthBuffer; - IniEntry SkipPamf; IniEntry GSDownscale; // Audio @@ -157,9 +156,9 @@ public: IniEntry HLEHookStFunc; IniEntry HLESaveTTY; IniEntry HLEExitOnStop; - IniEntry HLELogLvl; - IniEntry HLEHideDebugConsole; + IniEntry HLELogLvl; IniEntry HLEAlwaysStart; + IniEntry HLESkipPamf; // Language IniEntry SysLanguage; @@ -184,7 +183,6 @@ public: GSLogPrograms.Init("GS_LogPrograms", path); GSDumpColorBuffers.Init("GS_DumpColorBuffers", path); GSDumpDepthBuffer.Init("GS_DumpDepthBuffer", path); - SkipPamf.Init("GS_SkipPamf", path); GSDownscale.Init("GS_Downscale", path); // Audio @@ -227,8 +225,8 @@ public: HLESaveTTY.Init("HLE_HLESaveTTY", path); HLEExitOnStop.Init("HLE_HLEExitOnStop", path); HLELogLvl.Init("HLE_HLELogLvl", path); - HLEHideDebugConsole.Init("HLE_HLEHideDebugConsole", path); HLEAlwaysStart.Init("HLE_HLEAlwaysStart", path); + HLESkipPamf.Init("HLE_HLESkipPamf", path); // Language SysLanguage.Init("Sytem_SysLanguage", path); @@ -249,7 +247,6 @@ public: GSLogPrograms.Load(false); GSDumpColorBuffers.Load(false); GSDumpDepthBuffer.Load(false); - SkipPamf.Load(false); GSDownscale.Load(false); // Audio @@ -292,8 +289,8 @@ public: HLESaveTTY.Load(false); HLEExitOnStop.Load(false); HLELogLvl.Load(3); - HLEHideDebugConsole.Load(false); HLEAlwaysStart.Load(false); + HLESkipPamf.Load(false); // Language SysLanguage.Load(1); @@ -315,7 +312,6 @@ public: GSLogPrograms.Save(); GSDumpColorBuffers.Save(); GSDumpDepthBuffer.Save(); - SkipPamf.Save(); GSDownscale.Save(); // Audio @@ -358,8 +354,8 @@ public: HLESaveTTY.Save(); HLEExitOnStop.Save(); HLELogLvl.Save(); - HLEHideDebugConsole.Save(); HLEAlwaysStart.Save(); + HLESkipPamf.Save(); // Language SysLanguage.Save();