summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
diff options
context:
space:
mode:
authorStenzek <stenzek@gmail.com>2018-11-27 17:16:53 +1000
committerStenzek <stenzek@gmail.com>2018-12-04 17:37:25 +1000
commit7afd5cc2fb7e45f2c497e5aed007a017b8461335 (patch)
tree17f445fc7a686cd28859e6c46fb1a32d64a56123 /Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
parent5ca18ff04e6dd69e09a5675db8f9474a51bdfcc0 (diff)
Use main buffers for utility draws
Diffstat (limited to 'Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp')
-rw-r--r--Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
index 78458aa3fe..c8d54acd5a 100644
--- a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
+++ b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
@@ -259,6 +259,21 @@ void ProgramShaderCache::UploadConstants()
}
}
+void ProgramShaderCache::UploadConstants(const void* data, u32 data_size)
+{
+ // allocate and copy
+ const u32 alloc_size = Common::AlignUp(data_size, s_ubo_align);
+ auto buffer = s_buffer->Map(alloc_size, s_ubo_align);
+ std::memcpy(buffer.first, data, data_size);
+ s_buffer->Unmap(alloc_size);
+
+ // bind the same sub-buffer to all stages
+ for (u32 index = 1; index <= 3; index++)
+ glBindBufferRange(GL_UNIFORM_BUFFER, index, s_buffer->m_buffer, buffer.second, data_size);
+
+ ADDSTAT(stats.thisFrame.bytesUniformStreamed, data_size);
+}
+
bool ProgramShaderCache::CompileShader(SHADER& shader, const std::string& vcode,
const std::string& pcode, const std::string& gcode)
{
@@ -539,6 +554,11 @@ void ProgramShaderCache::BindVertexFormat(const GLVertexFormat* vertex_format)
s_last_VAO = new_VAO;
}
+bool ProgramShaderCache::IsValidVertexFormatBound()
+{
+ return s_last_VAO != 0 && s_last_VAO != s_attributeless_VAO;
+}
+
void ProgramShaderCache::InvalidateVertexFormat()
{
s_last_VAO = 0;