Тест производительности видеокарты: OGL vs DX11 (2 стр)
Страницы:
1 2 3 4 …
16 Следующая »
DX11 - 200
OGL - 190
ASUS R7 256
Andrey
О, круто. Надо будет посмотреть что там транслятор не так нагенерил. Спасибо.
А на шейдерах, которые я вручную переписал процентная разница большая, более 20%. Дохрена однако.
ronniko
> Автор MSAA 4х или 8х было в тестах включено ?
MSAA выключено. Хотел чисто шейдерный код проверить.
Включи мсаа и поймешь что DX крут.
Сужу по Пукану. В Пукане FPS просел в 2 раза при MSAA 4x
DX пофиг при MSAA 4x просел на 5~7%
Вобщем хоронили DX 11 а он не такой уж и мертвый.
Прирост от DX 12 в играх смешной.
Пукан до DX 11 пока не дотягивается.
Все что дал DX12\Vulkan(пукан чуть удобнее сделал переключение графического пайплайна) это разгрузка CPU и большие текстуры типа 32 768 х 32 768
Вроде как в DX 11 максимум 16 к х 16 к
ronniko
> Включи мсаа и поймешь что DX крут.
Там алгоритм, который используется в этих тестах не ложится на MSAA. Просто так MSAA не включишь. С MSAA потом как-нибудь потестирую, пока - самые примитивные кейсы, никакого буфера глубины, никакого блендинга, никаких мипов/фильтраций, только математика в фрагметных шейдерах.
Ясно.
Просто MSAA это ходовая техника. Как правило многие реализуют у себя MSAA
Если кто-то, обладающий Intel HD 4000 может скомпилировать GLSL шейдера локально, чтобы проверить на ошибки компиляции - буду благодарен.
Тут 3 фрагментных шейдера:
+ Фрагметный1
− Скрыть
#version 430
subroutine void SubroutineType();
struct vec1 {
float x;
};
struct uvec1 {
uint x;
};
struct ivec1 {
int x;
};
uniform sampler2D SrcTex;
in vec4 TexCoord0;
vec4 Input1;
layout(location = 0) out vec4 SV_Target0;
#define Output0 SV_Target0
vec4 Temp[1];
ivec4 Temp_int[1];
uvec4 Temp_uint[1];
void main()
{
Input1 = TexCoord0;
Temp[0] = texture(SrcTex, Input1.xy);
Temp[0].x = uintBitsToFloat((Temp[0].w<intBitsToFloat(0x3F800000)) ? 0xFFFFFFFFu : 0u);
Output0 = uintBitsToFloat(floatBitsToUint(Temp[0]).xxxx & uvec4(2139095040u, 2139095040u, 2139095040u, 2139095040u));
return;
}
− Скрыть
#version 430
subroutine void SubroutineType();
struct vec1 {
float x;
};
struct uvec1 {
uint x;
};
struct ivec1 {
int x;
};
uniform vec2 JumpStep;
uniform float Aspect;
uniform sampler2D SrcDistanceField;
in vec4 TexCoord0;
vec4 Input1;
layout(location = 0) out vec4 SV_Target0;
#define Output0 SV_Target0
vec4 Temp[5];
ivec4 Temp_int[5];
uvec4 Temp_uint[5];
void main()
{
Input1 = TexCoord0;
Temp_int[0] = ivec4(int(0x7F800000), int(0x7F800000), int(0x7F800000), int(0xFFFFFFFF));
while(true){
if ((Temp_int[0].w>= 0x2)) { break; }
Temp[1].x = uintBitsToFloat((Temp_int[0].w>=0x2) ? 0xFFFFFFFFu : 0u);
Temp[1].y = float(Temp_int[0].w);
Temp[2].xyz = intBitsToFloat(Temp_int[0].xyz);
Temp[1].z = intBitsToFloat(int(0xFFFFFFFF));
while(true){
if ((floatBitsToInt(Temp[1]).z>= 0x2)) { break; }
Temp[1].w = uintBitsToFloat((floatBitsToInt(Temp[1]).z>=0x2) ? 0xFFFFFFFFu : 0u);
Temp[1].x = float(floatBitsToInt(Temp[1]).z);
Temp[3].xy = JumpStep.xyxx.xy * Temp[1].xy + Input1.xy;
Temp[3] = texture(SrcDistanceField, Temp[3].xy);
Temp[3].xy = JumpStep.xyxx.xy * Temp[1].xy + Temp[3].xy;
Temp[4].x = Temp[3].x * Aspect;
Temp[4].y = Temp[3].y;
Temp[3].z = dot(Temp[4].xy, Temp[4].xy);
Temp[1].x = uintBitsToFloat((Temp[3].z<Temp[2].z) ? 0xFFFFFFFFu : 0u);
Temp[2].xyz = (floatBitsToInt(Temp[1]).xxxx.x != 0) ? Temp[3].xyz : Temp[2].xyz;
Temp[1].z = intBitsToFloat(floatBitsToInt(Temp[1]).z + 0x1);
}
Temp_int[0].xyz = floatBitsToInt(Temp[2].xyz);
Temp_int[0].w = Temp_int[0].w + 0x1;
}
Output0.xy = intBitsToFloat(Temp_int[0].xy);
Output0.zw = vec2(intBitsToFloat(0x0), intBitsToFloat(0x0));
return;
}
− Скрыть
#version 430
subroutine void SubroutineType();
struct vec1 {
float x;
};
struct uvec1 {
uint x;
};
struct ivec1 {
int x;
};
uniform float Time;
uniform sampler2D SrcTex;
uniform sampler2D SrcDistanceField;
in vec4 TexCoord0;
vec4 Input1;
layout(location = 0) out vec4 SV_Target0;
#define Output0 SV_Target0
vec4 Temp[3];
ivec4 Temp_int[3];
uvec4 Temp_uint[3];
void main()
{
Input1 = TexCoord0;
Temp[0].x = Time * intBitsToFloat(int(0x40800000));
Temp[0].x = cos(Temp[0].x);
Temp[0].x = Temp[0].x * intBitsToFloat(0x3F000000) + Time;
Temp[1].x = (vec2(textureSize(SrcTex, 0x0)).x);
Temp[1].y = (vec2(textureSize(SrcTex, 0x0)).y);
Temp[1].z = (0.0);
Temp[1].w = float(textureQueryLevels(SrcTex));
Temp[2] = texture(SrcDistanceField, Input1.xy);
Temp[0].yz = Temp[1].xy * Temp[2].xy;
Temp[1].xy = Temp[2].xy + Input1.xy;
Temp[1] = texture(SrcTex, Temp[1].xy);
Temp[0].y = dot(Temp[0].yz, Temp[0].yz);
Temp[0].y = sqrt(Temp[0].y);
Temp[0].z = Temp[0].y * intBitsToFloat(int(0x41C80000));
Temp[0].y = uintBitsToFloat((intBitsToFloat(0x0)<Temp[0].y) ? 0xFFFFFFFFu : 0u);
Temp[0].z = inversesqrt(Temp[0].z);
Temp[0].z = float(intBitsToFloat(0x3F800000)) / Temp[0].z;
Temp[0].x = Temp[0].x * intBitsToFloat(int(0x40800000)) + (-Temp[0].z);
Temp[0].x = cos(Temp[0].x);
Temp[0].x = Temp[0].x + intBitsToFloat(0x3F800000);
Temp[0].x = Temp[0].x * intBitsToFloat(0x3F000000);
Temp[0].xzw = Temp[0].xxx * Temp[1].xyz;
Output0.xyz = (floatBitsToInt(Temp[0]).yyyy.x != 0) ? Temp[0].xzw : Temp[1].xyz;
Output0.w = intBitsToFloat(0x3F800000);
return;
}
И один вершинный:
+ Вершинный1
− Скрыть
#version 430
subroutine void SubroutineType();
struct vec1 {
float x;
};
struct uvec1 {
uint x;
};
struct ivec1 {
int x;
};
out gl_PerVertex {
vec4 gl_Position;
float gl_PointSize;
float gl_ClipDistance[];};
uniform vec2 FBOFlip;
in vec4 in_vsCoord0;
vec4 Input0;
#undef Output0
#define Output0 phase0_Output0
vec4 phase0_Output0;
out vec4 TexCoord0;
#define Output1 TexCoord0
vec4 Temp[1];
ivec4 Temp_int[1];
uvec4 Temp_uint[1];
void main()
{
Input0 = in_vsCoord0;
Output0.xy = Input0.xy;
Output0.zw = vec2(intBitsToFloat(0x0), intBitsToFloat(0x3F800000));
Temp[0].xy = Input0.xy * FBOFlip.xyxx.xy;
Temp[0].xy = Temp[0].xy * vec2(intBitsToFloat(0x3F800000), intBitsToFloat(int(0xBF800000))) + vec2(intBitsToFloat(0x3F800000), intBitsToFloat(0x3F800000));
Output1.xy = Temp[0].xy * vec2(intBitsToFloat(0x3F000000), intBitsToFloat(0x3F000000));
gl_Position = vec4(phase0_Output0);
return;
}
GTX 260
HLSLCC:
DX11: 79
OGL: 83
manualGLSL:
DX11: 79
OGL: 91
Хех
romgerman
Воу воу воу. Свершилось чудо! Винда какая? Версия драйверов?
MrShoor
Windows 10 Pro x64
Драйвер: 341.96
MrShoor
> А на шейдерах, которые я вручную переписал процентная разница большая, более 20%.
на Intel HD 4000 Dx11(26) vs OGL(20) = 30%
> #version 430
#version 400
поставь
Intel HD 4000 держит 4.0 и все, вообще Intel HD не более 4.3 пока держит.Может и-за этого, GL_ARB_shader_subroutine поддерживается.
Andrey
> #version 400
> поставь
Но шейдера, которые вручную я переписывал - у тебя работают, а там #version 430
> Может и-за этого, GL_ARB_shader_subroutine поддерживается.
Может. А может быть из-за этого: textureQueryLevels
MrShoor
> Может. А может быть из-за этого: textureQueryLevels
да, GL_ARB_texture_query_levels не поддерживается.
romgerman
Было бы интересно еще Win10 послушать.
MrShoor
DEBUG OpenGL Debug Output:
Source: Shader Compiler
Type: Error
id 0
Severity High
Message: GLSL compile failed for shader 2, "": ERROR: 0:1: '' : syntax error: after #version always only other token are allowed
ERROR: 1:15: 'array without size' : supported in geometry shaders only
ERROR: 1:29: 'Input0' : undeclared identifier
ERROR: 1:29: 'in_vsCoord0' : undeclared identifier
ERROR: 1:30: 'phase0_Output0' : undeclared identifier
ERROR: 1:30: 'xy' : field selection requires structure, vector, or matrix on left hand side
ERROR: 1:30: 'xy' : field selection requires structure, vector, or matrix on left hand side
ERROR: 1:31: 'zw' : field selection requires structure, vector, or matrix on left hand side
ERROR: 1:31: 'assign' : cannot convert from 'const 2-component vector of float' to 'float'
ERROR: 1:32: 'xy' : field selection requires structure, vector, or matrix on left hand side
ERROR: 1:32: 'FBOFlip' : undeclared identifier
ERROR: 1:32: 'xyxx' : field selection requires structure, vector, or matrix on left hand side
ERROR: 1:32: 'xy' : field selection requires structure, vector