mirror of
https://github.com/hrydgard/ppsspp.git
synced 2024-11-24 14:00:03 +00:00
Merge pull request #16411 from hrydgard/vulkan-binding-cleanup
Extract the Vulkan descriptor binding cleanup from #16345
This commit is contained in:
commit
2a9367ad23
@ -31,6 +31,7 @@
|
||||
#include "GPU/Common/ShaderId.h"
|
||||
#include "GPU/Common/ShaderUniforms.h"
|
||||
#include "GPU/Common/FragmentShaderGenerator.h"
|
||||
#include "GPU/Vulkan/DrawEngineVulkan.h"
|
||||
#include "GPU/ge_constants.h"
|
||||
#include "GPU/GPUState.h"
|
||||
|
||||
@ -187,23 +188,23 @@ bool GenerateFragmentShader(const FShaderID &id, char *buffer, const ShaderLangu
|
||||
WRITE(p, "layout (depth_unchanged) out float gl_FragDepth;\n");
|
||||
}
|
||||
|
||||
WRITE(p, "layout (std140, set = 1, binding = 3) uniform baseUBO {\n%s};\n", ub_baseStr);
|
||||
WRITE(p, "layout (std140, set = 1, binding = %d) uniform baseUBO {\n%s};\n", DRAW_BINDING_DYNUBO_BASE, ub_baseStr);
|
||||
if (doTexture) {
|
||||
WRITE(p, "layout (set = 1, binding = 0) uniform %s%s tex;\n", texture3D ? "sampler3D" : "sampler2D", arrayTexture ? "Array" : "");
|
||||
WRITE(p, "layout (set = 1, binding = %d) uniform %s%s tex;\n", DRAW_BINDING_TEXTURE, texture3D ? "sampler3D" : "sampler2D", arrayTexture ? "Array" : "");
|
||||
}
|
||||
|
||||
if (readFramebufferTex) {
|
||||
// The framebuffer texture is always bound as an array.
|
||||
p.C("layout (set = 1, binding = 1) uniform sampler2DArray fbotex;\n");
|
||||
p.F("layout (set = 1, binding = %d) uniform sampler2DArray fbotex;\n", DRAW_BINDING_2ND_TEXTURE);
|
||||
} else if (fetchFramebuffer) {
|
||||
p.C("layout (input_attachment_index = 0, set = 1, binding = 9) uniform subpassInput inputColor;\n");
|
||||
p.F("layout (input_attachment_index = 0, set = 1, binding = %d) uniform subpassInput inputColor;\n", DRAW_BINDING_INPUT_ATTACHMENT);
|
||||
if (fragmentShaderFlags) {
|
||||
*fragmentShaderFlags |= FragmentShaderFlags::INPUT_ATTACHMENT;
|
||||
}
|
||||
}
|
||||
|
||||
if (shaderDepalMode != ShaderDepalMode::OFF) {
|
||||
WRITE(p, "layout (set = 1, binding = 2) uniform sampler2D pal;\n");
|
||||
WRITE(p, "layout (set = 1, binding = %d) uniform sampler2D pal;\n", DRAW_BINDING_DEPAL_TEXTURE);
|
||||
}
|
||||
|
||||
// Note: the precision qualifiers must match the vertex shader!
|
||||
|
@ -30,6 +30,7 @@
|
||||
#include "GPU/Common/ShaderUniforms.h"
|
||||
#include "GPU/Common/VertexDecoderCommon.h"
|
||||
#include "GPU/Common/VertexShaderGenerator.h"
|
||||
#include "GPU/Vulkan/DrawEngineVulkan.h"
|
||||
|
||||
#undef WRITE
|
||||
|
||||
@ -256,11 +257,11 @@ bool GenerateVertexShader(const VShaderID &id, char *buffer, const ShaderLanguag
|
||||
WRITE(p, "layout (std140, set = 0, binding = 0) uniform frameVars {\n%s};\n", ub_frameStr);
|
||||
}
|
||||
|
||||
WRITE(p, "layout (std140, set = 1, binding = 3) uniform baseVars {\n%s};\n", ub_baseStr);
|
||||
WRITE(p, "layout (std140, set = 1, binding = %d) uniform baseVars {\n%s};\n", DRAW_BINDING_DYNUBO_BASE, ub_baseStr);
|
||||
if (enableLighting || doShadeMapping)
|
||||
WRITE(p, "layout (std140, set = 1, binding = 4) uniform lightVars {\n%s};\n", ub_vs_lightsStr);
|
||||
WRITE(p, "layout (std140, set = 1, binding = %d) uniform lightVars {\n%s};\n", DRAW_BINDING_DYNUBO_LIGHT, ub_vs_lightsStr);
|
||||
if (enableBones)
|
||||
WRITE(p, "layout (std140, set = 1, binding = 5) uniform boneVars {\n%s};\n", ub_vs_bonesStr);
|
||||
WRITE(p, "layout (std140, set = 1, binding = %d) uniform boneVars {\n%s};\n", DRAW_BINDING_DYNUBO_BONE, ub_vs_bonesStr);
|
||||
|
||||
if (enableBones) {
|
||||
WRITE(p, "%s", boneWeightDecl[numBoneWeights]);
|
||||
@ -638,7 +639,7 @@ bool GenerateVertexShader(const VShaderID &id, char *buffer, const ShaderLanguag
|
||||
WRITE(p, " vec4 tex;\n");
|
||||
WRITE(p, " vec4 col;\n");
|
||||
WRITE(p, "};\n");
|
||||
WRITE(p, "layout (std430, set = 1, binding = 6) readonly buffer s_tess_data {\n");
|
||||
WRITE(p, "layout (std430, set = 1, binding = %d) readonly buffer s_tess_data {\n", DRAW_BINDING_TESS_STORAGE_BUF);
|
||||
WRITE(p, " TessData tess_data[];\n");
|
||||
WRITE(p, "};\n");
|
||||
|
||||
@ -646,10 +647,10 @@ bool GenerateVertexShader(const VShaderID &id, char *buffer, const ShaderLanguag
|
||||
WRITE(p, " vec4 basis;\n");
|
||||
WRITE(p, " vec4 deriv;\n");
|
||||
WRITE(p, "};\n");
|
||||
WRITE(p, "layout (std430, set = 1, binding = 7) readonly buffer s_tess_weights_u {\n");
|
||||
WRITE(p, "layout (std430, set = 1, binding = %d) readonly buffer s_tess_weights_u {\n", DRAW_BINDING_TESS_STORAGE_BUF_WU);
|
||||
WRITE(p, " TessWeight tess_weights_u[];\n");
|
||||
WRITE(p, "};\n");
|
||||
WRITE(p, "layout (std430, set = 1, binding = 8) readonly buffer s_tess_weights_v {\n");
|
||||
WRITE(p, "layout (std430, set = 1, binding = %d) readonly buffer s_tess_weights_v {\n", DRAW_BINDING_TESS_STORAGE_BUF_WV);
|
||||
WRITE(p, " TessWeight tess_weights_v[];\n");
|
||||
WRITE(p, "};\n");
|
||||
} else if (ShaderLanguageIsOpenGL(compat.shaderLanguage)) {
|
||||
|
@ -62,19 +62,6 @@ enum {
|
||||
|
||||
enum { VAI_KILL_AGE = 120, VAI_UNRELIABLE_KILL_AGE = 240, VAI_UNRELIABLE_KILL_MAX = 4 };
|
||||
|
||||
enum {
|
||||
DRAW_BINDING_TEXTURE = 0,
|
||||
DRAW_BINDING_2ND_TEXTURE = 1,
|
||||
DRAW_BINDING_DEPAL_TEXTURE = 2,
|
||||
DRAW_BINDING_DYNUBO_BASE = 3,
|
||||
DRAW_BINDING_DYNUBO_LIGHT = 4,
|
||||
DRAW_BINDING_DYNUBO_BONE = 5,
|
||||
DRAW_BINDING_TESS_STORAGE_BUF = 6,
|
||||
DRAW_BINDING_TESS_STORAGE_BUF_WU = 7,
|
||||
DRAW_BINDING_TESS_STORAGE_BUF_WV = 8,
|
||||
DRAW_BINDING_INPUT_ATTACHMENT = 9,
|
||||
};
|
||||
|
||||
enum {
|
||||
TRANSFORMED_VERTEX_BUFFER_SIZE = VERTEX_BUFFER_MAX * sizeof(TransformedVertex)
|
||||
};
|
||||
@ -97,7 +84,7 @@ void DrawEngineVulkan::InitDeviceObjects() {
|
||||
|
||||
// TODO: Make things more flexible, so we at least have specialized layouts for input attachments and tess.
|
||||
// Note that it becomes a support matrix..
|
||||
VkDescriptorSetLayoutBinding bindings[10]{};
|
||||
VkDescriptorSetLayoutBinding bindings[DRAW_BINDING_COUNT]{};
|
||||
bindings[0].descriptorCount = 1;
|
||||
bindings[0].descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
|
||||
bindings[0].stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT;
|
||||
@ -415,7 +402,7 @@ VkDescriptorSet DrawEngineVulkan::GetOrCreateDescriptorSet(VkImageView imageView
|
||||
_assert_msg_(desc != VK_NULL_HANDLE, "Ran out of descriptor space in pool. sz=%d", (int)frame.descSets.size());
|
||||
|
||||
// We just don't write to the slots we don't care about, which is fine.
|
||||
VkWriteDescriptorSet writes[9]{};
|
||||
VkWriteDescriptorSet writes[DRAW_BINDING_COUNT]{};
|
||||
// Main texture
|
||||
int n = 0;
|
||||
VkDescriptorImageInfo tex[3]{};
|
||||
|
@ -121,6 +121,20 @@ private:
|
||||
VkDescriptorBufferInfo bufInfo_[3]{};
|
||||
};
|
||||
|
||||
enum {
|
||||
DRAW_BINDING_TEXTURE = 0,
|
||||
DRAW_BINDING_2ND_TEXTURE = 1,
|
||||
DRAW_BINDING_DEPAL_TEXTURE = 2,
|
||||
DRAW_BINDING_DYNUBO_BASE = 3,
|
||||
DRAW_BINDING_DYNUBO_LIGHT = 4,
|
||||
DRAW_BINDING_DYNUBO_BONE = 5,
|
||||
DRAW_BINDING_TESS_STORAGE_BUF = 6,
|
||||
DRAW_BINDING_TESS_STORAGE_BUF_WU = 7,
|
||||
DRAW_BINDING_TESS_STORAGE_BUF_WV = 8,
|
||||
DRAW_BINDING_INPUT_ATTACHMENT = 9,
|
||||
DRAW_BINDING_COUNT = 10,
|
||||
};
|
||||
|
||||
// Handles transform, lighting and drawing.
|
||||
class DrawEngineVulkan : public DrawEngineCommon {
|
||||
public:
|
||||
|
@ -569,7 +569,7 @@ Screen Scaling Filter = Screen scaling filter
|
||||
Show Debug Statistics = Show debug statistics
|
||||
Show FPS Counter = Show FPS counter
|
||||
Skip GPU Readbacks = Skip GPU Readbacks
|
||||
Software Rendering = Software rendering (slow)
|
||||
Software Rendering = Software rendering (slow, accurate)
|
||||
Software Skinning = Software skinning
|
||||
SoftwareSkinning Tip = Combine skinned model draws on the CPU, faster in most games
|
||||
Speed = Speed
|
||||
|
@ -546,7 +546,7 @@ Screen Scaling Filter = Skärmskalningsfilter
|
||||
Show Debug Statistics = Visa debugstatistik
|
||||
Show FPS Counter = Visa FPS-räknare
|
||||
Skip GPU Readbacks = Skip GPU Readbacks
|
||||
Software Rendering = Mjukvarurendering (experiment)
|
||||
Software Rendering = Mjukvarurendering (långsam men ofta mer korrekt)
|
||||
Software Skinning = Software Skinning
|
||||
SoftwareSkinning Tip = Combine skinned model draws on the CPU, faster in most games
|
||||
Speed = Hastighet
|
||||
|
Loading…
Reference in New Issue
Block a user