From 633385252bc3d551eb4c4176287dae4b0e89bc38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Wed, 14 Oct 2015 09:09:49 +0200 Subject: [PATCH] Some extra functionality in ShaderID --- GPU/GLES/ShaderManager.h | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/GPU/GLES/ShaderManager.h b/GPU/GLES/ShaderManager.h index ff2d29f50c..6f56221c2a 100644 --- a/GPU/GLES/ShaderManager.h +++ b/GPU/GLES/ShaderManager.h @@ -18,7 +18,7 @@ #pragma once #include "base/basictypes.h" -#include "../../Globals.h" +#include "Globals.h" #include #include "VertexShaderGenerator.h" #include "FragmentShaderGenerator.h" @@ -26,8 +26,15 @@ class Shader; struct ShaderID { - ShaderID() { d[0] = 0xFFFFFFFF; } - void clear() { d[0] = 0xFFFFFFFF; } + ShaderID() { + clear(); + } + void clear() { + for (int i = 0; i < ARRAY_SIZE(d); i++) { + d[i] = 0; + } + } + u32 d[2]; bool operator < (const ShaderID &other) const { for (size_t i = 0; i < sizeof(d) / sizeof(u32); i++) { @@ -45,6 +52,26 @@ struct ShaderID { } return true; } + + int Bit(int bit) const { + return (d[bit >> 5] >> (bit & 31)) & 1; + } + // Does not handle crossing 32-bit boundaries + int Bits(int bit, int count) const { + const int mask = (1 << count) - 1; + return (d[bit >> 5] >> (bit & 31)) & mask; + } + void SetBit(int bit, bool value = true) { + if (value) { + d[bit >> 5] |= 1 << (bit & 31); + } + } + void SetBits(int bit, int count, int value) { + if (value != 0) { + const int mask = (1 << count) - 1; + d[bit >> 5] |= (value & mask) << (bit & 31); + } + } }; // Pre-fetched attrs and uniforms