gl_state: Add support for glBindImageTextures
This commit is contained in:
parent
2424eefad2
commit
5edf24b510
2 changed files with 24 additions and 0 deletions
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in a new issue