|
@@ -264,28 +264,25 @@ CachedProgram BuildShader(const Device& device, u64 unique_identifier, ShaderTyp
|
|
|
"#extension GL_NV_shader_thread_group : require\n"
|
|
"#extension GL_NV_shader_thread_group : require\n"
|
|
|
"#extension GL_NV_shader_thread_shuffle : require\n";
|
|
"#extension GL_NV_shader_thread_shuffle : require\n";
|
|
|
}
|
|
}
|
|
|
- source += '\n';
|
|
|
|
|
|
|
|
|
|
if (shader_type == ShaderType::Geometry) {
|
|
if (shader_type == ShaderType::Geometry) {
|
|
|
const auto [glsl_topology, max_vertices] = GetPrimitiveDescription(variant.primitive_mode);
|
|
const auto [glsl_topology, max_vertices] = GetPrimitiveDescription(variant.primitive_mode);
|
|
|
source += fmt::format("#define MAX_VERTEX_INPUT {}\n", max_vertices);
|
|
source += fmt::format("#define MAX_VERTEX_INPUT {}\n", max_vertices);
|
|
|
- source += fmt::format("layout ({}) in;\n\n", glsl_topology);
|
|
|
|
|
|
|
+ source += fmt::format("layout ({}) in;\n", glsl_topology);
|
|
|
}
|
|
}
|
|
|
if (shader_type == ShaderType::Compute) {
|
|
if (shader_type == ShaderType::Compute) {
|
|
|
|
|
+ if (variant.local_memory_size > 0) {
|
|
|
|
|
+ source += fmt::format("#define LOCAL_MEMORY_SIZE {}\n",
|
|
|
|
|
+ Common::AlignUp(variant.local_memory_size, 4) / 4);
|
|
|
|
|
+ }
|
|
|
source +=
|
|
source +=
|
|
|
fmt::format("layout (local_size_x = {}, local_size_y = {}, local_size_z = {}) in;\n",
|
|
fmt::format("layout (local_size_x = {}, local_size_y = {}, local_size_z = {}) in;\n",
|
|
|
variant.block_x, variant.block_y, variant.block_z);
|
|
variant.block_x, variant.block_y, variant.block_z);
|
|
|
|
|
|
|
|
if (variant.shared_memory_size > 0) {
|
|
if (variant.shared_memory_size > 0) {
|
|
|
- // TODO(Rodrigo): We should divide by four here, but having a larger shared memory pool
|
|
|
|
|
- // avoids out of bound stores. Find out why shared memory size is being invalid.
|
|
|
|
|
|
|
+ // shared_memory_size is described in number of words
|
|
|
source += fmt::format("shared uint smem[{}];\n", variant.shared_memory_size);
|
|
source += fmt::format("shared uint smem[{}];\n", variant.shared_memory_size);
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- if (variant.local_memory_size > 0) {
|
|
|
|
|
- source += fmt::format("#define LOCAL_MEMORY_SIZE {}\n",
|
|
|
|
|
- Common::AlignUp(variant.local_memory_size, 4) / 4);
|
|
|
|
|
- }
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
source += '\n';
|
|
source += '\n';
|