(RGL PS3) No more GCM_FUNC calls inside rgl_ps3_raster.cpp

This commit is contained in:
twinaphex 2013-11-17 16:23:48 +01:00
parent edb4ec6509
commit 2ee221e7c6
2 changed files with 46 additions and 6 deletions

View File

@ -23,6 +23,43 @@ static inline GLuint rglPlatformGetBitsPerPixel (GLenum internalFormat)
}
}
static inline void rglGcmSetVertexProgramParameterBlock(struct CellGcmContextData *thisContext, uint32_t baseConst,
uint32_t constCount, const float * __restrict value)
{
uint32_t blockCount, blockRemain, i;
blockCount = (constCount * 4) >> 5;
blockRemain = (constCount * 4) & 0x1f;
for (i=0; i < blockCount; i++)
{
uint32_t loadAt = baseConst + i * 8;
thisContext->current[0] = (((33) << (18)) | ((0x00001efc)));
thisContext->current[1] = (loadAt);
memcpy(&thisContext->current[2], value, 16 * sizeof(float));
memcpy(&thisContext->current[18], &value[16], 16 * sizeof(float));
thisContext->current += 34;
value += 32;
}
if(blockRemain)
{
thisContext->current[0] = (((blockRemain+1) << (18)) | ((0x00001efc)));
thisContext->current[1] = (baseConst + blockCount * 8);
thisContext->current += 2;
blockRemain >>= 2;
for (i=0; i < blockRemain; ++i)
{
memcpy(thisContext->current, value, 4 * sizeof(float));
thisContext->current += 4;
value += 4;
}
}
}
#define SUBPIXEL_BITS 12
#define SUBPIXEL_ADJUST (0.5/(1<<SUBPIXEL_BITS))
@ -150,6 +187,10 @@ static inline GLuint rglPlatformGetBitsPerPixel (GLenum internalFormat)
(thisContext->current)[1] = (control1); \
(thisContext->current) += 2;
#define rglGcmSetJumpCommand(thisContext, offset) \
thisContext->current[0] = ((offset) | (0x20000000)); \
thisContext->current += 1
#define rglGcmSetBlendEnable(thisContext, enable) \
{ \
bool continue_func = true; \

View File

@ -562,7 +562,7 @@ void rglCreatePushBuffer(void *data)
memset( rglGcmCurrent, 0, 4*( 4*registerCount + 3 ) );
CellGcmContextData gcmContext;
gcmContext.current = (uint32_t*)rglGcmCurrent;
cellGcmSetVertexProgramParameterBlockUnsafeInline(&gcmContext, parameterResource->resource, registerCount, ( float* )rglGcmCurrent );
rglGcmSetVertexProgramParameterBlock(&gcmContext, parameterResource->resource, registerCount, ( float* )rglGcmCurrent );
rglGcmCurrent = (typeof(rglGcmCurrent))gcmContext.current;
rtParameter->pushBufferPointer = rglGcmCurrent - 4 * registerCount;
@ -579,7 +579,7 @@ void rglCreatePushBuffer(void *data)
memset( rglGcmCurrent, 0, 4*( 4*registerStride + 3 ) );
CellGcmContextData gcmContext;
gcmContext.current = (uint32_t*)rglGcmCurrent;
cellGcmSetVertexProgramParameterBlockUnsafeInline(&gcmContext, program->resources[resourceIndex], registerStride, ( float* )rglGcmCurrent );
rglGcmSetVertexProgramParameterBlock(&gcmContext, program->resources[resourceIndex], registerStride, ( float* )rglGcmCurrent );
rglGcmCurrent = (typeof(rglGcmCurrent))gcmContext.current;
*( programPushBuffer++ ) = ( unsigned int* )( rglGcmCurrent - 4 * registerStride );
}
@ -1379,7 +1379,6 @@ GLAPI void APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count)
rglGcmSetTextureBorder(thisContext, unit, texture, 0x1);
CellGcmContextData *gcm_context = (CellGcmContextData*)&rglGcmState_i.fifo;
cellGcmReserveMethodSizeInline(gcm_context, 11);
uint32_t *current = gcm_context->current;
current[0] = CELL_GCM_METHOD_HEADER_TEXTURE_OFFSET(unit, 8);
current[1] = CELL_GCM_METHOD_DATA_TEXTURE_OFFSET(platformTexture->gcmTexture.offset);
@ -1517,7 +1516,7 @@ GLAPI void APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count)
case CG_FIXED2:
case CG_FIXED3:
case CG_FIXED4:
GCM_FUNC( cellGcmSetVertexProgramParameterBlock, parameterResource->resource, 1, value ); // GCM_PORT_TESTED [Cedric]
rglGcmSetVertexProgramParameterBlock(gCellGcmCurrentContext, parameterResource->resource, 1, value );
break;
case CG_FLOAT4x4:
case CG_HALF4x4:
@ -1543,7 +1542,7 @@ GLAPI void APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count)
v2[13] = value[7];
v2[14] = value[11];
v2[15] = value[15];
GCM_FUNC( cellGcmSetVertexProgramParameterBlock, parameterResource->resource, 4, v2 ); // GCM_PORT_TESTED [Cedric]
rglGcmSetVertexProgramParameterBlock(gCellGcmCurrentContext, parameterResource->resource, 4, v2 );
}
break;
case CG_FLOAT3x3:
@ -1566,7 +1565,7 @@ GLAPI void APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count)
v2[9] = value[5];
v2[10] = value[8];
v2[11] = 0;
GCM_FUNC( cellGcmSetVertexProgramParameterBlock, parameterResource->resource, 3, v2 );
rglGcmSetVertexProgramParameterBlock(gCellGcmCurrentContext, parameterResource->resource, 3, v2 );
}
break;
}