Merge pull request #594 from bunnei/max-constbuff
gl_rasterizer: Workaround for when exceeding max UBO size.
This commit is contained in:
commit
84cadf9918
|
@ -613,6 +613,12 @@ u32 RasterizerOpenGL::SetupConstBuffers(Maxwell::ShaderStage stage, GLuint progr
|
||||||
if (used_buffer.IsIndirect()) {
|
if (used_buffer.IsIndirect()) {
|
||||||
// Buffer is accessed indirectly, so upload the entire thing
|
// Buffer is accessed indirectly, so upload the entire thing
|
||||||
size = buffer.size * sizeof(float);
|
size = buffer.size * sizeof(float);
|
||||||
|
|
||||||
|
if (size > MaxConstbufferSize) {
|
||||||
|
NGLOG_ERROR(HW_GPU, "indirect constbuffer size {} exceeds maximum {}", size,
|
||||||
|
MaxConstbufferSize);
|
||||||
|
size = MaxConstbufferSize;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// Buffer is accessed directly, upload just what we use
|
// Buffer is accessed directly, upload just what we use
|
||||||
size = used_buffer.GetSize() * sizeof(float);
|
size = used_buffer.GetSize() * sizeof(float);
|
||||||
|
|
|
@ -55,7 +55,7 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Maximum supported size that a constbuffer can have in bytes.
|
/// Maximum supported size that a constbuffer can have in bytes.
|
||||||
static constexpr size_t MaxConstbufferSize = 0x1000;
|
static constexpr size_t MaxConstbufferSize = 0x10000;
|
||||||
static_assert(MaxConstbufferSize % sizeof(GLvec4) == 0,
|
static_assert(MaxConstbufferSize % sizeof(GLvec4) == 0,
|
||||||
"The maximum size of a constbuffer must be a multiple of the size of GLvec4");
|
"The maximum size of a constbuffer must be a multiple of the size of GLvec4");
|
||||||
|
|
||||||
|
|
Reference in New Issue