Merge pull request #310 from raven02/patch-8

enum for vertex data type/antialias & cellSpurs error code fixes
This commit is contained in:
Alexandro Sánchez Bach 2014-06-04 21:57:17 +02:00
commit a61c4f6bb0
4 changed files with 739 additions and 154 deletions

View File

@ -22,10 +22,27 @@ enum
CELL_GCM_DISPLAY_FREQUENCY_DISABLE = 3,
};
enum
{
CELL_GCM_VERTEX_S1 = 1,
CELL_GCM_VERTEX_F = 2,
CELL_GCM_VERTEX_S = 3,
CELL_GCM_VERTEX_UB = 4,
CELL_GCM_VERTEX_S32K = 5,
CELL_GCM_VERTEX_CMP = 6,
CELL_GCM_VERTEX_UB256 = 7,
};
enum
{
CELL_GCM_DRAW_INDEX_ARRAY_TYPE_32 = 0,
CELL_GCM_DRAW_INDEX_ARRAY_TYPE_16 = 1,
};
// GCM Texture
enum
{
// Format
// Color Flag
CELL_GCM_TEXTURE_B8 = 0x81,
CELL_GCM_TEXTURE_A1R5G5B5 = 0x82,
CELL_GCM_TEXTURE_A4R4G4B4 = 0x83,
@ -54,9 +71,11 @@ enum
CELL_GCM_TEXTURE_COMPRESSED_B8R8_G8R8 = 0xAD,
CELL_GCM_TEXTURE_COMPRESSED_R8B8_R8G8 = 0xAE,
// Format flags
// Swizzle Flag
CELL_GCM_TEXTURE_SZ = 0x00,
CELL_GCM_TEXTURE_LN = 0x20,
// Normalization Flag
CELL_GCM_TEXTURE_NR = 0x00,
CELL_GCM_TEXTURE_UN = 0x40,
};
@ -75,6 +94,12 @@ enum
// Depth
CELL_GCM_SURFACE_Z16 = 1,
CELL_GCM_SURFACE_Z24S8 = 2,
// Antialias
CELL_GCM_SURFACE_CENTER_1 = 2,
CELL_GCM_SURFACE_DIAGONAL_CENTERED_2 = 3,
CELL_GCM_SURFACE_SQUARE_CENTERED_4 = 4,
CELL_GCM_SURFACE_SQUARE_ROTATED_4 = 5,
};
// GCM Reports

View File

@ -172,7 +172,7 @@ void GLGSRender::EnableVertexData(bool indexed_draw)
dump.Write(wxString::Format("VertexData[%d]:\n", i));
switch(m_vertex_data[i].type)
{
case 1:
case CELL_GCM_VERTEX_S1:
for(u32 j = 0; j<m_vertex_data[i].data.size(); j+=2)
{
dump.Write(wxString::Format("%d\n", *(u16*)&m_vertex_data[i].data[j]));
@ -180,7 +180,7 @@ void GLGSRender::EnableVertexData(bool indexed_draw)
}
break;
case 2:
case CELL_GCM_VERTEX_F:
for(u32 j = 0; j<m_vertex_data[i].data.size(); j+=4)
{
dump.Write(wxString::Format("%.01f\n", *(float*)&m_vertex_data[i].data[j]));
@ -188,7 +188,7 @@ void GLGSRender::EnableVertexData(bool indexed_draw)
}
break;
case 3:
case CELL_GCM_VERTEX_SF:
for(u32 j = 0; j<m_vertex_data[i].data.size(); j+=2)
{
dump.Write(wxString::Format("%.01f\n", *(float*)&m_vertex_data[i].data[j]));
@ -196,7 +196,7 @@ void GLGSRender::EnableVertexData(bool indexed_draw)
}
break;
case 4:
case CELL_GCM_VERTEX_UB:
for(u32 j = 0; j<m_vertex_data[i].data.size(); ++j)
{
dump.Write(wxString::Format("%d\n", m_vertex_data[i].data[j]));
@ -204,15 +204,17 @@ void GLGSRender::EnableVertexData(bool indexed_draw)
}
break;
case 5:
case CELL_GCM_VERTEX_S32K:
for(u32 j = 0; j<m_vertex_data[i].data.size(); j+=2)
{
dump.Write(wxString::Format("%d\n", *(u16*)&m_vertex_data[i].data[j]));
if(!(((j+2) / 2) % m_vertex_data[i].size)) dump.Write("\n");
}
break;
case 7:
// case CELL_GCM_VERTEX_CMP:
case CELL_GCM_VERTEX_UB256:
for(u32 j = 0; j<m_vertex_data[i].data.size(); ++j)
{
dump.Write(wxString::Format("%d\n", m_vertex_data[i].data[j]));
@ -254,8 +256,8 @@ void GLGSRender::EnableVertexData(bool indexed_draw)
{
switch(m_vertex_data[i].type)
{
case 5:
case 1:
case CELL_GCM_VERTEX_S32K:
case CELL_GCM_VERTEX_S1:
switch(m_vertex_data[i].size)
{
case 1: glVertexAttrib1s(i, (GLshort&)m_vertex_data[i].data[0]); break;
@ -265,7 +267,7 @@ void GLGSRender::EnableVertexData(bool indexed_draw)
}
break;
case 2:
case CELL_GCM_VERTEX_F:
switch(m_vertex_data[i].size)
{
case 1: glVertexAttrib1f(i, (GLfloat&)m_vertex_data[i].data[0]); break;
@ -275,8 +277,8 @@ void GLGSRender::EnableVertexData(bool indexed_draw)
}
break;
case 6:
case 4:
case CELL_GCM_VERTEX_CMP:
case CELL_GCM_VERTEX_UB:
glVertexAttrib4ubv(i, (GLubyte*)&m_vertex_data[i].data[0]);
break;
}
@ -1129,12 +1131,12 @@ void GLGSRender::ExecCMD()
{
switch(m_indexed_array.m_type)
{
case 0:
case CELL_GCM_DRAW_INDEX_ARRAY_TYPE_32:
glDrawElements(m_draw_mode - 1, m_indexed_array.m_count, GL_UNSIGNED_INT, nullptr);
checkForGlError("glDrawElements #4");
break;
case 1:
case CELL_GCM_DRAW_INDEX_ARRAY_TYPE_16:
glDrawElements(m_draw_mode - 1, m_indexed_array.m_count, GL_UNSIGNED_SHORT, nullptr);
checkForGlError("glDrawElements #2");
break;

View File

@ -649,9 +649,9 @@ int cellRescGcmSurface2RescSrc(mem_ptr_t<CellGcmSurface> gcmSurface, mem_ptr_t<C
s32 xW = 1, xH = 1;
switch(gcmSurface->antialias)
{
case 5: xW=xH=2; break; //case CELL_GCM_SURFACE_SQUARE_ROTATED_4:
case 4: xW=xH=2; break; //case CELL_GCM_SURFACE_SQUARE_CENTERED_4:
case 3: xW=2; break; //case CELL_GCM_SURFACE_DIAGONAL_CENTERED_2:
case CELL_GCM_SURFACE_SQUARE_ROTATED_4: xW=xH=2; break;
case CELL_GCM_SURFACE_SQUARE_CENTERED_4: xW=xH=2; break;
case CELL_GCM_SURFACE_DIAGONAL_CENTERED_2: xW=2; break;
default: break;
}

File diff suppressed because it is too large Load Diff