diff --git a/ps3/rgl/include/RGL/Utils.h b/ps3/rgl/include/RGL/Utils.h index 02300b6a7e..a41e9c19ea 100644 --- a/ps3/rgl/include/RGL/Utils.h +++ b/ps3/rgl/include/RGL/Utils.h @@ -84,8 +84,7 @@ extern "C" { static inline void *rglGetNamedValue(void *data, unsigned int name ) { - struct rglNameSpace *ns = (struct rglNameSpace*)data; - return ns->data[name - 1]; + return ((struct rglNameSpace*)data)->data[name - 1]; } void rglTexNameSpaceInit(void *data, rglTexNameSpaceCreateFunction create, rglTexNameSpaceDestroyFunction destroy ); diff --git a/ps3/rgl/src/ps3/include/rgl-inline.h b/ps3/rgl/src/ps3/include/rgl-inline.h index da6fd0ff9e..699c2d7579 100644 --- a/ps3/rgl/src/ps3/include/rgl-inline.h +++ b/ps3/rgl/src/ps3/include/rgl-inline.h @@ -288,71 +288,6 @@ static inline void rglGcmFifoGlIncFenceRef (GLuint *ref) *ref = rglGcmFifoPutReference( fifo ); } -static inline void rglGcmFifoGlVertexAttribPointer -( - GLuint index, - GLint size, - rglGcmEnum type, - GLboolean normalized, - GLsizei stride, - GLushort frequency, - GLuint offset - ) -{ - // syntax check - switch ( size ) - { - case 0: // disable - stride = 0; - normalized = 0; - type = RGLGCM_FLOAT; - offset = 0; - break; - case 1: - case 2: - case 3: - case 4: - // valid - break; - default: - break; - } - - // mapping to native types - uint8_t gcmType = 0; - switch ( type ) - { - case RGLGCM_UNSIGNED_BYTE: - if (normalized) - gcmType = CELL_GCM_VERTEX_UB; - else - gcmType = CELL_GCM_VERTEX_UB256; - break; - - case RGLGCM_SHORT: - gcmType = normalized ? CELL_GCM_VERTEX_S1 : CELL_GCM_VERTEX_S32K; - break; - - case RGLGCM_FLOAT: - gcmType = CELL_GCM_VERTEX_F; - break; - - case RGLGCM_HALF_FLOAT: - gcmType = CELL_GCM_VERTEX_SF; - break; - - case RGLGCM_CMP: - size = 1; // required for this format - gcmType = CELL_GCM_VERTEX_CMP; - break; - - default: - break; - } - - GCM_FUNC( cellGcmSetVertexDataArray, index, frequency, stride, size, gcmType, CELL_GCM_LOCATION_LOCAL, offset ); -} - // Look up the memory location of a buffer object (VBO, PBO) static inline GLuint rglGcmGetBufferObjectOrigin (GLuint buffer) { diff --git a/ps3/rgl/src/ps3/rgl_ps3_raster.cpp b/ps3/rgl/src/ps3/rgl_ps3_raster.cpp index b7023f1f5c..ceb3228f6e 100644 --- a/ps3/rgl/src/ps3/rgl_ps3_raster.cpp +++ b/ps3/rgl/src/ps3/rgl_ps3_raster.cpp @@ -2000,7 +2000,7 @@ beginning: rglAttribute* attrib = as->attrib + i; if ( RGLBIT_GET( as->EnabledMask, i ) ) { - const GLsizei stride = attrib->clientStride; + GLsizei stride = attrib->clientStride; const GLuint freq = attrib->frequency; if ( RGL_UNLIKELY( dparams->attribXferSize[i] ) ) @@ -2027,9 +2027,61 @@ beginning: + (( const GLubyte* )attrib->clientData - ( const GLubyte* )NULL ); } - rglGcmFifoGlVertexAttribPointer( i, attrib->clientSize, - ( rglGcmEnum )attrib->clientType, attrib->normalized, - stride, freq, gpuOffset ); + rglGcmEnum type = (rglGcmEnum)attrib->clientType; + GLint size = attrib->clientSize; + + // syntax check + switch ( size ) + { + case 0: // disable + stride = 0; + attrib->normalized = 0; + type = RGLGCM_FLOAT; + gpuOffset = 0; + break; + case 1: + case 2: + case 3: + case 4: + // valid + break; + default: + break; + } + + // mapping to native types + uint8_t gcmType = 0; + switch ( type ) + { + case RGLGCM_UNSIGNED_BYTE: + if (attrib->normalized) + gcmType = CELL_GCM_VERTEX_UB; + else + gcmType = CELL_GCM_VERTEX_UB256; + break; + + case RGLGCM_SHORT: + gcmType = attrib->normalized ? CELL_GCM_VERTEX_S1 : CELL_GCM_VERTEX_S32K; + break; + + case RGLGCM_FLOAT: + gcmType = CELL_GCM_VERTEX_F; + break; + + case RGLGCM_HALF_FLOAT: + gcmType = CELL_GCM_VERTEX_SF; + break; + + case RGLGCM_CMP: + size = 1; // required for this format + gcmType = CELL_GCM_VERTEX_CMP; + break; + + default: + break; + } + + GCM_FUNC( cellGcmSetVertexDataArray, i, freq, stride, size, gcmType, CELL_GCM_LOCATION_LOCAL, gpuOffset ); } else {