summaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers/common/meta_blit.c
diff options
context:
space:
mode:
authorJuha-Pekka Heikkila <[email protected]>2014-09-08 13:50:08 +0300
committerTapani Pälli <[email protected]>2014-09-23 10:25:02 +0300
commite13a8dc37dde097710ea13bef24c022b263ea1eb (patch)
tree05f7b115940a47ac8499f17fc2bf0f8bd4b072c3 /src/mesa/drivers/common/meta_blit.c
parentba089cfa823e991ea53f62d61d087084a8e7381e (diff)
meta: Avoid null access on setup_glsl_msaa_blit_shader()
On default fallback path there was null access on src_rb Signed-off-by: Juha-Pekka Heikkila <[email protected]> Reviewed-by: Anuj Phogat <[email protected]>
Diffstat (limited to 'src/mesa/drivers/common/meta_blit.c')
-rw-r--r--src/mesa/drivers/common/meta_blit.c24
1 files changed, 13 insertions, 11 deletions
diff --git a/src/mesa/drivers/common/meta_blit.c b/src/mesa/drivers/common/meta_blit.c
index 3cd06a5f527..770bc4178a2 100644
--- a/src/mesa/drivers/common/meta_blit.c
+++ b/src/mesa/drivers/common/meta_blit.c
@@ -70,26 +70,28 @@ setup_glsl_msaa_blit_shader(struct gl_context *ctx,
const char *sampler_array_suffix = "";
char *name;
const char *texcoord_type = "vec2";
- const int samples = MAX2(src_rb->NumSamples, 1);
+ int samples;
int shader_offset = 0;
- /* We expect only power of 2 samples in source multisample buffer. */
- assert((samples & (samples - 1)) == 0);
- while (samples >> (shader_offset + 1)) {
- shader_offset++;
- }
- /* Update the assert if we plan to support more than 16X MSAA. */
- assert(shader_offset >= 0 && shader_offset <= 4);
-
if (src_rb) {
+ samples = MAX2(src_rb->NumSamples, 1);
src_datatype = _mesa_get_format_datatype(src_rb->Format);
} else {
/* depth-or-color glCopyTexImage fallback path that passes a NULL rb and
* doesn't handle integer.
*/
+ samples = 1;
src_datatype = GL_UNSIGNED_NORMALIZED;
}
+ /* We expect only power of 2 samples in source multisample buffer. */
+ assert((samples & (samples - 1)) == 0);
+ while (samples >> (shader_offset + 1)) {
+ shader_offset++;
+ }
+ /* Update the assert if we plan to support more than 16X MSAA. */
+ assert(shader_offset >= 0 && shader_offset <= 4);
+
if (ctx->DrawBuffer->Visual.samples > 1) {
/* If you're calling meta_BlitFramebuffer with the destination
* multisampled, this is the only path that will work -- swrast and
@@ -108,8 +110,8 @@ setup_glsl_msaa_blit_shader(struct gl_context *ctx,
switch (target) {
case GL_TEXTURE_2D_MULTISAMPLE:
case GL_TEXTURE_2D_MULTISAMPLE_ARRAY:
- if (src_rb->_BaseFormat == GL_DEPTH_COMPONENT ||
- src_rb->_BaseFormat == GL_DEPTH_STENCIL) {
+ if (src_rb && (src_rb->_BaseFormat == GL_DEPTH_COMPONENT ||
+ src_rb->_BaseFormat == GL_DEPTH_STENCIL)) {
if (dst_is_msaa)
shader_index = BLIT_MSAA_SHADER_2D_MULTISAMPLE_DEPTH_COPY;
else