summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Plattner <aplattner@nvidia.com>2020-05-18 15:27:01 -0700
committerAaron Plattner <aplattner@nvidia.com>2020-05-29 08:55:18 -0700
commita7c1f5fce6303a643fadff7d85d59934bd0cf6b6 (patch)
tree198b342299ead26c74d2fe320a93fe3b67d53200
parent139e81f1d8ddcd25dc207f4d65007c961464e47f (diff)
nvidia-settings: Make VDPAUDeviceFunctions static to ctkvdpau.c
GCC 10 defaults to building with -fno-common, which exposes a bug in nvidia-settings: The VDPAUDeviceFunctions structure is defined as global in ctkvdpau.h, so both ctkvdpau.o and ctkwindow.o have it as a global, non-static "tentative definition" symbol. The GCC 10 man page describes it like this: -fcommon In C code, this option controls the placement of global variables defined without an initializer, known as tentative definitions in the C standard. Tentative definitions are distinct from declarations of a variable with the "extern" keyword, which do not allocate storage. The default is -fno-common, which specifies that the compiler places uninitialized global variables in the BSS section of the object file. This inhibits the merging of tentative definitions by the linker so you get a multiple-definition error if the same variable is accidentally defined in more than one compilation unit. The -fcommon places uninitialized global variables in a common block. This allows the linker to resolve all tentative definitions of the same variable in different compilation units to the same object, or to a non-tentative definition. This behavior is inconsistent with C++, and on many targets implies a speed and code size penalty on global variable references. It is mainly useful to enable legacy code to link without errors. Since the copy of VDPAUDeviceFunctions in ctkwindow.o is not used, just remove it by moving the definition of this structure into ctkvdpau.c.
-rw-r--r--src/gtk+-2.x/ctkvdpau.c23
-rw-r--r--src/gtk+-2.x/ctkvdpau.h24
2 files changed, 23 insertions, 24 deletions
diff --git a/src/gtk+-2.x/ctkvdpau.c b/src/gtk+-2.x/ctkvdpau.c
index 2f120f0..6149c28 100644
--- a/src/gtk+-2.x/ctkvdpau.c
+++ b/src/gtk+-2.x/ctkvdpau.c
@@ -103,6 +103,29 @@ const gchar* __video_mixer_parameter_help =
const gchar* __video_mixer_attribute_help =
"This shows the video mixer attributes and any applicable ranges.";
+static struct VDPAUDeviceImpl {
+
+ VdpGetErrorString *GetErrorString;
+ VdpGetProcAddress *GetProcAddress;
+ VdpGetApiVersion *GetApiVersion;
+ VdpGetInformationString *GetInformationString;
+ VdpVideoSurfaceQueryCapabilities *VideoSurfaceQueryCapabilities;
+ VdpVideoSurfaceQueryGetPutBitsYCbCrCapabilities
+ *VideoSurfaceQueryGetPutBitsYCbCrCapabilities;
+ VdpOutputSurfaceQueryCapabilities *OutputSurfaceQueryCapabilities;
+ VdpOutputSurfaceQueryGetPutBitsNativeCapabilities
+ *OutputSurfaceQueryGetPutBitsNativeCapabilities;
+ VdpOutputSurfaceQueryPutBitsYCbCrCapabilities
+ *OutputSurfaceQueryPutBitsYCbCrCapabilities;
+ VdpBitmapSurfaceQueryCapabilities *BitmapSurfaceQueryCapabilities;
+ VdpDecoderQueryCapabilities *DecoderQueryCapabilities;
+ VdpVideoMixerQueryFeatureSupport *VideoMixerQueryFeatureSupport;
+ VdpVideoMixerQueryParameterSupport *VideoMixerQueryParameterSupport;
+ VdpVideoMixerQueryAttributeSupport *VideoMixerQueryAttributeSupport;
+ VdpVideoMixerQueryParameterValueRange *VideoMixerQueryParameterValueRange;
+ VdpVideoMixerQueryAttributeValueRange *VideoMixerQueryAttributeValueRange;
+} VDPAUDeviceFunctions;
+
static int queryOutputSurface(CtkVDPAU *ctk_vdpau, VdpDevice device,
VdpGetProcAddress *getProcAddress);
diff --git a/src/gtk+-2.x/ctkvdpau.h b/src/gtk+-2.x/ctkvdpau.h
index ec58d36..2652f6f 100644
--- a/src/gtk+-2.x/ctkvdpau.h
+++ b/src/gtk+-2.x/ctkvdpau.h
@@ -45,30 +45,6 @@ G_BEGIN_DECLS
#define CTK_VDPAU_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS ((obj), CTK_TYPE_VDPAU, CtkVDPAUClass))
-
-struct VDPAUDeviceImpl {
-
- VdpGetErrorString *GetErrorString;
- VdpGetProcAddress *GetProcAddress;
- VdpGetApiVersion *GetApiVersion;
- VdpGetInformationString *GetInformationString;
- VdpVideoSurfaceQueryCapabilities *VideoSurfaceQueryCapabilities;
- VdpVideoSurfaceQueryGetPutBitsYCbCrCapabilities
- *VideoSurfaceQueryGetPutBitsYCbCrCapabilities;
- VdpOutputSurfaceQueryCapabilities *OutputSurfaceQueryCapabilities;
- VdpOutputSurfaceQueryGetPutBitsNativeCapabilities
- *OutputSurfaceQueryGetPutBitsNativeCapabilities;
- VdpOutputSurfaceQueryPutBitsYCbCrCapabilities
- *OutputSurfaceQueryPutBitsYCbCrCapabilities;
- VdpBitmapSurfaceQueryCapabilities *BitmapSurfaceQueryCapabilities;
- VdpDecoderQueryCapabilities *DecoderQueryCapabilities;
- VdpVideoMixerQueryFeatureSupport *VideoMixerQueryFeatureSupport;
- VdpVideoMixerQueryParameterSupport *VideoMixerQueryParameterSupport;
- VdpVideoMixerQueryAttributeSupport *VideoMixerQueryAttributeSupport;
- VdpVideoMixerQueryParameterValueRange *VideoMixerQueryParameterValueRange;
- VdpVideoMixerQueryAttributeValueRange *VideoMixerQueryAttributeValueRange;
-} VDPAUDeviceFunctions;
-
/* Generic description structure */
typedef struct
{