mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-07 07:21:25 +12:00
Few source-code improvements
* Fixed identation inconsistency after last merge. * Replaced uint32_t with u32 in LinearToSwizzleAddress. * Replaced hardcoded values with defined GCM constants (in Emu/GS/GCM.h) in some switch statements. This commit won't produce any changes in the RPCS3 executable. It's just to make the code easier to read.
This commit is contained in:
parent
bd8ff4ca11
commit
ab25edfacc
6 changed files with 109 additions and 61 deletions
|
@ -22,6 +22,57 @@ enum
|
|||
CELL_GCM_DISPLAY_FREQUENCY_DISABLE = 3,
|
||||
};
|
||||
|
||||
// GCM Texture
|
||||
enum
|
||||
{
|
||||
// Format
|
||||
CELL_GCM_TEXTURE_B8 = 0x81,
|
||||
CELL_GCM_TEXTURE_A1R5G5B5 = 0x82,
|
||||
CELL_GCM_TEXTURE_A4R4G4B4 = 0x83,
|
||||
CELL_GCM_TEXTURE_R5G6B5 = 0x84,
|
||||
CELL_GCM_TEXTURE_A8R8G8B8 = 0x85,
|
||||
CELL_GCM_TEXTURE_COMPRESSED_DXT1 = 0x86,
|
||||
CELL_GCM_TEXTURE_COMPRESSED_DXT23 = 0x87,
|
||||
CELL_GCM_TEXTURE_COMPRESSED_DXT45 = 0x88,
|
||||
CELL_GCM_TEXTURE_G8B8 = 0x8B,
|
||||
CELL_GCM_TEXTURE_R6G5B5 = 0x8F,
|
||||
CELL_GCM_TEXTURE_DEPTH24_D8 = 0x90,
|
||||
CELL_GCM_TEXTURE_DEPTH24_D8_FLOAT = 0x91,
|
||||
CELL_GCM_TEXTURE_DEPTH16 = 0x92,
|
||||
CELL_GCM_TEXTURE_DEPTH16_FLOAT = 0x93,
|
||||
CELL_GCM_TEXTURE_X16 = 0x94,
|
||||
CELL_GCM_TEXTURE_Y16_X16 = 0x95,
|
||||
CELL_GCM_TEXTURE_R5G5B5A1 = 0x97,
|
||||
CELL_GCM_TEXTURE_COMPRESSED_HILO8 = 0x98,
|
||||
CELL_GCM_TEXTURE_COMPRESSED_HILO_S8 = 0x99,
|
||||
CELL_GCM_TEXTURE_W16_Z16_Y16_X16_FLOAT = 0x9A,
|
||||
CELL_GCM_TEXTURE_W32_Z32_Y32_X32_FLOAT = 0x9B,
|
||||
CELL_GCM_TEXTURE_X32_FLOAT = 0x9C,
|
||||
CELL_GCM_TEXTURE_D1R5G5B5 = 0x9D,
|
||||
CELL_GCM_TEXTURE_D8R8G8B8 = 0x9E,
|
||||
CELL_GCM_TEXTURE_Y16_X16_FLOAT = 0x9F,
|
||||
CELL_GCM_TEXTURE_COMPRESSED_B8R8_G8R8 = 0xAD,
|
||||
CELL_GCM_TEXTURE_COMPRESSED_R8B8_R8G8 = 0xAE,
|
||||
|
||||
// Format flags
|
||||
CELL_GCM_TEXTURE_SZ = 0x00,
|
||||
CELL_GCM_TEXTURE_LN = 0x20,
|
||||
CELL_GCM_TEXTURE_NR = 0x00,
|
||||
CELL_GCM_TEXTURE_UN = 0x40,
|
||||
};
|
||||
|
||||
// GCM Surface
|
||||
enum
|
||||
{
|
||||
// Target
|
||||
CELL_GCM_SURFACE_TARGET_NONE = 0,
|
||||
CELL_GCM_SURFACE_TARGET_0 = 1,
|
||||
CELL_GCM_SURFACE_TARGET_1 = 2,
|
||||
CELL_GCM_SURFACE_TARGET_MRT1 = 0x13,
|
||||
CELL_GCM_SURFACE_TARGET_MRT2 = 0x17,
|
||||
CELL_GCM_SURFACE_TARGET_MRT3 = 0x1f,
|
||||
};
|
||||
|
||||
struct CellGcmControl
|
||||
{
|
||||
u32 put;
|
||||
|
|
|
@ -556,29 +556,29 @@ void GLGSRender::WriteBuffers()
|
|||
|
||||
switch(m_surface_colour_target)
|
||||
{
|
||||
case 0x0:
|
||||
case CELL_GCM_SURFACE_TARGET_NONE:
|
||||
return;
|
||||
|
||||
case 0x1:
|
||||
case CELL_GCM_SURFACE_TARGET_0:
|
||||
WriteColourBufferA();
|
||||
break;
|
||||
|
||||
case 0x2:
|
||||
case CELL_GCM_SURFACE_TARGET_1:
|
||||
WriteColourBufferB();
|
||||
break;
|
||||
|
||||
case 0x13:
|
||||
case CELL_GCM_SURFACE_TARGET_MRT1:
|
||||
WriteColourBufferA();
|
||||
WriteColourBufferB();
|
||||
break;
|
||||
|
||||
case 0x17:
|
||||
case CELL_GCM_SURFACE_TARGET_MRT2:
|
||||
WriteColourBufferA();
|
||||
WriteColourBufferB();
|
||||
WriteColourBufferC();
|
||||
break;
|
||||
|
||||
case 0x1f:
|
||||
case CELL_GCM_SURFACE_TARGET_MRT3:
|
||||
WriteColourBufferA();
|
||||
WriteColourBufferB();
|
||||
WriteColourBufferC();
|
||||
|
@ -726,26 +726,26 @@ void GLGSRender::ExecCMD()
|
|||
|
||||
switch(m_surface_colour_target)
|
||||
{
|
||||
case 0x0:
|
||||
case CELL_GCM_SURFACE_TARGET_NONE:
|
||||
break;
|
||||
|
||||
case 0x1:
|
||||
case CELL_GCM_SURFACE_TARGET_0:
|
||||
glDrawBuffer(draw_buffers[0]);
|
||||
break;
|
||||
|
||||
case 0x2:
|
||||
case CELL_GCM_SURFACE_TARGET_1:
|
||||
glDrawBuffer(draw_buffers[1]);
|
||||
break;
|
||||
|
||||
case 0x13:
|
||||
case CELL_GCM_SURFACE_TARGET_MRT1:
|
||||
glDrawBuffers(2, draw_buffers);
|
||||
break;
|
||||
|
||||
case 0x17:
|
||||
case CELL_GCM_SURFACE_TARGET_MRT2:
|
||||
glDrawBuffers(3, draw_buffers);
|
||||
break;
|
||||
|
||||
case 0x1f:
|
||||
case CELL_GCM_SURFACE_TARGET_MRT3:
|
||||
glDrawBuffers(4, draw_buffers);
|
||||
break;
|
||||
|
||||
|
@ -1147,12 +1147,10 @@ void GLGSRender::Flip()
|
|||
}
|
||||
}
|
||||
|
||||
uint32_t LinearToSwizzleAddress(
|
||||
uint32_t x, uint32_t y, uint32_t z,
|
||||
uint32_t log2_width, uint32_t log2_height, uint32_t log2_depth)
|
||||
u32 LinearToSwizzleAddress(u32 x, u32 y, u32 z, u32 log2_width, u32 log2_height, u32 log2_depth)
|
||||
{
|
||||
uint32_t offset = 0;
|
||||
uint32_t shift_count = 0;
|
||||
u32 offset = 0;
|
||||
u32 shift_count = 0;
|
||||
while(log2_width | log2_height | log2_depth){
|
||||
if(log2_width){
|
||||
offset |= (x & 0x01) << shift_count;
|
||||
|
|
|
@ -13,9 +13,7 @@
|
|||
|
||||
extern GLenum g_last_gl_error;
|
||||
void printGlError(GLenum err, const char* situation);
|
||||
uint32_t LinearToSwizzleAddress(
|
||||
uint32_t x, uint32_t y, uint32_t z,
|
||||
uint32_t log2_width, uint32_t log2_height, uint32_t log2_depth);
|
||||
u32 LinearToSwizzleAddress(u32 x, u32 y, u32 z, u32 log2_width, u32 log2_height, u32 log2_depth);
|
||||
|
||||
#if RSX_DEBUG
|
||||
#define checkForGlError(sit) if((g_last_gl_error = glGetError()) != GL_NO_ERROR) printGlError(g_last_gl_error, sit)
|
||||
|
@ -79,7 +77,7 @@ public:
|
|||
checkForGlError("GLTexture::Init() -> glBindTexture");
|
||||
|
||||
int format = tex.GetFormat() & ~(0x20 | 0x40);
|
||||
bool is_swizzled = (tex.GetFormat() & 0x20) == 0;
|
||||
bool is_swizzled = !(tex.GetFormat() & CELL_GCM_TEXTURE_LN);
|
||||
|
||||
glPixelStorei(GL_PACK_ALIGNMENT, tex.m_pitch);
|
||||
char* pixels = (char*)Memory.GetMemFromAddr(GetAddress(tex.GetOffset(), tex.GetLocation()));
|
||||
|
@ -87,7 +85,7 @@ public:
|
|||
|
||||
switch(format)
|
||||
{
|
||||
case 0x81:
|
||||
case CELL_GCM_TEXTURE_B8:
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_BLUE, GL_UNSIGNED_BYTE, pixels);
|
||||
checkForGlError("GLTexture::Init() -> glTexImage2D");
|
||||
|
||||
|
@ -99,15 +97,15 @@ public:
|
|||
checkForGlError("GLTexture::Init() -> glTexParameteri");
|
||||
break;
|
||||
|
||||
case 0x85:
|
||||
case CELL_GCM_TEXTURE_A8R8G8B8:
|
||||
if(is_swizzled)
|
||||
{
|
||||
uint32_t *src, *dst;
|
||||
uint32_t log2width, log2height;
|
||||
u32 *src, *dst;
|
||||
u32 log2width, log2height;
|
||||
|
||||
unswizzledPixels = (char*)malloc(tex.GetWidth() * tex.GetHeight() * 4);
|
||||
src = (uint32_t*)pixels;
|
||||
dst = (uint32_t*)unswizzledPixels;
|
||||
src = (u32*)pixels;
|
||||
dst = (u32*)unswizzledPixels;
|
||||
|
||||
log2width = log(tex.GetWidth())/log(2);
|
||||
log2height = log(tex.GetHeight())/log(2);
|
||||
|
@ -125,7 +123,7 @@ public:
|
|||
checkForGlError("GLTexture::Init() -> glTexImage2D");
|
||||
break;
|
||||
|
||||
case 0x86:
|
||||
case CELL_GCM_TEXTURE_COMPRESSED_DXT1:
|
||||
{
|
||||
u32 size = ((tex.GetWidth() + 3) / 4) * ((tex.GetHeight() + 3) / 4) * 8;
|
||||
|
||||
|
@ -134,7 +132,7 @@ public:
|
|||
}
|
||||
break;
|
||||
|
||||
case 0x87:
|
||||
case CELL_GCM_TEXTURE_COMPRESSED_DXT23:
|
||||
{
|
||||
u32 size = ((tex.GetWidth() + 3) / 4) * ((tex.GetHeight() + 3) / 4) * 16;
|
||||
|
||||
|
@ -143,7 +141,7 @@ public:
|
|||
}
|
||||
break;
|
||||
|
||||
case 0x88:
|
||||
case CELL_GCM_TEXTURE_COMPRESSED_DXT45:
|
||||
{
|
||||
u32 size = ((tex.GetWidth() + 3) / 4) * ((tex.GetHeight() + 3) / 4) * 16;
|
||||
|
||||
|
@ -152,7 +150,7 @@ public:
|
|||
}
|
||||
break;
|
||||
|
||||
case 0x94:
|
||||
case CELL_GCM_TEXTURE_X16:
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_RED, GL_SHORT, pixels);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, GL_ONE);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_G, GL_ONE);
|
||||
|
@ -161,12 +159,12 @@ public:
|
|||
checkForGlError("GLTexture::Init() -> glTexImage2D");
|
||||
break;
|
||||
|
||||
case 0x9a:
|
||||
case CELL_GCM_TEXTURE_W16_Z16_Y16_X16_FLOAT:
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.GetWidth(), tex.GetHeight(), 0, GL_BGRA, GL_HALF_FLOAT, pixels);
|
||||
checkForGlError("GLTexture::Init() -> glTexImage2D");
|
||||
break;
|
||||
|
||||
case 0x9e:
|
||||
case CELL_GCM_TEXTURE_D8R8G8B8:
|
||||
{
|
||||
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");
|
||||
|
@ -263,11 +261,11 @@ public:
|
|||
|
||||
switch(tex.GetFormat() & ~(0x20 | 0x40))
|
||||
{
|
||||
case 0x81:
|
||||
case CELL_GCM_TEXTURE_B8:
|
||||
glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, alldata);
|
||||
break;
|
||||
|
||||
case 0x85:
|
||||
case CELL_GCM_TEXTURE_A8R8G8B8:
|
||||
glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV, alldata);
|
||||
break;
|
||||
|
||||
|
|
|
@ -18,6 +18,7 @@ u32 GetAddress(u32 offset, u8 location);
|
|||
class RSXTexture
|
||||
{
|
||||
u8 m_index;
|
||||
|
||||
public:
|
||||
u32 m_pitch;
|
||||
u16 m_depth;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue