diff --git a/rpcs3/Emu/Cell/Modules/cellGcmSys.cpp b/rpcs3/Emu/Cell/Modules/cellGcmSys.cpp index fb28b4f8f8..44606b7dd1 100644 --- a/rpcs3/Emu/Cell/Modules/cellGcmSys.cpp +++ b/rpcs3/Emu/Cell/Modules/cellGcmSys.cpp @@ -1056,7 +1056,7 @@ error_code cellGcmMapEaIoAddressWithFlags(ppu_thread& ppu, u32 ea, u32 io, u32 s { cellGcmSys.warning("cellGcmMapEaIoAddressWithFlags(ea=0x%x, io=0x%x, size=0x%x, flags=0x%x)", ea, io, size, flags); - ensure(flags == 2 /*CELL_GCM_IOMAP_FLAG_STRICT_ORDERING*/); + ensure(flags == CELL_GCM_IOMAP_FLAG_STRICT_ORDERING); auto& gcm_cfg = g_fxo->get(); std::lock_guard lock(gcm_cfg.gcmio_mutex); diff --git a/rpcs3/Emu/RSX/gcm_enums.h b/rpcs3/Emu/RSX/gcm_enums.h index 95426a852c..99684510fd 100644 --- a/rpcs3/Emu/RSX/gcm_enums.h +++ b/rpcs3/Emu/RSX/gcm_enums.h @@ -6,6 +6,19 @@ namespace gcm { + enum + { + CELL_GCM_TYPE_B = 1, + CELL_GCM_TYPE_C = 2, + CELL_GCM_TYPE_RSX = 3, + + CELL_GCM_MRT_MAXCOUNT = 4, + + CELL_GCM_DISPLAY_MAXID = 8, + + CELL_GCM_CONDITIONAL = 2, + }; + enum { CELL_GCM_DISPLAY_HSYNC = 1, @@ -33,6 +46,42 @@ namespace gcm CELL_GCM_DISPLAY_FLIP_STATUS_WAITING = 1, }; + enum + { + CELL_GCM_ZCULL_ALIGN_OFFSET = 4096, + CELL_GCM_ZCULL_ALIGN_WIDTH = 64, + CELL_GCM_ZCULL_ALIGN_HEIGHT = 64, + CELL_GCM_ZCULL_ALIGN_CULLSTART = 4096, + CELL_GCM_ZCULL_COMPRESSION_TAG_BASE_MAX = 0x7FF, + CELL_GCM_ZCULL_RAM_SIZE_MAX = 0x00300000, + + CELL_GCM_TILE_ALIGN_OFFSET = 0x00010000, + CELL_GCM_TILE_ALIGN_SIZE = 0x00010000, + CELL_GCM_TILE_LOCAL_ALIGN_HEIGHT = 32, + CELL_GCM_TILE_MAIN_ALIGN_HEIGHT = 64, + CELL_GCM_TILE_ALIGN_BUFFER_START_BOUNDARY = 8, + + CELL_GCM_FRAGMENT_UCODE_LOCAL_ALIGN_OFFSET = 64, + CELL_GCM_FRAGMENT_UCODE_MAIN_ALIGN_OFFSET = 128, + + CELL_GCM_SURFACE_LINEAR_ALIGN_OFFSET = 64, + CELL_GCM_SURFACE_SWIZZLE_ALIGN_OFFSET = 128, + + CELL_GCM_TEXTURE_SWIZZLE_ALIGN_OFFSET = 128, + CELL_GCM_TEXTURE_CUBEMAP_ALIGN_OFFSET = 128, + CELL_GCM_TEXTURE_SWIZZLED_CUBEMAP_FACE_ALIGN_OFFSET = 128, + + CELL_GCM_VERTEX_TEXTURE_CACHE_LINE_SIZE = 32, + CELL_GCM_L2_TEXTURE_CACHE_LOCAL_LINE_SIZE = 64, + CELL_GCM_L2_TEXTURE_CACHE_MAIN_LINE_SIZE = 128, + + CELL_GCM_IDX_FRAGMENT_UCODE_INSTRUCTION_PREFETCH_COUNT = 16, + + CELL_GCM_DRAW_INDEX_ARRAY_INDEX_RANGE_MAX = 0x000FFFFF, + + CELL_GCM_CURSOR_ALIGN_OFFSET = 2048 + }; + enum { CELL_GCM_FREQUENCY_MODULO = 1, @@ -45,9 +94,17 @@ namespace gcm CELL_RESC_ELEMENT_FLOAT = 1, }; - enum + enum CellGcmDefaultFifoMode + { + CELL_GCM_DEFAULT_FIFO_MODE_TRADITIONAL = 0, + CELL_GCM_DEFAULT_FIFO_MODE_OPTIMIZE = 1, + CELL_GCM_DEFAULT_FIFO_MODE_CONDITIONAL = 2, + }; + + enum CellGcmSystemMode { CELL_GCM_SYSTEM_MODE_IOMAP_512MB = 1, + CELL_GCM_SYSTEM_MODE_MASK = 1 }; enum @@ -84,8 +141,8 @@ namespace gcm CELL_GCM_TEXTURE_COMPRESSED_DXT23 = 0x87, CELL_GCM_TEXTURE_COMPRESSED_DXT45 = 0x88, CELL_GCM_TEXTURE_G8B8 = 0x8B, - CELL_GCM_TEXTURE_COMPRESSED_B8R8_G8R8 = 0x8D, - CELL_GCM_TEXTURE_COMPRESSED_R8B8_R8G8 = 0x8E, + CELL_GCM_TEXTURE_COMPRESSED_B8R8_G8R8 = 0x8D, // NOTE: 0xAD in firmware + CELL_GCM_TEXTURE_COMPRESSED_R8B8_R8G8 = 0x8E, // NOTE: 0xAE in firmware CELL_GCM_TEXTURE_R6G5B5 = 0x8F, CELL_GCM_TEXTURE_DEPTH24_D8 = 0x90, CELL_GCM_TEXTURE_DEPTH24_D8_FLOAT = 0x91, @@ -153,12 +210,19 @@ namespace gcm enum { + CELL_GCM_TEXTURE_DIMENSION_1 = 1, + CELL_GCM_TEXTURE_DIMENSION_2 = 2, + CELL_GCM_TEXTURE_DIMENSION_3 = 3, + CELL_GCM_TEXTURE_UNSIGNED_REMAP_NORMAL = 0, CELL_GCM_TEXTURE_UNSIGNED_REMAP_BIASED = 1, CELL_GCM_TEXTURE_SIGNED_REMAP_NORMAL = 0x0, CELL_GCM_TEXTURE_SIGNED_REMAP_CLAMPED = 0x3, + CELL_GCM_TEXTURE_REMAP_ORDER_XYXY = 0, + CELL_GCM_TEXTURE_REMAP_ORDER_XXXY = 1, + CELL_GCM_TEXTURE_REMAP_FROM_A = 0, CELL_GCM_TEXTURE_REMAP_FROM_R = 1, CELL_GCM_TEXTURE_REMAP_FROM_G = 2, @@ -168,6 +232,9 @@ namespace gcm CELL_GCM_TEXTURE_REMAP_ONE = 1, CELL_GCM_TEXTURE_REMAP_REMAP = 2, + CELL_GCM_TEXTURE_BORDER_TEXTURE = 0, + CELL_GCM_TEXTURE_BORDER_COLOR = 1, + CELL_GCM_TEXTURE_ZFUNC_NEVER = 0, CELL_GCM_TEXTURE_ZFUNC_LESS = 1, CELL_GCM_TEXTURE_ZFUNC_EQUAL = 2, @@ -352,6 +419,24 @@ namespace gcm CELL_GCM_FALSE = 0, }; + enum + { + CELL_GCM_POINT_SPRITE_RMODE_ZERO = 0, + CELL_GCM_POINT_SPRITE_RMODE_FROM_R = 1, + CELL_GCM_POINT_SPRITE_RMODE_FROM_S = 2, + + CELL_GCM_POINT_SPRITE_TEX0 = 1 << 8, + CELL_GCM_POINT_SPRITE_TEX1 = 1 << 9, + CELL_GCM_POINT_SPRITE_TEX2 = 1 << 10, + CELL_GCM_POINT_SPRITE_TEX3 = 1 << 11, + CELL_GCM_POINT_SPRITE_TEX4 = 1 << 12, + CELL_GCM_POINT_SPRITE_TEX5 = 1 << 13, + CELL_GCM_POINT_SPRITE_TEX6 = 1 << 14, + CELL_GCM_POINT_SPRITE_TEX7 = 1 << 15, + CELL_GCM_POINT_SPRITE_TEX8 = 1 << 16, + CELL_GCM_POINT_SPRITE_TEX9 = 1 << 17, + }; + enum { CELL_GCM_SHADER_CONTROL_DEPTH_EXPORT = 0xe, ///< shader program exports the depth of the shaded fragment @@ -754,7 +839,7 @@ namespace gcm RSX_CALL_STACK_EMPTY = 0x00000003, }; - //Fog + // Fog enum { CELL_GCM_FOG_MODE_LINEAR = 0x2601, @@ -765,6 +850,22 @@ namespace gcm CELL_GCM_FOG_MODE_LINEAR_ABS = 0x0804, }; + // ISO + enum + { + CELL_GCM_TEXTURE_ISO_LOW = 0, + CELL_GCM_TEXTURE_ISO_HIGH = 1, + CELL_GCM_TEXTURE_ANISO_LOW = 0, + CELL_GCM_TEXTURE_ANISO_HIGH = 1, + }; + + // Depth format + enum + { + CELL_GCM_DEPTH_FORMAT_FIXED = 0, + CELL_GCM_DEPTH_FORMAT_FLOAT = 1, + }; + // Surface clear bitfields (aggregates) enum { @@ -847,6 +948,9 @@ namespace gcm CELL_GCM_TEXTURE_LINEAR_LINEAR = 6, CELL_GCM_TEXTURE_CONVOLUTION_MIN = 7, CELL_GCM_TEXTURE_CONVOLUTION_MAG = 4, + CELL_GCM_TEXTURE_CONVOLUTION_QUINCUNX = 1, + CELL_GCM_TEXTURE_CONVOLUTION_GAUSSIAN = 2, + CELL_GCM_TEXTURE_CONVOLUTION_QUINCUNX_ALT = 3, }; enum @@ -887,6 +991,13 @@ namespace gcm CELL_GCM_TRANSFER_OPERATION_BLEND_PREMULT = 5, }; + enum + { + CELL_GCM_TRANSFER_CONVERSION_DITHER = 0, + CELL_GCM_TRANSFER_CONVERSION_TRUNCATE = 1, + CELL_GCM_TRANSFER_CONVERSION_SUBTRACT_TRUNCATE = 2, + }; + enum { CELL_GCM_TRANSFER_SCALE_FORMAT_A1R5G5B5 = 1, @@ -912,12 +1023,58 @@ namespace gcm CELL_GCM_TRANSFER_SURFACE_FORMAT_Y32 = 11, }; + enum + { + CELL_GCM_TRANSFER_SURFACE = 0, + CELL_GCM_TRANSFER_SWIZZLE = 1, + }; + + enum + { + CELL_GCM_SHIFT_SET_SHADER_CONTROL_CONTROL_TXP = 15, + CELL_GCM_MASK_SET_SHADER_CONTROL_CONTROL_TXP = 0x00008000, + + CELL_GCM_IOMAP_FLAG_STRICT_ORDERING = 1 << 1, + }; + enum { CELL_GCM_CONTEXT_SURFACE2D = 0x313371C3, CELL_GCM_CONTEXT_SWIZZLE2D = 0x31337A73, }; + enum + { + CELL_GCM_INDEX_RANGE_LABEL_MIN = 64, + CELL_GCM_INDEX_RANGE_LABEL_MAX = 255, + CELL_GCM_INDEX_RANGE_LABEL_COUNT = (256 - 64), + + CELL_GCM_INDEX_RANGE_NOTIFY_MAIN_MIN = 0, + CELL_GCM_INDEX_RANGE_NOTIFY_MAIN_MAX = 255, + CELL_GCM_INDEX_RANGE_NOTIFY_MAIN_COUNT = 256, + + CELL_GCM_INDEX_RANGE_REPORT_MAIN_MIN = 0, + CELL_GCM_INDEX_RANGE_REPORT_MAIN_MAX = (1024 * 1024 - 1), + CELL_GCM_INDEX_RANGE_REPORT_MAIN_COUNT = (1024 * 1024), + CELL_GCM_INDEX_RANGE_REPORT_LOCAL_MIN = 0, + CELL_GCM_INDEX_RANGE_REPORT_LOCAL_MAX = 2047, + CELL_GCM_INDEX_RANGE_REPORT_LOCAL_COUNT = 2048, + + CELL_GCM_INDEX_RANGE_TILE_MIN = 0, + CELL_GCM_INDEX_RANGE_TILE_MAX = 14, + CELL_GCM_INDEX_RANGE_TILE_COUNT = 15, + + CELL_GCM_INDEX_RANGE_ZCULL_MIN = 0, + CELL_GCM_INDEX_RANGE_ZCULL_MAX = 7, + CELL_GCM_INDEX_RANGE_ZCULL_COUNT = 8, + }; + + enum + { + CELL_GCM_DISPLAY_FIELD_TOP = 1, + CELL_GCM_DISPLAY_FIELD_BOTTOM = 0, + }; + enum { CELL_GCM_USER_CLIP_PLANE_DISABLE = 0, @@ -938,6 +1095,36 @@ namespace gcm CELL_GCM_POLYGON_MODE_FILL = 0x1B02, }; + enum + { + CELL_GCM_CLEAR_Z = 1 << 0, + CELL_GCM_CLEAR_S = 1 << 1, + CELL_GCM_CLEAR_R = 1 << 4, + CELL_GCM_CLEAR_G = 1 << 5, + CELL_GCM_CLEAR_B = 1 << 6, + CELL_GCM_CLEAR_A = 1 << 7, + CELL_GCM_CLEAR_M = 0xf3 + }; + + enum + { + CELL_GCM_VERTEX_S1 = 1, + CELL_GCM_VERTEX_F = 2, + CELL_GCM_VERTEX_SF = 3, + CELL_GCM_VERTEX_UB = 4, + CELL_GCM_VERTEX_S32K = 5, + CELL_GCM_VERTEX_CMP = 6, + CELL_GCM_VERTEX_UB256 = 7, + + CELL_GCM_VERTEX_S16_NR = 1, + CELL_GCM_VERTEX_F32 = 2, + CELL_GCM_VERTEX_F16 = 3, + CELL_GCM_VERTEX_U8_NR = 4, + CELL_GCM_VERTEX_S16_UN = 5, + CELL_GCM_VERTEX_S11_11_10_NR = 6, + CELL_GCM_VERTEX_U8_UN = 7, + }; + enum { CELL_GCM_WINDOW_ORIGIN_TOP = 0,