diff options
author | fmenozzi <fmenozzi@google.com> | 2016-06-21 09:42:12 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-06-21 09:42:12 -0700 |
commit | 497e9e2b3668fd8bc7fab16326e93c5cc6f0c287 (patch) | |
tree | d061e909be0d3d0a287857ae05b7c420ef7302a0 /src/gpu | |
parent | 67cb66648103b4773d1f679cb23f1ebaa6f65e76 (diff) |
Integers can now be passed as uniforms; needed for passing color count to fragment shader
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2076143003
Committed: https://skia.googlesource.com/skia/+/cc3a22b369e1a60fa2acf2987f2934baf7c4b198
Review-Url: https://codereview.chromium.org/2076143003
Diffstat (limited to 'src/gpu')
-rw-r--r-- | src/gpu/gl/GrGLProgramDataManager.cpp | 13 | ||||
-rw-r--r-- | src/gpu/gl/GrGLProgramDataManager.h | 1 | ||||
-rw-r--r-- | src/gpu/glsl/GrGLSLProgramDataManager.h | 1 | ||||
-rw-r--r-- | src/gpu/vk/GrVkPipelineStateDataManager.cpp | 8 | ||||
-rw-r--r-- | src/gpu/vk/GrVkPipelineStateDataManager.h | 1 |
5 files changed, 24 insertions, 0 deletions
diff --git a/src/gpu/gl/GrGLProgramDataManager.cpp b/src/gpu/gl/GrGLProgramDataManager.cpp index 9513a3fd57..056e7b73dd 100644 --- a/src/gpu/gl/GrGLProgramDataManager.cpp +++ b/src/gpu/gl/GrGLProgramDataManager.cpp @@ -89,6 +89,19 @@ void GrGLProgramDataManager::setSamplers(const SkTArray<GrGLSampler>& samplers) } } +void GrGLProgramDataManager::set1i(UniformHandle u, int32_t i) const { + const Uniform& uni = fUniforms[u.toIndex()]; + SkASSERT(uni.fType == kInt_GrSLType); + SkASSERT(GrGLSLShaderVar::kNonArray == uni.fArrayCount); + SkDEBUGCODE(this->printUnused(uni)); + if (kUnusedUniform != uni.fFSLocation) { + GR_GL_CALL(fGpu->glInterface(), Uniform1i(uni.fFSLocation, i)); + } + if (kUnusedUniform != uni.fVSLocation && uni.fVSLocation != uni.fFSLocation) { + GR_GL_CALL(fGpu->glInterface(), Uniform1i(uni.fVSLocation, i)); + } +} + void GrGLProgramDataManager::set1f(UniformHandle u, float v0) const { const Uniform& uni = fUniforms[u.toIndex()]; SkASSERT(uni.fType == kFloat_GrSLType); diff --git a/src/gpu/gl/GrGLProgramDataManager.h b/src/gpu/gl/GrGLProgramDataManager.h index 513b6a4ce6..b2c20400eb 100644 --- a/src/gpu/gl/GrGLProgramDataManager.h +++ b/src/gpu/gl/GrGLProgramDataManager.h @@ -53,6 +53,7 @@ public: /** Functions for uploading uniform values. The varities ending in v can be used to upload to an * array of uniforms. arrayCount must be <= the array count of the uniform. */ + void set1i(UniformHandle, int32_t) const override; void set1f(UniformHandle, float v0) const override; void set1fv(UniformHandle, int arrayCount, const float v[]) const override; void set2f(UniformHandle, float, float) const override; diff --git a/src/gpu/glsl/GrGLSLProgramDataManager.h b/src/gpu/glsl/GrGLSLProgramDataManager.h index 5d502cfd75..508cdf06f8 100644 --- a/src/gpu/glsl/GrGLSLProgramDataManager.h +++ b/src/gpu/glsl/GrGLSLProgramDataManager.h @@ -26,6 +26,7 @@ public: /** Functions for uploading uniform values. The varities ending in v can be used to upload to an * array of uniforms. arrayCount must be <= the array count of the uniform. */ + virtual void set1i(UniformHandle, int32_t) const = 0; virtual void set1f(UniformHandle, float v0) const = 0; virtual void set1fv(UniformHandle, int arrayCount, const float v[]) const = 0; virtual void set2f(UniformHandle, float, float) const = 0; diff --git a/src/gpu/vk/GrVkPipelineStateDataManager.cpp b/src/gpu/vk/GrVkPipelineStateDataManager.cpp index 638fdba365..13b363fa80 100644 --- a/src/gpu/vk/GrVkPipelineStateDataManager.cpp +++ b/src/gpu/vk/GrVkPipelineStateDataManager.cpp @@ -54,6 +54,14 @@ void* GrVkPipelineStateDataManager::getBufferPtrAndMarkDirty(const Uniform& uni) return buffer; } +void GrVkPipelineStateDataManager::set1i(UniformHandle u, int32_t i) const { + const Uniform& uni = fUniforms[u.toIndex()]; + SkASSERT(uni.fType == kInt_GrSLType); + SkASSERT(GrGLSLShaderVar::kNonArray == uni.fArrayCount); + void* buffer = this->getBufferPtrAndMarkDirty(uni); + memcpy(buffer, &i, sizeof(int32_t)); +} + void GrVkPipelineStateDataManager::set1f(UniformHandle u, float v0) const { const Uniform& uni = fUniforms[u.toIndex()]; SkASSERT(uni.fType == kFloat_GrSLType); diff --git a/src/gpu/vk/GrVkPipelineStateDataManager.h b/src/gpu/vk/GrVkPipelineStateDataManager.h index 0a035799b6..c22e779655 100644 --- a/src/gpu/vk/GrVkPipelineStateDataManager.h +++ b/src/gpu/vk/GrVkPipelineStateDataManager.h @@ -23,6 +23,7 @@ public: uint32_t vertexUniformSize, uint32_t fragmentUniformSize); + void set1i(UniformHandle, int32_t) const override; void set1f(UniformHandle, float v0) const override; void set1fv(UniformHandle, int arrayCount, const float v[]) const override; void set2f(UniformHandle, float, float) const override; |