From 81f437ee74c9cd7d1f19b81df6a1b95e92219e32 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 19 Nov 2013 04:30:43 +0100 Subject: [PATCH] (RGL PS3) Cleanups --- Makefile.ps3.rgl | 4 +- ps3/rgl/src/cg/nvbiimpl.hpp | 2 - ps3/rgl/src/{ps3 => }/include/GmmAlloc.h | 0 ps3/rgl/src/{ps3 => }/include/rgl-constants.h | 6 -- ps3/rgl/src/{ps3 => }/include/rgl-externs.h | 0 ps3/rgl/src/{ps3 => }/include/rgl-inline.h | 0 ps3/rgl/src/{ps3 => }/include/rgl-typedefs.h | 41 +-------- ps3/rgl/src/rgl_cg.h | 3 - ps3/rgl/src/{ps3 => }/rgl_ps3.cpp | 10 +- ps3/rgl/src/{ps3 => }/rgl_ps3_cg.cpp | 2 +- ps3/rgl/src/{ps3 => }/rgl_ps3_raster.cpp | 92 +++++++------------ ps3/rgl/src/rglp.h | 4 +- 12 files changed, 45 insertions(+), 119 deletions(-) rename ps3/rgl/src/{ps3 => }/include/GmmAlloc.h (100%) rename ps3/rgl/src/{ps3 => }/include/rgl-constants.h (97%) rename ps3/rgl/src/{ps3 => }/include/rgl-externs.h (100%) rename ps3/rgl/src/{ps3 => }/include/rgl-inline.h (100%) rename ps3/rgl/src/{ps3 => }/include/rgl-typedefs.h (92%) rename ps3/rgl/src/{ps3 => }/rgl_ps3.cpp (99%) rename ps3/rgl/src/{ps3 => }/rgl_ps3_cg.cpp (99%) rename ps3/rgl/src/{ps3 => }/rgl_ps3_raster.cpp (95%) diff --git a/Makefile.ps3.rgl b/Makefile.ps3.rgl index 95ff79dd3c..f41c531726 100644 --- a/Makefile.ps3.rgl +++ b/Makefile.ps3.rgl @@ -21,8 +21,8 @@ INCDIRS = -I. -Ips3/rgl/include RGL_DIR = ps3/rgl/src PPU_SRCS = $(RGL_DIR)/libelf/readelf.c \ - $(RGL_DIR)/ps3/rgl_ps3_raster.cpp \ - $(RGL_DIR)/ps3/rgl_ps3.cpp + $(RGL_DIR)/rgl_ps3_raster.cpp \ + $(RGL_DIR)/rgl_ps3.cpp ifeq ($(CELL_BUILD_TOOLS), SNC) diff --git a/ps3/rgl/src/cg/nvbiimpl.hpp b/ps3/rgl/src/cg/nvbiimpl.hpp index 9704e44efa..4c36ed1ddf 100644 --- a/ps3/rgl/src/cg/nvbiimpl.hpp +++ b/ps3/rgl/src/cg/nvbiimpl.hpp @@ -1,9 +1,7 @@ #ifndef CGC_CGBIO_NVBIIMPL_HPP #define CGC_CGBIO_NVBIIMPL_HPP -#include #include -#include #include #include diff --git a/ps3/rgl/src/ps3/include/GmmAlloc.h b/ps3/rgl/src/include/GmmAlloc.h similarity index 100% rename from ps3/rgl/src/ps3/include/GmmAlloc.h rename to ps3/rgl/src/include/GmmAlloc.h diff --git a/ps3/rgl/src/ps3/include/rgl-constants.h b/ps3/rgl/src/include/rgl-constants.h similarity index 97% rename from ps3/rgl/src/ps3/include/rgl-constants.h rename to ps3/rgl/src/include/rgl-constants.h index 9a99abbcef..6a3d08c19f 100644 --- a/ps3/rgl/src/ps3/include/rgl-constants.h +++ b/ps3/rgl/src/include/rgl-constants.h @@ -327,13 +327,7 @@ enum { enum { RGLGCM_SURFACE_POOL_NONE, - RGLGCM_SURFACE_POOL_TILED_COLOR, - RGLGCM_SURFACE_POOL_TILED_DEPTH, RGLGCM_SURFACE_POOL_LINEAR, - RGLGCM_SURFACE_POOL_SYSTEM, // GPU accessible host memory - RGLGCM_SURFACE_POOL_PPU, // generic EA - RGLGCM_SURFACE_POOL_SYSTEM_TILED_COLOR, // tiled color GPU accessible XDR - RGLGCM_SURFACE_POOL_SYSTEM_TILED_DEPTH, // tiled depth GPU accessible XDR }; diff --git a/ps3/rgl/src/ps3/include/rgl-externs.h b/ps3/rgl/src/include/rgl-externs.h similarity index 100% rename from ps3/rgl/src/ps3/include/rgl-externs.h rename to ps3/rgl/src/include/rgl-externs.h diff --git a/ps3/rgl/src/ps3/include/rgl-inline.h b/ps3/rgl/src/include/rgl-inline.h similarity index 100% rename from ps3/rgl/src/ps3/include/rgl-inline.h rename to ps3/rgl/src/include/rgl-inline.h diff --git a/ps3/rgl/src/ps3/include/rgl-typedefs.h b/ps3/rgl/src/include/rgl-typedefs.h similarity index 92% rename from ps3/rgl/src/ps3/include/rgl-typedefs.h rename to ps3/rgl/src/include/rgl-typedefs.h index 5bb0f1eb3f..42027c9aea 100644 --- a/ps3/rgl/src/ps3/include/rgl-typedefs.h +++ b/ps3/rgl/src/include/rgl-typedefs.h @@ -1,7 +1,5 @@ -#include "../../../include/export/RGL/rgl.h" -#include "../../../include/RGL/Types.h" - -using namespace cell::Gcm; +#include "../include/export/RGL/rgl.h" +#include "../include/RGL/Types.h" typedef struct _tagMODESTRUC { @@ -283,8 +281,6 @@ struct rglGcmResource GLuint MemoryClock; GLuint GraphicsClock; - unsigned long long ioifMappings[32]; - char * linearMemory; unsigned int persistentMemorySize; @@ -304,20 +300,7 @@ struct rglGcmResource typedef struct { - GLuint fence; -} -rglGcmFenceObject; - -typedef struct -{ - GLint sema; // NV semaphore index -} -rglGcmEventObject; - - -typedef struct -{ - GLenum pool; // LINEAR, SYSTEM, or NONE + GLenum pool; // LINEAR, or NONE unsigned int bufferId; // allocated Id unsigned int bufferSize; unsigned int pitch; @@ -348,20 +331,6 @@ struct rglGcmRenderTarget CellGcmSurface gcmRenderTarget; }; -// cached state: texture -typedef struct rglGcmTextureState rglGcmTextureState; - -struct rglGcmTextureState -{ - // unforunately to many pieces of state have been put into single - // 32bit registers -- so we need to cache some of them... - GLuint hwTexAddress; - GLuint hwTexFilter; - GLuint hwTexControl0; - //GLuint hwTexCoordCtrl; - -}; - // cached state: viewport typedef struct rglGcmViewportState rglGcmViewportState; struct rglGcmViewportState @@ -398,10 +367,6 @@ struct rglGcmInterpolantState typedef struct rglGcmCachedState rglGcmCachedState; struct rglGcmCachedState { - // our hw<->ogl mapping is ...let's say strange... - //rglGcmTextureState tex[RGLGCM_MAX_TEXIMAGE_COUNT]; - //[RSTENSON] Removing this above. Texturing is all GCM now. - // we need to track blending color, too rglGcmBlendState blend; diff --git a/ps3/rgl/src/rgl_cg.h b/ps3/rgl/src/rgl_cg.h index ab7140fb52..965d9b652a 100644 --- a/ps3/rgl/src/rgl_cg.h +++ b/ps3/rgl/src/rgl_cg.h @@ -22,9 +22,6 @@ #include #include -#include -#include - #include #include #include diff --git a/ps3/rgl/src/ps3/rgl_ps3.cpp b/ps3/rgl/src/rgl_ps3.cpp similarity index 99% rename from ps3/rgl/src/ps3/rgl_ps3.cpp rename to ps3/rgl/src/rgl_ps3.cpp index ae4fb9d7e8..66e91ae3c9 100644 --- a/ps3/rgl/src/ps3/rgl_ps3.cpp +++ b/ps3/rgl/src/rgl_ps3.cpp @@ -17,8 +17,8 @@ #include #include -#include "../rgl.h" -#include "../rglp.h" +#include "rgl.h" +#include "rglp.h" #include @@ -1954,11 +1954,7 @@ static int rglGcmInitRM( rglGcmResource *gcmResource, int inSysMem, unsigned int gcmResource->semaphores = ( rglGcmSemaphoreMemory * )cellGcmGetLabelAddress( 0 ); gcmResource->dmaControl = ( char* ) cellGcmGetControlRegister() - (( char * ) & (( rglGcmControlDma* )0 )->Put - ( char * )0 ); - // the IOIF mapping don't work. work-around here. - for (GLuint i = 0; i < 32; ++i) - gcmResource->ioifMappings[i] = ( unsigned long long )( unsigned long )( gcmResource->localAddress + ( 64 << 20 ) * ( i / 4 ) ); - - cellGcmFinish(gCellGcmCurrentContext, 1); // added just a constant value for now to adjust to the inline libgcm interface change + cellGcmFinish(gCellGcmCurrentContext, 1); gcmResource->hostMemorySize -= dmaPushBufferSize + RGLGCM_DMA_PUSH_BUFFER_PREFETCH_PADDING; gcmResource->dmaPushBuffer = gcmResource->hostMemoryBase + gcmResource->hostMemorySize; diff --git a/ps3/rgl/src/ps3/rgl_ps3_cg.cpp b/ps3/rgl/src/rgl_ps3_cg.cpp similarity index 99% rename from ps3/rgl/src/ps3/rgl_ps3_cg.cpp rename to ps3/rgl/src/rgl_ps3_cg.cpp index 8a4db2767e..f549738b7d 100644 --- a/ps3/rgl/src/ps3/rgl_ps3_cg.cpp +++ b/ps3/rgl/src/rgl_ps3_cg.cpp @@ -15,7 +15,7 @@ * If not, see . */ -#include "../rgl_cg.h" +#include "rgl_cg.h" static CGbool rglpSupportsVertexProgram( CGprofile p ) { diff --git a/ps3/rgl/src/ps3/rgl_ps3_raster.cpp b/ps3/rgl/src/rgl_ps3_raster.cpp similarity index 95% rename from ps3/rgl/src/ps3/rgl_ps3_raster.cpp rename to ps3/rgl/src/rgl_ps3_raster.cpp index 611080f2bc..02bb7d1308 100644 --- a/ps3/rgl/src/ps3/rgl_ps3_raster.cpp +++ b/ps3/rgl/src/rgl_ps3_raster.cpp @@ -15,8 +15,8 @@ * If not, see . */ -#include "../rgl.h" -#include "../rglp.h" +#include "rgl.h" +#include "rglp.h" #include @@ -1990,21 +1990,9 @@ void rglPlatformFreeGcmTexture (void *data) { rglTexture *texture = (rglTexture*)data; rglGcmTexture *gcmTexture = ( rglGcmTexture * )texture->platformTexture; - switch ( gcmTexture->pool ) - { - case RGLGCM_SURFACE_POOL_LINEAR: - gmmFree( gcmTexture->gpuAddressId ); - break; - case RGLGCM_SURFACE_POOL_SYSTEM: - gmmFree( gcmTexture->gpuAddressId ); - break; - case RGLGCM_SURFACE_POOL_TILED_COLOR: - rglGcmFreeTiledSurface( gcmTexture->gpuAddressId ); - break; - case RGLGCM_SURFACE_POOL_NONE: - break; - } + if ( gcmTexture->pool == RGLGCM_SURFACE_POOL_LINEAR) + gmmFree( gcmTexture->gpuAddressId ); gcmTexture->gpuAddressId = GMM_ERROR; gcmTexture->gpuAddressIdOffset = 0; @@ -2036,48 +2024,41 @@ static void rglPlatformValidateTextureResources (void *data) GLuint size = 0; GLuint id = GMM_ERROR; - if (texture->usage == GL_TEXTURE_LINEAR_SYSTEM_SCE || - texture->usage == GL_TEXTURE_SWIZZLED_SYSTEM_SCE) - done = GL_TRUE; - const rglGcmTextureLayout currentLayout = gcmTexture->gpuLayout; const GLuint currentSize = gcmTexture->gpuSize; - if (!done) + rglGcmTextureLayout newLayout; + + // get layout and size compatible with this pool + rglImage *image = texture->image; + + newLayout.levels = 1; + newLayout.faces = 1; + newLayout.baseWidth = image->width; + newLayout.baseHeight = image->height; + newLayout.baseDepth = image->depth; + newLayout.internalFormat = ( rglGcmEnum )image->internalFormat; + newLayout.pixelBits = rglPlatformGetBitsPerPixel( newLayout.internalFormat ); + newLayout.pitch = GET_TEXTURE_PITCH(texture); + + size = rglGetGcmTextureSize( &newLayout ); + + if ( currentSize >= size && newLayout.pitch == currentLayout.pitch ) + gcmTexture->gpuLayout = newLayout; + else { - rglGcmTextureLayout newLayout; + rglPlatformDropTexture( texture ); - // get layout and size compatible with this pool - rglImage *image = texture->image; + // allocate in the specified pool + id = gmmAlloc(size); - newLayout.levels = 1; - newLayout.faces = 1; - newLayout.baseWidth = image->width; - newLayout.baseHeight = image->height; - newLayout.baseDepth = image->depth; - newLayout.internalFormat = ( rglGcmEnum )image->internalFormat; - newLayout.pixelBits = rglPlatformGetBitsPerPixel( newLayout.internalFormat ); - newLayout.pitch = GET_TEXTURE_PITCH(texture); + // set new + gcmTexture->pool = RGLGCM_SURFACE_POOL_LINEAR; + gcmTexture->gpuAddressId = id; + gcmTexture->gpuAddressIdOffset = 0; + gcmTexture->gpuSize = size; + gcmTexture->gpuLayout = newLayout; - size = rglGetGcmTextureSize( &newLayout ); - - if ( currentSize >= size && newLayout.pitch == currentLayout.pitch ) - gcmTexture->gpuLayout = newLayout; - else - { - rglPlatformDropTexture( texture ); - - // allocate in the specified pool - id = gmmAlloc(size); - - // set new - gcmTexture->pool = RGLGCM_SURFACE_POOL_LINEAR; - gcmTexture->gpuAddressId = id; - gcmTexture->gpuAddressIdOffset = 0; - gcmTexture->gpuSize = size; - gcmTexture->gpuLayout = newLayout; - - } } rglTextureTouchFBOs( texture ); @@ -2116,9 +2097,6 @@ source: RGLGCM_SURFACE_SOURCE_TEXTURE, // use a bounce buffer to transfer to GPU GLuint bounceBufferId = GMM_ERROR; - // check if upload is needed for this image - rglImage *image = texture->image; - if ( image->dataState == RGL_IMAGE_DATASTATE_HOST ) { // lazy allocation of bounce buffer @@ -2211,9 +2189,9 @@ source: RGLGCM_SURFACE_SOURCE_TEXTURE, // set the SET_TEXTURE_CONTROL0 params platformTexture->gcmMethods.control0.maxAniso = CELL_GCM_TEXTURE_MAX_ANISO_1; const GLfloat minLOD = MAX( texture->minLod, 0); - const GLfloat maxLOD = MIN( texture->maxLod, texture->maxLevel ); + const GLfloat maxLOD = MIN( texture->maxLod, 0 ); platformTexture->gcmMethods.control0.minLOD = ( GLuint )( MAX( minLOD, 0 ) * 256.0f ); - platformTexture->gcmMethods.control0.maxLOD = ( GLuint )( MIN( maxLOD, layout->levels ) * 256.0f ); + platformTexture->gcmMethods.control0.maxLOD = ( GLuint )( MIN( maxLOD, 1 ) * 256.0f ); // ----------------------------------------------------------------------- // set the SET_TEXTURE_ADDRESS method params. @@ -2467,7 +2445,7 @@ source: RGLGCM_SURFACE_SOURCE_TEXTURE, platformTexture->gcmTexture.height = layout->baseHeight; platformTexture->gcmTexture.depth = layout->baseDepth; platformTexture->gcmTexture.pitch = layout->pitch; - platformTexture->gcmTexture.mipmap = layout->levels; + platformTexture->gcmTexture.mipmap = 1; platformTexture->gcmTexture.cubemap = CELL_GCM_FALSE; platformTexture->gcmTexture.dimension = CELL_GCM_TEXTURE_DIMENSION_2; platformTexture->gcmTexture.location = CELL_GCM_LOCATION_LOCAL; diff --git a/ps3/rgl/src/rglp.h b/ps3/rgl/src/rglp.h index 7fbbe674a3..bb2e1b5198 100644 --- a/ps3/rgl/src/rglp.h +++ b/ps3/rgl/src/rglp.h @@ -18,9 +18,7 @@ #ifndef _RGLP_H_ #define _RGLP_H_ -#if defined(__CELLOS_LV2__) -#include "ps3/include/rgl-constants.h" -#endif +#include "include/rgl-constants.h" extern GLboolean rglpCreateBufferObject (void *data);