detect SM4 and SM5

This commit is contained in:
rdb 2013-02-05 12:08:58 +00:00
parent 554e009070
commit 1b76a13784
3 changed files with 32 additions and 23 deletions

View File

@ -75,14 +75,14 @@ public:
PUBLISHED:
enum ShaderModel
{
enum ShaderModel {
SM_00,
SM_11,
SM_20,
SM_2X,
SM_30,
SM_40,
SM_50,
};
INLINE void release_all();

View File

@ -2352,9 +2352,12 @@ reset() {
_shader_model = SM_30;
break;
case 4:
default:
_shader_model = SM_40;
break;
case 5:
default:
_shader_model = SM_50;
break;
}
_auto_detect_shader_model = _shader_model;
@ -2382,8 +2385,8 @@ reset() {
CGprofile vertex_profile;
CGprofile pixel_profile;
vertex_profile = cgD3D9GetLatestVertexProfile( );
pixel_profile = cgD3D9GetLatestPixelProfile( );
vertex_profile = cgD3D9GetLatestVertexProfile();
pixel_profile = cgD3D9GetLatestPixelProfile();
const char *vertex_profile_str =
cgGetProfileString(vertex_profile);

View File

@ -1714,18 +1714,24 @@ reset() {
report_my_gl_errors();
void gl_set_stencil_functions (StencilRenderStates *stencil_render_states);
gl_set_stencil_functions (_stencil_render_states);
gl_set_stencil_functions(_stencil_render_states);
#if defined(HAVE_CG) && !defined(OPENGLES)
typedef struct
{
typedef struct {
CGprofile cg_profile;
int shader_model;
}
CG_PROFILE_TO_SHADER_MODEL;
} CG_PROFILE_TO_SHADER_MODEL;
static CG_PROFILE_TO_SHADER_MODEL cg_profile_to_shader_model_array[] = {
// gp5fp - OpenGL fragment profile for GeForce 400 Series and up
CG_PROFILE_GP5FP,
SM_50,
// gp4fp - OpenGL fragment profile for G8x (GeForce 8xxx and up)
CG_PROFILE_GP4FP,
SM_40,
static CG_PROFILE_TO_SHADER_MODEL cg_profile_to_shader_model_array [ ] = {
// fp40 - OpenGL fragment profile for NV4x (GeForce 6xxx and 7xxx
// Series, NV4x-based Quadro FX, etc.)
CG_PROFILE_FP40,
@ -1756,9 +1762,9 @@ reset() {
index = 0;
cg_profile_to_shader_model = cg_profile_to_shader_model_array;
while (cg_profile_to_shader_model -> shader_model != SM_00) {
if (cgGLIsProfileSupported(cg_profile_to_shader_model -> cg_profile)) {
_shader_model = cg_profile_to_shader_model -> shader_model;
while (cg_profile_to_shader_model->shader_model != SM_00) {
if (cgGLIsProfileSupported(cg_profile_to_shader_model->cg_profile)) {
_shader_model = cg_profile_to_shader_model->shader_model;
break;
}
cg_profile_to_shader_model++;
@ -1769,12 +1775,12 @@ reset() {
GraphicsPipe *pipe;
DisplayInformation *display_information;
pipe = this -> get_pipe ( );
pipe = this->get_pipe();
if (pipe) {
display_information = pipe -> get_display_information ( );
display_information = pipe->get_display_information ();
if (display_information) {
if (display_information -> get_shader_model ( ) > _shader_model) {
_shader_model = display_information -> get_shader_model ( );
if (display_information->get_shader_model() > _shader_model) {
_shader_model = display_information->get_shader_model();
}
}
}