gl_state: Add support for glBindImageTextures

This commit is contained in:
ReinUsesLisp 2019-07-12 02:00:04 -03:00
parent 2424eefad2
commit 5edf24b510
2 changed files with 24 additions and 0 deletions

View File

@ -545,6 +545,26 @@ void OpenGLState::ApplySamplers() const {
} }
} }
void OpenGLState::ApplyImages() const {
bool has_delta{};
std::size_t first{};
std::size_t last{};
for (std::size_t i = 0; i < std::size(images); ++i) {
if (!UpdateValue(cur_state.images[i], images[i])) {
continue;
}
if (!has_delta) {
first = i;
has_delta = true;
}
last = i;
}
if (has_delta) {
glBindImageTextures(static_cast<GLuint>(first), static_cast<GLsizei>(last - first + 1),
images.data() + first);
}
}
void OpenGLState::Apply() { void OpenGLState::Apply() {
MICROPROFILE_SCOPE(OpenGL_State); MICROPROFILE_SCOPE(OpenGL_State);
ApplyFramebufferState(); ApplyFramebufferState();
@ -576,6 +596,7 @@ void OpenGLState::Apply() {
ApplyLogicOp(); ApplyLogicOp();
ApplyTextures(); ApplyTextures();
ApplySamplers(); ApplySamplers();
ApplyImages();
if (dirty.polygon_offset) { if (dirty.polygon_offset) {
ApplyPolygonOffset(); ApplyPolygonOffset();
dirty.polygon_offset = false; dirty.polygon_offset = false;

View File

@ -134,6 +134,8 @@ public:
}; };
std::array<TextureUnit, Tegra::Engines::Maxwell3D::Regs::NumTextureSamplers> texture_units; std::array<TextureUnit, Tegra::Engines::Maxwell3D::Regs::NumTextureSamplers> texture_units;
std::array<GLuint, Tegra::Engines::Maxwell3D::Regs::NumImages> images{};
struct { struct {
GLuint read_framebuffer; // GL_READ_FRAMEBUFFER_BINDING GLuint read_framebuffer; // GL_READ_FRAMEBUFFER_BINDING
GLuint draw_framebuffer; // GL_DRAW_FRAMEBUFFER_BINDING GLuint draw_framebuffer; // GL_DRAW_FRAMEBUFFER_BINDING
@ -220,6 +222,7 @@ public:
void ApplyLogicOp() const; void ApplyLogicOp() const;
void ApplyTextures() const; void ApplyTextures() const;
void ApplySamplers() const; void ApplySamplers() const;
void ApplyImages() const;
void ApplyDepthClamp() const; void ApplyDepthClamp() const;
void ApplyPolygonOffset() const; void ApplyPolygonOffset() const;
void ApplyAlphaTest() const; void ApplyAlphaTest() const;