mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
D3D11: Prepare for dual src blending support
This commit is contained in:
parent
3b12ac5f05
commit
328201978f
4 changed files with 27 additions and 32 deletions
|
@ -75,7 +75,6 @@ struct SamplerCacheKey {
|
|||
}
|
||||
};
|
||||
|
||||
|
||||
class FramebufferManagerCommon;
|
||||
|
||||
class TextureCacheCommon {
|
||||
|
|
|
@ -506,8 +506,9 @@ void GPU_D3D11::CheckGPUFeatures() {
|
|||
features |= GPU_SUPPORTS_TEXTURE_LOD_CONTROL;
|
||||
features |= GPU_PREFER_CPU_DOWNLOAD;
|
||||
features |= GPU_SUPPORTS_ACCURATE_DEPTH;
|
||||
features |= GPU_SUPPORTS_ANISOTROPY;
|
||||
///features |= GPU_SUPPORTS_ANISOTROPY;
|
||||
features |= GPU_SUPPORTS_OES_TEXTURE_NPOT;
|
||||
//features |= GPU_SUPPORTS_DUALSOURCE_BLEND;
|
||||
|
||||
// features |= GPU_SUPPORTS_ANY_COPY_IMAGE;
|
||||
|
||||
|
|
|
@ -247,27 +247,6 @@ void TextureCacheD3D11::UpdateSamplingParams(TexCacheEntry &entry, SamplerCacheK
|
|||
key.sClamp = sClamp;
|
||||
key.tClamp = tClamp;
|
||||
key.maxLevel = entry.maxLevel;
|
||||
/*
|
||||
if (entry.maxLevel != 0) {
|
||||
if (force || entry.lodBias != lodBias) {
|
||||
if (gstate_c.Supports(GPU_SUPPORTS_TEXTURE_LOD_CONTROL)) {
|
||||
GETexLevelMode mode = gstate.getTexLevelMode();
|
||||
switch (mode) {
|
||||
case GE_TEXLEVEL_MODE_AUTO:
|
||||
// TODO
|
||||
break;
|
||||
case GE_TEXLEVEL_MODE_CONST:
|
||||
// Sigh, LOD_BIAS is not even in ES 3.0..
|
||||
break;
|
||||
case GE_TEXLEVEL_MODE_SLOPE:
|
||||
// TODO
|
||||
break;
|
||||
}
|
||||
}
|
||||
entry.lodBias = lodBias;
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
if (entry.framebuffer) {
|
||||
WARN_LOG_REPORT_ONCE(wrongFramebufAttach, G3D, "Framebuffer still attached in UpdateSamplingParams()?");
|
||||
|
|
|
@ -131,11 +131,20 @@ bool GenerateFragmentShaderHLSL(const ShaderID &id, char *buffer, ShaderLanguage
|
|||
WRITE(p, "};\n");
|
||||
|
||||
if (lang == HLSL_DX9) {
|
||||
WRITE(p, "float4 main( PS_IN In ) : COLOR\n");
|
||||
WRITE(p, "float4 main( PS_IN In ) : COLOR {\n");
|
||||
} else {
|
||||
WRITE(p, "float4 main( PS_IN In ) : SV_Target\n");
|
||||
WRITE(p, "struct PS_OUT {\n");
|
||||
if (stencilToAlpha == REPLACE_ALPHA_DUALSOURCE) {
|
||||
WRITE(p, " float4 target : SV_Target0;\n");
|
||||
WRITE(p, " float4 target1 : SV_Target1;\n");
|
||||
}
|
||||
else {
|
||||
WRITE(p, " float4 target : SV_Target;\n");
|
||||
}
|
||||
WRITE(p, "};\n");
|
||||
WRITE(p, "PS_OUT main( PS_IN In ) {\n");
|
||||
WRITE(p, " PS_OUT outfragment;\n");
|
||||
}
|
||||
WRITE(p, "{\n");
|
||||
|
||||
if (isModeClear) {
|
||||
// Clear mode does not allow any fancy shading.
|
||||
|
@ -375,11 +384,6 @@ bool GenerateFragmentShaderHLSL(const ShaderID &id, char *buffer, ShaderLanguage
|
|||
}
|
||||
|
||||
switch (stencilToAlpha) {
|
||||
case REPLACE_ALPHA_DUALSOURCE:
|
||||
WRITE(p, " v.a = %s;\n", replacedAlpha.c_str());
|
||||
// TODO: Output the second color as well using original v.a.
|
||||
break;
|
||||
|
||||
case REPLACE_ALPHA_YES:
|
||||
WRITE(p, " v.a = %s;\n", replacedAlpha.c_str());
|
||||
break;
|
||||
|
@ -401,7 +405,19 @@ bool GenerateFragmentShaderHLSL(const ShaderID &id, char *buffer, ShaderLanguage
|
|||
break;
|
||||
}
|
||||
|
||||
WRITE(p, " return v;\n");
|
||||
if (lang == HLSL_D3D11) {
|
||||
if (stencilToAlpha == REPLACE_ALPHA_DUALSOURCE) {
|
||||
WRITE(p, " outfragment.target = float4(v.rgb, %s);\n", replacedAlpha.c_str());
|
||||
WRITE(p, " outfragment.target1 = float4(0.0, 0.0, 0.0, v.a);\n");
|
||||
WRITE(p, " return outfragment;\n");
|
||||
}
|
||||
else {
|
||||
WRITE(p, " outfragment.target = v;\n");
|
||||
WRITE(p, " return outfragment;\n");
|
||||
}
|
||||
} else {
|
||||
WRITE(p, " return v;\n");
|
||||
}
|
||||
WRITE(p, "}\n");
|
||||
return true;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue