diff --git a/rpcs3/Emu/RSX/GL/rsx_gl_texture.cpp b/rpcs3/Emu/RSX/GL/rsx_gl_texture.cpp index 2edab403ee..141dca7bf7 100644 --- a/rpcs3/Emu/RSX/GL/rsx_gl_texture.cpp +++ b/rpcs3/Emu/RSX/GL/rsx_gl_texture.cpp @@ -124,30 +124,59 @@ namespace // NOTE: This must be in ARGB order in all forms below. switch (texture_format) { - case CELL_GCM_TEXTURE_B8: return{ GL_RED, GL_RED, GL_RED, GL_RED }; - case CELL_GCM_TEXTURE_A4R4G4B4: return { GL_BLUE, GL_ALPHA, GL_RED, GL_GREEN }; - case CELL_GCM_TEXTURE_G8B8: return { GL_RED, GL_GREEN, GL_RED, GL_GREEN }; - case CELL_GCM_TEXTURE_X16: return { GL_RED, GL_ONE, GL_RED, GL_ONE }; - case CELL_GCM_TEXTURE_Y16_X16: return { GL_GREEN, GL_RED, GL_GREEN, GL_RED }; - case CELL_GCM_TEXTURE_X32_FLOAT: return { GL_RED, GL_ONE, GL_ONE, GL_ONE }; - case CELL_GCM_TEXTURE_D1R5G5B5: return { GL_ONE, GL_RED, GL_GREEN, GL_BLUE }; - case CELL_GCM_TEXTURE_D8R8G8B8: return { GL_ONE, GL_RED, GL_GREEN, GL_BLUE }; - case CELL_GCM_TEXTURE_Y16_X16_FLOAT: return { GL_RED, GL_GREEN, GL_RED, GL_GREEN }; case CELL_GCM_TEXTURE_A1R5G5B5: - case CELL_GCM_TEXTURE_R5G6B5: - case CELL_GCM_TEXTURE_A8R8G8B8: + case CELL_GCM_TEXTURE_R5G5B5A1: case CELL_GCM_TEXTURE_R6G5B5: + case CELL_GCM_TEXTURE_R5G6B5: + case CELL_GCM_TEXTURE_A8R8G8B8: // TODO case CELL_GCM_TEXTURE_DEPTH24_D8: case CELL_GCM_TEXTURE_DEPTH24_D8_FLOAT: case CELL_GCM_TEXTURE_DEPTH16: case CELL_GCM_TEXTURE_DEPTH16_FLOAT: - case CELL_GCM_TEXTURE_R5G5B5A1: - case CELL_GCM_TEXTURE_W16_Z16_Y16_X16_FLOAT: case CELL_GCM_TEXTURE_W32_Z32_Y32_X32_FLOAT: case CELL_GCM_TEXTURE_COMPRESSED_DXT1: case CELL_GCM_TEXTURE_COMPRESSED_DXT23: case CELL_GCM_TEXTURE_COMPRESSED_DXT45: - return{ GL_ALPHA, GL_RED, GL_GREEN, GL_BLUE }; + case CELL_GCM_TEXTURE_COMPRESSED_B8R8_G8R8: + case CELL_GCM_TEXTURE_COMPRESSED_R8B8_R8G8: + return { GL_ALPHA, GL_RED, GL_GREEN, GL_BLUE }; + + case CELL_GCM_TEXTURE_B8: + return { GL_RED, GL_RED, GL_RED, GL_RED }; + + case CELL_GCM_TEXTURE_A4R4G4B4: + return { GL_BLUE, GL_ALPHA, GL_RED, GL_GREEN }; + + case CELL_GCM_TEXTURE_G8B8: + return { GL_GREEN, GL_RED, GL_GREEN, GL_RED}; + + case CELL_GCM_TEXTURE_X16: + return { GL_RED, GL_ONE, GL_RED, GL_ONE }; + + case CELL_GCM_TEXTURE_Y16_X16: + return { GL_RED, GL_GREEN, GL_RED, GL_GREEN}; + + case CELL_GCM_TEXTURE_X32_FLOAT: + return { GL_RED, GL_ONE, GL_ONE, GL_ONE }; + + case CELL_GCM_TEXTURE_Y16_X16_FLOAT: + return { GL_GREEN, GL_RED, GL_GREEN, GL_RED }; + + case CELL_GCM_TEXTURE_W16_Z16_Y16_X16_FLOAT: + return { GL_RED, GL_ALPHA, GL_BLUE, GL_GREEN }; + + case CELL_GCM_TEXTURE_D1R5G5B5: + case CELL_GCM_TEXTURE_D8R8G8B8: + return { GL_ONE, GL_RED, GL_GREEN, GL_BLUE }; + + case CELL_GCM_TEXTURE_COMPRESSED_HILO8: + case CELL_GCM_TEXTURE_COMPRESSED_HILO_S8: + return { GL_RED, GL_GREEN, GL_RED, GL_GREEN }; + + case ~(CELL_GCM_TEXTURE_LN | CELL_GCM_TEXTURE_UN) & CELL_GCM_TEXTURE_COMPRESSED_B8R8_G8R8: + case ~(CELL_GCM_TEXTURE_LN | CELL_GCM_TEXTURE_UN) & CELL_GCM_TEXTURE_COMPRESSED_R8B8_R8G8: + return { GL_ZERO, GL_GREEN, GL_BLUE, GL_RED }; + } throw EXCEPTION("Unknown format %x", texture_format); } diff --git a/rpcs3/Emu/RSX/VK/VKFormats.cpp b/rpcs3/Emu/RSX/VK/VKFormats.cpp index fe878ee9a6..fb36bb7cfa 100644 --- a/rpcs3/Emu/RSX/VK/VKFormats.cpp +++ b/rpcs3/Emu/RSX/VK/VKFormats.cpp @@ -116,7 +116,6 @@ VkComponentMapping get_component_mapping(u32 format, u8 swizzle_mask) case CELL_GCM_TEXTURE_DEPTH24_D8_FLOAT: case CELL_GCM_TEXTURE_DEPTH16: case CELL_GCM_TEXTURE_DEPTH16_FLOAT: - case CELL_GCM_TEXTURE_X32_FLOAT: case CELL_GCM_TEXTURE_W32_Z32_Y32_X32_FLOAT: case CELL_GCM_TEXTURE_COMPRESSED_DXT1: case CELL_GCM_TEXTURE_COMPRESSED_DXT23: @@ -142,24 +141,24 @@ VkComponentMapping get_component_mapping(u32 format, u8 swizzle_mask) case CELL_GCM_TEXTURE_W16_Z16_Y16_X16_FLOAT: return { VK_COMPONENT_SWIZZLE_A, VK_COMPONENT_SWIZZLE_B, VK_COMPONENT_SWIZZLE_G, VK_COMPONENT_SWIZZLE_R }; - + + case CELL_GCM_TEXTURE_X32_FLOAT: + return { VK_COMPONENT_SWIZZLE_ONE, VK_COMPONENT_SWIZZLE_ONE, VK_COMPONENT_SWIZZLE_ONE, VK_COMPONENT_SWIZZLE_R }; + case CELL_GCM_TEXTURE_A4R4G4B4: { VkComponentSwizzle map_table[] = { VK_COMPONENT_SWIZZLE_R, VK_COMPONENT_SWIZZLE_G, VK_COMPONENT_SWIZZLE_B, VK_COMPONENT_SWIZZLE_A }; return { map_table[remap_r], map_table[remap_g], map_table[remap_b], map_table[remap_a] }; } - + case CELL_GCM_TEXTURE_D8R8G8B8: case CELL_GCM_TEXTURE_D1R5G5B5: return { VK_COMPONENT_SWIZZLE_R, VK_COMPONENT_SWIZZLE_G, VK_COMPONENT_SWIZZLE_B, VK_COMPONENT_SWIZZLE_ONE }; case CELL_GCM_TEXTURE_COMPRESSED_HILO8: - return { VK_COMPONENT_SWIZZLE_G, VK_COMPONENT_SWIZZLE_R, VK_COMPONENT_SWIZZLE_G, VK_COMPONENT_SWIZZLE_R }; - case CELL_GCM_TEXTURE_COMPRESSED_HILO_S8: return { VK_COMPONENT_SWIZZLE_G, VK_COMPONENT_SWIZZLE_R, VK_COMPONENT_SWIZZLE_G, VK_COMPONENT_SWIZZLE_R }; - case ~(CELL_GCM_TEXTURE_LN | CELL_GCM_TEXTURE_UN) & CELL_GCM_TEXTURE_COMPRESSED_B8R8_G8R8: case ~(CELL_GCM_TEXTURE_LN | CELL_GCM_TEXTURE_UN) & CELL_GCM_TEXTURE_COMPRESSED_R8B8_R8G8: return { VK_COMPONENT_SWIZZLE_G, VK_COMPONENT_SWIZZLE_B, VK_COMPONENT_SWIZZLE_R, VK_COMPONENT_SWIZZLE_ZERO }; @@ -174,4 +173,4 @@ VkComponentMapping get_component_mapping(u32 format, u8 swizzle_mask) throw EXCEPTION("Invalid or unsupported component mapping for texture format (0x%x)", format); } -} \ No newline at end of file +}