From d7b2dfe47ae2fc520c585f66f119ebf9a0c43c89 Mon Sep 17 00:00:00 2001 From: Graeme Leese Date: Fri, 20 Jan 2017 13:44:51 +0000 Subject: [PATCH 1/1] Map buffers for writing in atomic counter tests These tests attempt to sort the values in the returned buffers in place, so the buffers must be mapped for writing. See VK-GL-CTS issue: 39. Components: OpenGL Affects: KHR-GLES31.core.shader_atomic_counters.* Change-Id: Icda40fe8d27c86ecd9912767c34ec81e7fa3a35a --- .../gles31/es31cShaderAtomicCountersTests.cpp | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/external/openglcts/modules/gles31/es31cShaderAtomicCountersTests.cpp b/external/openglcts/modules/gles31/es31cShaderAtomicCountersTests.cpp index 092e68b..115fe81 100644 --- a/external/openglcts/modules/gles31/es31cShaderAtomicCountersTests.cpp +++ b/external/openglcts/modules/gles31/es31cShaderAtomicCountersTests.cpp @@ -934,8 +934,8 @@ public: GLuint* data; glBindBuffer(GL_SHADER_STORAGE_BUFFER, m_buffer); glMemoryBarrier(GL_BUFFER_UPDATE_BARRIER_BIT); - data = - static_cast(glMapBufferRange(GL_SHADER_STORAGE_BUFFER, 0, 512 * sizeof(GLuint), GL_MAP_READ_BIT)); + data = static_cast( + glMapBufferRange(GL_SHADER_STORAGE_BUFFER, 0, 512 * sizeof(GLuint), GL_MAP_READ_BIT | GL_MAP_WRITE_BIT)); std::sort(data, data + 512); for (int i = 0; i < 512; i += 2) @@ -1800,14 +1800,17 @@ class BasicUsageVS : public SACSubcaseBase // validate GLuint* data; glBindBuffer(GL_TRANSFORM_FEEDBACK_BUFFER, xfb_buffer_[0]); - data = static_cast(glMapBufferRange(GL_TRANSFORM_FEEDBACK_BUFFER, 0, 32 * 4, GL_MAP_READ_BIT)); + // CheckCounterValues will sort in place, so map buffer for both read and write + data = static_cast( + glMapBufferRange(GL_TRANSFORM_FEEDBACK_BUFFER, 0, 32 * 4, GL_MAP_READ_BIT | GL_MAP_WRITE_BIT)); if (!CheckCounterValues(32, data, 7)) return ERROR; glUnmapBuffer(GL_TRANSFORM_FEEDBACK_BUFFER); glBindBuffer(GL_TRANSFORM_FEEDBACK_BUFFER, 0); glBindBuffer(GL_TRANSFORM_FEEDBACK_BUFFER, xfb_buffer_[1]); - data = static_cast(glMapBufferRange(GL_TRANSFORM_FEEDBACK_BUFFER, 0, 32 * 4, GL_MAP_READ_BIT)); + data = static_cast( + glMapBufferRange(GL_TRANSFORM_FEEDBACK_BUFFER, 0, 32 * 4, GL_MAP_READ_BIT | GL_MAP_WRITE_BIT)); if (!CheckCounterValues(32, data, 45)) return ERROR; glUnmapBuffer(GL_TRANSFORM_FEEDBACK_BUFFER); @@ -3059,8 +3062,8 @@ class BasicUsageNoOffset : public BasicUsageCS GLuint* data; glBindBuffer(GL_SHADER_STORAGE_BUFFER, m_buffer); glMemoryBarrier(GL_BUFFER_UPDATE_BARRIER_BIT); - data = - static_cast(glMapBufferRange(GL_SHADER_STORAGE_BUFFER, 0, 512 * sizeof(GLuint), GL_MAP_READ_BIT)); + data = static_cast( + glMapBufferRange(GL_SHADER_STORAGE_BUFFER, 0, 512 * sizeof(GLuint), GL_MAP_READ_BIT | GL_MAP_WRITE_BIT)); std::sort(data, data + 512); for (int i = 0; i < 512; i += 2) @@ -3384,7 +3387,8 @@ class AdvancedManyDrawCalls2 : public SACSubcaseBase glBindBuffer(GL_SHADER_STORAGE_BUFFER, m_ssbo); glMemoryBarrier(GL_BUFFER_UPDATE_BARRIER_BIT); - data = static_cast(glMapBufferRange(GL_SHADER_STORAGE_BUFFER, 0, 100 * 4, GL_MAP_READ_BIT)); + data = static_cast( + glMapBufferRange(GL_SHADER_STORAGE_BUFFER, 0, 100 * 4, GL_MAP_READ_BIT | GL_MAP_WRITE_BIT)); std::sort(data, data + 100); for (GLuint i = 0; i < 100; ++i) { @@ -3475,7 +3479,8 @@ class AdvancedUsageMultipleComputeDispatches : public SACSubcaseBase glBindBuffer(GL_SHADER_STORAGE_BUFFER, m_ssbo); glMemoryBarrier(GL_BUFFER_UPDATE_BARRIER_BIT); - data = static_cast(glMapBufferRange(GL_SHADER_STORAGE_BUFFER, 0, 100 * 4, GL_MAP_READ_BIT)); + data = static_cast( + glMapBufferRange(GL_SHADER_STORAGE_BUFFER, 0, 100 * 4, GL_MAP_READ_BIT | GL_MAP_WRITE_BIT)); std::sort(data, data + 100); for (GLuint i = 0; i < 100; ++i) { -- 2.7.4