mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-02-10 14:39:01 +01:00
Shader generators: Remove any references to D3D9 and cleanup the affected code.
This commit is contained in:
parent
0e2e71e483
commit
61ed40749f
@ -271,20 +271,15 @@ static inline void GeneratePixelShader(T& out, DSTALPHA_MODE dstAlphaMode, API_T
|
|||||||
for (int i = 0; i < 8; ++i)
|
for (int i = 0; i < 8; ++i)
|
||||||
out.Write("uniform sampler2D samp%d;\n", i);
|
out.Write("uniform sampler2D samp%d;\n", i);
|
||||||
}
|
}
|
||||||
else
|
else // D3D
|
||||||
{
|
{
|
||||||
// Declare samplers
|
// Declare samplers
|
||||||
for (int i = 0; i < 8; ++i)
|
for (int i = 0; i < 8; ++i)
|
||||||
out.Write("%s samp%d : register(s%d);\n", (ApiType == API_D3D11) ? "sampler" : "uniform sampler2D", i, i);
|
out.Write("sampler samp%d : register(s%d);\n", i, i);
|
||||||
|
|
||||||
if (ApiType == API_D3D11)
|
out.Write("\n");
|
||||||
{
|
for (int i = 0; i < 8; ++i)
|
||||||
out.Write("\n");
|
out.Write("Texture2D Tex%d : register(t%d);\n", i, i);
|
||||||
for (int i = 0; i < 8; ++i)
|
|
||||||
{
|
|
||||||
out.Write("Texture2D Tex%d : register(t%d);\n", i, i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
out.Write("\n");
|
out.Write("\n");
|
||||||
|
|
||||||
@ -367,7 +362,7 @@ static inline void GeneratePixelShader(T& out, DSTALPHA_MODE dstAlphaMode, API_T
|
|||||||
|
|
||||||
out.Write("void main()\n{\n");
|
out.Write("void main()\n{\n");
|
||||||
}
|
}
|
||||||
else
|
else // D3D
|
||||||
{
|
{
|
||||||
if (forced_early_z)
|
if (forced_early_z)
|
||||||
{
|
{
|
||||||
@ -382,22 +377,12 @@ static inline void GeneratePixelShader(T& out, DSTALPHA_MODE dstAlphaMode, API_T
|
|||||||
}
|
}
|
||||||
|
|
||||||
out.Write("void main(\n");
|
out.Write("void main(\n");
|
||||||
if(ApiType != API_D3D11)
|
out.Write(" out float4 ocol0 : SV_Target0,%s%s\n in float4 rawpos : SV_Position,\n",
|
||||||
{
|
dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND ? "\n out float4 ocol1 : SV_Target1," : "",
|
||||||
out.Write(" out float4 ocol0 : COLOR0,%s%s\n in float4 rawpos : %s,\n",
|
per_pixel_depth ? "\n out float depth : SV_Depth," : "");
|
||||||
dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND ? "\n out float4 ocol1 : COLOR1," : "",
|
|
||||||
per_pixel_depth ? "\n out float depth : DEPTH," : "",
|
|
||||||
ApiType & API_D3D9_SM20 ? "POSITION" : "VPOS");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
out.Write(" out float4 ocol0 : SV_Target0,%s%s\n in float4 rawpos : SV_Position,\n",
|
|
||||||
dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND ? "\n out float4 ocol1 : SV_Target1," : "",
|
|
||||||
per_pixel_depth ? "\n out float depth : SV_Depth," : "");
|
|
||||||
}
|
|
||||||
|
|
||||||
// "centroid" attribute is only supported by D3D11
|
// Use centroid sampling to make MSAA work properly
|
||||||
const char* optCentroid = (ApiType == API_D3D11 ? "centroid" : "");
|
const char* optCentroid = "centroid";
|
||||||
|
|
||||||
out.Write(" in %s float4 colors_0 : COLOR0,\n", optCentroid);
|
out.Write(" in %s float4 colors_0 : COLOR0,\n", optCentroid);
|
||||||
out.Write(" in %s float4 colors_1 : COLOR1", optCentroid);
|
out.Write(" in %s float4 colors_1 : COLOR1", optCentroid);
|
||||||
@ -623,10 +608,11 @@ static inline void GeneratePixelShader(T& out, DSTALPHA_MODE dstAlphaMode, API_T
|
|||||||
WriteAlphaTest<T>(out, uid_data, ApiType, dstAlphaMode, per_pixel_depth);
|
WriteAlphaTest<T>(out, uid_data, ApiType, dstAlphaMode, per_pixel_depth);
|
||||||
|
|
||||||
|
|
||||||
|
// TODO: Make more sense out of this comment
|
||||||
// D3D9 doesn't support readback of depth in pixel shader, so we always have to calculate it again.
|
// D3D9 doesn't support readback of depth in pixel shader, so we always have to calculate it again.
|
||||||
// This shouldn't be a performance issue as the written depth is usually still from perspective division
|
// This shouldn't be a performance issue as the written depth is usually still from perspective division
|
||||||
// but this isn't true for z-textures, so there will be depth issues between enabled and disabled z-textures fragments
|
// but this isn't true for z-textures, so there will be depth issues between enabled and disabled z-textures fragments
|
||||||
if ((ApiType == API_OPENGL || ApiType == API_D3D11) && g_ActiveConfig.bFastDepthCalc)
|
if (g_ActiveConfig.bFastDepthCalc)
|
||||||
out.Write("float zCoord = rawpos.z;\n");
|
out.Write("float zCoord = rawpos.z;\n");
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -682,18 +668,10 @@ static inline void GeneratePixelShader(T& out, DSTALPHA_MODE dstAlphaMode, API_T
|
|||||||
if (dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND)
|
if (dstAlphaMode == DSTALPHA_DUAL_SOURCE_BLEND)
|
||||||
{
|
{
|
||||||
out.SetConstantsUsed(C_ALPHA, C_ALPHA);
|
out.SetConstantsUsed(C_ALPHA, C_ALPHA);
|
||||||
if(ApiType & API_D3D9)
|
|
||||||
{
|
// Colors will be blended against the alpha from ocol1 and
|
||||||
// alpha component must be 0 or the shader will not compile (Direct3D 9Ex restriction)
|
// the alpha from ocol0 will be written to the framebuffer.
|
||||||
// Colors will be blended against the color from ocol1 in D3D 9...
|
out.Write("\tocol1 = prev;\n");
|
||||||
out.Write("\tocol1 = float4(prev.a, prev.a, prev.a, 0.0);\n");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Colors will be blended against the alpha from ocol1...
|
|
||||||
out.Write("\tocol1 = prev;\n");
|
|
||||||
}
|
|
||||||
// ...and the alpha from ocol0 will be written to the framebuffer.
|
|
||||||
out.Write("\tocol0.a = " I_ALPHA"[0].a;\n");
|
out.Write("\tocol0.a = " I_ALPHA"[0].a;\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1127,10 +1105,10 @@ void SampleTexture(T& out, const char *texcoords, const char *texswap, int texma
|
|||||||
{
|
{
|
||||||
out.SetConstantsUsed(C_TEXDIMS+texmap,C_TEXDIMS+texmap);
|
out.SetConstantsUsed(C_TEXDIMS+texmap,C_TEXDIMS+texmap);
|
||||||
|
|
||||||
if (ApiType == API_D3D11)
|
if (ApiType == API_D3D)
|
||||||
out.Write("Tex%d.Sample(samp%d,%s.xy * " I_TEXDIMS"[%d].xy).%s;\n", texmap,texmap, texcoords, texmap, texswap);
|
out.Write("Tex%d.Sample(samp%d,%s.xy * " I_TEXDIMS"[%d].xy).%s;\n", texmap,texmap, texcoords, texmap, texswap);
|
||||||
else
|
else // OGL
|
||||||
out.Write("%s(samp%d,%s.xy * " I_TEXDIMS"[%d].xy).%s;\n", ApiType == API_OPENGL ? "texture" : "tex2D", texmap, texcoords, texmap, texswap);
|
out.Write("texture(samp%d,%s.xy * " I_TEXDIMS"[%d].xy).%s;\n", texmap, texcoords, texmap, texswap);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *tevAlphaFuncsTable[] =
|
static const char *tevAlphaFuncsTable[] =
|
||||||
@ -1198,14 +1176,14 @@ static inline void WriteAlphaTest(T& out, pixel_shader_uid_data& uid_data, API_T
|
|||||||
// It seems to be less buggy than not to update the depth buffer if alpha test fails,
|
// It seems to be less buggy than not to update the depth buffer if alpha test fails,
|
||||||
// but both ways wouldn't be accurate.
|
// but both ways wouldn't be accurate.
|
||||||
|
|
||||||
// OpenGL 4.2 has a flag which allows the driver to still update the depth buffer
|
// OpenGL 4.2 has a flag which allows the driver to still update the depth buffer
|
||||||
// if alpha test fails. The driver doesn't have to, but I assume they all do because
|
// if alpha test fails. The driver doesn't have to, but I assume they all do because
|
||||||
// it's the much faster code path for the GPU.
|
// it's the much faster code path for the GPU.
|
||||||
uid_data.alpha_test_use_zcomploc_hack = bpmem.UseEarlyDepthTest() && bpmem.zmode.updateenable && !g_ActiveConfig.backend_info.bSupportsEarlyZ;
|
uid_data.alpha_test_use_zcomploc_hack = bpmem.UseEarlyDepthTest() && bpmem.zmode.updateenable && !g_ActiveConfig.backend_info.bSupportsEarlyZ;
|
||||||
if (!uid_data.alpha_test_use_zcomploc_hack)
|
if (!uid_data.alpha_test_use_zcomploc_hack)
|
||||||
{
|
{
|
||||||
out.Write("\t\tdiscard;\n");
|
out.Write("\t\tdiscard;\n");
|
||||||
if (ApiType != API_D3D11)
|
if (ApiType != API_D3D)
|
||||||
out.Write("\t\treturn;\n");
|
out.Write("\t\treturn;\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -83,38 +83,22 @@ void WriteSwizzler(char*& p, u32 format, API_TYPE ApiType)
|
|||||||
{
|
{
|
||||||
WRITE(p, "#define samp0 samp9\n");
|
WRITE(p, "#define samp0 samp9\n");
|
||||||
WRITE(p, "uniform sampler2DRect samp0;\n");
|
WRITE(p, "uniform sampler2DRect samp0;\n");
|
||||||
}
|
|
||||||
else if (ApiType & API_D3D9)
|
|
||||||
{
|
|
||||||
WRITE(p,"uniform sampler samp0 : register(s0);\n");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
WRITE(p,"sampler samp0 : register(s0);\n");
|
|
||||||
WRITE(p, "Texture2D Tex0 : register(t0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ApiType == API_OPENGL)
|
|
||||||
{
|
|
||||||
WRITE(p, " out vec4 ocol0;\n");
|
WRITE(p, " out vec4 ocol0;\n");
|
||||||
WRITE(p, " VARYIN float2 uv0;\n");
|
WRITE(p, " VARYIN float2 uv0;\n");
|
||||||
WRITE(p, "void main()\n");
|
WRITE(p, "void main()\n");
|
||||||
}
|
}
|
||||||
else
|
else // D3D
|
||||||
{
|
{
|
||||||
|
WRITE(p,"sampler samp0 : register(s0);\n");
|
||||||
|
WRITE(p, "Texture2D Tex0 : register(t0);\n");
|
||||||
|
|
||||||
WRITE(p,"void main(\n");
|
WRITE(p,"void main(\n");
|
||||||
if (ApiType != API_D3D11)
|
WRITE(p," out float4 ocol0 : SV_Target,\n");
|
||||||
{
|
|
||||||
WRITE(p," out float4 ocol0 : COLOR0,\n");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
WRITE(p," out float4 ocol0 : SV_Target,\n");
|
|
||||||
}
|
|
||||||
WRITE(p," in float2 uv0 : TEXCOORD0)\n");
|
WRITE(p," in float2 uv0 : TEXCOORD0)\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE(p, "{\n"
|
WRITE(p, "{\n"
|
||||||
" float2 sampleUv;\n"
|
" float2 sampleUv;\n"
|
||||||
" float2 uv1 = floor(uv0);\n");
|
" float2 uv1 = floor(uv0);\n");
|
||||||
|
|
||||||
@ -142,15 +126,15 @@ void WriteSwizzler(char*& p, u32 format, API_TYPE ApiType)
|
|||||||
|
|
||||||
if (ApiType != API_OPENGL)
|
if (ApiType != API_OPENGL)
|
||||||
{
|
{
|
||||||
WRITE(p, " sampleUv = sampleUv + float2(0.0,1.0);\n");// still to determine the reason for this
|
WRITE(p, " sampleUv = sampleUv + float2(0.0,1.0);\n"); // still need to determine the reason for this
|
||||||
WRITE(p, " sampleUv = sampleUv / " I_COLORS"[0].zw;\n");
|
WRITE(p, " sampleUv = sampleUv / " I_COLORS"[0].zw;\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// block dimensions : widthStride, heightStride
|
// block dimensions : widthStride, heightStride
|
||||||
// texture dims : width, height, x offset, y offset
|
// texture dims : width, height, x offset, y offset
|
||||||
void Write32BitSwizzler(char*& p, u32 format, API_TYPE ApiType)
|
void Write32BitSwizzler(char*& p, u32 format, API_TYPE ApiType)
|
||||||
{
|
{
|
||||||
// [0] left, top, right, bottom of source rectangle within source texture
|
// [0] left, top, right, bottom of source rectangle within source texture
|
||||||
// [1] width and height of destination texture in pixels
|
// [1] width and height of destination texture in pixels
|
||||||
// Two were merged for GLSL
|
// Two were merged for GLSL
|
||||||
@ -164,39 +148,23 @@ void Write32BitSwizzler(char*& p, u32 format, API_TYPE ApiType)
|
|||||||
{
|
{
|
||||||
WRITE(p, "#define samp0 samp9\n");
|
WRITE(p, "#define samp0 samp9\n");
|
||||||
WRITE(p, "uniform sampler2DRect samp0;\n");
|
WRITE(p, "uniform sampler2DRect samp0;\n");
|
||||||
}
|
|
||||||
else if (ApiType & API_D3D9)
|
|
||||||
{
|
|
||||||
WRITE(p,"uniform sampler samp0 : register(s0);\n");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
WRITE(p,"sampler samp0 : register(s0);\n");
|
|
||||||
WRITE(p, "Texture2D Tex0 : register(t0);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ApiType == API_OPENGL)
|
|
||||||
{
|
|
||||||
WRITE(p, " out float4 ocol0;\n");
|
WRITE(p, " out float4 ocol0;\n");
|
||||||
WRITE(p, " VARYIN float2 uv0;\n");
|
WRITE(p, " VARYIN float2 uv0;\n");
|
||||||
WRITE(p, "void main()\n");
|
WRITE(p, "void main()\n");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
WRITE(p,"sampler samp0 : register(s0);\n");
|
||||||
|
WRITE(p, "Texture2D Tex0 : register(t0);\n");
|
||||||
|
|
||||||
WRITE(p,"void main(\n");
|
WRITE(p,"void main(\n");
|
||||||
if(ApiType != API_D3D11)
|
WRITE(p," out float4 ocol0 : SV_Target,\n");
|
||||||
{
|
|
||||||
WRITE(p," out float4 ocol0 : COLOR0,\n");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
WRITE(p," out float4 ocol0 : SV_Target,\n");
|
|
||||||
}
|
|
||||||
WRITE(p," in float2 uv0 : TEXCOORD0)\n");
|
WRITE(p," in float2 uv0 : TEXCOORD0)\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
WRITE(p, "{\n"
|
WRITE(p, "{\n"
|
||||||
" float2 sampleUv;\n"
|
" float2 sampleUv;\n"
|
||||||
" float2 uv1 = floor(uv0);\n");
|
" float2 uv1 = floor(uv0);\n");
|
||||||
|
|
||||||
@ -232,18 +200,16 @@ void Write32BitSwizzler(char*& p, u32 format, API_TYPE ApiType)
|
|||||||
void WriteSampleColor(char*& p, const char* colorComp, const char* dest, API_TYPE ApiType)
|
void WriteSampleColor(char*& p, const char* colorComp, const char* dest, API_TYPE ApiType)
|
||||||
{
|
{
|
||||||
const char* texSampleOpName;
|
const char* texSampleOpName;
|
||||||
if (ApiType & API_D3D9)
|
if (ApiType == API_D3D)
|
||||||
texSampleOpName = "tex2D";
|
|
||||||
else if (ApiType == API_D3D11)
|
|
||||||
texSampleOpName = "tex0.Sample";
|
texSampleOpName = "tex0.Sample";
|
||||||
else
|
else // OGL
|
||||||
texSampleOpName = "texture2DRect";
|
texSampleOpName = "texture2DRect";
|
||||||
|
|
||||||
// the increment of sampleUv.x is delayed, so we perform it here. see WriteIncrementSampleX.
|
// the increment of sampleUv.x is delayed, so we perform it here. see WriteIncrementSampleX.
|
||||||
const char* texSampleIncrementUnit;
|
const char* texSampleIncrementUnit;
|
||||||
if (ApiType != API_OPENGL)
|
if (ApiType == API_D3D)
|
||||||
texSampleIncrementUnit = I_COLORS"[0].x / " I_COLORS"[0].z";
|
texSampleIncrementUnit = I_COLORS"[0].x / " I_COLORS"[0].z";
|
||||||
else
|
else // OGL
|
||||||
texSampleIncrementUnit = I_COLORS"[0].x";
|
texSampleIncrementUnit = I_COLORS"[0].x";
|
||||||
|
|
||||||
WRITE(p, " %s = %s(samp0, sampleUv + float2(%d.0 * (%s), 0.0)).%s;\n",
|
WRITE(p, " %s = %s(samp0, sampleUv + float2(%d.0 * (%s), 0.0)).%s;\n",
|
||||||
@ -296,7 +262,7 @@ void WriteEncoderEnd(char* p, API_TYPE ApiType)
|
|||||||
void WriteI8Encoder(char* p, API_TYPE ApiType)
|
void WriteI8Encoder(char* p, API_TYPE ApiType)
|
||||||
{
|
{
|
||||||
WriteSwizzler(p, GX_TF_I8, ApiType);
|
WriteSwizzler(p, GX_TF_I8, ApiType);
|
||||||
WRITE(p, " float3 texSample;\n");
|
WRITE(p, " float3 texSample;\n");
|
||||||
|
|
||||||
WriteSampleColor(p, "rgb", "texSample", ApiType);
|
WriteSampleColor(p, "rgb", "texSample", ApiType);
|
||||||
WriteColorToIntensity(p, "texSample", "ocol0.b");
|
WriteColorToIntensity(p, "texSample", "ocol0.b");
|
||||||
@ -430,7 +396,7 @@ void WriteRGB565Encoder(char* p,API_TYPE ApiType)
|
|||||||
WRITE(p, " float2 texRs = float2(texSample0.r, texSample1.r);\n");
|
WRITE(p, " float2 texRs = float2(texSample0.r, texSample1.r);\n");
|
||||||
WRITE(p, " float2 texGs = float2(texSample0.g, texSample1.g);\n");
|
WRITE(p, " float2 texGs = float2(texSample0.g, texSample1.g);\n");
|
||||||
WRITE(p, " float2 texBs = float2(texSample0.b, texSample1.b);\n");
|
WRITE(p, " float2 texBs = float2(texSample0.b, texSample1.b);\n");
|
||||||
|
|
||||||
WriteToBitDepth(p, 6, "texGs", "float2 gInt");
|
WriteToBitDepth(p, 6, "texGs", "float2 gInt");
|
||||||
WRITE(p, " float2 gUpper = floor(gInt / 8.0);\n");
|
WRITE(p, " float2 gUpper = floor(gInt / 8.0);\n");
|
||||||
WRITE(p, " float2 gLower = gInt - gUpper * 8.0;\n");
|
WRITE(p, " float2 gLower = gInt - gUpper * 8.0;\n");
|
||||||
@ -888,12 +854,12 @@ const char *GenerateEncodingShader(u32 format,API_TYPE ApiType)
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
PanicAlert("Unknown texture copy format: 0x%x\n", format);
|
PanicAlert("Unknown texture copy format: 0x%x\n", format);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (text[sizeof(text) - 1] != 0x7C)
|
if (text[sizeof(text) - 1] != 0x7C)
|
||||||
PanicAlert("TextureConversionShader generator - buffer too small, canary has been eaten!");
|
PanicAlert("TextureConversionShader generator - buffer too small, canary has been eaten!");
|
||||||
|
|
||||||
#ifndef ANDROID
|
#ifndef ANDROID
|
||||||
uselocale(old_locale); // restore locale
|
uselocale(old_locale); // restore locale
|
||||||
freelocale(locale);
|
freelocale(locale);
|
||||||
|
@ -28,7 +28,7 @@ static void DefineVSOutputStructMember(T& object, API_TYPE api_type, const char*
|
|||||||
|
|
||||||
if (api_type == API_OPENGL)
|
if (api_type == API_OPENGL)
|
||||||
object.Write(";\n");
|
object.Write(";\n");
|
||||||
else
|
else // D3D
|
||||||
{
|
{
|
||||||
if (semantic_index != -1)
|
if (semantic_index != -1)
|
||||||
object.Write(" : %s%d;\n", semantic, semantic_index);
|
object.Write(" : %s%d;\n", semantic, semantic_index);
|
||||||
@ -167,7 +167,7 @@ static inline void GenerateVertexShader(T& out, u32 components, API_TYPE api_typ
|
|||||||
|
|
||||||
out.Write("void main()\n{\n");
|
out.Write("void main()\n{\n");
|
||||||
}
|
}
|
||||||
else
|
else // D3D
|
||||||
{
|
{
|
||||||
out.Write("VS_OUTPUT main(\n");
|
out.Write("VS_OUTPUT main(\n");
|
||||||
|
|
||||||
@ -197,19 +197,10 @@ static inline void GenerateVertexShader(T& out, u32 components, API_TYPE api_typ
|
|||||||
// transforms
|
// transforms
|
||||||
if (components & VB_HAS_POSMTXIDX)
|
if (components & VB_HAS_POSMTXIDX)
|
||||||
{
|
{
|
||||||
if (api_type & API_D3D9)
|
if (api_type == API_D3D)
|
||||||
{
|
out.Write("int posmtx = blend_indices.x * 255.0;\n"); // TODO: Ugly, should use an integer instead
|
||||||
out.Write("int4 indices = D3DCOLORtoUBYTE4(blend_indices);\n");
|
|
||||||
out.Write("int posmtx = indices.x;\n");
|
|
||||||
}
|
|
||||||
else if (api_type == API_D3D11)
|
|
||||||
{
|
|
||||||
out.Write("int posmtx = blend_indices.x * 255.0;\n");
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
out.Write("int posmtx = int(fposmtx);\n");
|
out.Write("int posmtx = int(fposmtx);\n");
|
||||||
}
|
|
||||||
|
|
||||||
if (is_writing_shadercode && (DriverDetails::HasBug(DriverDetails::BUG_NODYNUBOACCESS) && !DriverDetails::HasBug(DriverDetails::BUG_ANNIHILATEDUBOS)) )
|
if (is_writing_shadercode && (DriverDetails::HasBug(DriverDetails::BUG_NODYNUBOACCESS) && !DriverDetails::HasBug(DriverDetails::BUG_ANNIHILATEDUBOS)) )
|
||||||
{
|
{
|
||||||
@ -454,11 +445,11 @@ static inline void GenerateVertexShader(T& out, u32 components, API_TYPE api_typ
|
|||||||
|
|
||||||
//write the true depth value, if the game uses depth textures pixel shaders will override with the correct values
|
//write the true depth value, if the game uses depth textures pixel shaders will override with the correct values
|
||||||
//if not early z culling will improve speed
|
//if not early z culling will improve speed
|
||||||
if (api_type & API_D3D9 || api_type == API_D3D11)
|
if (api_type == API_D3D)
|
||||||
{
|
{
|
||||||
out.Write("o.pos.z = " I_DEPTHPARAMS".x * o.pos.w + o.pos.z * " I_DEPTHPARAMS".y;\n");
|
out.Write("o.pos.z = " I_DEPTHPARAMS".x * o.pos.w + o.pos.z * " I_DEPTHPARAMS".y;\n");
|
||||||
}
|
}
|
||||||
else
|
else // OGL
|
||||||
{
|
{
|
||||||
// this results in a scale from -1..0 to -1..1 after perspective
|
// this results in a scale from -1..0 to -1..1 after perspective
|
||||||
// divide
|
// divide
|
||||||
@ -482,13 +473,6 @@ static inline void GenerateVertexShader(T& out, u32 components, API_TYPE api_typ
|
|||||||
//seems to get rather complicated
|
//seems to get rather complicated
|
||||||
}
|
}
|
||||||
|
|
||||||
if (api_type & API_D3D9)
|
|
||||||
{
|
|
||||||
// D3D9 is addressing pixel centers instead of pixel boundaries in clip space.
|
|
||||||
// Thus we need to offset the final position by half a pixel
|
|
||||||
out.Write("o.pos = o.pos + float4(" I_DEPTHPARAMS".z, " I_DEPTHPARAMS".w, 0.f, 0.f);\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
if(api_type == API_OPENGL)
|
if(api_type == API_OPENGL)
|
||||||
{
|
{
|
||||||
// Bit ugly here
|
// Bit ugly here
|
||||||
@ -528,7 +512,7 @@ static inline void GenerateVertexShader(T& out, u32 components, API_TYPE api_typ
|
|||||||
out.Write("gl_Position = o.pos;\n");
|
out.Write("gl_Position = o.pos;\n");
|
||||||
out.Write("}\n");
|
out.Write("}\n");
|
||||||
}
|
}
|
||||||
else
|
else // D3D
|
||||||
{
|
{
|
||||||
out.Write("return o;\n}\n");
|
out.Write("return o;\n}\n");
|
||||||
}
|
}
|
||||||
|
@ -85,11 +85,8 @@ struct TargetRectangle : public MathUtil::Rectangle<int>
|
|||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
API_OPENGL = 1,
|
API_OPENGL = 1,
|
||||||
API_D3D9_SM30 = 2,
|
API_D3D = 2,
|
||||||
API_D3D9_SM20 = 4,
|
API_NONE = 3
|
||||||
API_D3D9 = 6,
|
|
||||||
API_D3D11 = 8,
|
|
||||||
API_NONE = 16
|
|
||||||
} API_TYPE;
|
} API_TYPE;
|
||||||
|
|
||||||
inline u32 RGBA8ToRGBA6ToRGBA8(u32 src)
|
inline u32 RGBA8ToRGBA6ToRGBA8(u32 src)
|
||||||
|
@ -172,7 +172,7 @@ bool LineGeometryShader::SetShader(u32 components, float lineWidth,
|
|||||||
static char buffer[16384];
|
static char buffer[16384];
|
||||||
ShaderCode code;
|
ShaderCode code;
|
||||||
code.SetBuffer(buffer);
|
code.SetBuffer(buffer);
|
||||||
GenerateVSOutputStructForGS(code, components, API_D3D11);
|
GenerateVSOutputStructForGS(code, components, API_D3D);
|
||||||
code.Write("\n%s", LINE_GS_COMMON);
|
code.Write("\n%s", LINE_GS_COMMON);
|
||||||
|
|
||||||
std::stringstream numTexCoordsStream;
|
std::stringstream numTexCoordsStream;
|
||||||
|
@ -453,11 +453,11 @@ void PixelShaderCache::Shutdown()
|
|||||||
bool PixelShaderCache::SetShader(DSTALPHA_MODE dstAlphaMode, u32 components)
|
bool PixelShaderCache::SetShader(DSTALPHA_MODE dstAlphaMode, u32 components)
|
||||||
{
|
{
|
||||||
PixelShaderUid uid;
|
PixelShaderUid uid;
|
||||||
GetPixelShaderUid(uid, dstAlphaMode, API_D3D11, components);
|
GetPixelShaderUid(uid, dstAlphaMode, API_D3D, components);
|
||||||
if (g_ActiveConfig.bEnableShaderDebugging)
|
if (g_ActiveConfig.bEnableShaderDebugging)
|
||||||
{
|
{
|
||||||
PixelShaderCode code;
|
PixelShaderCode code;
|
||||||
GeneratePixelShaderCode(code, dstAlphaMode, API_D3D11, components);
|
GeneratePixelShaderCode(code, dstAlphaMode, API_D3D, components);
|
||||||
pixel_uid_checker.AddToIndexAndCheck(code, uid, "Pixel", "p");
|
pixel_uid_checker.AddToIndexAndCheck(code, uid, "Pixel", "p");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -487,7 +487,7 @@ bool PixelShaderCache::SetShader(DSTALPHA_MODE dstAlphaMode, u32 components)
|
|||||||
|
|
||||||
// Need to compile a new shader
|
// Need to compile a new shader
|
||||||
PixelShaderCode code;
|
PixelShaderCode code;
|
||||||
GeneratePixelShaderCode(code, dstAlphaMode, API_D3D11, components);
|
GeneratePixelShaderCode(code, dstAlphaMode, API_D3D, components);
|
||||||
|
|
||||||
D3DBlob* pbytecode;
|
D3DBlob* pbytecode;
|
||||||
if (!D3D::CompilePixelShader(code.GetBuffer(), (unsigned int)strlen(code.GetBuffer()), &pbytecode))
|
if (!D3D::CompilePixelShader(code.GetBuffer(), (unsigned int)strlen(code.GetBuffer()), &pbytecode))
|
||||||
|
@ -166,7 +166,7 @@ bool PointGeometryShader::SetShader(u32 components, float pointSize,
|
|||||||
static char buffer[16384];
|
static char buffer[16384];
|
||||||
ShaderCode code;
|
ShaderCode code;
|
||||||
code.SetBuffer(buffer);
|
code.SetBuffer(buffer);
|
||||||
GenerateVSOutputStructForGS(code, components, API_D3D11);
|
GenerateVSOutputStructForGS(code, components, API_D3D);
|
||||||
code.Write("\n%s", POINT_GS_COMMON);
|
code.Write("\n%s", POINT_GS_COMMON);
|
||||||
|
|
||||||
std::stringstream numTexCoordsStream;
|
std::stringstream numTexCoordsStream;
|
||||||
|
@ -200,11 +200,11 @@ void VertexShaderCache::Shutdown()
|
|||||||
bool VertexShaderCache::SetShader(u32 components)
|
bool VertexShaderCache::SetShader(u32 components)
|
||||||
{
|
{
|
||||||
VertexShaderUid uid;
|
VertexShaderUid uid;
|
||||||
GetVertexShaderUid(uid, components, API_D3D11);
|
GetVertexShaderUid(uid, components, API_D3D);
|
||||||
if (g_ActiveConfig.bEnableShaderDebugging)
|
if (g_ActiveConfig.bEnableShaderDebugging)
|
||||||
{
|
{
|
||||||
VertexShaderCode code;
|
VertexShaderCode code;
|
||||||
GenerateVertexShaderCode(code, components, API_D3D11);
|
GenerateVertexShaderCode(code, components, API_D3D);
|
||||||
vertex_uid_checker.AddToIndexAndCheck(code, uid, "Vertex", "v");
|
vertex_uid_checker.AddToIndexAndCheck(code, uid, "Vertex", "v");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -230,7 +230,7 @@ bool VertexShaderCache::SetShader(u32 components)
|
|||||||
}
|
}
|
||||||
|
|
||||||
VertexShaderCode code;
|
VertexShaderCode code;
|
||||||
GenerateVertexShaderCode(code, components, API_D3D11);
|
GenerateVertexShaderCode(code, components, API_D3D);
|
||||||
|
|
||||||
D3DBlob* pbytecode = NULL;
|
D3DBlob* pbytecode = NULL;
|
||||||
D3D::CompileVertexShader(code.GetBuffer(), (int)strlen(code.GetBuffer()), &pbytecode);
|
D3D::CompileVertexShader(code.GetBuffer(), (int)strlen(code.GetBuffer()), &pbytecode);
|
||||||
|
@ -82,7 +82,7 @@ void InitBackendInfo()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_Config.backend_info.APIType = API_D3D11;
|
g_Config.backend_info.APIType = API_D3D;
|
||||||
g_Config.backend_info.bUseRGBATextures = true; // the GX formats barely match any D3D11 formats
|
g_Config.backend_info.bUseRGBATextures = true; // the GX formats barely match any D3D11 formats
|
||||||
g_Config.backend_info.bUseMinimalMipCount = true;
|
g_Config.backend_info.bUseMinimalMipCount = true;
|
||||||
g_Config.backend_info.bSupports3DVision = false;
|
g_Config.backend_info.bSupports3DVision = false;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user