mirror of
https://github.com/wheremyfoodat/Panda3DS.git
synced 2025-04-07 06:35:40 +12:00
Merge pull request #505 from wheremyfoodat/moar-hle-dsp
GPU: Handle invalid floating point uniform writes
This commit is contained in:
commit
70f443b06e
1 changed files with 6 additions and 4 deletions
|
@ -256,14 +256,16 @@ class PICAShader {
|
||||||
|
|
||||||
void uploadFloatUniform(u32 word) {
|
void uploadFloatUniform(u32 word) {
|
||||||
floatUniformBuffer[floatUniformWordCount++] = word;
|
floatUniformBuffer[floatUniformWordCount++] = word;
|
||||||
if (floatUniformIndex >= 96) {
|
|
||||||
Helpers::panic("[PICA] Tried to write float uniform %d", floatUniformIndex);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((f32UniformTransfer && floatUniformWordCount >= 4) || (!f32UniformTransfer && floatUniformWordCount >= 3)) {
|
if ((f32UniformTransfer && floatUniformWordCount >= 4) || (!f32UniformTransfer && floatUniformWordCount >= 3)) {
|
||||||
vec4f& uniform = floatUniforms[floatUniformIndex++];
|
|
||||||
floatUniformWordCount = 0;
|
floatUniformWordCount = 0;
|
||||||
|
|
||||||
|
// Check if the program tries to upload to a non-existent uniform, and empty the queue without writing in that case
|
||||||
|
if (floatUniformIndex >= 96) [[unlikely]] {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
vec4f& uniform = floatUniforms[floatUniformIndex++];
|
||||||
|
|
||||||
if (f32UniformTransfer) {
|
if (f32UniformTransfer) {
|
||||||
uniform[0] = f24::fromFloat32(*(float*)&floatUniformBuffer[3]);
|
uniform[0] = f24::fromFloat32(*(float*)&floatUniformBuffer[3]);
|
||||||
uniform[1] = f24::fromFloat32(*(float*)&floatUniformBuffer[2]);
|
uniform[1] = f24::fromFloat32(*(float*)&floatUniformBuffer[2]);
|
||||||
|
|
Loading…
Add table
Reference in a new issue